mirror of
https://github.com/openai/codex.git
synced 2026-05-02 02:17:22 +00:00
feat: reset memories button (#17937)
<img width="720" height="175" alt="Screenshot 2026-04-15 at 14 35 02" src="https://github.com/user-attachments/assets/041d73ff-8c16-42a9-8e92-c245805084f0" />
This commit is contained in:
@@ -1561,6 +1561,18 @@ impl App {
|
||||
}
|
||||
}
|
||||
|
||||
async fn reset_memories_with_app_server(&mut self, app_server: &mut AppServerSession) {
|
||||
if let Err(err) = app_server.memory_reset().await {
|
||||
tracing::error!(error = %err, "failed to reset memories");
|
||||
self.chat_widget
|
||||
.add_error_message(format!("Failed to reset memories: {err}"));
|
||||
return;
|
||||
}
|
||||
|
||||
self.chat_widget
|
||||
.add_info_message("Reset local memories.".to_string(), /*hint*/ None);
|
||||
}
|
||||
|
||||
fn open_url_in_browser(&mut self, url: String) {
|
||||
if let Err(err) = webbrowser::open(&url) {
|
||||
self.chat_widget
|
||||
@@ -5413,6 +5425,9 @@ impl App {
|
||||
)
|
||||
.await;
|
||||
}
|
||||
AppEvent::ResetMemories => {
|
||||
self.reset_memories_with_app_server(app_server).await;
|
||||
}
|
||||
AppEvent::SkipNextWorldWritableScan => {
|
||||
self.windows_sandbox.skip_world_writable_scan_once = true;
|
||||
}
|
||||
@@ -8121,6 +8136,35 @@ mod tests {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn reset_memories_clears_local_memory_directories() -> Result<()> {
|
||||
let (mut app, _app_event_rx, _op_rx) = make_test_app_with_channels().await;
|
||||
let codex_home = tempdir()?;
|
||||
app.config.codex_home = codex_home.path().to_path_buf().abs();
|
||||
app.config.sqlite_home = codex_home.path().to_path_buf();
|
||||
|
||||
let memory_root = codex_home.path().join("memories");
|
||||
let extensions_root = codex_home.path().join("memories_extensions");
|
||||
std::fs::create_dir_all(memory_root.join("rollout_summaries"))?;
|
||||
std::fs::create_dir_all(&extensions_root)?;
|
||||
std::fs::write(memory_root.join("MEMORY.md"), "stale memory\n")?;
|
||||
std::fs::write(
|
||||
memory_root.join("rollout_summaries").join("stale.md"),
|
||||
"stale summary\n",
|
||||
)?;
|
||||
std::fs::write(extensions_root.join("stale.txt"), "stale extension\n")?;
|
||||
|
||||
let mut app_server = crate::start_embedded_app_server_for_picker(&app.config).await?;
|
||||
|
||||
app.reset_memories_with_app_server(&mut app_server).await;
|
||||
|
||||
assert_eq!(std::fs::read_dir(&memory_root)?.count(), 0);
|
||||
assert_eq!(std::fs::read_dir(&extensions_root)?.count(), 0);
|
||||
|
||||
app_server.shutdown().await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn update_feature_flags_enabling_guardian_selects_guardian_approvals() -> Result<()> {
|
||||
let (mut app, mut app_event_rx, mut op_rx) = make_test_app_with_channels().await;
|
||||
|
||||
Reference in New Issue
Block a user