Agent (cmd/nomos): - Stream LLM tokens via NewStreaming; emit text_delta then final text. - OpenRouter provider routing: data_collection=deny (ZDR) + require_parameters; NOMOS_PROVIDER_SORT opt-in; Exacto via model suffix. - Multi-turn: reload session history into context; UI passes session id. - Fix agent_activity logging (agent_id/session_id) and mcpClient data race. Events (live control-room feed): - approval.created (mcp), approval.decided (api), execution.completed/failed (approved-action path), signal.raised/resolved + health.changed (scheduler, transition-gated). Fixes: - createApproval FK violation (reuse execution entity) — the agent's only write path; log the previously-swallowed errors. Web UI: - Embed web/dist via //go:embed (single binary); Dockerfile builds SPA into the Go stage; committed .gitkeep placeholder keeps backend-only builds green. - Caddy: Authentik-gated /agent/* -> nomos so the UI reaches the agent same-origin in production. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
1000 B
SQL
26 lines
1000 B
SQL
-- 015_agent_sessions.up.sql
|
|
-- Nomos agent sessions: persist conversations across restarts.
|
|
-- agent_messages stores the full message history (JSONB).
|
|
-- agent_activity is joined via correlation_id for tool-call tracing.
|
|
|
|
CREATE TABLE IF NOT EXISTS agent_sessions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
title TEXT NOT NULL DEFAULT '',
|
|
actor TEXT NOT NULL DEFAULT 'agent:nomos',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
last_active_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS agent_messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
session_id UUID NOT NULL REFERENCES agent_sessions(id) ON DELETE CASCADE,
|
|
role TEXT NOT NULL,
|
|
content JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_agent_messages_session
|
|
ON agent_messages(session_id, created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_agent_sessions_active
|
|
ON agent_sessions(last_active_at DESC);
|