@@ -54,6 +54,9 @@ export async function serveOnSessionBus(daemon) {
|
||||
JobProgress(id, pct, label) { return [String(id), Number(pct), String(label)]; }
|
||||
ComputerStep(json) { return String(json); }
|
||||
ComputerHighlight(json) { return String(json); }
|
||||
Thinking(text) { return String(text); }
|
||||
ToolCall(json) { return String(json); }
|
||||
ToolResult(json) { return String(json); }
|
||||
}
|
||||
Session.configureMembers({
|
||||
methods: {
|
||||
@@ -92,6 +95,9 @@ export async function serveOnSessionBus(daemon) {
|
||||
ComputerStep: { signature: 's' },
|
||||
ComputerHighlight: { signature: 's' },
|
||||
ConfirmationRequired: { signature: 'sss' },
|
||||
Thinking: { signature: 's' },
|
||||
ToolCall: { signature: 's' },
|
||||
ToolResult: { signature: 's' },
|
||||
},
|
||||
});
|
||||
const bus = dbus.sessionBus();
|
||||
@@ -133,7 +139,7 @@ export async function serveOnSessionBus(daemon) {
|
||||
daemon.on('Token', (token) => iface.Token(token));
|
||||
daemon.on('Error', (code, message) => iface.Error(code, message));
|
||||
daemon.on('ConfirmationRequired', (event) => iface.ConfirmationRequired(event?.tool || 'action', JSON.stringify(event?.args || {}), event?.pattern || 'explicit confirmation required'));
|
||||
for (const signal of ['WakeHeard', 'PartialTranscript', 'FinalTranscript', 'SpeakingLevel', 'ListeningLevel', 'ChipOffered', 'JobProgress', 'ComputerStep', 'ComputerHighlight']) {
|
||||
for (const signal of ['WakeHeard', 'PartialTranscript', 'FinalTranscript', 'SpeakingLevel', 'ListeningLevel', 'ChipOffered', 'JobProgress', 'ComputerStep', 'ComputerHighlight', 'Thinking', 'ToolCall', 'ToolResult']) {
|
||||
daemon.on(signal, (...args) => iface[signal](...args));
|
||||
}
|
||||
return bus;
|
||||
|
||||
@@ -28,7 +28,7 @@ export class HarnessBridge extends EventEmitter {
|
||||
await closeQvac();
|
||||
throw error;
|
||||
}
|
||||
for (const event of ['agent_message_chunk', 'tool_call', 'permission', 'ask_user', 'cap-chunk', 'error']) {
|
||||
for (const event of ['agent_message_chunk', 'agent_thought_chunk', 'tool_call', 'tool_result', 'permission', 'ask_user', 'cap-chunk', 'error']) {
|
||||
this.session.on(event, (payload) => {
|
||||
if (event === 'agent_message_chunk' && payload?.text) {
|
||||
const parsed = parseHudSidecar(payload.text);
|
||||
|
||||
@@ -40,6 +40,9 @@ export class JarvisDaemon extends EventEmitter {
|
||||
this.telemetry = new RuntimeTelemetry();
|
||||
this._telemetryTimer = setInterval(() => this.telemetry.sample(), 60_000); this._telemetryTimer.unref?.();
|
||||
this.harness.on('agent_message_chunk', (ev) => this.emit('Token', ev?.text || ev?.delta || ''));
|
||||
this.harness.on('agent_thought_chunk', (ev) => this.emit('Thinking', String(ev?.text || ev?.delta || '')));
|
||||
this.harness.on('tool_call', (ev) => this.emit('ToolCall', JSON.stringify({ name: ev?.call?.name || 'tool', arguments: ev?.call?.arguments || {} })));
|
||||
this.harness.on('tool_result', (ev) => this.emit('ToolResult', JSON.stringify({ name: ev?.name || 'tool', result: ev?.result || '', toolCallId: ev?.toolCallId || '' })));
|
||||
this.harness.on('permission', (ev) => this.emit('ConfirmationRequired', ev));
|
||||
this.harness.on('hud_sidecar', (ev) => this.emit('ChipOffered', 'sidecar', ev?.title || 'Suggested action', JSON.stringify(ev || {})));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user