omni-cortex 1.17.0__tar.gz → 1.17.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/PKG-INFO +1 -1
  2. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/main.py +43 -13
  3. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/__init__.py +1 -1
  4. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/pyproject.toml +2 -2
  5. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/.gitignore +0 -0
  6. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/LICENSE +0 -0
  7. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/README.md +0 -0
  8. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/.env.example +0 -0
  9. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/backfill_summaries.py +0 -0
  10. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/chat_service.py +0 -0
  11. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/database.py +0 -0
  12. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/image_service.py +0 -0
  13. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/logging_config.py +0 -0
  14. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/models.py +0 -0
  15. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/project_config.py +0 -0
  16. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/project_scanner.py +0 -0
  17. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/prompt_security.py +0 -0
  18. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/pyproject.toml +0 -0
  19. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/security.py +0 -0
  20. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/uv.lock +0 -0
  21. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/dashboard/backend/websocket_manager.py +0 -0
  22. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/post_tool_use.py +0 -0
  23. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/pre_tool_use.py +0 -0
  24. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/session_utils.py +0 -0
  25. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/stop.py +0 -0
  26. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/subagent_stop.py +0 -0
  27. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/hooks/user_prompt.py +0 -0
  28. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/categorization/__init__.py +0 -0
  29. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/categorization/auto_tags.py +0 -0
  30. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/categorization/auto_type.py +0 -0
  31. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/config.py +0 -0
  32. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/dashboard.py +0 -0
  33. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/database/__init__.py +0 -0
  34. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/database/connection.py +0 -0
  35. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/database/migrations.py +0 -0
  36. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/database/schema.py +0 -0
  37. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/database/sync.py +0 -0
  38. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/decay/__init__.py +0 -0
  39. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/decay/importance.py +0 -0
  40. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/embeddings/__init__.py +0 -0
  41. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/embeddings/local.py +0 -0
  42. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/__init__.py +0 -0
  43. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/activity.py +0 -0
  44. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/agent.py +0 -0
  45. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/memory.py +0 -0
  46. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/relationship.py +0 -0
  47. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/models/session.py +0 -0
  48. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/resources/__init__.py +0 -0
  49. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/search/__init__.py +0 -0
  50. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/search/hybrid.py +0 -0
  51. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/search/keyword.py +0 -0
  52. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/search/ranking.py +0 -0
  53. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/search/semantic.py +0 -0
  54. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/server.py +0 -0
  55. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/setup.py +0 -0
  56. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/tools/__init__.py +0 -0
  57. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/tools/activities.py +0 -0
  58. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/tools/memories.py +0 -0
  59. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/tools/sessions.py +0 -0
  60. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/tools/utilities.py +0 -0
  61. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/utils/__init__.py +0 -0
  62. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/utils/formatting.py +0 -0
  63. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/utils/ids.py +0 -0
  64. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/utils/timestamps.py +0 -0
  65. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/omni_cortex/utils/truncation.py +0 -0
  66. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/check-venv.py +0 -0
  67. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/generate_storage_architecture_pdf.py +0 -0
  68. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/import_ken_memories.py +0 -0
  69. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/populate_session_data.py +0 -0
  70. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/setup.py +0 -0
  71. {omni_cortex-1.17.0 → omni_cortex-1.17.2}/scripts/update_docs_pdfs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omni-cortex
3
- Version: 1.17.0
3
+ Version: 1.17.2
4
4
  Summary: Give Claude Code a perfect memory - auto-logs everything, searches smartly, and gets smarter over time
5
5
  Project-URL: Homepage, https://github.com/AllCytes/Omni-Cortex
6
6
  Project-URL: Repository, https://github.com/AllCytes/Omni-Cortex
@@ -791,7 +791,8 @@ async def list_activities(
791
791
  # Ensure migrations are applied (adds summary columns if missing)
792
792
  ensure_migrations(project)
793
793
 
794
- return get_activities(project, event_type, tool_name, limit, offset)
794
+ activities = get_activities(project, event_type, tool_name, limit, offset)
795
+ return {"activities": activities, "count": len(activities)}
795
796
 
796
797
 
797
798
  @app.get("/api/timeline")
@@ -1693,9 +1694,12 @@ async def get_agent_stats_endpoint(
1693
1694
  # --- ADW Endpoints ---
1694
1695
 
1695
1696
 
1696
- def scan_adw_folder() -> list[dict]:
1697
- """Scan agents/ folder for ADW runs."""
1698
- agents_dir = Path("agents")
1697
+ def scan_adw_folder(project_path: str) -> list[dict]:
1698
+ """Scan agents/ folder for ADW runs relative to project directory."""
1699
+ # Get project directory from db path (e.g., /project/.cortex/cortex.db -> /project)
1700
+ project_dir = Path(project_path).parent.parent if project_path.endswith(".db") else Path(project_path)
1701
+ agents_dir = project_dir / "agents"
1702
+
1699
1703
  if not agents_dir.exists():
1700
1704
  return []
1701
1705
 
@@ -1712,7 +1716,8 @@ def scan_adw_folder() -> list[dict]:
1712
1716
  "status": state.get("status", "unknown"),
1713
1717
  "current_phase": state.get("current_phase", "unknown"),
1714
1718
  "phases_completed": len(state.get("completed_phases", [])),
1715
- "phases_total": 4 # plan, build, validate, release
1719
+ "phases_total": 4, # plan, build, validate, release
1720
+ "project_path": str(project_dir)
1716
1721
  })
1717
1722
  except json.JSONDecodeError:
1718
1723
  pass
@@ -1724,7 +1729,9 @@ def scan_adw_folder() -> list[dict]:
1724
1729
 
1725
1730
  def get_adw_state_with_agents(adw_id: str, db_path: str) -> Optional[dict]:
1726
1731
  """Get ADW state with correlated agent activity."""
1727
- adw_dir = Path(f"agents/{adw_id}")
1732
+ # Get project directory from db path
1733
+ project_dir = Path(db_path).parent.parent if db_path.endswith(".db") else Path(db_path)
1734
+ adw_dir = project_dir / "agents" / adw_id
1728
1735
  state_file = adw_dir / "adw_state.json"
1729
1736
 
1730
1737
  if not state_file.exists():
@@ -1749,17 +1756,37 @@ def get_adw_state_with_agents(adw_id: str, db_path: str) -> Optional[dict]:
1749
1756
  else:
1750
1757
  status = "pending"
1751
1758
 
1752
- # Find agents that ran in this phase (from output files)
1753
- agent_ids = []
1759
+ # Find agents that ran in this phase (from output files) and count calls
1760
+ phase_agents = []
1761
+ total_phase_calls = 0
1754
1762
  if phase_dir.exists():
1755
1763
  for output_file in phase_dir.glob("*_output.jsonl"):
1756
1764
  agent_name = output_file.stem.replace("_output", "")
1757
- agent_ids.append(agent_name)
1765
+ # Count tool_use entries in the JSONL file
1766
+ call_count = 0
1767
+ try:
1768
+ with open(output_file, "r", encoding="utf-8") as f:
1769
+ for line in f:
1770
+ try:
1771
+ entry = json.loads(line)
1772
+ if entry.get("type") == "tool_use":
1773
+ call_count += 1
1774
+ except json.JSONDecodeError:
1775
+ pass
1776
+ except Exception:
1777
+ pass
1778
+ phase_agents.append({
1779
+ "id": agent_name,
1780
+ "call_count": call_count
1781
+ })
1782
+ total_phase_calls += call_count
1758
1783
 
1759
1784
  phases.append({
1760
1785
  "name": phase_name,
1761
1786
  "status": status,
1762
- "agent_ids": agent_ids,
1787
+ "agents": phase_agents, # Now includes id and call_count
1788
+ "agent_ids": [a["id"] for a in phase_agents], # Keep for backwards compat
1789
+ "call_count": total_phase_calls,
1763
1790
  "duration_seconds": None # Could be computed from timestamps if needed
1764
1791
  })
1765
1792
 
@@ -1776,9 +1803,12 @@ def get_adw_state_with_agents(adw_id: str, db_path: str) -> Optional[dict]:
1776
1803
 
1777
1804
 
1778
1805
  @app.get("/api/adw/list")
1779
- async def list_adw_runs(limit: int = Query(20, ge=1, le=100)):
1780
- """List all ADW runs from agents/ folder."""
1781
- adw_runs = scan_adw_folder()[:limit]
1806
+ async def list_adw_runs(
1807
+ project: str = Query(..., description="Path to the database file"),
1808
+ limit: int = Query(20, ge=1, le=100)
1809
+ ):
1810
+ """List all ADW runs from agents/ folder for the selected project."""
1811
+ adw_runs = scan_adw_folder(project)[:limit]
1782
1812
  return {"adw_runs": adw_runs, "count": len(adw_runs)}
1783
1813
 
1784
1814
 
@@ -1,3 +1,3 @@
1
1
  """Omni Cortex MCP - Universal Memory System for Claude Code."""
2
2
 
3
- __version__ = "1.17.0"
3
+ __version__ = "1.17.1"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "omni-cortex"
7
- version = "1.17.0"
7
+ version = "1.17.2"
8
8
  description = "Give Claude Code a perfect memory - auto-logs everything, searches smartly, and gets smarter over time"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -62,7 +62,7 @@ omni-cortex-dashboard = "omni_cortex.dashboard:main"
62
62
  sources = ["src"]
63
63
 
64
64
  [tool.hatch.build.targets.wheel]
65
- packages = ["src/omni_cortex"]
65
+ packages = ["omni_cortex"]
66
66
 
67
67
  [tool.hatch.build.targets.sdist]
68
68
  include = [
File without changes
File without changes
File without changes
File without changes