Replace the dual task/monitor model, NO_REPLY string protocol, and Agent self-delivery with a single Scheduled Run path: claim-time JobRun snapshots, isolated Root/named Agent execution, exactly-once complete_scheduled_run termination, and Scheduler-owned policy delivery through a persistent outbox. - SQLite v11: drop job_kind/model/delete_after_run, add job_runs with status/outcome joint constraints and delivery lease columns; one-shot BEGIN IMMEDIATE migration with atomic rollback. - Non-blocking JoinSet event loop with bounded run/delivery concurrency; terminal commit before any channel I/O; recover unfinished runs as unknown. - ExecutionOrigin::Scheduled propagates to descendants, completion sink is top-level only, background delegation downgrades to foreground. - Typed delivery receipts, fixed target_session_id, idempotent scheduled:<job_run_id> history insert. - New cron_runs read-only tool; cron_add/update drop kind/model; WebUI and Health consume the same JobRun projection. - Bump version to 1.22.0.
117 lines
3.3 KiB
JSON
117 lines
3.3 KiB
JSON
{
|
|
"providers": {
|
|
"aliyun": {
|
|
"type": "openai",
|
|
"base_url": "https://api.openai.com/v1",
|
|
"api_key": "<DASHSCOPE_API_KEY>",
|
|
"extra_headers": {}
|
|
},
|
|
"openai": {
|
|
"type": "openai",
|
|
"base_url": "https://api.openai.com/v1",
|
|
"api_key": "<OPENAI_API_KEY>",
|
|
"extra_headers": {}
|
|
},
|
|
"anthropic": {
|
|
"type": "anthropic",
|
|
"base_url": "https://api.anthropic.com/v1",
|
|
"api_key": "<ANTHROPIC_API_KEY>",
|
|
"extra_headers": {}
|
|
}
|
|
},
|
|
"models": {
|
|
"qwen-plus": {
|
|
"model_id": "qwen-plus",
|
|
"temperature": 0.0,
|
|
"max_tokens": 8192,
|
|
"token_limit": 128000
|
|
},
|
|
"gpt-4o": {
|
|
"model_id": "gpt-4o",
|
|
"temperature": 0.7,
|
|
"max_tokens": 4096,
|
|
"input_type": ["text", "image"]
|
|
},
|
|
"claude-sonnet-4-20250514": {
|
|
"model_id": "claude-sonnet-4-20250514",
|
|
"temperature": 0.7,
|
|
"max_tokens": 8192,
|
|
"input_type": ["text", "image"]
|
|
}
|
|
},
|
|
"agents": {
|
|
"default": {
|
|
"provider": "aliyun",
|
|
"model": "qwen-plus",
|
|
"max_tool_iterations": 99
|
|
}
|
|
},
|
|
"context_compaction": {
|
|
"enabled": true,
|
|
"reserve_tokens": 16384,
|
|
"keep_recent_tokens": 20000
|
|
},
|
|
"gateway": {
|
|
"host": "127.0.0.1",
|
|
"port": 19876,
|
|
"require_pairing": true,
|
|
"scheduler": {
|
|
"enabled": true,
|
|
"poll_interval_secs": 60,
|
|
"max_concurrent": 1,
|
|
"execution_timeout_secs": 900
|
|
}
|
|
},
|
|
"client": {
|
|
"gateway_url": "ws://127.0.0.1:19876/ws"
|
|
},
|
|
"channels": {
|
|
"feishu": {
|
|
"enabled": true,
|
|
"app_id": "<FEISHU_APP_ID>",
|
|
"app_secret": "<FEISHU_APP_SECRET>",
|
|
"allow_from": ["*"],
|
|
"require_mention": true,
|
|
"agent": "default",
|
|
"media_dir": "~/.picobot/media/feishu",
|
|
"reaction_emoji": "Typing",
|
|
"live_updates": false,
|
|
"live_update_interval_ms": 500,
|
|
"max_image_bytes": 10485760,
|
|
"max_file_bytes": 26214400,
|
|
"media_dir_max_bytes": 536870912,
|
|
"request_timeout_secs": 30
|
|
}
|
|
},
|
|
"memory": {
|
|
"consolidation_provider": null,
|
|
"consolidation_model": null,
|
|
"recall_limit": 5,
|
|
"idle_consolidation_minutes": 10,
|
|
"timeline_retention_days": 90,
|
|
"max_failures_before_degrade": 3
|
|
},
|
|
"mcp": {
|
|
"servers": [],
|
|
"tool_timeout_secs": 180
|
|
},
|
|
"browser": {
|
|
"enabled": true,
|
|
"command": "agent-browser",
|
|
"headless": true,
|
|
"browser_executable_path": null,
|
|
"max_sessions": 4,
|
|
"idle_timeout_secs": 3600,
|
|
"command_timeout_secs": 120,
|
|
"max_output_chars": 50000,
|
|
"content_boundaries": true,
|
|
"allowed_domains": [],
|
|
"allow_private_hosts": false,
|
|
"artifact_dir": "~/.picobot/media/browser",
|
|
"persistence": {
|
|
"profile_dir": "~/.picobot/browser/profiles"
|
|
}
|
|
},
|
|
"workspace_dir": "~/.picobot/workspace"
|
|
}
|