feat(ui): add maintenance page for task management
Some checks failed
CI / build-and-test (push) Failing after -31m53s

* Implement maintenance page with task and log display
* Add backfill and metadata retry functionality
* Integrate grid component for project display in thoughts page
* Update types for maintenance tasks and logs
* Enhance sidebar and shell for new maintenance navigation
This commit is contained in:
2026-04-26 23:13:41 +02:00
parent b39cd3ba72
commit 927a118338
48 changed files with 2228 additions and 868 deletions

View File

@@ -17,6 +17,13 @@ CREATE SEQUENCE IF NOT EXISTS public.identity_projects_id
START 1
CACHE 1;
CREATE SEQUENCE IF NOT EXISTS public.identity_thought_links_id
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
CREATE SEQUENCE IF NOT EXISTS public.identity_embeddings_id
INCREMENT 1
MINVALUE 1
@@ -38,6 +45,20 @@ CREATE SEQUENCE IF NOT EXISTS public.identity_tool_annotations_id
START 1
CACHE 1;
CREATE SEQUENCE IF NOT EXISTS public.identity_project_skills_id
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
CREATE SEQUENCE IF NOT EXISTS public.identity_project_guardrails_id
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
-- Tables for schema: public
CREATE TABLE IF NOT EXISTS public.family_members (
birth_date date,
@@ -97,6 +118,7 @@ CREATE TABLE IF NOT EXISTS public.projects (
CREATE TABLE IF NOT EXISTS public.thought_links (
created_at timestamptz DEFAULT now(),
from_id bigint NOT NULL,
id serial NOT NULL,
relation text NOT NULL,
to_id bigint NOT NULL
);
@@ -322,6 +344,7 @@ CREATE TABLE IF NOT EXISTS public.agent_guardrails (
CREATE TABLE IF NOT EXISTS public.project_skills (
created_at timestamptz NOT NULL DEFAULT now(),
id serial NOT NULL,
project_id uuid NOT NULL,
skill_id uuid NOT NULL
);
@@ -329,6 +352,7 @@ CREATE TABLE IF NOT EXISTS public.project_skills (
CREATE TABLE IF NOT EXISTS public.project_guardrails (
created_at timestamptz NOT NULL DEFAULT now(),
guardrail_id uuid NOT NULL,
id serial NOT NULL,
project_id uuid NOT NULL
);
@@ -879,6 +903,19 @@ BEGIN
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'thought_links'
AND column_name = 'id'
) THEN
ALTER TABLE public.thought_links ADD COLUMN id serial NOT NULL;
END IF;
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
@@ -3102,6 +3139,19 @@ BEGIN
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'project_skills'
AND column_name = 'id'
) THEN
ALTER TABLE public.project_skills ADD COLUMN id serial NOT NULL;
END IF;
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
@@ -3154,6 +3204,19 @@ BEGIN
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'project_guardrails'
AND column_name = 'id'
) THEN
ALTER TABLE public.project_guardrails ADD COLUMN id serial NOT NULL;
END IF;
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (
@@ -3181,7 +3244,7 @@ BEGIN
AND constraint_name IN ('family_members_pkey', 'public_family_members_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.family_members DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.family_members DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3209,7 +3272,7 @@ BEGIN
AND constraint_name IN ('activities_pkey', 'public_activities_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.activities DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.activities DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3237,7 +3300,7 @@ BEGIN
AND constraint_name IN ('important_dates_pkey', 'public_important_dates_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.important_dates DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.important_dates DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3265,7 +3328,7 @@ BEGIN
AND constraint_name IN ('thoughts_pkey', 'public_thoughts_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.thoughts DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.thoughts DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3293,7 +3356,7 @@ BEGIN
AND constraint_name IN ('projects_pkey', 'public_projects_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.projects DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.projects DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3308,6 +3371,34 @@ BEGIN
END;
$$;
DO $$
DECLARE
auto_pk_name text;
BEGIN
-- Drop auto-generated primary key if it exists
SELECT constraint_name INTO auto_pk_name
FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'thought_links'
AND constraint_type = 'PRIMARY KEY'
AND constraint_name IN ('thought_links_pkey', 'public_thought_links_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.thought_links DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'thought_links'
AND constraint_name = 'pk_public_thought_links'
) THEN
ALTER TABLE public.thought_links ADD CONSTRAINT pk_public_thought_links PRIMARY KEY (id);
END IF;
END;
$$;
DO $$
DECLARE
auto_pk_name text;
@@ -3321,7 +3412,7 @@ BEGIN
AND constraint_name IN ('embeddings_pkey', 'public_embeddings_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.embeddings DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.embeddings DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3349,7 +3440,7 @@ BEGIN
AND constraint_name IN ('professional_contacts_pkey', 'public_professional_contacts_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.professional_contacts DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.professional_contacts DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3377,7 +3468,7 @@ BEGIN
AND constraint_name IN ('contact_interactions_pkey', 'public_contact_interactions_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.contact_interactions DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.contact_interactions DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3405,7 +3496,7 @@ BEGIN
AND constraint_name IN ('opportunities_pkey', 'public_opportunities_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.opportunities DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.opportunities DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3433,7 +3524,7 @@ BEGIN
AND constraint_name IN ('stored_files_pkey', 'public_stored_files_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.stored_files DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.stored_files DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3461,7 +3552,7 @@ BEGIN
AND constraint_name IN ('household_items_pkey', 'public_household_items_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.household_items DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.household_items DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3489,7 +3580,7 @@ BEGIN
AND constraint_name IN ('household_vendors_pkey', 'public_household_vendors_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.household_vendors DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.household_vendors DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3517,7 +3608,7 @@ BEGIN
AND constraint_name IN ('maintenance_tasks_pkey', 'public_maintenance_tasks_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.maintenance_tasks DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.maintenance_tasks DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3545,7 +3636,7 @@ BEGIN
AND constraint_name IN ('maintenance_logs_pkey', 'public_maintenance_logs_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.maintenance_logs DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.maintenance_logs DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3573,7 +3664,7 @@ BEGIN
AND constraint_name IN ('recipes_pkey', 'public_recipes_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.recipes DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.recipes DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3601,7 +3692,7 @@ BEGIN
AND constraint_name IN ('meal_plans_pkey', 'public_meal_plans_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.meal_plans DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.meal_plans DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3629,7 +3720,7 @@ BEGIN
AND constraint_name IN ('shopping_lists_pkey', 'public_shopping_lists_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.shopping_lists DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.shopping_lists DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3657,7 +3748,7 @@ BEGIN
AND constraint_name IN ('chat_histories_pkey', 'public_chat_histories_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.chat_histories DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.chat_histories DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3685,7 +3776,7 @@ BEGIN
AND constraint_name IN ('tool_annotations_pkey', 'public_tool_annotations_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.tool_annotations DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.tool_annotations DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3713,7 +3804,7 @@ BEGIN
AND constraint_name IN ('learnings_pkey', 'public_learnings_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.learnings DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.learnings DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3741,7 +3832,7 @@ BEGIN
AND constraint_name IN ('agent_skills_pkey', 'public_agent_skills_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.agent_skills DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.agent_skills DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3769,7 +3860,7 @@ BEGIN
AND constraint_name IN ('agent_guardrails_pkey', 'public_agent_guardrails_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.agent_guardrails DROP CONSTRAINT ' || quote_ident(auto_pk_name);
EXECUTE 'ALTER TABLE public.agent_guardrails DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
@@ -3784,6 +3875,62 @@ BEGIN
END;
$$;
DO $$
DECLARE
auto_pk_name text;
BEGIN
-- Drop auto-generated primary key if it exists
SELECT constraint_name INTO auto_pk_name
FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'project_skills'
AND constraint_type = 'PRIMARY KEY'
AND constraint_name IN ('project_skills_pkey', 'public_project_skills_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.project_skills DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'project_skills'
AND constraint_name = 'pk_public_project_skills'
) THEN
ALTER TABLE public.project_skills ADD CONSTRAINT pk_public_project_skills PRIMARY KEY (id);
END IF;
END;
$$;
DO $$
DECLARE
auto_pk_name text;
BEGIN
-- Drop auto-generated primary key if it exists
SELECT constraint_name INTO auto_pk_name
FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'project_guardrails'
AND constraint_type = 'PRIMARY KEY'
AND constraint_name IN ('project_guardrails_pkey', 'public_project_guardrails_pkey');
IF auto_pk_name IS NOT NULL THEN
EXECUTE 'ALTER TABLE public.project_guardrails DROP CONSTRAINT ' || quote_ident(auto_pk_name) || ' cascade';
END IF;
-- Add named primary key if it doesn't exist
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE table_schema = 'public'
AND table_name = 'project_guardrails'
AND constraint_name = 'pk_public_project_guardrails'
) THEN
ALTER TABLE public.project_guardrails ADD CONSTRAINT pk_public_project_guardrails PRIMARY KEY (id);
END IF;
END;
$$;
-- Indexes for schema: public
CREATE INDEX IF NOT EXISTS idx_activities_start_date_end_date
ON public.activities USING btree (start_date, end_date);
@@ -4327,6 +4474,25 @@ BEGIN
END;
$$;
DO $$
DECLARE
m_cnt bigint;
BEGIN
IF EXISTS (
SELECT 1 FROM pg_class c
INNER JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = 'identity_thought_links_id'
AND n.nspname = 'public'
AND c.relkind = 'S'
) THEN
SELECT COALESCE(MAX(id), 0) + 1
FROM public.thought_links
INTO m_cnt;
PERFORM setval('public.identity_thought_links_id'::regclass, m_cnt);
END IF;
END;
$$;
DO $$
DECLARE
m_cnt bigint;
BEGIN
@@ -4383,6 +4549,44 @@ BEGIN
END IF;
END;
$$;
DO $$
DECLARE
m_cnt bigint;
BEGIN
IF EXISTS (
SELECT 1 FROM pg_class c
INNER JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = 'identity_project_skills_id'
AND n.nspname = 'public'
AND c.relkind = 'S'
) THEN
SELECT COALESCE(MAX(id), 0) + 1
FROM public.project_skills
INTO m_cnt;
PERFORM setval('public.identity_project_skills_id'::regclass, m_cnt);
END IF;
END;
$$;
DO $$
DECLARE
m_cnt bigint;
BEGIN
IF EXISTS (
SELECT 1 FROM pg_class c
INNER JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = 'identity_project_guardrails_id'
AND n.nspname = 'public'
AND c.relkind = 'S'
) THEN
SELECT COALESCE(MAX(id), 0) + 1
FROM public.project_guardrails
INTO m_cnt;
PERFORM setval('public.identity_project_guardrails_id'::regclass, m_cnt);
END IF;
END;
$$;
-- Comments for schema: public