Terminal / migrations /gap1_skill_stats.sql
Pulka
sync: 2 changed, 0 deleted — from push d9b29fe0 (2026-06-18T20:42 UTC)
2a17653 verified
Raw
History Blame Contribute Delete
3.41 kB
-- GAP-SUP1: Supabase Skill Tracker persistence
-- Eseguire nel SQL Editor di Supabase:
-- https://app.supabase.com/project/_/sql/new
--
-- Tabella skill_stats: statistiche tool per sessione (backend skill_tracker.py)
-- Tabella skill_patterns: pattern tool sequenze (frontend skillPersistence.ts)
-- ─── skill_stats ──────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS skill_stats (
session_id text NOT NULL,
tool_name text NOT NULL,
success_count integer NOT NULL DEFAULT 0,
fail_count integer NOT NULL DEFAULT 0,
last_used double precision NOT NULL DEFAULT 0,
total_latency_ms double precision NOT NULL DEFAULT 0,
updated_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (session_id, tool_name)
);
-- Index per query per sessione (GET ?session_id=eq.xxx)
CREATE INDEX IF NOT EXISTS idx_skill_stats_session ON skill_stats (session_id);
-- Row Level Security: anon può leggere e scrivere (chiave anon pubblica)
ALTER TABLE skill_stats ENABLE ROW LEVEL SECURITY;
DO $$ BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_policies
WHERE tablename = 'skill_stats' AND policyname = 'anon full access'
) THEN
CREATE POLICY "anon full access" ON skill_stats
FOR ALL TO anon
USING (true)
WITH CHECK (true);
END IF;
END $$;
-- Trigger: aggiorna updated_at ad ogni upsert
CREATE OR REPLACE FUNCTION _touch_updated_at()
RETURNS TRIGGER LANGUAGE plpgsql AS $$
BEGIN NEW.updated_at = now(); RETURN NEW; END;
$$;
DROP TRIGGER IF EXISTS trg_skill_stats_updated_at ON skill_stats;
CREATE TRIGGER trg_skill_stats_updated_at
BEFORE UPDATE ON skill_stats
FOR EACH ROW EXECUTE FUNCTION _touch_updated_at();
-- ─── skill_patterns ────────────────────────────────────────────────────────────
-- Persistenza cross-device per skillPersistence.ts (frontend Dexie → Supabase cloud)
CREATE TABLE IF NOT EXISTS skill_patterns (
id text PRIMARY KEY, -- djb2(taskSignature)
task_signature text NOT NULL,
tool_sequence text[] NOT NULL,
success_count integer NOT NULL DEFAULT 0,
total_count integer NOT NULL DEFAULT 0,
last_used bigint NOT NULL DEFAULT 0,
confidence double precision NOT NULL DEFAULT 0,
updated_at timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_skill_patterns_confidence ON skill_patterns (confidence DESC);
CREATE INDEX IF NOT EXISTS idx_skill_patterns_last_used ON skill_patterns (last_used DESC);
ALTER TABLE skill_patterns ENABLE ROW LEVEL SECURITY;
DO $$ BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_policies
WHERE tablename = 'skill_patterns' AND policyname = 'anon full access'
) THEN
CREATE POLICY "anon full access" ON skill_patterns
FOR ALL TO anon
USING (true)
WITH CHECK (true);
END IF;
END $$;
DROP TRIGGER IF EXISTS trg_skill_patterns_updated_at ON skill_patterns;
CREATE TRIGGER trg_skill_patterns_updated_at
BEFORE UPDATE ON skill_patterns
FOR EACH ROW EXECUTE FUNCTION _touch_updated_at();