feat(pi): expose first-class desktop workflows

This commit is contained in:
SaladDay
2026-08-02 22:52:35 +00:00
parent 7609ff799e
commit a88a58b516
64 changed files with 2954 additions and 218 deletions
+52 -3
View File
@@ -1,5 +1,6 @@
import React from "react";
import type { AppId } from "@/lib/api/types";
import type { VisibleApps } from "@/types";
import {
ClaudeIcon,
CodexIcon,
@@ -24,9 +25,22 @@ export const APP_IDS: AppId[] = [
"opencode",
"openclaw",
"hermes",
"pi",
];
/** App IDs shown in Skills panels (excludes OpenClaw — it doesn't support Skills) */
export const DEFAULT_VISIBLE_APPS: VisibleApps = {
claude: true,
"claude-desktop": true,
codex: true,
gemini: true,
grokbuild: true,
opencode: true,
openclaw: true,
hermes: true,
pi: true,
};
/** App IDs shown in Skills panels. */
export const SKILLS_APP_IDS: AppId[] = [
"claude",
"codex",
@@ -34,10 +48,33 @@ export const SKILLS_APP_IDS: AppId[] = [
"grokbuild",
"opencode",
"hermes",
"pi",
];
/** App IDs shown in MCP panels (excludes OpenClaw) */
export const MCP_APP_IDS: AppId[] = [...SKILLS_APP_IDS];
export type ProxyAppId = Extract<
AppId,
"claude" | "codex" | "gemini" | "grokbuild" | "pi"
>;
/** Apps with a complete local gateway + failover data plane. */
export const PROXY_APP_IDS: ProxyAppId[] = [
"claude",
"codex",
"gemini",
"grokbuild",
"pi",
];
/** Pi has no native MCP registry; do not manufacture a disabled mirror. */
export type McpAppId = Exclude<AppId, "claude-desktop" | "openclaw" | "pi">;
export const MCP_APP_IDS: McpAppId[] = [
"claude",
"codex",
"gemini",
"grokbuild",
"opencode",
"hermes",
];
export const APP_ICON_MAP: Record<AppId, AppConfig> = {
claude: {
@@ -125,4 +162,16 @@ export const APP_ICON_MAP: Record<AppId, AppConfig> = {
badgeClass:
"bg-violet-500/10 text-violet-700 dark:text-violet-300 hover:bg-violet-500/20 border-0 gap-1.5",
},
pi: {
label: "Pi",
icon: <ProviderIcon icon="pi" name="Pi" size={14} showFallback={false} />,
activeClass:
"bg-fuchsia-500/10 ring-1 ring-fuchsia-500/20 hover:bg-fuchsia-500/20 text-fuchsia-600 dark:text-fuchsia-400",
badgeClass:
"bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300 hover:bg-fuchsia-500/20 border-0 gap-1.5",
},
};
export function getAppLabel(appId: string): string {
return APP_ICON_MAP[appId as AppId]?.label ?? appId;
}