- 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>
29 lines
1.5 KiB
JavaScript
29 lines
1.5 KiB
JavaScript
import * as improvements from '../../../db/repos/improvements.js';
|
|
import { recordAudit } from '../../../db/repos/audit.js';
|
|
|
|
// Dross's hands on the Void itself — CSS layer only, owner-approved, instantly
|
|
// rollbackable (2.14: "empowered, with a leash"). Server code stays untouchable.
|
|
export const proposeImprovementTool = {
|
|
name: 'propose_improvement',
|
|
description: 'Propose a visual improvement to the Void itself as CSS. NEVER applies directly — the owner approves it in Settings → Dross improvements, and can roll it back instantly. CSS only: no url()/@import. Target existing classes (inspect via context first). Keep each improvement small and single-purpose so rollback stays surgical.',
|
|
input_schema: {
|
|
type: 'object',
|
|
properties: {
|
|
summary: { type: 'string', description: 'one line: what this changes and why (shown to the owner)' },
|
|
css: { type: 'string', description: 'the CSS rules, complete and self-contained' }
|
|
},
|
|
required: ['summary', 'css']
|
|
},
|
|
async handler({ summary, css }, ctx) {
|
|
const err = improvements.validateCss(css);
|
|
if (err) return { error: err };
|
|
if (!summary?.trim()) return { error: 'summary required' };
|
|
const row = await improvements.create({ summary, css });
|
|
await recordAudit({ kind: 'agent', id: ctx.agent?.id ?? null }, 'suggest', 'improvement', row.id, null, { summary });
|
|
return {
|
|
ok: true, id: row.id,
|
|
note: 'Drafted as a pending improvement. It is NOT live — the owner must approve it in Settings → Dross improvements. Say so plainly.'
|
|
};
|
|
}
|
|
};
|