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
20 changes: 20 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ members = [
"crates/opengoose-rig",
"crates/opengoose-skills",
"crates/opengoose-sandbox",
"crates/opengoose-evolver",
]
exclude = [
"crates/opengoose-sandbox/guest/init",
Expand All @@ -20,6 +21,7 @@ license = "MIT"
opengoose-board = { path = "crates/opengoose-board" }
opengoose-rig = { path = "crates/opengoose-rig" }
opengoose-skills = { path = "crates/opengoose-skills" }
opengoose-evolver = { path = "crates/opengoose-evolver" }

# Goose — agent runtime (the only LLM interface)
goose = { git = "https://github.com/block/goose", tag = "v1.28.0", default-features = false }
Expand Down
27 changes: 27 additions & 0 deletions crates/opengoose-board/src/beads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,23 @@ use chrono::{DateTime, Duration, Utc};
/// 1. open 상태만
/// 2. 블로킹 의존성 없는 것만
/// 3. 우선순위 정렬 (P0 > P1 > P2)
///
/// # Examples
///
/// ```
/// use opengoose_board::beads::filter_ready;
/// use opengoose_board::work_item::*;
/// use std::collections::HashSet;
///
/// let items = vec![WorkItem {
/// id: 1, title: "task".into(), description: String::new(),
/// created_by: RigId::new("human"), created_at: chrono::Utc::now(),
/// status: Status::Open, priority: Priority::P1, tags: vec![],
/// claimed_by: None, updated_at: chrono::Utc::now(),
/// }];
/// let ready = filter_ready(items.into_iter(), &HashSet::new());
/// assert_eq!(ready.len(), 1);
/// ```
pub fn filter_ready(
items: impl Iterator<Item = WorkItem>,
blocked_ids: &std::collections::HashSet<i64>,
Expand Down Expand Up @@ -43,6 +60,16 @@ pub fn find_compactable(
}

/// prime() — 에이전트 컨텍스트 요약. Phase 1: 최소 구현.
///
/// # Examples
///
/// ```
/// use opengoose_board::beads::prime_summary;
/// use opengoose_board::work_item::RigId;
///
/// let summary = prime_summary(&[], &RigId::new("worker"));
/// assert!(summary.contains("0 open"));
/// ```
pub fn prime_summary(items: &[WorkItem], rig_id: &RigId) -> String {
let (open, claimed, done) = items
.iter()
Expand Down
17 changes: 17 additions & 0 deletions crates/opengoose-board/src/board.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,23 @@ impl Board {
})
}

/// Create an in-memory Board for testing.
///
/// # Examples
///
/// ```
/// # tokio::runtime::Runtime::new().unwrap().block_on(async {
/// let board = opengoose_board::Board::in_memory().await.unwrap();
/// let item = board.post(opengoose_board::work_item::PostWorkItem {
/// title: "Test".into(),
/// description: String::new(),
/// created_by: opengoose_board::work_item::RigId::new("human"),
/// priority: opengoose_board::work_item::Priority::P1,
/// tags: vec![],
/// }).await.unwrap();
/// assert_eq!(item.title, "Test");
/// # });
/// ```
pub async fn in_memory() -> Result<Self, BoardError> {
Self::connect("sqlite::memory:").await
}
Expand Down
6 changes: 3 additions & 3 deletions crates/opengoose-board/src/rigs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ mod tests {
assert_eq!(rig.rig_type, "ai");

let level = board
.trust_level("ai-01")
.trust_level(&RigId::new("ai-01"))
.await
.expect("async operation should succeed");
assert_eq!(level, "L1");
Expand Down Expand Up @@ -118,7 +118,7 @@ mod tests {
.await
.expect("add_stamp should succeed");
let level = board
.trust_level("ai-01")
.trust_level(&RigId::new("ai-01"))
.await
.expect("async operation should succeed");
assert_eq!(level, "L1.5");
Expand Down Expand Up @@ -162,7 +162,7 @@ mod tests {
.await
.expect("add_stamp should succeed");
let level = board
.trust_level("ai-01")
.trust_level(&RigId::new("ai-01"))
.await
.expect("async operation should succeed");
assert_eq!(level, "L2");
Expand Down
Loading
Loading