diff --git a/cortex/governance/cli.py b/cortex/governance/cli.py index 7b3e1b6..198349d 100644 --- a/cortex/governance/cli.py +++ b/cortex/governance/cli.py @@ -45,20 +45,20 @@ def _build_context(args: argparse.Namespace) -> dict: def _get_engine(): - from governance.policy import PolicyEngine + from cortex.governance.policy import PolicyEngine return PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR) def _get_scorer(): - from governance.risk_scorer import RiskScorer + from cortex.governance.risk_scorer import RiskScorer return RiskScorer() def _get_enforcer(): - from governance.enforcer import Enforcer - from governance.policy import PolicyEngine - from governance.risk_scorer import RiskScorer - from governance.evidence import EvidenceCollector, ControlMapping + from cortex.governance.enforcer import Enforcer + from cortex.governance.policy import PolicyEngine + from cortex.governance.risk_scorer import RiskScorer + from cortex.governance.evidence import EvidenceCollector, ControlMapping return Enforcer( policy_engine=PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR), @@ -150,8 +150,8 @@ def cmd_status(args: argparse.Namespace) -> None: def cmd_report(args: argparse.Namespace) -> None: """Generate compliance report (placeholder — needs live evidence).""" - from governance.evidence import EvidenceCollector, ControlMapping - from governance.report_generator import ReportGenerator + from cortex.governance.evidence import EvidenceCollector, ControlMapping + from cortex.governance.report_generator import ReportGenerator collector = EvidenceCollector( control_mapping=ControlMapping(DEFAULT_CONTROLS_MAPPING) diff --git a/cortex/governance/enforcer.py b/cortex/governance/enforcer.py index 8350fe3..87b7136 100644 --- a/cortex/governance/enforcer.py +++ b/cortex/governance/enforcer.py @@ -10,9 +10,9 @@ import logging from dataclasses import dataclass from typing import Any -from governance.evidence import EvidenceCollector -from governance.policy import PolicyEngine -from governance.risk_scorer import RiskResult, RiskScorer +from cortex.governance.evidence import EvidenceCollector +from cortex.governance.policy import PolicyEngine +from cortex.governance.risk_scorer import RiskResult, RiskScorer logger = logging.getLogger(__name__) diff --git a/cortex/governance/report_generator.py b/cortex/governance/report_generator.py index 22e6b08..55f7abc 100644 --- a/cortex/governance/report_generator.py +++ b/cortex/governance/report_generator.py @@ -13,7 +13,7 @@ from dataclasses import dataclass from datetime import datetime, timezone from typing import Any -from governance.evidence import EvidenceCollector, EvidenceRecord +from cortex.governance.evidence import EvidenceCollector, EvidenceRecord logger = logging.getLogger(__name__) diff --git a/tests/test_governance_enforcer.py b/tests/test_governance_enforcer.py index 6d065e9..184481d 100644 --- a/tests/test_governance_enforcer.py +++ b/tests/test_governance_enforcer.py @@ -8,10 +8,10 @@ import pytest sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) -from governance.enforcer import Enforcer, Decision -from governance.policy import PolicyEngine -from governance.risk_scorer import RiskScorer -from governance.evidence import EvidenceCollector, ControlMapping +from cortex.governance.enforcer import Enforcer, Decision +from cortex.governance.policy import PolicyEngine +from cortex.governance.risk_scorer import RiskScorer +from cortex.governance.evidence import EvidenceCollector, ControlMapping def _make_enforcer(tmp_path, rules=None): diff --git a/tests/test_governance_evidence.py b/tests/test_governance_evidence.py index 7720d7e..b8fae2b 100644 --- a/tests/test_governance_evidence.py +++ b/tests/test_governance_evidence.py @@ -9,7 +9,7 @@ import pytest sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) -from governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping +from cortex.governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping class TestControlMapping: diff --git a/tests/test_governance_report.py b/tests/test_governance_report.py index c8df768..7a36727 100644 --- a/tests/test_governance_report.py +++ b/tests/test_governance_report.py @@ -6,8 +6,8 @@ from pathlib import Path sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) -from governance.evidence import EvidenceCollector, ControlMapping -from governance.report_generator import ReportGenerator +from cortex.governance.evidence import EvidenceCollector, ControlMapping +from cortex.governance.report_generator import ReportGenerator class TestReportGenerator: diff --git a/tests/test_governance_risk_scorer.py b/tests/test_governance_risk_scorer.py index e695fa2..2116405 100644 --- a/tests/test_governance_risk_scorer.py +++ b/tests/test_governance_risk_scorer.py @@ -5,7 +5,7 @@ from pathlib import Path sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) -from governance.risk_scorer import RiskScorer, RiskResult, _classify_level +from cortex.governance.risk_scorer import RiskScorer, RiskResult, _classify_level class TestClassifyLevel: diff --git a/tests/test_knowledge_cleanup.py b/tests/test_knowledge_cleanup.py index 9f6c213..2d0a8a1 100644 --- a/tests/test_knowledge_cleanup.py +++ b/tests/test_knowledge_cleanup.py @@ -9,7 +9,7 @@ from unittest.mock import patch, MagicMock sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence")) -import knowledge_cleanup as kc +import cortex.intelligence.knowledge_cleanup as kc class TestBackup: @@ -107,28 +107,28 @@ class TestScoreRelationships: class TestClassifyUnknowns: - @patch("knowledge_cleanup.ollama_generate") + @patch("cortex.intelligence.knowledge_cleanup.ollama_generate") def test_no_unknowns(self, mock_ollama): entities = {"albert": {"type": "person"}} result = kc.classify_unknowns(entities, dry_run=False) mock_ollama.assert_not_called() assert result == entities - @patch("knowledge_cleanup.ollama_generate") + @patch("cortex.intelligence.knowledge_cleanup.ollama_generate") def test_classifies_unknowns(self, mock_ollama): mock_ollama.return_value = '{"1": "person"}' entities = {"albert": {"type": "unknown"}} result = kc.classify_unknowns(entities, dry_run=False) assert result["albert"]["type"] == "person" - @patch("knowledge_cleanup.ollama_generate") + @patch("cortex.intelligence.knowledge_cleanup.ollama_generate") def test_dry_run_no_change(self, mock_ollama): mock_ollama.return_value = '{"1": "person"}' entities = {"albert": {"type": "unknown"}} result = kc.classify_unknowns(entities, dry_run=True) assert result["albert"]["type"] == "unknown" - @patch("knowledge_cleanup.ollama_generate") + @patch("cortex.intelligence.knowledge_cleanup.ollama_generate") def test_handles_llm_failure(self, mock_ollama): mock_ollama.side_effect = Exception("timeout") entities = {"albert": {"type": "unknown"}} diff --git a/tests/test_knowledge_extractor.py b/tests/test_knowledge_extractor.py index 40a13c4..e260269 100644 --- a/tests/test_knowledge_extractor.py +++ b/tests/test_knowledge_extractor.py @@ -6,7 +6,7 @@ from unittest.mock import patch sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) -from knowledge_extractor import importance_heuristic, parse_since +from cortex.knowledge_extractor import importance_heuristic, parse_since class TestImportanceHeuristic: diff --git a/tests/test_llm_extractor.py b/tests/test_llm_extractor.py index 34bdd14..9216af3 100644 --- a/tests/test_llm_extractor.py +++ b/tests/test_llm_extractor.py @@ -7,7 +7,7 @@ from unittest.mock import patch, MagicMock sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence")) -from llm_extractor import ( +from cortex.intelligence.llm_extractor import ( _parse_json_response, _normalize_entities, extract_entities_llm, @@ -83,26 +83,26 @@ class TestNormalizeEntities: class TestExtractEntitiesLlm: - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_empty_text(self, mock_ollama): assert extract_entities_llm("") == {} assert extract_entities_llm("short") == {} mock_ollama.assert_not_called() - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_ollama_unavailable(self, mock_ollama): mock_ollama.return_value = None result = extract_entities_llm("This is a test about Albert and Mondo Gate AG") assert result is None # signals fallback - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_successful_extraction(self, mock_ollama): mock_ollama.return_value = '{"albert": {"type": "person", "context": "mentioned"}}' result = extract_entities_llm("Albert discussed the project with the team members today") assert "albert" in result assert result["albert"]["type"] == "person" - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_truncates_long_text(self, mock_ollama): mock_ollama.return_value = "{}" extract_entities_llm("x" * 3000) @@ -112,19 +112,19 @@ class TestExtractEntitiesLlm: class TestExtractEntitiesLlmBatch: - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_empty_list(self, mock_ollama): assert extract_entities_llm_batch([]) == {} mock_ollama.assert_not_called() - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_filters_short_texts(self, mock_ollama): mock_ollama.return_value = "{}" result = extract_entities_llm_batch(["hi", "yo", ""]) assert result == {} mock_ollama.assert_not_called() - @patch("llm_extractor._call_ollama") + @patch("cortex.intelligence.llm_extractor._call_ollama") def test_batch_extraction(self, mock_ollama): mock_ollama.return_value = '{"python": {"type": "technology", "context": "language"}}' result = extract_entities_llm_batch(["Python is a great programming language for data science"]) @@ -132,7 +132,7 @@ class TestExtractEntitiesLlmBatch: class TestIsAvailable: - @patch("llm_extractor.urllib.request.urlopen") + @patch("cortex.intelligence.llm_extractor.urllib.request.urlopen") def test_available(self, mock_urlopen): mock_resp = MagicMock() mock_resp.status = 200 @@ -141,7 +141,7 @@ class TestIsAvailable: mock_urlopen.return_value = mock_resp assert is_available() is True - @patch("llm_extractor.urllib.request.urlopen") + @patch("cortex.intelligence.llm_extractor.urllib.request.urlopen") def test_unavailable(self, mock_urlopen): mock_urlopen.side_effect = Exception("connection refused") assert is_available() is False diff --git a/tests/test_loop.py b/tests/test_loop.py index 209ed7a..3478658 100644 --- a/tests/test_loop.py +++ b/tests/test_loop.py @@ -9,7 +9,7 @@ from unittest.mock import patch, MagicMock sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence")) -import loop as darkplex_loop +import cortex.intelligence.loop as darkplex_loop class TestImportance: @@ -101,19 +101,19 @@ class TestLoopState: class TestCheckNewEvents: - @patch("loop.subprocess.run") + @patch("cortex.intelligence.loop.subprocess.run") def test_returns_pending(self, mock_run): mock_run.return_value = MagicMock( returncode=0, stdout=json.dumps({"num_pending": 42}) ) assert darkplex_loop.check_new_events() == 42 - @patch("loop.subprocess.run") + @patch("cortex.intelligence.loop.subprocess.run") def test_returns_negative_on_failure(self, mock_run): mock_run.return_value = MagicMock(returncode=1, stdout="") assert darkplex_loop.check_new_events() == -1 - @patch("loop.subprocess.run") + @patch("cortex.intelligence.loop.subprocess.run") def test_handles_exception(self, mock_run): mock_run.side_effect = Exception("nats not found") assert darkplex_loop.check_new_events() == -1 diff --git a/tests/test_temporal.py b/tests/test_temporal.py index 8cd6d79..7302eac 100644 --- a/tests/test_temporal.py +++ b/tests/test_temporal.py @@ -9,7 +9,7 @@ import pytest sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence")) -from temporal import TemporalEntry, TemporalQuery, TemporalContext +from cortex.intelligence.temporal import TemporalEntry, TemporalQuery, TemporalContext class TestTemporalEntry: