@marsnme/mcp-gateway 0.1.1
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.
- package/deploy/phase2/build_release_artifact.sh +56 -0
- package/deploy/phase3/smoke_gate.sh +223 -0
- package/deploy/systemd/memory-mcp-gateway@.service +26 -0
- package/package.json +41 -0
- package/scripts/dream_runner.py +779 -0
- package/scripts/hermes_digest_runner.py +36 -0
- package/scripts/tests/test_dream_runner_modes.py +90 -0
- package/server.mjs +4347 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import importlib.util
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
def load_dream_runner():
|
|
8
|
+
script_path = Path(__file__).resolve().parent / "dream_runner.py"
|
|
9
|
+
if not script_path.exists():
|
|
10
|
+
raise RuntimeError(f"dream runner not found: {script_path}")
|
|
11
|
+
spec = importlib.util.spec_from_file_location("dream_runner", script_path)
|
|
12
|
+
if spec is None or spec.loader is None:
|
|
13
|
+
raise RuntimeError(f"cannot load dream runner module: {script_path}")
|
|
14
|
+
module = importlib.util.module_from_spec(spec)
|
|
15
|
+
spec.loader.exec_module(module)
|
|
16
|
+
return module
|
|
17
|
+
|
|
18
|
+
def bridge_legacy_env():
|
|
19
|
+
if "DREAM_ENABLED" not in os.environ and "HERMES_ENABLED" in os.environ:
|
|
20
|
+
os.environ["DREAM_ENABLED"] = os.environ["HERMES_ENABLED"]
|
|
21
|
+
if "DREAM_MODE" not in os.environ:
|
|
22
|
+
os.environ["DREAM_MODE"] = "pro"
|
|
23
|
+
if "DREAM_COMPAT_HERMES" not in os.environ:
|
|
24
|
+
os.environ["DREAM_COMPAT_HERMES"] = "true"
|
|
25
|
+
|
|
26
|
+
def main() -> int:
|
|
27
|
+
try:
|
|
28
|
+
bridge_legacy_env()
|
|
29
|
+
runner = load_dream_runner()
|
|
30
|
+
return int(runner.main())
|
|
31
|
+
except Exception as exc:
|
|
32
|
+
print(json.dumps({"ok": False, "error": str(exc)}, ensure_ascii=False))
|
|
33
|
+
return 1
|
|
34
|
+
|
|
35
|
+
if __name__ == "__main__":
|
|
36
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
import subprocess
|
|
4
|
+
import tempfile
|
|
5
|
+
import unittest
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
ROOT = Path(__file__).resolve().parents[3]
|
|
11
|
+
DREAM_RUNNER = ROOT / "soul-memory" / "scripts" / "dream_runner.py"
|
|
12
|
+
HERMES_WRAPPER = ROOT / "soul-memory" / "scripts" / "hermes_digest_runner.py"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DreamRunnerModeTests(unittest.TestCase):
|
|
16
|
+
def _run_script(
|
|
17
|
+
self,
|
|
18
|
+
script: Path,
|
|
19
|
+
extra_env: dict[str, str],
|
|
20
|
+
unset_keys: Optional[list[str]] = None,
|
|
21
|
+
) -> dict:
|
|
22
|
+
with tempfile.TemporaryDirectory(prefix="dream-runner-test-") as tmp_home:
|
|
23
|
+
env = os.environ.copy()
|
|
24
|
+
env.update(
|
|
25
|
+
{
|
|
26
|
+
"HOME": tmp_home,
|
|
27
|
+
"DREAM_ENV_FILE": str(Path(tmp_home) / ".env.none"),
|
|
28
|
+
"DREAM_PROFILE_ENV_FILE": str(Path(tmp_home) / ".profile.env.none"),
|
|
29
|
+
"DREAM_ENABLED": "false",
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
for key in unset_keys or []:
|
|
33
|
+
env.pop(key, None)
|
|
34
|
+
env.update(extra_env)
|
|
35
|
+
result = subprocess.run(
|
|
36
|
+
["python3", str(script)],
|
|
37
|
+
cwd=str(ROOT),
|
|
38
|
+
capture_output=True,
|
|
39
|
+
text=True,
|
|
40
|
+
check=False,
|
|
41
|
+
env=env,
|
|
42
|
+
)
|
|
43
|
+
self.assertEqual(
|
|
44
|
+
result.returncode,
|
|
45
|
+
0,
|
|
46
|
+
msg=f"script failed: {result.stderr.strip()}\nstdout={result.stdout.strip()}",
|
|
47
|
+
)
|
|
48
|
+
lines = [line.strip() for line in result.stdout.splitlines() if line.strip()]
|
|
49
|
+
self.assertTrue(lines, msg="script produced no output")
|
|
50
|
+
return json.loads(lines[-1])
|
|
51
|
+
|
|
52
|
+
def test_default_mode_is_standard_when_unset(self):
|
|
53
|
+
payload = self._run_script(DREAM_RUNNER, {"DREAM_MODE": ""})
|
|
54
|
+
self.assertTrue(payload.get("ok"))
|
|
55
|
+
self.assertTrue(payload.get("skipped"))
|
|
56
|
+
self.assertEqual(payload.get("mode"), "standard")
|
|
57
|
+
|
|
58
|
+
def test_lite_mode_respected(self):
|
|
59
|
+
payload = self._run_script(DREAM_RUNNER, {"DREAM_MODE": "lite"})
|
|
60
|
+
self.assertTrue(payload.get("ok"))
|
|
61
|
+
self.assertTrue(payload.get("skipped"))
|
|
62
|
+
self.assertEqual(payload.get("mode"), "lite")
|
|
63
|
+
|
|
64
|
+
def test_pro_mode_respected(self):
|
|
65
|
+
payload = self._run_script(DREAM_RUNNER, {"DREAM_MODE": "pro"})
|
|
66
|
+
self.assertTrue(payload.get("ok"))
|
|
67
|
+
self.assertTrue(payload.get("skipped"))
|
|
68
|
+
self.assertEqual(payload.get("mode"), "pro")
|
|
69
|
+
|
|
70
|
+
def test_invalid_mode_falls_back_to_standard(self):
|
|
71
|
+
payload = self._run_script(DREAM_RUNNER, {"DREAM_MODE": "weird-mode"})
|
|
72
|
+
self.assertTrue(payload.get("ok"))
|
|
73
|
+
self.assertTrue(payload.get("skipped"))
|
|
74
|
+
self.assertEqual(payload.get("mode"), "standard")
|
|
75
|
+
|
|
76
|
+
def test_legacy_wrapper_bridges_to_dream_and_defaults_to_pro(self):
|
|
77
|
+
payload = self._run_script(
|
|
78
|
+
HERMES_WRAPPER,
|
|
79
|
+
{
|
|
80
|
+
"HERMES_ENABLED": "false",
|
|
81
|
+
},
|
|
82
|
+
unset_keys=["DREAM_ENABLED", "DREAM_MODE"],
|
|
83
|
+
)
|
|
84
|
+
self.assertTrue(payload.get("ok"))
|
|
85
|
+
self.assertTrue(payload.get("skipped"))
|
|
86
|
+
self.assertEqual(payload.get("mode"), "pro")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == "__main__":
|
|
90
|
+
unittest.main()
|