feat(ui): add maintenance page for task management
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:
warkanum committed 2026-04-26 23:13:41 +02:00
1 parent b39cd3ba72
commit 927a118338
48 files changed
+2228 -868

No files matched your search

+1
View File
@@ -1,2 +1,3 @@
create extension if not exists vector;
create extension if not exists pgcrypto;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
+226 -22
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
+14 -1
View File
@@ -39,4 +39,17 @@ GRANT ALL ON TABLE public.project_guardrails TO amcs;
-- Chat Histories (018)
GRANT ALL ON TABLE public.chat_histories TO amcs;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO amcs;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO amcs;
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public' -- Change 'public' to your schema name
LOOP
EXECUTE format('ALTER TABLE public.%I OWNER TO amcs', r.tablename);
END LOOP;
END $$;
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.