Commit graph

636 commits

Author SHA1 Message Date
231bceabbd Task fullført: 054-agent-git.md 2026-03-19 18:26:23 +00:00
e38c77ea00 Implementer git-integrasjon i synops-agent
- Ny modul git.rs: status, log, diff, blame, commit, push, branch
- Nytt git-verktøy for LLM (8 subkommandoer)
- Auto-inkluder git-kontekst i system prompt (branch, status, siste commits)
- CLI-args: --commit-msg, --no-commit, --push/--no-push, --branch
- Auto-commit og push etter fullført batch-oppgave
- Diff-visning i output etter oppgave
- 4 nye tester for git-modulen (alle bestått)
2026-03-19 18:26:09 +00:00
0c0a6210ad Task fullført: 053-agent-plan-mode.md 2026-03-19 18:21:14 +00:00
6bd2787ee8 Implementer planmodus og selvkritikk i synops-agent
Extended ReAct Loop: tenk → plan → selvkritikk → utfør.
--plan tvinger planmodus, --no-plan deaktiverer.
Uten flagg: auto-detect basert på oppgavens nøkkelord/lengde.
/plan kommando i interaktiv modus.
2026-03-19 18:20:54 +00:00
3704a02921 Task fullført: 052-agent-interactive.md 2026-03-19 18:17:14 +00:00
a8b6c7ca7b Implementer interaktiv REPL-modus i synops-agent
- --interactive / -i starter REPL med readline (rustyline)
- Token-teller og kostnad i prompt: [12.3kT $0.042] claude-sonnet-4 >
- Ctrl+C avbryter pågående tool-kall, ikke hele agenten
- Meldingshistorikk bevares mellom turns
- Multi-line input med \ på slutten av linjen
- Innebygde kommandoer: /stats, /clear, /help, exit
- Historikk lagres i ~/.synops/agent_history.txt
- Refaktorert agent-loop til AgentSession struct for gjenbruk
- --task er nå valgfri (påkrevd kun i batch-modus)
2026-03-19 18:16:54 +00:00
00a92ebe2f Task fullført: 051-agent-retry-budget.md 2026-03-19 18:12:48 +00:00
0bfad1eb8a Implementer retry med backoff og token-budsjett i synops-agent
- Retry med exponential backoff for retryable API-feil (429, 500, 502, 503)
  med konfigurerbar --max-retries (default: 3) og Retry-After-støtte
- --max-cost flagg for token-budsjett (USD), stopper og rapporterer
  gjenstående arbeid ved budsjettgrense (exit code 2)
- Konfigurerbar --max-tokens per provider (erstatter hardkodet 4096/8192)
- Sanntids kostnadsregnskap per modell med cost_per_million_tokens-tabell
- Detaljert token/kostnad-rapport ved avslutning

Ref: docs/proposals/agent_harness.md §3 (selvovervåking)
2026-03-19 18:12:27 +00:00
1a6887f334 Task fullført: 050-agent-context-compaction.md 2026-03-19 18:08:07 +00:00
703a0addca Implementer Adaptive Context Compaction (ACC) i synops-agent
Automatisk kontekstkomprimering når meldingshistorikken nærmer seg
kontekstvinduets grense. Bruker prompt_tokens fra API-respons som
kalibreringsanker.

- Ny context.rs-modul med to kompaksjonsnivåer:
  - Moderat (>70%): trunkerer gamle tool-resultater
  - Aggressiv (>85%): kollapser eldre historikk til oppsummering
- Siste 5 meldinger bevares alltid urørt
- context_window() på LlmProvider-trait med automatisk estimering
- 5 enhetstester for kompaksjonslogikk
2026-03-19 18:07:51 +00:00
6099d0b209 Splitt agent og admin til konkrete sub-tasks (050-064)
synops-agent: 9 tasks (ACC, retry, REPL, plan, git, graf, daemon,
sub-agenter, checkpoint)
Admin: 5 tasks (API-nøkler, AI-ruting, oppgave-UI, agent-oversikt,
brukeradmin)
Totalt 55 task-filer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 18:04:23 +00:00
a9590e4ed9 Oppdatert run-next-task.sh for filbaserte tasks
Plukker fra tasks/*.md, flytter til active/, done/ ved fullføring.
Støtter --loop (kjør kontinuerlig), --dry (forhåndsvis), --status.
Krasj-deteksjon: stale oppgaver i active/ >60 min frigjøres.
30 min timeout per oppgave.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 18:02:09 +00:00
b7de73d5d5 43 task-filer fra alle utestående oppdrag og proposals
100: 5 UI-fikser | 200: 7 høy prioritet | 300: 6 middels
400: 2 infrastruktur | 500: 7 lavthengende frukt | 600: 16 fremtidige

Fjernet tasks/ fra .gitignore — oppgaver skal spores i git
inntil oppgave-noder i PG er implementert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:58:51 +00:00
ea7926555c To hovedoppdrag: komplett synops-agent + komplett admin-panel
synops-agent: 8 faser fra robustgjøring til daemon/vaktmester.
Admin-panel: nøkkelhåndtering, AI-ruting, oppgaver, agent-oversikt,
brukeradmin. Bygger på eksisterende sider + alt vi har diskutert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:55:00 +00:00
f98ad11081 Spec: nøkkelhåndtering — API-nøkler kryptert i PG, admin-UI
Erstatter .env-filer for API-nøkler. AES-256-GCM kryptert i PG,
administrert via admin-UI, injisert av maskinrommet som env ved
verktøy-spawning. Audit trail, test-tilkobling, flere nøkler per
provider, deaktivering uten sletting. Ingen endring i verktøykode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:48:00 +00:00
c30a40e97a synops-agent: max_tokens=4096 + verifisert med OpenRouter/Gemini
Testet med ekte API-kall. Fungerer: tool-loop, fil-lesing, glob,
token-regnskap. Gemini Flash via OpenRouter svarer på ~3 sekunder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:45:05 +00:00
2e3433798f synops-agent fase 1: core agent loop med alle providers
Modell-agnostisk agent-runtime i Rust. Egen provider-kode (ingen Rig-dep).
Støtter: OpenRouter, Anthropic, Gemini, xAI, OpenAI, Ollama.
Tool-loop: prompt → tool_calls → execute → loop.
Innebygde verktøy: read_file, write_file, edit_file, bash, grep, glob.
Token-regnskap per modell. --claude for å spawne Claude Code.
Kompilerer og kjører. Trenger API-nøkkel for å faktisk gjøre noe.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:41:28 +00:00
945e5a90dc Oppgaver: tre nivåer (proposal → oppdrag → task) med chat
Proposals = halvtenkte ideer, diskuteres i tilknyttet chat.
Oppdrag = godkjente konsepter, splittes til tasks av agent.
Tasks = konkrete steg, plukkes atomisk.
Prioritering, pause, blokkering, eskalering.
Tilbakemelding og spørsmål direkte i oppdragets chat.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:31:25 +00:00
5b6876093e Oppgaver som noder: erstatter tasks.md med graf-basert modell
Fjernet fil-basert oppgaveliste (tasks.md, tasks-arkiv.md, tasks/).
Oppgaver er nå noder (node_kind: 'task') med prioritet, status,
agent-tildeling og krasj-deteksjon via PG. Atomisk plukking med
FOR UPDATE SKIP LOCKED. Dokumentert i docs/infra/oppgaver.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:29:50 +00:00
69997c6e87 Rydd sidelinja-referanser: generiske AI-nivåer + synops.no-domener
AI-aliaser: sidelinja/rutine → synops/low, sidelinja/resonering →
synops/high. Fire nivåer i LiteLLM: low/medium/high/extreme.
Oppdatert i: LiteLLM config, PG ai_job_routing, all Rust-kode
(maskinrommet + 5 CLI-verktøy).

Domener: sidelinja.org → synops.no i fallback-URLer, health-sjekker,
LiveKit WSS, bandwidth-logger, docs/erfaringer, docs/setup,
reference/server-state, .env.example.

Docker container-navn (sidelinja-*) beholdes — styrt av
COMPOSE_PROJECT_NAME i /srv/synops/.env, endres separat ved behov.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:22:22 +00:00
09d0477680 synops-agent erstatter LiteLLM: direkte provider-APIer via Rig
Ingen mellomtjeneste — synops-agent snakker direkte med Anthropic,
Google, OpenRouter etc. via Rig sine provider-traits. Fjerner
LiteLLM Docker-container (Python-stack). Lavere latens, enklere
feilsøking, alt i Rust-kode vi eier.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:16:37 +00:00
90b0e4fdb0 synops-agent: modellvalg kun for admin, ikke vanlige brukere
/claude, /grok etc. er admin-kommandoer. Vanlige brukere bruker
@bot med modell konfigurert av admin via ai_job_routing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:10:58 +00:00
3d35a6fb07 synops-agent: vaktmester-modus, Claude Code som eskalering, eksplisitt modellvalg
- Vaktmester-daemon: mottar meldinger via chat og epost
- Prefix-kommandoer: /proposal, /task, /bug, /gjør
- Eksplisitt modellvalg: /claude, /grok, /gemini, /lokal, /billig
- Bruker bestemmer alltid — ingen automatisk modellgjetting
- Claude Code spawnes for tunge oppgaver (allerede-betalt abo)
- Svar tilbake via chat og/eller epost

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:10:39 +00:00
dad5a23e6f Ryddig oppgaveliste: aktiv (tasks.md) + arkiv (tasks-arkiv.md)
tasks.md har kun åpne oppgaver. Fullførte flyttes til tasks-arkiv.md
med dato. Prinsipp dokumentert i CLAUDE.md: listen skal alltid være
ren. Fase 1-30 og dagens UI-arbeid arkivert med timestamp.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:01:48 +00:00
db95cd33d1 Collaborative cursors: portert fra SpacetimeDB til WebSocket
SpacetimeDB er fjernet (mars 2026). Oppdatert til å bruke
eksisterende WebSocket/portvokter med ephemeral cursor_move-
meldinger (ikke persistert i PG). In-memory HashMap i Rust.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:57:47 +00:00
2d663f8f67 Arkiver superseded/implementerte proposals
Flyttet til docs/proposals/arkiv/:
- komponerbare_sider.md (erstattet av arbeidsflaten)
- personlig_workspace.md (erstattet av noder-er-sentrum)
- tekst_primitiv.md (realisert i node-arkitekturen)
- artikkel_publisering.md (implementert i fase 14)
- web_clipper.md (implementert i fase 25)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:57:13 +00:00
44ec243be8 Proposals: varslingssystem + universell input
Varsling: notification-noder i grafen, trigger ved edge-opprettelse/
nevnelse/oppgave. WebSocket toast + ulest-badge + valgfri epost.

Universell input: én TipTap-komponent med kontekst-drevne moduser
(chat/forum/editor/code). Markup-bytte (WYSIWYG/markdown/LaTeX).
Draft-caching i localStorage + valgfri graf-synk for kryssenhets.
Integrert medieinput og inline-handlinger (@mentions, [[lenker]]).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:52:57 +00:00
1a63ad4e7e Proposal: Chat/forum-dualitet + lest/ulest
Samme kommunikasjonsnode vises som chat (kronologisk) eller forum
(trådet). Bytt fritt mellom visninger. Lest/ulest er én last_seen
timestamp per bruker per samtale — transitiv mellom alle visninger.
Forum-egenskaper (tråd, kategori, pinning) er metadata på noder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:45:38 +00:00
b3a55af660 Tre nye proposals: rollebasert arv, Mine ting, chat-merging
- Rollebasert arv: edge-roller styrer trait-synlighet per bruker
  (deltaker ser mikser, lytter ser bare chat)
- Mine ting: oversiktspanel i Hjem, dra node inn i verktøy for
  å koble dem (erstatter mottak som panel)
- Chat-merging: dra chat oppå chat → live flettet visning eller
  snapshot med AI-beriking og brukerprompt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:39:49 +00:00
58d77756df Zoom-toolbar: − til venstre, + til høyre
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:18:30 +00:00
c9bee967c7 Skjermen: dedikert sceneskifte-knapp med 0.2s fade + auto-pause
Én knapp, to trykk: fade ut (0.2s) → pause → bygg om → trykk igjen
→ fade inn (0.2s). Kort default for praktisk bruk, konfigurerbar.
Master opacity slider er separat for kreativ/manuell kontroll.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:15:11 +00:00
9781bd5d0e Skjermen: ytelsesanalyse for nåværende server
8-kjerners EPYC, 16 GB RAM, 270 Mbit/s. Klientside compositing
takler 3+ samtidige team. Server-side begrenset til 1 sesjon.
Strategi: klientside default, server-side som valgfri premium.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:11:20 +00:00
38dbf98e63 Skjermen: frameless er default men valgfritt per element
Vert kan slå på ramme, navneskilt eller andre visuelle effekter
per element inne i skjermen. Fleksibelt, ikke påtvunget.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:05:50 +00:00
bebf08644d Skjermen: frameless modus for noder inne i skjermen
Noder som dras inn i skjermen rendres uten grensesnittelementer —
ingen BlockShell-header, border, resize-handles. Bare rent innhold.
Skjermen er output, ikke utviklerverktøy. Vert redigerer layout
via skjermens egen editor-modus.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:05:33 +00:00
af17ee3fa4 Proposal: Skjermen — live-produksjon i arbeidsflaten
Skjerm-panel som live kompositor: dra inn videostrømmer, bilder,
tekst og noder. Multi-skjerm med program/preview og live switching.
Sceneskifte med fade-to-black + auto-pause for jukseredigering.
Videoramme per deltaker, delt arbeidsflate som møterom/studio.
Bygger på eksisterende primitiver (BlockShell, Canvas, LiveKit,
drag-and-drop, CAS, PG NOTIFY).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:04:56 +00:00
2605f6de25 synops-agent: motivasjon (erstatter claude -p) + lib/CLI/API-arkitektur
Dokumentert hvorfor Claude Code ikke egner seg som tjeneste (treg
oppstart, høyt minne, ingen API, låst til Anthropic). synops-agent
som tre bruksmåter: lib (embed i maskinrommet), CLI (erstatter
Claude Code), API (HTTP-endepunkt for appen). Konkret brukstabell
for chat, orkestrering, bakgrunnsjobber og bruker-chat.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:41:26 +00:00
311a73b940 synops-agent: erstatning, ikke hjelper — selvstendig orkestrator
Tydeliggjort ambisjon: synops-agent er et fullverdig alternativ til
Claude Code, ikke en delegerings-mekanisme. Egen orkestrator med
multi-modell sub-agenter, eskalering og verifikasjon. Claude Code
brukes til å utvikle og teste den, ikke til å styre den.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:40:10 +00:00
988d60a939 synops-agent: sanntids token-regnskap per modell
Harnessen akkumulerer input/output tokens per modell gjennom hele
kjøringen. Brukes til budsjettovervåking, eskalering, effektivitets-
måling og orkestrator-input. HashMap<String, TokenUsage> i minne,
persisteres til ai_usage_log ved checkpoint/slutt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:38:36 +00:00
87e7dd70b5 synops-agent: orkestreringsmodell med tre intelligensnivåer
- Kjørbar fra Claude Code via Bash (delegering til billige modeller)
- Tre nivåer: orkestrator (smart), implementering (middels), grunt (billig)
- «Utfør billig, verifiser smart»-strategi: ~90% på billigste modell
- Automatisk modellvalg basert på oppgavetype og eskalering ved feil
- Eksperimentering: logger modell/kostnad/resultat for optimalisering
- Claude Code som super-orkestrator over multi-modell agent-pool

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:37:42 +00:00
2bdbff5ee8 synops-agent proposal: research og supersett-ambisjon
Oppdatert med research fra mars 2026:
- Rig.rs som provider-abstraksjon (24% CPU, <1.1GB vs Python >4.7GB)
- OpenCode Extended ReAct Loop (tenke + selvkritikk + handling)
- Adaptive Context Compaction (ACC) for kontekstvindu
- Harness-mønsteret (kontrollplan mellom LLM og verktøy)
- Worktree-isolasjon for sub-agenter
- MCP-støtte som industristandard
Supersett av Claude Code: daemon-modus, innebygd oppgavestyring,
selvovervåking, sub-agenter med valgfri modell per agent.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:32:41 +00:00
c2fb8555cc Proposal: synops-agent — modell-agnostisk agent-harness i Rust
Idé for fremtidig implementering: Claude Code-lignende agent-loop
som kan bruke Grok, Gemini, OpenRouter eller lokale modeller.
Rust CLI med Read/Edit/Bash/Grep/Glob-verktøy og LiteLLM-integrasjon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:27:50 +00:00
24fbc7cc19 Paneler husker brukerens foretrukne størrelse per verktøy-type
Når et panel resizes lagres width/height per trait-type i
workspace-metadata. Neste gang verktøyet instansieres brukes
den lagrede størrelsen i stedet for default. Persisteres mellom
besøk.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:24:25 +00:00
e520b8037c Canvas: sist berørt boks forblir øverst (persistent z-order)
Hver gang en boks klikkes/dras økes en global z-teller og boksen
får høyeste verdi. Rekkefølgen bevares etter at boksen deselekteres.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:21:51 +00:00
cf992b6f58 Canvas: valgt/aktiv boks alltid på topp (z-index 10)
Når en boks velges eller dras, får den z-index: 10 slik at den
alltid vises over andre bokser. Uvalgte bokser har z-index: 1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:19:06 +00:00
88dd490d07 Zoom +/- knapper: 1% inkrement for finjustering
Musehjul er fortsatt rask zoom (20% per steg).
Toolbar-knappene gir nå presis kontroll: ±1% per klikk.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:17:04 +00:00
3cfa9a8b12 Håndlagde tema-presets med mer variasjon og harmoni
Hvert preset har nå individuelt justerte farger per overflate i stedet
for auto-genererte. Canvas, header, panel og border har subtilt ulike
nyanser for dybde. Omdøpt: Standard→Midnatt, Hav→Dyphav, Rosa→Kirsebær,
Lys→Dagslys, Monokrom→Kull. Alle mørke temaer har varm/kald karakter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:14:13 +00:00
a2fc8609d4 Egendefinerte tema-slots: lagre opptil 6 temaer for gjenbruk
Rad 1: 8 forhåndsdefinerte presets (faste)
Rad 2: opptil 6 bruker-slots — klikk + for å lagre gjeldende tema,
klikk for å bruke, høyreklikk for å slette.
Lagres i workspace-metadata.savedThemes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:11:09 +00:00
ebcacf4847 Globale farger via CSS vars: toolbar, traits og Tailwind-overrides
Alle Tailwind-overrides i app.css bruker nå var(--color-*) i stedet for
hardkodede hex. Dette betyr at temaendringer påvirker alt innhold —
inkludert trait-komponenter, inputs, scrollbar, toolbar og statusfarger.
Canvas-toolbar bruker også CSS vars nå.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 07:04:23 +00:00
798a11f93f Fargevelger: velg grensesnittelement fra dropdown, full HSL-kontroll
Ny modell: dropdown velger hva du farger (Canvas, Menylinje, Bokser,
Rammer, Knapper/aksent, Tekst). Tre slidere per element (farge,
metning, lyshet) gir full kontroll over hele spekteret.
Presets setter alle elementer på én gang. Fargeprøve viser valgt farge.
BlockShell bruker ny --color-panel variabel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 06:56:19 +00:00
bf744639c1 Forenklet fargevelger: én aksentfarge + lys/mørk
Erstattet 9 slidere (3 per farge × 3 farger) med 3 intuitive kontroller:
- Farge: hue-stripe for aksentfarge
- Intensitet: saturation
- Lys/mørk: brightness slider (0=svart, 100=hvit)

Systemet utleder bg, surface, border, text automatisk fra disse.
Canvas-bakgrunn styres nå av --color-bg (var ikke det før).
Presets med emoji-ikoner. Rosa og lys preset lagt til.
Bakoverkompatibel med alle tidligere tema-formater.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 06:50:16 +00:00