diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index c0982f9a99d0c..7be23d9e1a34d 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -337,6 +337,12 @@ export const GLOBAL_MENU_ITEMS: GlobalMenuItems = [ href: '/contributing' as `/${string}`, enabled: contributionEnabled, }, + { + label: 'Troubleshooting', + icon: 'troubleshooting', + href: '/guides/troubleshooting' as `/${string}`, + level: 'troubleshooting', + }, ], ], }, diff --git a/apps/docs/data/content-listings/ai-tools.data.ts b/apps/docs/data/content-listings/ai-tools.data.ts index 4b555dc87bc7f..6517e8a909ec2 100644 --- a/apps/docs/data/content-listings/ai-tools.data.ts +++ b/apps/docs/data/content-listings/ai-tools.data.ts @@ -19,6 +19,7 @@ const ICON_ASSETS: Record = { 'gemini-cli': { icon: '/docs/img/icons/agent-gemini-cli-icon', hasLightIcon: false }, 'github-copilot': { icon: '/docs/img/icons/agent-copilot-icon', hasLightIcon: true }, kimi: { icon: '/docs/img/icons/agent-kimi-icon', hasLightIcon: true }, + omp: { icon: '/docs/img/icons/agent-omp-icon', hasLightIcon: false }, vscode: { icon: '/docs/img/icons/agent-vscode-icon', hasLightIcon: false }, antigravity: { icon: '/docs/img/icons/agent-antigravity-icon', hasLightIcon: false }, windsurf: { icon: '/docs/img/icons/agent-devin-icon', hasLightIcon: true }, @@ -46,6 +47,7 @@ const TAGLINES: Record = { goose: 'Your native open source AI agent — desktop app, CLI, and API.', kimi: 'Engineered to drop into any dev workflow and get programming tasks done fast.', kiro: 'Move beyond AI coding to agentic engineering.', + omp: 'A coding agent with the IDE wired in.', opencode: 'The open source AI coding agent.', vscode: 'The open source AI code editor — your home for multi-agent development.', // Pre-acquisition tagline (Cognition/Devin acquired Windsurf in 2025) — see "Open questions". diff --git a/apps/docs/features/ui/AgentPluginsPanel.data.ts b/apps/docs/features/ui/AgentPluginsPanel.data.ts index 91902ae641271..883baae693996 100644 --- a/apps/docs/features/ui/AgentPluginsPanel.data.ts +++ b/apps/docs/features/ui/AgentPluginsPanel.data.ts @@ -63,6 +63,14 @@ export const PLUGIN_CLIENTS: PluginClient[] = [ repoUrl: 'https://github.com/supabase-community/supabase-plugin', docsUrl: 'https://www.kimi.com/code/docs/en/kimi-code-cli/customization/plugins.html', }, + { + key: 'omp', + label: 'omp', + icon: 'omp', + repoUrl: 'https://github.com/supabase-community/supabase-plugin', + docsUrl: 'https://github.com/can1357/oh-my-pi/blob/main/docs/marketplace.md', + docsLinkText: 'View omp plugin docs', + }, { key: 'vscode', label: 'VS Code', diff --git a/apps/docs/features/ui/AgentPluginsPanel.tsx b/apps/docs/features/ui/AgentPluginsPanel.tsx index 7df6f067d13a6..bf50916004730 100644 --- a/apps/docs/features/ui/AgentPluginsPanel.tsx +++ b/apps/docs/features/ui/AgentPluginsPanel.tsx @@ -169,6 +169,38 @@ function PluginInstructions({ client }: { client: PluginClient }) { ) } + if (client.key === 'omp') { + return ( +
+

+ omp reads the Claude Code plugin format, so install the Supabase plugin from the{' '} + + official Anthropic marketplace + + : +

+ +

+ Installs with --scope user by default, making it available across all your + projects. Use --scope project to install it for the current project only. +

+

+ Inside a session, run /marketplace to browse plugins, then{' '} + /reload-plugins after installing to load the skills and MCP server. +

+
+ ) + } if (client.key === 'vscode') { return ( diff --git a/apps/docs/public/img/icons/agent-omp-icon.svg b/apps/docs/public/img/icons/agent-omp-icon.svg new file mode 100644 index 0000000000000..379eff887195e --- /dev/null +++ b/apps/docs/public/img/icons/agent-omp-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/kb/astro.config.mjs b/apps/kb/astro.config.mjs index f44675364a7ed..019ad55339552 100644 --- a/apps/kb/astro.config.mjs +++ b/apps/kb/astro.config.mjs @@ -6,6 +6,8 @@ import react from '@astrojs/react' import tailwindcss from '@tailwindcss/vite' import { defineConfig } from 'astro/config' +import supabaseTheme from '../learn/lib/themes/supabase-2.json' with { type: 'json' } + // Absolute dir of lodash-es, for the SSR-only lodash alias below (same fix // apps/studio/vite.config.ts uses). `packages/ui`'s clipboard util does // `import { noop } from 'lodash'` — under Vite's dev-mode SSR module runner, @@ -45,4 +47,23 @@ export default defineConfig({ }, plugins: [tailwindcss(), ssrLodashEs], }, + markdown: { + shikiConfig: { + theme: supabaseTheme, + // Match the docs app's CodeBlock component (border + rounded-lg on the + // outer element), since Astro's own markdown pipeline renders code + // blocks straight to a `
` with no wrapper we can add classes to.
+      transformers: [
+        {
+          name: 'kb-code-block-classes',
+          pre(node) {
+            this.addClassToHast(node, 'border border-default rounded-lg')
+          },
+          code(node) {
+            this.addClassToHast(node, 'inline-block p-6')
+          },
+        },
+      ],
+    },
+  },
 })
diff --git a/apps/kb/src/components/Card.astro b/apps/kb/src/components/Card.astro
new file mode 100644
index 0000000000000..8784427734e96
--- /dev/null
+++ b/apps/kb/src/components/Card.astro
@@ -0,0 +1,45 @@
+---
+// Small "glass panel" card, adapted from apps/docs' GlassPanel
+// (packages/ui-patterns/src/GlassPanel/index.tsx) — same surface treatment
+// (bg-surface-75, hover:border-strong), trimmed to what kb needs: no
+// logo/icon-picker machinery, which pulled in next/image and next-themes
+// that don't apply to a plain Astro app.
+//
+// Unlike GlassPanel (always a plain 
, link-agnostic — every call site +// in docs wraps it in a Next.js ), this renders as an itself when +// `href` is given. That's only safe because `topics` render as plain, +// non-linked badges — nothing inside the card is itself a link, so there's +// no nested- problem. +import { Badge } from 'ui' + +interface Props { + href?: string + title: string + description?: string + topics?: string[] + class?: string +} + +const { href, title, description, topics = [], class: className } = Astro.props +const Tag = href ? 'a' : 'div' +--- + + +

{title}

+ {description &&

{description}

} + { + topics.length > 0 && ( +
+ {topics.map((topic) => ( + {topic} + ))} +
+ ) + } +
diff --git a/apps/kb/src/components/Header.tsx b/apps/kb/src/components/Header.tsx index 5f7c344da070b..f1b9c746a54fc 100644 --- a/apps/kb/src/components/Header.tsx +++ b/apps/kb/src/components/Header.tsx @@ -7,7 +7,7 @@ import { ThemeToggle } from './ThemeToggle' // search, no user menu, no dashboard link — kb doesn't have any of that yet. function Header() { return ( -
+