-- Chat Switchboard — 016 Packages (SQLite) -- Unified package registry. Replaces surface_registry + extensions. -- v0.28.7 CREATE TABLE IF NOT EXISTS packages ( id TEXT PRIMARY KEY, title TEXT NOT NULL, type TEXT NOT NULL DEFAULT 'surface' CHECK (type IN ('surface', 'extension', 'full')), version TEXT NOT NULL DEFAULT '0.0.0', description TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', tier TEXT NOT NULL DEFAULT 'browser' CHECK (tier IN ('browser', 'starlark', 'sidecar')), is_system INTEGER NOT NULL DEFAULT 0, scope TEXT NOT NULL DEFAULT 'global' CHECK (scope IN ('global', 'team', 'personal')), team_id TEXT REFERENCES teams(id) ON DELETE CASCADE, installed_by TEXT REFERENCES users(id) ON DELETE SET NULL, manifest TEXT NOT NULL DEFAULT '{}', enabled INTEGER NOT NULL DEFAULT 1, source TEXT NOT NULL DEFAULT 'core' CHECK (source IN ('core', 'builtin', 'extension')), installed_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_packages_type ON packages(type); CREATE INDEX IF NOT EXISTS idx_packages_enabled ON packages(enabled); CREATE INDEX IF NOT EXISTS idx_packages_team ON packages(team_id); CREATE INDEX IF NOT EXISTS idx_packages_source ON packages(source); -- Per-user overrides for packages (enable/disable, custom config). -- Lives in 016 (not 012) because of FK dependency on packages table. CREATE TABLE IF NOT EXISTS package_user_settings ( package_id TEXT NOT NULL REFERENCES packages(id) ON DELETE CASCADE, user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, settings TEXT NOT NULL DEFAULT '{}', is_enabled INTEGER NOT NULL DEFAULT 1, PRIMARY KEY (package_id, user_id) );