mirror of
https://github.com/openai/codex.git
synced 2026-09-11 20:36:49 +00:00
## What changed - Include `recencyAt`, derived from the newest non-archived assigned thread, in project responses. - Let `project/list` sort by `position` or `recencyAt` in either direction, with recency as the default descending order for that key and projects without activity placed last. - Encode the sort key, direction, and millisecond-precision anchor in new cursors while retaining existing ascending-position cursors. - Add an index for project recency lookups and document the API's sorting and pagination behavior. ## Testing - Cover recency updates when threads are assigned, archived, unarchived, or deleted. - Cover ordering, null handling, tie-breaking, cursor pagination, invalid sort combinations, and cursor mismatches. GitOrigin-RevId: 6165e2b9976b0b45cfa16bcd42978b67811f6df5
82 lines
1.9 KiB
Rust
82 lines
1.9 KiB
Rust
use std::collections::BTreeMap;
|
|
|
|
use crate::SortDirection;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct StoredProjectRoot {
|
|
pub path: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct StoredProject {
|
|
pub id: String,
|
|
pub name: String,
|
|
pub roots: Vec<StoredProjectRoot>,
|
|
pub metadata: BTreeMap<String, String>,
|
|
pub position: i64,
|
|
pub created_at_ms: i64,
|
|
pub updated_at_ms: i64,
|
|
pub recency_at_ms: Option<i64>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct StoredProjectsPage {
|
|
pub projects: Vec<StoredProject>,
|
|
pub next_cursor: Option<String>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct ListProjectsParams {
|
|
pub cursor: Option<String>,
|
|
pub limit: usize,
|
|
pub sort_key: codex_state::ProjectSortKey,
|
|
pub sort_direction: SortDirection,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct CreateProjectParams {
|
|
pub name: String,
|
|
pub roots: Vec<StoredProjectRoot>,
|
|
pub metadata: BTreeMap<String, String>,
|
|
pub thread_ids: Vec<String>,
|
|
pub idempotency_key: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct CreatedProject {
|
|
pub project: StoredProject,
|
|
pub created: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct UpdateProjectParams {
|
|
pub project_id: String,
|
|
pub name: Option<String>,
|
|
pub roots: Option<Vec<StoredProjectRoot>>,
|
|
pub metadata: Option<BTreeMap<String, String>>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct MoveProjectParams {
|
|
pub project_id: String,
|
|
pub before_project_id: Option<String>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub enum ProjectMoveOutcome {
|
|
Unchanged,
|
|
Moved,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct UpdatedProject {
|
|
pub project: StoredProject,
|
|
pub changed: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct DeletedProject {
|
|
pub affected_active_thread_ids: Vec<String>,
|
|
pub affected_archived_thread_ids: Vec<String>,
|
|
}
|