- tc-files: BlobStore trait + LocalBlobStore (traversal-proof keys); wired through Runtime (config storage.data_dir in deployments) - File tools: files.write/files.list (workspace-internal) + files.delete (gated FileDeletion — tested: file survives pending, gone after approve); GET /api/openclaw/files + /api/shared-drive/files (drive/agent scoped) - Skills: catalog/library + idempotent install with counter, uninstall; GET /api/skills[?clawId=], POST install/uninstall - tc-scheduler: croner cron math (clock-controlled tests), SKIP LOCKED claim-and-advance firing REAL runs into dedicated '⏰ name' sessions (reused, exactly-once), paused routines skipped; routines API + agent tool routine.schedule; loop spawned in server - Claw chat: 1:1 threads, chat.send enforcing the target's Other-Claws policy, chat.inbox whose output carries inter_agent taint; the run loop now ACCUMULATES taint from tool outputs into LoopState, classifies with it, and stamps steps + approvals — a poisoned inbox followed by email.send produces an approval whose taint_sources says inter_agent - ScriptedProvider scenario selection now keys on the most recent marker (session history kept earlier markers alive) 132 Rust tests green. Co-Authored-By: Claude Fable 5 <[email protected]>
59 lines
1.6 KiB
JSON
59 lines
1.6 KiB
JSON
{
|
|
"db_name": "PostgreSQL",
|
|
"query": "SELECT t.id, t.workspace_id, t.subject, t.sensitivity, t.created_at,\n ARRAY(SELECT p2.agent_id FROM thread_participants p2\n WHERE p2.thread_id = t.id) AS \"participants!\",\n (SELECT m.content->>'text' FROM thread_messages m\n WHERE m.thread_id = t.id\n ORDER BY m.created_at DESC LIMIT 1) AS last_preview\n FROM threads t\n JOIN thread_participants p ON p.thread_id = t.id\n WHERE p.agent_id = $1\n ORDER BY (SELECT max(m.created_at) FROM thread_messages m\n WHERE m.thread_id = t.id) DESC NULLS LAST",
|
|
"describe": {
|
|
"columns": [
|
|
{
|
|
"ordinal": 0,
|
|
"name": "id",
|
|
"type_info": "Uuid"
|
|
},
|
|
{
|
|
"ordinal": 1,
|
|
"name": "workspace_id",
|
|
"type_info": "Uuid"
|
|
},
|
|
{
|
|
"ordinal": 2,
|
|
"name": "subject",
|
|
"type_info": "Text"
|
|
},
|
|
{
|
|
"ordinal": 3,
|
|
"name": "sensitivity",
|
|
"type_info": "Text"
|
|
},
|
|
{
|
|
"ordinal": 4,
|
|
"name": "created_at",
|
|
"type_info": "Timestamptz"
|
|
},
|
|
{
|
|
"ordinal": 5,
|
|
"name": "participants!",
|
|
"type_info": "UuidArray"
|
|
},
|
|
{
|
|
"ordinal": 6,
|
|
"name": "last_preview",
|
|
"type_info": "Text"
|
|
}
|
|
],
|
|
"parameters": {
|
|
"Left": [
|
|
"Uuid"
|
|
]
|
|
},
|
|
"nullable": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
null,
|
|
null
|
|
]
|
|
},
|
|
"hash": "f1cd64a6ab15ad6b2ca0824738b42065f3aaca8234082f7b3c7d949e9c8552f6"
|
|
}
|