Merge main into feat/voice-core

Keeps the voice-core prompt rules and adds main's world-query and
vessels-vs-visuals rules; the tool catalog wraps the deixis-aware runner.

Also fixes two things the branch had before the merge:
- Live voice could not start: OpenAI rejects track_entity's top-level
  anyOf. Model-facing tools now omit top-level combinators; the runner
  and benchmark still require a query or a referent.
- The Contacts-centred analyst answer dropped the viewport coverage note.
This commit is contained in:
Bilawal Sidhu committed 2026-10-03 23:30:02 -07:00
commit e7cb9b02b5
191 files changed
+20005 -1450

No files matched your search

+5 -1
View File
@@ -1,3 +1,4 @@
import { GEV_ACTION_SCHEMAS } from '../voice/actionSchemas.js';
import test from 'node:test';
import assert from 'node:assert/strict';
import {
@@ -80,7 +81,10 @@ test('toGeminiSchema drops unsupported keywords and expresses unions as anyOf',
});
test('referent-only tracking keeps object alternatives in Gemini OpenAPI mode', () => {
const track = toGeminiDeclarations(GEV_REALTIME_TOOLS, {
// The full action schemas carry the query-or-referent rule; the OpenAI
// Realtime tools omit it because that API rejects top-level anyOf.
const fullTools = GEV_ACTION_SCHEMAS.map((schema) => ({ type: 'function', ...schema }));
const track = toGeminiDeclarations(fullTools, {
mode: 'openapi',
}).find((tool) => tool.name === 'track_entity');
assert.deepEqual(