This commit is contained in:
2026-09-11 13:54:10 -04:00
parent 4c81d26274
commit 8f6884ac42
7 changed files with 185 additions and 11 deletions
+11 -2
View File
@@ -1,11 +1,14 @@
import { EventEmitter } from 'node:events';
import { acquireQvac, closeQvac, releaseQvac, Agent } from './qvac-master.js';
import { createRuntimeTools } from '../skills/runtime-tools.js';
import { createPhase2Tools } from '../skills/phase2-tools.js';
import { createQvacTools } from '../skills/qvac-tools.js';
import { VOICE_SYSTEM_PROMPT, parseHudSidecar } from '../skills/voice-prompt.js';
export class HarnessBridge extends EventEmitter {
constructor({ cwd = process.cwd(), model = 'qwen3.5-4b', tools = [], computer, permissionMode = 'ask' } = {}) {
super();
this.options = { cwd, model, tools: [...createRuntimeTools({ computer }), ...tools], permissionMode, origin: 'jarvis-qvac', system: 'You are Jarvis on a local Ubuntu GNOME desktop. Keep spoken replies short, ground claims in local tool results, and never claim cloud access.' };
this.options = { cwd, model, tools: [...createRuntimeTools({ computer }), ...createPhase2Tools({ cwd, computer }), ...createQvacTools(), ...tools], permissionMode, origin: 'jarvis-qvac', system: VOICE_SYSTEM_PROMPT };
this.session = null;
}
@@ -23,7 +26,13 @@ export class HarnessBridge extends EventEmitter {
throw error;
}
for (const event of ['agent_message_chunk', 'tool_call', 'permission', 'ask_user', 'cap-chunk', 'error']) {
this.session.on(event, (payload) => this.emit(event, payload));
this.session.on(event, (payload) => {
if (event === 'agent_message_chunk' && payload?.text) {
const parsed = parseHudSidecar(payload.text);
if (parsed.hud) this.emit('hud_sidecar', parsed.hud);
}
this.emit(event, payload);
});
}
return this.session;
}