open-edison 0.1.30__tar.gz → 0.1.34__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 (40) hide show
  1. {open_edison-0.1.30 → open_edison-0.1.34}/PKG-INFO +3 -3
  2. {open_edison-0.1.30 → open_edison-0.1.34}/README.md +2 -2
  3. {open_edison-0.1.30 → open_edison-0.1.34}/hatch_build.py +9 -0
  4. {open_edison-0.1.30 → open_edison-0.1.34}/pyproject.toml +5 -2
  5. {open_edison-0.1.30 → open_edison-0.1.34}/src/cli.py +2 -2
  6. {open_edison-0.1.30 → open_edison-0.1.34}/src/config.py +14 -1
  7. open_edison-0.1.34/src/frontend_dist/assets/index-BUUcUfTt.js +51 -0
  8. {open_edison-0.1.30 → open_edison-0.1.34}/src/frontend_dist/index.html +1 -1
  9. {open_edison-0.1.30 → open_edison-0.1.34}/src/server.py +15 -7
  10. {open_edison-0.1.30 → open_edison-0.1.34}/src/single_user_mcp.py +24 -0
  11. open_edison-0.1.30/src/frontend_dist/assets/index-DOR5YaNc.js +0 -51
  12. {open_edison-0.1.30 → open_edison-0.1.34}/.gitignore +0 -0
  13. {open_edison-0.1.30 → open_edison-0.1.34}/LICENSE +0 -0
  14. {open_edison-0.1.30 → open_edison-0.1.34}/config.json +0 -0
  15. {open_edison-0.1.30 → open_edison-0.1.34}/desktop_ext/README.md +0 -0
  16. {open_edison-0.1.30 → open_edison-0.1.34}/docs/README.md +0 -0
  17. {open_edison-0.1.30 → open_edison-0.1.34}/docs/architecture/single_user_design.md +0 -0
  18. {open_edison-0.1.30 → open_edison-0.1.34}/docs/core/configuration.md +0 -0
  19. {open_edison-0.1.30 → open_edison-0.1.34}/docs/core/project_structure.md +0 -0
  20. {open_edison-0.1.30 → open_edison-0.1.34}/docs/core/proxy_usage.md +0 -0
  21. {open_edison-0.1.30 → open_edison-0.1.34}/docs/deployment/docker.md +0 -0
  22. {open_edison-0.1.30 → open_edison-0.1.34}/docs/deployment/local.md +0 -0
  23. {open_edison-0.1.30 → open_edison-0.1.34}/docs/development/contributing.md +0 -0
  24. {open_edison-0.1.30 → open_edison-0.1.34}/docs/development/development_guide.md +0 -0
  25. {open_edison-0.1.30 → open_edison-0.1.34}/docs/development/testing.md +0 -0
  26. {open_edison-0.1.30 → open_edison-0.1.34}/docs/quick-reference/api_reference.md +0 -0
  27. {open_edison-0.1.30 → open_edison-0.1.34}/docs/quick-reference/config_quick_start.md +0 -0
  28. {open_edison-0.1.30 → open_edison-0.1.34}/prompt_permissions.json +0 -0
  29. {open_edison-0.1.30 → open_edison-0.1.34}/resource_permissions.json +0 -0
  30. {open_edison-0.1.30 → open_edison-0.1.34}/src/__init__.py +0 -0
  31. {open_edison-0.1.30 → open_edison-0.1.34}/src/__main__.py +0 -0
  32. {open_edison-0.1.30 → open_edison-0.1.34}/src/events.py +0 -0
  33. {open_edison-0.1.30 → open_edison-0.1.34}/src/frontend_dist/assets/index-o6_8mdM8.css +0 -0
  34. {open_edison-0.1.30 → open_edison-0.1.34}/src/frontend_dist/sw.js +0 -0
  35. {open_edison-0.1.30 → open_edison-0.1.34}/src/middleware/data_access_tracker.py +0 -0
  36. {open_edison-0.1.30 → open_edison-0.1.34}/src/middleware/session_tracking.py +0 -0
  37. {open_edison-0.1.30 → open_edison-0.1.34}/src/oauth_manager.py +0 -0
  38. {open_edison-0.1.30 → open_edison-0.1.34}/src/permissions.py +0 -0
  39. {open_edison-0.1.30 → open_edison-0.1.34}/src/telemetry.py +0 -0
  40. {open_edison-0.1.30 → open_edison-0.1.34}/tool_permissions.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-edison
3
- Version: 0.1.30
3
+ Version: 0.1.34
4
4
  Summary: Open-source MCP security, aggregation, and monitoring. Single-user, self-hosted MCP proxy.
5
5
  Author-email: Hugo Berg <hugo@edison.watch>
6
6
  License-File: LICENSE
@@ -28,9 +28,9 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  # OpenEdison 🔒⚡️
30
30
 
31
- > The secure MCP proxy gateway
31
+ > The Secure MCP Control Panel
32
32
 
33
- Connect AI to your data/software securely without risk of data exfiltration. Gain visibility, block threats, and get alerts on the data your agent is reading/writing. No more "approve fatigue" with the MCP tool-call approvals.
33
+ Connect AI to your data/software securely without risk of data exfiltration. Gain visibility, block threats, and get alerts on the data your agent is reading/writing.
34
34
 
35
35
  OpenEdison solves the [lethal trifecta problem](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/), which can cause agent hijacking & data exfiltration by malicious actors.
36
36
 
@@ -1,8 +1,8 @@
1
1
  # OpenEdison 🔒⚡️
2
2
 
3
- > The secure MCP proxy gateway
3
+ > The Secure MCP Control Panel
4
4
 
5
- Connect AI to your data/software securely without risk of data exfiltration. Gain visibility, block threats, and get alerts on the data your agent is reading/writing. No more "approve fatigue" with the MCP tool-call approvals.
5
+ Connect AI to your data/software securely without risk of data exfiltration. Gain visibility, block threats, and get alerts on the data your agent is reading/writing.
6
6
 
7
7
  OpenEdison solves the [lethal trifecta problem](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/), which can cause agent hijacking & data exfiltration by malicious actors.
8
8
 
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  import shutil
4
5
  from pathlib import Path
5
6
 
@@ -22,6 +23,14 @@ class BuildHook(BuildHookInterface): # type: ignore
22
23
  src_frontend_dist = project_root / "src" / "frontend_dist"
23
24
  repo_frontend_dist = project_root / "frontend" / "dist"
24
25
 
26
+ # Opt-in enforcement: only enforce when OPEN_EDISON_REQUIRE_FRONTEND=1/true/yes
27
+ enforce = os.environ.get("OPEN_EDISON_REQUIRE_FRONTEND", "").lower() in {"1", "true", "yes"}
28
+ if not enforce:
29
+ self.app.display_info(
30
+ "Skipping frontend_dist enforcement (set OPEN_EDISON_REQUIRE_FRONTEND=1 to enforce)"
31
+ )
32
+ return
33
+
25
34
  # Fast path: already present in src/
26
35
  if (src_frontend_dist / "index.html").exists():
27
36
  self.app.display_info("frontend_dist already present; skipping build/copy")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "open-edison"
3
- version = "0.1.30"
3
+ version = "0.1.34"
4
4
  description = "Open-source MCP security, aggregation, and monitoring. Single-user, self-hosted MCP proxy."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -67,7 +67,7 @@ include = [
67
67
  "src/frontend_dist/**",
68
68
  ]
69
69
 
70
- [tool.hatch.build.hooks.custom]
70
+ [tool.hatch.build.targets.wheel.hooks.custom]
71
71
  path = "hatch_build.py"
72
72
 
73
73
 
@@ -85,6 +85,9 @@ include = [
85
85
  ]
86
86
  force-include = { "src/frontend_dist" = "src/frontend_dist" }
87
87
 
88
+ [tool.hatch.build.targets.sdist.hooks.custom]
89
+ path = "hatch_build.py"
90
+
88
91
  [tool.ruff]
89
92
  line-length = 100
90
93
  target-version = "py312"
@@ -17,7 +17,7 @@ from typing import Any, NoReturn, cast
17
17
 
18
18
  from loguru import logger as _log # type: ignore[reportMissingImports]
19
19
 
20
- from .config import Config, get_config_dir
20
+ from .config import Config, get_config_dir, get_config_json_path
21
21
  from .server import OpenEdisonProxy
22
22
 
23
23
  log: Any = _log
@@ -191,7 +191,7 @@ async def _run_server(args: Any) -> None:
191
191
  config_dir = get_config_dir()
192
192
 
193
193
  # Load config after setting env override
194
- cfg = Config(config_dir)
194
+ cfg = Config(get_config_json_path())
195
195
 
196
196
  host = getattr(args, "host", None) or cfg.server.host
197
197
  port = getattr(args, "port", None) or cfg.server.port
@@ -252,7 +252,20 @@ class Config:
252
252
  }
253
253
 
254
254
  # Ensure directory exists
255
- config_path.parent.mkdir(parents=True, exist_ok=True)
255
+ try:
256
+ config_path.parent.mkdir(parents=True, exist_ok=True)
257
+ except FileExistsError as e:
258
+ # If the parent path exists as a file, not a directory, this will fail
259
+ if config_path.parent.is_file():
260
+ log.error(
261
+ f"Config directory path {config_path.parent} exists as a file, not a directory"
262
+ )
263
+ log.error("Please remove the file or specify a different config directory")
264
+ raise FileExistsError(
265
+ f"Config directory path {config_path.parent} exists as a file, not a directory"
266
+ ) from e
267
+ log.error(f"Failed to create config directory {config_path.parent}: {e}")
268
+ raise
256
269
  with open(config_path, "w") as f:
257
270
  json.dump(data, f, indent=2)
258
271