Skip to content
Closed
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
4 changes: 4 additions & 0 deletions app/src/types/turnState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ export interface TaskBoardCard {
evidence?: string[];
notes?: string | null;
blocker?: string | null;
/** Provider/source identifiers for a card ingested from a task source
* (`{provider, source_id, external_id, url, repo?, urgency}`); absent on
* agent/UI-authored cards. */
sourceMetadata?: Record<string, unknown> | null;
order: number;
updatedAt: string;
}
Expand Down
3 changes: 3 additions & 0 deletions src/core/jsonrpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1846,6 +1846,9 @@ fn register_domain_subscribers(
// Task-sources proactive ingestion: connection-created hook + poll.
crate::openhuman::task_sources::bus::register_task_sources_subscriber();
crate::openhuman::task_sources::start_periodic_poll();
// Board poller: dispatch the highest-urgency `todo` card on the
// task-sources board (catch-all for cards without a proactive trigger).
crate::openhuman::agent::task_dispatcher::start_board_poller();
// Seed memory_sources with active Composio connections so the
// user sees their connected integrations as memory sources by
// default. Best-effort: failure is logged but does not block startup.
Expand Down
1 change: 1 addition & 0 deletions src/openhuman/agent/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ pub mod prompts;
mod schemas;
pub mod stop_hooks;
pub mod task_board;
pub mod task_dispatcher;
pub mod tool_policy;
pub mod tree_loader;
pub mod triage;
Expand Down
10 changes: 10 additions & 0 deletions src/openhuman/agent/task_board.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ pub struct TaskBoardCard {
pub notes: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub blocker: Option<String>,
/// Provider/source identifiers for a card ingested from a task source
/// (`{provider, source_id, external_id, url, repo?, urgency}`). Set by
/// the `task_sources` route; consumed downstream for prioritisation and
/// external write-back. `None` for agent/UI-authored cards.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_metadata: Option<serde_json::Value>,
#[serde(default)]
pub order: u32,
#[serde(default)]
Expand Down Expand Up @@ -420,6 +426,7 @@ mod tests {
evidence: vec![" cargo test ".into()],
notes: Some(" note ".into()),
blocker: None,
source_metadata: None,
order: 99,
updated_at: String::new(),
},
Expand All @@ -436,6 +443,7 @@ mod tests {
evidence: Vec::new(),
notes: Some("waiting on user".into()),
blocker: None,
source_metadata: None,
order: 99,
updated_at: String::new(),
},
Expand Down Expand Up @@ -506,6 +514,7 @@ mod tests {
evidence: Vec::new(),
notes: None,
blocker: None,
source_metadata: None,
order: 99,
updated_at: String::new(),
},
Expand All @@ -522,6 +531,7 @@ mod tests {
evidence: Vec::new(),
notes: None,
blocker: None,
source_metadata: None,
order: 99,
updated_at: String::new(),
},
Expand Down
Loading
Loading