refactor(agent/compression): remove dead memory-containment helpers; fold codex skip-log ladder
- delete _cached_prompt_reflects_builtin_memory + _builtin_memory_prompt_snapshot (zero callers since the commit site moved to byte-equality; the only test reference asserts their ABSENCE from the commit window) - delete CompressionExecutorSaturatedError (never raised or caught anywhere) - _compress_context_via_codex_app_server: three near-identical skip branches collapse into one skip_reason + single log line (same message text)
This commit is contained in:
@@ -186,32 +186,6 @@ def is_compaction_progress_status(text: str | None) -> bool:
|
||||
)
|
||||
|
||||
|
||||
def _builtin_memory_prompt_snapshot(agent: Any) -> Optional[Tuple[str, str]]:
|
||||
"""Return the built-in memory text that can affect a system prompt.
|
||||
|
||||
Rendered after ``load_from_disk()`` so compression can retain a cached prompt
|
||||
that already embeds current memory. ``None`` when unreadable, so callers take
|
||||
the conservative rebuild path.
|
||||
"""
|
||||
store = getattr(agent, "_memory_store", None)
|
||||
if store is None:
|
||||
return "", ""
|
||||
try:
|
||||
memory = (
|
||||
store.format_for_system_prompt("memory") or ""
|
||||
if getattr(agent, "_memory_enabled", False)
|
||||
else ""
|
||||
)
|
||||
user = (
|
||||
store.format_for_system_prompt("user") or ""
|
||||
if getattr(agent, "_user_profile_enabled", False)
|
||||
else ""
|
||||
)
|
||||
except Exception:
|
||||
return None
|
||||
return memory, user
|
||||
|
||||
|
||||
def _refresh_agent_tool_definitions(agent) -> bool:
|
||||
"""Rebuild agent.tools at the compaction commit boundary.
|
||||
|
||||
@@ -230,34 +204,6 @@ def _refresh_agent_tool_definitions(agent) -> bool:
|
||||
return bool(added)
|
||||
|
||||
|
||||
def _cached_prompt_reflects_builtin_memory(agent: Any, cached_prompt: str) -> bool:
|
||||
"""Whether the cached system prompt already embeds current built-in memory.
|
||||
|
||||
Do NOT compare snapshots before/after reload: a DB-restored prompt can predate
|
||||
memory writes the fresh store already holds, latching stale memory. Instead
|
||||
verify current blocks appear verbatim and no stale block header remains.
|
||||
"""
|
||||
snapshot = _builtin_memory_prompt_snapshot(agent)
|
||||
if snapshot is None:
|
||||
return False
|
||||
try:
|
||||
from tools.memory_tool import MEMORY_BLOCK_HEADERS
|
||||
except Exception:
|
||||
return False
|
||||
for target, block in zip(("memory", "user"), snapshot):
|
||||
block = block.strip()
|
||||
if block:
|
||||
# The rendered prompt embeds the block verbatim (incl. usage header), so any
|
||||
# entry/char-count change breaks containment → rebuild.
|
||||
if block not in cached_prompt:
|
||||
return False
|
||||
elif MEMORY_BLOCK_HEADERS[target] in cached_prompt:
|
||||
# The prompt still carries a block for a target that is now
|
||||
# empty/disabled — stale; rebuild.
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
_COMPRESSOR_ATTEMPT_STATE_FIELDS = (
|
||||
"_previous_summary",
|
||||
"_summary_has_user_turn",
|
||||
@@ -856,10 +802,6 @@ _compress_admission_lock = threading.Lock()
|
||||
_compress_admitted_count = 0
|
||||
|
||||
|
||||
class CompressionExecutorSaturatedError(RuntimeError):
|
||||
"""All compression pool slots are occupied; submission was refused."""
|
||||
|
||||
|
||||
def _try_admit_compression_job() -> bool:
|
||||
"""Reserve one bounded compression-pool admission slot (F6)."""
|
||||
global _compress_admitted_count
|
||||
@@ -4790,56 +4732,35 @@ def _compress_context_via_codex_app_server(
|
||||
Rewriting the local transcript would not shrink the Codex thread, so Codex
|
||||
compacts its own thread and Hermes' transcript is left unchanged.
|
||||
"""
|
||||
_sid = getattr(agent, "session_id", None) or "none"
|
||||
_tokens = f"{approx_tokens:,}" if approx_tokens else "unknown"
|
||||
auto_mode = str(
|
||||
getattr(agent, "codex_app_server_auto_compaction", "native") or "native"
|
||||
).lower()
|
||||
if auto_mode not in {"native", "hermes", "off"}:
|
||||
auto_mode = "native"
|
||||
skip_reason = None
|
||||
if not force and auto_mode != "hermes":
|
||||
logger.info(
|
||||
"codex app-server compaction skipped: mode=%s force=false "
|
||||
"(session=%s messages=%d tokens=~%s)",
|
||||
auto_mode,
|
||||
getattr(agent, "session_id", None) or "none",
|
||||
len(messages),
|
||||
f"{approx_tokens:,}" if approx_tokens else "unknown",
|
||||
)
|
||||
existing_prompt = _existing_system_prompt(agent, system_message)
|
||||
return messages, existing_prompt
|
||||
|
||||
# Automatic entrypoints honor the compressor-owned cooldown: a recent compaction
|
||||
# failed, and retrying every turn is what thrashes.
|
||||
if not force:
|
||||
skip_reason = f"mode={auto_mode} force=false"
|
||||
elif not force:
|
||||
# Automatic entrypoints honor the compressor-owned cooldown: a recent compaction
|
||||
# failed, and retrying every turn is what thrashes.
|
||||
_cooldown_remaining = _codex_compaction_cooldown_remaining(agent)
|
||||
if _cooldown_remaining > 0:
|
||||
logger.info(
|
||||
"codex app-server compaction skipped: failure cooldown active "
|
||||
"for %.0fs (session=%s messages=%d tokens=~%s)",
|
||||
_cooldown_remaining,
|
||||
getattr(agent, "session_id", None) or "none",
|
||||
len(messages),
|
||||
f"{approx_tokens:,}" if approx_tokens else "unknown",
|
||||
)
|
||||
existing_prompt = _existing_system_prompt(agent, system_message)
|
||||
return messages, existing_prompt
|
||||
|
||||
skip_reason = f"failure cooldown active for {_cooldown_remaining:.0f}s"
|
||||
codex_session = getattr(agent, "_codex_session", None)
|
||||
if codex_session is None:
|
||||
if skip_reason is None and codex_session is None:
|
||||
skip_reason = "no active codex thread"
|
||||
if skip_reason is not None:
|
||||
logger.info(
|
||||
"codex app-server compaction skipped: no active codex thread "
|
||||
"(session=%s messages=%d tokens=~%s)",
|
||||
getattr(agent, "session_id", None) or "none",
|
||||
len(messages),
|
||||
f"{approx_tokens:,}" if approx_tokens else "unknown",
|
||||
"codex app-server compaction skipped: %s (session=%s messages=%d tokens=~%s)",
|
||||
skip_reason, _sid, len(messages), _tokens,
|
||||
)
|
||||
existing_prompt = _existing_system_prompt(agent, system_message)
|
||||
return messages, existing_prompt
|
||||
return messages, _existing_system_prompt(agent, system_message)
|
||||
|
||||
logger.info(
|
||||
"codex app-server compaction started: session=%s messages=%d tokens=~%s",
|
||||
getattr(agent, "session_id", None) or "none",
|
||||
len(messages),
|
||||
f"{approx_tokens:,}" if approx_tokens else "unknown",
|
||||
_sid, len(messages), _tokens,
|
||||
)
|
||||
try:
|
||||
agent._emit_status(COMPACTION_STATUS)
|
||||
@@ -4880,8 +4801,7 @@ def _compress_context_via_codex_app_server(
|
||||
agent,
|
||||
str(getattr(result, "error", None) or "compaction interrupted"),
|
||||
)
|
||||
existing_prompt = _existing_system_prompt(agent, system_message)
|
||||
return messages, existing_prompt
|
||||
return messages, _existing_system_prompt(agent, system_message)
|
||||
|
||||
try:
|
||||
from agent.codex_runtime import (
|
||||
@@ -4911,7 +4831,7 @@ def _compress_context_via_codex_app_server(
|
||||
|
||||
logger.info(
|
||||
"codex app-server compaction done: session=%s thread=%s turn=%s",
|
||||
getattr(agent, "session_id", None) or "none",
|
||||
_sid,
|
||||
getattr(result, "thread_id", None) or "",
|
||||
getattr(result, "turn_id", None) or "",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user