feat: 2.14.0 — Eithan terminal toolbar, voice UX, Dross improvements framework

- Terminal renamed Eithan: mobile font A−/A+ (per-URL ttyd opts), same-origin
  xterm Copy/Paste buttons, scroll-to-live, touch-default 17px
- Dross voice: no keyboard pop after transcribe (fine-pointer only focus),
  autogrow textarea to ~5 lines, live amplitude meter on the mic while recording
- Dross improvements: propose_improvement tool (CSS layer, exfil-sanitized,
  owner-approved, per-improvement rollback/restore), public /improvements.css,
  Settings panel. External MCP registry unchanged (no tool leak).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-11 23:35:32 +10:00
parent 859dedb668
commit 3bd8ea399c
18 changed files with 338 additions and 23 deletions

View File

@@ -25,9 +25,9 @@ const suggestAgent = (id) => ({
});
describe('listMcpTools()', () => {
it('returns exactly the four companion tools sorted by name', () => {
it('returns exactly the five companion tools sorted by name', () => {
const tools = listMcpTools();
expect(tools.map(t => t.name).sort()).toEqual(['context', 'propose_change', 'read', 'search']);
expect(tools.map(t => t.name).sort()).toEqual(['context', 'propose_change', 'propose_improvement', 'read', 'search']);
});
it('each tool has name, description, and input_schema', () => {

View File

@@ -10,7 +10,7 @@ import { listMcpTools, callMcpTool } from '../../lib/mcp/companion-stdio.js';
describe('MCP registry selection', () => {
it('defaults to the companion registry when VOID_TOOL_REGISTRY is unset', () => {
const names = listMcpTools({}).map(t => t.name).sort();
expect(names).toEqual(['context', 'propose_change', 'read', 'search']);
expect(names).toEqual(['context', 'propose_change', 'propose_improvement', 'read', 'search']);
});
it('selects the security registry when VOID_TOOL_REGISTRY=security', () => {