personal memory agent
at main 59 lines 1.9 kB view raw
1# SPDX-License-Identifier: AGPL-3.0-only 2# Copyright (c) 2026 sol pbc 3 4import importlib 5import sys 6from types import SimpleNamespace 7 8 9def _setup_genai(monkeypatch): 10 import types 11 12 google_mod = types.ModuleType("google") 13 genai_mod = types.ModuleType("google.genai") 14 15 class DummyModels: 16 def generate_content(self, *a, **k): 17 DummyModels.kwargs = {"args": a, "kwargs": k} 18 return SimpleNamespace(text="plan") 19 20 class DummyClient: 21 def __init__(self, *a, **k): 22 self.models = SimpleNamespace( 23 generate_content=DummyModels().generate_content 24 ) 25 26 genai_mod.Client = DummyClient 27 genai_mod.types = types.SimpleNamespace( 28 GenerateContentConfig=lambda **k: SimpleNamespace(**k), 29 ThinkingConfig=lambda **k: SimpleNamespace(**k), 30 ) 31 google_mod.genai = genai_mod 32 monkeypatch.setitem(sys.modules, "google", google_mod) 33 monkeypatch.setitem(sys.modules, "google.genai", genai_mod) 34 35 36def test_generate_plan(monkeypatch): 37 sys.modules.pop("think.planner", None) 38 mod = importlib.import_module("think.planner") 39 40 # Mock generate to return "plan" 41 def mock_generate(**kwargs): 42 return "plan" 43 44 monkeypatch.setattr("think.models.generate", mock_generate) 45 result = mod.generate_plan("do something") 46 assert result == "plan" 47 48 49def test_planner_main(tmp_path, monkeypatch, capsys): 50 sys.modules.pop("think.planner", None) 51 mod = importlib.import_module("think.planner") 52 monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", str(tmp_path)) 53 monkeypatch.setattr(mod, "generate_plan", lambda *a, **k: "ok") 54 task = tmp_path / "t.txt" 55 task.write_text("hi") 56 monkeypatch.setattr("sys.argv", ["sol planner", str(task)]) 57 mod.main() 58 out = capsys.readouterr().out.strip() 59 assert out == "ok"