feat(agent): Pi subagents via agent.spawn / agent.await
- agent_run gains depth / spawn_reason (0029); agent_run_event types
subagent_spawned / subagent_event / subagent_completed
- agent.spawn (propose, medium, replay never): allowlist ⊆ parent, mode not
above parent, budget carved from parent's remainder, idempotent per run+input;
settings.pi.subagents {enabled, maxConcurrent, maxDepth} (subagentsEnabled kept as alias)
- child runs claim a concurrency slot under an advisory lock (waitForFact while
queued); agent.await polls business tables without calling the model
- parent abort cascades to all descendants; parent runtime budget counts
descendant usage; child events mirrored into the parent stream by parent seq
- authorize caps every child call by all ancestors' allowlists/kinds
- session page shows parent link, inherited info and the subagent tree
- e2e E11; runbook section on subagents
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
daa85a8bb4
commit
459991421e
27 files changed
+1720
-32
No files matched your search
@@ -47,7 +47,10 @@ export type AgentRunEventType =
|
||||
| "tool_call_rejected"
|
||||
| "compaction"
|
||||
| "run_completed"
|
||||
| "run_failed";
|
||||
| "run_failed"
|
||||
| "subagent_spawned"
|
||||
| "subagent_event"
|
||||
| "subagent_completed";
|
||||
export type AgentRunMessageStatus = "pending" | "consumed";
|
||||
export type ApprovalStatus = "pending" | "approved" | "rejected" | "revoked" | "expired" | "consumed";
|
||||
export type ArtifactKind = "evidence" | "plan" | "proposal" | "report" | "snapshot" | "log";
|
||||
@@ -344,6 +347,8 @@ export interface AgentRunTable {
|
||||
mode: Generated<AgentRunMode>;
|
||||
dedupe_key: string | null;
|
||||
upstream_id: string | null;
|
||||
depth: Generated<number>;
|
||||
spawn_reason: string | null;
|
||||
}
|
||||
|
||||
export interface AgentRunEventTable {
|
||||
|
||||
Reference in new issue
Block a user