mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
feat(voice): voice core — honest layer reach, spoken summary with on-screen card, narration, point-and-ask
- Voice layer manifest (src/voice/layerManifest.js) generates the layer enums, aliases and analyst field hints; a test fails when a catalog layer has no entry. - analyst_query validates fields, operators, units, values and scopes, counts up to 250,000 loaded records per layer, reports complete/partial/unanswered, tells LAYER_OFF / NOT_READY / FEED_UNAVAILABLE apart from zero, refuses mismatched follow-ups and never lets a superseded query replace follow-up memory. Seven more layers expose analyst records. - Tool results carry a code-built say line and a display card; the voice card in the mic control shows captions, plan steps and the result (src/voice/resultDisplay.js is the one adapter). Slow tools narrate their current step out of band; holding Space while the assistant talks cuts it off. Turn spans go to the debug log; caption transcription is metered; the log omits what was said unless GEV_VOICE_LOG_CONTENT=1. - Point and ask: the Space-down pointer snapshot resolves "this", "that one" and "around here" through 'pointer' targets, and "the second one" through referent:n from the last numbered list. - Prompt states each policy once (instructions + tools 48.5k -> 46.7k chars). - Voice benchmark harness (scripts/qa-voice-bench.mjs, scripts/voice-bench/) shares its phrase table and grading with scripts/qa-voice-routing.mjs.
This commit is contained in:
1 parent
e7707d9a0f
commit
a19897ad15
97 files changed
+14343
-755
No files matched your search
@@ -346,3 +346,30 @@ test('late actions cannot run after stop and failed startup closes the adapter',
|
||||
assert.equal(stopped, 1);
|
||||
session.destroy();
|
||||
});
|
||||
|
||||
test('action events carry the call id; progress after cancellation is dropped', async () => {
|
||||
let report;
|
||||
const f = fixture(async (name, args, options) => {
|
||||
options.progress({ step: 'resolve', label: 'Zilker' });
|
||||
report = options.progress;
|
||||
return { ok: true };
|
||||
});
|
||||
const events = [];
|
||||
f.session.subscribe((event) => events.push(event));
|
||||
await f.session.start();
|
||||
await f.hooks.runAction('annotate_map', {}, { callId: 'call_7' });
|
||||
const actionEvents = events.filter(
|
||||
(e) => e.type.startsWith('action-') || e.type === 'progress',
|
||||
);
|
||||
assert.deepEqual(
|
||||
actionEvents.map((e) => [e.type, e.callId]),
|
||||
[
|
||||
['action-call', 'call_7'],
|
||||
['progress', 'call_7'],
|
||||
['action-result', 'call_7'],
|
||||
],
|
||||
);
|
||||
f.hooks.emit({ type: 'interruption' });
|
||||
report({ step: 'outline' });
|
||||
assert.equal(events.filter((e) => e.type === 'progress').length, 1);
|
||||
});
|
||||
Reference in new issue
Block a user