synops/migrations/024_cli_tool_synops_ai.sql
vegard d18dfc260f AI-assistert oppretting: synops-ai genererer orkestreringsscript fra fritekst (oppgave 24.7)
Nytt CLI-verktøy `synops-ai` som leser cli_tool-noder fra PG, bygger
en systemprompt med tilgjengelige verktøy og script-grammatikk, og
bruker LLM til å foreslå orkestreringsscript fra fritekst-beskrivelse.

Tre moduser:
- Synkron: --description "..." → LLM genererer script → JSON output
- System prompt: --generate-system-prompt → skriver auto-generert prompt
- Eventually: --eventually → lagrer som work_item for Claude Code

Maskinrommet: nytt endepunkt POST /intentions/ai_suggest_script som
kaller synops-ai, validerer resultatet med script_compiler, og returnerer
script + kompileringsresultat til frontend.

Frontend: AI-assistent-knapp i OrchestrationTrait med fritekst-input,
generer-knapp, og feilvisning. Generert script settes direkte i editoren.

Migration: synops-ai seeded som cli_tool-node med norske verb-alias.
2026-03-18 17:47:32 +00:00

36 lines
1.4 KiB
PL/PgSQL

-- 024_cli_tool_synops_ai.sql
-- Oppgave 24.7: Seed cli_tool-node for synops-ai.
-- AI-assistert generering av orkestreringsscript fra fritekst-beskrivelse.
-- Ref: docs/concepts/orkestrering.md § "Nivå 2: AI-assistert oppretting"
BEGIN;
-- =============================================================================
-- synops-ai — AI-assistert script-generering
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'f0000000-c100-4000-b000-000000000015',
'cli_tool',
'synops-ai',
'discoverable',
'{
"binary": "synops-ai",
"aliases": ["generer script", "lag orkestrering", "ai-forslag", "foreslå script"],
"description": "AI-assistert generering av orkestreringsscript fra fritekst-beskrivelse",
"args_hints": {
"beskrivelsen": "--description {input.description}",
"triggeren": "--trigger-event {input.trigger_event}",
"betingelsene": "--trigger-conditions {input.trigger_conditions}",
"i bakgrunnen": "--eventually",
"for brukeren": "--requested-by {event.node_id}",
"for samlingen": "--collection-id {event.collection_id}"
}
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
)
ON CONFLICT (id) DO UPDATE SET
metadata = EXCLUDED.metadata,
title = EXCLUDED.title;
COMMIT;