use super::{
ShapeFieldDescriptor, Ty, TY_ANY, TY_BOOL, TY_CLOSURE, TY_DICT, TY_DICT_OR_NIL, TY_FLOAT,
TY_INT, TY_LIST, TY_NIL, TY_STRING, TY_STRING_OR_NIL,
};
const TY_BOOL_OR_DICT: Ty = Ty::Union(&[TY_BOOL, TY_DICT]);
const TY_BOOL_OR_DICT_OR_NIL: Ty = Ty::Union(&[TY_BOOL, TY_DICT, TY_NIL]);
const TY_INT_OR_FLOAT_OR_DICT: Ty = Ty::Union(&[TY_INT, TY_FLOAT, TY_DICT]);
const TY_LIST_OR_STRING: Ty = Ty::Union(&[TY_LIST, TY_STRING]);
const TY_STRING_OR_DICT: Ty = Ty::Union(&[TY_STRING, TY_DICT]);
const TY_STRING_OR_DICT_OR_BOOL: Ty = Ty::Union(&[TY_STRING, TY_DICT, TY_BOOL]);
const TY_STRING_OR_DICT_OR_NIL: Ty = Ty::Union(&[TY_STRING, TY_DICT, TY_NIL]);
const TY_STRING_OR_LIST: Ty = Ty::Union(&[TY_STRING, TY_LIST]);
const TY_TOOL_REGISTRY_OR_LIST: Ty = Ty::Union(&[TY_LIST, TY_DICT]);
pub(crate) const AGENT_SPAWN_CONFIG: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("task", TY_STRING),
ShapeFieldDescriptor::optional("name", TY_STRING),
ShapeFieldDescriptor::optional("wait", TY_BOOL),
ShapeFieldDescriptor::optional("graph", TY_ANY),
ShapeFieldDescriptor::optional("node", TY_ANY),
ShapeFieldDescriptor::optional("artifacts", TY_LIST),
ShapeFieldDescriptor::optional("transcript", TY_ANY),
ShapeFieldDescriptor::optional("permissions", TY_ANY),
ShapeFieldDescriptor::optional("options", TY_DICT),
ShapeFieldDescriptor::optional("execution", TY_DICT),
ShapeFieldDescriptor::optional("audit", TY_DICT),
ShapeFieldDescriptor::optional("carry", TY_DICT),
ShapeFieldDescriptor::optional("policy", TY_ANY),
ShapeFieldDescriptor::optional("tools", TY_LIST),
]);
pub(crate) const SUB_AGENT_OPTIONS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("_type", TY_STRING),
ShapeFieldDescriptor::optional("name", TY_STRING),
ShapeFieldDescriptor::optional("system", TY_STRING),
ShapeFieldDescriptor::optional("session_id", TY_STRING),
ShapeFieldDescriptor::optional("background", TY_BOOL),
ShapeFieldDescriptor::optional("carry", TY_DICT),
ShapeFieldDescriptor::optional("allowed_tools", TY_LIST),
ShapeFieldDescriptor::optional("policy", TY_ANY),
ShapeFieldDescriptor::optional("returns_schema", TY_ANY),
ShapeFieldDescriptor::optional("returns", TY_DICT),
ShapeFieldDescriptor::optional("execution", TY_DICT),
ShapeFieldDescriptor::optional("request", TY_ANY),
ShapeFieldDescriptor::optional("research_questions", TY_LIST),
ShapeFieldDescriptor::optional("questions", TY_LIST),
ShapeFieldDescriptor::optional("action_items", TY_LIST),
ShapeFieldDescriptor::optional("actions", TY_LIST),
ShapeFieldDescriptor::optional("workflow_stages", TY_LIST),
ShapeFieldDescriptor::optional("stages", TY_LIST),
ShapeFieldDescriptor::optional("verification_steps", TY_LIST),
ShapeFieldDescriptor::optional("verification", TY_LIST),
ShapeFieldDescriptor::optional("model", TY_STRING),
ShapeFieldDescriptor::optional("provider", TY_STRING),
ShapeFieldDescriptor::optional("max_tokens", TY_INT),
ShapeFieldDescriptor::optional("temperature", TY_FLOAT),
ShapeFieldDescriptor::optional("top_p", TY_FLOAT),
ShapeFieldDescriptor::optional("top_k", TY_INT),
ShapeFieldDescriptor::optional("stop", TY_STRING_OR_LIST),
ShapeFieldDescriptor::optional("seed", TY_INT),
ShapeFieldDescriptor::optional("frequency_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("presence_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("response_format", TY_STRING_OR_DICT),
ShapeFieldDescriptor::optional("schema", TY_ANY),
ShapeFieldDescriptor::optional("schema_retries", TY_INT),
ShapeFieldDescriptor::optional("schema_recover", TY_BOOL),
ShapeFieldDescriptor::optional("cache", TY_BOOL_OR_DICT),
ShapeFieldDescriptor::optional("transcript", TY_ANY),
ShapeFieldDescriptor::optional("budget", TY_INT_OR_FLOAT_OR_DICT),
ShapeFieldDescriptor::optional("budget_usd", Ty::Union(&[TY_INT, TY_FLOAT])),
ShapeFieldDescriptor::optional("mock", TY_ANY),
ShapeFieldDescriptor::optional("messages", TY_LIST),
ShapeFieldDescriptor::optional("metadata", TY_DICT),
ShapeFieldDescriptor::optional("tool_choice", TY_STRING_OR_DICT),
ShapeFieldDescriptor::optional("thinking", TY_ANY),
ShapeFieldDescriptor::optional("reasoning_effort", TY_STRING),
ShapeFieldDescriptor::optional("interleaved_thinking", TY_BOOL),
ShapeFieldDescriptor::optional("anthropic_beta_features", TY_LIST),
ShapeFieldDescriptor::optional("profile", TY_STRING),
ShapeFieldDescriptor::optional("loop_until_done", TY_BOOL),
ShapeFieldDescriptor::optional("done_sentinel", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("max_iterations", TY_INT),
ShapeFieldDescriptor::optional("iteration_budget", TY_STRING_OR_DICT_OR_NIL),
ShapeFieldDescriptor::optional("loop_control", TY_ANY),
ShapeFieldDescriptor::optional("max_nudges", TY_INT),
ShapeFieldDescriptor::optional("nudge", TY_STRING),
ShapeFieldDescriptor::optional("llm_caller", TY_ANY),
ShapeFieldDescriptor::optional("tool_caller", TY_ANY),
ShapeFieldDescriptor::optional("llm_retries", TY_INT),
ShapeFieldDescriptor::optional("llm_backoff_ms", TY_INT),
ShapeFieldDescriptor::optional("reasoning_policy", TY_ANY),
ShapeFieldDescriptor::optional("thinking_policy", TY_ANY),
ShapeFieldDescriptor::optional("reasoning_scale", TY_STRING),
ShapeFieldDescriptor::optional("problem_scale", TY_STRING),
ShapeFieldDescriptor::optional("reasoning_task", TY_STRING),
ShapeFieldDescriptor::optional("task_kind", TY_STRING),
ShapeFieldDescriptor::optional("tools", TY_TOOL_REGISTRY_OR_LIST),
ShapeFieldDescriptor::optional("tool_format", TY_STRING),
ShapeFieldDescriptor::optional("native_tool_fallback", TY_STRING),
ShapeFieldDescriptor::optional("tool_search", TY_DICT),
ShapeFieldDescriptor::optional("tool_retries", TY_INT),
ShapeFieldDescriptor::optional("tool_backoff_ms", TY_INT),
ShapeFieldDescriptor::optional("stop_after_successful_tools", TY_LIST),
ShapeFieldDescriptor::optional("require_successful_tools", TY_LIST),
ShapeFieldDescriptor::optional("turn_policy", TY_DICT),
ShapeFieldDescriptor::optional("require_action_or_yield", TY_BOOL),
ShapeFieldDescriptor::optional("tool_examples", TY_STRING),
ShapeFieldDescriptor::optional("shared_types", TY_STRING),
ShapeFieldDescriptor::optional("stall_diagnostics", TY_BOOL_OR_DICT_OR_NIL),
ShapeFieldDescriptor::optional("permissions", TY_ANY),
ShapeFieldDescriptor::optional("approval_policy", TY_ANY),
ShapeFieldDescriptor::optional("command_policy", TY_ANY),
ShapeFieldDescriptor::optional("autonomy_budget", TY_ANY),
ShapeFieldDescriptor::optional("token_budget", TY_INT),
ShapeFieldDescriptor::optional("output_format", TY_ANY),
ShapeFieldDescriptor::optional("json_schema", TY_ANY),
ShapeFieldDescriptor::optional("output_schema", TY_ANY),
ShapeFieldDescriptor::optional("root_task", TY_STRING),
ShapeFieldDescriptor::optional("deliverables", TY_LIST),
ShapeFieldDescriptor::optional("task_ledger", TY_DICT),
ShapeFieldDescriptor::optional("persona", TY_STRING),
ShapeFieldDescriptor::optional("daemon", TY_BOOL),
ShapeFieldDescriptor::optional("persist_path", TY_STRING),
ShapeFieldDescriptor::optional("resume_path", TY_STRING),
ShapeFieldDescriptor::optional("wake_interval_ms", TY_INT),
ShapeFieldDescriptor::optional("watch_paths", TY_LIST_OR_STRING),
ShapeFieldDescriptor::optional("consolidate_on_idle", TY_BOOL),
ShapeFieldDescriptor::optional("compaction", TY_STRING_OR_DICT_OR_BOOL),
ShapeFieldDescriptor::optional("auto_compact", TY_BOOL_OR_DICT),
ShapeFieldDescriptor::optional("compact_threshold", TY_INT),
ShapeFieldDescriptor::optional("compact_keep_first", TY_INT),
ShapeFieldDescriptor::optional("compact_keep_last", TY_INT),
ShapeFieldDescriptor::optional("compact_strategy", TY_STRING),
ShapeFieldDescriptor::optional("compact_callback", TY_ANY),
ShapeFieldDescriptor::optional("idle_watchdog_attempts", TY_INT),
ShapeFieldDescriptor::optional("context_callback", TY_ANY),
ShapeFieldDescriptor::optional("context_filter", TY_ANY),
ShapeFieldDescriptor::optional("timestamp_messages", TY_BOOL),
ShapeFieldDescriptor::optional("message_timestamps", TY_BOOL),
ShapeFieldDescriptor::optional("message_decorator", TY_ANY),
ShapeFieldDescriptor::optional("decorate_message", TY_ANY),
ShapeFieldDescriptor::optional("prompts", TY_DICT),
ShapeFieldDescriptor::optional("prompt_overrides", TY_DICT),
ShapeFieldDescriptor::optional("post_turn_callback", TY_ANY),
ShapeFieldDescriptor::optional("verify_completion", TY_ANY),
ShapeFieldDescriptor::optional("verify_completion_judge", TY_BOOL_OR_DICT),
ShapeFieldDescriptor::optional("done_judge", TY_BOOL_OR_DICT),
ShapeFieldDescriptor::optional("max_verify_attempts", TY_INT),
ShapeFieldDescriptor::optional("llm_transcript_dir", TY_STRING),
ShapeFieldDescriptor::optional("skills", TY_ANY),
ShapeFieldDescriptor::optional("skill_registry", TY_ANY),
ShapeFieldDescriptor::optional("skill_match", TY_DICT),
ShapeFieldDescriptor::optional("skill_catalog_limit", TY_INT),
ShapeFieldDescriptor::optional("skill_catalog_budget", TY_INT),
ShapeFieldDescriptor::optional("skill_catalog_always", TY_BOOL),
ShapeFieldDescriptor::optional("working_files", TY_LIST_OR_STRING),
ShapeFieldDescriptor::optional("mcp_servers", TY_LIST),
ShapeFieldDescriptor::optional("mcp_initialize_advisory", TY_BOOL),
ShapeFieldDescriptor::optional("mcp_context", TY_DICT),
ShapeFieldDescriptor::optional("system_preamble", TY_ANY),
ShapeFieldDescriptor::optional("system_prefix", TY_ANY),
ShapeFieldDescriptor::optional("system_context", TY_ANY),
ShapeFieldDescriptor::optional("system_prompt_parts", TY_ANY),
ShapeFieldDescriptor::optional("system_appendix", TY_ANY),
ShapeFieldDescriptor::optional("system_suffix", TY_ANY),
]);
pub(crate) const DAEMON_CONFIG: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("task", TY_STRING),
ShapeFieldDescriptor::new("persist_path", TY_STRING),
ShapeFieldDescriptor::optional("name", TY_STRING),
ShapeFieldDescriptor::optional("session_id", TY_STRING),
ShapeFieldDescriptor::optional("system", TY_STRING),
ShapeFieldDescriptor::optional("event_queue_capacity", TY_INT),
ShapeFieldDescriptor::optional("model", TY_STRING),
ShapeFieldDescriptor::optional("model_alias", TY_STRING),
ShapeFieldDescriptor::optional("model_tier", TY_STRING),
ShapeFieldDescriptor::optional("provider", TY_STRING),
ShapeFieldDescriptor::optional("max_tokens", TY_INT),
ShapeFieldDescriptor::optional("temperature", TY_FLOAT),
ShapeFieldDescriptor::optional("top_p", TY_FLOAT),
ShapeFieldDescriptor::optional("top_k", TY_INT),
ShapeFieldDescriptor::optional("stop", TY_STRING_OR_LIST),
ShapeFieldDescriptor::optional("seed", TY_INT),
ShapeFieldDescriptor::optional("frequency_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("presence_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("response_format", TY_STRING_OR_DICT),
ShapeFieldDescriptor::optional("schema", TY_ANY),
ShapeFieldDescriptor::optional("thinking", TY_ANY),
ShapeFieldDescriptor::optional("reasoning_effort", TY_STRING),
ShapeFieldDescriptor::optional("reasoning_policy", TY_ANY),
ShapeFieldDescriptor::optional("thinking_policy", TY_ANY),
ShapeFieldDescriptor::optional("reasoning_scale", TY_ANY),
ShapeFieldDescriptor::optional("problem_scale", TY_ANY),
ShapeFieldDescriptor::optional("reasoning_task", TY_STRING),
ShapeFieldDescriptor::optional("tools", TY_TOOL_REGISTRY_OR_LIST),
ShapeFieldDescriptor::optional("tool_choice", TY_STRING_OR_DICT),
ShapeFieldDescriptor::optional("cache", TY_BOOL_OR_DICT),
ShapeFieldDescriptor::optional("timeout", TY_ANY),
ShapeFieldDescriptor::optional("structural_experiment", TY_ANY),
ShapeFieldDescriptor::optional("loop_until_done", TY_BOOL),
ShapeFieldDescriptor::optional("max_iterations", TY_INT),
ShapeFieldDescriptor::optional("max_nudges", TY_INT),
ShapeFieldDescriptor::optional("nudge", TY_ANY),
ShapeFieldDescriptor::optional("turn_policy", TY_STRING),
ShapeFieldDescriptor::optional("stop_after_successful_tools", TY_ANY),
ShapeFieldDescriptor::optional("require_successful_tools", TY_ANY),
ShapeFieldDescriptor::optional("tool_retries", TY_INT),
ShapeFieldDescriptor::optional("tool_backoff_ms", TY_INT),
ShapeFieldDescriptor::optional("tool_format", TY_STRING),
ShapeFieldDescriptor::optional("native_tool_fallback", TY_STRING),
ShapeFieldDescriptor::optional("llm_caller", TY_ANY),
ShapeFieldDescriptor::optional("tool_caller", TY_ANY),
ShapeFieldDescriptor::optional("llm_options", TY_DICT),
ShapeFieldDescriptor::optional("iteration_budget", TY_ANY),
ShapeFieldDescriptor::optional("loop_control", TY_ANY),
ShapeFieldDescriptor::optional("verify_completion", TY_ANY),
ShapeFieldDescriptor::optional("verify_completion_judge", TY_ANY),
ShapeFieldDescriptor::optional("done_judge", TY_ANY),
ShapeFieldDescriptor::optional("done_sentinel", TY_ANY),
ShapeFieldDescriptor::optional("max_verify_attempts", TY_INT),
ShapeFieldDescriptor::optional("llm_retries", TY_INT),
ShapeFieldDescriptor::optional("llm_backoff_ms", TY_INT),
ShapeFieldDescriptor::optional("context_callback", TY_ANY),
ShapeFieldDescriptor::optional("context_filter", TY_ANY),
ShapeFieldDescriptor::optional("timestamp_messages", TY_BOOL),
ShapeFieldDescriptor::optional("message_decorator", TY_ANY),
ShapeFieldDescriptor::optional("prompts", TY_DICT),
ShapeFieldDescriptor::optional("prompt_overrides", TY_DICT),
ShapeFieldDescriptor::optional("llm_transcript_dir", TY_STRING),
ShapeFieldDescriptor::optional("stall_diagnostics", TY_ANY),
ShapeFieldDescriptor::optional("skills", TY_ANY),
ShapeFieldDescriptor::optional("skill_match", TY_ANY),
ShapeFieldDescriptor::optional("working_files", TY_LIST),
ShapeFieldDescriptor::optional("mcp_servers", TY_ANY),
ShapeFieldDescriptor::optional("tool_search", TY_ANY),
ShapeFieldDescriptor::optional("tool_search_limit", TY_INT),
ShapeFieldDescriptor::optional("tool_search_strategy", TY_STRING),
ShapeFieldDescriptor::optional("autonomy_budget", TY_ANY),
ShapeFieldDescriptor::optional("policy", TY_ANY),
ShapeFieldDescriptor::optional("approval_policy", TY_ANY),
ShapeFieldDescriptor::optional("command_policy", TY_ANY),
ShapeFieldDescriptor::optional("permissions", TY_ANY),
ShapeFieldDescriptor::optional("daemon", TY_BOOL),
ShapeFieldDescriptor::optional("wake_interval_ms", TY_INT),
ShapeFieldDescriptor::optional("watch_paths", TY_LIST_OR_STRING),
ShapeFieldDescriptor::optional("consolidate_on_idle", TY_BOOL),
ShapeFieldDescriptor::optional("compaction", TY_ANY),
ShapeFieldDescriptor::optional("compact_threshold", TY_INT),
ShapeFieldDescriptor::optional("compact_keep_first", TY_INT),
ShapeFieldDescriptor::optional("compact_keep_last", TY_INT),
ShapeFieldDescriptor::optional("idle_watchdog_attempts", TY_INT),
ShapeFieldDescriptor::optional("profile", TY_STRING),
ShapeFieldDescriptor::optional("options", TY_DICT),
]);
pub(crate) const AGENT_SESSION_SEED_OPTS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("truncate_to_last", TY_INT),
ShapeFieldDescriptor::optional("drop_tool_calls", TY_BOOL),
ShapeFieldDescriptor::optional("rename_session", TY_STRING),
ShapeFieldDescriptor::optional("validate", TY_BOOL),
ShapeFieldDescriptor::optional("model", TY_STRING),
ShapeFieldDescriptor::optional("provider", TY_STRING),
]);
pub(crate) const AGENT_SESSION_COMPACT_OPTS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("keep_last", TY_INT),
ShapeFieldDescriptor::optional("system", TY_STRING),
ShapeFieldDescriptor::optional("model", TY_STRING),
ShapeFieldDescriptor::optional("provider", TY_STRING),
ShapeFieldDescriptor::optional("max_tokens", TY_INT),
ShapeFieldDescriptor::optional("temperature", TY_FLOAT),
]);
pub(crate) const LLM_CALL_OPTIONS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("model", TY_STRING),
ShapeFieldDescriptor::optional("model_tier", TY_STRING),
ShapeFieldDescriptor::optional("provider", TY_STRING),
ShapeFieldDescriptor::optional("route_policy", Ty::Union(&[TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("prefer", Ty::Union(&[TY_STRING, TY_LIST])),
ShapeFieldDescriptor::optional("fallback_strategy", TY_STRING),
ShapeFieldDescriptor::optional("strategy", TY_STRING),
ShapeFieldDescriptor::optional("fallback_chain", Ty::Union(&[TY_STRING, TY_LIST])),
ShapeFieldDescriptor::optional("budget_usd", Ty::Union(&[TY_FLOAT, TY_INT])),
ShapeFieldDescriptor::optional("system", TY_STRING),
ShapeFieldDescriptor::optional("messages", TY_LIST),
ShapeFieldDescriptor::optional("session_id", TY_STRING),
ShapeFieldDescriptor::optional("system_preamble", TY_ANY),
ShapeFieldDescriptor::optional("system_prefix", TY_ANY),
ShapeFieldDescriptor::optional("system_context", TY_ANY),
ShapeFieldDescriptor::optional("system_prompt_parts", TY_ANY),
ShapeFieldDescriptor::optional("system_appendix", TY_ANY),
ShapeFieldDescriptor::optional("system_suffix", TY_ANY),
ShapeFieldDescriptor::optional("max_tokens", TY_INT),
ShapeFieldDescriptor::optional("temperature", TY_FLOAT),
ShapeFieldDescriptor::optional("top_p", TY_FLOAT),
ShapeFieldDescriptor::optional("top_k", TY_INT),
ShapeFieldDescriptor::optional("logprobs", TY_BOOL),
ShapeFieldDescriptor::optional("top_logprobs", TY_INT),
ShapeFieldDescriptor::optional("stop", Ty::Union(&[TY_STRING, TY_LIST])),
ShapeFieldDescriptor::optional("seed", TY_INT),
ShapeFieldDescriptor::optional("frequency_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("presence_penalty", TY_FLOAT),
ShapeFieldDescriptor::optional("response_format", Ty::Union(&[TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("output_format", Ty::Union(&[TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("schema", TY_ANY),
ShapeFieldDescriptor::optional("json_schema", TY_ANY),
ShapeFieldDescriptor::optional("output_schema", TY_ANY),
ShapeFieldDescriptor::optional("output_validation", TY_STRING),
ShapeFieldDescriptor::optional("schema_retries", TY_INT),
ShapeFieldDescriptor::optional("schema_retry_nudge", Ty::Union(&[TY_BOOL, TY_STRING])),
ShapeFieldDescriptor::optional("retries", TY_INT),
ShapeFieldDescriptor::optional("schema_recover", TY_BOOL),
ShapeFieldDescriptor::optional("repair", Ty::Union(&[TY_BOOL, TY_DICT])),
ShapeFieldDescriptor::optional("llm_repair", Ty::Union(&[TY_BOOL, TY_DICT])),
ShapeFieldDescriptor::optional("thinking", Ty::Union(&[TY_BOOL, TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("reasoning_effort", TY_STRING),
ShapeFieldDescriptor::optional("interleaved_thinking", TY_BOOL),
ShapeFieldDescriptor::optional("anthropic_beta_features", Ty::Union(&[TY_STRING, TY_LIST])),
ShapeFieldDescriptor::optional("vision", TY_BOOL),
ShapeFieldDescriptor::optional("audio", TY_BOOL),
ShapeFieldDescriptor::optional("pdf", TY_BOOL),
ShapeFieldDescriptor::optional("tools", Ty::Union(&[TY_LIST, TY_DICT])),
ShapeFieldDescriptor::optional("tool_choice", Ty::Union(&[TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("tool_search", Ty::Union(&[TY_BOOL, TY_STRING, TY_DICT])),
ShapeFieldDescriptor::optional("tool_format", TY_STRING),
ShapeFieldDescriptor::optional("cache", Ty::Union(&[TY_BOOL, TY_DICT])),
ShapeFieldDescriptor::optional("budget", Ty::Union(&[TY_FLOAT, TY_INT, TY_DICT])),
ShapeFieldDescriptor::optional("llm_retries", TY_INT),
ShapeFieldDescriptor::optional("llm_backoff_ms", TY_INT),
ShapeFieldDescriptor::optional("timeout", TY_INT),
ShapeFieldDescriptor::optional("idle_timeout", TY_INT),
ShapeFieldDescriptor::optional("stream", TY_BOOL),
ShapeFieldDescriptor::optional("anthropic", TY_DICT),
ShapeFieldDescriptor::optional("openai", TY_DICT),
ShapeFieldDescriptor::optional("openrouter", TY_DICT),
ShapeFieldDescriptor::optional("together", TY_DICT),
ShapeFieldDescriptor::optional("groq", TY_DICT),
ShapeFieldDescriptor::optional("deepseek", TY_DICT),
ShapeFieldDescriptor::optional("fireworks", TY_DICT),
ShapeFieldDescriptor::optional("huggingface", TY_DICT),
ShapeFieldDescriptor::optional("local", TY_DICT),
ShapeFieldDescriptor::optional("mlx", TY_DICT),
ShapeFieldDescriptor::optional("vllm", TY_DICT),
ShapeFieldDescriptor::optional("tgi", TY_DICT),
ShapeFieldDescriptor::optional("dashscope", TY_DICT),
ShapeFieldDescriptor::optional("gemini", TY_DICT),
ShapeFieldDescriptor::optional("azure_openai", TY_DICT),
ShapeFieldDescriptor::optional("bedrock", TY_DICT),
ShapeFieldDescriptor::optional("ollama", TY_DICT),
ShapeFieldDescriptor::optional("vertex", TY_DICT),
ShapeFieldDescriptor::optional("mock", TY_ANY),
ShapeFieldDescriptor::optional("fake", TY_DICT),
ShapeFieldDescriptor::optional("prefill", TY_STRING),
ShapeFieldDescriptor::optional(
"structural_experiment",
Ty::Union(&[TY_STRING, TY_DICT, TY_CLOSURE]),
),
ShapeFieldDescriptor::optional("transcript", TY_ANY),
ShapeFieldDescriptor::optional("metadata", TY_DICT),
]);
pub(crate) const READ_LINE_OPTIONS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("prompt", TY_STRING),
ShapeFieldDescriptor::optional("timeout_ms", Ty::Union(&[TY_INT, Ty::Named("duration")])),
ShapeFieldDescriptor::optional("trim", TY_BOOL),
ShapeFieldDescriptor::optional("echo", TY_BOOL),
ShapeFieldDescriptor::optional("raw", TY_BOOL),
]);
pub(crate) const PAGER_OPTIONS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("body", TY_STRING),
ShapeFieldDescriptor::optional("title", TY_STRING),
ShapeFieldDescriptor::optional("footer", TY_STRING),
ShapeFieldDescriptor::optional("format", TY_STRING),
ShapeFieldDescriptor::optional("no_pager", TY_BOOL),
]);
pub(crate) const SIGNAL_HANDLER_OPTIONS: Ty = Ty::Shape(&[
ShapeFieldDescriptor::optional("once", TY_BOOL),
ShapeFieldDescriptor::optional("restore", TY_BOOL),
]);
pub(crate) const WORKER_SUMMARY: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("_type", Ty::LitString("agent_handle")),
ShapeFieldDescriptor::new("id", TY_STRING),
ShapeFieldDescriptor::new("name", TY_STRING),
ShapeFieldDescriptor::new("task", TY_STRING),
ShapeFieldDescriptor::new("mode", TY_STRING),
ShapeFieldDescriptor::new("status", TY_STRING),
ShapeFieldDescriptor::new("created_at", TY_STRING),
ShapeFieldDescriptor::new("started_at", TY_STRING),
ShapeFieldDescriptor::optional("finished_at", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("awaiting_started_at", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("history", TY_LIST),
ShapeFieldDescriptor::optional("request", TY_DICT_OR_NIL),
ShapeFieldDescriptor::new("provenance", TY_DICT),
ShapeFieldDescriptor::optional("result", TY_ANY),
ShapeFieldDescriptor::optional("error", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("artifact_count", TY_INT),
ShapeFieldDescriptor::new("has_transcript", TY_BOOL),
ShapeFieldDescriptor::optional("parent_worker_id", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("parent_stage_id", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("child_run_id", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("child_run_path", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("execution", TY_DICT),
ShapeFieldDescriptor::new("snapshot_path", TY_STRING),
ShapeFieldDescriptor::new("audit", TY_DICT),
]);
pub(crate) const SUB_AGENT_RESULT: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("ok", TY_BOOL),
ShapeFieldDescriptor::new("summary", TY_STRING),
ShapeFieldDescriptor::new("artifacts", TY_LIST),
ShapeFieldDescriptor::new("evidence_added", TY_INT),
ShapeFieldDescriptor::new("tokens_used", TY_INT),
ShapeFieldDescriptor::new("budget_exceeded", TY_BOOL),
ShapeFieldDescriptor::new("data", TY_ANY),
ShapeFieldDescriptor::new("error", TY_ANY),
ShapeFieldDescriptor::new("session_id", TY_STRING),
ShapeFieldDescriptor::new("transcript", TRANSCRIPT),
]);
pub(crate) const DAEMON_SUMMARY: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("id", TY_STRING),
ShapeFieldDescriptor::new("name", TY_STRING),
ShapeFieldDescriptor::new("status", TY_STRING),
ShapeFieldDescriptor::new("session_id", TY_STRING),
ShapeFieldDescriptor::new("persist_path", TY_STRING),
ShapeFieldDescriptor::new("snapshot_path", TY_STRING),
ShapeFieldDescriptor::new("pending_event_count", TY_INT),
ShapeFieldDescriptor::new("queued_event_count", TY_INT),
ShapeFieldDescriptor::new("event_queue_capacity", TY_INT),
ShapeFieldDescriptor::optional("error", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("result", TY_ANY),
ShapeFieldDescriptor::optional("daemon_state", TY_ANY),
ShapeFieldDescriptor::optional("saved_at", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("inflight_event", TY_DICT_OR_NIL),
]);
pub(crate) const SESSION_ANCESTRY: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("parent_id", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("child_ids", TY_LIST),
ShapeFieldDescriptor::new("root_id", TY_STRING),
]);
pub(crate) const TRANSCRIPT: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("_type", Ty::LitString("transcript")),
ShapeFieldDescriptor::new("version", TY_INT),
ShapeFieldDescriptor::new("id", TY_STRING),
ShapeFieldDescriptor::new("messages", TY_LIST),
ShapeFieldDescriptor::new("events", TY_LIST),
ShapeFieldDescriptor::new("assets", TY_LIST),
ShapeFieldDescriptor::optional("summary", TY_STRING),
ShapeFieldDescriptor::optional("metadata", TY_DICT),
ShapeFieldDescriptor::optional("state", TY_STRING),
ShapeFieldDescriptor::optional("archived_messages", TY_INT),
]);
pub(crate) const SESSION_SNAPSHOT: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("_type", Ty::LitString("transcript")),
ShapeFieldDescriptor::new("version", TY_INT),
ShapeFieldDescriptor::new("id", TY_STRING),
ShapeFieldDescriptor::new("length", TY_INT),
ShapeFieldDescriptor::new("messages", TY_LIST),
ShapeFieldDescriptor::new("events", TY_LIST),
ShapeFieldDescriptor::new("assets", TY_LIST),
ShapeFieldDescriptor::new("created_at", TY_STRING),
ShapeFieldDescriptor::new("parent_id", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("child_ids", TY_LIST),
ShapeFieldDescriptor::new("branched_at_event_index", Ty::Union(&[TY_INT, TY_NIL])),
ShapeFieldDescriptor::new("system_prompt", TY_STRING_OR_NIL),
ShapeFieldDescriptor::new("tool_format", TY_STRING_OR_NIL),
ShapeFieldDescriptor::optional("summary", TY_STRING),
ShapeFieldDescriptor::optional("metadata", TY_DICT),
ShapeFieldDescriptor::optional("state", TY_STRING),
]);
pub(crate) const TOOL_REGISTRY: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("_type", Ty::LitString("tool_registry")),
ShapeFieldDescriptor::new("tools", TY_LIST),
]);
pub(crate) const LLM_USAGE: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("input_tokens", TY_INT),
ShapeFieldDescriptor::new("output_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_read_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_write_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_creation_input_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_hit_ratio", TY_FLOAT),
ShapeFieldDescriptor::new("cache_savings_usd", TY_FLOAT),
]);
pub(crate) const LLM_CALL_RESULT: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("text", TY_STRING),
ShapeFieldDescriptor::new("model", TY_STRING),
ShapeFieldDescriptor::new("provider", TY_STRING),
ShapeFieldDescriptor::new("input_tokens", TY_INT),
ShapeFieldDescriptor::new("output_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_read_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_write_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_creation_input_tokens", TY_INT),
ShapeFieldDescriptor::new("cache_hit_ratio", TY_FLOAT),
ShapeFieldDescriptor::new("cache_savings_usd", TY_FLOAT),
ShapeFieldDescriptor::new("usage", LLM_USAGE),
ShapeFieldDescriptor::new("native_tool_calls", TY_LIST),
ShapeFieldDescriptor::new("prose", TY_STRING),
ShapeFieldDescriptor::new("visible_text", TY_STRING),
ShapeFieldDescriptor::new("blocks", TY_LIST),
ShapeFieldDescriptor::optional("data", TY_ANY),
ShapeFieldDescriptor::new("tool_calls", TY_LIST),
ShapeFieldDescriptor::optional("protocol_violations", TY_LIST),
ShapeFieldDescriptor::optional("tool_parse_errors", TY_LIST),
ShapeFieldDescriptor::optional("done_marker", TY_STRING),
ShapeFieldDescriptor::optional("canonical_text", TY_STRING),
ShapeFieldDescriptor::optional("thinking", TY_STRING),
ShapeFieldDescriptor::optional("private_reasoning", TY_STRING),
ShapeFieldDescriptor::optional("thinking_summary", TY_STRING),
ShapeFieldDescriptor::optional("stop_reason", TY_STRING),
ShapeFieldDescriptor::new("transcript", TRANSCRIPT),
ShapeFieldDescriptor::optional("logprobs", TY_LIST),
]);
pub(crate) const LLM_CALL_ERROR: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("category", TY_STRING),
ShapeFieldDescriptor::new("kind", TY_STRING),
ShapeFieldDescriptor::new("reason", TY_STRING),
ShapeFieldDescriptor::new("message", TY_STRING),
ShapeFieldDescriptor::optional("retry_after_ms", TY_INT),
ShapeFieldDescriptor::optional("provider", TY_STRING),
ShapeFieldDescriptor::optional("model", TY_STRING),
]);
pub(crate) const LLM_CALL_SAFE_RESULT: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("ok", TY_BOOL),
ShapeFieldDescriptor::new("response", LLM_CALL_RESULT),
ShapeFieldDescriptor::new("error", LLM_CALL_ERROR),
]);
pub(crate) const IO_RESULT_ENVELOPE: Ty = Ty::Shape(&[
ShapeFieldDescriptor::new("ok", TY_BOOL),
ShapeFieldDescriptor::new("status", TY_STRING),
ShapeFieldDescriptor::optional("value", TY_STRING),
ShapeFieldDescriptor::optional("error", TY_STRING),
]);
const _: Ty = TY_NIL;