mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 03:30:48 +08:00
Fix prewarm prompt preview staleness (cache + Admin wait)
Include skill_role_binding store JSON in executor and manager prompt cache signatures so skill catalog updates after binding edits without restart. Admin async prewarm now polls prewarm/status until not running before router() so parallel prompts fetch matches completed warm. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
4dbb834c95
commit
c33ca303a2
4 changed files with 84 additions and 2 deletions
|
|
@ -129,6 +129,67 @@ def test_executor_static_prompt_cache_invalidates_on_settings_change(monkeypatch
|
|||
assert calls["n"] == 2
|
||||
|
||||
|
||||
def test_executor_static_prompt_cache_invalidates_on_skill_role_binding_change(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
from oclaw.runtime import system_prompt as sp
|
||||
|
||||
class DummyStore:
|
||||
def __init__(self) -> None:
|
||||
self.values: dict[str, str] = {"skill_role_binding": "{}"}
|
||||
|
||||
def get_setting(self, key: str) -> str:
|
||||
return str(self.values.get(key, ""))
|
||||
|
||||
class DummyReg:
|
||||
pass
|
||||
|
||||
calls = {"n": 0}
|
||||
|
||||
def _skills_block(**kwargs) -> str:
|
||||
_ = kwargs
|
||||
calls["n"] += 1
|
||||
return "skills-block"
|
||||
|
||||
monkeypatch.setattr(sp, "expert_workspace_signature_token", lambda: ("sig",))
|
||||
monkeypatch.setattr(sp, "build_project_context_block", lambda **kwargs: "")
|
||||
monkeypatch.setattr(sp, "build_skills_catalog_block", _skills_block)
|
||||
monkeypatch.setattr(
|
||||
sp,
|
||||
"render_runtime_prompt",
|
||||
lambda prompt_id, variables, strict: f"{prompt_id}\n{variables.get('skills_catalog') or ''}",
|
||||
)
|
||||
|
||||
store = DummyStore()
|
||||
reg = DummyReg()
|
||||
_ = sp.get_executor_prompt_static(
|
||||
store=store,
|
||||
tools=reg, # type: ignore[arg-type]
|
||||
base_url="",
|
||||
base_system="base",
|
||||
workspace_dir=None,
|
||||
skill_binding_role="generalist",
|
||||
)
|
||||
_ = sp.get_executor_prompt_static(
|
||||
store=store,
|
||||
tools=reg, # type: ignore[arg-type]
|
||||
base_url="",
|
||||
base_system="base",
|
||||
workspace_dir=None,
|
||||
skill_binding_role="generalist",
|
||||
)
|
||||
assert calls["n"] == 1
|
||||
|
||||
store.values["skill_role_binding"] = '{"generalist": ["alpha-skill"]}'
|
||||
_ = sp.get_executor_prompt_static(
|
||||
store=store,
|
||||
tools=reg, # type: ignore[arg-type]
|
||||
base_url="",
|
||||
base_system="base",
|
||||
workspace_dir=None,
|
||||
skill_binding_role="generalist",
|
||||
)
|
||||
assert calls["n"] == 2
|
||||
|
||||
|
||||
def test_executor_static_prompt_cache_invalidates_on_workspace_revision_change(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
from oclaw.runtime import system_prompt as sp
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue