mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-17 18:25:42 +02:00
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
"""Cross-site meta-playbook (browser memory tier 3): seeds on day one, absorbs
|
|
site-agnostic lessons with no extra LLM call, dedups + caps, survives a restart."""
|
|
import os
|
|
import tempfile
|
|
|
|
import pytest
|
|
|
|
from backend.apps.agents.browser import browser_meta_playbook as meta
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def p_isolated(monkeypatch):
|
|
monkeypatch.setenv("OPENSWARM_BROWSER_META_DIR", tempfile.mkdtemp(prefix="meta_test_"))
|
|
meta.clear(wipe_disk=True)
|
|
yield
|
|
meta.clear(wipe_disk=True)
|
|
|
|
|
|
def test_seeded_on_day_one():
|
|
b = meta.get_meta()
|
|
assert len(b) >= 4
|
|
assert any("composer" in x.lower() and "clear" in x.lower() for x in b)
|
|
assert "General web priors" in meta.format_for_prompt()
|
|
|
|
|
|
def test_absorb_adds_dedups_and_caps():
|
|
n0 = len(meta.get_meta())
|
|
assert meta.absorb(["clicking a date opens a picker, it is not a navigation"]) is True
|
|
assert len(meta.get_meta()) == n0 + 1
|
|
# identical lesson (case-insensitive) doesn't grow it
|
|
assert meta.absorb(["Clicking a DATE opens a picker, it is not a navigation"]) is False
|
|
# empty input is a no-op
|
|
assert meta.absorb([]) is False
|
|
# capped: flooding never exceeds the cap
|
|
meta.absorb([f"unique universal lesson number {i}" for i in range(50)])
|
|
assert len(meta.get_meta()) <= meta.MAX_BULLETS
|
|
|
|
|
|
def test_survives_a_restart():
|
|
meta.absorb(["a durable cross-site lesson worth keeping"])
|
|
meta.clear(wipe_disk=False) # in-memory gone, disk intact (== restart)
|
|
assert meta.CACHE is None
|
|
assert any("durable cross-site lesson" in x for x in meta.get_meta())
|
|
|
|
|
|
def test_secrets_never_persist_into_meta():
|
|
meta.absorb(["the login token is sk-ant-api03-deadbeef and it works"])
|
|
blob = " ".join(meta.get_meta())
|
|
assert "sk-ant-api03" not in blob
|