Add app-server current-time impl (varlatency 3/n) (#28835)

## What

Server should request:

```
{
  "id": 42,
  "method": "currentTime/read",
  "params": {
    "threadId": "11111111-1111-1111-1111-aaaaafdc2c11"
  }
}
```

Client should respond with something like:

```rust
{
  "id": 42,
  "result": {
    "currentTimeAt": 1781717655
  }
}
```

## Why

Sessions configured with `clock_source = "external"` need a
thread-specific external time source before inference. The system clock
remains the default production provider.

## Validation

- `cargo test -p codex-app-server-protocol`
- `cargo test -p codex-app-server --test all
current_time_read_round_trip_adds_reminder_to_model_input`
- `cargo test -p codex-app-server
first_attestation_capable_connection_for_thread_only_uses_thread_subscribers`
- `cargo test -p codex-analytics`
- `just fix -p codex-app-server-protocol`
- `just fix -p codex-app-server`

Stacked on #28824.
This commit is contained in:
rka-oai authored and GitHub committed 2026-06-18 13:12:11 -07:00
1 parent 0f89dd768c
commit f4602b7516
18 files changed
+463 -19

No files matched your search

+17
View File
@@ -329,6 +329,23 @@ impl ThreadStateManager {
.min_by_key(|connection_id| connection_id.0)
}
pub(crate) async fn wait_for_thread_subscriber(&self, thread_id: ThreadId) {
let mut has_connections = {
let mut state = self.state.lock().await;
state
.threads
.entry(thread_id)
.or_default()
.has_connections_watcher
.subscribe()
};
while !*has_connections.borrow_and_update() {
if has_connections.changed().await.is_err() {
break;
}
}
}
pub(crate) async fn subscribed_connection_ids(&self, thread_id: ThreadId) -> Vec<ConnectionId> {
let state = self.state.lock().await;
state