{name:'dsh_git_diff',description:'git diff (read-only, dumps to file if too large)',params:{path:'string?',staged:'bool?',maxBytes:'int? default 48000'}},
{name:'dsh_git_diff',description:'git diff (read-only, dumps to file if too large)',params:{path:'string?',staged:'bool?',maxBytes:'int? default 48000'}},
{name:'dsh_handoff',description:'[Recommended for multi-step tasks] Local agent (dsh headless) runs the full plan autonomously: reads/searches/edits/runs commands with no step-by-step driving, then returns only the final result. planText must be a self-contained full plan (with acceptance criteria). After calling, end your reply immediately; do not output further tool calls',params:{planText:'string full plan text',workspace:'string?',taskNote:'string? task title (used for log names)',timeoutMs:'int? default 300000, max 1800000'}},
{name:'dsh_handoff',description:'[Recommended for multi-step tasks] Local agent (dsh headless) runs the full plan autonomously: reads/searches/edits/runs commands with no step-by-step driving, then returns only the final result. planText must be a self-contained full plan (with acceptance criteria). After calling, end your reply immediately; do not output further tool calls',params:{planText:'string full plan text',workspace:'string?',taskNote:'string? task title (used for log names)',timeoutMs:'int? default 300000, max 1800000'}},
{name:'dsh_log',description:'Read tail of execution log (.dsh-memory/logs/execution-log.jsonl, one entry per tool call)',params:{lines:'int? default 100, max 1000'}},
{name:'dsh_log',description:'Read tail of execution log (.dsh-memory/logs/execution-log.jsonl, one entry per tool call)',params:{lines:'int? default 100, max 1000'}},
{name:'dsh_memory',description:'Persistent memory. op: list|get|recent|unread|search|budgets|directives|add|replace|remove. list/get/recent/unread/search return items with bytes and totalBytes in meta; always check totalBytes before get. write op: add|replace|remove.',params:{op:'string',track:'string?',scope:'string?',importance:'string?',since:'string?',limit:'int?',ids:'string[]?',id:'string?',query:'string?',entry:'object?',text:'string?',tags:'string[]?',state:'string?',chatId:'string?'}},
{name:'dsh_memory',description:'Persistent memory. op: list|get|recent|unread|search|budgets|stats|directives|add|replace|remove. list/get/recent/unread/search return items with bytes and totalBytes in meta; always check totalBytes before get. write op: add|replace|remove.',params:{op:'string',track:'string?',scope:'string?',importance:'string?',since:'string?',limit:'int?',ids:'string[]?',id:'string?',query:'string?',entry:'object?',text:'string?',tags:'string[]?',state:'string?',chatId:'string?'}},