Remove legacy logs/ directory, consolidate all data under .g3/
This change removes the legacy logs/ directory and consolidates all session data, error logs, and discovery files under the .g3/ directory. New directory structure: - .g3/sessions/<session_id>/session.json - session logs - .g3/errors/ - error logs (was logs/errors/) - .g3/background_processes/ - background process logs - .g3/discovery/ - planner discovery files (was workspace/logs/) Changes: - paths.rs: Remove get_logs_dir()/logs_dir(), add get_errors_dir(), get_background_processes_dir(), get_discovery_dir() - session.rs: Anonymous sessions now use .g3/sessions/anonymous_<ts>/ - error_handling.rs: Errors now saved to .g3/errors/ - project.rs: Remove logs_dir() and ensure_logs_dir() methods - feedback_extraction.rs: Remove logs_dir field and fallback logic - planner: Use .g3/ for workspace data and .g3/discovery/ for reports - flock.rs: Look for session metrics in .g3/sessions/ - coach_feedback.rs: Remove fallback to logs/ path - Update all tests to use new paths - Update README.md and .gitignore
This commit is contained in:
@@ -63,7 +63,7 @@ pub struct Cli {
|
||||
#[arg(long, value_name = "MODEL")]
|
||||
pub model: Option<String>,
|
||||
|
||||
/// Disable log file creation (no logs/ directory or session logs)
|
||||
/// Disable session log file creation (no .g3/sessions/ or error logs)
|
||||
#[arg(long)]
|
||||
pub quiet: bool,
|
||||
|
||||
|
||||
@@ -54,12 +54,7 @@ pub fn extract_from_logs(
|
||||
|
||||
/// Resolve the log file path, trying new path first then falling back to old.
|
||||
fn resolve_log_path(session_id: &str) -> std::path::PathBuf {
|
||||
let new_path = g3_core::get_session_file(session_id);
|
||||
if new_path.exists() {
|
||||
new_path
|
||||
} else {
|
||||
Path::new("logs").join(format!("g3_session_{}.json", session_id))
|
||||
}
|
||||
g3_core::get_session_file(session_id)
|
||||
}
|
||||
|
||||
/// Extract feedback from a session log file.
|
||||
|
||||
@@ -4,15 +4,17 @@ use tempfile::TempDir;
|
||||
|
||||
#[test]
|
||||
fn test_extract_coach_feedback_with_timing_message() {
|
||||
// Create a temporary directory for logs
|
||||
// Create a temporary directory for session logs
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let logs_dir = temp_dir.path().join("logs");
|
||||
fs::create_dir(&logs_dir).unwrap();
|
||||
let sessions_dir = temp_dir.path().join(".g3").join("sessions");
|
||||
fs::create_dir_all(&sessions_dir).unwrap();
|
||||
|
||||
// Create a mock session log with the problematic conversation history
|
||||
// where timing message appears after the tool result
|
||||
let session_id = "test_session_123";
|
||||
let log_file_path = logs_dir.join(format!("g3_session_{}.json", session_id));
|
||||
let session_dir = sessions_dir.join(session_id);
|
||||
fs::create_dir_all(&session_dir).unwrap();
|
||||
let log_file_path = session_dir.join("session.json");
|
||||
|
||||
let log_content = json!({
|
||||
"session_id": session_id,
|
||||
@@ -93,11 +95,13 @@ fn test_extract_coach_feedback_with_timing_message() {
|
||||
fn test_extract_only_final_output_tool_results() {
|
||||
// Test that we only extract tool results from final_output, not from other tools
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let logs_dir = temp_dir.path().join("logs");
|
||||
fs::create_dir(&logs_dir).unwrap();
|
||||
let sessions_dir = temp_dir.path().join(".g3").join("sessions");
|
||||
fs::create_dir_all(&sessions_dir).unwrap();
|
||||
|
||||
let session_id = "test_session_final_output_only";
|
||||
let log_file_path = logs_dir.join(format!("g3_session_{}.json", session_id));
|
||||
let session_dir = sessions_dir.join(session_id);
|
||||
fs::create_dir_all(&session_dir).unwrap();
|
||||
let log_file_path = session_dir.join("session.json");
|
||||
|
||||
let log_content = json!({
|
||||
"session_id": session_id,
|
||||
@@ -184,14 +188,16 @@ fn test_extract_only_final_output_tool_results() {
|
||||
|
||||
#[test]
|
||||
fn test_extract_coach_feedback_without_timing_message() {
|
||||
// Create a temporary directory for logs
|
||||
// Create a temporary directory for session logs
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let logs_dir = temp_dir.path().join("logs");
|
||||
fs::create_dir(&logs_dir).unwrap();
|
||||
let sessions_dir = temp_dir.path().join(".g3").join("sessions");
|
||||
fs::create_dir_all(&sessions_dir).unwrap();
|
||||
|
||||
// Test the case where there's no timing message (backward compatibility)
|
||||
let session_id = "test_session_456";
|
||||
let log_file_path = logs_dir.join(format!("g3_session_{}.json", session_id));
|
||||
let session_dir = sessions_dir.join(session_id);
|
||||
fs::create_dir_all(&session_dir).unwrap();
|
||||
let log_file_path = session_dir.join("session.json");
|
||||
|
||||
let log_content = json!({
|
||||
"session_id": session_id,
|
||||
@@ -256,11 +262,13 @@ fn test_extract_coach_feedback_without_timing_message() {
|
||||
fn test_extract_coach_feedback_with_multiple_tool_results() {
|
||||
// Test that we get the LAST tool result when there are multiple
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let logs_dir = temp_dir.path().join("logs");
|
||||
fs::create_dir(&logs_dir).unwrap();
|
||||
let sessions_dir = temp_dir.path().join(".g3").join("sessions");
|
||||
fs::create_dir_all(&sessions_dir).unwrap();
|
||||
|
||||
let session_id = "test_session_789";
|
||||
let log_file_path = logs_dir.join(format!("g3_session_{}.json", session_id));
|
||||
let session_dir = sessions_dir.join(session_id);
|
||||
fs::create_dir_all(&session_dir).unwrap();
|
||||
let log_file_path = session_dir.join("session.json");
|
||||
|
||||
let log_content = json!({
|
||||
"session_id": session_id,
|
||||
|
||||
Reference in New Issue
Block a user