feat: add dynamic autonomous DAVE presence

This commit is contained in:
2026-07-05 22:47:08 +02:00
parent 35e4f901f7
commit 08b6016dfb
10 changed files with 429 additions and 4 deletions

View File

@@ -110,6 +110,11 @@ export class TerminalAgent {
working += `\n\nTOOL ERROR: ${decision.tool} is not allowlisted.`;
continue;
}
if (tool.mutating && mode !== 'chat') {
trace.push({ tool: tool.name, status: 'rejected', durationMs: 0, rationale: short(decision.rationale) });
working += `\n\nTOOL ERROR: ${tool.name} is unavailable outside an operator-initiated chat. Continue with read-only evidence or return final JSON.`;
continue;
}
if (tool.mutating) {
const pendingAction = this._createPending(key, tool, decision.arguments || {}, decision.rationale);
trace.push({ tool: tool.name, status: 'confirmation_required', durationMs: 0, rationale: short(decision.rationale) });
@@ -216,7 +221,8 @@ export class TerminalAgent {
}
_systemPrompt(mode) {
const proactive = mode === 'proactive';
const proactive = mode === 'proactive' || mode === 'presence';
const presence = mode === 'presence';
return `You are the operator's controlled Intelligence Terminal Security Manager. Your job is to identify material personal security risks, verify evidence, explain relevance, and propose practical protective actions. Select only allowlisted tools and use the minimum steps needed.
${DAVE_PERSONA_PROMPT}
@@ -243,11 +249,15 @@ ${JSON.stringify(this.registry.describe())}
PROTOCOL: Output exactly one JSON object, without markdown.
Tool call: {"type":"tool_call","tool":"tool_name","arguments":{},"rationale":"short operational reason"}
Final: {"type":"final","answer":"concise answer in the user's language","confidence":"low|medium|high","evidence":["URL or event id"],"notify":${proactive ? 'true' : 'false'},"priority":"routine|priority|flash"}
${proactive ? 'In proactive mode, never call mutating tools. Set notify=true only for material, actionable, cross-checked changes. Otherwise notify=false and briefly explain why.' : 'In chat mode, notify must be false.'}`;
${presence
? 'In scheduled presence mode, never call mutating tools. Set notify=true for an evidence-grounded briefing, meaningful change, useful all-clear, or one practical check-in question. Set notify=false when available data is too stale or unreliable.'
: proactive
? 'In proactive mode, never call mutating tools. Set notify=true only for material, actionable, cross-checked changes. Otherwise notify=false and briefly explain why.'
: 'In chat mode, notify must be false.'}`;
}
_finalPrompt(mode) {
const proactive = mode === 'proactive';
const proactive = mode === 'proactive' || mode === 'presence';
return `You are the operator's Intelligence Terminal Security Manager. Tool use is finished and unavailable in this phase.
${DAVE_PERSONA_PROMPT}