Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,17 @@ cargo run -p decodex --bin decodex -- serve --listen-address 127.0.0.1:8192

Project-scoped commands accept `--config <PROJECT_DIR>` after the subcommand when the
operator wants to override registry-based project resolution for that command.
`decodex status` prints the local runtime snapshot without refreshing live
tracker, pull-request, or Codex account usage observers. Use `decodex status --live`
when the operator needs fresh Linear/GitHub readback before acting; use the Accounts
API refresh path, such as `GET /api/accounts?refresh=1`, when the operator needs
fresh ChatGPT account usage probes.
`decodex status` first tries to reuse the default local operator listener's published
`GET /api/operator-snapshot` when the snapshot is recent, covers the requested project,
and has at least the requested `--limit`. JSON output marks this as
`"status_source": "operator_snapshot_cache"` and includes `snapshot_age_seconds`.
If that cache is missing, stale, mismatched, or too small, the command falls back to a
direct local runtime snapshot and reports `status_cached_snapshot_unavailable` in
`warning_details`. Use `decodex status --live` when the operator needs fresh
Linear/GitHub readback before acting; `--live` bypasses the cached snapshot path and
marks JSON output as `"status_source": "live_observers"`. Use the Accounts API refresh
path, such as `GET /api/accounts?refresh=1`, when the operator needs fresh ChatGPT
account usage probes.
`decodex serve` uses hardcoded scheduler cadences: the local control-plane loop
publishes snapshots every 15 seconds, and Linear-backed queue/status scans run at
most every 5 minutes per project unless an operator or agent requests an explicit
Expand Down
2 changes: 1 addition & 1 deletion apps/decodex/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ struct ServeCommand {
#[command(flatten)]
project_config: ProjectConfigArgs,
/// Operator UI listen address.
#[arg(long, value_name = "ADDR", default_value = "127.0.0.1:8192")]
#[arg(long, value_name = "ADDR", default_value_t = orchestrator::DEFAULT_OPERATOR_LISTEN_ADDRESS.to_owned())]
listen_address: String,
/// Start the local dev endpoint without polling or dispatching projects.
#[arg(long, hide = true)]
Expand Down
5 changes: 5 additions & 0 deletions apps/decodex/src/orchestrator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ include!("orchestrator/agent_evidence.rs");

pub(crate) const DEFAULT_STATUS_RUN_LIMIT: usize = 10;
pub(crate) const DEFAULT_OPERATOR_DASHBOARD_RUN_LIMIT: usize = 25;
pub(crate) const DEFAULT_OPERATOR_LISTEN_ADDRESS: &str = "127.0.0.1:8192";
pub(crate) const EXTERNAL_REVIEW_ACTOR_LOGIN: &str = "codex";
pub(crate) const EXTERNAL_REVIEW_REQUEST_BODY: &str = "@codex review";
pub(crate) const EXTERNAL_REVIEW_PASS_PHRASE: &str = "Didn't find any major issues.";
Expand Down Expand Up @@ -109,6 +110,10 @@ const OPERATOR_LANE_STEER_ALIAS_ENDPOINT_PATH: &str = "/api/lane-steer";
const OPERATOR_STATE_MAX_REQUEST_BYTES: usize = 256 * 1_024;
const OPERATOR_DASHBOARD_WS_CLIENT_MESSAGE_MAX_BYTES: usize = 64 * 1_024;
const OPERATOR_STATE_HEADER_TERMINATOR: &[u8] = b"\r\n\r\n";
const STATUS_OPERATOR_SNAPSHOT_MAX_AGE: Duration = Duration::from_secs(60);
const STATUS_OPERATOR_SNAPSHOT_CONNECT_TIMEOUT: Duration = Duration::from_millis(250);
const STATUS_OPERATOR_SNAPSHOT_IO_TIMEOUT: Duration = Duration::from_millis(500);
const STATUS_OPERATOR_SNAPSHOT_WARNING: &str = "status_cached_snapshot_unavailable";
const OPERATOR_DASHBOARD_WS_HEARTBEAT_INTERVAL: Duration = Duration::from_secs(20);
const OPERATOR_RUN_ACTIVITY_STREAM_INTERVAL: Duration = Duration::from_secs(1);
const OPERATOR_DEV_SNAPSHOT_STREAM_INTERVAL: Duration = Duration::from_secs(1);
Expand Down
2 changes: 1 addition & 1 deletion apps/decodex/src/orchestrator/agent_evidence.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ struct AgentConnectorBackoff {
next_action: String,
}

#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
struct AgentPrivateEvidenceRef {
evidence_ref: String,
source: String,
Expand Down
Loading