///|
pub fn default_town_workers() -> Array[@core.WorkerRef] {
[
@core.WorkerRef::new(
id="claw-harness",
name="Harness Hound",
book_id="coding",
role=Harness,
capabilities=["moonbit", "git", "testing"],
),
@core.WorkerRef::new(
id="claw-review",
name="Review Owl",
book_id="coding",
role=Reviewer,
capabilities=["review", "moonbit"],
),
@core.WorkerRef::new(
id="claw-ledger",
name="Ledger Fox",
book_id="finance",
role=Specialist,
capabilities=["ledgers", "reporting"],
),
@core.WorkerRef::new(
id="claw-memory",
name="Archive Cat",
book_id="finance",
role=MemoryKeeper,
capabilities=["reporting", "planning"],
),
]
}
///|
pub fn book_watch_worker(book : @core.BookRef) -> @core.WorkerRef {
@core.WorkerRef::new(
id="claw-\{book.id}-watcher",
name="\{book.name} Watcher",
book_id=book.id,
role=Watcher,
capabilities=[
"standing-watch", "web-search", "source-screening", "delta-detection", "digest",
"memory", "review",
],
)
}
///|
pub fn book_lane_workers(book : @core.BookRef) -> Array[@core.WorkerRef] {
let workers = []
match @civic.wenyu_civic_service_for_book_id(book.id) {
Some(service) =>
workers.push(
@core.WorkerRef::new(
id="claw-\{book.id}-civic",
name="\{service.title} Civic Worker",
book_id=book.id,
role=service.worker_role,
capabilities=[
"civic-service",
service.service_kind,
service.skill_pack,
"review-gate",
"projection",
],
),
)
None => ()
}
workers.push(book_watch_worker(book))
workers.push(
@core.WorkerRef::new(
id="claw-\{book.id}-harness",
name="\{book.name} Harness",
book_id=book.id,
role=Harness,
capabilities=[
"research", "analysis", "implementation-planning", "coding", "code-patch",
"asset-generation", "projection", "testing", "memory", "review",
],
),
)
workers.push(
@core.WorkerRef::new(
id="claw-\{book.id}-specialist",
name="\{book.name} Specialist",
book_id=book.id,
role=Specialist,
capabilities=["asset-generation", "projection", "design", "research"],
),
)
workers.push(
@core.WorkerRef::new(
id="claw-\{book.id}-review",
name="\{book.name} Reviewer",
book_id=book.id,
role=Reviewer,
capabilities=["review", "quality", "evidence"],
),
)
workers
}
///|
pub fn town_workers_for_books(
books : Array[@core.BookRef],
) -> Array[@core.WorkerRef] {
let workers = []
for worker in default_town_workers() {
workers.push(worker)
}
for book in books {
if book.id != "coding" && book.id != "finance" {
for worker in book_lane_workers(book) {
workers.push(worker)
}
} else {
workers.push(book_watch_worker(book))
}
}
workers
}