mirror of
https://github.com/openai/codex.git
synced 2026-05-29 23:40:29 +00:00
## Why This PR make the `morpheus` agent (memory phase 2) use a git diff to start it's consolidation. The workflow is the following: 1. The agent acquire a lock 2. If `.codex/memories` does not exist or is not a git root, initialize everything (and make a first empty commit) 3. Update `raw_memories.md` and `rollout_summaries/` as before. Basically we select max N phase 1 memories based on a given policy 4. We use git (`gix`) to get a diff between the current state of `.codex/memories` and the last commit. 5. Dump the diff in `phase2_workspace_diff.md` 6. Spawn `morpheus` and point it to `phase2_workspace_diff.md` 7. Wait for `morpheus` to be done 8. Re-create a new `.git` and make one single commit on it. We do this because we don't want to preserve history through `.git` and this is cheap anyway 9. We release the lock On top of this, we keep the retry policies etc etc The goals of this new workflow are: * Better support of any memory extensions such as `chronicle` * Allow the user to manually edit memories and this will be considered by the phase 2 agent As a follow-up we will need to add support for user's edition while `morpheus` is running ## What Changed - Added memory workspace helpers that prepare the git baseline, compute the diff, write `phase2_workspace_diff.md`, and reset the baseline after successful consolidation. - Updated Phase 2 to sync current inputs into `raw_memories.md` and `rollout_summaries/`, prune old extension resources, skip clean workspaces, and run the consolidation subagent only when the workspace has changes. - Tightened Phase 2 job ownership around long-running consolidation with heartbeats and an ownership check before resetting the baseline. - Simplified the prompt and state APIs so DB watermarks are bookkeeping, while workspace dirtiness decides whether consolidation work exists. - Updated the memory pipeline README and tests for workspace diffs, extension-resource cleanup, pollution-driven forgetting, selection ranking, and baseline persistence. ## Verification - Added/updated coverage in `core/src/memories/tests.rs`, `core/src/memories/workspace_tests.rs`, `state/src/runtime/memories.rs`, and `core/tests/suite/memories.rs`. --------- Co-authored-by: Codex <noreply@openai.com>
47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
mod agent_job;
|
|
mod backfill_state;
|
|
mod graph;
|
|
mod log;
|
|
mod memories;
|
|
mod thread_goal;
|
|
mod thread_metadata;
|
|
|
|
pub use agent_job::AgentJob;
|
|
pub use agent_job::AgentJobCreateParams;
|
|
pub use agent_job::AgentJobItem;
|
|
pub use agent_job::AgentJobItemCreateParams;
|
|
pub use agent_job::AgentJobItemStatus;
|
|
pub use agent_job::AgentJobProgress;
|
|
pub use agent_job::AgentJobStatus;
|
|
pub use backfill_state::BackfillState;
|
|
pub use backfill_state::BackfillStatus;
|
|
pub use graph::DirectionalThreadSpawnEdgeStatus;
|
|
pub use log::LogEntry;
|
|
pub use log::LogQuery;
|
|
pub use log::LogRow;
|
|
pub use memories::Phase2JobClaimOutcome;
|
|
pub use memories::Stage1JobClaim;
|
|
pub use memories::Stage1JobClaimOutcome;
|
|
pub use memories::Stage1Output;
|
|
pub use memories::Stage1StartupClaimParams;
|
|
pub use thread_goal::ThreadGoal;
|
|
pub use thread_goal::ThreadGoalStatus;
|
|
pub use thread_metadata::Anchor;
|
|
pub use thread_metadata::BackfillStats;
|
|
pub use thread_metadata::ExtractionOutcome;
|
|
pub use thread_metadata::SortDirection;
|
|
pub use thread_metadata::SortKey;
|
|
pub use thread_metadata::ThreadMetadata;
|
|
pub use thread_metadata::ThreadMetadataBuilder;
|
|
pub use thread_metadata::ThreadsPage;
|
|
|
|
pub(crate) use agent_job::AgentJobItemRow;
|
|
pub(crate) use agent_job::AgentJobRow;
|
|
pub(crate) use memories::Stage1OutputRow;
|
|
pub(crate) use thread_goal::ThreadGoalRow;
|
|
pub(crate) use thread_metadata::ThreadRow;
|
|
pub(crate) use thread_metadata::anchor_from_item;
|
|
pub(crate) use thread_metadata::datetime_to_epoch_millis;
|
|
pub(crate) use thread_metadata::datetime_to_epoch_seconds;
|
|
pub(crate) use thread_metadata::epoch_millis_to_datetime;
|