{"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/base/utils.ts","../../../src/components/primitives/internal/overlaySurface.ts","../../../src/components/layout/index.tsx","../../../src/components/agent-workbench/appearance.tsx","../../../src/components/primitives/AutosizeTextarea.tsx","../../../src/components/primitives/InteractiveControls.tsx","../../../src/components/primitives/FormControls.tsx","../../../src/components/primitives/InputGroup.tsx","../../../src/components/primitives/Menus.tsx","../../../src/components/primitives/Sheet.tsx","../../../src/components/agent-workbench/AgentWorkbenchComposer.tsx","../../../src/components/agent-workbench/AgentWorkbenchQuickStart.tsx","../../../src/components/agent-workbench/AgentWorkbenchSidebarContainer.tsx","../../../src/components/agent-workbench/AgentWorkbenchSidebarNavigation.tsx","../../../src/components/agent-workbench/AgentWorkbenchSidebar.tsx","../../../src/components/agent-workbench/AgentWorkbenchExploreSidebar.tsx","../../../src/components/agent-workbench/activity-model.ts","../../../src/components/agent-workbench/AgentWorkbenchApproval.tsx","../../../src/components/agent-workbench/AgentWorkbenchTool.tsx","../../../src/components/agent-workbench/AgentWorkbenchActivity.tsx","../../../src/components/agent-workbench/details-model.ts","../../../src/components/agent-workbench/AgentWorkbenchTaskDetails.tsx","../../../src/components/agent-workbench/AgentWorkbenchMessage.tsx","../../../src/components/agent-workbench/AgentWorkbenchThread.tsx","../../../src/components/agent-workbench/AgentWorkbenchThreadShell.tsx","../../../src/components/agent-workbench/AgentWorkbenchShell.tsx","../../../src/components/agent-workbench/AgentWorkbenchProcess.tsx","../../../src/components/agent-workbench/AgentWorkbenchArtifactSummary.tsx","../../../src/components/agent-workbench/AgentWorkbenchArtifactWorkspace.tsx"],"names":["cn","createContext","useContext","useMemo","jsx","AgentWorkbenchSurface","React","React2","jsxs","React3","cva","React4","DropdownMenu","Check","ChevronDown","Fragment","React6","useRef","useState","useEffect","ImageIcon","FileText","Icon","forwardRef","AgentWorkbenchSidebarContainer","Search","X","Trash2","Pencil","Bot","RefreshCw","query","Pin","resolveAgentWorkbenchSidebarConfig","JsonValue","Clock3","Loader2","CheckCircle2","event","XCircle","Circle","latestBy","formatDuration","StatusIcon","AlertCircle","FileOutput","Download","RotateCcw","TerminalSquare","AgentWorkbenchMessage","AgentWorkbenchMessageContent","AgentWorkbenchMessageActions","AgentWorkbenchMessageAction","AgentWorkbenchThreadShell","useCallback","next","CircleAlert","ChevronRight","File","FileCode2","ARTIFACT_ICONS","Music2","FileImage","Presentation","Film","Globe2","TabsPrimitive2","CSS","TriangleAlert"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { MonkeysLocale } from \"./types\";\n\nexport const enUS = {\n  locale: \"en-US\",\n  messages: {\n    pagination: {\n      navigation: \"Pagination\",\n      first: \"First\",\n      previous: \"Previous\",\n      next: \"Next\",\n      last: \"Last\",\n      page: ({ page, pageCount }) => `Page ${page} of ${pageCount}`,\n      currentPage: ({ page, pageCount }) =>\n        `Page ${page} of ${pageCount}, current page`,\n      emptyResults: \"0 results\",\n      range: ({ start, end, total }) => `${start}-${end} of ${total}`,\n      selected: ({ count }) => `${count} selected`,\n      pageSize: \"Items per page\",\n      perLoad: \"Items per load\",\n      jumpToPage: \"Jump to page\",\n      pages: \"pages\",\n      clickToJump: \"Click to jump to a page\",\n    },\n    dialog: {\n      close: \"Close dialog\",\n    },\n    dropdownMenu: {\n      actions: \"Actions\",\n    },\n    loading: {\n      spinner: \"Loading\",\n    },\n    layout: {\n      resizePanels: \"Resize panels\",\n    },\n    steps: {\n      label: \"Progress\",\n      current: \"Current\",\n      completed: \"Completed\",\n      error: \"Error\",\n      disabled: \"Disabled\",\n    },\n    numberInput: {\n      increment: \"Increase value\",\n      decrement: \"Decrease value\",\n    },\n    passwordInput: {\n      showPassword: \"Show password\",\n      hidePassword: \"Hide password\",\n    },\n    multiSelect: {\n      placeholder: \"Select options\",\n      empty: \"No options\",\n      removeOption: ({ value }) => `Remove ${value}`,\n    },\n    table: {\n      dragColumn: ({ columnId }) => `Drag column ${columnId}`,\n      resizeColumn: ({ columnId }) => `Resize column ${columnId}`,\n      sortColumn: ({ columnId }) =>\n        columnId ? `Sort column ${columnId}` : \"Sort column\",\n      loadingRow: \"Loading table row\",\n    },\n    toolbar: {\n      theme: {\n        label: \"Appearance\",\n        toggle: \"Toggle theme\",\n        auto: \"Auto\",\n        light: \"Light\",\n        dark: \"Dark\",\n      },\n      language: {\n        label: \"Language\",\n        switch: \"Switch language\",\n      },\n    },\n    toast: {\n      errorTitle: \"Error\",\n      warningTitle: \"Warning\",\n      defaultErrorDescription: \"Something went wrong.\",\n      defaultWarningDescription: \"Please check and try again.\",\n    },\n    dataExplorer: {\n      viewTree: {\n        actions: \"More actions\",\n        expand: \"Expand\",\n        collapse: \"Collapse\",\n        loading: \"Loading...\",\n        empty: \"No views\",\n        error: \"Unable to load views\",\n      },\n    },\n    workbench: {\n      collection: {\n        label: \"Collection\",\n        loading: \"Loading items\",\n        empty: \"No items\",\n        loadError: \"Unable to load items\",\n        refreshError: \"Unable to refresh items\",\n        retry: \"Retry\",\n        loadingMore: \"Loading more items\",\n        permission: \"You do not have permission to view this content\",\n        offline: \"You appear to be offline\",\n        requestAccess: \"Request access\",\n      },\n      interactiveTable: {\n        columnActions: \"Column actions\",\n        freezeColumn: \"Freeze to left\",\n        freezeEndColumn: \"Freeze to right\",\n        unfreezeColumn: \"Unfreeze from left\",\n        unfreezeEndColumn: \"Unfreeze from right\",\n        unfreezeAllColumns: \"Unfreeze all columns\",\n        resetColumnWidth: \"Reset column width\",\n        frozenColumnTitle: \"Frozen column\",\n      },\n    },\n    agentWorkbench: {\n      label: \"Session activity\",\n      reasoning: \"Reasoning\",\n      plan: \"Plan\",\n      taskNoDetail: \"No additional details\",\n      modes: { chat: \"Chat\", work: \"Work\" },\n      composer: {\n        send: \"Send message\",\n        stop: \"Stop generating\",\n        queue: \"Queue message\",\n        attach: \"Add photos or files\",\n        voice: \"Start voice input\",\n        webSearch: \"Web search\",\n        chatMode: \"Chat mode\",\n        model: \"Model\",\n        reasoning: \"Reasoning effort\",\n        permissions: \"Permissions\",\n        removeAttachment: \"Remove attachment\",\n        editQueued: \"Edit queued message\",\n        deleteQueued: \"Delete queued message\",\n        moveUp: \"Move message up\",\n        moveDown: \"Move message down\",\n        queued: \"Queued messages\",\n        uploading: \"Uploading\",\n        uploadFailed: \"Upload failed\",\n        retryAttachment: \"Retry attachment upload\",\n        noModels: \"No models available\",\n        message: \"Message\",\n        attachmentOnly: \"Attachment\",\n        reasoningOptions: {\n          low: \"Low\",\n          medium: \"Medium\",\n          high: \"High\",\n          xhigh: \"Extra high\",\n        },\n        permissionOptions: {\n          \"approval-required\": \"Approval required\",\n          \"auto-approve\": \"Auto approve\",\n          \"full-access\": \"Full access\",\n        },\n      },\n      quickStart: {\n        label: \"Quick start\",\n        back: \"Back\",\n        addFile: \"Add file\",\n      },\n      tool: {\n        input: \"Input\",\n        output: \"Output\",\n        status: {\n          pending: \"Pending\",\n          running: \"Running\",\n          completed: \"Completed\",\n          failed: \"Error\",\n          denied: \"Denied\",\n        },\n      },\n      approval: {\n        approve: \"Approve\",\n        reject: \"Reject\",\n        approved: \"Approved\",\n        rejected: \"Rejected\",\n      },\n      artifact: {\n        pending: \"Preparing\",\n        ready: \"Ready\",\n        failed: \"Failed\",\n        open: ({ name }) => `Open ${name}`,\n      },\n      run: {\n        stopping: \"Stopping...\",\n        stoppedAfter: ({ duration }) => `You stopped after ${duration}`,\n      },\n      process: {\n        running: \"Working\",\n        queued: \"Queued\",\n        waitingApproval: \"Waiting for approval\",\n        failed: \"Failed\",\n        stopped: \"Stopped\",\n        processed: \"Processed\",\n        processedFor: ({ duration }) => `Worked for ${duration}`,\n        completedCount: ({ completed, total }) =>\n          `${completed}/${total} completed`,\n      },\n      artifactWorkspace: {\n        outputs: \"Outputs\",\n        sources: \"Sources\",\n        viewAll: \"View all\",\n        toggleSummary: \"Toggle files\",\n        tabs: \"Open files\",\n        closeTab: ({ name }) => `Close ${name}`,\n        closeWorkspace: \"Close workspace\",\n        download: ({ name }) => `Download ${name}`,\n        openExternal: ({ name }) => `Open ${name} in a new window`,\n        loading: \"Loading preview...\",\n        failed: \"Preview unavailable\",\n        retry: \"Try again\",\n      },\n      usage: {\n        label: \"Context usage\",\n        context: ({ used, total }) => `${used} / ${total} tokens`,\n      },\n      navigation: {\n        search: \"Search agents and sessions\",\n        searchSessions: \"Search sessions\",\n        searchShortcut: \"Focus search\",\n        clearSearch: \"Clear search\",\n        tabsLabel: \"Agent workbench navigation\",\n        agents: \"Agents\",\n        sessions: \"Sessions\",\n        newAgent: \"New Agent\",\n        newSession: \"New Session\",\n        capabilities: \"Capabilities & Extensions\",\n        settings: \"Agent Settings\",\n        allAgents: \"All Agents\",\n        recentSessions: \"Recent Sessions\",\n        chat: \"Chat\",\n        work: \"Work\",\n        chats: \"Chats\",\n        builtIn: \"Built-in\",\n        noDescription: \"No description\",\n        loading: \"Loading...\",\n        emptyAgents: \"No agents yet\",\n        emptySessions: \"No sessions yet\",\n        noResults: \"No matching results\",\n        retry: \"Retry\",\n        pin: \"Pin\",\n        unpin: \"Unpin\",\n        rename: \"Rename\",\n        delete: \"Delete\",\n        actions: \"Actions\",\n        save: \"Save\",\n        cancel: \"Cancel\",\n        running: \"Running\",\n        completed: \"Completed\",\n        failed: \"Failed\",\n        contextUsage: ({ percent }) => `${percent}% context used`,\n      },\n      details: {\n        title: \"Task details\",\n        description: \"Summary and workspace activity\",\n        duration: \"Duration\",\n        updated: \"Updated\",\n        model: \"Model\",\n        mode: \"Mode\",\n        permissions: \"Permissions\",\n        tokenUsage: \"Token usage\",\n        summary: \"Summary\",\n        summaryEmpty: \"No summary is available yet.\",\n        summaryFailed: \"The summary could not be generated.\",\n        highlights: \"Highlights\",\n        pendingItems: \"Pending items\",\n        tabs: {\n          label: \"Task detail views\",\n          summary: \"Summary\",\n          workspace: \"Workspace\",\n        },\n        status: {\n          queued: \"Queued\",\n          running: \"Running\",\n          waiting_approval: \"Waiting for approval\",\n          stopping: \"Stopping\",\n          stopped: \"Stopped\",\n          completed: \"Completed\",\n          failed: \"Failed\",\n        },\n        state: {\n          loading: {\n            title: \"Loading task details\",\n            description: \"Restoring the latest session activity.\",\n          },\n          empty: {\n            title: \"No task selected\",\n            description: \"Select a task to inspect its details.\",\n          },\n          error: {\n            title: \"Unable to load task details\",\n            description: \"Try again after the session is available.\",\n          },\n        },\n        actions: {\n          close: \"Close task details\",\n          copySummary: \"Copy summary\",\n          retry: \"Retry\",\n          retrySummary: \"Retry summary\",\n          resume: \"Resume\",\n          continueInNewTask: \"Continue in new task\",\n          editAndRerun: \"Edit and rerun\",\n          export: \"Export\",\n        },\n        workspace: {\n          diffs: \"Code changes\",\n          files: \"Files\",\n          terminals: \"Terminals\",\n          tests: \"Tests\",\n          artifacts: \"Artifacts\",\n          exitCode: ({ code }) => `Exit code ${code}`,\n          diffStatus: {\n            added: \"Added\",\n            modified: \"Modified\",\n            deleted: \"Deleted\",\n            renamed: \"Renamed\",\n          },\n          fileOperation: { upsert: \"Updated\", delete: \"Deleted\" },\n        },\n      },\n    },\n  },\n} satisfies MonkeysLocale;\n","import { enUS } from './en-US';\nimport type {\n  MonkeysBuiltInLocaleId,\n  MonkeysLocale,\n  MonkeysLocaleInput,\n  MonkeysLocaleMessages,\n  MonkeysLocaleMessagesOverride,\n  MonkeysResolvedLocale,\n} from './types';\nimport { zhCN } from './zh-CN';\n\nconst BUILT_IN_LOCALES: Record<MonkeysBuiltInLocaleId, MonkeysLocale> = {\n  'en-US': enUS,\n  'zh-CN': zhCN,\n};\n\nfunction normalizeLocaleId(locale: unknown): string {\n  if (typeof locale !== 'string' || !locale.trim()) {\n    throw new TypeError('Monkeys locale must be a non-empty BCP 47 string.');\n  }\n\n  try {\n    return Intl.getCanonicalLocales(locale)[0];\n  } catch {\n    throw new RangeError(\n      `Monkeys locale \"${locale}\" is not a valid BCP 47 identifier.`,\n    );\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction validateMessageOverride(\n  value: unknown,\n  schema: unknown,\n  path: string,\n) {\n  if (!isRecord(value) || !isRecord(schema)) {\n    throw new TypeError(`${path} must be an object.`);\n  }\n\n  for (const [key, candidate] of Object.entries(value)) {\n    if (candidate === undefined) continue;\n    if (!(key in schema)) {\n      throw new TypeError(`${path}.${key} is not a supported Monkeys message.`);\n    }\n\n    const expected = schema[key];\n    const candidatePath = `${path}.${key}`;\n    if (typeof expected === 'function') {\n      if (typeof candidate !== 'function') {\n        throw new TypeError(`${candidatePath} must be a function.`);\n      }\n    } else if (typeof expected === 'string') {\n      if (typeof candidate !== 'string') {\n        throw new TypeError(`${candidatePath} must be a string.`);\n      }\n    } else {\n      validateMessageOverride(candidate, expected, candidatePath);\n    }\n  }\n}\n\nfunction assertMessagesOverride(\n  value: unknown,\n  path: string,\n): asserts value is MonkeysLocaleMessagesOverride {\n  validateMessageOverride(value, enUS.messages, path);\n}\n\nfunction isBuiltInLocale(locale: string): locale is MonkeysBuiltInLocaleId {\n  return locale === 'en-US' || locale === 'zh-CN';\n}\n\nfunction normalizeLocaleInput(input: MonkeysLocaleInput | undefined): {\n  locale: string | undefined;\n  messages: MonkeysLocaleMessagesOverride | undefined;\n  hasExplicitLocale: boolean;\n} {\n  if (input === undefined) {\n    return {\n      locale: undefined,\n      messages: undefined,\n      hasExplicitLocale: false,\n    };\n  }\n\n  if (typeof input === 'string') {\n    const locale = normalizeLocaleId(input);\n    if (!isBuiltInLocale(locale)) {\n      throw new RangeError(\n        `Unsupported built-in Monkeys locale \"${locale}\". Provide a locale pack object for custom locales.`,\n      );\n    }\n    return { locale, messages: undefined, hasExplicitLocale: true };\n  }\n\n  if (!input || typeof input !== 'object' || Array.isArray(input)) {\n    throw new TypeError('Monkeys locale must be a locale id or locale pack object.');\n  }\n\n  const locale = normalizeLocaleId(input.locale);\n  assertMessagesOverride(input.messages, 'Monkeys locale messages');\n\n  return {\n    locale,\n    messages: input.messages,\n    hasExplicitLocale: true,\n  };\n}\n\nexport function mergeMonkeysLocaleMessages(\n  base: MonkeysLocaleMessages,\n  override?: MonkeysLocaleMessagesOverride,\n): MonkeysLocaleMessages {\n  if (!override) return base;\n\n  return {\n    pagination: { ...base.pagination, ...override.pagination },\n    dialog: { ...base.dialog, ...override.dialog },\n    dropdownMenu: { ...base.dropdownMenu, ...override.dropdownMenu },\n    loading: { ...base.loading, ...override.loading },\n    layout: { ...base.layout, ...override.layout },\n    steps: { ...base.steps, ...override.steps },\n    numberInput: { ...base.numberInput, ...override.numberInput },\n    passwordInput: { ...base.passwordInput, ...override.passwordInput },\n    multiSelect: { ...base.multiSelect, ...override.multiSelect },\n    table: { ...base.table, ...override.table },\n    toolbar: {\n      theme: { ...base.toolbar.theme, ...override.toolbar?.theme },\n      language: { ...base.toolbar.language, ...override.toolbar?.language },\n    },\n    toast: { ...base.toast, ...override.toast },\n    dataExplorer: {\n      viewTree: {\n        ...base.dataExplorer.viewTree,\n        ...override.dataExplorer?.viewTree,\n      },\n    },\n    workbench: {\n      collection: {\n        ...base.workbench.collection,\n        ...override.workbench?.collection,\n      },\n      interactiveTable: {\n        ...base.workbench.interactiveTable,\n        ...override.workbench?.interactiveTable,\n      },\n    },\n    agentWorkbench: {\n      ...base.agentWorkbench,\n      ...override.agentWorkbench,\n      modes: {\n        ...base.agentWorkbench.modes,\n        ...override.agentWorkbench?.modes,\n      },\n      composer: {\n        ...base.agentWorkbench.composer,\n        ...override.agentWorkbench?.composer,\n      },\n      quickStart: {\n        ...base.agentWorkbench.quickStart,\n        ...override.agentWorkbench?.quickStart,\n      },\n      tool: {\n        ...base.agentWorkbench.tool,\n        ...override.agentWorkbench?.tool,\n        status: {\n          ...base.agentWorkbench.tool.status,\n          ...override.agentWorkbench?.tool?.status,\n        },\n      },\n      approval: {\n        ...base.agentWorkbench.approval,\n        ...override.agentWorkbench?.approval,\n      },\n      artifact: {\n        ...base.agentWorkbench.artifact,\n        ...override.agentWorkbench?.artifact,\n      },\n      run: {\n        ...base.agentWorkbench.run,\n        ...override.agentWorkbench?.run,\n      },\n      process: {\n        ...base.agentWorkbench.process,\n        ...override.agentWorkbench?.process,\n      },\n      artifactWorkspace: {\n        ...base.agentWorkbench.artifactWorkspace,\n        ...override.agentWorkbench?.artifactWorkspace,\n      },\n      usage: {\n        ...base.agentWorkbench.usage,\n        ...override.agentWorkbench?.usage,\n      },\n      navigation: {\n        ...base.agentWorkbench.navigation,\n        ...override.agentWorkbench?.navigation,\n      },\n      details: {\n        ...base.agentWorkbench.details,\n        ...override.agentWorkbench?.details,\n        tabs: {\n          ...base.agentWorkbench.details.tabs,\n          ...override.agentWorkbench?.details?.tabs,\n        },\n        status: {\n          ...base.agentWorkbench.details.status,\n          ...override.agentWorkbench?.details?.status,\n        },\n        state: {\n          loading: {\n            ...base.agentWorkbench.details.state.loading,\n            ...override.agentWorkbench?.details?.state?.loading,\n          },\n          empty: {\n            ...base.agentWorkbench.details.state.empty,\n            ...override.agentWorkbench?.details?.state?.empty,\n          },\n          error: {\n            ...base.agentWorkbench.details.state.error,\n            ...override.agentWorkbench?.details?.state?.error,\n          },\n        },\n        actions: {\n          ...base.agentWorkbench.details.actions,\n          ...override.agentWorkbench?.details?.actions,\n        },\n        workspace: {\n          ...base.agentWorkbench.details.workspace,\n          ...override.agentWorkbench?.details?.workspace,\n          diffStatus: {\n            ...base.agentWorkbench.details.workspace.diffStatus,\n            ...override.agentWorkbench?.details?.workspace?.diffStatus,\n          },\n          fileOperation: {\n            ...base.agentWorkbench.details.workspace.fileOperation,\n            ...override.agentWorkbench?.details?.workspace?.fileOperation,\n          },\n        },\n      },\n    },\n  };\n}\n\nexport const defaultMonkeysLocale: MonkeysResolvedLocale = {\n  locale: enUS.locale,\n  messages: mergeMonkeysLocaleMessages(\n    enUS.messages as MonkeysLocaleMessages,\n  ),\n};\n\nexport function resolveMonkeysLocale(\n  input?: MonkeysLocaleInput,\n  override?: MonkeysLocaleMessagesOverride,\n  parent?: MonkeysResolvedLocale,\n): MonkeysResolvedLocale {\n  if (override !== undefined) {\n    assertMessagesOverride(override, 'MonkeysProvider messages');\n  }\n  const normalized = normalizeLocaleInput(input);\n  const locale = normalized.locale ?? parent?.locale ?? enUS.locale;\n  const builtInMessages = isBuiltInLocale(locale)\n    ? BUILT_IN_LOCALES[locale].messages\n    : undefined;\n  let messages = mergeMonkeysLocaleMessages(\n    enUS.messages as MonkeysLocaleMessages,\n    builtInMessages,\n  );\n\n  if (parent && (!normalized.hasExplicitLocale || parent.locale === locale)) {\n    messages = mergeMonkeysLocaleMessages(messages, parent.messages);\n  }\n\n  messages = mergeMonkeysLocaleMessages(messages, normalized.messages);\n  messages = mergeMonkeysLocaleMessages(messages, override);\n\n  return { locale, messages };\n}\n","import {\n  createContext,\n  useContext,\n  useMemo,\n  type Context,\n} from 'react';\n\nimport type { AssetIconResolver, AssetImageResolver } from '../components/base/BaseAssetIcon';\nimport type { BaseAppearance } from '../components/base/types';\nimport type { DataExplorerAppearance } from '../components/data-explorer/types';\nimport {\n  defaultMonkeysLocale,\n  type MonkeysLocaleMessages,\n  type MonkeysResolvedLocale,\n} from '../locale';\nimport type { CompiledThemeTokens } from '../theme-system';\n\nexport type MonkeysDirection = 'ltr' | 'rtl';\n\nexport interface MonkeysEnvironment {\n  getDocument?: () => Document | null;\n  getWindow?: () => Window | null;\n}\n\nexport type MonkeysPortalContainer =\n  | Element\n  | null\n  | (() => Element | null);\n\nexport interface MonkeysPortalOptions {\n  container?: MonkeysPortalContainer;\n  disabled?: boolean;\n}\n\nexport type MonkeysLoadingStateVariant = 'spinner' | 'skeleton';\nexport type MonkeysEmptyStateVariant = 'default' | 'compact';\nexport type MonkeysStatusStateDensity = 'compact' | 'default' | 'comfortable';\n\nexport type MonkeysListFooterPaginationMode = 'auto' | 'pages' | 'compact';\nexport type MonkeysListFooterAlignment = 'start' | 'end' | 'space-between';\n\nexport interface MonkeysListFooterConfig {\n  showTotal?: boolean;\n  showPageSize?: boolean;\n  pageSizeOptions?: number[];\n  paginationMode?: MonkeysListFooterPaginationMode;\n  alignment?: MonkeysListFooterAlignment;\n  density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysStatusStatesConfig {\n  loading?: { variant?: MonkeysLoadingStateVariant };\n  empty?: { variant?: MonkeysEmptyStateVariant };\n  error?: { showRetry?: boolean };\n  permission?: { showRequestAccess?: boolean };\n  density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysComponentAttributes {\n  dir?: MonkeysDirection;\n  'data-monkeys-direction'?: MonkeysDirection;\n  'data-monkeys-locale'?: string;\n  'data-monkeys-theme'?: string;\n  'data-monkeys-theme-mode'?: string;\n}\n\ninterface MonkeysLocaleContextValue extends MonkeysResolvedLocale {\n  provided: boolean;\n}\n\ninterface MonkeysThemeContextValue {\n  provided: boolean;\n  resolvedTheme?: CompiledThemeTokens;\n  themeId?: string;\n  baseAppearance?: BaseAppearance;\n  dataExplorerAppearance?: DataExplorerAppearance;\n  statusStates?: MonkeysStatusStatesConfig;\n  listFooter?: MonkeysListFooterConfig;\n}\n\ninterface MonkeysDirectionContextValue {\n  provided: boolean;\n  direction?: MonkeysDirection;\n}\n\ninterface MonkeysEnvironmentContextValue {\n  provided: boolean;\n  environment: MonkeysEnvironment;\n  portal: MonkeysPortalOptions;\n  iconResolver?: AssetIconResolver;\n  imageResolver?: AssetImageResolver;\n}\n\nconst EMPTY_ENVIRONMENT = Object.freeze({}) satisfies MonkeysEnvironment;\nconst EMPTY_PORTAL = Object.freeze({}) satisfies MonkeysPortalOptions;\n\ninterface MonkeysProviderContexts {\n  locale: Context<MonkeysLocaleContextValue>;\n  theme: Context<MonkeysThemeContextValue>;\n  direction: Context<MonkeysDirectionContextValue>;\n  environment: Context<MonkeysEnvironmentContextValue>;\n}\n\n// Every bundled public entry contains this module. Keep only the Context\n// identities in a realm-wide registry so root, provider, and component\n// subpaths interoperate in both CJS and ESM builds. Provider values remain in\n// React trees, so SSR requests are isolated. Bump the contract key only when\n// these Context value shapes become intentionally incompatible.\nconst MONKEYS_PROVIDER_CONTEXTS_KEY = Symbol.for(\n  '@inf-monkeys-tech/monkeys-design/provider-context@1',\n);\n\ntype MonkeysProviderContextHost = typeof globalThis & {\n  [MONKEYS_PROVIDER_CONTEXTS_KEY]?: MonkeysProviderContexts;\n};\n\nfunction createMonkeysProviderContexts(): MonkeysProviderContexts {\n  return Object.freeze({\n    locale: createContext<MonkeysLocaleContextValue>({\n      ...defaultMonkeysLocale,\n      provided: false,\n    }),\n    theme: createContext<MonkeysThemeContextValue>({\n      provided: false,\n    }),\n    direction: createContext<MonkeysDirectionContextValue>({\n      provided: false,\n    }),\n    environment: createContext<MonkeysEnvironmentContextValue>({\n      provided: false,\n      environment: EMPTY_ENVIRONMENT,\n      portal: EMPTY_PORTAL,\n    }),\n  });\n}\n\nfunction getMonkeysProviderContexts(): MonkeysProviderContexts {\n  const host = globalThis as MonkeysProviderContextHost;\n  const existing = host[MONKEYS_PROVIDER_CONTEXTS_KEY];\n  if (existing) return existing;\n\n  const contexts = createMonkeysProviderContexts();\n  Object.defineProperty(host, MONKEYS_PROVIDER_CONTEXTS_KEY, {\n    value: contexts,\n    enumerable: false,\n    configurable: false,\n    writable: false,\n  });\n  return contexts;\n}\n\nconst providerContexts = getMonkeysProviderContexts();\n\nexport const MonkeysLocaleContext = providerContexts.locale;\n\nexport const MonkeysThemeContext = providerContexts.theme;\n\nexport const MonkeysDirectionContext = providerContexts.direction;\n\nexport const MonkeysEnvironmentContext = providerContexts.environment;\n\nfunction mergeAppearance<T extends { slots?: object; styles?: object }>(\n  inherited: T | undefined,\n  explicit: T | undefined,\n): T | undefined {\n  if (explicit === undefined) return inherited;\n  if (inherited === undefined) return explicit;\n\n  return {\n    ...inherited,\n    ...explicit,\n    slots:\n      inherited.slots || explicit.slots\n        ? { ...inherited.slots, ...explicit.slots }\n        : undefined,\n    styles:\n      inherited.styles || explicit.styles\n        ? { ...inherited.styles, ...explicit.styles }\n        : undefined,\n  };\n}\n\nexport function useMonkeysLocale() {\n  try {\n    const context = useContext(MonkeysLocaleContext);\n    return context ?? { ...defaultMonkeysLocale, provided: false };\n  } catch {\n    return { ...defaultMonkeysLocale, provided: false };\n  }\n}\n\nexport function useMonkeysLocaleMessages(): MonkeysLocaleMessages {\n  return useContext(MonkeysLocaleContext).messages;\n}\n\nexport function useMonkeysResolvedTheme() {\n  return useContext(MonkeysThemeContext).resolvedTheme;\n}\n\nexport function useMonkeysBaseAppearance(\n  explicit?: BaseAppearance,\n): BaseAppearance | undefined {\n  const inherited = useContext(MonkeysThemeContext).baseAppearance;\n  return useMemo(\n    () => mergeAppearance(inherited, explicit),\n    [explicit, inherited],\n  );\n}\n\nexport function useMonkeysDataExplorerAppearance(\n  explicit?: DataExplorerAppearance,\n): DataExplorerAppearance | undefined {\n  const inherited = useContext(MonkeysThemeContext).dataExplorerAppearance;\n  return useMemo(\n    () => mergeAppearance(inherited, explicit),\n    [explicit, inherited],\n  );\n}\n\nexport function useMonkeysStatusStates(): MonkeysStatusStatesConfig {\n  return useContext(MonkeysThemeContext).statusStates ?? {};\n}\n\nexport function useMonkeysListFooter(): MonkeysListFooterConfig {\n  return useContext(MonkeysThemeContext).listFooter ?? {};\n}\n\nexport function useMonkeysDirection() {\n  return useContext(MonkeysDirectionContext).direction;\n}\n\nexport function useMonkeysEnvironment() {\n  return useContext(MonkeysEnvironmentContext).environment;\n}\n\nexport function useMonkeysPortalOptions() {\n  return useContext(MonkeysEnvironmentContext).portal;\n}\n\nexport function useMonkeysComponentAttributes(): MonkeysComponentAttributes {\n  const locale = useContext(MonkeysLocaleContext);\n  const theme = useContext(MonkeysThemeContext);\n  const direction = useContext(MonkeysDirectionContext);\n  const providerActive = locale.provided || theme.provided || direction.provided;\n\n  return useMemo(\n    () =>\n      providerActive\n        ? {\n            dir: direction.direction,\n            'data-monkeys-direction': direction.direction,\n            'data-monkeys-locale': locale.locale,\n            'data-monkeys-theme': theme.themeId,\n            'data-monkeys-theme-mode': theme.resolvedTheme?.colorMode,\n          }\n        : {},\n    [\n      direction.direction,\n      locale.locale,\n      providerActive,\n      theme.resolvedTheme?.colorMode,\n      theme.themeId,\n    ],\n  );\n}\n\nexport function useMonkeysAssetIconResolver(): AssetIconResolver | undefined {\n  return useContext(MonkeysEnvironmentContext).iconResolver;\n}\nexport function useMonkeysAssetImageResolver(): AssetImageResolver | undefined {\n  return useContext(MonkeysEnvironmentContext).imageResolver;\n}\n","import type { ReactNode } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...parts: Array<string | false | null | undefined>) {\n  return twMerge(parts.filter(Boolean).join(' '));\n}\n\nexport function hasRenderableNode(node: ReactNode) {\n  return node !== undefined && node !== null && typeof node !== 'boolean';\n}\n\nexport function hasNonEmptyRenderableNode(node: ReactNode) {\n  if (typeof node === 'string') return node.trim().length > 0;\n  return hasRenderableNode(node);\n}\n","export type OverlaySurfaceRole = 'menu' | 'dialog';\n\nconst overlaySurfaceRoleClassNames: Record<OverlaySurfaceRole, string> = {\n  // Keep the public utilities in the built stylesheet and tailwind-merge graph.\n  menu: 'monkeys-overlay-surface--menu bg-menu-surface text-popover-foreground',\n  dialog: 'monkeys-overlay-surface--dialog bg-dialog-surface text-foreground',\n};\n\nexport function getOverlaySurfaceClassName(\n  role: OverlaySurfaceRole,\n  options: { rounded?: boolean } = {},\n) {\n  return [\n    'monkeys-overlay-surface',\n    overlaySurfaceRoleClassNames[role],\n    options.rounded === false ? undefined : 'monkeys-overlay-surface--rounded',\n  ]\n    .filter(Boolean)\n    .join(' ');\n}\n","import {\n  Fragment,\n  useEffect,\n  useRef,\n  useState,\n  type CSSProperties,\n  type ReactNode,\n  type SyntheticEvent,\n} from \"react\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { BaseButton, BaseTooltip, type BaseAppearance } from \"../base\";\nimport { useMonkeysComponentAttributes } from \"../../provider/context\";\nimport { getOverlaySurfaceClassName } from \"../primitives/internal/overlaySurface\";\nexport { AppShellSidebar } from \"./AppShellSidebar\";\nexport type {\n  AppShellSidebarClassNames,\n  AppShellSidebarProps,\n} from \"./AppShellSidebar\";\nexport { UserAccountMenu } from \"./UserAccountMenu\";\nexport type {\n  UserAccountMenuClassNames,\n  UserAccountMenuItem,\n  UserAccountMenuProps,\n  UserAccountMenuRadius,\n  UserAccountMenuSelectorConfig,\n  UserAccountMenuSelectorOption,\n  UserAccountMenuSide,\n  UserAccountMenuTriggerVariant,\n  UserAccountMenuUser,\n} from \"./UserAccountMenu\";\n\n// ============================================================\n// cn utility (inline clsx + tailwind-merge–lite for zero deps)\n// ============================================================\nexport function cn(...inputs: (string | undefined | null | false)[]): string {\n  return inputs.filter(Boolean).join(\" \");\n}\n\n// ============================================================\n// NavButton\n// ============================================================\nexport interface NavButtonProps {\n  /** 是否处于激活状态 */\n  active?: boolean;\n  /** 是否显示但禁止交互 */\n  disabled?: boolean;\n  /** 左侧图标 */\n  icon?: ReactNode;\n  /** 右侧附加内容（如 chevron） */\n  postfix?: ReactNode;\n  /** 点击回调 */\n  onClick?: () => void;\n  className?: string;\n  children: ReactNode;\n}\n\nexport function NavButton({\n  active,\n  disabled,\n  icon,\n  postfix,\n  onClick,\n  className,\n  children,\n}: NavButtonProps) {\n  return (\n    <button\n      type=\"button\"\n      aria-disabled={disabled}\n      aria-pressed={active}\n      disabled={disabled}\n      className={cn(\n        \"flex w-full cursor-pointer select-none items-center gap-2 rounded-xl border p-2 text-left text-xs text-[hsl(var(--foreground))] transition-colors\",\n        active\n          ? \"border-[hsl(var(--input))] bg-[hsl(var(--muted))] font-bold\"\n          : disabled\n            ? \"border-transparent\"\n            : \"border-transparent hover:border-[hsl(var(--input))]/60 hover:bg-[hsl(var(--muted))]/60\",\n        disabled && \"!cursor-not-allowed opacity-60\",\n        className,\n      )}\n      onClick={onClick}\n    >\n      <div className=\"w-[20px] [&_svg]:h-[16px] [&_svg]:w-[16px]\">{icon}</div>\n      <span className=\"text-sm\">{children}</span>\n      {postfix}\n    </button>\n  );\n}\n\n// ============================================================\n// AppHeader\n// ============================================================\nexport interface HeaderTab {\n  id: string;\n  label: string;\n}\n\nexport interface AppHeaderLogo {\n  /** Logo 图片 URL，若为空则显示 fallback */\n  url?: string;\n  /** 品牌名称 */\n  title: string;\n  /** 点击 Logo 回调 */\n  onClick?: () => void;\n}\n\nexport interface AppHeaderUser {\n  name?: string;\n  email?: string;\n  photo?: string;\n}\n\nexport interface AppHeaderProps {\n  /** 品牌 Logo */\n  logo: AppHeaderLogo;\n  /** 导航 tabs */\n  tabs?: HeaderTab[];\n  /** 当前激活的 tab id */\n  activeTab?: string;\n  /** tab 切换回调 */\n  onTabChange?: (tabId: string) => void;\n  /** 用户信息 */\n  user?: AppHeaderUser;\n  /** 退出登录回调 */\n  onLogout?: () => void;\n  /** 退出登录文案 */\n  logoutLabel?: string;\n  /** 用户菜单中的额外菜单项（在退出登录按钮之前渲染） */\n  userMenuItems?: ReactNode;\n  /** header 右侧额外内容 */\n  extra?: ReactNode;\n  className?: string;\n}\n\nexport function AppHeader({\n  logo,\n  tabs,\n  activeTab,\n  onTabChange,\n  user,\n  onLogout,\n  logoutLabel = \"退出登录\",\n  userMenuItems,\n  extra,\n  className,\n}: AppHeaderProps) {\n  const getUserInitials = (name: string) =>\n    name\n      .split(\" \")\n      .map((n) => n[0])\n      .join(\"\")\n      .toUpperCase()\n      .slice(0, 2);\n\n  return (\n    <header\n      className={cn(\n        \"flex h-[72px] w-full shrink-0 items-center justify-between gap-4 rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] p-[var(--global-spacing,0.75rem)]\",\n        className,\n      )}\n    >\n      {/* Logo */}\n      <div\n        className=\"flex shrink-0 cursor-pointer items-center gap-2\"\n        onClick={logo.onClick}\n      >\n        <div\n          className={cn(\n            \"flex h-8 w-8 items-center justify-center rounded-lg overflow-hidden\",\n            logo.url\n              ? \"bg-transparent\"\n              : \"bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))]\",\n          )}\n        >\n          {logo.url ? (\n            <img\n              src={logo.url}\n              alt={logo.title}\n              className=\"h-full w-full object-contain\"\n            />\n          ) : (\n            <span className=\"text-sm font-bold\">{logo.title.charAt(0)}</span>\n          )}\n        </div>\n        <span className=\"text-lg font-semibold whitespace-nowrap\">\n          {logo.title}\n        </span>\n      </div>\n\n      {/* Separator + Tabs */}\n      {tabs && tabs.length > 0 && (\n        <>\n          <div className=\"h-1/2 w-px bg-[hsl(var(--border))]\" />\n          <div className=\"flex flex-1 items-center\">\n            <div className=\"inline-flex h-9 items-center gap-1 rounded-md bg-transparent p-1\">\n              {tabs.map((tab) => (\n                <button\n                  key={tab.id}\n                  className={cn(\n                    \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all\",\n                    tab.id === activeTab\n                      ? \"bg-[hsl(var(--muted))] text-[hsl(var(--foreground))] shadow-sm\"\n                      : \"text-[hsl(var(--muted-foreground))] hover:bg-[hsl(var(--muted))]/50\",\n                  )}\n                  onClick={() => onTabChange?.(tab.id)}\n                >\n                  {tab.label}\n                </button>\n              ))}\n            </div>\n          </div>\n        </>\n      )}\n      {(!tabs || tabs.length === 0) && <div className=\"flex-1\" />}\n\n      {/* Right side */}\n      <div className=\"flex shrink-0 items-center gap-4\">\n        {extra}\n        {user && (\n          <DropdownMenu.Root>\n            <DropdownMenu.Trigger asChild>\n              <button className=\"flex h-8 w-8 items-center justify-center rounded-full hover:ring-2 hover:ring-[hsl(var(--ring))]/20 transition-all overflow-hidden focus-visible:outline-none\">\n                {user.photo ? (\n                  <img\n                    src={user.photo}\n                    alt={user.name}\n                    className=\"h-8 w-8 rounded-full object-cover\"\n                  />\n                ) : (\n                  <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-[hsl(var(--muted))] text-xs font-medium\">\n                    {user.name ? getUserInitials(user.name) : \"U\"}\n                  </div>\n                )}\n              </button>\n            </DropdownMenu.Trigger>\n            <DropdownMenu.Portal>\n              <DropdownMenu.Content\n                className=\"z-50 w-52 rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n                sideOffset={5}\n                align=\"end\"\n              >\n                {/* User info label */}\n                <DropdownMenu.Label className=\"flex items-center gap-2 px-2 py-1.5 font-normal\">\n                  {user.photo ? (\n                    <img\n                      src={user.photo}\n                      alt={user.name}\n                      className=\"h-8 w-8 rounded-full object-cover\"\n                    />\n                  ) : (\n                    <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-[hsl(var(--muted))] text-xs font-medium\">\n                      {user.name ? getUserInitials(user.name) : \"U\"}\n                    </div>\n                  )}\n                  <div className=\"flex flex-col\">\n                    <span className=\"text-sm font-medium leading-none\">\n                      {user.name}\n                    </span>\n                    {user.email && (\n                      <span className=\"text-xs text-[hsl(var(--muted-foreground))] leading-none mt-1\">\n                        {user.email}\n                      </span>\n                    )}\n                  </div>\n                </DropdownMenu.Label>\n\n                <DropdownMenu.Separator className=\"h-px bg-[hsl(var(--border))] my-1\" />\n\n                <DropdownMenu.Group>\n                  {userMenuItems}\n\n                  {/* Logout */}\n                  <DropdownMenu.Item\n                    className=\"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-[hsl(var(--destructive))] outline-none transition-colors hover:bg-[hsl(var(--accent))]\"\n                    onSelect={() => onLogout?.()}\n                  >\n                    <svg\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                      width=\"16\"\n                      height=\"16\"\n                      viewBox=\"0 0 24 24\"\n                      fill=\"none\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1.5\"\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                    >\n                      <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n                      <polyline points=\"16 17 21 12 16 7\" />\n                      <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n                    </svg>\n                    {logoutLabel}\n                  </DropdownMenu.Item>\n                </DropdownMenu.Group>\n              </DropdownMenu.Content>\n            </DropdownMenu.Portal>\n          </DropdownMenu.Root>\n        )}\n      </div>\n    </header>\n  );\n}\n\n// ============================================================\n// AppSidebar\n// ============================================================\nexport interface SidebarNavItem {\n  id: string;\n  label: string;\n  icon?: ReactNode;\n  disabled?: boolean;\n  /** 如果有 children 则为分组，点击展开/折叠 */\n  children?: SidebarNavItem[];\n}\n\nexport interface SidebarAccount {\n  name?: string;\n  photo?: string;\n}\n\nexport interface AppSidebarProps {\n  /** Logo */\n  logo?: AppHeaderLogo;\n  /** 导航菜单 */\n  navItems: SidebarNavItem[];\n  /** 当前路径/激活的 item id */\n  activeItemId?: string;\n  /** 点击导航项回调 */\n  onNavigate?: (itemId: string) => void;\n  /** 账户信息 */\n  account?: SidebarAccount;\n  /** 退出登录回调 */\n  onLogout?: () => void;\n  /** 退出登录文案 */\n  logoutLabel?: string;\n  /** 底部额外内容（如版本号） */\n  footer?: ReactNode;\n  /** 默认展开的分组 id 列表 */\n  defaultExpandedGroups?: string[];\n  className?: string;\n}\n\nexport function AppSidebar({\n  logo,\n  navItems,\n  activeItemId,\n  onNavigate,\n  account,\n  onLogout,\n  logoutLabel = \"退出登录\",\n  footer,\n  defaultExpandedGroups,\n  className,\n}: AppSidebarProps) {\n  return (\n    <div\n      className={cn(\n        \"flex w-[13.7rem] shrink-0 flex-col justify-between gap-[var(--global-spacing,0.75rem)] overflow-y-hidden rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] p-5\",\n        className,\n      )}\n    >\n      {/* Logo */}\n      {logo && (\n        <div\n          className=\"flex shrink-0 cursor-pointer items-center gap-2\"\n          onClick={logo.onClick}\n        >\n          <div\n            className={cn(\n              \"flex h-8 w-8 items-center justify-center rounded-lg overflow-hidden\",\n              logo.url\n                ? \"bg-transparent\"\n                : \"bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))]\",\n            )}\n          >\n            {logo.url ? (\n              <img\n                src={logo.url}\n                alt={logo.title}\n                className=\"h-full w-full object-contain\"\n              />\n            ) : (\n              <span className=\"text-sm font-bold\">{logo.title.charAt(0)}</span>\n            )}\n          </div>\n          <span className=\"text-lg font-semibold whitespace-nowrap\">\n            {logo.title}\n          </span>\n        </div>\n      )}\n\n      {/* Navigation */}\n      <SidebarNavList\n        items={navItems}\n        activeItemId={activeItemId}\n        onNavigate={onNavigate}\n        defaultExpandedGroups={defaultExpandedGroups}\n      />\n\n      {/* Account Section */}\n      {(account || footer) && (\n        <div className=\"flex flex-col gap-2\">\n          {account && (\n            <div className=\"flex w-full flex-col gap-2 rounded-lg bg-[hsl(var(--muted))] p-2 shadow-sm\">\n              <div className=\"flex w-full items-center justify-between px-3 py-1\">\n                <div className=\"flex items-center gap-2\">\n                  {account.photo ? (\n                    <img\n                      src={account.photo}\n                      alt={account.name}\n                      className=\"h-5 w-5 rounded-full object-cover\"\n                    />\n                  ) : (\n                    <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-[hsl(var(--muted))] text-[10px] font-medium\">\n                      {account.name\n                        ? account.name.charAt(0).toUpperCase()\n                        : \"U\"}\n                    </div>\n                  )}\n                  <span className=\"text-xs font-medium truncate max-w-[100px]\">\n                    {account.name}\n                  </span>\n                </div>\n                {onLogout && (\n                  <button\n                    onClick={onLogout}\n                    className=\"flex items-center justify-center text-[hsl(var(--destructive))] hover:opacity-80 transition-opacity\"\n                    title={logoutLabel}\n                  >\n                    <svg\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                      width=\"16\"\n                      height=\"16\"\n                      viewBox=\"0 0 24 24\"\n                      fill=\"none\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1.5\"\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                    >\n                      <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n                      <polyline points=\"16 17 21 12 16 7\" />\n                      <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n                    </svg>\n                  </button>\n                )}\n              </div>\n            </div>\n          )}\n          {footer}\n        </div>\n      )}\n    </div>\n  );\n}\n\n// ============================================================\n// SidebarNavList (internal accordion-style nav)\n// ============================================================\ninterface SidebarNavListProps {\n  items: SidebarNavItem[];\n  activeItemId?: string;\n  onNavigate?: (itemId: string) => void;\n  defaultExpandedGroups?: string[];\n}\n\nfunction SidebarNavList({\n  items,\n  activeItemId,\n  onNavigate,\n  defaultExpandedGroups,\n}: SidebarNavListProps) {\n  const [expanded, setExpanded] = useState<Record<string, boolean>>(() => {\n    const map: Record<string, boolean> = {};\n    (defaultExpandedGroups ?? items.map((i) => i.id)).forEach((id) => {\n      map[id] = true;\n    });\n    return map;\n  });\n  const [localActiveItemId, setLocalActiveItemId] = useState<\n    string | undefined\n  >(activeItemId);\n\n  useEffect(() => {\n    if (activeItemId !== undefined) {\n      setLocalActiveItemId(activeItemId);\n    }\n  }, [activeItemId]);\n\n  const toggle = (id: string) => {\n    setExpanded((prev: Record<string, boolean>) => ({\n      ...prev,\n      [id]: !prev[id],\n    }));\n  };\n  const resolvedActiveItemId = activeItemId ?? localActiveItemId;\n\n  return (\n    <div\n      className=\"h-full flex-1 overflow-y-auto\"\n      style={{ scrollbarWidth: \"none\", msOverflowStyle: \"none\" }}\n    >\n      <style>{`.monkeys-sidebar-nav::-webkit-scrollbar { display: none; }`}</style>\n      <div className=\"monkeys-sidebar-nav flex w-full flex-col gap-2 text-xs text-[hsl(var(--foreground))]\">\n        {items.map((item) => {\n          if (item.children && item.children.length > 0) {\n            const isExpanded = expanded[item.id] ?? true;\n            return (\n              <div key={item.id}>\n                <NavButton\n                  active={item.id === resolvedActiveItemId}\n                  disabled={item.disabled}\n                  icon={item.icon}\n                  onClick={() => toggle(item.id)}\n                  postfix={\n                    <div className=\"flex flex-1 justify-end\">\n                      <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        width=\"16\"\n                        height=\"16\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                        className=\"shrink-0 text-[hsl(var(--foreground))] transition-transform duration-200\"\n                        style={{\n                          transform: isExpanded\n                            ? \"rotate(90deg)\"\n                            : \"rotate(0deg)\",\n                        }}\n                      >\n                        <path d=\"m9 18 6-6-6-6\" />\n                      </svg>\n                    </div>\n                  }\n                >\n                  {item.label}\n                </NavButton>\n                {isExpanded && !item.disabled && (\n                  <div className=\"flex flex-col gap-1 mt-1\">\n                    {item.children.map((child) => (\n                      <NavButton\n                        key={child.id}\n                        active={child.id === resolvedActiveItemId}\n                        disabled={child.disabled}\n                        onClick={() => {\n                          setLocalActiveItemId(child.id);\n                          onNavigate?.(child.id);\n                        }}\n                      >\n                        {child.label}\n                      </NavButton>\n                    ))}\n                  </div>\n                )}\n              </div>\n            );\n          }\n          return (\n            <NavButton\n              key={item.id}\n              icon={item.icon}\n              active={item.id === resolvedActiveItemId}\n              disabled={item.disabled}\n              onClick={() => {\n                setLocalActiveItemId(item.id);\n                onNavigate?.(item.id);\n              }}\n            >\n              {item.label}\n            </NavButton>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\n// ============================================================\n// AppLayout\n// ============================================================\nexport interface AppLayoutProps {\n  /** header 组件 */\n  header?: ReactNode;\n  /** sidebar 组件 */\n  sidebar?: ReactNode;\n  /** 主内容 */\n  children: ReactNode;\n  /** 是否 flush 布局（无内边距） */\n  flush?: boolean;\n  className?: string;\n}\n\nexport function AppLayout({\n  header,\n  sidebar,\n  children,\n  flush = false,\n  className,\n}: AppLayoutProps) {\n  return (\n    <div\n      className={cn(\n        \"flex h-screen flex-col gap-[var(--global-spacing,0.75rem)] overflow-hidden p-[var(--global-spacing,0.75rem)]\",\n        className,\n      )}\n      style={{ backgroundColor: \"hsl(var(--muted))\" }}\n    >\n      {header ? header : null}\n      <div className=\"flex flex-1 gap-[var(--global-spacing,0.75rem)] overflow-hidden min-h-0\">\n        {sidebar ? sidebar : null}\n        <main\n          className={cn(\n            \"flex-1 min-h-0 overflow-hidden rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))]\",\n            !flush && \"overflow-y-auto\",\n          )}\n        >\n          {flush ? (\n            children\n          ) : (\n            <div className=\"h-full overflow-y-auto\">{children}</div>\n          )}\n        </main>\n      </div>\n    </div>\n  );\n}\n\n// ============================================================\n// NavigationLayout\n// ============================================================\nexport type NavigationMode = \"sidebar\" | \"headbar\";\nexport type HeadbarLayoutMode = \"boxed\" | \"full-bleed\";\nexport type HeadbarMenuRadius =\n  \"default\" | \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\nexport type HeadbarNavPosition = \"left\" | \"center\" | \"right\";\nexport type HeadbarSurface = \"card\" | \"glassy\" | \"ghost\";\n\nexport interface LayoutNavItem {\n  id: string;\n  label: ReactNode;\n  headbarLabel?: ReactNode;\n  icon?: ReactNode;\n  children?: LayoutNavItem[];\n  disabled?: boolean;\n  trailing?: ReactNode;\n  headbarSecondaryAction?: ReactNode;\n}\n\ninterface NavigationLayoutAction {\n  id: string;\n  label: ReactNode;\n  title?: string;\n  icon?: ReactNode;\n  onClick?: () => void;\n}\n\nexport interface HeadbarLayout {\n  brandTitle?: ReactNode;\n  heightPx?: number;\n  layoutMode?: HeadbarLayoutMode;\n  menuRadius?: HeadbarMenuRadius;\n  navPosition?: HeadbarNavPosition;\n  surface?: HeadbarSurface;\n}\n\nexport interface NavigationLayoutProps {\n  activeItemId?: string;\n  activeRootId?: string;\n  allowModeSwitch?: boolean;\n  accountMenu?: ReactNode;\n  children: ReactNode;\n  className?: string;\n  collapsedSidebarAccountMenu?: ReactNode;\n  collapsedSidebarWidth?: string;\n  contextualSidebar?: boolean;\n  contextualSidebarHeader?: ReactNode;\n  contextualSidebarWidth?: string;\n  defaultMode?: NavigationMode;\n  defaultSidebarCollapsed?: boolean;\n  expandedSidebarWidth?: string;\n  expandSidebarLabel?: string;\n  flush?: boolean;\n  headbarActions?: ReactNode;\n  headbarLayout?: HeadbarLayout;\n  logo?: AppHeaderLogo;\n  mode?: NavigationMode;\n  navItems: LayoutNavItem[];\n  onModeChange?: (mode: NavigationMode) => void;\n  onNavigate?: (itemId: string) => void;\n  onSidebarCollapsedChange?: (collapsed: boolean) => void;\n  renderHeadbarExtra?: ReactNode;\n  collapseSidebarLabel?: string;\n  sidebarCollapsed?: boolean;\n  sidebarAccountMenu?: ReactNode;\n  sidebarFooter?: ReactNode;\n  sidebarHeader?: ReactNode;\n  switchToHeadbarLabel?: string;\n  switchToSidebarLabel?: string;\n}\n\nconst NAVIGATION_LAYOUT_SIDEBAR_EXPANDED_WIDTH = \"13.7rem\";\nconst NAVIGATION_LAYOUT_SIDEBAR_COLLAPSED_WIDTH = \"4.25rem\";\nconst NAVIGATION_LAYOUT_CONTEXTUAL_SIDEBAR_WIDTH = \"15rem\";\nconst NAVIGATION_LAYOUT_TRANSITION_TIMING = \"cubic-bezier(0.22, 1, 0.36, 1)\";\nconst NAVIGATION_LAYOUT_HEADBAR_DEFAULT_HEIGHT_PX = 72;\nconst NAVIGATION_LAYOUT_HEADBAR_MIN_HEIGHT_PX = 56;\nconst NAVIGATION_LAYOUT_HEADBAR_MAX_HEIGHT_PX = 120;\nconst NAVIGATION_LAYOUT_HEADBAR_COMPACT_HEIGHT_THRESHOLD_PX = 64;\nconst NAVIGATION_LAYOUT_HEADBAR_BOXED_VERTICAL_PADDING_PX = 12;\nconst NAVIGATION_LAYOUT_HEADBAR_COMPACT_VERTICAL_PADDING_PX = 8;\nconst NAVIGATION_LAYOUT_HEADBAR_LOGO_DEFAULT_SIZE_PX = 44;\nconst NAVIGATION_LAYOUT_HEADBAR_LOGO_COMPACT_SIZE_PX = 36;\nconst NAVIGATION_LAYOUT_DEFAULT_APPEARANCE: BaseAppearance = {\n  preset: \"soft\",\n  density: \"compact\",\n  radius: \"lg\",\n  border: \"subtle\",\n  background: \"soft\",\n};\n\nconst NAVIGATION_LAYOUT_MENU_RADIUS_CLASS_MAP: Record<\n  Exclude<HeadbarMenuRadius, \"default\">,\n  { all: string; left: string; right: string }\n> = {\n  none: { all: \"rounded-none\", left: \"!rounded-none\", right: \"!rounded-none\" },\n  sm: {\n    all: \"rounded-sm\",\n    left: \"!rounded-l-sm !rounded-r-none\",\n    right: \"!rounded-l-none !rounded-r-sm\",\n  },\n  md: {\n    all: \"rounded-md\",\n    left: \"!rounded-l-md !rounded-r-none\",\n    right: \"!rounded-l-none !rounded-r-md\",\n  },\n  lg: {\n    all: \"rounded-lg\",\n    left: \"!rounded-l-lg !rounded-r-none\",\n    right: \"!rounded-l-none !rounded-r-lg\",\n  },\n  xl: {\n    all: \"rounded-xl\",\n    left: \"!rounded-l-xl !rounded-r-none\",\n    right: \"!rounded-l-none !rounded-r-xl\",\n  },\n  full: {\n    all: \"rounded-full\",\n    left: \"!rounded-l-full !rounded-r-none\",\n    right: \"!rounded-l-none !rounded-r-full\",\n  },\n};\n\nfunction clampHeadbarHeight(value?: number) {\n  if (typeof value !== \"number\" || !Number.isFinite(value))\n    return NAVIGATION_LAYOUT_HEADBAR_DEFAULT_HEIGHT_PX;\n  return Math.min(\n    NAVIGATION_LAYOUT_HEADBAR_MAX_HEIGHT_PX,\n    Math.max(NAVIGATION_LAYOUT_HEADBAR_MIN_HEIGHT_PX, Math.round(value)),\n  );\n}\n\nfunction getHeadbarVerticalPaddingPx(heightPx: number) {\n  return heightPx <= NAVIGATION_LAYOUT_HEADBAR_COMPACT_HEIGHT_THRESHOLD_PX\n    ? NAVIGATION_LAYOUT_HEADBAR_COMPACT_VERTICAL_PADDING_PX\n    : NAVIGATION_LAYOUT_HEADBAR_BOXED_VERTICAL_PADDING_PX;\n}\n\nfunction getHeadbarLogoSizePx(heightPx: number) {\n  return heightPx <= NAVIGATION_LAYOUT_HEADBAR_COMPACT_HEIGHT_THRESHOLD_PX\n    ? NAVIGATION_LAYOUT_HEADBAR_LOGO_COMPACT_SIZE_PX\n    : NAVIGATION_LAYOUT_HEADBAR_LOGO_DEFAULT_SIZE_PX;\n}\n\nfunction getHeadbarMenuRadiusClass(\n  menuRadius: HeadbarMenuRadius = \"default\",\n  part: \"all\" | \"left\" | \"right\" = \"all\",\n) {\n  if (menuRadius === \"default\") {\n    if (part === \"left\") return \"rounded-l-lg rounded-r-none\";\n    if (part === \"right\") return \"rounded-l-none rounded-r-lg\";\n    return \"rounded-lg\";\n  }\n  return NAVIGATION_LAYOUT_MENU_RADIUS_CLASS_MAP[menuRadius][part];\n}\n\nfunction getHeadbarFrameClass(\n  layoutMode: HeadbarLayoutMode = \"boxed\",\n  navPosition: HeadbarNavPosition = \"center\",\n) {\n  const columns =\n    navPosition === \"center\"\n      ? \"grid-cols-[minmax(max-content,1fr)_minmax(0,max-content)_minmax(max-content,1fr)]\"\n      : \"grid-cols-[max-content_minmax(0,1fr)_max-content]\";\n  return layoutMode === \"full-bleed\"\n    ? cn(\n        \"sticky top-0 z-40 grid w-full shrink-0 items-center gap-4 rounded-none border-b border-x-0 border-t-0 border-[hsl(var(--input))] bg-[hsl(var(--background))] p-[var(--global-spacing,0.75rem)]\",\n        columns,\n      )\n    : cn(\n        \"sticky top-0 z-40 grid w-full shrink-0 items-center gap-4 rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] p-[var(--global-spacing,0.75rem)]\",\n        columns,\n      );\n}\n\nfunction getHeadbarFrameStyle(\n  layoutMode: HeadbarLayoutMode = \"boxed\",\n  heightPx: number,\n  surface: HeadbarSurface = \"card\",\n): CSSProperties {\n  const verticalPaddingPx = getHeadbarVerticalPaddingPx(heightPx);\n  const fallbackBackground = \"hsl(var(--background))\";\n  const style: CSSProperties = {\n    height: `var(--monkeys-component-navigation-headbar-height, ${heightPx}px)`,\n    minHeight: `var(--monkeys-component-navigation-headbar-height, ${heightPx}px)`,\n    paddingTop: `${verticalPaddingPx}px`,\n    paddingBottom: `${verticalPaddingPx}px`,\n    background: `var(--monkeys-component-navigation-headbar-frame-background, ${fallbackBackground})`,\n    color:\n      \"var(--monkeys-component-navigation-headbar-frame-foreground, hsl(var(--foreground)))\",\n    borderColor:\n      surface === \"glassy\"\n        ? \"var(--monkeys-component-navigation-headbar-frame-border-color, rgb(255 255 255 / 0.5))\"\n        : \"var(--monkeys-component-navigation-headbar-frame-border-color, hsl(var(--input)))\",\n    borderRadius:\n      layoutMode === \"full-bleed\"\n        ? \"0\"\n        : \"var(--monkeys-component-navigation-headbar-frame-radius, var(--radius, 0.75rem))\",\n    boxShadow:\n      surface === \"glassy\"\n        ? \"var(--monkeys-component-navigation-headbar-frame-shadow, inset 0 0 0 0 rgb(0 0 0 / 0.1))\"\n        : \"var(--monkeys-component-navigation-headbar-frame-shadow, none)\",\n    backdropFilter: `blur(var(--monkeys-component-navigation-headbar-frame-backdrop-blur, ${surface === \"glassy\" ? \"45px\" : \"0px\"}))`,\n  };\n\n  if (layoutMode === \"full-bleed\") {\n    style.marginLeft = \"calc(var(--global-spacing,0.75rem) * -1)\";\n    style.marginRight = \"calc(var(--global-spacing,0.75rem) * -1)\";\n    style.marginTop = \"calc(var(--global-spacing,0.75rem) * -1)\";\n    style.width = \"calc(100% + (var(--global-spacing,0.75rem) * 2))\";\n  }\n\n  return style;\n}\n\nfunction getHeadbarNavClass(navPosition: HeadbarNavPosition = \"center\") {\n  if (navPosition === \"left\") return \"justify-start\";\n  if (navPosition === \"right\") return \"justify-end\";\n  return \"justify-center\";\n}\n\nfunction getHeadbarItemStyle(\n  active: boolean,\n  useTokenRadius = true,\n): CSSProperties {\n  return {\n    height: \"var(--monkeys-component-navigation-headbar-item-height, 2.25rem)\",\n    borderRadius: useTokenRadius\n      ? \"var(--monkeys-component-navigation-headbar-item-radius, var(--radius, 0.5rem))\"\n      : undefined,\n    paddingInline:\n      \"var(--monkeys-component-navigation-headbar-item-padding-inline, 0.75rem)\",\n    columnGap: \"var(--monkeys-component-navigation-headbar-item-gap, 0.375rem)\",\n    color: active\n      ? \"var(--monkeys-component-navigation-headbar-item-active-foreground, hsl(var(--foreground)))\"\n      : \"var(--monkeys-component-navigation-headbar-item-foreground, hsl(var(--muted-foreground)))\",\n    background: active\n      ? \"var(--monkeys-component-navigation-headbar-item-active-background, hsl(var(--muted)))\"\n      : \"transparent\",\n    borderColor: active\n      ? \"var(--monkeys-component-navigation-headbar-item-active-border-color, transparent)\"\n      : \"transparent\",\n    fontSize:\n      \"var(--monkeys-component-navigation-headbar-item-font-size, 0.875rem)\",\n    fontWeight:\n      \"var(--monkeys-component-navigation-headbar-item-font-weight, 500)\",\n  };\n}\n\nfunction getHeadbarCompoundStyle(\n  active: boolean,\n  useTokenRadius = true,\n): CSSProperties {\n  return {\n    ...getHeadbarItemStyle(active, useTokenRadius),\n    paddingInline: undefined,\n    columnGap: undefined,\n  };\n}\n\nfunction findNavigationRootId(\n  items: LayoutNavItem[],\n  activeItemId?: string,\n): string | undefined {\n  for (const item of items) {\n    if (item.id === activeItemId) return item.id;\n    if (containsNavigationItem(item, activeItemId)) return item.id;\n  }\n  return activeItemId;\n}\n\nfunction containsNavigationItem(\n  item: LayoutNavItem,\n  itemId?: string,\n): boolean {\n  if (!itemId) return false;\n  if (item.id === itemId) return true;\n  return item.children?.some((child) => containsNavigationItem(child, itemId)) ?? false;\n}\n\nfunction findActiveNavigationBranch(\n  item: LayoutNavItem,\n  activeItemId?: string,\n): LayoutNavItem | undefined {\n  return item.children?.find((child) => containsNavigationItem(child, activeItemId));\n}\n\nfunction getNavigationActionTitle(action: NavigationLayoutAction) {\n  return (\n    action.title ||\n    (typeof action.label === \"string\" ? action.label : undefined)\n  );\n}\n\nfunction NavigationLayoutActionButtons({\n  actions,\n  compact,\n}: {\n  actions: NavigationLayoutAction[];\n  compact: boolean;\n}) {\n  if (!actions.length) return null;\n\n  if (compact) {\n    return (\n      <div className=\"flex flex-col items-center gap-2\">\n        {actions.map((action) => {\n          const title = getNavigationActionTitle(action);\n          return (\n            <BaseTooltip\n              key={action.id}\n              appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n              content={action.label}\n              placement=\"right\"\n              portal\n            >\n              <BaseButton\n                appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n                tone=\"muted\"\n                iconOnly\n                icon={action.icon}\n                onClick={action.onClick}\n                title={title}\n                ariaLabel={title}\n                className={cn(\n                  \"h-10 w-10 rounded-lg border-transparent text-[hsl(var(--muted-foreground))] shadow-none\",\n                  \"hover:-translate-y-0.5 hover:border-[hsl(var(--input))]/80 hover:bg-[hsl(var(--muted))] hover:text-[hsl(var(--foreground))]\",\n                  \"active:translate-y-0 active:scale-[0.96]\",\n                )}\n              />\n            </BaseTooltip>\n          );\n        })}\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex flex-col gap-2\">\n      {actions.map((action) => (\n        <BaseButton\n          key={action.id}\n          appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n          tone=\"muted\"\n          icon={action.icon}\n          label={<span className=\"truncate\">{action.label}</span>}\n          onClick={action.onClick}\n          title={getNavigationActionTitle(action)}\n          className={cn(\n            \"h-9 w-full justify-start gap-2.5 rounded-lg border-transparent px-3 text-left text-[13px] text-[hsl(var(--muted-foreground))] shadow-none\",\n            \"hover:-translate-y-0.5 hover:border-[hsl(var(--input))]/80 hover:bg-[hsl(var(--muted))]/70 hover:text-[hsl(var(--foreground))]\",\n            \"active:translate-y-0 active:scale-[0.985]\",\n          )}\n        />\n      ))}\n    </div>\n  );\n}\n\nfunction SidebarNavigationList({\n  activeItemId,\n  items,\n  onNavigate,\n  revealRequest,\n}: {\n  activeItemId?: string;\n  items: LayoutNavItem[];\n  onNavigate?: (itemId: string) => void;\n  revealRequest?: { id: string; nonce: number } | null;\n}) {\n  const navRef = useRef<HTMLDivElement | null>(null);\n  const [expandedByRoot, setExpandedByRoot] = useState<Record<string, boolean>>(\n    {},\n  );\n  const canReveal = revealRequest\n    ? items.some((item) => containsNavigationItem(item, revealRequest.id) && !item.disabled)\n    : false;\n\n  const toggleRoot = (id: string) => {\n    setExpandedByRoot((current) => ({\n      ...current,\n      [id]: !current[id],\n    }));\n  };\n\n  useEffect(() => {\n    if (!revealRequest || !canReveal) return;\n    setExpandedByRoot((current) => ({ ...current, [revealRequest.id]: true }));\n\n    const frameId = window.requestAnimationFrame(() => {\n      const targetElement = navRef.current?.querySelector(\n        `[data-navigation-sidebar-item-id=\"${CSS.escape(revealRequest.id)}\"]`,\n      );\n      if (targetElement instanceof HTMLElement) {\n        targetElement.scrollIntoView({\n          behavior: \"auto\",\n          block: \"nearest\",\n          inline: \"nearest\",\n        });\n      }\n    });\n\n    return () => window.cancelAnimationFrame(frameId);\n  }, [canReveal, revealRequest]);\n\n  const renderItems = (navigationItems: LayoutNavItem[], depth = 0): ReactNode =>\n    navigationItems.map((item) => {\n      const isGroup = Boolean(item.children?.length);\n      const containsActiveItem = containsNavigationItem(item, activeItemId);\n      const isExpanded =\n        !item.disabled &&\n        (expandedByRoot[item.id] ?? containsActiveItem);\n\n      return (\n        <div key={item.id} data-navigation-sidebar-item-id={item.id}>\n          <NavButton\n            active={containsActiveItem}\n            className={depth > 0 ? \"pl-3\" : undefined}\n            disabled={item.disabled}\n            icon={item.icon}\n            onClick={() =>\n              isGroup ? toggleRoot(item.id) : onNavigate?.(item.id)\n            }\n            postfix={isGroup ? (\n              <div className=\"flex flex-1 justify-end\">\n                <HeadbarChevronIcon\n                  open={false}\n                  sideways\n                  className=\"text-[hsl(var(--foreground))] transition-transform duration-200\"\n                  style={{ transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\" }}\n                />\n              </div>\n            ) : undefined}\n          >\n            {item.label}\n          </NavButton>\n          {isGroup && isExpanded ? (\n            <div className=\"mt-1 ml-3 flex flex-col gap-1 border-l border-[hsl(var(--input))] pl-2\">\n              {renderItems(item.children ?? [], depth + 1)}\n            </div>\n          ) : null}\n        </div>\n      );\n    });\n\n  return (\n    <div\n      className=\"h-full flex-1 overflow-y-auto\"\n      style={{ scrollbarWidth: \"none\", msOverflowStyle: \"none\" }}\n    >\n      <style>{`.monkeys-navigation-sidebar-nav::-webkit-scrollbar { display: none; }`}</style>\n      <div\n        ref={navRef}\n        className=\"monkeys-navigation-sidebar-nav flex w-full flex-col gap-2 text-xs text-[hsl(var(--foreground))]\"\n      >\n        {renderItems(items)}\n      </div>\n    </div>\n  );\n}\n\nfunction SidebarBrand({\n  collapsed,\n  logo,\n  title,\n}: {\n  collapsed?: boolean;\n  logo?: AppHeaderLogo;\n  title?: ReactNode;\n}) {\n  if (!logo) return null;\n\n  const brandTitle = title ?? logo.title;\n  const logoMark = (\n    <div\n      className={cn(\n        \"flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-lg\",\n        logo.url\n          ? \"bg-transparent\"\n          : \"bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))]\",\n      )}\n    >\n      {logo.url ? (\n        <img\n          src={logo.url}\n          alt={logo.title}\n          className=\"h-full w-full object-contain\"\n        />\n      ) : (\n        <span className=\"text-sm font-bold\">{logo.title.charAt(0)}</span>\n      )}\n    </div>\n  );\n\n  if (collapsed) {\n    return (\n      <BaseTooltip\n        appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n        content={brandTitle}\n        placement=\"right\"\n        portal\n      >\n        <BaseButton\n          appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n          ariaLabel={typeof brandTitle === \"string\" ? brandTitle : logo.title}\n          className=\"h-10 w-10 rounded-lg border-transparent bg-transparent p-0 shadow-none hover:bg-[hsl(var(--muted))]/60\"\n          icon={logoMark}\n          iconOnly\n          onClick={logo.onClick}\n          title={typeof brandTitle === \"string\" ? brandTitle : logo.title}\n          tone=\"muted\"\n        />\n      </BaseTooltip>\n    );\n  }\n\n  return (\n    <BaseButton\n      appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n      ariaLabel={logo.title}\n      className=\"h-auto w-full justify-start gap-3 border-transparent bg-transparent p-0 text-left shadow-none hover:bg-transparent\"\n      classNames={{ icon: \"h-9 w-9\" }}\n      icon={logoMark}\n      label={\n        <span className=\"min-w-0 truncate text-sm font-semibold text-[hsl(var(--foreground))]\">\n          {brandTitle}\n        </span>\n      }\n      onClick={logo.onClick}\n      title={typeof brandTitle === \"string\" ? brandTitle : logo.title}\n      tone=\"muted\"\n    />\n  );\n}\n\nfunction Sidebar({\n  accountMenu,\n  activeItemId,\n  actions = [],\n  collapsed,\n  collapsedAccountMenu,\n  footer,\n  header,\n  items,\n  logo,\n  onCollapsedChange,\n  onNavigate,\n  onRevealRoot,\n  revealRequest,\n  title,\n}: {\n  accountMenu?: ReactNode;\n  activeItemId?: string;\n  actions?: NavigationLayoutAction[];\n  collapsed?: boolean;\n  collapsedAccountMenu?: ReactNode;\n  footer?: ReactNode;\n  header?: ReactNode;\n  items: LayoutNavItem[];\n  logo?: AppHeaderLogo;\n  onCollapsedChange?: (collapsed: boolean) => void;\n  onNavigate?: (itemId: string) => void;\n  onRevealRoot?: (rootId: string) => void;\n  revealRequest?: { id: string; nonce: number } | null;\n  title?: ReactNode;\n}) {\n  if (collapsed) {\n    const activeRootId = findNavigationRootId(items, activeItemId);\n\n    return (\n      <div className=\"flex h-full min-h-0 w-full flex-col rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] p-2 shadow-sm\">\n        <div className=\"mb-3 flex shrink-0 justify-center\">\n          {header ?? <SidebarBrand collapsed logo={logo} title={title} />}\n        </div>\n        <div\n          className=\"flex min-h-0 flex-1 flex-col items-center gap-2 overflow-y-auto pb-3\"\n          style={{ scrollbarWidth: \"none\", msOverflowStyle: \"none\" }}\n        >\n          {items.map((item) => {\n            const isActive = activeRootId === item.id;\n            return (\n              <BaseTooltip\n                key={item.id}\n                appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n                content={item.label}\n                placement=\"right\"\n                portal\n              >\n                <BaseButton\n                  appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n                  tone=\"muted\"\n                  active={isActive}\n                  disabled={item.disabled}\n                  iconOnly\n                  icon={item.icon}\n                  onClick={() => {\n                    if (item.disabled) return;\n                    onRevealRoot?.(item.id);\n                    onCollapsedChange?.(false);\n                    if (item.children?.length) return;\n                    onNavigate?.(item.id);\n                  }}\n                  title={\n                    typeof item.label === \"string\" ? item.label : undefined\n                  }\n                  ariaLabel={\n                    typeof item.label === \"string\" ? item.label : item.id\n                  }\n                  className={cn(\n                    \"h-10 w-10 rounded-lg border text-[hsl(var(--muted-foreground))] shadow-none\",\n                    \"hover:-translate-y-0.5 active:translate-y-0 active:scale-[0.96]\",\n                    isActive\n                      ? \"border-[hsl(var(--input))] bg-[hsl(var(--muted))] text-[hsl(var(--foreground))] shadow-sm\"\n                      : \"border-transparent hover:border-[hsl(var(--input))]/80 hover:bg-[hsl(var(--muted))]/70 hover:text-[hsl(var(--foreground))]\",\n                  )}\n                />\n              </BaseTooltip>\n            );\n          })}\n        </div>\n        <div className=\"-mx-2 mt-2 border-t border-[hsl(var(--input))] bg-[hsl(var(--background))] px-2 pt-2.5 pb-0.5\">\n          <NavigationLayoutActionButtons actions={actions} compact />\n          {collapsedAccountMenu ? (\n            <div className=\"mt-2 flex justify-center border-t border-[hsl(var(--input))] pt-2\">\n              {collapsedAccountMenu}\n            </div>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex h-full min-h-0 w-full flex-col justify-between gap-0 overflow-y-hidden rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] px-5 pt-5 pb-1.5\">\n      <div className=\"mb-4 shrink-0\">\n        {header ?? <SidebarBrand logo={logo} title={title} />}\n      </div>\n      <SidebarNavigationList\n        activeItemId={activeItemId}\n        items={items}\n        onNavigate={onNavigate}\n        revealRequest={revealRequest}\n      />\n      <div className=\"-mx-5 mt-2 border-t border-[hsl(var(--input))] bg-[hsl(var(--background))] px-4 pt-2.5 pb-1\">\n        <NavigationLayoutActionButtons actions={actions} compact={false} />\n        {footer}\n        {accountMenu ? (\n          <div className=\"mt-2 border-t border-[hsl(var(--input))] pt-2\">\n            {accountMenu}\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n}\n\nfunction HeadbarChevronIcon({\n  className,\n  open,\n  sideways = false,\n  style,\n}: {\n  className?: string;\n  open: boolean;\n  sideways?: boolean;\n  style?: CSSProperties;\n}) {\n  return (\n    <svg\n      aria-hidden=\"true\"\n      className={cn(\n        \"h-4 w-4 shrink-0\",\n        !sideways && \"transition-transform duration-200\",\n        !sideways && open && \"rotate-180\",\n        className,\n      )}\n      style={style}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    >\n      <path d={sideways ? \"m9 18 6-6-6-6\" : \"m6 9 6 6 6-6\"} />\n    </svg>\n  );\n}\n\nfunction getHeadbarSummaryTitle(\n  rootLabel: ReactNode,\n  childLabel: ReactNode,\n) {\n  if (typeof rootLabel !== \"string\" || typeof childLabel !== \"string\") {\n    return undefined;\n  }\n\n  const rootText = rootLabel.trim();\n  const childText = childLabel.trim();\n  return rootText && childText ? `${rootText} ${childText}` : undefined;\n}\n\nconst HEADBAR_DROPDOWN_ITEM_CLASS =\n  \"relative flex w-full min-w-0 cursor-pointer select-none items-center gap-2.5 px-3 py-2 text-sm outline-none transition-colors hover:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--accent)))] hover:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--accent-foreground)))] focus:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--accent)))] focus:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--accent-foreground)))] data-[highlighted]:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--accent)))] data-[highlighted]:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--accent-foreground)))]\";\n\nconst HEADBAR_DROPDOWN_CONTENT_STYLE: CSSProperties = {\n  width: \"max-content\",\n  maxWidth: \"min(20rem, var(--radix-dropdown-menu-content-available-width))\",\n  background:\n    \"var(--monkeys-component-navigation-headbar-menu-background, hsl(var(--monkeys-color-menu-surface)))\",\n  borderColor:\n    \"var(--monkeys-component-navigation-headbar-menu-border-color, var(--monkeys-component-overlay-border-color, hsl(var(--monkeys-color-border))))\",\n  color:\n    \"var(--monkeys-component-navigation-headbar-menu-foreground, hsl(var(--monkeys-color-popover-foreground)))\",\n  boxShadow:\n    \"var(--monkeys-component-navigation-headbar-menu-shadow, var(--monkeys-component-overlay-menu-shadow, 0 10px 15px -3px rgb(0 0 0 / 0.1)))\",\n  backdropFilter:\n    \"blur(var(--monkeys-component-navigation-headbar-menu-backdrop-blur, var(--monkeys-component-overlay-backdrop-blur, 0px)))\",\n  WebkitBackdropFilter:\n    \"blur(var(--monkeys-component-navigation-headbar-menu-backdrop-blur, var(--monkeys-component-overlay-backdrop-blur, 0px)))\",\n};\n\nfunction HeadbarDropdownItems({\n  activeItemId,\n  items,\n  menuContentRadiusClass,\n  menuItemRadiusClass,\n  onNavigate,\n  onNavigateComplete,\n  useTokenRadius,\n}: {\n  activeItemId?: string;\n  items: LayoutNavItem[];\n  menuContentRadiusClass: string;\n  menuItemRadiusClass: string;\n  onNavigate?: (itemId: string) => void;\n  onNavigateComplete: () => void;\n  useTokenRadius: boolean;\n}) {\n  const componentAttributes = useMonkeysComponentAttributes();\n\n  return items.map((item) => {\n    const label = (\n      <>\n        {item.icon ? (\n          <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-[hsl(var(--muted-foreground))]\">\n            {item.icon}\n          </span>\n        ) : null}\n        <span\n          className={cn(\n            \"min-w-0 truncate\",\n            Boolean(item.children?.length) && \"flex-1\",\n          )}\n        >\n          {item.headbarLabel ?? item.label}\n        </span>\n      </>\n    );\n\n    if (item.children?.length) {\n      return (\n        <DropdownMenu.Sub key={item.id}>\n          <DropdownMenu.SubTrigger\n            disabled={item.disabled}\n            className={cn(HEADBAR_DROPDOWN_ITEM_CLASS, menuItemRadiusClass)}\n          >\n            {label}\n            <HeadbarChevronIcon open={false} sideways />\n          </DropdownMenu.SubTrigger>\n          <DropdownMenu.Portal>\n            <DropdownMenu.SubContent\n              {...componentAttributes}\n              sideOffset={4}\n              alignOffset={-6}\n              data-monkeys-component=\"navigation-headbar-menu\"\n              data-slot=\"content\"\n              data-surface=\"menu\"\n              className={cn(\n                \"z-50 border p-1.5 animate-in fade-in-0 zoom-in-95\",\n                getOverlaySurfaceClassName(\"menu\"),\n                menuContentRadiusClass,\n              )}\n              style={{\n                ...HEADBAR_DROPDOWN_CONTENT_STYLE,\n                minWidth: \"12rem\",\n              }}\n            >\n              <HeadbarDropdownItems\n                activeItemId={activeItemId}\n                items={item.children}\n                menuContentRadiusClass={menuContentRadiusClass}\n                menuItemRadiusClass={menuItemRadiusClass}\n                onNavigate={onNavigate}\n                onNavigateComplete={onNavigateComplete}\n                useTokenRadius={useTokenRadius}\n              />\n            </DropdownMenu.SubContent>\n          </DropdownMenu.Portal>\n        </DropdownMenu.Sub>\n      );\n    }\n\n    return (\n      <DropdownMenu.Item\n        key={item.id}\n        disabled={item.disabled}\n        className={cn(HEADBAR_DROPDOWN_ITEM_CLASS, menuItemRadiusClass)}\n        style={getHeadbarItemStyle(item.id === activeItemId, useTokenRadius)}\n        onSelect={() => {\n          if (item.disabled) return;\n          onNavigateComplete();\n          onNavigate?.(item.id);\n        }}\n      >\n        {label}\n        {item.trailing}\n      </DropdownMenu.Item>\n    );\n  });\n}\n\nfunction HeadbarNavMenuItem({\n  activeItemId,\n  compound,\n  isActive,\n  item,\n  label,\n  menuButtonRadiusClass,\n  menuContentRadiusClass,\n  menuItemRadiusClass,\n  onNavigate,\n  title,\n  useTokenRadius,\n}: {\n  activeItemId?: string;\n  compound?: boolean;\n  isActive: boolean;\n  item: LayoutNavItem;\n  label: ReactNode;\n  menuButtonRadiusClass: string;\n  menuContentRadiusClass: string;\n  menuItemRadiusClass: string;\n  onNavigate?: (itemId: string) => void;\n  title?: string;\n  useTokenRadius: boolean;\n}) {\n  const [open, setOpen] = useState(false);\n  const componentAttributes = useMonkeysComponentAttributes();\n  const isOpen = !item.disabled && open;\n  const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const wasOpenOnPointerDownRef = useRef(false);\n\n  const clearCloseTimer = () => {\n    if (!closeTimerRef.current) return;\n    clearTimeout(closeTimerRef.current);\n    closeTimerRef.current = null;\n  };\n\n  const openMenu = () => {\n    if (item.disabled) return;\n    clearCloseTimer();\n    setOpen(true);\n  };\n\n  const scheduleCloseMenu = () => {\n    clearCloseTimer();\n    closeTimerRef.current = setTimeout(() => {\n      setOpen(false);\n      closeTimerRef.current = null;\n    }, 120);\n  };\n\n  const navigateToFirstEnabledChild = () => {\n    const firstEnabledChild = item.children?.find((child) => !child.disabled);\n    if (!firstEnabledChild) return false;\n\n    setOpen(false);\n    onNavigate?.(firstEnabledChild.id);\n    return true;\n  };\n\n  useEffect(() => clearCloseTimer, []);\n\n  return (\n    <DropdownMenu.Root\n      modal={false}\n      open={isOpen}\n      onOpenChange={(nextOpen) => setOpen(!item.disabled && nextOpen)}\n    >\n      <DropdownMenu.Trigger asChild>\n        <BaseButton\n          appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n          tone=\"muted\"\n          active={isActive || isOpen}\n          icon={item.icon}\n          endIcon={<HeadbarChevronIcon open={isOpen} />}\n          label={label}\n          title={title}\n          disabled={item.disabled}\n          onClick={() => {\n            const wasOpenOnPointerDown = wasOpenOnPointerDownRef.current;\n            wasOpenOnPointerDownRef.current = false;\n            if (wasOpenOnPointerDown && navigateToFirstEnabledChild()) return;\n            setOpen(true);\n          }}\n          onPointerDown={() => {\n            wasOpenOnPointerDownRef.current = isOpen;\n          }}\n          onPointerCancel={() => {\n            wasOpenOnPointerDownRef.current = false;\n          }}\n          onKeyDown={(event) => {\n            if (\n              !isOpen ||\n              (event.key !== \"Enter\" && event.key !== \" \")\n            )\n              return;\n            if (navigateToFirstEnabledChild()) event.preventDefault();\n          }}\n          onMouseEnter={openMenu}\n          onMouseLeave={scheduleCloseMenu}\n          style={getHeadbarItemStyle(\n            isActive || isOpen,\n            compound ? false : useTokenRadius,\n          )}\n          classNames={{\n            icon: \"text-[inherit] [&_*]:!text-[inherit] [&_svg]:!stroke-current\",\n            label:\n              \"flex min-w-0 items-center text-[inherit] [&_*]:!text-[inherit]\",\n          }}\n          className={cn(\n            \"max-w-[12rem] shrink-0 border shadow-none\",\n            compound && \"!rounded-none !border-0 !bg-transparent\",\n            menuButtonRadiusClass,\n            isActive || isOpen\n              ? \"\"\n              : \"hover:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--muted)))] hover:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--foreground)))]\",\n          )}\n        />\n      </DropdownMenu.Trigger>\n      <DropdownMenu.Portal>\n        <DropdownMenu.Content\n          {...componentAttributes}\n          align=\"start\"\n          sideOffset={5}\n          data-monkeys-component=\"navigation-headbar-menu\"\n          data-slot=\"content\"\n          data-surface=\"menu\"\n          onCloseAutoFocus={(event) => event.preventDefault()}\n          onMouseEnter={openMenu}\n          onMouseLeave={scheduleCloseMenu}\n          className={cn(\n            \"z-50 border p-1.5 animate-in fade-in-0 zoom-in-95\",\n            getOverlaySurfaceClassName(\"menu\"),\n            menuContentRadiusClass,\n          )}\n          style={{\n            ...HEADBAR_DROPDOWN_CONTENT_STYLE,\n            minWidth: \"var(--radix-dropdown-menu-trigger-width)\",\n          }}\n        >\n          <HeadbarDropdownItems\n            activeItemId={activeItemId}\n            items={item.children ?? []}\n            menuContentRadiusClass={menuContentRadiusClass}\n            menuItemRadiusClass={menuItemRadiusClass}\n            onNavigate={onNavigate}\n            onNavigateComplete={() => setOpen(false)}\n            useTokenRadius={useTokenRadius}\n          />\n        </DropdownMenu.Content>\n      </DropdownMenu.Portal>\n    </DropdownMenu.Root>\n  );\n}\n\nfunction blockEvent(event: SyntheticEvent) {\n  event.preventDefault();\n  event.stopPropagation();\n}\n\nexport interface NavigationHeadbarMenuProps {\n  activeItemId?: string;\n  activeRootId?: string;\n  items: LayoutNavItem[];\n  menuRadius?: HeadbarMenuRadius;\n  onNavigate?: (itemId: string) => void;\n}\n\nexport function NavigationHeadbarMenu({\n  activeItemId,\n  activeRootId,\n  items,\n  menuRadius = \"default\",\n  onNavigate,\n}: NavigationHeadbarMenuProps) {\n  const menuButtonRadiusClass = getHeadbarMenuRadiusClass(menuRadius);\n  const menuContentRadiusClass = getHeadbarMenuRadiusClass(menuRadius);\n  const menuItemRadiusClass = getHeadbarMenuRadiusClass(menuRadius);\n  const useTokenRadius = menuRadius === \"default\";\n\n  return (\n    <div className=\"flex w-max min-w-0 shrink-0 items-center gap-1\">\n      {items.map((item) => {\n        const isActive = activeRootId === item.id || activeItemId === item.id;\n        const hasSecondaryAction = Boolean(item.headbarSecondaryAction);\n        const rootLabel = item.headbarLabel ?? item.label;\n        const activeChild = findActiveNavigationBranch(item, activeItemId);\n        const activeChildLabel = activeChild\n          ? (activeChild.headbarLabel ?? activeChild.label)\n          : undefined;\n        const label = activeChild ? (\n          <span\n            data-navigation-headbar-selected-child={activeChild.id}\n            className=\"flex min-w-0 items-center gap-1.5 whitespace-nowrap\"\n          >\n            <span className=\"shrink-0\">{rootLabel}</span>\n            <span className=\"sr-only\">: </span>\n            <span className=\"min-w-0 truncate\">{activeChildLabel}</span>\n          </span>\n        ) : (\n          <span className=\"truncate whitespace-nowrap\">{rootLabel}</span>\n        );\n        const title = activeChild\n          ? getHeadbarSummaryTitle(rootLabel, activeChildLabel)\n          : undefined;\n\n        const primaryAction = item.children?.length ? (\n          <HeadbarNavMenuItem\n            activeItemId={activeItemId}\n            compound={hasSecondaryAction}\n            isActive={isActive}\n            item={item}\n            label={label}\n            menuButtonRadiusClass={menuButtonRadiusClass}\n            menuContentRadiusClass={menuContentRadiusClass}\n            menuItemRadiusClass={menuItemRadiusClass}\n            onNavigate={onNavigate}\n            title={title}\n            useTokenRadius={useTokenRadius}\n          />\n        ) : (\n          <BaseButton\n            appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n            tone=\"muted\"\n            active={isActive}\n            disabled={item.disabled}\n            icon={item.icon}\n            label={\n              <span className=\"flex min-w-0 items-center gap-1.5\">\n                <span className=\"truncate whitespace-nowrap\">{label}</span>\n                {item.trailing}\n              </span>\n            }\n            onClick={() => onNavigate?.(item.id)}\n            style={getHeadbarItemStyle(\n              isActive,\n              hasSecondaryAction ? false : useTokenRadius,\n            )}\n            classNames={{\n              icon: \"text-[inherit] [&_*]:!text-[inherit] [&_svg]:!stroke-current\",\n              label: \"text-[inherit] [&_*]:!text-[inherit]\",\n            }}\n            className={cn(\n              \"max-w-[12rem] shrink-0 border shadow-none\",\n              hasSecondaryAction &&\n                \"!rounded-none !border-0 !bg-transparent\",\n              menuButtonRadiusClass,\n              isActive\n                ? \"\"\n                : \"hover:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--muted)))] hover:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--foreground)))]\",\n            )}\n          />\n        );\n\n        if (!hasSecondaryAction) {\n          return <Fragment key={item.id}>{primaryAction}</Fragment>;\n        }\n\n        return (\n          <div\n            key={item.id}\n            data-navigation-headbar-compound-item={item.id}\n            aria-disabled={item.disabled}\n            className={cn(\n              \"inline-flex min-w-0 shrink-0 items-center gap-0 overflow-hidden border shadow-none\",\n              menuButtonRadiusClass,\n              isActive\n                ? \"\"\n                : \"hover:!bg-[var(--monkeys-component-navigation-headbar-item-hover-background,hsl(var(--muted)))] hover:!text-[var(--monkeys-component-navigation-headbar-item-hover-foreground,hsl(var(--foreground)))]\",\n            )}\n            style={getHeadbarCompoundStyle(isActive, useTokenRadius)}\n          >\n            <span\n              data-navigation-headbar-primary-action=\"\"\n              className=\"inline-flex min-w-0 shrink-0\"\n            >\n              {primaryAction}\n            </span>\n            <span\n              data-navigation-headbar-secondary-action={item.id}\n              {...(item.disabled && {\n                inert: \"\",\n                onClickCapture: blockEvent,\n                onKeyDownCapture: blockEvent,\n                onKeyUpCapture: blockEvent,\n                onPointerDownCapture: blockEvent,\n              })}\n              className={cn(\n                \"inline-flex min-w-0 shrink-0 items-center\",\n                item.disabled && \"!cursor-not-allowed opacity-60\",\n              )}\n            >\n              {item.headbarSecondaryAction}\n            </span>\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n\nexport interface NavigationHeadbarProps {\n  activeItemId?: string;\n  activeRootId?: string;\n  actions?: ReactNode;\n  accountMenu?: ReactNode;\n  className?: string;\n  extra?: ReactNode;\n  layout?: HeadbarLayout;\n  brand?: ReactNode;\n  logo?: AppHeaderLogo;\n  navigation?: ReactNode;\n  navItems?: LayoutNavItem[];\n  onNavigate?: (itemId: string) => void;\n}\n\nexport function NavigationHeadbar({\n  activeItemId,\n  activeRootId,\n  actions,\n  accountMenu,\n  className,\n  extra,\n  layout,\n  brand,\n  logo,\n  navigation,\n  navItems = [],\n  onNavigate,\n}: NavigationHeadbarProps) {\n  const heightPx = clampHeadbarHeight(layout?.heightPx);\n  const layoutMode = layout?.layoutMode ?? \"boxed\";\n  const menuRadius = layout?.menuRadius ?? \"default\";\n  const surface = layout?.surface ?? \"card\";\n  const logoHeightPx = getHeadbarLogoSizePx(heightPx);\n  const frameStyle = getHeadbarFrameStyle(layoutMode, heightPx, surface);\n  const showBrandTitle = Boolean(layout?.brandTitle);\n\n  return (\n    <header\n      className={cn(\n        getHeadbarFrameClass(layoutMode, layout?.navPosition),\n        className,\n      )}\n      data-navigation-headbar=\"\"\n      data-navigation-headbar-surface={surface}\n      style={frameStyle}\n    >\n      <div className=\"flex min-w-0 items-center justify-start\">\n        {brand ??\n          (logo ? (\n            <BaseButton\n              appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n              tone=\"muted\"\n              icon={\n                <div\n                  className={cn(\n                    \"flex items-center justify-center overflow-hidden rounded-lg\",\n                    logo.url\n                      ? \"w-auto max-w-[min(22rem,30vw)] bg-transparent\"\n                      : \"bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))]\",\n                  )}\n                  style={\n                    logo.url\n                      ? { height: logoHeightPx }\n                      : { width: logoHeightPx, height: logoHeightPx }\n                  }\n                >\n                  {logo.url ? (\n                    <img\n                      src={logo.url}\n                      alt={logo.title}\n                      className=\"block h-full w-auto object-contain\"\n                    />\n                  ) : (\n                    <span className=\"text-base font-bold\">\n                      {logo.title.charAt(0)}\n                    </span>\n                  )}\n                </div>\n              }\n              label={\n                showBrandTitle ? (\n                  <span className=\"truncate whitespace-nowrap text-base font-medium text-[hsl(var(--foreground))]\">\n                    {layout?.brandTitle}\n                  </span>\n                ) : null\n              }\n              ariaLabel={logo.title}\n              title={logo.title}\n              className=\"h-auto min-w-0 justify-start border-transparent bg-transparent p-0 shadow-none hover:bg-transparent\"\n              classNames={\n                logo.url ? { icon: \"!h-auto !w-auto shrink-0\" } : undefined\n              }\n              onClick={logo.onClick}\n            />\n          ) : null)}\n      </div>\n\n      <div\n        className={cn(\n          \"flex min-w-0 items-center\",\n          getHeadbarNavClass(layout?.navPosition),\n        )}\n      >\n        <div className=\"no-scrollbar flex max-w-full min-w-0 items-center overflow-x-auto overscroll-x-contain\">\n          {navigation ?? (\n            <NavigationHeadbarMenu\n              activeItemId={activeItemId}\n              activeRootId={activeRootId}\n              items={navItems}\n              menuRadius={menuRadius}\n              onNavigate={onNavigate}\n            />\n          )}\n        </div>\n      </div>\n\n      <div className=\"flex min-w-0 items-center justify-end gap-3\">\n        {actions}\n        {extra}\n        {accountMenu}\n      </div>\n    </header>\n  );\n}\n\nexport function NavigationLayout({\n  activeItemId,\n  activeRootId,\n  allowModeSwitch = false,\n  accountMenu,\n  children,\n  className,\n  collapsedSidebarAccountMenu,\n  collapsedSidebarWidth = NAVIGATION_LAYOUT_SIDEBAR_COLLAPSED_WIDTH,\n  contextualSidebar = false,\n  contextualSidebarHeader,\n  contextualSidebarWidth = NAVIGATION_LAYOUT_CONTEXTUAL_SIDEBAR_WIDTH,\n  defaultMode = \"headbar\",\n  defaultSidebarCollapsed = false,\n  expandedSidebarWidth = NAVIGATION_LAYOUT_SIDEBAR_EXPANDED_WIDTH,\n  expandSidebarLabel = \"Expand sidebar\",\n  flush = false,\n  headbarActions,\n  headbarLayout,\n  logo,\n  mode,\n  navItems,\n  onModeChange,\n  onNavigate,\n  onSidebarCollapsedChange,\n  renderHeadbarExtra,\n  collapseSidebarLabel = \"Collapse sidebar\",\n  sidebarCollapsed: controlledSidebarCollapsed,\n  sidebarAccountMenu,\n  sidebarFooter,\n  sidebarHeader,\n  switchToHeadbarLabel = \"Switch to headbar\",\n  switchToSidebarLabel = \"Switch to sidebar\",\n}: NavigationLayoutProps) {\n  const [uncontrolledMode, setUncontrolledMode] =\n    useState<NavigationMode>(defaultMode);\n  const [uncontrolledSidebarCollapsed, setUncontrolledSidebarCollapsed] =\n    useState(defaultSidebarCollapsed);\n  const [revealRequest, setRevealRequest] = useState<{\n    id: string;\n    nonce: number;\n  } | null>(null);\n  const isModeControlled = mode !== undefined;\n  const isSidebarCollapsedControlled = controlledSidebarCollapsed !== undefined;\n  const navigationMode = isModeControlled ? mode : uncontrolledMode;\n  const sidebarCollapsed = isSidebarCollapsedControlled\n    ? controlledSidebarCollapsed\n    : uncontrolledSidebarCollapsed;\n  const isHeadbarMode = navigationMode === \"headbar\";\n  const sidebarWidth = sidebarCollapsed\n    ? collapsedSidebarWidth\n    : expandedSidebarWidth;\n  const resolvedActiveRootId =\n    activeRootId ?? findNavigationRootId(navItems, activeItemId);\n  const activeRoot = navItems.find((item) => item.id === resolvedActiveRootId);\n  const contextualItems = activeRoot?.children ?? [];\n\n  useEffect(() => {\n    if (!isModeControlled) {\n      setUncontrolledMode(defaultMode);\n    }\n  }, [defaultMode, isModeControlled]);\n\n  useEffect(() => {\n    if (!isSidebarCollapsedControlled) {\n      setUncontrolledSidebarCollapsed(defaultSidebarCollapsed);\n    }\n  }, [defaultSidebarCollapsed, isSidebarCollapsedControlled]);\n\n  const setNavigationMode = (nextMode: NavigationMode) => {\n    if (!isModeControlled) {\n      setUncontrolledMode(nextMode);\n    }\n    onModeChange?.(nextMode);\n  };\n\n  const setCollapsed = (collapsed: boolean) => {\n    if (!isSidebarCollapsedControlled) {\n      setUncontrolledSidebarCollapsed(collapsed);\n    }\n    onSidebarCollapsedChange?.(collapsed);\n  };\n\n  const navigationActions: NavigationLayoutAction[] = [];\n  if (allowModeSwitch) {\n    navigationActions.push({\n      id: \"toggle-headbar\",\n      label: switchToHeadbarLabel,\n      onClick: () => setNavigationMode(\"headbar\"),\n      icon: (\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          className=\"h-[18px] w-[18px] rotate-180\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.8\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        >\n          <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n          <path d=\"M3 9h18\" />\n        </svg>\n      ),\n    });\n  }\n  navigationActions.push({\n    id: \"toggle-sidebar\",\n    label: sidebarCollapsed ? expandSidebarLabel : collapseSidebarLabel,\n    onClick: () => setCollapsed(!sidebarCollapsed),\n    icon: (\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        className=\"h-[18px] w-[18px]\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.8\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      >\n        <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n        <path d=\"M9 3v18\" />\n        <path d={sidebarCollapsed ? \"m14 9 3 3-3 3\" : \"m16 15-3-3 3-3\"} />\n      </svg>\n    ),\n  });\n\n  const sidebar = isHeadbarMode && contextualSidebar && contextualItems.length ? (\n    <aside\n      className=\"relative h-full min-h-0 shrink-0 overflow-hidden\"\n      data-navigation-contextual-sidebar={resolvedActiveRootId}\n      style={{ width: contextualSidebarWidth }}\n    >\n      <div className=\"flex h-full min-h-0 w-full flex-col gap-3 rounded-xl border border-[hsl(var(--input))] bg-[hsl(var(--background))] px-4 py-4\">\n        <div className=\"shrink-0 px-2 text-sm font-semibold text-[hsl(var(--foreground))]\">\n          {contextualSidebarHeader ?? activeRoot?.label}\n        </div>\n        <SidebarNavigationList\n          activeItemId={activeItemId}\n          items={contextualItems}\n          onNavigate={onNavigate}\n        />\n      </div>\n    </aside>\n  ) : isHeadbarMode ? null : (\n    <div\n      className={cn(\n        \"relative h-full min-h-0 shrink-0 transition-[width] duration-260\",\n        sidebarCollapsed ? \"z-20 overflow-visible\" : \"z-10 overflow-hidden\",\n      )}\n      style={{\n        width: sidebarWidth,\n        transitionTimingFunction: NAVIGATION_LAYOUT_TRANSITION_TIMING,\n      }}\n    >\n      <Sidebar\n        accountMenu={sidebarAccountMenu ?? accountMenu}\n        activeItemId={activeItemId}\n        actions={navigationActions}\n        collapsed={sidebarCollapsed}\n        collapsedAccountMenu={collapsedSidebarAccountMenu ?? accountMenu}\n        footer={sidebarFooter}\n        header={sidebarHeader}\n        items={navItems}\n        logo={logo}\n        onCollapsedChange={setCollapsed}\n        onNavigate={onNavigate}\n        onRevealRoot={(rootId) =>\n          setRevealRequest((prev) => ({\n            id: rootId,\n            nonce: (prev?.nonce ?? 0) + 1,\n          }))\n        }\n        revealRequest={revealRequest}\n        title={headbarLayout?.brandTitle}\n      />\n    </div>\n  );\n\n  const header = isHeadbarMode ? (\n    <NavigationHeadbar\n      activeItemId={activeItemId}\n      activeRootId={resolvedActiveRootId}\n      actions={\n        allowModeSwitch ? (\n          <>\n            {headbarActions}\n            <BaseButton\n              appearance={NAVIGATION_LAYOUT_DEFAULT_APPEARANCE}\n              tone=\"muted\"\n              icon={\n                <svg\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  className=\"h-4 w-4 shrink-0\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  strokeWidth=\"1.8\"\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                >\n                  <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n                  <path d=\"M9 3v18\" />\n                  <path d=\"m14 9 3 3-3 3\" />\n                </svg>\n              }\n              label={\n                <span className=\"truncate whitespace-nowrap\">\n                  {switchToSidebarLabel}\n                </span>\n              }\n              onClick={() => setNavigationMode(\"sidebar\")}\n              className={cn(\n                \"h-auto min-w-0 shrink px-3 py-2 text-sm font-medium text-[hsl(var(--muted-foreground))] shadow-none hover:border-[hsl(var(--input))]/70 hover:bg-[hsl(var(--muted))]/60 hover:text-[hsl(var(--foreground))]\",\n                getHeadbarMenuRadiusClass(headbarLayout?.menuRadius),\n              )}\n            />\n          </>\n        ) : (\n          headbarActions\n        )\n      }\n      accountMenu={accountMenu}\n      extra={renderHeadbarExtra}\n      layout={headbarLayout}\n      logo={logo}\n      navItems={navItems}\n      onNavigate={onNavigate}\n    />\n  ) : null;\n\n  return (\n    <AppLayout\n      header={header}\n      sidebar={sidebar}\n      flush={flush}\n      className={className}\n    >\n      {children}\n    </AppLayout>\n  );\n}\n","import {\n  createContext,\n  forwardRef,\n  useContext,\n  useMemo,\n  type HTMLAttributes,\n  type ReactNode,\n} from \"react\";\n\nimport { cn } from \"../layout\";\n\nexport type AgentWorkbenchVariant = \"default\" | \"trend\";\nexport type AgentWorkbenchDensity = \"default\" | \"compact\";\nexport type AgentWorkbenchSurfaceLevel =\n  | \"page\"\n  | \"panel\"\n  | \"elevated\"\n  | \"subtle\"\n  | \"overlay\";\n\nexport interface AgentWorkbenchAppearance {\n  variant: AgentWorkbenchVariant;\n  density: AgentWorkbenchDensity;\n}\n\nexport interface AgentWorkbenchAppearanceOptions {\n  variant?: AgentWorkbenchVariant;\n  density?: AgentWorkbenchDensity;\n}\n\nconst DEFAULT_APPEARANCE: AgentWorkbenchAppearance = {\n  variant: \"default\",\n  density: \"default\",\n};\n\nconst AgentWorkbenchAppearanceContext = createContext(DEFAULT_APPEARANCE);\n\nexport function resolveAgentWorkbenchAppearance(\n  inherited: AgentWorkbenchAppearance,\n  options: AgentWorkbenchAppearanceOptions = {},\n): AgentWorkbenchAppearance {\n  const variant = options.variant ?? inherited.variant;\n  return {\n    variant,\n    density:\n      options.density ??\n      (options.variant === \"trend\" ? \"compact\" : inherited.density),\n  };\n}\n\nexport function useAgentWorkbenchAppearance(\n  options: AgentWorkbenchAppearanceOptions = {},\n): AgentWorkbenchAppearance {\n  return resolveAgentWorkbenchAppearance(\n    useContext(AgentWorkbenchAppearanceContext),\n    options,\n  );\n}\n\nexport interface AgentWorkbenchAppearanceProviderProps\n  extends AgentWorkbenchAppearanceOptions {\n  children: ReactNode;\n}\n\nexport function AgentWorkbenchAppearanceProvider({\n  children,\n  variant,\n  density,\n}: AgentWorkbenchAppearanceProviderProps) {\n  const inherited = useContext(AgentWorkbenchAppearanceContext);\n  const appearance = useMemo(\n    () => resolveAgentWorkbenchAppearance(inherited, { variant, density }),\n    [density, inherited, variant],\n  );\n\n  return (\n    <AgentWorkbenchAppearanceContext.Provider value={appearance}>\n      {children}\n    </AgentWorkbenchAppearanceContext.Provider>\n  );\n}\n\nconst SURFACE_CLASSES: Record<AgentWorkbenchSurfaceLevel, string> = {\n  page: \"bg-background text-foreground\",\n  panel: \"bg-card text-card-foreground\",\n  elevated: \"border border-border bg-popover text-popover-foreground shadow-sm\",\n  subtle: \"bg-muted/40 text-foreground\",\n  overlay: \"border border-border bg-popover text-popover-foreground shadow-lg\",\n};\n\nexport interface AgentWorkbenchSurfaceProps\n  extends HTMLAttributes<HTMLDivElement>,\n    AgentWorkbenchAppearanceOptions {\n  level?: AgentWorkbenchSurfaceLevel;\n}\n\n/** Semantic surface primitive shared by Agent workbench regions and overlays. */\nexport const AgentWorkbenchSurface = forwardRef<\n  HTMLDivElement,\n  AgentWorkbenchSurfaceProps\n>(function AgentWorkbenchSurface(\n  { level = \"panel\", variant, density, className, children, ...props },\n  ref,\n) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n\n  return (\n    <div\n      {...props}\n      ref={ref}\n      data-agent-workbench-surface={level}\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      className={cn(SURFACE_CLASSES[level], className)}\n    >\n      {children}\n    </div>\n  );\n});\n","'use client';\nimport * as React from 'react';\nimport { useImperativeHandle } from 'react';\n\nimport { cn } from '../base/utils';\n\ninterface UseAutosizeTextAreaProps {\n  textAreaRef: HTMLTextAreaElement | null;\n  minHeight?: number;\n  maxHeight?: number;\n  triggerAutoSize: string;\n}\n\nexport const useAutosizeTextArea = ({\n  textAreaRef,\n  triggerAutoSize,\n  maxHeight = Number.MAX_SAFE_INTEGER,\n  minHeight = 0,\n}: UseAutosizeTextAreaProps) => {\n  const [init, setInit] = React.useState(true);\n  React.useEffect(() => {\n    // We need to reset the height momentarily to get the correct scrollHeight for the textarea\n    const offsetBorder = 2;\n    if (textAreaRef) {\n      if (init) {\n        textAreaRef.style.minHeight = `${minHeight + offsetBorder}px`;\n        if (maxHeight > minHeight) {\n          textAreaRef.style.maxHeight = `${maxHeight}px`;\n        }\n        setInit(false);\n      }\n      textAreaRef.style.height = `${minHeight + offsetBorder}px`;\n      const scrollHeight = textAreaRef.scrollHeight;\n      // We then set the height directly, outside the render loop\n      // Trying to set this with state or a ref will product an incorrect value.\n      if (scrollHeight > maxHeight) {\n        textAreaRef.style.height = `${maxHeight}px`;\n      } else {\n        textAreaRef.style.height = `${scrollHeight + offsetBorder}px`;\n      }\n    }\n  }, [textAreaRef, triggerAutoSize]);\n};\n\nexport type AutosizeTextAreaRef = {\n  textArea: HTMLTextAreaElement;\n  maxHeight: number;\n  minHeight: number;\n  focus: () => void;\n};\n\ntype AutosizeTextAreaProps = {\n  maxHeight?: number;\n  minHeight?: number;\n  onSubmit?: (e: React.FormEvent<HTMLTextAreaElement>) => void;\n} & React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const AutosizeTextarea = React.forwardRef<AutosizeTextAreaRef, AutosizeTextAreaProps>(\n  (\n    {\n      maxHeight = Number.MAX_SAFE_INTEGER,\n      minHeight = 52,\n      className,\n      onChange,\n      value,\n      onKeyDown,\n      onSubmit,\n      onCompositionStart: propsOnCompositionStart,\n      onCompositionEnd: propsOnCompositionEnd,\n      ...props\n    }: AutosizeTextAreaProps,\n    ref: React.Ref<AutosizeTextAreaRef>,\n  ) => {\n    const textAreaRef = React.useRef<HTMLTextAreaElement | null>(null);\n    const [triggerAutoSize, setTriggerAutoSize] = React.useState('');\n\n    // IME 组合输入（中文拼音等）：在 composition 期间用本地状态展示，避免受控 value 覆盖导致输入法中断、拼音残留\n    const [isComposing, setIsComposing] = React.useState(false);\n    const [compositionValue, setCompositionValue] = React.useState('');\n\n    useAutosizeTextArea({\n      textAreaRef: textAreaRef.current,\n      triggerAutoSize: triggerAutoSize,\n      maxHeight,\n      minHeight,\n    });\n\n    useImperativeHandle(ref, () => ({\n      textArea: textAreaRef.current as HTMLTextAreaElement,\n      focus: () => textAreaRef.current?.focus(),\n      maxHeight,\n      minHeight,\n    }));\n\n    React.useEffect(() => {\n      setTriggerAutoSize(value as string);\n    }, [props?.defaultValue, value]);\n\n    const handleKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n      // if ArrowUp and no userInput, fill with last input\n      if (e.key === 'ArrowUp' && triggerAutoSize.length <= 0 && !(e.metaKey || e.altKey || e.ctrlKey)) {\n        e.preventDefault();\n        return;\n      }\n      if (onSubmit) {\n        const shouldSubmit = e.key === 'Enter' && e.keyCode !== 229 && !e.nativeEvent.isComposing && !isComposing && !e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey;\n        if (shouldSubmit) {\n          e.preventDefault();\n          onSubmit(e);\n        }\n      }\n\n      onKeyDown?.(e);\n    }, [isComposing, onKeyDown, onSubmit, triggerAutoSize.length]);\n\n    return (\n      <textarea\n        {...props}\n        onKeyDown={handleKeyDown}\n        value={typeof value !== 'undefined' ? (isComposing ? compositionValue : value ?? '') : undefined}\n        ref={textAreaRef}\n        className={cn(\n          'flex w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n          className,\n        )}\n        onCompositionStart={(e) => {\n          setIsComposing(true);\n          setCompositionValue(e.currentTarget.value);\n          propsOnCompositionStart?.(e);\n        }}\n        onCompositionEnd={(e) => {\n          setIsComposing(false);\n          // 组合结束时，立即同步最终值到父组件\n          const finalValue = e.currentTarget.value;\n          setCompositionValue(finalValue);\n          setTriggerAutoSize(finalValue);\n          onChange?.(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n          propsOnCompositionEnd?.(e);\n        }}\n        onChange={(e) => {\n          if ((e.nativeEvent as InputEvent).isComposing) {\n            setCompositionValue(e.target.value);\n            setTriggerAutoSize(e.target.value);\n            return;\n          }\n          // 如果不在组合状态，正常更新\n          setTriggerAutoSize(e.target.value);\n          onChange?.(e);\n        }}\n      />\n    );\n  },\n);\nAutosizeTextarea.displayName = 'AutosizeTextarea';\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Check, ChevronDown } from \"lucide-react\";\n\nimport { useMonkeysComponentAttributes } from \"../../provider/context\";\nimport { cn } from \"../base/utils\";\nimport { getOverlaySurfaceClassName } from \"./internal/overlaySurface\";\n\n/** Design-owned polymorphic slot for product compositions that need `asChild`. */\nexport const PolymorphicSlot = Slot;\n\nexport const Accordion = AccordionPrimitive.Root;\n\nexport const AccordionItem = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, style, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={cn(\"border-b\", className)}\n    style={{\n      borderColor:\n        \"var(--monkeys-component-accordion-item-border-color, hsl(var(--border)))\",\n      ...style,\n    }}\n    {...props}\n  />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nexport const AccordionTrigger = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"flex\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronDown\n        aria-hidden=\"true\"\n        className=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n      />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nexport const AccordionContent = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n    {...props}\n  >\n    <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n  </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport const Checkbox = React.forwardRef<\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n  <CheckboxPrimitive.Root\n    ref={ref}\n    className={cn(\n      \"peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n      className,\n    )}\n    {...props}\n  >\n    <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n      <Check aria-hidden=\"true\" className=\"h-4 w-4\" />\n    </CheckboxPrimitive.Indicator>\n  </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n\nexport const buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_[data-slot=icon]]:text-[inherit] [&_[data-slot=icon]_*]:!text-[inherit] [&_[data-slot=icon]_svg]:!stroke-current [&_[data-slot=icon]_svg_*]:!stroke-current [&_[data-slot=end-icon]]:text-[inherit] [&_[data-slot=end-icon]_*]:!text-[inherit] [&_[data-slot=end-icon]_svg]:!stroke-current [&_[data-slot=end-icon]_svg_*]:!stroke-current [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-control-surface shadow-sm ring-offset-control-surface hover:bg-accent hover:text-accent-foreground\",\n        secondary:\n          \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-9 rounded-sm px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: { variant: \"default\", size: \"default\" },\n  },\n);\n\nexport interface ButtonProps\n  extends\n    React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Component = asChild ? Slot : \"button\";\n    return (\n      <Component\n        ref={ref}\n        className={buttonVariants({ variant, size, className })}\n        {...props}\n      />\n    );\n  },\n);\nButton.displayName = \"Button\";\n\nexport interface ScrollAreaProps extends React.ComponentPropsWithoutRef<\n  typeof ScrollAreaPrimitive.Root\n> {\n  viewportClassName?: string;\n  viewportRef?: React.Ref<HTMLDivElement>;\n  onViewportScroll?: React.UIEventHandler<HTMLDivElement>;\n  scrollbar?: boolean;\n  scrollbarOrientation?: \"vertical\" | \"horizontal\";\n  scrollBarDisabled?: boolean;\n}\n\nexport const ScrollArea = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n  ScrollAreaProps\n>(\n  (\n    {\n      className,\n      children,\n      viewportClassName,\n      viewportRef,\n      onViewportScroll,\n      scrollbar = true,\n      scrollbarOrientation = \"vertical\",\n      scrollBarDisabled = false,\n      ...props\n    },\n    ref,\n  ) => (\n    <ScrollAreaPrimitive.Root\n      ref={ref}\n      className={cn(\n        \"group relative overflow-hidden\",\n        scrollBarDisabled && \"no-scrollbar\",\n        className,\n      )}\n      {...props}\n    >\n      <ScrollAreaPrimitive.Viewport\n        ref={viewportRef}\n        onScroll={onViewportScroll}\n        className={cn(\"h-full w-full rounded-[inherit]\", viewportClassName)}\n      >\n        {children}\n      </ScrollAreaPrimitive.Viewport>\n      {scrollbar ? (\n        <ScrollBar\n          orientation={scrollbarOrientation}\n          className={cn(scrollBarDisabled && \"size-0 p-0\")}\n        />\n      ) : null}\n      <ScrollAreaPrimitive.Corner />\n    </ScrollAreaPrimitive.Root>\n  ),\n);\nScrollArea.displayName = \"ScrollArea\";\n\nexport const ScrollBar = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n  <ScrollAreaPrimitive.ScrollAreaScrollbar\n    ref={ref}\n    orientation={orientation}\n    className={cn(\n      \"flex touch-none select-none opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100 data-[state=visible]:opacity-100\",\n      orientation === \"vertical\" &&\n        \"h-full w-2.5 border-l border-l-transparent p-px\",\n      orientation === \"horizontal\" &&\n        \"h-2.5 flex-col border-t border-t-transparent p-px\",\n      className,\n    )}\n    {...props}\n  >\n    <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n  </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = \"ScrollBar\";\n\nexport const Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(({ className, ...props }, ref) => (\n  <SwitchPrimitive.Root\n    ref={ref}\n    className={cn(\n      \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n      className,\n    )}\n    {...props}\n  >\n    <SwitchPrimitive.Thumb className=\"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\" />\n  </SwitchPrimitive.Root>\n));\nSwitch.displayName = \"Switch\";\n\nexport type TabsVariant = \"default\" | \"ghost\" | \"rounded\";\nexport type TabsProps = React.ComponentPropsWithoutRef<\n  typeof TabsPrimitive.Root\n> & { variant?: TabsVariant };\nexport const Tabs = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Root>,\n  TabsProps\n>(({ variant = \"default\", ...props }, ref) => (\n  <TabsPrimitive.Root ref={ref} data-variant={variant} {...props} />\n));\nTabs.displayName = \"Tabs\";\nexport const TabsList = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.List>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> & {\n    gap?: string | number;\n  }\n>(({ className, gap, style, ...props }, ref) => (\n  <TabsPrimitive.List\n    ref={ref}\n    className={cn(\n      \"inline-flex h-10 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n      className,\n    )}\n    style={{ gap, ...style }}\n    {...props}\n  />\n));\nTabsList.displayName = \"TabsList\";\nexport const TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n      className,\n    )}\n    {...props}\n  />\n));\nTabsTrigger.displayName = \"TabsTrigger\";\nexport const TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={cn(\n      \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n      className,\n    )}\n    {...props}\n  />\n));\nTabsContent.displayName = \"TabsContent\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\nexport const TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => {\n  const componentAttributes = useMonkeysComponentAttributes();\n  return (\n    <TooltipPrimitive.Portal>\n      <TooltipPrimitive.Content\n        {...componentAttributes}\n        {...props}\n        ref={ref}\n        sideOffset={sideOffset}\n        data-monkeys-component=\"tooltip\"\n        data-slot=\"content\"\n        data-surface=\"menu\"\n        className={cn(\n          \"z-50 overflow-hidden border px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n          getOverlaySurfaceClassName(\"menu\"),\n          className,\n        )}\n      />\n    </TooltipPrimitive.Portal>\n  );\n});\nTooltipContent.displayName = \"TooltipContent\";\n","import * as React from 'react';\n\nimport { cn } from '../base/utils';\n\nexport type ControlAppearance = 'standard' | 'compact' | 'shadow';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n  appearance?: ControlAppearance;\n}\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, appearance = 'standard', type, ...props }, ref) => (\n  <input\n    ref={ref}\n    type={type}\n    className={cn(\n      'flex w-full border border-input bg-control-surface px-3 text-foreground ring-offset-control-surface transition-[border-color,background-color,color,box-shadow] file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n      appearance === 'compact' ? 'h-9 rounded-md py-1 text-sm shadow-sm' : 'h-10 rounded-md py-2 text-sm shadow-sm',\n      appearance === 'shadow' && 'rounded-lg shadow-sm shadow-black/[0.02] dark:border-white/10 dark:bg-white/[0.04] dark:shadow-none',\n      className,\n    )}\n    {...props}\n  />\n));\nInput.displayName = 'Input';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n  appearance?: ControlAppearance;\n}\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, appearance = 'standard', ...props }, ref) => (\n  <textarea\n    ref={ref}\n    className={cn(\n      'flex w-full border border-input bg-control-surface px-3 py-2 text-foreground ring-offset-control-surface placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n      appearance === 'compact' ? 'min-h-[60px] rounded-md text-sm shadow-sm' : 'min-h-[80px] rounded-md text-sm',\n      appearance === 'shadow' && 'shadow-sm shadow-black/[0.02] dark:border-white/10 dark:bg-white/[0.04] dark:shadow-none',\n      className,\n    )}\n    {...props}\n  />\n));\nTextarea.displayName = 'Textarea';\n","import * as React from 'react';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Input, Textarea } from './FormControls';\nimport { Button } from './InteractiveControls';\nimport { cn } from '../base/utils';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot=\"input-group\"\n      role=\"group\"\n      className={cn(\n        'group/input-group shadow-xs relative flex w-full items-center rounded-md border border-input outline-none transition-[color,box-shadow] dark:bg-input/30',\n        'h-9 has-[>textarea]:h-auto',\n\n        // Variants based on alignment.\n        'has-[>[data-align=inline-start]]:[&>input]:pl-2',\n        'has-[>[data-align=inline-end]]:[&>input]:pr-2',\n        'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3',\n        'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3',\n\n        // Focus state.\n        'has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-ring',\n\n        // Error state.\n        'has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40',\n\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nconst inputGroupAddonVariants = cva(\n  \"text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      align: {\n        'inline-start': 'order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]',\n        'inline-end': 'order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]',\n        'block-start':\n          '[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5',\n        'block-end': '[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5',\n      },\n    },\n    defaultVariants: {\n      align: 'inline-start',\n    },\n  },\n);\n\nfunction InputGroupAddon({\n  className,\n  align = 'inline-start',\n  ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n  return (\n    <div\n      role=\"group\"\n      data-slot=\"input-group-addon\"\n      data-align={align}\n      className={cn(inputGroupAddonVariants({ align }), className)}\n      onClick={(e) => {\n        if ((e.target as HTMLElement).closest('button')) {\n          return;\n        }\n        e.currentTarget.parentElement?.querySelector('input')?.focus();\n      }}\n      {...props}\n    />\n  );\n}\n\nconst inputGroupButtonVariants = cva('flex items-center gap-2 text-sm shadow-none', {\n  variants: {\n    size: {\n      xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n      sm: 'h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5',\n      'icon-xs': 'size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0',\n      'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n    },\n  },\n  defaultVariants: {\n    size: 'xs',\n  },\n});\n\nfunction InputGroupButton({\n  className,\n  type = 'button',\n  variant = 'ghost',\n  size = 'xs',\n  ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n  return (\n    <Button\n      type={type}\n      data-size={size}\n      variant={variant}\n      className={cn(inputGroupButtonVariants({ size }), className)}\n      {...props}\n    />\n  );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n  return (\n    <span\n      className={cn(\n        \"flex items-center gap-2 text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nconst InputGroupInput = React.forwardRef<\n  HTMLInputElement,\n  React.ComponentPropsWithoutRef<'input'>\n>(({ className, ...props }, ref) => (\n  <Input\n    ref={ref}\n    data-slot=\"input-group-control\"\n    className={cn(\n      'flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-transparent',\n      className,\n    )}\n    {...props}\n  />\n));\nInputGroupInput.displayName = 'InputGroupInput';\n\nconst InputGroupTextarea = React.forwardRef<\n  HTMLTextAreaElement,\n  React.ComponentPropsWithoutRef<'textarea'>\n>(({ className, ...props }, ref) => (\n  <Textarea\n    ref={ref}\n    data-slot=\"input-group-control\"\n    className={cn(\n      'flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-transparent',\n      className,\n    )}\n    {...props}\n  />\n));\nInputGroupTextarea.displayName = 'InputGroupTextarea';\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };\n","import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronRight, ChevronUp, Circle } from 'lucide-react';\n\nimport { useMonkeysComponentAttributes } from '../../provider/context';\nimport { cn } from '../base/utils';\nimport { getOverlaySurfaceClassName } from './internal/overlaySurface';\n\nconst menuItemClassName = 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\nconst menuContentClassName = `z-50 min-w-[8rem] overflow-hidden border p-1 ${getOverlaySurfaceClassName('menu')} data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`;\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\nexport const DropdownMenuSubTrigger = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n  <DropdownMenuPrimitive.SubTrigger ref={ref} className={cn(menuItemClassName, 'data-[state=open]:bg-accent', inset && 'pl-8', className)} {...props}>\n    {children}<ChevronRight aria-hidden=\"true\" className=\"ml-auto\" />\n  </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\nexport const DropdownMenuSubContent = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>>(\n  ({ className, ...props }, ref) => {\n    const componentAttributes = useMonkeysComponentAttributes();\n    return <DropdownMenuPrimitive.SubContent {...componentAttributes} {...props} ref={ref} data-monkeys-component=\"dropdown-menu\" data-slot=\"content\" data-surface=\"menu\" className={cn(menuContentClassName, className)} />;\n  },\n);\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\nexport const DropdownMenuContent = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Content>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>>(\n  ({ className, sideOffset = 4, ...props }, ref) => {\n    const componentAttributes = useMonkeysComponentAttributes();\n    return <DropdownMenuPrimitive.Portal><DropdownMenuPrimitive.Content {...componentAttributes} {...props} ref={ref} sideOffset={sideOffset} data-monkeys-component=\"dropdown-menu\" data-slot=\"content\" data-surface=\"menu\" className={cn(menuContentClassName, className)} /></DropdownMenuPrimitive.Portal>;\n  },\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\nexport const DropdownMenuItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Item>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }>(\n  ({ className, inset, ...props }, ref) => <DropdownMenuPrimitive.Item ref={ref} className={cn(menuItemClassName, inset && 'pl-8', className)} {...props} />,\n);\nDropdownMenuItem.displayName = 'DropdownMenuItem';\nexport const DropdownMenuCheckboxItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>>(\n  ({ className, children, checked, ...props }, ref) => (\n    <DropdownMenuPrimitive.CheckboxItem ref={ref} className={cn(menuItemClassName, 'pl-8', className)} checked={checked} {...props}>\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\"><DropdownMenuPrimitive.ItemIndicator><Check aria-hidden=\"true\" className=\"h-4 w-4\" /></DropdownMenuPrimitive.ItemIndicator></span>{children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  ),\n);\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\nexport const DropdownMenuRadioItem = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>>(\n  ({ className, children, ...props }, ref) => (\n    <DropdownMenuPrimitive.RadioItem ref={ref} className={cn(menuItemClassName, 'pl-8', className)} {...props}>\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\"><DropdownMenuPrimitive.ItemIndicator><Circle aria-hidden=\"true\" className=\"h-2 w-2 fill-current\" /></DropdownMenuPrimitive.ItemIndicator></span>{children}\n    </DropdownMenuPrimitive.RadioItem>\n  ),\n);\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\nexport const DropdownMenuLabel = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Label>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }>(\n  ({ className, inset, ...props }, ref) => <DropdownMenuPrimitive.Label ref={ref} className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)} {...props} />,\n);\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\nexport const DropdownMenuSeparator = React.forwardRef<React.ElementRef<typeof DropdownMenuPrimitive.Separator>, React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>>(\n  ({ className, ...props }, ref) => <DropdownMenuPrimitive.Separator ref={ref} className={cn('-mx-1 my-1 h-px bg-muted', className)} {...props} />,\n);\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\nexport const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />;\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\nexport interface SelectTriggerProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {\n  iconClassName?: string;\n  size?: 'default' | 'sm';\n}\nexport const SelectTrigger = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Trigger>, SelectTriggerProps>(\n  ({ className, children, iconClassName, size = 'default', ...props }, ref) => (\n    <SelectPrimitive.Trigger ref={ref} className={cn('flex h-10 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-control-surface px-3 py-2 text-left text-sm text-foreground shadow-sm ring-offset-control-surface data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 [&>span]:min-w-0 [&>span]:flex-1 [&>span]:text-left', size === 'sm' && 'h-8 px-2 py-1 text-xs', className)} {...props}>\n      {children}<SelectPrimitive.Icon asChild><ChevronDown aria-hidden=\"true\" className={cn('h-4 w-4 opacity-50', iconClassName)} /></SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  ),\n);\nSelectTrigger.displayName = 'SelectTrigger';\nexport const SelectScrollUpButton = React.forwardRef<React.ElementRef<typeof SelectPrimitive.ScrollUpButton>, React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>>(\n  ({ className, ...props }, ref) => <SelectPrimitive.ScrollUpButton ref={ref} className={cn('flex cursor-default items-center justify-center py-1', className)} {...props}><ChevronUp aria-hidden=\"true\" className=\"h-4 w-4\" /></SelectPrimitive.ScrollUpButton>,\n);\nSelectScrollUpButton.displayName = 'SelectScrollUpButton';\nexport const SelectScrollDownButton = React.forwardRef<React.ElementRef<typeof SelectPrimitive.ScrollDownButton>, React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>>(\n  ({ className, ...props }, ref) => <SelectPrimitive.ScrollDownButton ref={ref} className={cn('flex cursor-default items-center justify-center py-1', className)} {...props}><ChevronDown aria-hidden=\"true\" className=\"h-4 w-4\" /></SelectPrimitive.ScrollDownButton>,\n);\nSelectScrollDownButton.displayName = 'SelectScrollDownButton';\nexport interface SelectContentProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> {\n  viewportClassName?: string;\n  disableTriggerViewportSizing?: boolean;\n}\nexport const SelectContent = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Content>, SelectContentProps>(\n  ({ className, children, position = 'popper', viewportClassName, disableTriggerViewportSizing = false, ...props }, ref) => {\n    const componentAttributes = useMonkeysComponentAttributes();\n    return (\n      <SelectPrimitive.Portal><SelectPrimitive.Content {...componentAttributes} {...props} ref={ref} position={position} data-monkeys-component=\"select\" data-slot=\"content\" data-surface=\"menu\" className={cn(menuContentClassName, 'relative max-h-[var(--radix-select-content-available-height)] overflow-y-auto overflow-x-hidden', position === 'popper' && 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className)}>\n        <SelectScrollUpButton /><SelectPrimitive.Viewport className={cn('p-1', position === 'popper' && 'w-full min-w-[var(--radix-select-trigger-width)]', position === 'popper' && !disableTriggerViewportSizing && 'h-[var(--radix-select-trigger-height)]', viewportClassName)}>{children}</SelectPrimitive.Viewport><SelectScrollDownButton />\n      </SelectPrimitive.Content></SelectPrimitive.Portal>\n    );\n  },\n);\nSelectContent.displayName = 'SelectContent';\nexport const SelectLabel = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Label>, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>>(\n  ({ className, ...props }, ref) => <SelectPrimitive.Label ref={ref} className={cn('px-2 py-1.5 text-sm font-semibold', className)} {...props} />,\n);\nSelectLabel.displayName = 'SelectLabel';\nexport interface SelectItemProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {\n  indicatorClassName?: string;\n  itemText?: React.ReactNode;\n  hideIndicator?: boolean;\n}\nexport const SelectItem = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Item>, SelectItemProps>(\n  ({ className, children, indicatorClassName, itemText, hideIndicator = false, ...props }, ref) => (\n    <SelectPrimitive.Item ref={ref} className={cn(menuItemClassName, 'w-full', hideIndicator ? 'px-2' : 'pl-8 pr-2', className)} {...props}>\n      {!hideIndicator ? <span className={cn('absolute left-2 flex h-3.5 w-3.5 items-center justify-center', indicatorClassName)}><SelectPrimitive.ItemIndicator><Check aria-hidden=\"true\" className=\"h-4 w-4\" /></SelectPrimitive.ItemIndicator></span> : null}\n      {itemText ? <><SelectPrimitive.ItemText asChild><span className=\"sr-only\">{itemText}</span></SelectPrimitive.ItemText>{children}</> : <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>}\n    </SelectPrimitive.Item>\n  ),\n);\nSelectItem.displayName = 'SelectItem';\nexport const SelectSeparator = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Separator>, React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>>(\n  ({ className, ...props }, ref) => <SelectPrimitive.Separator ref={ref} className={cn('-mx-1 my-1 h-px bg-muted', className)} {...props} />,\n);\nSelectSeparator.displayName = 'SelectSeparator';\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\n\nimport { useMonkeysComponentAttributes } from '../../provider/context';\nimport { cn } from '../base/utils';\nimport { getOverlaySurfaceClassName } from './internal/overlaySurface';\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetPortal = DialogPrimitive.Portal;\n\nexport const SheetOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => {\n  const componentAttributes = useMonkeysComponentAttributes();\n  return (\n    <DialogPrimitive.Overlay\n      {...componentAttributes}\n      {...props}\n      ref={ref}\n      data-monkeys-component=\"sheet\"\n      data-slot=\"overlay\"\n      data-monkeys-overlay\n      className={cn(\n        'theme-overlay-backdrop fixed inset-0 z-50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n        className,\n      )}\n    />\n  );\n});\nSheetOverlay.displayName = 'SheetOverlay';\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\nexport interface SheetContentProps\n  extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n  side?: SheetSide;\n}\n\nconst sideClassNames: Record<SheetSide, string> = {\n  top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n  right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n  bottom: 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n  left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n};\n\nexport const SheetContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  SheetContentProps\n>(({ side = 'right', className, children, ...props }, ref) => {\n  const componentAttributes = useMonkeysComponentAttributes();\n  return (\n    <SheetPortal>\n      <SheetOverlay />\n      <DialogPrimitive.Content\n        {...componentAttributes}\n        {...props}\n        ref={ref}\n        data-monkeys-component=\"sheet\"\n        data-slot=\"content\"\n        data-surface=\"dialog\"\n        data-monkeys-dialog-content\n        className={cn(\n          'fixed z-50 gap-4 p-6 transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out',\n          getOverlaySurfaceClassName('dialog', { rounded: false }),\n          sideClassNames[side],\n          className,\n        )}\n      >\n        <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-dialog-surface transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n          <svg aria-hidden=\"true\" className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n            <path d=\"M18 6 6 18M6 6l12 12\" />\n          </svg>\n          <span className=\"sr-only\">Close</span>\n        </DialogPrimitive.Close>\n        {children}\n      </DialogPrimitive.Content>\n    </SheetPortal>\n  );\n});\nSheetContent.displayName = 'SheetContent';\n\nexport const SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\nexport const SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n);\n\nexport const SheetTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n));\nSheetTitle.displayName = 'SheetTitle';\n\nexport const SheetDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nSheetDescription.displayName = 'SheetDescription';\n","import type {\n  AgentSessionPermissionProfile,\n  AgentWorkbenchComposerInputAction,\n  AgentWorkbenchComposerModelOption,\n  AgentWorkbenchComposerViewModel,\n} from \"@inf-monkeys-tech/monkeys\";\nimport {\n  ArrowDown,\n  ArrowUp,\n  CircleAlert,\n  File,\n  FileText,\n  Image as ImageIcon,\n  LoaderCircle,\n  Mic,\n  Paperclip,\n  Pencil,\n  RotateCcw,\n  Send,\n  Square,\n  Trash2,\n  X,\n} from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport {\n  AutosizeTextarea,\n  Button,\n  Input,\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n  Switch,\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from \"../primitives\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\n\ninterface ComposerSelectOption {\n  value: string;\n  label: string;\n  disabled?: boolean;\n}\n\ninterface ComposerSelectProps {\n  value: string;\n  label: string;\n  placeholder?: string;\n  options: readonly ComposerSelectOption[];\n  className?: string;\n  onValueChange: (value: string) => void;\n}\n\nfunction ComposerSelect({\n  value,\n  label,\n  placeholder,\n  options,\n  className,\n  onValueChange,\n}: ComposerSelectProps) {\n  const selectedOption = options.find((option) => option.value === value);\n\n  return (\n    <Select\n      value={value || undefined}\n      disabled={options.length === 0}\n      onValueChange={onValueChange}\n    >\n      <SelectTrigger\n        size=\"sm\"\n        aria-label={label}\n        className={cn(\"shrink bg-background font-medium\", className)}\n      >\n        <SelectValue placeholder={placeholder}>\n          {selectedOption?.label}\n        </SelectValue>\n      </SelectTrigger>\n      <SelectContent disableTriggerViewportSizing>\n        {options.map((option) => (\n          <SelectItem\n            key={option.value}\n            value={option.value}\n            disabled={option.disabled}\n          >\n            {option.label}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n}\n\nexport type AgentWorkbenchComposerIntent =\n  | { type: \"change-value\"; value: string }\n  | { type: \"submit\" }\n  | { type: \"stop\" }\n  | { type: \"request-attachments\"; files: File[] }\n  | { type: \"select-input-action\"; actionId: string }\n  | { type: \"request-voice-input\" }\n  | { type: \"retry-attachment\"; attachmentId: string }\n  | { type: \"remove-attachment\"; attachmentId: string }\n  | { type: \"change-mode\"; mode: \"chat\" | \"work\" }\n  | { type: \"select-model\"; modelId: string; mode: \"chat\" | \"work\" }\n  | { type: \"change-reasoning\"; value: \"low\" | \"medium\" | \"high\" | \"xhigh\" }\n  | { type: \"change-permission\"; value: AgentSessionPermissionProfile }\n  | { type: \"toggle-web-search\"; enabled: boolean }\n  | { type: \"edit-queued-draft\"; draftId: string; text: string }\n  | { type: \"delete-queued-draft\"; draftId: string }\n  | { type: \"move-queued-draft\"; draftId: string; direction: \"up\" | \"down\" };\n\nexport interface AgentWorkbenchComposerClassNames {\n  root?: string;\n  queue?: string;\n  attachments?: string;\n  textarea?: string;\n  toolbar?: string;\n}\n\nexport interface AgentWorkbenchComposerProps\n  extends AgentWorkbenchAppearanceOptions {\n  viewModel: AgentWorkbenchComposerViewModel;\n  disabled?: boolean;\n  modeSelectionEnabled?: boolean;\n  modeFilteringEnabled?: boolean;\n  className?: string;\n  classNames?: AgentWorkbenchComposerClassNames;\n  onIntent?: (intent: AgentWorkbenchComposerIntent) => void;\n}\n\nexport type ComposerInputAction = AgentWorkbenchComposerInputAction;\n\nfunction modelOptionValue(option: AgentWorkbenchComposerModelOption): string {\n  return `${option.mode}:${option.id}`;\n}\n\nexport function AgentWorkbenchComposer({\n  viewModel,\n  disabled = false,\n  modeSelectionEnabled = false,\n  modeFilteringEnabled = false,\n  variant,\n  density,\n  className,\n  classNames,\n  onIntent: emitIntent,\n}: AgentWorkbenchComposerProps) {\n  const current = useRef({ disabled, emitIntent }); current.current = { disabled, emitIntent };\n  const onIntent = (intent: AgentWorkbenchComposerIntent) => { if (!current.current.disabled) current.current.emitIntent?.(intent); };\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const compact = appearance.density === \"compact\";\n  const iconButtonClass = cn(\n    compact ? \"size-7\" : \"size-8\",\n    \"shrink-0 p-0 text-muted-foreground\",\n  );\n  const messages = useMonkeysLocaleMessages().agentWorkbench;\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const surfaceRef = useRef<HTMLDivElement>(null);\n  const [editingDraftId, setEditingDraftId] = useState<string>();\n  const [editingText, setEditingText] = useState(\"\");\n  const [isNarrow, setIsNarrow] = useState(false);\n  const narrowBreakpoint = modeSelectionEnabled ? 900 : 704;\n  const isBusy =\n    viewModel.status === \"loading\" ||\n    viewModel.status === \"streaming\" ||\n    viewModel.status === \"stopping\";\n  const isStopping = viewModel.status === \"stopping\";\n  const isUploading = viewModel.attachments.some(\n    (attachment) => attachment.status === \"uploading\",\n  );\n  const canSubmit =\n    !disabled &&\n    !isStopping &&\n    !isUploading &&\n    (viewModel.value.trim().length > 0 ||\n      viewModel.attachments.some((item) => item.status === \"ready\"));\n  const showSubmitButton = !isBusy || canSubmit;\n  const filterModelsByMode = modeSelectionEnabled || modeFilteringEnabled;\n  const visibleModelOptions = useMemo(\n    () =>\n      filterModelsByMode\n        ? viewModel.model.options.filter(\n            (option) => option.mode === viewModel.mode,\n          )\n        : viewModel.model.options,\n    [filterModelsByMode, viewModel.mode, viewModel.model.options],\n  );\n  const selectedModelValue = useMemo(() => {\n    const selected = visibleModelOptions.find(\n      (option) =>\n        option.id === viewModel.model.selectedId &&\n        option.mode === viewModel.mode,\n    );\n    return selected\n      ? modelOptionValue(selected)\n      : visibleModelOptions[0]\n        ? modelOptionValue(visibleModelOptions[0])\n        : \"\";\n  }, [viewModel.mode, viewModel.model.selectedId, visibleModelOptions]);\n  const inputActions = viewModel.inputActions || [];\n  const selectedInputActionId = viewModel.selectedInputActionId;\n\n  useEffect(() => {\n    const surface = surfaceRef.current;\n    if (!surface) return undefined;\n\n    const updateLayout = () =>\n      setIsNarrow(surface.getBoundingClientRect().width <= narrowBreakpoint);\n    updateLayout();\n    window.addEventListener('resize', updateLayout);\n    if (typeof ResizeObserver === \"undefined\") {\n      const interval = window.setInterval(updateLayout, 250);\n      return () => {\n        window.clearInterval(interval);\n        window.removeEventListener(\"resize\", updateLayout);\n      };\n    }\n\n    const observer = new ResizeObserver(updateLayout);\n    observer.observe(surface);\n    return () => {\n      observer.disconnect();\n      window.removeEventListener(\"resize\", updateLayout);\n    };\n  }, [narrowBreakpoint]);\n\n  const submit = () => {\n    if (canSubmit) onIntent?.({ type: \"submit\" });\n  };\n\n  return (\n    <fieldset disabled={disabled} className=\"min-w-0 border-0 p-0\">\n    <form\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      data-agent-workbench-status={viewModel.status}\n      className={cn(\n        \"agent-workbench-composer flex min-w-0 w-full flex-col\",\n        compact ? \"gap-1.5\" : \"gap-2\",\n        className,\n        classNames?.root,\n      )}\n      aria-label={messages.composer.message}\n      onSubmit={(event) => {\n        event.preventDefault();\n        submit();\n      }}\n    >\n      {viewModel.capabilities.queue && viewModel.queuedDrafts.length > 0 ? (\n        <section\n          aria-label={messages.composer.queued}\n          className={cn(\n            \"min-w-0 max-w-full rounded-md border border-border bg-muted/40 p-2\",\n            classNames?.queue,\n          )}\n        >\n          <ol className=\"space-y-1.5\">\n            {viewModel.queuedDrafts.map((draft, index) => (\n              <li\n                key={draft.id}\n                className=\"flex min-h-9 min-w-0 max-w-full items-center gap-2 overflow-hidden rounded-md bg-background px-2 py-1.5 text-sm\"\n              >\n                <span className=\"w-5 shrink-0 text-center text-xs text-muted-foreground\">\n                  {index + 1}\n                </span>\n                {editingDraftId === draft.id ? (\n                  <Input\n                    autoFocus\n                    value={editingText}\n                    aria-label={messages.composer.editQueued}\n                    appearance=\"compact\"\n                    className=\"h-8 min-w-0 flex-1 px-2 py-1\"\n                    onChange={(event) => setEditingText(event.target.value)}\n                    onBlur={() => {\n                      if (editingText.trim())\n                        onIntent?.({\n                          type: \"edit-queued-draft\",\n                          draftId: draft.id,\n                          text: editingText,\n                        });\n                      setEditingDraftId(undefined);\n                    }}\n                    onKeyDown={(event) => {\n                      if (event.key === \"Escape\") setEditingDraftId(undefined);\n                      if (event.key === \"Enter\" && editingText.trim()) {\n                        event.preventDefault();\n                        onIntent?.({\n                          type: \"edit-queued-draft\",\n                          draftId: draft.id,\n                          text: editingText,\n                        });\n                        setEditingDraftId(undefined);\n                      }\n                    }}\n                  />\n                ) : (\n                  <span className=\"min-w-0 flex-1 truncate\">\n                    {draft.text || messages.composer.attachmentOnly}\n                  </span>\n                )}\n                <div className=\"flex shrink-0 items-center gap-0.5\">\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className={iconButtonClass}\n                    aria-label={messages.composer.moveUp}\n                    disabled={index === 0}\n                    onClick={() =>\n                      onIntent?.({\n                        type: \"move-queued-draft\",\n                        draftId: draft.id,\n                        direction: \"up\",\n                      })\n                    }\n                  >\n                    <ArrowUp className=\"size-3.5\" />\n                  </Button>\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className={iconButtonClass}\n                    aria-label={messages.composer.moveDown}\n                    disabled={index === viewModel.queuedDrafts.length - 1}\n                    onClick={() =>\n                      onIntent?.({\n                        type: \"move-queued-draft\",\n                        draftId: draft.id,\n                        direction: \"down\",\n                      })\n                    }\n                  >\n                    <ArrowDown className=\"size-3.5\" />\n                  </Button>\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className={iconButtonClass}\n                    aria-label={messages.composer.editQueued}\n                    onClick={() => {\n                      setEditingDraftId(draft.id);\n                      setEditingText(draft.text);\n                    }}\n                  >\n                    <Pencil className=\"size-3.5\" />\n                  </Button>\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    className={cn(\n                      iconButtonClass,\n                      \"text-destructive-text hover:text-destructive-text\",\n                    )}\n                    aria-label={messages.composer.deleteQueued}\n                    onClick={() =>\n                      onIntent?.({\n                        type: \"delete-queued-draft\",\n                        draftId: draft.id,\n                      })\n                    }\n                  >\n                    <Trash2 className=\"size-3.5\" />\n                  </Button>\n                </div>\n              </li>\n            ))}\n          </ol>\n        </section>\n      ) : null}\n\n      <div\n        ref={surfaceRef}\n        data-agent-workbench-surface=\"elevated\"\n        className={cn(\n          \"agent-workbench-composer__surface min-w-0 max-w-full rounded-[var(--radius)] border border-input bg-popover text-popover-foreground shadow-sm transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/30\",\n          compact ? \"p-2.5\" : \"p-3\",\n        )}\n      >\n        {viewModel.attachments.length > 0 ? (\n          <div\n            data-agent-workbench-composer-attachments\n            className={cn(\n              \"mb-2 flex max-w-full gap-2 overflow-x-auto overscroll-x-contain pb-1\",\n              classNames?.attachments,\n            )}\n          >\n            {viewModel.attachments.map((attachment) => {\n              const isAttachmentError = attachment.status === \"error\";\n              const isAttachmentUploading = attachment.status === \"uploading\";\n              return (\n                <div\n                  key={attachment.id}\n                  role={isAttachmentError ? 'alert' : undefined}\n                  className={cn(\n                    \"flex h-14 min-w-48 max-w-64 shrink-0 items-center gap-2 rounded-md border bg-muted/45 p-1.5\",\n                    isAttachmentError\n                      ? \"border-destructive/50 bg-destructive/5\"\n                      : \"border-border\",\n                  )}\n                >\n                  <span className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded bg-muted\">\n                    {attachment.previewUrl &&\n                    attachment.mediaType?.startsWith(\"image/\") ? (\n                      <img\n                        src={attachment.previewUrl}\n                        alt=\"\"\n                        className=\"size-full object-cover\"\n                      />\n                    ) : attachment.mediaType?.startsWith(\"image/\") ? (\n                      <ImageIcon className=\"size-5 text-muted-foreground\" />\n                    ) : (\n                      <File className=\"size-5 text-muted-foreground\" />\n                    )}\n                  </span>\n                  <span className=\"min-w-0 flex-1\">\n                    <span\n                      className=\"block truncate text-xs font-medium text-foreground\"\n                      title={attachment.name}\n                    >\n                      {attachment.name}\n                    </span>\n                    <span\n                      className={cn(\n                        \"mt-0.5 flex items-center gap-1 text-[11px]\",\n                        isAttachmentError\n                          ? \"text-destructive-text\"\n                          : \"text-muted-foreground\",\n                      )}\n                    >\n                      {isAttachmentUploading ? (\n                        <LoaderCircle\n                          className=\"size-3 animate-spin\"\n                          aria-hidden=\"true\"\n                        />\n                      ) : null}\n                      {isAttachmentError ? (\n                        <CircleAlert className=\"size-3\" aria-hidden=\"true\" />\n                      ) : null}\n                      {isAttachmentUploading\n                        ? messages.composer.uploading\n                        : isAttachmentError\n                          ? messages.composer.uploadFailed\n                          : attachment.mediaType ||\n                            messages.composer.attachmentOnly}\n                    </span>\n                  </span>\n                  <span className=\"flex shrink-0 items-center gap-0.5\">\n                    {isAttachmentError ? (\n                      <Button\n                        type=\"button\"\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        className=\"!size-7 min-w-7 shrink-0 p-0 text-destructive-text hover:text-destructive-text\"\n                        aria-label={`${messages.composer.retryAttachment}: ${attachment.name}`}\n                        onClick={() =>\n                          onIntent?.({\n                        type: 'retry-attachment',\n                            attachmentId: attachment.id,\n                          })\n                        }\n                      >\n                        <RotateCcw className=\"size-3.5\" />\n                      </Button>\n                    ) : null}\n                    <Button\n                      type=\"button\"\n                      variant=\"ghost\"\n                      size=\"icon\"\n                      className=\"!size-7 min-w-7 shrink-0 p-0 text-muted-foreground hover:text-foreground\"\n                      aria-label={`${messages.composer.removeAttachment}: ${attachment.name}`}\n                      onClick={() =>\n                        onIntent?.({\n                          type: \"remove-attachment\",\n                          attachmentId: attachment.id,\n                        })\n                      }\n                    >\n                      <X className=\"size-3.5\" />\n                    </Button>\n                  </span>\n                </div>\n              );\n            })}\n          </div>\n        ) : null}\n\n        <AutosizeTextarea\n          value={viewModel.value}\n          minHeight={compact ? 44 : 54}\n          maxHeight={256}\n          aria-label={messages.composer.message}\n          placeholder={viewModel.placeholder}\n          className={cn(\n            \"min-w-0 w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent px-0 py-0 text-sm leading-relaxed text-foreground shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\",\n            classNames?.textarea,\n          )}\n          onChange={(event) =>\n            onIntent?.({ type: \"change-value\", value: event.target.value })\n          }\n          onKeyDown={(event) => {\n            if (\n              event.key === \"Enter\" &&\n              !event.shiftKey &&\n              !event.nativeEvent.isComposing\n            ) {\n              event.preventDefault();\n              submit();\n            }\n          }}\n        />\n\n        <div\n          className={cn(\n            \"agent-workbench-composer__toolbar mt-2 flex min-w-0 max-w-full items-center\",\n            compact ? \"min-h-7 gap-1.5\" : \"min-h-8 gap-2\",\n            isNarrow ? 'flex-wrap' : 'flex-nowrap',\n            classNames?.toolbar,\n          )}\n        >\n          <div\n            data-agent-workbench-composer-controls\n            className={cn(\n              \"agent-workbench-composer__controls flex min-w-0 max-w-full flex-1 items-center gap-1.5\",\n              isNarrow ? 'w-full flex-wrap' : 'flex-nowrap overflow-x-auto overscroll-x-contain pb-1',\n            )}\n          >\n            {viewModel.capabilities.attachments ? (\n              <>\n                <Button\n                  type=\"button\"\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className={iconButtonClass}\n                  aria-label={messages.composer.attach}\n                  onClick={() => fileInputRef.current?.click()}\n                >\n                  <Paperclip className=\"size-4\" />\n                </Button>\n                <input\n                  ref={fileInputRef}\n                  type=\"file\"\n                  className=\"hidden\"\n                  multiple\n                  onChange={(event) => {\n                    const files = Array.from(event.target.files || []);\n                    if (files.length > 0)\n                      onIntent?.({ type: \"request-attachments\", files });\n                    event.target.value = \"\";\n                  }}\n                />\n              </>\n            ) : null}\n            {inputActions.length > 0 ? (\n              <Tabs\n                value={selectedInputActionId}\n                onValueChange={(actionId) =>\n                  onIntent?.({ type: \"select-input-action\", actionId })\n                }\n              >\n                <TabsList\n                  className={cn(\n                    \"shrink-0 gap-0.5 rounded-md bg-muted/60 p-0.5\",\n                    compact ? \"h-7\" : \"h-8\",\n                  )}\n                >\n                  {inputActions.map((action) => {\n                    const ActionIcon =\n                      action.icon === \"image\" ? ImageIcon : FileText;\n                    return (\n                      <TabsTrigger\n                        key={action.id}\n                        value={action.id}\n                        className={cn(\n                          \"min-w-0 gap-1.5 px-2.5 text-xs text-foreground/75 shadow-none hover:text-foreground data-[state=active]:bg-primary/10 data-[state=active]:text-primary data-[state=active]:shadow-none\",\n                          compact ? \"h-6\" : \"h-7\",\n                        )}\n                      >\n                        {action.icon ? (\n                          <ActionIcon className=\"size-3.5\" />\n                        ) : null}\n                        <span className=\"max-w-32 truncate\">\n                          {action.label}\n                        </span>\n                      </TabsTrigger>\n                    );\n                  })}\n                </TabsList>\n                {inputActions.map((action) => (\n                  <TabsContent\n                    key={action.id}\n                    value={action.id}\n                    className=\"hidden\"\n                  />\n                ))}\n              </Tabs>\n            ) : null}\n            {viewModel.capabilities.voiceInput ? (\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                size=\"icon\"\n                className={iconButtonClass}\n                aria-label={messages.composer.voice}\n                onClick={() => onIntent?.({ type: \"request-voice-input\" })}\n              >\n                <Mic className=\"size-4\" />\n              </Button>\n            ) : null}\n            {viewModel.capabilities.webSearch ? (\n              <label className=\"flex shrink-0 items-center gap-1.5 whitespace-nowrap px-1 text-xs font-medium text-foreground\">\n                {messages.composer.webSearch}\n                <Switch\n                  checked={viewModel.webSearchEnabled}\n                  onCheckedChange={(enabled) =>\n                    onIntent?.({ type: \"toggle-web-search\", enabled })\n                  }\n                />\n              </label>\n            ) : null}\n            {modeSelectionEnabled ? (\n              <Tabs\n                value={viewModel.mode}\n                onValueChange={(mode) =>\n                  onIntent?.({\n                    type: \"change-mode\",\n                    mode: mode as \"chat\" | \"work\",\n                  })\n                }\n              >\n                <TabsList\n                  aria-label={messages.composer.chatMode}\n                  className={cn(\n                    \"shrink-0 gap-0.5 rounded-md bg-muted/60 p-0.5\",\n                    compact ? \"h-7\" : \"h-8\",\n                  )}\n                >\n                  {([\"chat\", \"work\"] as const).map((mode) => (\n                    <TabsTrigger\n                      key={mode}\n                      value={mode}\n                      className={cn(\n                        \"min-w-0 px-2.5 text-xs text-foreground/75 shadow-none hover:text-foreground data-[state=active]:bg-primary/10 data-[state=active]:text-primary data-[state=active]:shadow-none\",\n                        compact ? \"h-6\" : \"h-7\",\n                      )}\n                    >\n                      {messages.modes[mode]}\n                    </TabsTrigger>\n                  ))}\n                </TabsList>\n                {([\"chat\", \"work\"] as const).map((mode) => (\n                  <TabsContent key={mode} value={mode} className=\"hidden\" />\n                ))}\n              </Tabs>\n            ) : null}\n            {viewModel.capabilities.modelSelection ? (\n              <ComposerSelect\n                value={selectedModelValue}\n                label={messages.composer.model}\n                placeholder={messages.composer.noModels}\n                className=\"w-48 min-w-36\"\n                options={visibleModelOptions.map((option) => ({\n                  value: modelOptionValue(option),\n                  label: `${option.label} · ${messages.modes[option.mode]}`,\n                  disabled: option.disabled,\n                }))}\n                onValueChange={(value) => {\n                  const option = visibleModelOptions.find(\n                    (item) => modelOptionValue(item) === value,\n                  );\n                  if (option)\n                    onIntent?.({\n                      type: \"select-model\",\n                      modelId: option.id,\n                      mode: option.mode,\n                    });\n                }}\n              />\n            ) : null}\n            {viewModel.capabilities.reasoning && viewModel.reasoning ? (\n              <ComposerSelect\n                value={viewModel.reasoning.value}\n                label={messages.composer.reasoning}\n                className=\"w-32 min-w-24\"\n                options={viewModel.reasoning.options.map((value) => ({\n                  value,\n                  label: messages.composer.reasoningOptions[value],\n                }))}\n                onValueChange={(value) =>\n                  onIntent?.({\n                    type: \"change-reasoning\",\n                    value: value as \"low\" | \"medium\" | \"high\" | \"xhigh\",\n                  })\n                }\n              />\n            ) : null}\n            {viewModel.capabilities.permissions &&\n            viewModel.permissionProfile ? (\n              <ComposerSelect\n                value={viewModel.permissionProfile}\n                label={messages.composer.permissions}\n                className=\"w-40 min-w-32\"\n                options={(\n                  [\"approval-required\", \"auto-approve\", \"full-access\"] as const\n                ).map((value) => ({\n                  value,\n                  label: messages.composer.permissionOptions[value],\n                }))}\n                onValueChange={(value) =>\n                  onIntent?.({\n                    type: \"change-permission\",\n                    value: value as AgentSessionPermissionProfile,\n                  })\n                }\n              />\n            ) : null}\n          </div>\n\n          <div className=\"ml-auto flex shrink-0 items-center gap-1.5\">\n            {showSubmitButton ? (\n              <Button\n                type=\"submit\"\n                size=\"icon\"\n                className={cn(\n                  iconButtonClass,\n                  \"bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground disabled:bg-primary/40 disabled:!opacity-100\",\n                )}\n                aria-label={\n                  isBusy && viewModel.capabilities.queue\n                    ? messages.composer.queue\n                    : messages.composer.send\n                }\n                disabled={!canSubmit}\n              >\n                <Send className=\"size-4 !text-white [&_path]:!stroke-white\" />\n              </Button>\n            ) : null}\n            {isBusy && !canSubmit && viewModel.capabilities.stop ? (\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"icon\"\n                className={iconButtonClass}\n                aria-label={\n                  isStopping ? messages.run.stopping : messages.composer.stop\n                }\n                disabled={isStopping}\n                onClick={() => onIntent?.({ type: \"stop\" })}\n              >\n                <Square className=\"size-3 fill-current\" />\n              </Button>\n            ) : null}\n          </div>\n        </div>\n      </div>\n      {viewModel.status === \"error\" && viewModel.error ? (\n        <p role=\"alert\" className=\"text-sm text-destructive-text\">\n          {viewModel.error}\n        </p>\n      ) : null}\n    </form>\n    </fieldset>\n  );\n}\n","import type {\n  AgentWorkbenchQuickStartCategory,\n  AgentWorkbenchQuickStartIcon,\n  AgentWorkbenchQuickStartTemplate,\n  AgentWorkbenchQuickStartViewModel,\n} from '@inf-monkeys-tech/monkeys';\nimport { ArrowLeft, ArrowUpRight, Code2, FileText, Palette, Search, ShoppingBag, Sparkles, Upload, type LucideIcon } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\n\nexport type {\n  AgentWorkbenchQuickStartCategory,\n  AgentWorkbenchQuickStartIcon,\n  AgentWorkbenchQuickStartSection,\n  AgentWorkbenchQuickStartTemplate,\n  AgentWorkbenchQuickStartViewModel,\n} from '@inf-monkeys-tech/monkeys';\n\nexport type AgentWorkbenchQuickStartIntent =\n  | { type: 'change-category'; categoryId?: string }\n  | { type: 'change-section'; categoryId: string; sectionId: string }\n  | {\n      type: 'select-template';\n      templateId: string;\n      prompt: string;\n      files?: File[];\n    };\n\nexport interface AgentWorkbenchQuickStartProps {\n  viewModel: AgentWorkbenchQuickStartViewModel;\n  className?: string;\n  onIntent?: (intent: AgentWorkbenchQuickStartIntent) => void;\n}\n\nconst ICONS: Record<AgentWorkbenchQuickStartIcon, LucideIcon> = {\n  sparkles: Sparkles,\n  palette: Palette,\n  search: Search,\n  'file-text': FileText,\n  code: Code2,\n  'shopping-bag': ShoppingBag,\n};\n\nfunction TemplateVisual({ template }: { template: AgentWorkbenchQuickStartTemplate }) {\n  const Icon = ICONS[template.icon || 'sparkles'];\n\n  if (template.coverImageUrl) {\n    return <img src={template.coverImageUrl} alt=\"\" className=\"size-full bg-muted object-contain\" />;\n  }\n\n  return (\n    <span className=\"flex size-full items-center justify-center bg-gradient-to-br from-primary/5 via-muted/50 to-primary/15\">\n      <span className=\"flex size-14 items-center justify-center rounded-2xl border border-primary/10 bg-background/85 text-primary shadow-sm\">\n        <Icon className=\"size-7\" aria-hidden=\"true\" />\n      </span>\n    </span>\n  );\n}\n\nexport function AgentWorkbenchQuickStart({ viewModel, className, onIntent }: AgentWorkbenchQuickStartProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.quickStart;\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const [activeCategoryId, setActiveCategoryId] = useState<string>();\n  const [activeSectionId, setActiveSectionId] = useState<string>();\n  const [pendingTemplate, setPendingTemplate] = useState<AgentWorkbenchQuickStartTemplate>();\n  const categories = useMemo(\n    () =>\n      viewModel.categories\n        .map((category) => ({\n          ...category,\n          sections: category.sections\n            .map((section) => ({\n              ...section,\n              templates: section.templates.filter((template) => !template.modes || template.modes.includes(viewModel.mode)),\n            }))\n            .filter((section) => section.templates.length > 0),\n        }))\n        .filter((category) => category.sections.length > 0),\n    [viewModel.categories, viewModel.mode],\n  );\n  const activeCategory = categories.find((category) => category.id === activeCategoryId);\n  const activeSection = activeCategory?.sections.find((section) => section.id === activeSectionId) || activeCategory?.sections[0];\n  const usesCompactList = activeSection?.templates.length\n    ? activeSection.templates.every((template) => !template.coverImageUrl)\n    : false;\n\n  useEffect(() => {\n    if (activeCategoryId && !categories.some((category) => category.id === activeCategoryId)) {\n      setActiveCategoryId(undefined);\n      setActiveSectionId(undefined);\n    }\n  }, [activeCategoryId, categories]);\n\n  if (categories.length === 0) return null;\n\n  const selectCategory = (category: AgentWorkbenchQuickStartCategory) => {\n    setActiveCategoryId(category.id);\n    setActiveSectionId(category.sections[0]?.id);\n    onIntent?.({ type: 'change-category', categoryId: category.id });\n  };\n\n  const selectSection = (sectionId: string) => {\n    if (!activeCategory) return;\n    setActiveSectionId(sectionId);\n    onIntent?.({\n      type: 'change-section',\n      categoryId: activeCategory.id,\n      sectionId,\n    });\n  };\n\n  const selectTemplate = (template: AgentWorkbenchQuickStartTemplate) => {\n    if (viewModel.disabled) return;\n    if (template.action !== 'upload') {\n      onIntent?.({\n        type: 'select-template',\n        templateId: template.id,\n        prompt: template.prompt,\n      });\n      return;\n    }\n\n    const input = fileInputRef.current;\n    if (!input) return;\n    input.accept = template.accept || '*/*';\n    input.multiple = template.multiple === true;\n    setPendingTemplate(template);\n    input.click();\n  };\n\n  return (\n    <section className={cn('agent-workbench-quick-start min-w-0 max-w-full', className)} aria-label={messages.label}>\n      <input\n        ref={fileInputRef}\n        type=\"file\"\n        className=\"hidden\"\n        onChange={(event) => {\n          const files = Array.from(event.target.files || []);\n          if (pendingTemplate && files.length > 0) {\n            onIntent?.({\n              type: 'select-template',\n              templateId: pendingTemplate.id,\n              prompt: pendingTemplate.prompt,\n              files: pendingTemplate.multiple ? files : files.slice(0, 1),\n            });\n          }\n          setPendingTemplate(undefined);\n          event.target.value = '';\n        }}\n      />\n\n      {!activeCategory ? (\n        <div className=\"flex max-w-full items-center justify-center gap-2 overflow-x-auto px-1 pb-1\">\n          {categories.map((category) => {\n            const Icon = ICONS[category.icon || 'sparkles'];\n            return (\n              <button key={category.id} type=\"button\" className=\"inline-flex h-10 shrink-0 items-center gap-2 rounded-full border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\" onClick={() => selectCategory(category)}>\n                <Icon className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n                {category.label}\n              </button>\n            );\n          })}\n        </div>\n      ) : (\n        <div className=\"space-y-3\">\n          <div className=\"flex min-w-0 max-w-full items-center gap-1 overflow-x-auto pb-1\">\n            <button\n              type=\"button\"\n              className=\"inline-flex h-9 shrink-0 items-center gap-1.5 rounded-full px-3 text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n              onClick={() => {\n                setActiveCategoryId(undefined);\n                setActiveSectionId(undefined);\n                onIntent?.({ type: 'change-category' });\n              }}\n            >\n              <ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n              {messages.back}\n            </button>\n            {activeCategory.sections.map((section) => (\n              <button key={section.id} type=\"button\" aria-pressed={activeSection?.id === section.id} className={cn('h-9 shrink-0 rounded-full px-4 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', activeSection?.id === section.id ? 'bg-muted text-foreground' : 'text-muted-foreground hover:bg-muted/70 hover:text-foreground')} onClick={() => selectSection(section.id)}>\n                {section.label}\n              </button>\n            ))}\n          </div>\n\n          <div\n            data-quick-start-layout={usesCompactList ? 'list' : 'cards'}\n            className={cn(\n              'grid',\n              usesCompactList ? 'grid-cols-1 gap-0' : 'grid-cols-[repeat(auto-fit,minmax(min(100%,14rem),1fr))] gap-3',\n            )}\n          >\n            {activeSection?.templates.map((template) => (\n              <button\n                key={template.id}\n                type=\"button\"\n                disabled={viewModel.disabled}\n                data-quick-start-template-id={template.id}\n                className={cn(\n                  'group min-w-0 overflow-hidden text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n                  usesCompactList\n                    ? 'flex min-h-14 items-center rounded-none border-x-0 border-t-0 bg-transparent shadow-none hover:border-border hover:bg-muted/40 last:border-b-0'\n                    : 'rounded-xl border border-border bg-background hover:border-primary/30 hover:bg-muted/20',\n                )}\n                onClick={() => selectTemplate(template)}\n              >\n                <span className={cn(usesCompactList ? 'min-w-0 flex-1 px-2 py-2.5' : 'block px-4 pb-3 pt-4')}>\n                  <span className={cn('flex items-center gap-2 text-sm text-foreground', usesCompactList ? 'font-medium' : 'font-semibold')}>\n                    {template.title}\n                    {template.action === 'upload' ? (\n                      <span className=\"ml-auto inline-flex items-center gap-1 text-[11px] font-medium text-muted-foreground\">\n                        <Upload className=\"size-3\" aria-hidden=\"true\" />\n                        {messages.addFile}\n                      </span>\n                    ) : null}\n                  </span>\n                  {template.description ? (\n                    <span\n                      className={cn(\n                        'line-clamp-2 block text-xs leading-4 text-muted-foreground',\n                        usesCompactList ? 'mt-0.5 min-h-0 text-muted-foreground/75' : 'mt-1 min-h-8',\n                      )}\n                    >\n                      {template.description}\n                    </span>\n                  ) : null}\n                </span>\n                {usesCompactList ? (\n                  <ArrowUpRight className=\"mr-2 size-4 shrink-0 text-muted-foreground/45\" aria-hidden=\"true\" />\n                ) : (\n                  <span className={cn('block overflow-hidden', template.coverImageUrl ? 'aspect-[5/2]' : 'h-28')}>\n                    <TemplateVisual template={template} />\n                  </span>\n                )}\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n    </section>\n  );\n}\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"../layout\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\n\nexport interface AgentWorkbenchSidebarContainerClassNames {\n  root?: string;\n  header?: string;\n  search?: string;\n  primaryAction?: string;\n  actions?: string;\n  body?: string;\n  groups?: string;\n  footer?: string;\n}\n\nexport interface AgentWorkbenchSidebarContainerBodyProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"className\"> {\n  \"data-agent-workbench-session-scroll-region\"?: boolean | \"\";\n}\n\nexport interface AgentWorkbenchSidebarContainerProps\n  extends Omit<HTMLAttributes<HTMLElement>, \"children\" | \"className\">,\n    AgentWorkbenchAppearanceOptions {\n  children?: ReactNode;\n  header?: ReactNode;\n  search?: ReactNode;\n  primaryAction?: ReactNode;\n  actions?: ReactNode;\n  groups?: ReactNode;\n  footer?: ReactNode;\n  className?: string;\n  classNames?: AgentWorkbenchSidebarContainerClassNames;\n  bodyProps?: AgentWorkbenchSidebarContainerBodyProps;\n  bodyScrollable?: boolean;\n  status?: \"ready\" | \"loading\" | \"empty\" | \"error\";\n  loadingState?: ReactNode;\n  emptyState?: ReactNode;\n  errorState?: ReactNode;\n}\n\n/** Shared structural shell for agent navigation variants. Product data stays in the slots. */\nexport const AgentWorkbenchSidebarContainer = forwardRef<\n  HTMLElement,\n  AgentWorkbenchSidebarContainerProps\n>(function AgentWorkbenchSidebarContainer(\n  {\n    children,\n    header,\n    search,\n    primaryAction,\n    actions,\n    groups,\n    footer,\n    className,\n    classNames,\n    bodyProps,\n    bodyScrollable = true,\n    status = \"ready\",\n    variant,\n    density,\n    loadingState,\n    emptyState,\n    errorState,\n    ...props\n  },\n  ref,\n) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const compact = appearance.density === \"compact\";\n  const hasToolbar =\n    search !== undefined ||\n    primaryAction !== undefined ||\n    actions !== undefined;\n  const statusContent =\n    status === \"loading\"\n      ? loadingState\n      : status === \"empty\"\n        ? emptyState\n        : status === \"error\"\n          ? errorState\n          : children;\n  return (\n    <nav\n      ref={ref}\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      data-agent-workbench-status={status}\n      className={cn(\n        \"flex h-full min-h-0 flex-col bg-card text-card-foreground\",\n        classNames?.root,\n        className,\n      )}\n      {...props}\n    >\n      {header !== undefined ? (\n        <div className={cn(\"shrink-0\", classNames?.header)}>{header}</div>\n      ) : null}\n      {hasToolbar ? (\n        <div\n          className={cn(\n            \"shrink-0\",\n            compact ? \"space-y-2 px-3 pb-2 pt-3\" : \"space-y-3 px-4 pb-2 pt-4\",\n            classNames?.search,\n          )}\n        >\n          {search}\n          {primaryAction !== undefined ? (\n            <div className={cn(classNames?.primaryAction)}>{primaryAction}</div>\n          ) : null}\n          {actions !== undefined ? (\n            <div\n              className={cn(\n                \"flex min-w-0 items-center gap-2\",\n                classNames?.actions,\n              )}\n            >\n              {actions}\n            </div>\n          ) : null}\n        </div>\n      ) : null}\n      <div\n        data-agent-workbench-scroll-region={bodyScrollable ? \"\" : undefined}\n        {...bodyProps}\n        tabIndex={bodyProps?.tabIndex ?? (bodyScrollable ? 0 : undefined)}\n        className={cn(\n          \"min-h-0 flex-1\",\n          compact ? \"px-3 pb-3\" : \"px-4 pb-4\",\n          bodyScrollable &&\n            \"overflow-x-hidden overflow-y-auto overscroll-contain\",\n          classNames?.body,\n        )}\n      >\n        {statusContent}\n      </div>\n      {groups !== undefined ? (\n        <div className={cn(\"shrink-0\", classNames?.groups)}>{groups}</div>\n      ) : null}\n      {footer !== undefined ? (\n        <div className={cn(\"shrink-0\", classNames?.footer)}>{footer}</div>\n      ) : null}\n    </nav>\n  );\n});\n\nAgentWorkbenchSidebarContainer.displayName = \"AgentWorkbenchSidebarContainer\";\n","import type {\n  AgentWorkbenchCollectionStatus,\n  AgentWorkbenchSessionItem,\n} from \"@inf-monkeys-tech/monkeys\";\nimport {\n  AlertCircle,\n  Bot,\n  CheckCircle2,\n  Ellipsis,\n  Image as ImageIcon,\n  Loader2,\n  MessageSquare,\n  Pencil,\n  Pin,\n  RefreshCw,\n  Search,\n  SquarePen,\n  Trash2,\n  X,\n} from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { useMonkeysLocale, useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport {\n  Button,\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n  Input,\n  InputGroup,\n  InputGroupAddon,\n  InputGroupButton,\n  InputGroupInput,\n} from \"../primitives\";\nimport type { AgentWorkbenchVariant } from \"./appearance\";\n\nexport interface AgentWorkbenchSidebarSearchProps {\n  value: string;\n  label: string;\n  placeholder?: string;\n  className?: string;\n  variant?: AgentWorkbenchVariant;\n  onChange: (value: string) => void;\n}\n\nexport function AgentWorkbenchSidebarSearch({\n  value,\n  label,\n  placeholder = label,\n  className,\n  variant = \"default\",\n  onChange,\n}: AgentWorkbenchSidebarSearchProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  const searchRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    const handleShortcut = (event: KeyboardEvent) => {\n      if (\n        !(event.ctrlKey || event.metaKey) ||\n        event.key.toLocaleLowerCase() !== \"k\"\n      )\n        return;\n      event.preventDefault();\n      searchRef.current?.focus();\n      searchRef.current?.select();\n    };\n    window.addEventListener(\"keydown\", handleShortcut);\n    return () => window.removeEventListener(\"keydown\", handleShortcut);\n  }, []);\n\n  return (\n    <InputGroup\n      className={cn(\n        variant === \"trend\"\n          ? \"h-12 rounded-[var(--radius)] border-border bg-card text-foreground\"\n          : \"h-10 rounded-lg bg-card\",\n        className,\n      )}\n    >\n      <InputGroupAddon>\n        <Search className=\"size-4\" aria-hidden=\"true\" />\n      </InputGroupAddon>\n      <InputGroupInput\n        ref={searchRef}\n        type=\"search\"\n        value={value}\n        aria-label={label}\n        placeholder={placeholder}\n        className=\"min-w-0 [&::-webkit-search-cancel-button]:hidden\"\n        onChange={(event) => onChange(event.target.value)}\n        onKeyDown={(event) => {\n          if (event.key !== \"Escape\") return;\n          onChange(\"\");\n          event.currentTarget.blur();\n        }}\n      />\n      {value ? (\n        <InputGroupAddon align=\"inline-end\">\n          <InputGroupButton\n            size=\"icon-xs\"\n            aria-label={messages.clearSearch}\n            onClick={() => onChange(\"\")}\n          >\n            <X className=\"size-3.5\" aria-hidden=\"true\" />\n          </InputGroupButton>\n        </InputGroupAddon>\n      ) : (\n        <InputGroupAddon align=\"inline-end\">\n          <kbd className=\"border border-border px-1.5 py-0.5 text-[10px]\">\n            Ctrl K\n          </kbd>\n        </InputGroupAddon>\n      )}\n    </InputGroup>\n  );\n}\n\nexport function AgentWorkbenchSidebarNewSessionButton({\n  label,\n  className,\n  variant = \"default\",\n  onClick,\n}: {\n  label: string;\n  className?: string;\n  variant?: AgentWorkbenchVariant;\n  onClick: () => void;\n}) {\n  return (\n    <Button\n      type=\"button\"\n      variant={variant === \"trend\" ? \"default\" : \"ghost\"}\n      className={cn(\n        variant === \"trend\"\n          ? \"h-11 w-full justify-center gap-2 rounded-[var(--radius)] border border-primary/60 bg-primary px-3 font-semibold text-primary-foreground hover:bg-primary/90\"\n          : \"h-9 w-full justify-start gap-2 px-3 text-sm\",\n        className,\n      )}\n      onClick={onClick}\n    >\n      <SquarePen className=\"size-4\" aria-hidden=\"true\" />\n      {label}\n    </Button>\n  );\n}\n\nfunction SessionAvatar({ item }: { item: AgentWorkbenchSessionItem }) {\n  const [failed, setFailed] = useState(false);\n  if (item.thumbnailUrl && !failed) {\n    return (\n      <img\n        src={item.thumbnailUrl}\n        alt=\"\"\n        className=\"size-full object-cover\"\n        loading=\"lazy\"\n        onError={() => setFailed(true)}\n      />\n    );\n  }\n  return <ImageIcon className=\"size-5\" aria-hidden=\"true\" />;\n}\n\nfunction SessionMeta({ item }: { item: AgentWorkbenchSessionItem }) {\n  const { locale } = useMonkeysLocale();\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  return (\n    <span className=\"flex min-w-0 items-center gap-1.5\">\n      <span className=\"min-w-0 truncate text-xs text-foreground/80\">\n        {new Intl.DateTimeFormat(locale, {\n          dateStyle: \"medium\",\n          timeStyle: \"short\",\n        }).format(new Date(item.updatedAt))}\n      </span>\n      {item.mode ? (\n        <span\n          className={cn(\n            \"shrink-0 rounded-full px-1.5 py-0.5 text-[10px] font-medium leading-none\",\n            item.mode === \"work\"\n              ? \"bg-primary/10 text-primary\"\n              : \"bg-muted text-foreground\",\n          )}\n        >\n          {item.mode === \"work\" ? messages.work : messages.chat}\n        </span>\n      ) : null}\n    </span>\n  );\n}\n\nfunction StatusIndicator({\n  status,\n}: {\n  status: AgentWorkbenchSessionItem[\"status\"];\n}) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  if (status === \"running\") {\n    return (\n      <Loader2\n        className=\"size-4 animate-spin text-primary\"\n        aria-label={messages.running}\n      />\n    );\n  }\n  if (status === \"completed\") {\n    return (\n      <CheckCircle2\n        className=\"size-4 text-primary\"\n        aria-label={messages.completed}\n      />\n    );\n  }\n  if (status === \"error\") {\n    return (\n      <AlertCircle\n        className=\"size-4 text-destructive-text\"\n        aria-label={messages.failed}\n      />\n    );\n  }\n  return null;\n}\n\nexport interface AgentWorkbenchSessionListProps {\n  sessions: AgentWorkbenchSessionItem[];\n  selectedSessionId?: string;\n  status?: AgentWorkbenchCollectionStatus;\n  error?: string;\n  query?: string;\n  emptyLabel: string;\n  noResultsLabel: string;\n  retryLabel?: string;\n  groupByMode?: boolean;\n  showHeading?: boolean;\n  variant?: \"default\" | \"trend\";\n  className?: string;\n  itemClassName?: string;\n  capabilities?: {\n    pin?: boolean;\n    rename?: boolean;\n    delete?: boolean;\n  };\n  onSelect: (sessionId: string) => void;\n  onTogglePin?: (sessionId: string, pinned: boolean) => void;\n  onRename?: (sessionId: string, title: string) => void;\n  onDelete?: (sessionId: string) => void;\n  onRetry?: () => void;\n}\n\nexport function AgentWorkbenchSessionList({\n  sessions,\n  selectedSessionId,\n  status = \"ready\",\n  error,\n  query = \"\",\n  emptyLabel,\n  noResultsLabel,\n  retryLabel,\n  groupByMode = false,\n  showHeading = false,\n  variant = \"default\",\n  className,\n  itemClassName,\n  capabilities,\n  onSelect,\n  onTogglePin,\n  onRename,\n  onDelete,\n  onRetry,\n}: AgentWorkbenchSessionListProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  const renameInputRef = useRef<HTMLInputElement>(null);\n  const [editingSessionId, setEditingSessionId] = useState<string>();\n  const [editingTitle, setEditingTitle] = useState(\"\");\n\n  useEffect(() => {\n    if (!editingSessionId) return;\n    renameInputRef.current?.focus();\n    renameInputRef.current?.select();\n  }, [editingSessionId]);\n\n  const cancelRename = () => {\n    setEditingSessionId(undefined);\n    setEditingTitle(\"\");\n  };\n  const saveRename = (item: AgentWorkbenchSessionItem) => {\n    const title = editingTitle.trim();\n    if (title && title !== item.title) onRename?.(item.id, title);\n    cancelRename();\n  };\n\n  if (status === \"loading\" && sessions.length === 0) {\n    return (\n      <div\n        className=\"space-y-2 px-1 py-3\"\n        role=\"status\"\n        aria-label={messages.loading}\n      >\n        {Array.from({ length: 4 }, (_, index) => (\n          <div\n            key={index}\n            aria-hidden=\"true\"\n            className={cn(\n              \"animate-pulse rounded-[var(--radius)] bg-muted/70\",\n              variant === \"trend\" ? \"h-10\" : \"h-14\",\n            )}\n          />\n        ))}\n      </div>\n    );\n  }\n  if (status === \"error\") {\n    return (\n      <div className=\"flex flex-col items-center gap-3 px-3 py-8 text-center\">\n        <p\n          className=\"max-w-full break-words text-sm text-muted-foreground\"\n          role=\"alert\"\n        >\n          {error}\n        </p>\n        {onRetry ? (\n          <Button\n            type=\"button\"\n            variant=\"ghost\"\n            size=\"sm\"\n            className=\"gap-1.5 px-0 text-sm text-primary hover:text-primary\"\n            onClick={onRetry}\n          >\n            <RefreshCw className=\"size-3.5\" aria-hidden=\"true\" />\n            {retryLabel ?? messages.retry}\n          </Button>\n        ) : null}\n      </div>\n    );\n  }\n  if (sessions.length === 0) {\n    return (\n      <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n        {query ? noResultsLabel : emptyLabel}\n      </div>\n    );\n  }\n\n  const renderTrendItems = (items: AgentWorkbenchSessionItem[]) => (\n    <div className=\"space-y-3\">\n      {items.map((item) => (\n        <div\n          key={item.id}\n          aria-current={item.id === selectedSessionId ? \"page\" : undefined}\n          data-agent-session-status={item.status ?? \"idle\"}\n          aria-busy={item.status === \"running\" ? \"true\" : undefined}\n          className=\"group flex h-10 w-full min-w-0 items-center rounded-[var(--radius)] border border-transparent bg-muted/60 text-foreground transition hover:bg-muted focus-within:border-ring focus-within:ring-2 focus-within:ring-ring aria-[current=page]:border-primary aria-[current=page]:bg-primary/10\"\n        >\n          <button\n            type=\"button\"\n            title={item.title}\n            className=\"h-full min-w-0 flex-1 truncate px-3 text-left text-sm font-semibold\"\n            onClick={() => onSelect(item.id)}\n          >\n            {item.title}\n          </button>\n          {capabilities?.delete ? (\n            <span\n              data-agent-workbench-item-actions\n              className=\"mr-1 shrink-0 opacity-0 transition-opacity group-aria-[current=page]:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100\"\n              onClick={(event) => event.stopPropagation()}\n              onKeyDown={(event) => event.stopPropagation()}\n            >\n              <DropdownMenu>\n                <DropdownMenuTrigger asChild>\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    aria-label={messages.actions}\n                    className=\"size-8 text-muted-foreground\"\n                  >\n                    <Ellipsis className=\"size-4\" aria-hidden=\"true\" />\n                  </Button>\n                </DropdownMenuTrigger>\n                <DropdownMenuContent align=\"end\">\n                  <DropdownMenuItem\n                    className=\"text-destructive-text\"\n                    onSelect={() => onDelete?.(item.id)}\n                  >\n                    <Trash2 className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                    {messages.delete}\n                  </DropdownMenuItem>\n                </DropdownMenuContent>\n              </DropdownMenu>\n            </span>\n          ) : null}\n        </div>\n      ))}\n    </div>\n  );\n\n  const renderItems = (items: AgentWorkbenchSessionItem[]) => (\n    <div className=\"space-y-1\">\n      {items.map((item) => {\n        const percent =\n          item.contextUsage && item.contextUsage.maxTokens > 0\n            ? Math.min(\n                100,\n                Math.round(\n                  (item.contextUsage.usedTokens / item.contextUsage.maxTokens) *\n                    100,\n                ),\n              )\n            : undefined;\n        return (\n          <div\n            key={item.id}\n            aria-current={item.id === selectedSessionId ? \"page\" : undefined}\n            className={cn(\n              \"group flex w-full min-w-0 items-center gap-3 rounded-lg border border-transparent px-3 py-2 text-left hover:bg-muted aria-[current=page]:border-primary aria-[current=page]:bg-muted\",\n              itemClassName,\n            )}\n          >\n            {editingSessionId === item.id ? (\n              <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n                <span className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\">\n                  <SessionAvatar item={item} />\n                </span>\n                <span className=\"min-w-0 flex-1\">\n                  <Input\n                    ref={renameInputRef}\n                    value={editingTitle}\n                    aria-label={messages.rename}\n                    appearance=\"compact\"\n                    className=\"h-6 w-full border-primary px-1.5 text-sm font-medium\"\n                    onChange={(event) => setEditingTitle(event.target.value)}\n                    onClick={(event) => event.stopPropagation()}\n                    onBlur={() => saveRename(item)}\n                    onKeyDown={(event) => {\n                      event.stopPropagation();\n                      if (event.key === \"Enter\") {\n                        event.preventDefault();\n                        saveRename(item);\n                      } else if (event.key === \"Escape\") {\n                        event.preventDefault();\n                        cancelRename();\n                      }\n                    }}\n                  />\n                  <SessionMeta item={item} />\n                </span>\n              </div>\n            ) : (\n              <button\n                type=\"button\"\n                title={item.title}\n                className=\"flex min-w-0 flex-1 items-center gap-3 text-left\"\n                onClick={() => onSelect(item.id)}\n              >\n                <span className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\">\n                  <SessionAvatar item={item} />\n                </span>\n                <span className=\"min-w-0 flex-1\">\n                  <span className=\"block truncate text-sm font-medium\">\n                    {item.title}\n                  </span>\n                  <SessionMeta item={item} />\n                </span>\n              </button>\n            )}\n            <span\n              data-agent-workbench-item-actions\n              className=\"flex shrink-0 items-center gap-1\"\n            >\n              {percent !== undefined && item.status === \"idle\" ? (\n                <span\n                  className=\"text-xs text-foreground\"\n                  aria-label={messages.contextUsage({ percent })}\n                >\n                  {percent}%\n                </span>\n              ) : (\n                <StatusIndicator status={item.status} />\n              )}\n              {capabilities?.pin ? (\n                <Button\n                  type=\"button\"\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  aria-label={item.pinned ? messages.unpin : messages.pin}\n                  className={cn(\n                    \"size-8 text-muted-foreground opacity-0 group-hover:opacity-100\",\n                    item.pinned && \"text-primary opacity-100\",\n                  )}\n                  onClick={(event) => {\n                    event.stopPropagation();\n                    onTogglePin?.(item.id, !item.pinned);\n                  }}\n                >\n                  <Pin\n                    className={cn(\"size-4\", item.pinned && \"fill-current\")}\n                  />\n                </Button>\n              ) : null}\n              {capabilities?.rename || capabilities?.delete ? (\n                <span\n                  onClick={(event) => event.stopPropagation()}\n                  onKeyDown={(event) => event.stopPropagation()}\n                >\n                  <DropdownMenu>\n                    <DropdownMenuTrigger asChild>\n                      <Button\n                        type=\"button\"\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        className=\"size-8\"\n                        aria-label={messages.actions}\n                      >\n                        <Ellipsis className=\"size-4\" aria-hidden=\"true\" />\n                      </Button>\n                    </DropdownMenuTrigger>\n                    <DropdownMenuContent align=\"end\">\n                      {capabilities.rename ? (\n                        <DropdownMenuItem\n                          onSelect={() => {\n                            setEditingSessionId(item.id);\n                            setEditingTitle(item.title);\n                          }}\n                        >\n                          <Pencil className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                          {messages.rename}\n                        </DropdownMenuItem>\n                      ) : null}\n                      {capabilities.delete ? (\n                        <DropdownMenuItem\n                          className=\"text-destructive-text\"\n                          onSelect={() => onDelete?.(item.id)}\n                        >\n                          <Trash2 className=\"mr-2 size-4\" aria-hidden=\"true\" />\n                          {messages.delete}\n                        </DropdownMenuItem>\n                      ) : null}\n                    </DropdownMenuContent>\n                  </DropdownMenu>\n                </span>\n              ) : null}\n            </span>\n          </div>\n        );\n      })}\n    </div>\n  );\n\n  return (\n    <div className={cn(\"space-y-2\", className)}>\n      {showHeading && !groupByMode ? (\n        <h3 className=\"mb-2 px-3 text-xs font-medium text-muted-foreground\">\n          {messages.recentSessions}\n        </h3>\n      ) : null}\n      {variant === \"trend\"\n        ? renderTrendItems(sessions)\n        : groupByMode\n          ? [\n              {\n                id: \"chatbot\",\n                label: messages.chats,\n                icon: MessageSquare,\n                items: sessions.filter((item) => item.mode !== \"work\"),\n              },\n              {\n                id: \"agent\",\n                label: messages.agents,\n                icon: Bot,\n                items: sessions.filter((item) => item.mode === \"work\"),\n              },\n            ].map(({ id, label, icon: Icon, items }) => (\n              <details key={id} open aria-label={label}>\n                <summary className=\"flex h-9 cursor-pointer list-none items-center gap-2 rounded-md px-3 text-sm font-semibold hover:bg-muted\">\n                  <Icon\n                    className=\"size-4 shrink-0 text-muted-foreground\"\n                    aria-hidden=\"true\"\n                  />\n                  <span className=\"min-w-0 truncate\">{label}</span>\n                </summary>\n                {renderItems(items)}\n              </details>\n            ))\n          : renderItems(sessions)}\n    </div>\n  );\n}\n","import {\n  resolveAgentWorkbenchSidebarConfig,\n  type AgentWorkbenchSidebarConfig,\n  type AgentWorkbenchAgentItem,\n  type AgentWorkbenchNavigationViewModel,\n} from '@inf-monkeys-tech/monkeys';\nimport { Blocks, Bot, Pin, Plus, RefreshCw, Settings } from 'lucide-react';\nimport { type ReactNode, useMemo, useState } from 'react';\n\nimport { useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\nimport { AgentWorkbenchSidebarContainer } from './AgentWorkbenchSidebarContainer';\nimport {\n  Button,\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from '../primitives';\nimport {\n  AgentWorkbenchSessionList,\n  AgentWorkbenchSidebarNewSessionButton,\n  AgentWorkbenchSidebarSearch,\n} from './AgentWorkbenchSidebarNavigation';\n\nexport type AgentWorkbenchSidebarIntent =\n  | { type: 'change-tab'; tab: 'agents' | 'sessions' }\n  | { type: 'change-search'; query: string }\n  | { type: 'create-agent' }\n  | { type: 'create-session' }\n  | { type: 'select-agent'; itemId: string }\n  | { type: 'select-session'; sessionId: string }\n  | { type: 'toggle-agent-pin'; itemId: string; pinned: boolean }\n  | { type: 'toggle-session-pin'; sessionId: string; pinned: boolean }\n  | { type: 'rename-session'; sessionId: string; title: string }\n  | { type: 'delete-session'; sessionId: string }\n  | { type: 'retry-agents' }\n  | { type: 'retry-sessions' }\n  | { type: 'open-capabilities' }\n  | { type: 'open-agent-settings' };\n\nexport interface AgentWorkbenchSidebarClassNames {\n  root?: string;\n  search?: string;\n  tabs?: string;\n  body?: string;\n  item?: string;\n  footer?: string;\n}\n\nexport interface AgentWorkbenchSidebarProps {\n  viewModel: AgentWorkbenchNavigationViewModel;\n  navigationMode?: 'agents-and-sessions' | 'sessions-only';\n  config?: AgentWorkbenchSidebarConfig;\n  header?: ReactNode;\n  headerActions?: ReactNode;\n  footer?: ReactNode;\n  className?: string;\n  classNames?: AgentWorkbenchSidebarClassNames;\n  onIntent?: (intent: AgentWorkbenchSidebarIntent) => void;\n}\n\nfunction ItemAvatar({ item }: { item: AgentWorkbenchAgentItem }) {\n  const [failed, setFailed] = useState(false);\n  if (item.iconUrl && !failed) {\n    return (\n      <img\n        src={item.iconUrl}\n        alt=\"\"\n        className=\"size-full object-cover\"\n        onError={() => setFailed(true)}\n      />\n    );\n  }\n  const initial = item.name.trim().charAt(0).toLocaleUpperCase();\n  return initial ? (\n    <span className=\"text-sm font-semibold\">{initial}</span>\n  ) : (\n    <Bot className=\"size-4\" />\n  );\n}\n\nfunction CollectionState({\n  status,\n  empty,\n  noResults,\n  hasItems,\n  query,\n  error,\n  onRetry,\n}: {\n  status: 'loading' | 'ready' | 'error';\n  empty: string;\n  noResults: string;\n  hasItems: boolean;\n  query: string;\n  error?: string;\n  onRetry: () => void;\n}) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  if (status === 'loading' && !hasItems) {\n    return (\n      <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n        {messages.loading}\n      </div>\n    );\n  }\n  if (status === 'error') {\n    return (\n      <div className=\"flex flex-col items-center gap-3 px-3 py-8 text-center\">\n        <p\n          className=\"max-w-full break-words text-sm text-muted-foreground\"\n          role=\"alert\"\n        >\n          {error}\n        </p>\n        <Button\n          type=\"button\"\n          variant=\"ghost\"\n          size=\"sm\"\n          className=\"gap-1.5 px-0 text-sm text-primary hover:text-primary\"\n          onClick={onRetry}\n        >\n          <RefreshCw className=\"size-3.5\" aria-hidden=\"true\" />\n          {messages.retry}\n        </Button>\n      </div>\n    );\n  }\n  if (!hasItems) {\n    return (\n      <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n        {query ? noResults : empty}\n      </div>\n    );\n  }\n  return null;\n}\n\nexport function AgentWorkbenchSidebar({\n  viewModel,\n  navigationMode,\n  config,\n  header,\n  headerActions,\n  footer,\n  className,\n  classNames,\n  onIntent,\n}: AgentWorkbenchSidebarProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.navigation;\n  const resolvedConfig = useMemo(\n    () => resolveAgentWorkbenchSidebarConfig(config),\n    [config],\n  );\n  const visibleSections = useMemo(\n    () => new Set(resolvedConfig.visibleSections),\n    [resolvedConfig.visibleSections],\n  );\n  const sessionsOnly =\n    navigationMode === 'sessions-only' ||\n    (navigationMode === undefined &&\n      resolvedConfig.navigationMode !== 'default');\n  const showAgents = visibleSections.has('agents') && !sessionsOnly;\n  const showSessions = visibleSections.has('sessions');\n  const query = viewModel.searchQuery.trim().toLocaleLowerCase();\n  const agents = useMemo(\n    () =>\n      viewModel.agents.items.filter(\n        (item) =>\n          !query ||\n          `${item.name} ${item.description ?? ''}`\n            .toLocaleLowerCase()\n            .includes(query),\n      ),\n    [query, viewModel.agents.items],\n  );\n  const sessions = useMemo(\n    () =>\n      viewModel.sessions.items.filter(\n        (item) => !query || item.title.toLocaleLowerCase().includes(query),\n      ),\n    [query, viewModel.sessions.items],\n  );\n  return (\n    <Tabs\n      value={sessionsOnly || !showAgents ? 'sessions' : viewModel.activeTab}\n      onValueChange={(value) => {\n        if (!sessionsOnly && (value === 'agents' || value === 'sessions'))\n          onIntent?.({ type: 'change-tab', tab: value });\n      }}\n      className=\"h-full min-h-0\"\n    >\n      <AgentWorkbenchSidebarContainer\n        data-sidebar-width-percent={resolvedConfig.widthPercent}\n        aria-label={messages.tabsLabel}\n        header={visibleSections.has('header') ? header : undefined}\n        search={\n          visibleSections.has('search') ? (\n            <AgentWorkbenchSidebarSearch\n              value={viewModel.searchQuery}\n              label={sessionsOnly ? messages.searchSessions : messages.search}\n              className={classNames?.search}\n              onChange={(query) => onIntent?.({ type: 'change-search', query })}\n            />\n          ) : undefined\n        }\n        actions={\n          (showAgents && showSessions) || headerActions ? (\n            <>\n              {showAgents && showSessions ? (\n                <TabsList\n                  className={cn(\n                    'grid min-w-0 flex-1 grid-cols-2 text-foreground',\n                    classNames?.tabs,\n                  )}\n                  aria-label={messages.tabsLabel}\n                >\n                  <TabsTrigger value=\"agents\">{messages.agents}</TabsTrigger>\n                  <TabsTrigger value=\"sessions\">\n                    {messages.sessions}\n                  </TabsTrigger>\n                </TabsList>\n              ) : null}\n              {headerActions ? (\n                <div className=\"flex shrink-0 items-center\">\n                  {headerActions}\n                </div>\n              ) : null}\n            </>\n          ) : undefined\n        }\n        footer={\n          visibleSections.has('footer') &&\n          ((!sessionsOnly && viewModel.capabilities.manageAgentSettings) ||\n            footer) ? (\n            <div\n              className={cn('border-t border-border p-4', classNames?.footer)}\n            >\n              {!sessionsOnly && viewModel.capabilities.manageAgentSettings ? (\n                <Button\n                  type=\"button\"\n                  variant=\"ghost\"\n                  className=\"h-10 w-full justify-start gap-2 px-3 text-sm\"\n                  onClick={() => onIntent?.({ type: 'open-agent-settings' })}\n                >\n                  <Settings className=\"size-4\" aria-hidden=\"true\" />\n                  {messages.settings}\n                </Button>\n              ) : null}\n              {footer}\n            </div>\n          ) : undefined\n        }\n        bodyScrollable={false}\n        className={className}\n        classNames={{\n          root: classNames?.root,\n          body: 'flex min-h-0 flex-1 flex-col p-0',\n        }}\n      >\n        {showAgents ? (\n          <TabsContent\n            value=\"agents\"\n            data-agent-workbench-scroll-region\n            className={cn(\n              'mt-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain px-4 pb-4',\n              classNames?.body,\n            )}\n          >\n            {viewModel.capabilities.createAgent ? (\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                className=\"mb-3 h-9 w-full justify-start gap-2 px-3 text-sm\"\n                onClick={() => onIntent?.({ type: 'create-agent' })}\n              >\n                <Plus className=\"size-4\" aria-hidden=\"true\" />\n                {messages.newAgent}\n              </Button>\n            ) : null}\n            <h3 className=\"mb-2 px-3 text-xs font-medium text-muted-foreground\">\n              {messages.allAgents}\n            </h3>\n            <CollectionState\n              status={viewModel.agents.status}\n              empty={messages.emptyAgents}\n              noResults={messages.noResults}\n              hasItems={agents.length > 0}\n              query={query}\n              error={viewModel.agents.error}\n              onRetry={() => onIntent?.({ type: 'retry-agents' })}\n            />\n            <div className=\"space-y-1\">\n              {agents.map((item) => (\n                <div\n                  key={item.id}\n                  aria-current={\n                    item.id === viewModel.selectedAgentItem ? 'page' : undefined\n                  }\n                  className={cn(\n                    'group flex w-full min-w-0 items-center gap-3 rounded-lg border border-transparent px-3 py-2 text-left hover:bg-muted aria-[current=page]:border-primary aria-[current=page]:bg-muted',\n                    classNames?.item,\n                  )}\n                >\n                  <button\n                    type=\"button\"\n                    title={item.name}\n                    className=\"flex min-w-0 flex-1 items-center gap-3 text-left\"\n                    onClick={() =>\n                      onIntent?.({ type: 'select-agent', itemId: item.id })\n                    }\n                  >\n                    <span className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\">\n                      <ItemAvatar item={item} />\n                    </span>\n                    <span className=\"min-w-0 flex-1\">\n                      <span className=\"block truncate text-sm font-medium\">\n                        {item.name}\n                      </span>\n                      <span className=\"block truncate text-xs text-foreground/80\">\n                        {item.description || messages.noDescription}\n                      </span>\n                    </span>\n                  </button>\n                  {item.builtIn ? (\n                    <span className=\"shrink-0 rounded-full bg-muted px-1.5 py-1 text-[10px] text-foreground\">\n                      {messages.builtIn}\n                    </span>\n                  ) : null}\n                  {viewModel.capabilities.pinAgents ? (\n                    <Button\n                      type=\"button\"\n                      variant=\"ghost\"\n                      size=\"icon\"\n                      aria-label={item.pinned ? messages.unpin : messages.pin}\n                      className={cn(\n                        'size-8 text-muted-foreground opacity-0 group-hover:opacity-100',\n                        item.pinned && 'text-primary opacity-100',\n                      )}\n                      onClick={(event) => {\n                        event.stopPropagation();\n                        onIntent?.({\n                          type: 'toggle-agent-pin',\n                          itemId: item.id,\n                          pinned: !item.pinned,\n                        });\n                      }}\n                      onKeyDown={(event) => {\n                        if (event.key === 'Enter' || event.key === ' ') {\n                          event.preventDefault();\n                          event.stopPropagation();\n                          onIntent?.({\n                            type: 'toggle-agent-pin',\n                            itemId: item.id,\n                            pinned: !item.pinned,\n                          });\n                        }\n                      }}\n                    >\n                      <Pin\n                        className={cn(\n                          'size-4',\n                          item.pinned && 'fill-current',\n                          item.pinPending && 'animate-pulse',\n                        )}\n                      />\n                    </Button>\n                  ) : null}\n                </div>\n              ))}\n            </div>\n          </TabsContent>\n        ) : null}\n\n        {showSessions ? (\n          <TabsContent\n            value=\"sessions\"\n            data-agent-workbench-scroll-region\n            className={cn(\n              'mt-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain px-4 pb-4',\n              classNames?.body,\n            )}\n          >\n            {visibleSections.has('new-session') &&\n            viewModel.capabilities.createSession ? (\n              <AgentWorkbenchSidebarNewSessionButton\n                label={messages.newSession}\n                onClick={() => onIntent?.({ type: 'create-session' })}\n              />\n            ) : null}\n            {!sessionsOnly && viewModel.capabilities.manageCapabilities ? (\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                className=\"mb-3 h-9 w-full justify-start gap-2 px-3 text-sm\"\n                onClick={() => onIntent?.({ type: 'open-capabilities' })}\n              >\n                <Blocks className=\"size-4\" aria-hidden=\"true\" />\n                {messages.capabilities}\n              </Button>\n            ) : null}\n            <AgentWorkbenchSessionList\n              sessions={sessions}\n              selectedSessionId={viewModel.selectedSessionItem}\n              status={viewModel.sessions.status}\n              error={viewModel.sessions.error}\n              query={query}\n              emptyLabel={messages.emptySessions}\n              noResultsLabel={messages.noResults}\n              groupByMode={sessionsOnly}\n              showHeading={!sessionsOnly}\n              itemClassName={classNames?.item}\n              capabilities={{\n                pin: viewModel.capabilities.pinSessions,\n                rename: viewModel.capabilities.renameSessions,\n                delete: viewModel.capabilities.deleteSessions,\n              }}\n              onSelect={(sessionId) =>\n                onIntent?.({ type: 'select-session', sessionId })\n              }\n              onTogglePin={(sessionId, pinned) =>\n                onIntent?.({ type: 'toggle-session-pin', sessionId, pinned })\n              }\n              onRename={(sessionId, title) =>\n                onIntent?.({ type: 'rename-session', sessionId, title })\n              }\n              onDelete={(sessionId) =>\n                onIntent?.({ type: 'delete-session', sessionId })\n              }\n              onRetry={() => onIntent?.({ type: 'retry-sessions' })}\n            />\n          </TabsContent>\n        ) : null}\n      </AgentWorkbenchSidebarContainer>\n    </Tabs>\n  );\n}\n","import {\n  resolveAgentWorkbenchSidebarConfig,\n  type AgentWorkbenchSessionItem,\n  type AgentWorkbenchSidebarConfig,\n} from \"@inf-monkeys-tech/monkeys\";\nimport {\n  type ReactEventHandler,\n  type ReactNode,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\n\nimport { cn } from \"../layout\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../primitives\";\nimport type { AgentWorkbenchVariant } from \"./appearance\";\nimport { AgentWorkbenchSidebarContainer } from \"./AgentWorkbenchSidebarContainer\";\nimport {\n  AgentWorkbenchSessionList,\n  AgentWorkbenchSidebarNewSessionButton,\n  AgentWorkbenchSidebarSearch,\n} from \"./AgentWorkbenchSidebarNavigation\";\n\nexport interface AgentWorkbenchExploreItem {\n  id: string;\n  title: string;\n  imageUrl?: string;\n  subtitle?: string;\n  mediaVariant?: AgentWorkbenchExploreMediaVariant;\n  mediaTreatment?: AgentWorkbenchExploreMediaTreatment;\n}\n\nexport type AgentWorkbenchExploreMediaVariant =\n  | \"cover\"\n  | \"cover-with-label\"\n  | \"logo\";\n\nexport type AgentWorkbenchExploreMediaTreatment =\n  | \"preserve\"\n  | \"monochrome-light\"\n  | \"invert\";\n\nexport interface AgentWorkbenchExploreCardMediaProps {\n  item: AgentWorkbenchExploreItem;\n  src?: string;\n  className?: string;\n  onError?: ReactEventHandler<HTMLImageElement>;\n}\n\nexport interface AgentWorkbenchExploreGroup {\n  id: string;\n  label: string;\n  items: AgentWorkbenchExploreItem[];\n  itemAspectRatio?: number;\n}\n\nexport interface AgentWorkbenchExploreSidebarLabels {\n  navigation: string;\n  search: string;\n  newSession: string;\n  draftSession: string;\n  emptySessions: string;\n  noResults: string;\n  retry?: string;\n}\n\nexport type AgentWorkbenchExploreSidebarIntent =\n  | { type: \"change-search\"; query: string }\n  | { type: \"create-session\" }\n  | { type: \"retry-sessions\" }\n  | { type: \"select-session\"; sessionId: string }\n  | { type: \"delete-session\"; sessionId: string }\n  | { type: \"change-group\"; groupId: string }\n  | { type: \"select-item\"; groupId: string; item: AgentWorkbenchExploreItem };\n\nexport interface AgentWorkbenchExploreSidebarProps {\n  sessions: AgentWorkbenchSessionItem[];\n  groups?: AgentWorkbenchExploreGroup[];\n  config?: AgentWorkbenchSidebarConfig;\n  labels: AgentWorkbenchExploreSidebarLabels;\n  selectedSessionId?: string;\n  searchQuery?: string;\n  loading?: boolean;\n  error?: string;\n  showDraftSession?: boolean;\n  deleteSessions?: boolean;\n  /** Uses the compact session list treatment for trend workbenches. */\n  variant?: AgentWorkbenchVariant;\n  defaultGroupId?: string;\n  header?: ReactNode;\n  footer?: ReactNode;\n  className?: string;\n  renderItemMedia?: (\n    item: AgentWorkbenchExploreItem,\n    group: AgentWorkbenchExploreGroup,\n  ) => ReactNode;\n  onIntent?: (intent: AgentWorkbenchExploreSidebarIntent) => void;\n}\n\nexport function AgentWorkbenchExploreCardMedia({\n  item,\n  src = item.imageUrl,\n  className,\n  onError,\n}: AgentWorkbenchExploreCardMediaProps) {\n  if (!src) return null;\n\n  const variant = item.mediaVariant ?? \"cover\";\n  const isLogo = variant === \"logo\";\n  const showLabel = variant === \"cover-with-label\";\n  const treatmentClass =\n    item.mediaTreatment === \"monochrome-light\"\n      ? \"brightness-0 invert\"\n      : item.mediaTreatment === \"invert\"\n        ? \"invert\"\n        : \"\";\n\n  return (\n    <>\n      <span\n        className={cn(\n          isLogo\n            ? \"flex size-full items-center justify-center bg-[hsl(var(--monkeys-color-media-surface))] p-5\"\n            : \"block size-full\",\n          className,\n        )}\n      >\n        <img\n          src={src}\n          alt=\"\"\n          className={cn(\n            \"transition-transform duration-300 group-hover:scale-[1.03]\",\n            isLogo\n              ? \"max-h-full max-w-full object-contain\"\n              : \"size-full object-cover\",\n            treatmentClass,\n          )}\n          onError={onError}\n        />\n      </span>\n      {showLabel ? (\n        <span\n          className=\"pointer-events-none absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-8 text-[hsl(var(--monkeys-color-media-foreground))]\"\n          style={{\n            backgroundImage:\n              \"linear-gradient(to top, hsl(var(--monkeys-color-media-overlay) / 0.8), hsl(var(--monkeys-color-media-overlay) / 0.3), transparent)\",\n          }}\n        >\n          <span className=\"block text-base font-semibold leading-tight\">\n            {item.title}\n          </span>\n          {item.subtitle ? (\n            <span className=\"mt-0.5 block text-[11px] leading-tight opacity-75\">\n              {item.subtitle}\n            </span>\n          ) : null}\n        </span>\n      ) : null}\n    </>\n  );\n}\n\nexport function AgentWorkbenchExploreSidebar({\n  sessions,\n  groups: configuredGroups,\n  config,\n  labels,\n  selectedSessionId,\n  searchQuery = \"\",\n  loading = false,\n  error,\n  showDraftSession = !selectedSessionId,\n  deleteSessions = false,\n  variant = \"default\",\n  defaultGroupId,\n  header,\n  footer,\n  className,\n  renderItemMedia,\n  onIntent,\n}: AgentWorkbenchExploreSidebarProps) {\n  const resolvedConfig = useMemo(\n    () => resolveAgentWorkbenchSidebarConfig(config),\n    [config],\n  );\n  const visibleSections = useMemo(\n    () => new Set(resolvedConfig.visibleSections),\n    [resolvedConfig.visibleSections],\n  );\n  const groups = configuredGroups?.length\n    ? configuredGroups\n    : resolvedConfig.groups;\n  const resolvedDefaultGroupId =\n    defaultGroupId ?? resolvedConfig.defaultGroupId;\n  const [activeGroupId, setActiveGroupId] = useState(\n    resolvedDefaultGroupId ?? groups[0]?.id ?? \"\",\n  );\n  const activeGroup =\n    groups.find((group) => group.id === activeGroupId) ?? groups[0];\n  const normalizedQuery = searchQuery.trim().toLocaleLowerCase();\n  const draftVisible =\n    showDraftSession &&\n    (!normalizedQuery ||\n      labels.draftSession.toLocaleLowerCase().includes(normalizedQuery));\n  const filteredSessions = useMemo(\n    () =>\n      sessions.filter(\n        (session) =>\n          !normalizedQuery ||\n          session.title.toLocaleLowerCase().includes(normalizedQuery),\n      ),\n    [normalizedQuery, sessions],\n  );\n\n  useEffect(() => {\n    if (groups.some((group) => group.id === activeGroupId)) return;\n    setActiveGroupId(resolvedDefaultGroupId ?? groups[0]?.id ?? \"\");\n  }, [activeGroupId, groups, resolvedDefaultGroupId]);\n\n  const changeGroup = (groupId: string) => {\n    setActiveGroupId(groupId);\n    onIntent?.({ type: \"change-group\", groupId });\n  };\n\n  const groupNavigation =\n    visibleSections.has(\"groups\") && activeGroup ? (\n      <div className=\"border-t border-border px-4 pb-4 pt-3\">\n        <Tabs value={activeGroup.id} onValueChange={changeGroup}>\n          <TabsList\n            className=\"grid h-10 w-full rounded-[var(--radius)] bg-muted p-0.5 text-foreground\"\n            style={{\n              gridTemplateColumns: `repeat(${groups.length}, minmax(0, 1fr))`,\n            }}\n          >\n            {groups.map((group) => (\n              <TabsTrigger\n                key={group.id}\n                value={group.id}\n                className=\"rounded-md text-sm font-semibold text-foreground data-[state=active]:border data-[state=active]:border-border data-[state=active]:bg-background\"\n              >\n                {group.label}\n              </TabsTrigger>\n            ))}\n          </TabsList>\n          {groups.map((group) => (\n            <TabsContent key={group.id} value={group.id} className=\"mt-3\">\n              <div className=\"grid grid-cols-2 gap-2\">\n                {group.items.map((item) => (\n                  <button\n                    key={item.id}\n                    type=\"button\"\n                    aria-label={item.title}\n                    className=\"group relative aspect-[1.27] overflow-hidden rounded-[var(--radius)] border border-border bg-card text-left transition hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n                    style={\n                      Number.isFinite(group.itemAspectRatio) &&\n                      Number(group.itemAspectRatio) > 0\n                        ? { aspectRatio: group.itemAspectRatio }\n                        : undefined\n                    }\n                    onClick={() =>\n                      onIntent?.({\n                        type: \"select-item\",\n                        groupId: group.id,\n                        item,\n                      })\n                    }\n                  >\n                    {renderItemMedia?.(item, group) ?? (\n                      <AgentWorkbenchExploreCardMedia item={item} />\n                    )}\n                  </button>\n                ))}\n              </div>\n            </TabsContent>\n          ))}\n        </Tabs>\n      </div>\n    ) : undefined;\n\n  return (\n    <AgentWorkbenchSidebarContainer\n      data-sidebar-style=\"explore\"\n      data-sidebar-width-percent={resolvedConfig.widthPercent}\n      aria-label={labels.navigation}\n      variant={variant}\n      density={variant === \"trend\" ? \"compact\" : undefined}\n      header={visibleSections.has(\"header\") ? header : undefined}\n      search={\n        visibleSections.has(\"search\") ? (\n          <AgentWorkbenchSidebarSearch\n            value={searchQuery}\n            label={labels.search}\n            variant={variant}\n            onChange={(query) => onIntent?.({ type: \"change-search\", query })}\n          />\n        ) : undefined\n      }\n      primaryAction={\n        visibleSections.has(\"new-session\") ? (\n          <AgentWorkbenchSidebarNewSessionButton\n            label={labels.newSession}\n            variant={variant}\n            onClick={() => onIntent?.({ type: \"create-session\" })}\n          />\n        ) : undefined\n      }\n      groups={groupNavigation}\n      footer={visibleSections.has(\"footer\") ? footer : undefined}\n      bodyProps={{ \"data-agent-workbench-session-scroll-region\": \"\" }}\n      className={className}\n      classNames={{ body: \"min-h-[160px] flex-[0_1_280px]\" }}\n    >\n      {visibleSections.has(\"sessions\") ? (\n        <div className=\"space-y-2\">\n          {draftVisible ? (\n            <button\n              type=\"button\"\n              aria-current=\"page\"\n              className=\"block h-10 w-full min-w-0 truncate rounded-[var(--radius)] border border-primary bg-primary/10 px-3 text-left text-sm font-semibold text-foreground\"\n              onClick={() => onIntent?.({ type: \"create-session\" })}\n            >\n              {labels.draftSession}\n            </button>\n          ) : null}\n          {filteredSessions.length > 0 || !draftVisible || loading || error ? (\n            <AgentWorkbenchSessionList\n              sessions={filteredSessions}\n              selectedSessionId={selectedSessionId}\n              status={error ? \"error\" : loading ? \"loading\" : \"ready\"}\n              error={error}\n              query={normalizedQuery}\n              emptyLabel={labels.emptySessions}\n              noResultsLabel={labels.noResults}\n              retryLabel={labels.retry}\n              groupByMode={resolvedConfig.navigationMode !== \"default\"}\n              variant={variant}\n              capabilities={{ delete: deleteSessions }}\n              onSelect={(sessionId) =>\n                onIntent?.({ type: \"select-session\", sessionId })\n              }\n              onDelete={(sessionId) =>\n                onIntent?.({ type: \"delete-session\", sessionId })\n              }\n              onRetry={\n                labels.retry\n                  ? () => onIntent?.({ type: \"retry-sessions\" })\n                  : undefined\n              }\n            />\n          ) : null}\n        </div>\n      ) : null}\n    </AgentWorkbenchSidebarContainer>\n  );\n}\n","import type {\n  AgentSessionCapabilities,\n  AgentSessionEvent,\n  AgentSessionViewModel,\n} from '@inf-monkeys-tech/monkeys';\n\ntype SessionEventType = AgentSessionEvent['eventType'];\nexport type AgentWorkbenchEventOf<Type extends SessionEventType> = Extract<\n  AgentSessionEvent,\n  { eventType: Type }\n>;\n\nconst EVENT_CAPABILITIES = {\n  reasoning: 'reasoning',\n  plan: 'plan',\n  task: 'tasks',\n  tool: 'tools',\n  approval: 'approval',\n  artifact: 'artifacts',\n  usage: 'usage',\n} as const satisfies Partial<\n  Record<SessionEventType, keyof AgentSessionCapabilities>\n>;\n\nexport interface AgentWorkbenchActivityModel {\n  mode: AgentSessionViewModel['snapshot']['mode'];\n  status: AgentSessionViewModel['status'];\n  reasoning: AgentWorkbenchEventOf<'reasoning'>[];\n  plans: AgentWorkbenchEventOf<'plan'>[];\n  tasks: AgentWorkbenchEventOf<'task'>[];\n  tools: AgentWorkbenchEventOf<'tool'>[];\n  approvals: AgentWorkbenchEventOf<'approval'>[];\n  artifacts: AgentWorkbenchEventOf<'artifact'>[];\n  usage?: AgentWorkbenchEventOf<'usage'>;\n  run?: AgentWorkbenchEventOf<'status'> & { resolvedDurationMs?: number };\n}\n\nfunction projectRun(events: AgentSessionEvent[]): AgentWorkbenchActivityModel['run'] {\n  const statuses = events.filter(\n    (event): event is AgentWorkbenchEventOf<'status'> => event.eventType === 'status',\n  );\n  const run = statuses.at(-1);\n  if (!run) return undefined;\n  if (run.payload.status !== 'stopped' || run.payload.durationMs !== undefined) return run;\n\n  const runStatuses = run.runId\n    ? statuses.filter((event) => event.runId === run.runId && event.sequence <= run.sequence)\n    : statuses.filter((event) => event.sequence <= run.sequence);\n  let previousStoppedIndex = -1;\n  for (let index = runStatuses.length - 1; index >= 0; index -= 1) {\n    const event = runStatuses[index];\n    if (event.sequence < run.sequence && event.payload.status === 'stopped') {\n      previousStoppedIndex = index;\n      break;\n    }\n  }\n  const started = runStatuses\n    .slice(previousStoppedIndex + 1)\n    .reverse()\n    .find((event) => event.payload.status === 'running' || event.payload.status === 'queued');\n  const startedAt = started?.payload.startedAt ?? started?.occurredAt;\n  const stoppedAt = run.payload.stoppedAt ?? run.occurredAt;\n  if (!startedAt || !stoppedAt) return run;\n  const durationMs = Date.parse(stoppedAt) - Date.parse(startedAt);\n  return Number.isFinite(durationMs) && durationMs >= 0\n    ? { ...run, resolvedDurationMs: durationMs }\n    : run;\n}\n\nfunction isVisible(\n  event: AgentSessionEvent,\n  capabilities: AgentSessionCapabilities,\n): boolean {\n  const capability = EVENT_CAPABILITIES[\n    event.eventType as keyof typeof EVENT_CAPABILITIES\n  ];\n  return capability ? capabilities[capability] === true : true;\n}\n\nfunction latestBy<Type extends SessionEventType>(\n  events: AgentSessionEvent[],\n  eventType: Type,\n  key: (event: AgentWorkbenchEventOf<Type>) => string,\n): AgentWorkbenchEventOf<Type>[] {\n  const latest = new Map<string, AgentWorkbenchEventOf<Type>>();\n  for (const event of events) {\n    if (event.eventType !== eventType) continue;\n    const typedEvent = event as AgentWorkbenchEventOf<Type>;\n    latest.set(key(typedEvent), typedEvent);\n  }\n  return [...latest.values()].sort(\n    (left, right) => left.sequence - right.sequence,\n  );\n}\n\nexport function createAgentWorkbenchActivityModel(\n  viewModel: AgentSessionViewModel,\n): AgentWorkbenchActivityModel {\n  const visibleEvents = viewModel.events.filter((event) =>\n    isVisible(event, viewModel.snapshot.capabilities),\n  );\n\n  return {\n    mode: viewModel.snapshot.mode,\n    status: viewModel.status,\n    reasoning: latestBy(\n      visibleEvents,\n      'reasoning',\n      (event) => event.payload.reasoningId,\n    ),\n    plans: latestBy(\n      visibleEvents,\n      'plan',\n      (event) => event.payload.planId,\n    ),\n    tasks: latestBy(\n      visibleEvents,\n      'task',\n      (event) => event.payload.taskId,\n    ),\n    tools: latestBy(\n      visibleEvents,\n      'tool',\n      (event) => event.payload.toolCallId,\n    ),\n    approvals: latestBy(\n      visibleEvents,\n      'approval',\n      (event) => event.payload.approvalId,\n    ),\n    artifacts: latestBy(\n      visibleEvents,\n      'artifact',\n      (event) => event.payload.artifactId,\n    ),\n    usage: [...visibleEvents]\n      .reverse()\n      .find(\n        (event): event is AgentWorkbenchEventOf<'usage'> =>\n          event.eventType === 'usage',\n      ),\n    run: projectRun(visibleEvents),\n  };\n}\n","import { Check, Clock3, X } from \"lucide-react\";\n\nimport { useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport { Button } from \"../primitives\";\nimport type { AgentWorkbenchEventOf } from \"./activity-model\";\n\nexport type AgentWorkbenchApprovalData =\n  AgentWorkbenchEventOf<\"approval\">[\"payload\"];\n\nexport interface AgentWorkbenchApprovalIntent {\n  approvalId: string;\n  approved: boolean;\n}\n\nexport interface AgentWorkbenchApprovalProps {\n  approval: AgentWorkbenchApprovalData;\n  className?: string;\n  onDecision?: (intent: AgentWorkbenchApprovalIntent) => void;\n}\n\nfunction JsonValue({ value }: { value: unknown }) {\n  if (value === undefined) return null;\n  const content =\n    typeof value === \"string\" ? value : JSON.stringify(value, null, 2);\n  return (\n    <pre\n      className=\"max-h-48 max-w-full overflow-auto overscroll-contain whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs text-foreground [overflow-wrap:anywhere]\"\n      tabIndex={0}\n    >\n      {content}\n    </pre>\n  );\n}\n\nexport function AgentWorkbenchApproval({\n  approval,\n  className,\n  onDecision,\n}: AgentWorkbenchApprovalProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.approval;\n  const requested = approval.status === \"requested\";\n  const approved = approval.status === \"approved\";\n\n  return (\n    <article\n      className={cn(\n        \"min-w-0 overflow-hidden rounded-lg border border-border bg-card p-3 text-card-foreground\",\n        className,\n      )}\n      data-agent-approval-status={approval.status}\n    >\n      <div className=\"flex items-start gap-3\">\n        {requested ? (\n          <Clock3\n            className=\"mt-0.5 size-4 shrink-0 text-warning-foreground\"\n            aria-hidden=\"true\"\n          />\n        ) : approved ? (\n          <Check\n            className=\"mt-0.5 size-4 shrink-0 text-success\"\n            aria-hidden=\"true\"\n          />\n        ) : (\n          <X\n            className=\"mt-0.5 size-4 shrink-0 text-destructive-text\"\n            aria-hidden=\"true\"\n          />\n        )}\n        <div className=\"min-w-0 flex-1\">\n          <h3 className=\"break-words text-sm font-medium\">{approval.title}</h3>\n          {approval.description ? (\n            <p\n              tabIndex={0}\n              className=\"mt-1 max-h-32 overflow-auto whitespace-pre-wrap break-words text-sm text-muted-foreground [overflow-wrap:anywhere]\"\n            >\n              {approval.description}\n            </p>\n          ) : null}\n          {approval.requestedAction !== undefined ? (\n            <div className=\"mt-3 min-w-0\">\n              <JsonValue value={approval.requestedAction} />\n            </div>\n          ) : null}\n          {requested ? (\n            <div className=\"mt-3 flex flex-wrap gap-2\">\n              <Button\n                type=\"button\"\n                size=\"sm\"\n                className=\"h-auto px-3 py-1.5 text-sm\"\n                disabled={!onDecision}\n                onClick={() =>\n                  onDecision?.({\n                    approvalId: approval.approvalId,\n                    approved: true,\n                  })\n                }\n              >\n                {messages.approve}\n              </Button>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"sm\"\n                className=\"h-auto px-3 py-1.5 text-sm\"\n                disabled={!onDecision}\n                onClick={() =>\n                  onDecision?.({\n                    approvalId: approval.approvalId,\n                    approved: false,\n                  })\n                }\n              >\n                {messages.reject}\n              </Button>\n            </div>\n          ) : (\n            <p className=\"mt-2 text-xs text-muted-foreground\">\n              {approved ? messages.approved : messages.rejected}\n            </p>\n          )}\n        </div>\n      </div>\n    </article>\n  );\n}\n","import { CheckCircle2, ChevronDown, Clock3, Loader2, TerminalSquare, XCircle } from 'lucide-react';\nimport { useState } from 'react';\n\nimport { useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\nimport type { AgentWorkbenchEventOf } from './activity-model';\n\nexport interface AgentWorkbenchToolClassNames {\n  root?: string;\n  trigger?: string;\n  content?: string;\n  input?: string;\n  output?: string;\n}\n\nexport interface AgentWorkbenchToolProps {\n  event: AgentWorkbenchEventOf<'tool'>;\n  expanded?: boolean;\n  defaultExpanded?: boolean;\n  className?: string;\n  classNames?: AgentWorkbenchToolClassNames;\n  onExpandedChange?: (expanded: boolean) => void;\n}\n\nfunction JsonValue({ value, className }: { value: unknown; className?: string }) {\n  if (value === undefined) return null;\n  const content = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\n  return (\n    <pre\n      tabIndex={0}\n      className={cn(\n        'max-h-64 max-w-full overflow-auto overscroll-contain whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs text-foreground [overflow-wrap:anywhere]',\n        className,\n      )}\n    >\n      {content}\n    </pre>\n  );\n}\n\nfunction ToolStatus({ status }: { status: AgentWorkbenchEventOf<'tool'>['payload']['status'] }) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.tool.status;\n  const commonClassName = 'size-3.5 shrink-0';\n\n  if (status === 'pending') {\n    return <Clock3 className={commonClassName} aria-hidden=\"true\" />;\n  }\n  if (status === 'running') {\n    return <Loader2 className={cn(commonClassName, 'animate-spin')} aria-hidden=\"true\" />;\n  }\n  if (status === 'completed') {\n    return <CheckCircle2 className={cn(commonClassName, 'text-primary')} aria-hidden=\"true\" />;\n  }\n  return <XCircle className={cn(commonClassName, 'text-destructive-text')} aria-hidden=\"true\" />;\n}\n\nexport function AgentWorkbenchTool({\n  event,\n  expanded,\n  defaultExpanded = event.payload.status === 'failed',\n  className,\n  classNames,\n  onExpandedChange,\n}: AgentWorkbenchToolProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.tool;\n  const [uncontrolledExpanded, setUncontrolledExpanded] = useState(defaultExpanded);\n  const isControlled = expanded !== undefined;\n  const isExpanded = expanded ?? uncontrolledExpanded;\n  const status = event.payload.status;\n  const setExpanded = (nextExpanded: boolean) => {\n    if (!isControlled) setUncontrolledExpanded(nextExpanded);\n    onExpandedChange?.(nextExpanded);\n  };\n\n  return (\n    <details\n      open={isExpanded}\n      className={cn(\n        'group min-w-0 overflow-hidden rounded-lg border border-border bg-card text-card-foreground',\n        classNames?.root,\n        className,\n      )}\n      data-tool-status={status}\n    >\n      <summary\n        className={cn(\n          'flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden',\n          classNames?.trigger,\n        )}\n        onClick={(event) => {\n          event.preventDefault();\n          setExpanded(!isExpanded);\n        }}\n      >\n        <TerminalSquare className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n        <span className=\"min-w-0 flex-1 truncate font-medium\">{event.payload.toolName}</span>\n        <span className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-foreground\">\n          <ToolStatus status={status} />\n          {messages.status[status]}\n        </span>\n        <ChevronDown\n          className=\"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180\"\n          aria-hidden=\"true\"\n        />\n      </summary>\n      <div className={cn('min-w-0 space-y-3 border-t border-border px-3 py-3 text-sm', classNames?.content)}>\n        {event.payload.input !== undefined ? (\n          <div className=\"space-y-1.5\">\n            <div className=\"text-xs font-medium text-muted-foreground\">{messages.input}</div>\n            <JsonValue value={event.payload.input} className={classNames?.input} />\n          </div>\n        ) : null}\n        {event.payload.output !== undefined ? (\n          <div className=\"space-y-1.5\">\n            <div className=\"text-xs font-medium text-muted-foreground\">{messages.output}</div>\n            <JsonValue value={event.payload.output} className={classNames?.output} />\n          </div>\n        ) : null}\n        {event.payload.error ? (\n          <p\n            tabIndex={0}\n            className=\"max-h-32 overflow-auto whitespace-pre-wrap break-words text-sm text-destructive-text [overflow-wrap:anywhere]\"\n            role=\"alert\"\n          >\n            {event.payload.error}\n          </p>\n        ) : null}\n      </div>\n    </details>\n  );\n}\n","import type { AgentSessionViewModel } from \"@inf-monkeys-tech/monkeys\";\nimport {\n  CheckCircle2,\n  ChevronDown,\n  Circle,\n  CircleStop,\n  Clock3,\n  Download,\n  FileOutput,\n  Loader2,\n  XCircle,\n} from \"lucide-react\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nimport { useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport { Button } from \"../primitives\";\nimport {\n  createAgentWorkbenchActivityModel,\n  type AgentWorkbenchEventOf,\n} from \"./activity-model\";\nimport {\n  AgentWorkbenchApproval,\n  type AgentWorkbenchApprovalIntent,\n} from \"./AgentWorkbenchApproval\";\nimport { AgentWorkbenchTool } from \"./AgentWorkbenchTool\";\n\nexport interface AgentWorkbenchArtifactIntent {\n  artifactId: string;\n  name: string;\n  url: string;\n}\n\nexport interface AgentWorkbenchActivityClassNames {\n  root?: string;\n  item?: string;\n  trigger?: string;\n  content?: string;\n  approval?: string;\n  artifact?: string;\n  usage?: string;\n}\n\nexport interface AgentWorkbenchActivityProps {\n  viewModel?: AgentSessionViewModel;\n  ariaLabel?: string;\n  hiddenToolCallIds?: ReadonlySet<string>;\n  hideReasoning?: boolean;\n  hideStoppedRun?: boolean;\n  className?: string;\n  classNames?: AgentWorkbenchActivityClassNames;\n  onApprovalDecision?: (intent: AgentWorkbenchApprovalIntent) => void;\n  onArtifactOpen?: (intent: AgentWorkbenchArtifactIntent) => void;\n}\n\ninterface ActivityDetailsProps {\n  icon: ComponentType<{ className?: string }>;\n  title: ReactNode;\n  open?: boolean;\n  streaming?: boolean;\n  className?: string;\n  triggerClassName?: string;\n  contentClassName?: string;\n  children: ReactNode;\n}\n\nfunction ActivityDetails({\n  icon: Icon,\n  title,\n  open,\n  streaming,\n  className,\n  triggerClassName,\n  contentClassName,\n  children,\n}: ActivityDetailsProps) {\n  return (\n    <details\n      className={cn(\n        \"group min-w-0 overflow-hidden rounded-lg border border-border bg-card text-card-foreground\",\n        className,\n      )}\n      open={open}\n    >\n      <summary\n        className={cn(\n          \"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm font-medium outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden\",\n          triggerClassName,\n        )}\n      >\n        {streaming ? (\n          <Loader2\n            className=\"size-4 shrink-0 animate-spin\"\n            aria-hidden=\"true\"\n          />\n        ) : (\n          <Icon\n            className=\"size-4 shrink-0 text-muted-foreground\"\n            aria-hidden=\"true\"\n          />\n        )}\n        <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n        <ChevronDown\n          className=\"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180\"\n          aria-hidden=\"true\"\n        />\n      </summary>\n      <div\n        className={cn(\n          \"min-w-0 border-t border-border px-3 py-3 text-sm\",\n          contentClassName,\n        )}\n      >\n        {children}\n      </div>\n    </details>\n  );\n}\n\nfunction StatusIcon({ status }: { status: string }) {\n  if (status === \"completed\" || status === \"passed\") {\n    return <CheckCircle2 className=\"size-4 text-success\" aria-hidden=\"true\" />;\n  }\n  if (status === \"failed\") {\n    return (\n      <XCircle className=\"size-4 text-destructive-text\" aria-hidden=\"true\" />\n    );\n  }\n  if (status === \"running\") {\n    return (\n      <Clock3\n        className=\"size-4 animate-pulse text-warning-foreground\"\n        aria-hidden=\"true\"\n      />\n    );\n  }\n  return <Circle className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />;\n}\n\nfunction formatDuration(durationMs: number): string {\n  if (durationMs < 1_000) return \"<1s\";\n  const totalSeconds = Math.floor(durationMs / 1_000);\n  const minutes = Math.floor(totalSeconds / 60);\n  const seconds = totalSeconds % 60;\n  return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;\n}\n\nfunction RunStatus({\n  event,\n}: {\n  event: AgentWorkbenchEventOf<\"status\"> & { resolvedDurationMs?: number };\n}) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench;\n  const status = event.payload.status;\n  if (status !== \"stopping\" && status !== \"stopped\") return null;\n\n  return (\n    <div\n      className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n      role=\"status\"\n    >\n      {status === \"stopping\" ? (\n        <Loader2 className=\"size-4 animate-spin\" aria-hidden=\"true\" />\n      ) : (\n        <CircleStop className=\"size-4\" aria-hidden=\"true\" />\n      )}\n      <span>\n        {status === \"stopping\"\n          ? messages.run.stopping\n          : messages.run.stoppedAfter({\n              duration: formatDuration(\n                event.payload.durationMs ?? event.resolvedDurationMs ?? 0,\n              ),\n            })}\n      </span>\n    </div>\n  );\n}\n\nexport function AgentWorkbenchActivity({\n  viewModel,\n  ariaLabel,\n  hiddenToolCallIds,\n  hideReasoning = false,\n  hideStoppedRun = false,\n  className,\n  classNames,\n  onApprovalDecision,\n  onArtifactOpen,\n}: AgentWorkbenchActivityProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench;\n  if (!viewModel) return null;\n\n  const activity = createAgentWorkbenchActivityModel(viewModel);\n  const reasoning = hideReasoning ? [] : activity.reasoning;\n  const tools = activity.tools.filter(\n    (event) => !hiddenToolCallIds?.has(event.payload.toolCallId),\n  );\n  const approvals = activity.approvals.filter(\n    (event) =>\n      !event.payload.toolCallId ||\n      !hiddenToolCallIds?.has(event.payload.toolCallId),\n  );\n  const usage = activity.usage?.payload;\n  const contextWindow =\n    typeof usage?.contextWindow === \"number\" && usage.contextWindow > 0\n      ? usage.contextWindow\n      : undefined;\n  const showRun =\n    activity.run?.payload.status === \"stopping\" ||\n    (activity.run?.payload.status === \"stopped\" && !hideStoppedRun);\n  const hasActivity =\n    reasoning.length > 0 ||\n    activity.plans.length > 0 ||\n    activity.tasks.length > 0 ||\n    tools.length > 0 ||\n    approvals.length > 0 ||\n    activity.artifacts.length > 0 ||\n    showRun ||\n    contextWindow !== undefined;\n  if (!hasActivity) return null;\n\n  return (\n    <section\n      className={cn(\"space-y-3\", classNames?.root, className)}\n      aria-label={ariaLabel ?? messages.label}\n      data-agent-workbench-mode={activity.mode}\n      data-agent-workbench-status={activity.status}\n    >\n      {reasoning.map((event) => (\n        <ActivityDetails\n          key={event.payload.reasoningId}\n          icon={Circle}\n          title={messages.reasoning}\n          open={event.payload.status === \"streaming\"}\n          streaming={event.payload.status === \"streaming\"}\n          className={classNames?.item}\n          triggerClassName={classNames?.trigger}\n          contentClassName={classNames?.content}\n        >\n          <div\n            tabIndex={0}\n            className=\"max-h-64 overflow-auto whitespace-pre-wrap break-words text-muted-foreground [overflow-wrap:anywhere]\"\n          >\n            {event.payload.text}\n          </div>\n        </ActivityDetails>\n      ))}\n\n      {activity.plans.map((event) => (\n        <ActivityDetails\n          key={event.payload.planId}\n          icon={Circle}\n          title={event.payload.title || messages.plan}\n          open={event.payload.status === \"running\"}\n          streaming={event.payload.status === \"running\"}\n          className={classNames?.item}\n          triggerClassName={classNames?.trigger}\n          contentClassName={classNames?.content}\n        >\n          <ol className=\"space-y-2\">\n            {event.payload.steps.map((step) => (\n              <li key={step.id} className=\"flex min-w-0 items-start gap-2\">\n                <StatusIcon status={step.status} />\n                <span className=\"min-w-0 break-words [overflow-wrap:anywhere]\">\n                  {step.title}\n                </span>\n              </li>\n            ))}\n          </ol>\n        </ActivityDetails>\n      ))}\n\n      {activity.tasks.map((event) => (\n        <ActivityDetails\n          key={event.payload.taskId}\n          icon={Circle}\n          title={event.payload.title}\n          open={event.payload.status === \"running\"}\n          streaming={event.payload.status === \"running\"}\n          className={classNames?.item}\n          triggerClassName={classNames?.trigger}\n          contentClassName={classNames?.content}\n        >\n          <div className=\"flex items-start gap-2\">\n            <StatusIcon status={event.payload.status} />\n            <span className=\"min-w-0 whitespace-pre-wrap break-words text-muted-foreground [overflow-wrap:anywhere]\">\n              {event.payload.detail || messages.taskNoDetail}\n            </span>\n          </div>\n        </ActivityDetails>\n      ))}\n\n      {tools.map((event) => (\n        <AgentWorkbenchTool\n          key={event.payload.toolCallId}\n          event={event}\n          defaultExpanded={event.payload.status === \"failed\"}\n          classNames={{\n            root: classNames?.item,\n            trigger: classNames?.trigger,\n            content: classNames?.content,\n          }}\n        />\n      ))}\n\n      {approvals.map((event) => {\n        return (\n          <AgentWorkbenchApproval\n            key={event.payload.approvalId}\n            approval={event.payload}\n            className={classNames?.approval}\n            onDecision={onApprovalDecision}\n          />\n        );\n      })}\n\n      {activity.artifacts.map((event) => {\n        const canOpen = Boolean(event.payload.url && onArtifactOpen);\n        return (\n          <article\n            key={event.payload.artifactId}\n            className={cn(\n              \"flex items-center gap-3 rounded-lg border border-border bg-card p-3 text-card-foreground\",\n              classNames?.artifact,\n            )}\n          >\n            <FileOutput\n              className=\"size-4 shrink-0 text-muted-foreground\"\n              aria-hidden=\"true\"\n            />\n            <div className=\"min-w-0 flex-1\">\n              <div className=\"truncate text-sm font-medium\">\n                {event.payload.name}\n              </div>\n              <div className=\"text-xs text-muted-foreground\">\n                {messages.artifact[event.payload.status]}\n              </div>\n            </div>\n            {event.payload.url ? (\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                size=\"icon\"\n                className=\"text-muted-foreground hover:text-foreground\"\n                aria-label={messages.artifact.open({\n                  name: event.payload.name,\n                })}\n                disabled={!canOpen}\n                onClick={() => {\n                  if (!event.payload.url) return;\n                  onArtifactOpen?.({\n                    artifactId: event.payload.artifactId,\n                    name: event.payload.name,\n                    url: event.payload.url,\n                  });\n                }}\n              >\n                <Download className=\"size-4\" aria-hidden=\"true\" />\n              </Button>\n            ) : null}\n          </article>\n        );\n      })}\n\n      {showRun && activity.run ? <RunStatus event={activity.run} /> : null}\n\n      {usage && contextWindow !== undefined ? (\n        <div\n          className={cn(\"flex justify-end\", classNames?.usage)}\n          aria-label={messages.usage.label}\n        >\n          <span className=\"rounded-full border border-border bg-muted px-2.5 py-1 text-xs text-foreground\">\n            {messages.usage.context({\n              used: usage.contextTokens ?? usage.totalTokens ?? 0,\n              total: contextWindow,\n            })}\n          </span>\n        </div>\n      ) : null}\n    </section>\n  );\n}\n","import type {\n  AgentSessionCapabilities,\n  AgentSessionEvent,\n  AgentSessionViewModel,\n} from '@inf-monkeys-tech/monkeys';\n\nimport type { AgentWorkbenchEventOf } from './activity-model';\n\nconst WORKSPACE_CAPABILITIES = {\n  diff: 'diff',\n  'workspace-file': 'workspaceFiles',\n  terminal: 'terminal',\n  'test-result': 'testResults',\n  artifact: 'artifacts',\n} as const satisfies Partial<\n  Record<AgentSessionEvent['eventType'], keyof AgentSessionCapabilities>\n>;\n\nexport interface AgentWorkbenchTerminalModel {\n  terminalId: string;\n  stdin: string;\n  stdout: string;\n  stderr: string;\n  status: string;\n  exitCode?: number;\n  sequence: number;\n}\n\nexport interface AgentWorkbenchDetailsModel {\n  mode: AgentSessionViewModel['snapshot']['mode'];\n  modelId: string;\n  permissionProfile?: AgentSessionViewModel['snapshot']['permissionProfile'];\n  status: AgentSessionViewModel['status'];\n  sessionId: string;\n  capabilities: AgentSessionCapabilities;\n  resumable: boolean;\n  summary?: AgentWorkbenchEventOf<'summary'>;\n  error?: AgentWorkbenchEventOf<'error'>;\n  run?: AgentWorkbenchEventOf<'status'>;\n  usage?: AgentWorkbenchEventOf<'usage'>;\n  workspace: {\n    diffs: AgentWorkbenchEventOf<'diff'>[];\n    files: AgentWorkbenchEventOf<'workspace-file'>[];\n    terminals: AgentWorkbenchTerminalModel[];\n    tests: AgentWorkbenchEventOf<'test-result'>[];\n    artifacts: AgentWorkbenchEventOf<'artifact'>[];\n  };\n}\n\nfunction latestBy<Type extends AgentSessionEvent['eventType']>(\n  events: AgentSessionEvent[],\n  eventType: Type,\n  key: (event: AgentWorkbenchEventOf<Type>) => string,\n): AgentWorkbenchEventOf<Type>[] {\n  const latest = new Map<string, AgentWorkbenchEventOf<Type>>();\n  for (const event of events) {\n    if (event.eventType !== eventType) continue;\n    const typedEvent = event as AgentWorkbenchEventOf<Type>;\n    latest.set(key(typedEvent), typedEvent);\n  }\n  return [...latest.values()].sort(\n    (left, right) => left.sequence - right.sequence,\n  );\n}\n\nfunction projectTerminals(\n  events: AgentWorkbenchEventOf<'terminal'>[],\n): AgentWorkbenchTerminalModel[] {\n  const terminals = new Map<string, AgentWorkbenchTerminalModel>();\n  for (const event of events) {\n    const current = terminals.get(event.payload.terminalId) ?? {\n      terminalId: event.payload.terminalId,\n      stdin: '',\n      stdout: '',\n      stderr: '',\n      status: '',\n      sequence: event.sequence,\n    };\n    const stream = event.payload.stream;\n    terminals.set(event.payload.terminalId, {\n      ...current,\n      ...(stream === 'status'\n        ? { status: event.payload.chunk }\n        : { [stream]: `${current[stream]}${event.payload.chunk}` }),\n      ...(event.payload.exitCode === undefined\n        ? {}\n        : { exitCode: event.payload.exitCode }),\n      sequence: event.sequence,\n    });\n  }\n  return [...terminals.values()].sort(\n    (left, right) => left.sequence - right.sequence,\n  );\n}\n\nexport function createAgentWorkbenchDetailsModel(\n  viewModel: AgentSessionViewModel,\n): AgentWorkbenchDetailsModel {\n  const capabilities = viewModel.snapshot.capabilities;\n  const workspaceEvents = viewModel.events.filter((event) => {\n    const capability = WORKSPACE_CAPABILITIES[\n      event.eventType as keyof typeof WORKSPACE_CAPABILITIES\n    ];\n    return capability ? capabilities[capability] === true : false;\n  });\n  const run = [...viewModel.events]\n    .reverse()\n    .find(\n      (event): event is AgentWorkbenchEventOf<'status'> =>\n        event.eventType === 'status',\n    );\n  const currentRunId = run?.runId;\n  const summary = [...viewModel.events]\n    .reverse()\n    .find(\n      (event): event is AgentWorkbenchEventOf<'summary'> =>\n        event.eventType === 'summary' &&\n        capabilities.summary === true &&\n        (!currentRunId || event.runId === currentRunId),\n    );\n\n  return {\n    mode: viewModel.snapshot.mode,\n    modelId: viewModel.snapshot.modelId,\n    permissionProfile: viewModel.snapshot.permissionProfile,\n    status: viewModel.status,\n    sessionId: viewModel.sessionId,\n    capabilities,\n    resumable: capabilities.resume === true && viewModel.resumable,\n    summary,\n    error: [...viewModel.events]\n      .reverse()\n      .find(\n        (event): event is AgentWorkbenchEventOf<'error'> =>\n          event.eventType === 'error',\n      ),\n    run,\n    usage: capabilities.usage\n      ? [...viewModel.events]\n          .reverse()\n          .find(\n            (event): event is AgentWorkbenchEventOf<'usage'> =>\n              event.eventType === 'usage',\n          )\n      : undefined,\n    workspace: {\n      diffs: latestBy(workspaceEvents, 'diff', (event) => event.payload.path),\n      files: latestBy(\n        workspaceEvents,\n        'workspace-file',\n        (event) => event.payload.path,\n      ),\n      terminals: projectTerminals(\n        workspaceEvents.filter(\n          (event): event is AgentWorkbenchEventOf<'terminal'> =>\n            event.eventType === 'terminal',\n        ),\n      ),\n      tests: latestBy(\n        workspaceEvents,\n        'test-result',\n        (event) => event.payload.testId,\n      ),\n      artifacts: latestBy(\n        workspaceEvents,\n        'artifact',\n        (event) => event.payload.artifactId,\n      ),\n    },\n  };\n}\n","import type { AgentSessionViewModel } from '@inf-monkeys-tech/monkeys';\nimport {\n  AlertCircle,\n  CheckCircle2,\n  ChevronDown,\n  Circle,\n  Clock3,\n  Copy,\n  Download,\n  FileCode2,\n  FileOutput,\n  Files,\n  GitFork,\n  PencilLine,\n  RefreshCw,\n  RotateCcw,\n  TerminalSquare,\n  TestTube2,\n  X,\n  XCircle,\n} from 'lucide-react';\nimport type { ComponentType, ReactNode } from 'react';\n\nimport { useMonkeysLocale, useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\nimport { Button, Tabs, TabsContent, TabsList, TabsTrigger } from '../primitives';\nimport {\n  createAgentWorkbenchDetailsModel,\n  type AgentWorkbenchDetailsModel,\n} from './details-model';\n\nexport type AgentWorkbenchDetailsTab = 'summary' | 'workspace';\nexport type AgentWorkbenchDetailsState =\n  | 'ready'\n  | 'loading'\n  | 'empty'\n  | 'error';\n\nexport type AgentWorkbenchDetailsIntent =\n  | { type: 'close' }\n  | { type: 'copy-summary'; summaryId: string; text: string }\n  | { type: 'retry'; eventId: string }\n  | { type: 'retry-summary'; eventId: string }\n  | { type: 'resume'; sessionId: string }\n  | { type: 'continue-in-new-task'; sessionId: string }\n  | { type: 'edit-and-rerun'; sessionId: string }\n  | { type: 'export'; sessionId: string };\n\nexport interface AgentWorkbenchTaskDetailsClassNames {\n  root?: string;\n  header?: string;\n  tabs?: string;\n  body?: string;\n  section?: string;\n  code?: string;\n}\n\nexport interface AgentWorkbenchTaskDetailsProps {\n  viewModel?: AgentSessionViewModel;\n  state?: AgentWorkbenchDetailsState;\n  activeTab?: AgentWorkbenchDetailsTab;\n  className?: string;\n  classNames?: AgentWorkbenchTaskDetailsClassNames;\n  onActiveTabChange?: (tab: AgentWorkbenchDetailsTab) => void;\n  onIntent?: (intent: AgentWorkbenchDetailsIntent) => void;\n  onExport?: (intent: Extract<AgentWorkbenchDetailsIntent, { type: 'export' }>) => void;\n  onCopySummary?: (intent: Extract<AgentWorkbenchDetailsIntent, { type: 'copy-summary' }>) => void;\n  onRetry?: (intent: Extract<AgentWorkbenchDetailsIntent, { type: 'retry' }>) => void;\n  onRetrySummary?: (intent: Extract<AgentWorkbenchDetailsIntent, { type: 'retry-summary' }>) => void;\n}\n\nfunction formatDuration(durationMs: number | undefined): string {\n  if (durationMs === undefined) return '-';\n  const seconds = Math.max(0, Math.round(durationMs / 1_000));\n  if (seconds < 60) return `${seconds}s`;\n  return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n}\n\nfunction formatDate(value: string | undefined, locale: string): string {\n  if (!value) return '-';\n  const date = new Date(value);\n  if (Number.isNaN(date.getTime())) return '-';\n  return new Intl.DateTimeFormat(locale, {\n    dateStyle: 'medium',\n    timeStyle: 'short',\n  }).format(date);\n}\n\nfunction Count({ value }: { value: number }) {\n  return (\n    <span className=\"rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-foreground\">\n      {value}\n    </span>\n  );\n}\n\nfunction DetailsSection({\n  title,\n  count,\n  icon: Icon,\n  className,\n  children,\n}: {\n  title: string;\n  count: number;\n  icon: ComponentType<{ className?: string }>;\n  className?: string;\n  children: ReactNode;\n}) {\n  if (count === 0) return null;\n  return (\n    <details\n      className={cn(\n        'group rounded-lg border border-border bg-card text-card-foreground',\n        className,\n      )}\n      open\n    >\n      <summary className=\"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-sm font-medium outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden\">\n        <Icon className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n        <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n        <Count value={count} />\n        <ChevronDown\n          className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\"\n          aria-hidden=\"true\"\n        />\n      </summary>\n      <div className=\"border-t border-border p-3\">{children}</div>\n    </details>\n  );\n}\n\nfunction StatusIcon({ status }: { status: string }) {\n  if (status === 'completed' || status === 'passed') {\n    return <CheckCircle2 className=\"size-4 text-primary\" aria-hidden=\"true\" />;\n  }\n  if (status === 'failed') {\n    return <XCircle className=\"size-4 text-destructive-text\" aria-hidden=\"true\" />;\n  }\n  if (status === 'running') {\n    return <Clock3 className=\"size-4 animate-pulse\" aria-hidden=\"true\" />;\n  }\n  return <Circle className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />;\n}\n\nfunction StateContent({ state }: { state: Exclude<AgentWorkbenchDetailsState, 'ready'> }) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.details;\n  const error = state === 'error';\n  return (\n    <div\n      className=\"flex min-h-48 flex-col items-center justify-center gap-2 px-6 text-center\"\n      role={error ? 'alert' : state === 'loading' ? 'status' : undefined}\n      aria-busy={state === 'loading' || undefined}\n    >\n      {state === 'loading' ? (\n        <RefreshCw className=\"size-5 animate-spin text-muted-foreground\" aria-hidden=\"true\" />\n      ) : error ? (\n        <AlertCircle className=\"size-5 text-destructive-text\" aria-hidden=\"true\" />\n      ) : (\n        <FileOutput className=\"size-5 text-muted-foreground\" aria-hidden=\"true\" />\n      )}\n      <div className=\"text-sm font-medium\">{messages.state[state].title}</div>\n      <div className=\"text-xs text-muted-foreground\">\n        {messages.state[state].description}\n      </div>\n    </div>\n  );\n}\n\nfunction SummaryPanel({\n  model,\n  onIntent,\n}: {\n  model: AgentWorkbenchDetailsModel;\n  onIntent?: (intent: AgentWorkbenchDetailsIntent) => void;\n}) {\n  const workbenchMessages = useMonkeysLocaleMessages().agentWorkbench;\n  const messages = workbenchMessages.details;\n  const locale = useMonkeysLocale().locale;\n  const summary = model.summary;\n  const run = model.run?.payload;\n  const error = model.error;\n  const retryable = model.status === 'failed' && error?.payload.retryable;\n  const canResume =\n    model.resumable && ['stopped', 'completed', 'failed'].includes(model.status);\n  const canContinueInNewTask = model.capabilities.threadForking;\n  const canEditAndRerun = model.capabilities.editAndRerun;\n  const tokenUsage =\n    model.usage?.payload.totalTokens ??\n    (model.usage?.payload.inputTokens !== undefined ||\n    model.usage?.payload.outputTokens !== undefined\n      ? (model.usage.payload.inputTokens ?? 0) +\n        (model.usage.payload.outputTokens ?? 0)\n      : undefined);\n\n  return (\n    <div className=\"space-y-3\">\n      <section className=\"rounded-lg border border-border bg-muted/40 p-3\">\n        <div className=\"flex items-center gap-2\">\n          <StatusIcon status={model.status} />\n          <span className=\"text-sm font-semibold\">\n            {messages.status[model.status]}\n          </span>\n        </div>\n        <dl className=\"mt-3 grid grid-cols-2 gap-3 text-xs\">\n          <div>\n            <dt className=\"text-muted-foreground\">{messages.duration}</dt>\n            <dd className=\"mt-0.5 font-medium\">\n              {formatDuration(run?.durationMs)}\n            </dd>\n          </div>\n          <div>\n            <dt className=\"text-muted-foreground\">{messages.updated}</dt>\n            <dd className=\"mt-0.5 truncate font-medium\">\n              {formatDate(\n                run?.stoppedAt ?? run?.completedAt ?? run?.failedAt,\n                locale,\n              )}\n            </dd>\n          </div>\n          <div>\n            <dt className=\"text-muted-foreground\">{messages.model}</dt>\n            <dd className=\"mt-0.5 truncate font-medium\">{model.modelId}</dd>\n          </div>\n          <div>\n            <dt className=\"text-muted-foreground\">{messages.mode}</dt>\n            <dd className=\"mt-0.5 font-medium\">\n              {workbenchMessages.modes[model.mode]}\n            </dd>\n          </div>\n          {model.permissionProfile ? (\n            <div>\n              <dt className=\"text-muted-foreground\">{messages.permissions}</dt>\n              <dd className=\"mt-0.5 font-medium\">\n                {workbenchMessages.composer.permissionOptions[model.permissionProfile]}\n              </dd>\n            </div>\n          ) : null}\n          {tokenUsage !== undefined ? (\n            <div>\n              <dt className=\"text-muted-foreground\">{messages.tokenUsage}</dt>\n              <dd className=\"mt-0.5 font-medium\">\n                {new Intl.NumberFormat(locale).format(tokenUsage)}\n              </dd>\n            </div>\n          ) : null}\n        </dl>\n        {error ? (\n          <div className=\"mt-3 rounded-md border border-destructive/30 bg-destructive/5 p-2.5 text-sm text-destructive-text\" role=\"alert\">\n            {error.payload.message}\n          </div>\n        ) : null}\n        {retryable || canResume ? (\n          <div className=\"mt-3 flex flex-wrap gap-2\">\n            {retryable ? (\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"sm\"\n                className=\"h-auto px-2.5 py-1.5 text-xs\"\n                disabled={!onIntent}\n                onClick={() => onIntent?.({ type: 'retry', eventId: error.eventId })}\n              >\n                {messages.actions.retry}\n              </Button>\n            ) : null}\n            {canResume ? (\n              <Button\n                type=\"button\"\n                size=\"sm\"\n                className=\"h-auto px-2.5 py-1.5 text-xs\"\n                disabled={!onIntent}\n                onClick={() =>\n                  onIntent?.({ type: 'resume', sessionId: model.sessionId })\n                }\n              >\n                {messages.actions.resume}\n              </Button>\n            ) : null}\n          </div>\n        ) : null}\n      </section>\n\n      <section className=\"flex flex-wrap gap-2 rounded-lg border border-border bg-card p-3 text-card-foreground\">\n        {canContinueInNewTask ? (\n          <Button\n            type=\"button\"\n            variant=\"outline\"\n            size=\"sm\"\n            className=\"h-auto gap-1.5 px-2.5 py-1.5 text-xs\"\n            disabled={!onIntent}\n            onClick={() => onIntent?.({ type: 'continue-in-new-task', sessionId: model.sessionId })}\n          >\n            <GitFork className=\"size-3.5\" aria-hidden=\"true\" />\n            {messages.actions.continueInNewTask}\n          </Button>\n        ) : null}\n        {canEditAndRerun ? (\n          <Button\n            type=\"button\"\n            variant=\"outline\"\n            size=\"sm\"\n            className=\"h-auto gap-1.5 px-2.5 py-1.5 text-xs\"\n            disabled={!onIntent}\n            onClick={() => onIntent?.({ type: 'edit-and-rerun', sessionId: model.sessionId })}\n          >\n            <PencilLine className=\"size-3.5\" aria-hidden=\"true\" />\n            {messages.actions.editAndRerun}\n          </Button>\n        ) : null}\n        <Button\n          type=\"button\"\n          variant=\"outline\"\n          size=\"sm\"\n          className=\"h-auto gap-1.5 px-2.5 py-1.5 text-xs\"\n          disabled={!onIntent}\n          onClick={() => onIntent?.({ type: 'export', sessionId: model.sessionId })}\n        >\n          <Download className=\"size-3.5\" aria-hidden=\"true\" />\n          {messages.actions.export}\n        </Button>\n      </section>\n\n      <section className=\"rounded-lg border border-border bg-card p-3 text-card-foreground\">\n        <div className=\"flex items-center justify-between gap-2\">\n          <h3 className=\"text-sm font-semibold\">{messages.summary}</h3>\n          {summary?.payload.text ? (\n            <Button\n              type=\"button\"\n              variant=\"ghost\"\n              size=\"icon\"\n              className=\"size-8 text-muted-foreground hover:text-foreground\"\n              aria-label={messages.actions.copySummary}\n              disabled={!onIntent}\n              onClick={() =>\n                onIntent?.({\n                  type: 'copy-summary',\n                  summaryId: summary.payload.summaryId,\n                  text: summary.payload.text,\n                })\n              }\n            >\n              <Copy className=\"size-4\" aria-hidden=\"true\" />\n            </Button>\n          ) : null}\n        </div>\n        {summary?.payload.status === 'failed' ? (\n          <div className=\"mt-3 space-y-2\">\n            <p className=\"text-sm text-destructive-text\" role=\"alert\">\n              {messages.summaryFailed}\n            </p>\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              size=\"sm\"\n              className=\"h-auto gap-1.5 px-2.5 py-1.5 text-xs\"\n              disabled={!onIntent}\n              onClick={() =>\n                onIntent?.({ type: 'retry-summary', eventId: summary.eventId })\n              }\n            >\n              <RotateCcw className=\"size-3.5\" aria-hidden=\"true\" />\n              {messages.actions.retrySummary}\n            </Button>\n          </div>\n        ) : summary?.payload.text ? (\n          <div className=\"mt-3 space-y-3 text-sm\">\n            <p className=\"whitespace-pre-wrap text-muted-foreground\">\n              {summary.payload.text}\n            </p>\n            {summary.payload.highlights.length > 0 ? (\n              <div>\n                <h4 className=\"text-xs font-medium\">{messages.highlights}</h4>\n                <ul className=\"mt-1 list-disc space-y-1 pl-5 text-muted-foreground\">\n                  {summary.payload.highlights.map((item) => (\n                    <li key={item}>{item}</li>\n                  ))}\n                </ul>\n              </div>\n            ) : null}\n            {summary.payload.pendingItems.length > 0 ? (\n              <div>\n                <h4 className=\"text-xs font-medium\">{messages.pendingItems}</h4>\n                <ul className=\"mt-1 list-disc space-y-1 pl-5 text-muted-foreground\">\n                  {summary.payload.pendingItems.map((item) => (\n                    <li key={item}>{item}</li>\n                  ))}\n                </ul>\n              </div>\n            ) : null}\n          </div>\n        ) : (\n          <p className=\"mt-3 text-sm text-muted-foreground\">\n            {messages.summaryEmpty}\n          </p>\n        )}\n      </section>\n    </div>\n  );\n}\n\nfunction WorkspacePanel({\n  model,\n  sectionClassName,\n  codeClassName,\n}: {\n  model: AgentWorkbenchDetailsModel;\n  sectionClassName?: string;\n  codeClassName?: string;\n}) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.details.workspace;\n  const workspace = model.workspace;\n  return (\n    <div className=\"space-y-3\">\n      <DetailsSection\n        title={messages.diffs}\n        count={workspace.diffs.length}\n        icon={FileCode2}\n        className={sectionClassName}\n      >\n        <div className=\"space-y-3\">\n          {workspace.diffs.map((event) => (\n            <div key={event.payload.path} className=\"min-w-0\">\n              <div className=\"flex items-center justify-between gap-2 text-xs\">\n                <span className=\"truncate font-medium\">{event.payload.path}</span>\n                <span className=\"shrink-0 text-muted-foreground\">\n                  {messages.diffStatus[event.payload.status]}\n                </span>\n              </div>\n              {event.payload.patch ? (\n                <pre className={cn('mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs', codeClassName)}>\n                  {event.payload.patch}\n                </pre>\n              ) : null}\n            </div>\n          ))}\n        </div>\n      </DetailsSection>\n\n      <DetailsSection\n        title={messages.files}\n        count={workspace.files.length}\n        icon={Files}\n        className={sectionClassName}\n      >\n        <ul className=\"space-y-2 text-xs\">\n          {workspace.files.map((event) => (\n            <li key={event.payload.path} className=\"flex items-center gap-2\">\n              <FileOutput className=\"size-3.5 text-muted-foreground\" aria-hidden=\"true\" />\n              <span className=\"min-w-0 flex-1 truncate\">{event.payload.path}</span>\n              <span className=\"text-muted-foreground\">\n                {messages.fileOperation[event.payload.operation]}\n              </span>\n            </li>\n          ))}\n        </ul>\n      </DetailsSection>\n\n      <DetailsSection\n        title={messages.terminals}\n        count={workspace.terminals.length}\n        icon={TerminalSquare}\n        className={sectionClassName}\n      >\n        <div className=\"space-y-3\">\n          {workspace.terminals.map((terminal) => (\n            <div key={terminal.terminalId}>\n              <div className=\"flex justify-between gap-2 text-xs font-medium\">\n                <span>{terminal.terminalId}</span>\n                <span className=\"text-muted-foreground\">\n                  {terminal.exitCode === undefined\n                    ? terminal.status\n                    : messages.exitCode({ code: terminal.exitCode })}\n                </span>\n              </div>\n              <pre className={cn('mt-2 max-h-72 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs', codeClassName)}>\n                {[terminal.stdin, terminal.stdout, terminal.stderr]\n                  .filter(Boolean)\n                  .join('\\n')}\n              </pre>\n            </div>\n          ))}\n        </div>\n      </DetailsSection>\n\n      <DetailsSection\n        title={messages.tests}\n        count={workspace.tests.length}\n        icon={TestTube2}\n        className={sectionClassName}\n      >\n        <ul className=\"space-y-2 text-xs\">\n          {workspace.tests.map((event) => (\n            <li key={event.payload.testId}>\n              <div className=\"flex items-center gap-2\">\n                <StatusIcon status={event.payload.status} />\n                <span className=\"min-w-0 flex-1 truncate\">{event.payload.name}</span>\n                {event.payload.durationMs === undefined ? null : (\n                  <span className=\"text-muted-foreground\">\n                    {formatDuration(event.payload.durationMs)}\n                  </span>\n                )}\n              </div>\n              {event.payload.output ? (\n                <pre className={cn('mt-2 max-h-48 overflow-auto whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-xs', codeClassName)}>\n                  {event.payload.output}\n                </pre>\n              ) : null}\n            </li>\n          ))}\n        </ul>\n      </DetailsSection>\n\n      <DetailsSection\n        title={messages.artifacts}\n        count={workspace.artifacts.length}\n        icon={FileOutput}\n        className={sectionClassName}\n      >\n        <ul className=\"space-y-2 text-xs\">\n          {workspace.artifacts.map((event) => (\n            <li key={event.payload.artifactId} className=\"flex items-center gap-2\">\n              <FileOutput className=\"size-3.5 text-muted-foreground\" aria-hidden=\"true\" />\n              <span className=\"min-w-0 flex-1 truncate\">{event.payload.name}</span>\n              <span className=\"text-muted-foreground\">\n                {event.payload.kind}\n              </span>\n            </li>\n          ))}\n        </ul>\n      </DetailsSection>\n    </div>\n  );\n}\n\nexport function AgentWorkbenchTaskDetails({\n  viewModel,\n  state = 'ready',\n  activeTab = 'summary',\n  className,\n  classNames,\n  onActiveTabChange,\n  onIntent,\n  onExport,\n  onCopySummary,\n  onRetry,\n  onRetrySummary,\n}: AgentWorkbenchTaskDetailsProps) {\n  const dispatch = onIntent || onExport || onCopySummary || onRetry || onRetrySummary ? (intent: AgentWorkbenchDetailsIntent) => {\n    if (intent.type === 'export' && onExport) return onExport(intent);\n    if (intent.type === 'copy-summary' && onCopySummary) return onCopySummary(intent);\n    if (intent.type === 'retry' && onRetry) return onRetry(intent);\n    if (intent.type === 'retry-summary' && onRetrySummary) return onRetrySummary(intent);\n    onIntent?.(intent);\n  } : undefined;\n  const messages = useMonkeysLocaleMessages().agentWorkbench.details;\n  if (state !== 'ready') {\n    return (\n      <aside className={cn('flex h-full min-h-0 flex-col border-l border-border bg-background', classNames?.root, className)}>\n        <StateContent state={state} />\n      </aside>\n    );\n  }\n  if (!viewModel) {\n    return (\n      <aside className={cn('flex h-full min-h-0 flex-col border-l border-border bg-background', classNames?.root, className)}>\n        <StateContent state=\"empty\" />\n      </aside>\n    );\n  }\n\n  const model = createAgentWorkbenchDetailsModel(viewModel);\n  const workspaceCount = Object.values(model.workspace).reduce(\n    (total, items) => total + items.length,\n    0,\n  );\n  const workspaceAvailable = workspaceCount > 0;\n  const resolvedTab = activeTab === 'workspace' && !workspaceAvailable ? 'summary' : activeTab;\n  const tabs: Array<{ id: AgentWorkbenchDetailsTab; label: string; count: number }> = [\n    { id: 'summary', label: messages.tabs.summary, count: model.summary ? 1 : 0 },\n    ...(workspaceAvailable\n      ? [{ id: 'workspace' as const, label: messages.tabs.workspace, count: workspaceCount }]\n      : []),\n  ];\n\n  return (\n    <aside\n      className={cn(\n        'flex h-full min-h-0 min-w-0 flex-col border-l border-border bg-background text-foreground',\n        classNames?.root,\n        className,\n      )}\n      data-agent-workbench-mode={model.mode}\n    >\n      <header className={cn('flex shrink-0 items-center gap-2 border-b border-border px-4 py-3', classNames?.header)}>\n        <div className=\"min-w-0 flex-1\">\n          <h2 className=\"truncate text-sm font-semibold\">{messages.title}</h2>\n          <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n            {messages.description}\n          </p>\n        </div>\n        {onIntent ? (\n          <Button\n            type=\"button\"\n            variant=\"ghost\"\n            size=\"icon\"\n            className=\"text-muted-foreground hover:text-foreground\"\n            aria-label={messages.actions.close}\n            onClick={() => onIntent({ type: 'close' })}\n          >\n            <X className=\"size-4\" aria-hidden=\"true\" />\n          </Button>\n        ) : null}\n      </header>\n\n      <Tabs\n        value={resolvedTab}\n        className=\"flex min-h-0 flex-1 flex-col\"\n        onValueChange={(tab) => onActiveTabChange?.(tab as AgentWorkbenchDetailsTab)}\n      >\n        <TabsList\n          aria-label={messages.tabs.label}\n          className={cn(\n            'flex h-auto shrink-0 gap-1 rounded-none border-b border-border bg-transparent px-3 py-2',\n            classNames?.tabs,\n          )}\n        >\n          {tabs.map((tab) => (\n            <TabsTrigger\n              key={tab.id}\n              value={tab.id}\n              className=\"min-w-0 flex-1 gap-1 px-2 py-1.5 text-xs shadow-none data-[state=active]:bg-primary/10 data-[state=active]:text-primary data-[state=active]:shadow-none\"\n            >\n              <span className=\"truncate\">{tab.label}</span>\n              <Count value={tab.count} />\n            </TabsTrigger>\n          ))}\n        </TabsList>\n        <TabsContent\n          value=\"summary\"\n          className={cn('mt-0 min-h-0 flex-1 overflow-y-auto p-3', classNames?.body)}\n        >\n          <SummaryPanel model={model} onIntent={dispatch} />\n        </TabsContent>\n        {workspaceAvailable ? (\n          <TabsContent\n            value=\"workspace\"\n            className={cn('mt-0 min-h-0 flex-1 overflow-y-auto p-3', classNames?.body)}\n          >\n            <WorkspacePanel\n              model={model}\n              sectionClassName={classNames?.section}\n              codeClassName={classNames?.code}\n            />\n          </TabsContent>\n        ) : null}\n      </Tabs>\n    </aside>\n  );\n}\n","import { forwardRef } from 'react';\nimport type { ButtonHTMLAttributes, HTMLAttributes } from 'react';\n\nimport { cn } from '../layout';\n\nexport type AgentWorkbenchMessageRole = 'assistant' | 'system' | 'user';\n\nexport interface AgentWorkbenchMessageProps extends HTMLAttributes<HTMLDivElement> {\n  role: AgentWorkbenchMessageRole;\n}\n\nexport interface AgentWorkbenchMessageContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport interface AgentWorkbenchMessageActionsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport interface AgentWorkbenchMessageActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  label: string;\n  tooltip?: string;\n}\n\nexport const AgentWorkbenchMessage = forwardRef<HTMLDivElement, AgentWorkbenchMessageProps>(\n  function AgentWorkbenchMessage({ role, className, ...messageProps }, ref) {\n    return (\n      <div\n        {...messageProps}\n        ref={ref}\n        data-agent-message-role={role}\n        className={cn(\n          'group flex w-full max-w-[95%] min-w-0 flex-col gap-2',\n          role === 'user' ? 'is-user ml-auto justify-end' : 'is-assistant',\n          role === 'system' && 'mx-auto items-center text-center',\n          className,\n        )}\n      />\n    );\n  },\n);\n\nexport const AgentWorkbenchMessageContent = forwardRef<\n  HTMLDivElement,\n  AgentWorkbenchMessageContentProps\n>(function AgentWorkbenchMessageContent({ children, className, tabIndex = 0, ...contentProps }, ref) {\n  return (\n    <div\n      {...contentProps}\n      ref={ref}\n      tabIndex={tabIndex}\n      className={cn(\n        'flex w-fit min-w-0 max-w-full flex-col gap-2 overflow-x-auto overflow-y-hidden break-words text-sm [overflow-wrap:anywhere]',\n        '[&_a]:max-w-full [&_a]:break-all [&_code]:max-w-full [&_code]:break-words',\n        '[&_pre]:w-max [&_pre]:min-w-full [&_pre]:whitespace-pre [&_pre_code]:break-normal',\n        '[&_table]:w-max [&_table]:min-w-full [&_table]:whitespace-nowrap',\n        'group-[.is-user]:ml-auto group-[.is-user]:rounded-lg group-[.is-user]:bg-secondary group-[.is-user]:px-4 group-[.is-user]:py-3 group-[.is-user]:text-foreground',\n        'group-[.is-assistant]:text-foreground',\n        className,\n      )}\n    >\n      {children}\n    </div>\n  );\n});\n\nexport const AgentWorkbenchMessageActions = forwardRef<\n  HTMLDivElement,\n  AgentWorkbenchMessageActionsProps\n>(function AgentWorkbenchMessageActions({ children, className, ...actionsProps }, ref) {\n  return (\n    <div {...actionsProps} ref={ref} className={cn('flex min-w-0 items-center gap-1', className)}>\n      {children}\n    </div>\n  );\n});\n\nexport const AgentWorkbenchMessageAction = forwardRef<\n  HTMLButtonElement,\n  AgentWorkbenchMessageActionProps\n>(function AgentWorkbenchMessageAction(\n  { children, label, tooltip, className, disabled = false, type = 'button', ...buttonProps },\n  ref,\n) {\n  return (\n    <button\n      {...buttonProps}\n      ref={ref}\n      type={type}\n      aria-label={label}\n      title={tooltip}\n      disabled={disabled}\n      className={cn(\n        'inline-flex size-8 shrink-0 items-center justify-center rounded-md border-0 bg-transparent text-muted-foreground shadow-none transition-colors',\n        'hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n        'disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0',\n        className,\n      )}\n    >\n      {children}\n    </button>\n  );\n});\n","import type { AgentSessionEvent, AgentSessionViewModel } from '@inf-monkeys-tech/monkeys';\nimport {\n  type ReactNode,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react';\n\nimport { useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\nimport {\n  AgentWorkbenchActivity,\n  type AgentWorkbenchArtifactIntent,\n} from './AgentWorkbenchActivity';\nimport type { AgentWorkbenchApprovalIntent } from './AgentWorkbenchApproval';\nimport { AgentWorkbenchMessage, AgentWorkbenchMessageContent } from './AgentWorkbenchMessage';\n\ntype MessageEvent = Extract<AgentSessionEvent, { eventType: 'message' }>;\n\nexport interface AgentWorkbenchThreadMessage {\n  id: string;\n  role: MessageEvent['payload']['role'];\n  parts: MessageEvent['payload']['parts'];\n  sequence: number;\n}\n\ntype ThreadEntry =\n  | { type: 'message'; sequence: number; message: AgentWorkbenchThreadMessage }\n  | { type: 'error'; sequence: number; event: Extract<AgentSessionEvent, { eventType: 'error' }> }\n  | { type: 'activity'; sequence: number; event: AgentSessionEvent };\n\nexport interface AgentWorkbenchThreadClassNames {\n  root?: string;\n  list?: string;\n  message?: string;\n  messageContent?: string;\n  activity?: string;\n  empty?: string;\n  loading?: string;\n}\n\nexport interface AgentWorkbenchThreadProps {\n  viewModel?: AgentSessionViewModel;\n  loading?: boolean;\n  emptyTitle?: string;\n  emptyDescription?: string;\n  autoScroll?: boolean;\n  className?: string;\n  classNames?: AgentWorkbenchThreadClassNames;\n  renderMessageContent?: (message: AgentWorkbenchThreadMessage) => ReactNode;\n  onApprovalDecision?: (intent: AgentWorkbenchApprovalIntent) => void;\n  onArtifactOpen?: (intent: AgentWorkbenchArtifactIntent) => void;\n}\n\nfunction materializeMessages(events: readonly AgentSessionEvent[]): AgentWorkbenchThreadMessage[] {\n  const messages = new Map<string, AgentWorkbenchThreadMessage>();\n  for (const event of events) {\n    if (event.eventType !== 'message') continue;\n    const current = messages.get(event.payload.messageId);\n    const parts = event.payload.operation === 'replace'\n      ? event.payload.parts\n      : [...(current?.parts ?? []), ...event.payload.parts];\n    messages.set(event.payload.messageId, {\n      id: event.payload.messageId,\n      role: event.payload.role,\n      parts,\n      sequence: event.sequence,\n    });\n  }\n  return [...messages.values()];\n}\n\nfunction logicalActivityKey(event: AgentSessionEvent): string | undefined {\n  switch (event.eventType) {\n    case 'reasoning': return `reasoning:${event.payload.reasoningId}`;\n    case 'plan': return `plan:${event.payload.planId}`;\n    case 'task': return `task:${event.payload.taskId}`;\n    case 'tool': return `tool:${event.payload.toolCallId}`;\n    case 'approval': return `approval:${event.payload.approvalId}`;\n    case 'artifact': return `artifact:${event.payload.artifactId}`;\n    case 'usage': return 'usage';\n    case 'status': return 'status';\n    default: return undefined;\n  }\n}\n\nfunction createThreadEntries(viewModel: AgentSessionViewModel): ThreadEntry[] {\n  const messages = materializeMessages(viewModel.events).map<ThreadEntry>((message) => ({\n    type: 'message',\n    sequence: message.sequence,\n    message,\n  }));\n  const activity = new Map<string, AgentSessionEvent>();\n  for (const event of viewModel.events) {\n    const key = logicalActivityKey(event);\n    if (key) activity.set(key, event);\n  }\n  return [\n    ...messages,\n    ...viewModel.events\n      .filter((event): event is Extract<AgentSessionEvent, { eventType: 'error' }> => event.eventType === 'error')\n      .map<ThreadEntry>((event) => ({ type: 'error', sequence: event.sequence, event })),\n    ...[...activity.values()].map<ThreadEntry>((event) => ({\n      type: 'activity',\n      sequence: event.sequence,\n      event,\n    })),\n  ].sort((left, right) => left.sequence - right.sequence);\n}\n\nfunction partText(part: unknown): string {\n  if (typeof part === 'string') return part;\n  if (!part || typeof part !== 'object' || Array.isArray(part)) return String(part ?? '');\n  const record = part as Record<string, unknown>;\n  if (typeof record.text === 'string') return record.text;\n  if (typeof record.name === 'string') return record.name;\n  return JSON.stringify(record, null, 2);\n}\n\nfunction DefaultMessageContent({ message }: { message: AgentWorkbenchThreadMessage }) {\n  const content = message.parts.map(partText).filter(Boolean).join('');\n  return <div className=\"whitespace-pre-wrap break-words\">{content}</div>;\n}\n\nfunction singleEventViewModel(\n  viewModel: AgentSessionViewModel,\n  event: AgentSessionEvent,\n): AgentSessionViewModel {\n  return {\n    ...viewModel,\n    events: [event],\n    lastSequence: event.sequence,\n  };\n}\n\nexport function AgentWorkbenchThread({\n  viewModel,\n  loading = false,\n  emptyTitle,\n  emptyDescription,\n  autoScroll = true,\n  className,\n  classNames,\n  renderMessageContent,\n  onApprovalDecision,\n  onArtifactOpen,\n}: AgentWorkbenchThreadProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench;\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const entries = useMemo(\n    () => viewModel ? createThreadEntries(viewModel) : [],\n    [viewModel],\n  );\n\n  useEffect(() => {\n    if (!autoScroll || !viewModel) return;\n    const element = scrollRef.current;\n    if (element) element.scrollTop = element.scrollHeight;\n  }, [autoScroll, viewModel?.lastSequence, viewModel?.sessionId]);\n\n  return (\n    <div\n      ref={scrollRef}\n      role=\"log\"\n      aria-label={messages.label}\n      className={cn('min-h-0 flex-1 overflow-y-auto bg-background', classNames?.root, className)}\n    >\n      {loading && entries.length === 0 ? (\n        <div className={cn('flex min-h-48 items-center justify-center gap-2 text-sm text-muted-foreground', classNames?.loading)} role=\"status\">\n          <span className=\"size-4 animate-spin rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground\" aria-hidden=\"true\" />\n          <span>{messages.navigation.loading}</span>\n        </div>\n      ) : entries.length === 0 ? (\n        <div className={cn('flex min-h-48 flex-col items-center justify-center px-6 text-center', classNames?.empty)}>\n          {emptyTitle ? <h2 className=\"text-base font-semibold text-foreground\">{emptyTitle}</h2> : null}\n          {emptyDescription ? <p className=\"mt-1 max-w-lg text-sm text-muted-foreground\">{emptyDescription}</p> : null}\n        </div>\n      ) : (\n        <div className={cn('mx-auto flex w-full max-w-4xl flex-col gap-4 px-4 py-6 sm:px-6', classNames?.list)}>\n          {entries.map((entry) => {\n            if (entry.type === 'error') {\n              return (\n                <div\n                  key={`error:${entry.event.eventId}`}\n                  role=\"alert\"\n                  className={cn('rounded-lg border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive-text', classNames?.activity)}\n                >\n                  {entry.event.payload.message}\n                </div>\n              );\n            }\n            if (entry.type === 'activity') {\n              return (\n                <AgentWorkbenchActivity\n                  key={`activity:${entry.event.eventId}`}\n                  viewModel={singleEventViewModel(viewModel!, entry.event)}\n                  ariaLabel={`${messages.label} ${entry.sequence + 1}`}\n                  className={classNames?.activity}\n                  onApprovalDecision={onApprovalDecision}\n                  onArtifactOpen={onArtifactOpen}\n                />\n              );\n            }\n            const { message } = entry;\n            const isUser = message.role === 'user';\n            const isSystem = message.role === 'system';\n            if (isSystem) {\n              return (\n                <div key={message.id} className={cn('text-center text-xs text-muted-foreground', classNames?.message)}>\n                  {renderMessageContent?.(message) ?? <DefaultMessageContent message={message} />}\n                </div>\n              );\n            }\n            return (\n              <AgentWorkbenchMessage\n                key={message.id}\n                role={message.role}\n                className={cn(\n                  'flex-row items-start gap-3',\n                  isUser && 'flex-row-reverse',\n                  classNames?.message,\n                )}\n                data-message-role={message.role}\n              >\n                <span className={cn('flex size-8 shrink-0 items-center justify-center rounded-full', isUser ? 'bg-primary text-primary-foreground' : 'bg-muted text-foreground')} aria-hidden=\"true\">\n                  <span className=\"size-2 rounded-full bg-current\" />\n                </span>\n                <AgentWorkbenchMessageContent\n                  className={cn(\n                    'max-w-[85%] rounded-2xl px-4 py-2.5 text-sm leading-6',\n                    !isUser && 'bg-card text-card-foreground',\n                    classNames?.messageContent,\n                  )}\n                >\n                  {renderMessageContent?.(message) ?? <DefaultMessageContent message={message} />}\n                </AgentWorkbenchMessageContent>\n              </AgentWorkbenchMessage>\n            );\n          })}\n        </div>\n      )}\n    </div>\n  );\n}\n","import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nimport { cn } from \"../layout\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\n\nexport interface AgentWorkbenchThreadShellClassNames {\n  root?: string;\n  header?: string;\n  title?: string;\n  headerActions?: string;\n  body?: string;\n}\n\nexport interface AgentWorkbenchThreadShellProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"title\">,\n    AgentWorkbenchAppearanceOptions {\n  title?: ReactNode;\n  headerActions?: ReactNode;\n  showHeader?: boolean;\n  classNames?: AgentWorkbenchThreadShellClassNames;\n}\n\nexport const AgentWorkbenchThreadShell = forwardRef<\n  HTMLDivElement,\n  AgentWorkbenchThreadShellProps\n>(function AgentWorkbenchThreadShell(\n  {\n    children,\n    title,\n    headerActions,\n    showHeader = Boolean(title || headerActions),\n    variant,\n    density,\n    className,\n    classNames,\n    ...shellProps\n  },\n  ref,\n) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const compact = appearance.density === \"compact\";\n  return (\n    <section\n      {...shellProps}\n      ref={ref}\n      data-agent-thread-shell=\"true\"\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      className={cn(\n        \"flex h-full min-h-0 min-w-0 flex-col bg-background text-foreground\",\n        classNames?.root,\n        className,\n      )}\n    >\n      {showHeader ? (\n        <div\n          className={cn(\n            \"flex min-w-0 items-center justify-between border-b border-border\",\n            compact ? \"min-h-10 gap-2 px-3 py-1.5\" : \"min-h-11 gap-3 px-4 py-2\",\n            classNames?.header,\n          )}\n        >\n          <h1\n            className={cn(\n              \"min-w-0 flex-1 truncate font-normal text-foreground\",\n              compact ? \"text-base leading-5\" : \"text-lg leading-6\",\n              classNames?.title,\n            )}\n          >\n            {title}\n          </h1>\n          {headerActions ? (\n            <div\n              className={cn(\n                \"flex min-w-0 shrink-0 items-center gap-0.5\",\n                classNames?.headerActions,\n              )}\n            >\n              {headerActions}\n            </div>\n          ) : null}\n        </div>\n      ) : null}\n      <div\n        className={cn(\"flex min-h-0 min-w-0 flex-1 flex-col\", classNames?.body)}\n      >\n        {children}\n      </div>\n    </section>\n  );\n});\n","import { PanelLeft, PanelRight } from \"lucide-react\";\nimport {\n  type CSSProperties,\n  type HTMLAttributes,\n  type PointerEvent as ReactPointerEvent,\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\n\nimport { cn } from \"../layout\";\nimport { Sheet, SheetContent, SheetTitle } from \"../primitives\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\n\nexport type AgentWorkbenchShellLayout =\n  | \"wide\"\n  | \"compact\"\n  | \"drawer\"\n  | \"mobile\";\n\nexport type AgentWorkbenchShellMeasurement = \"container\" | \"viewport\";\n\nexport interface AgentWorkbenchShellBreakpoints {\n  mobile: number;\n  drawer: number;\n  compact: number;\n  lowHeight: number;\n}\n\nexport const AGENT_WORKBENCH_SHELL_BREAKPOINTS: AgentWorkbenchShellBreakpoints =\n  Object.freeze({\n    mobile: 768,\n    drawer: 1200,\n    compact: 1440,\n    lowHeight: 768,\n  });\n\nexport function resolveAgentWorkbenchShellLayout(\n  width: number,\n  breakpoints: AgentWorkbenchShellBreakpoints = AGENT_WORKBENCH_SHELL_BREAKPOINTS,\n): AgentWorkbenchShellLayout {\n  if (width < breakpoints.mobile) return \"mobile\";\n  if (width < breakpoints.drawer) return \"drawer\";\n  if (width < breakpoints.compact) return \"compact\";\n  return \"wide\";\n}\n\nexport interface AgentWorkbenchShellClassNames {\n  root?: string;\n  controls?: string;\n  sidebar?: string;\n  main?: string;\n  details?: string;\n  sidebarOverlay?: string;\n  detailsOverlay?: string;\n  resizeHandle?: string;\n}\n\nexport interface AgentWorkbenchShellLabels {\n  openSidebar?: string;\n  sidebar?: string;\n  openDetails?: string;\n  details?: string;\n  resizeSidebar?: string;\n  resizeDetails?: string;\n}\n\nexport interface AgentWorkbenchShellProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"children\">,\n    AgentWorkbenchAppearanceOptions {\n  /** Left navigation content. The shell only owns its layout and overflow boundary. */\n  sidebar?: ReactNode;\n  /** Primary conversation content. */\n  children: ReactNode;\n  /** Optional right-side task details or artifact workspace. */\n  details?: ReactNode;\n  /** Whether the left navigation is available to the layout. */\n  sidebarOpen?: boolean;\n  /** Whether the left navigation starts expanded in inline layouts. */\n  sidebarDefaultOpen?: boolean;\n  /** Whether the right details region is available to the layout. */\n  detailsOpen?: boolean;\n  /** Notified when a responsive details overlay closes. */\n  onDetailsOpenChange?: (open: boolean) => void;\n  /** Width of the left navigation column in CSS pixels or any valid CSS size. */\n  sidebarWidth?: number | string;\n  /** Width of the right details column in CSS pixels or any valid CSS size. */\n  detailsWidth?: number | string;\n  sidebarMinWidth?: number;\n  sidebarMaxWidth?: number;\n  detailsMinWidth?: number;\n  detailsMaxWidth?: number;\n  mainMinWidth?: number;\n  /** Enables the canonical wide/compact/drawer/mobile layout policy. */\n  responsive?: boolean;\n  /** Container measurement is reusable; viewport keeps nested workbench shells in sync. */\n  responsiveMeasurement?: AgentWorkbenchShellMeasurement;\n  /** Explicit dimensions are useful for deterministic embeds and visual tests. */\n  responsiveWidth?: number;\n  responsiveHeight?: number;\n  breakpoints?: AgentWorkbenchShellBreakpoints;\n  onLayoutChange?: (layout: AgentWorkbenchShellLayout) => void;\n  /** Shows the canonical navigation button whenever the sidebar becomes an overlay. */\n  showResponsiveControls?: boolean;\n  /** Shells with the same group id keep responsive overlays mutually exclusive. */\n  overlayGroupId?: string;\n  /** Enables pointer and keyboard resizing for inline side regions. */\n  resizable?: boolean;\n  widthStorageKey?: string;\n  onSidebarWidthChange?: (width: number) => void;\n  onDetailsWidthChange?: (width: number) => void;\n  labels?: AgentWorkbenchShellLabels;\n  classNames?: AgentWorkbenchShellClassNames;\n}\n\ntype ShellStyle = CSSProperties & {\n  \"--agent-workbench-sidebar-width\"?: string;\n  \"--agent-workbench-details-width\"?: string;\n};\n\ntype MeasuredSize = { width: number; height: number };\ntype ResizeRegion = \"sidebar\" | \"details\";\n\nconst OVERLAY_EVENT = \"monkeys-agent-workbench-overlay-open\";\n\nfunction cssSize(value: number | string): string {\n  return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), Math.max(min, max));\n}\n\nfunction initialMeasuredSize(): MeasuredSize {\n  if (typeof window === \"undefined\") return { width: 1440, height: 900 };\n  return {\n    width: window.visualViewport?.width ?? window.innerWidth,\n    height: window.visualViewport?.height ?? window.innerHeight,\n  };\n}\n\nfunction readStoredWidths(\n  storageKey?: string,\n): Partial<Record<ResizeRegion, number>> {\n  if (!storageKey || typeof window === \"undefined\") return {};\n  try {\n    const value = JSON.parse(window.localStorage.getItem(storageKey) ?? \"{}\");\n    return typeof value === \"object\" && value !== null ? value : {};\n  } catch {\n    return {};\n  }\n}\n\nfunction writeStoredWidths(\n  storageKey: string | undefined,\n  widths: Record<ResizeRegion, number>,\n) {\n  if (!storageKey || typeof window === \"undefined\") return;\n  window.localStorage.setItem(storageKey, JSON.stringify(widths));\n}\n\n/**\n * Canonical responsive shell for Agent workbenches.\n *\n * - >=1440px: complete three-column layout.\n * - 1200-1439px: compact navigation + main; details use an overlay.\n * - 768-1199px: main-only layout with mutually exclusive drawers.\n * - <768px: main-only layout with full-screen side panels.\n *\n * Every region remains bounded by one scroll owner. Opening or closing an\n * overlay never reparents the main conversation, so its scroll and runtime\n * state remain intact.\n */\nexport function AgentWorkbenchShell({\n  sidebar,\n  children,\n  details,\n  sidebarOpen = true,\n  sidebarDefaultOpen = true,\n  detailsOpen = true,\n  onDetailsOpenChange,\n  sidebarWidth = 280,\n  detailsWidth = 360,\n  sidebarMinWidth = 240,\n  sidebarMaxWidth = 400,\n  detailsMinWidth = 320,\n  detailsMaxWidth = 720,\n  mainMinWidth = 600,\n  responsive = false,\n  responsiveMeasurement = \"container\",\n  responsiveWidth,\n  responsiveHeight,\n  breakpoints = AGENT_WORKBENCH_SHELL_BREAKPOINTS,\n  onLayoutChange,\n  showResponsiveControls = true,\n  overlayGroupId,\n  resizable = false,\n  widthStorageKey,\n  onSidebarWidthChange,\n  onDetailsWidthChange,\n  labels,\n  variant,\n  density,\n  className,\n  classNames,\n  style,\n  ...rootProps\n}: AgentWorkbenchShellProps) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const rootRef = useRef<HTMLDivElement>(null);\n  const sidebarReturnFocusRef = useRef<HTMLElement | null>(null);\n  const detailsReturnFocusRef = useRef<HTMLElement | null>(null);\n  const shellId = useId();\n  const [measuredSize, setMeasuredSize] = useState(initialMeasuredSize);\n  const storedWidths = useMemo(\n    () => readStoredWidths(widthStorageKey),\n    [widthStorageKey],\n  );\n  const [sidebarPixelWidth, setSidebarPixelWidth] = useState(() =>\n    typeof sidebarWidth === \"number\"\n      ? storedWidths.sidebar ?? sidebarWidth\n      : 280,\n  );\n  const [detailsPixelWidth, setDetailsPixelWidth] = useState(() =>\n    typeof detailsWidth === \"number\"\n      ? storedWidths.details ?? detailsWidth\n      : 360,\n  );\n  const [sidebarOverlayOpen, setSidebarOverlayOpen] = useState(false);\n  const [detailsOverlayOpen, setDetailsOverlayOpen] = useState(false);\n  const [sidebarExpanded, setSidebarExpanded] = useState(sidebarDefaultOpen);\n\n  const rememberReturnFocus = useCallback(\n    (region: ResizeRegion, candidate: EventTarget | null = document.activeElement) => {\n      if (\n        !(candidate instanceof HTMLElement) ||\n        candidate === document.body ||\n        candidate === document.documentElement\n      ) {\n        return;\n      }\n      const targetRef =\n        region === \"sidebar\" ? sidebarReturnFocusRef : detailsReturnFocusRef;\n      targetRef.current = candidate;\n    },\n    [],\n  );\n\n  const restoreReturnFocus = useCallback((region: ResizeRegion) => {\n    const targetRef =\n      region === \"sidebar\" ? sidebarReturnFocusRef : detailsReturnFocusRef;\n    const target = targetRef.current;\n    targetRef.current = null;\n    if (!target?.isConnected) return;\n    window.requestAnimationFrame(() => {\n      if (target.isConnected) target.focus();\n    });\n  }, []);\n\n  useEffect(() => {\n    if (typeof sidebarWidth === \"number\") {\n      setSidebarPixelWidth(storedWidths.sidebar ?? sidebarWidth);\n    }\n  }, [sidebarWidth, storedWidths.sidebar]);\n\n  useEffect(() => setSidebarExpanded(sidebarDefaultOpen), [sidebarDefaultOpen]);\n\n  useEffect(() => {\n    if (typeof detailsWidth === \"number\") {\n      setDetailsPixelWidth(storedWidths.details ?? detailsWidth);\n    }\n  }, [detailsWidth, storedWidths.details]);\n\n  useEffect(() => {\n    if (!responsive) return undefined;\n\n    const updateViewport = () => {\n      const viewport = initialMeasuredSize();\n      setMeasuredSize({\n        width: responsiveWidth ?? viewport.width,\n        height: responsiveHeight ?? viewport.height,\n      });\n    };\n\n    if (\n      responsiveMeasurement === \"viewport\" ||\n      responsiveWidth !== undefined ||\n      responsiveHeight !== undefined\n    ) {\n      updateViewport();\n      if (responsiveWidth !== undefined && responsiveHeight !== undefined) {\n        return undefined;\n      }\n      window.addEventListener(\"resize\", updateViewport);\n      window.visualViewport?.addEventListener(\"resize\", updateViewport);\n      return () => {\n        window.removeEventListener(\"resize\", updateViewport);\n        window.visualViewport?.removeEventListener(\"resize\", updateViewport);\n      };\n    }\n\n    const root = rootRef.current;\n    if (!root) return undefined;\n    const updateContainer = () => {\n      const rect = root.getBoundingClientRect();\n      setMeasuredSize({ width: rect.width, height: rect.height });\n    };\n    updateContainer();\n    if (typeof ResizeObserver === \"undefined\") {\n      window.addEventListener(\"resize\", updateContainer);\n      return () => window.removeEventListener(\"resize\", updateContainer);\n    }\n    const observer = new ResizeObserver(updateContainer);\n    observer.observe(root);\n    return () => observer.disconnect();\n  }, [responsive, responsiveHeight, responsiveMeasurement, responsiveWidth]);\n\n  const layout = responsive\n    ? resolveAgentWorkbenchShellLayout(\n        responsiveWidth ?? measuredSize.width,\n        breakpoints,\n      )\n    : \"wide\";\n  const lowHeight =\n    responsive &&\n    (responsiveHeight ?? measuredSize.height) <= breakpoints.lowHeight;\n\n  useEffect(() => onLayoutChange?.(layout), [layout, onLayoutChange]);\n\n  const hasSidebar = sidebar !== undefined && sidebarOpen;\n  const hasDetails = details !== undefined && detailsOpen;\n  const sidebarUsesOverlay = layout === \"drawer\" || layout === \"mobile\";\n  const inlineSidebar =\n    hasSidebar && sidebarExpanded && !sidebarUsesOverlay;\n  const inlineDetails = hasDetails && layout === \"wide\";\n\n  const resolvedSidebarMax = Math.max(\n    sidebarMinWidth,\n    Math.min(\n      sidebarMaxWidth,\n      layout === \"compact\" ? 320 : sidebarMaxWidth,\n      measuredSize.width -\n        (inlineDetails ? detailsPixelWidth : 0) -\n        mainMinWidth,\n    ),\n  );\n  const resolvedDetailsMax = Math.max(\n    detailsMinWidth,\n    Math.min(\n      detailsMaxWidth,\n      measuredSize.width -\n        (inlineSidebar ? sidebarPixelWidth : 0) -\n        mainMinWidth,\n    ),\n  );\n  const resolvedSidebarWidth =\n    typeof sidebarWidth === \"number\"\n      ? clamp(sidebarPixelWidth, sidebarMinWidth, resolvedSidebarMax)\n      : sidebarWidth;\n  const resolvedDetailsWidth =\n    typeof detailsWidth === \"number\"\n      ? clamp(detailsPixelWidth, detailsMinWidth, resolvedDetailsMax)\n      : detailsWidth;\n\n  const requestOverlay = useCallback(\n    (region: ResizeRegion) => {\n      if (!overlayGroupId || typeof window === \"undefined\") return;\n      window.dispatchEvent(\n        new CustomEvent(OVERLAY_EVENT, {\n          detail: { groupId: overlayGroupId, ownerId: shellId, region },\n        }),\n      );\n    },\n    [overlayGroupId, shellId],\n  );\n\n  useEffect(() => {\n    if (!overlayGroupId || typeof window === \"undefined\") return undefined;\n    const handleOverlayOpen = (event: Event) => {\n      const detail = (event as CustomEvent).detail;\n      if (detail?.groupId !== overlayGroupId || detail?.ownerId === shellId)\n        return;\n      setSidebarOverlayOpen(false);\n      setDetailsOverlayOpen((open) => {\n        if (open) onDetailsOpenChange?.(false);\n        return false;\n      });\n    };\n    window.addEventListener(OVERLAY_EVENT, handleOverlayOpen);\n    return () => window.removeEventListener(OVERLAY_EVENT, handleOverlayOpen);\n  }, [onDetailsOpenChange, overlayGroupId, shellId]);\n\n  useEffect(() => {\n    if (inlineSidebar || !hasSidebar) setSidebarOverlayOpen(false);\n  }, [hasSidebar, inlineSidebar]);\n\n  useEffect(() => {\n    if (inlineDetails || !hasDetails) {\n      setDetailsOverlayOpen(false);\n      return;\n    }\n    rememberReturnFocus(\"details\");\n    requestOverlay(\"details\");\n    setDetailsOverlayOpen(true);\n  }, [hasDetails, inlineDetails, rememberReturnFocus, requestOverlay]);\n\n  const persistWidths = useCallback(\n    (sidebarValue: number, detailsValue: number) => {\n      writeStoredWidths(widthStorageKey, {\n        sidebar: sidebarValue,\n        details: detailsValue,\n      });\n    },\n    [widthStorageKey],\n  );\n\n  const updateRegionWidth = useCallback(\n    (region: ResizeRegion, value: number) => {\n      if (region === \"sidebar\") {\n        const next = clamp(value, sidebarMinWidth, resolvedSidebarMax);\n        setSidebarPixelWidth(next);\n        onSidebarWidthChange?.(next);\n        return next;\n      }\n      const next = clamp(value, detailsMinWidth, resolvedDetailsMax);\n      setDetailsPixelWidth(next);\n      onDetailsWidthChange?.(next);\n      return next;\n    },\n    [\n      detailsMinWidth,\n      onDetailsWidthChange,\n      onSidebarWidthChange,\n      resolvedDetailsMax,\n      resolvedSidebarMax,\n      sidebarMinWidth,\n    ],\n  );\n\n  const beginResize = useCallback(\n    (region: ResizeRegion, event: ReactPointerEvent<HTMLButtonElement>) => {\n      if (!resizable || event.button !== 0) return;\n      event.preventDefault();\n      const startX = event.clientX;\n      const startWidth =\n        region === \"sidebar\" ? sidebarPixelWidth : detailsPixelWidth;\n      let latestWidth = startWidth;\n      const previousCursor = document.body.style.cursor;\n      const previousUserSelect = document.body.style.userSelect;\n      document.body.style.cursor = \"col-resize\";\n      document.body.style.userSelect = \"none\";\n\n      const handleMove = (pointerEvent: PointerEvent) => {\n        const delta = pointerEvent.clientX - startX;\n        latestWidth = updateRegionWidth(\n          region,\n          startWidth + (region === \"sidebar\" ? delta : -delta),\n        );\n      };\n      const handleUp = () => {\n        document.body.style.cursor = previousCursor;\n        document.body.style.userSelect = previousUserSelect;\n        window.removeEventListener(\"pointermove\", handleMove);\n        window.removeEventListener(\"pointerup\", handleUp);\n        persistWidths(\n          region === \"sidebar\" ? latestWidth : sidebarPixelWidth,\n          region === \"details\" ? latestWidth : detailsPixelWidth,\n        );\n      };\n      window.addEventListener(\"pointermove\", handleMove);\n      window.addEventListener(\"pointerup\", handleUp, { once: true });\n    },\n    [\n      detailsPixelWidth,\n      persistWidths,\n      resizable,\n      sidebarPixelWidth,\n      updateRegionWidth,\n    ],\n  );\n\n  const resizeWithKeyboard = useCallback(\n    (region: ResizeRegion, direction: number) => {\n      const current =\n        region === \"sidebar\" ? sidebarPixelWidth : detailsPixelWidth;\n      const next = updateRegionWidth(region, current + direction * 16);\n      persistWidths(\n        region === \"sidebar\" ? next : sidebarPixelWidth,\n        region === \"details\" ? next : detailsPixelWidth,\n      );\n    },\n    [detailsPixelWidth, persistWidths, sidebarPixelWidth, updateRegionWidth],\n  );\n\n  const shellStyle: ShellStyle = {\n    \"--agent-workbench-sidebar-width\": inlineSidebar\n      ? cssSize(resolvedSidebarWidth)\n      : \"0px\",\n    \"--agent-workbench-details-width\": inlineDetails\n      ? cssSize(resolvedDetailsWidth)\n      : \"0px\",\n    gridTemplateColumns:\n      inlineSidebar && inlineDetails\n        ? \"var(--agent-workbench-sidebar-width) minmax(0, 1fr) var(--agent-workbench-details-width)\"\n        : inlineSidebar\n          ? \"var(--agent-workbench-sidebar-width) minmax(0, 1fr)\"\n          : inlineDetails\n            ? \"minmax(0, 1fr) var(--agent-workbench-details-width)\"\n            : \"minmax(0, 1fr)\",\n    ...style,\n  };\n\n  const sidebarOverlay = hasSidebar && sidebarUsesOverlay;\n  const sidebarRestoreControl =\n    hasSidebar && !sidebarExpanded && !sidebarUsesOverlay;\n  const detailsOverlay = hasDetails && !inlineDetails;\n  const showControls =\n    responsive &&\n    showResponsiveControls &&\n    (sidebarOverlay || sidebarRestoreControl || detailsOverlay);\n  const mobilePanel = layout === \"mobile\";\n  const controlSize = mobilePanel ? \"size-11\" : \"size-9\";\n  const panelCloseClass = mobilePanel\n    ? \"[&>button]:flex [&>button]:size-11 [&>button]:items-center [&>button]:justify-center\"\n    : \"\";\n\n  return (\n    <div\n      {...rootProps}\n      ref={rootRef}\n      role={rootProps.role ?? \"region\"}\n      aria-label={rootProps[\"aria-label\"] ?? \"Agent workbench\"}\n      data-agent-workbench-shell=\"true\"\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      data-agent-workbench-layout={layout}\n      data-agent-workbench-low-height={lowHeight ? \"true\" : \"false\"}\n      data-sidebar-open={hasSidebar ? \"true\" : \"false\"}\n      data-sidebar-expanded={sidebarExpanded ? \"true\" : \"false\"}\n      data-sidebar-presentation={\n        inlineSidebar ? \"inline\" : sidebarOverlay ? \"overlay\" : \"hidden\"\n      }\n      data-details-open={hasDetails ? \"true\" : \"false\"}\n      data-details-presentation={\n        inlineDetails ? \"inline\" : detailsOverlay ? \"overlay\" : \"hidden\"\n      }\n      className={cn(\n        \"relative grid size-full min-h-0 min-w-0 overflow-hidden bg-background text-foreground\",\n        classNames?.root,\n        className,\n      )}\n      style={shellStyle}\n    >\n      {inlineSidebar ? (\n        <div\n          data-agent-workbench-region=\"sidebar\"\n          className={cn(\n            \"min-h-0 min-w-0 overflow-hidden border-r border-border bg-card text-card-foreground\",\n            classNames?.sidebar,\n          )}\n        >\n          {sidebar}\n        </div>\n      ) : null}\n      <div\n        data-agent-workbench-region=\"main\"\n        className={cn(\n          \"flex min-h-0 min-w-0 flex-col overflow-hidden bg-background\",\n          classNames?.main,\n        )}\n      >\n        {showControls ? (\n          <div\n            data-agent-workbench-responsive-controls=\"true\"\n            className={cn(\n              \"flex min-h-11 shrink-0 items-center gap-1 border-b border-border bg-background px-2\",\n              lowHeight && \"min-h-10\",\n              classNames?.controls,\n            )}\n          >\n            {sidebarOverlay || sidebarRestoreControl ? (\n              <button\n                type=\"button\"\n                className={cn(\n                  \"inline-flex items-center justify-center rounded-[var(--radius)] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n                  controlSize,\n                )}\n                aria-label={labels?.openSidebar ?? \"Open navigation\"}\n                aria-expanded={\n                  sidebarRestoreControl ? sidebarExpanded : sidebarOverlayOpen\n                }\n                onClick={(event) => {\n                  if (sidebarRestoreControl) {\n                    setSidebarExpanded(true);\n                    return;\n                  }\n                  rememberReturnFocus(\"sidebar\", event.currentTarget);\n                  requestOverlay(\"sidebar\");\n                  setSidebarOverlayOpen(true);\n                }}\n              >\n                <PanelLeft className=\"size-5\" aria-hidden=\"true\" />\n              </button>\n            ) : null}\n            {detailsOverlay && details ? (\n              <button\n                type=\"button\"\n                className={cn(\n                  \"ml-auto inline-flex items-center justify-center rounded-[var(--radius)] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n                  controlSize,\n                )}\n                aria-label={labels?.openDetails ?? \"Open details\"}\n                aria-expanded={detailsOverlayOpen}\n                onClick={(event) => {\n                  rememberReturnFocus(\"details\", event.currentTarget);\n                  requestOverlay(\"details\");\n                  setDetailsOverlayOpen(true);\n                }}\n              >\n                <PanelRight className=\"size-5\" aria-hidden=\"true\" />\n              </button>\n            ) : null}\n          </div>\n        ) : null}\n        <div className=\"min-h-0 min-w-0 flex-1 overflow-hidden\">{children}</div>\n      </div>\n      {inlineDetails ? (\n        <div\n          data-agent-workbench-region=\"details\"\n          className={cn(\n            \"min-h-0 min-w-0 overflow-hidden border-l border-border bg-card text-card-foreground\",\n            classNames?.details,\n          )}\n        >\n          {details}\n        </div>\n      ) : null}\n\n      {resizable && inlineSidebar && typeof sidebarWidth === \"number\" ? (\n        <button\n          type=\"button\"\n          role=\"separator\"\n          aria-orientation=\"vertical\"\n          aria-label={labels?.resizeSidebar ?? \"Resize navigation\"}\n          aria-valuemin={sidebarMinWidth}\n          aria-valuemax={resolvedSidebarMax}\n          aria-valuenow={Number(resolvedSidebarWidth)}\n          className={cn(\n            \"absolute inset-y-0 z-20 w-2 -translate-x-1/2 cursor-col-resize touch-none bg-transparent outline-none after:absolute after:inset-y-0 after:left-1/2 after:w-px after:-translate-x-1/2 after:bg-border after:transition-colors hover:after:bg-primary focus-visible:after:w-0.5 focus-visible:after:bg-ring\",\n            classNames?.resizeHandle,\n          )}\n          style={{ left: \"var(--agent-workbench-sidebar-width)\" }}\n          onPointerDown={(event) => beginResize(\"sidebar\", event)}\n          onKeyDown={(event) => {\n            if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") return;\n            event.preventDefault();\n            resizeWithKeyboard(\"sidebar\", event.key === \"ArrowRight\" ? 1 : -1);\n          }}\n        />\n      ) : null}\n      {resizable && inlineDetails && typeof detailsWidth === \"number\" ? (\n        <button\n          type=\"button\"\n          role=\"separator\"\n          aria-orientation=\"vertical\"\n          aria-label={labels?.resizeDetails ?? \"Resize details\"}\n          aria-valuemin={detailsMinWidth}\n          aria-valuemax={resolvedDetailsMax}\n          aria-valuenow={Number(resolvedDetailsWidth)}\n          className={cn(\n            \"absolute inset-y-0 right-[var(--agent-workbench-details-width)] z-20 w-2 translate-x-1/2 cursor-col-resize touch-none bg-transparent outline-none after:absolute after:inset-y-0 after:left-1/2 after:w-px after:-translate-x-1/2 after:bg-border after:transition-colors hover:after:bg-primary focus-visible:after:w-0.5 focus-visible:after:bg-ring\",\n            classNames?.resizeHandle,\n          )}\n          onPointerDown={(event) => beginResize(\"details\", event)}\n          onKeyDown={(event) => {\n            if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") return;\n            event.preventDefault();\n            resizeWithKeyboard(\"details\", event.key === \"ArrowLeft\" ? 1 : -1);\n          }}\n        />\n      ) : null}\n\n      {sidebarOverlay ? (\n        <Sheet\n          open={sidebarOverlayOpen}\n          onOpenChange={(open) => {\n            setSidebarOverlayOpen(open);\n            if (!open) restoreReturnFocus(\"sidebar\");\n          }}\n        >\n          <SheetContent\n            side=\"left\"\n            className={cn(\n              \"flex h-dvh flex-col gap-0 overflow-hidden bg-card p-0 text-card-foreground\",\n              mobilePanel\n                ? \"inset-0 size-dvw !max-w-none border-0\"\n                : \"w-[min(360px,90vw)] !max-w-none\",\n              panelCloseClass,\n              classNames?.sidebarOverlay,\n            )}\n          >\n            <SheetTitle className=\"sr-only\">\n              {labels?.sidebar ?? \"Navigation\"}\n            </SheetTitle>\n            <div className=\"min-h-0 flex-1 overflow-hidden\">{sidebar}</div>\n          </SheetContent>\n        </Sheet>\n      ) : null}\n      {detailsOverlay ? (\n        <Sheet\n          open={detailsOverlayOpen}\n          onOpenChange={(open) => {\n            setDetailsOverlayOpen(open);\n            if (!open) {\n              restoreReturnFocus(\"details\");\n              onDetailsOpenChange?.(false);\n            }\n          }}\n        >\n          <SheetContent\n            side=\"right\"\n            className={cn(\n              \"flex h-dvh flex-col gap-0 overflow-hidden bg-card p-0 text-card-foreground\",\n              mobilePanel\n                ? \"inset-0 size-dvw !max-w-none border-0\"\n                : \"w-[min(520px,92vw)] !max-w-none\",\n              panelCloseClass,\n              classNames?.detailsOverlay,\n            )}\n          >\n            <SheetTitle className=\"sr-only\">\n              {labels?.details ?? \"Details\"}\n            </SheetTitle>\n            <div className=\"min-h-0 flex-1 overflow-hidden\">{details}</div>\n          </SheetContent>\n        </Sheet>\n      ) : null}\n    </div>\n  );\n}\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport {\n  BookOpen,\n  Check,\n  ChevronRight,\n  Circle,\n  CircleAlert,\n  Clock3,\n  FileText,\n  Loader2,\n  Search,\n  TerminalSquare,\n  Wrench,\n} from \"lucide-react\";\nimport {\n  type ComponentType,\n  type ReactNode,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\n\nimport { useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\n\nexport type AgentWorkbenchProcessStatus =\n  | \"queued\"\n  | \"running\"\n  | \"waiting_approval\"\n  | \"completed\"\n  | \"failed\"\n  | \"stopped\";\n\nexport interface AgentWorkbenchProcessProps\n  extends AgentWorkbenchAppearanceOptions {\n  status: AgentWorkbenchProcessStatus;\n  children: ReactNode;\n  durationMs?: number;\n  completedCount?: number;\n  totalCount?: number;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  className?: string;\n  contentClassName?: string;\n  label?: string;\n  showStatusIcon?: boolean;\n}\n\nfunction formatDuration(durationMs: number): string {\n  const totalSeconds = Math.max(0, Math.floor(durationMs / 1_000));\n  const hours = Math.floor(totalSeconds / 3_600);\n  const minutes = Math.floor((totalSeconds % 3_600) / 60);\n  const seconds = totalSeconds % 60;\n  if (hours > 0) return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`;\n  if (minutes === 0) return `${seconds}s`;\n  return `${minutes}m ${seconds}s`;\n}\n\nfunction isActive(status: AgentWorkbenchProcessStatus): boolean {\n  return (\n    status === \"queued\" || status === \"running\" || status === \"waiting_approval\"\n  );\n}\n\nexport function AgentWorkbenchProcess({\n  status,\n  children,\n  durationMs,\n  completedCount,\n  totalCount,\n  open,\n  defaultOpen,\n  onOpenChange,\n  className,\n  contentClassName,\n  label,\n  showStatusIcon = true,\n  variant,\n  density,\n}: AgentWorkbenchProcessProps) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const compact = appearance.density === \"compact\";\n  const messages = useMonkeysLocaleMessages().agentWorkbench;\n  const controlled = open !== undefined;\n  const [internalOpen, setInternalOpen] = useState(\n    defaultOpen ?? isActive(status),\n  );\n  const userChangedOpen = useRef(false);\n  const previousStatus = useRef(status);\n  const resolvedOpen = controlled ? open : internalOpen;\n\n  useEffect(() => {\n    if (\n      controlled ||\n      userChangedOpen.current ||\n      previousStatus.current === status\n    )\n      return;\n    previousStatus.current = status;\n    setInternalOpen(isActive(status));\n  }, [controlled, status]);\n\n  const handleOpenChange = (nextOpen: boolean) => {\n    userChangedOpen.current = true;\n    if (!controlled) setInternalOpen(nextOpen);\n    onOpenChange?.(nextOpen);\n  };\n\n  const duration =\n    durationMs === undefined ? undefined : formatDuration(durationMs);\n  const title =\n    label ??\n    (status === \"queued\"\n      ? messages.process.queued\n      : status === \"waiting_approval\"\n        ? messages.process.waitingApproval\n        : status === \"running\"\n          ? messages.process.running\n          : status === \"failed\"\n            ? messages.process.failed\n            : status === \"stopped\"\n              ? messages.process.stopped\n              : duration\n                ? messages.process.processedFor({ duration })\n                : messages.process.processed);\n  const showCount = totalCount !== undefined && totalCount > 0;\n\n  return (\n    <CollapsiblePrimitive.Root\n      open={resolvedOpen}\n      onOpenChange={handleOpenChange}\n      className={cn(\"group/process w-full min-w-0\", className)}\n      data-agent-process-status={status}\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      aria-busy={isActive(status) ? \"true\" : undefined}\n    >\n      <CollapsiblePrimitive.Trigger\n        className={cn(\n          \"flex w-full min-w-0 items-center gap-2 border-b border-border/70 text-left text-sm text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring\",\n          compact ? \"min-h-8 py-1.5\" : \"min-h-9 py-2\",\n        )}\n      >\n        {showStatusIcon ? (\n          status === \"running\" || status === \"queued\" ? (\n            <Loader2\n              className=\"size-4 shrink-0 animate-spin\"\n              aria-hidden=\"true\"\n            />\n          ) : status === \"waiting_approval\" ? (\n            <Clock3\n              className=\"size-4 shrink-0 text-warning-foreground\"\n              aria-hidden=\"true\"\n            />\n          ) : status === \"failed\" ? (\n            <CircleAlert\n              className=\"size-4 shrink-0 text-destructive-text\"\n              aria-hidden=\"true\"\n            />\n          ) : status === \"completed\" ? (\n            <Check\n              className=\"size-4 shrink-0 text-success\"\n              aria-hidden=\"true\"\n            />\n          ) : (\n            <Clock3\n              className=\"size-4 shrink-0 text-muted-foreground\"\n              aria-hidden=\"true\"\n            />\n          )\n        ) : null}\n        <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n        {showCount ? (\n          <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-xs text-foreground\">\n            {messages.process.completedCount({\n              completed: completedCount ?? 0,\n              total: totalCount,\n            })}\n          </span>\n        ) : null}\n        <ChevronRight\n          className=\"size-4 shrink-0 transition-transform group-data-[state=open]/process:rotate-90\"\n          aria-hidden=\"true\"\n        />\n      </CollapsiblePrimitive.Trigger>\n      <CollapsiblePrimitive.Content\n        className={cn(\n          \"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\",\n          contentClassName,\n        )}\n      >\n        <div\n          className={cn(\n            \"flex min-w-0 flex-col\",\n            compact ? \"gap-2 py-3\" : \"gap-3 py-4\",\n          )}\n        >\n          {children}\n        </div>\n      </CollapsiblePrimitive.Content>\n    </CollapsiblePrimitive.Root>\n  );\n}\n\nexport type AgentWorkbenchActionKind =\n  | \"read\"\n  | \"search\"\n  | \"tool\"\n  | \"command\"\n  | \"file\";\n\nexport type AgentWorkbenchActionStatus =\n  | \"pending\"\n  | \"running\"\n  | \"completed\"\n  | \"failed\"\n  | \"denied\";\n\nexport interface AgentWorkbenchActionProps {\n  summary: ReactNode;\n  kind?: AgentWorkbenchActionKind;\n  status?: AgentWorkbenchActionStatus;\n  children?: ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  icon?: ComponentType<{\n    className?: string;\n    \"aria-hidden\"?: boolean | \"true\";\n  }>;\n  className?: string;\n  contentClassName?: string;\n}\n\nconst ACTION_ICONS: Record<\n  AgentWorkbenchActionKind,\n  ComponentType<{ className?: string }>\n> = {\n  read: BookOpen,\n  search: Search,\n  tool: Wrench,\n  command: TerminalSquare,\n  file: FileText,\n};\n\nfunction ActionStatusIcon({ status }: { status: AgentWorkbenchActionStatus }) {\n  if (status === \"running\" || status === \"pending\") {\n    return (\n      <Loader2 className=\"size-3.5 shrink-0 animate-spin\" aria-hidden=\"true\" />\n    );\n  }\n  if (status === \"failed\" || status === \"denied\") {\n    return (\n      <CircleAlert\n        className=\"size-3.5 shrink-0 text-destructive-text\"\n        aria-hidden=\"true\"\n      />\n    );\n  }\n  if (status === \"completed\") {\n    return <Check className=\"size-3.5 shrink-0\" aria-hidden=\"true\" />;\n  }\n  return <Circle className=\"size-3.5 shrink-0\" aria-hidden=\"true\" />;\n}\n\nexport function AgentWorkbenchAction({\n  summary,\n  kind = \"tool\",\n  status = \"completed\",\n  children,\n  open,\n  defaultOpen = false,\n  onOpenChange,\n  icon,\n  className,\n  contentClassName,\n}: AgentWorkbenchActionProps) {\n  const Icon = icon ?? ACTION_ICONS[kind];\n  const row = (\n    <>\n      <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n      <span className=\"min-w-0 flex-1 truncate\">{summary}</span>\n      <ActionStatusIcon status={status} />\n      {children ? (\n        <ChevronRight\n          className=\"size-3.5 shrink-0 transition-transform group-data-[state=open]/action:rotate-90\"\n          aria-hidden=\"true\"\n        />\n      ) : null}\n    </>\n  );\n\n  if (!children) {\n    return (\n      <div\n        className={cn(\n          \"flex min-h-7 min-w-0 items-center gap-2 text-[13px] text-muted-foreground\",\n          className,\n        )}\n        data-agent-action-status={status}\n      >\n        {row}\n      </div>\n    );\n  }\n\n  return (\n    <CollapsiblePrimitive.Root\n      open={open}\n      defaultOpen={defaultOpen}\n      onOpenChange={onOpenChange}\n      className={cn(\"group/action min-w-0\", className)}\n      data-agent-action-status={status}\n    >\n      <CollapsiblePrimitive.Trigger className=\"flex min-h-7 w-full min-w-0 items-center gap-2 text-left text-[13px] text-muted-foreground outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring\">\n        {row}\n      </CollapsiblePrimitive.Trigger>\n      <CollapsiblePrimitive.Content className=\"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n        <div\n          className={cn(\n            \"ml-6 mt-2 min-w-0 border-l border-border pl-3\",\n            contentClassName,\n          )}\n        >\n          {children}\n        </div>\n      </CollapsiblePrimitive.Content>\n    </CollapsiblePrimitive.Root>\n  );\n}\n","import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport {\n  File,\n  FileCode2,\n  FileImage,\n  FileText,\n  Film,\n  Globe2,\n  Link2,\n  ListFilter,\n  Music2,\n  Presentation,\n  TriangleAlert,\n} from 'lucide-react';\nimport { useState, type ComponentType } from 'react';\n\nimport { useMonkeysLocaleMessages } from '../../provider';\nimport { cn } from '../layout';\nimport { Button } from '../primitives';\nimport type {\n  AgentWorkbenchArtifactItem,\n  AgentWorkbenchArtifactKind,\n} from './artifact-model';\n\nexport interface AgentWorkbenchArtifactSummaryProps {\n  artifacts: readonly AgentWorkbenchArtifactItem[];\n  open?: boolean;\n  defaultOpen?: boolean;\n  maxItemsPerGroup?: number;\n  showAll?: boolean;\n  className?: string;\n  contentClassName?: string;\n  onOpenChange?: (open: boolean) => void;\n  onArtifactOpen?: (artifact: AgentWorkbenchArtifactItem) => void;\n  onViewAll?: () => void;\n}\n\nconst ARTIFACT_ICONS: Record<AgentWorkbenchArtifactKind, ComponentType<{ className?: string }>> = {\n  audio: Music2,\n  file: File,\n  html: FileCode2,\n  image: FileImage,\n  markdown: FileText,\n  pdf: FileText,\n  presentation: Presentation,\n  video: Film,\n  web: Globe2,\n};\n\nfunction ArtifactThumbnail({ artifact }: { artifact: AgentWorkbenchArtifactItem }) {\n  const [thumbnailFailed, setThumbnailFailed] = useState(false);\n  if (artifact.status === 'loading') {\n    return <span className=\"size-7 shrink-0 animate-pulse rounded bg-muted\" aria-hidden=\"true\" />;\n  }\n  if (artifact.status === 'error') {\n    return (\n      <span className=\"flex size-7 shrink-0 items-center justify-center rounded bg-destructive/10 text-destructive-text\">\n        <TriangleAlert className=\"size-4\" aria-hidden=\"true\" />\n      </span>\n    );\n  }\n  if (artifact.thumbnailUrl && !thumbnailFailed) {\n    return (\n      <img\n        src={artifact.thumbnailUrl}\n        alt=\"\"\n        loading=\"lazy\"\n        className=\"size-7 shrink-0 rounded object-cover\"\n        onError={() => setThumbnailFailed(true)}\n      />\n    );\n  }\n  const Icon = ARTIFACT_ICONS[artifact.kind];\n  return (\n    <span className=\"flex size-7 shrink-0 items-center justify-center rounded bg-muted text-muted-foreground\">\n      <Icon className=\"size-4\" aria-hidden=\"true\" />\n    </span>\n  );\n}\n\nfunction ArtifactGroup({\n  title,\n  artifacts,\n  maxItems,\n  onArtifactOpen,\n}: {\n  title: string;\n  artifacts: readonly AgentWorkbenchArtifactItem[];\n  maxItems: number;\n  onArtifactOpen?: (artifact: AgentWorkbenchArtifactItem) => void;\n}) {\n  return (\n    <section className=\"flex min-w-0 flex-col gap-2\">\n      <div role=\"heading\" aria-level={2} className=\"text-sm font-medium text-muted-foreground\">{title}</div>\n      {artifacts.slice(0, maxItems).map((artifact) => (\n        <Button\n          key={artifact.id}\n          type=\"button\"\n          variant=\"ghost\"\n          className=\"h-auto min-w-0 justify-start gap-2 px-0.5 py-0.5 text-left text-sm font-normal disabled:cursor-default\"\n          disabled={!onArtifactOpen || artifact.status === 'loading'}\n          onClick={() => onArtifactOpen?.(artifact)}\n        >\n          <ArtifactThumbnail artifact={artifact} />\n          <span className=\"min-w-0 flex-1 truncate text-muted-foreground\">{artifact.name}</span>\n        </Button>\n      ))}\n    </section>\n  );\n}\n\nexport function AgentWorkbenchArtifactSummary({\n  artifacts,\n  open,\n  defaultOpen = false,\n  maxItemsPerGroup = 3,\n  showAll = false,\n  className,\n  contentClassName,\n  onOpenChange,\n  onArtifactOpen,\n  onViewAll,\n}: AgentWorkbenchArtifactSummaryProps) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.artifactWorkspace;\n  const outputs = artifacts.filter((artifact) => artifact.origin === 'output');\n  const sources = artifacts.filter((artifact) => artifact.origin === 'source');\n  if (artifacts.length === 0) return null;\n\n  return (\n    <PopoverPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n      <PopoverPrimitive.Trigger\n        type=\"button\"\n        className={cn(\n          'flex size-9 items-center justify-center rounded-xl bg-muted text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:text-foreground',\n          className,\n        )}\n        aria-label={messages.toggleSummary}\n      >\n        <ListFilter className=\"size-4\" aria-hidden=\"true\" />\n      </PopoverPrimitive.Trigger>\n      <PopoverPrimitive.Content\n        aria-label={messages.toggleSummary}\n        side=\"bottom\"\n        align=\"end\"\n        sideOffset={8}\n        collisionPadding={12}\n        className={cn(\n          'z-50 w-[min(22rem,calc(100vw-1.5rem))] rounded-3xl border border-border bg-popover p-4 text-popover-foreground shadow-xl outline-none',\n          contentClassName,\n        )}\n      >\n        <div className=\"flex max-h-[min(34rem,calc(100vh-5rem))] min-w-0 flex-col gap-4 overflow-y-auto\">\n          {outputs.length > 0 ? (\n            <ArtifactGroup\n              title={messages.outputs}\n              artifacts={outputs}\n              maxItems={showAll ? outputs.length : maxItemsPerGroup}\n              onArtifactOpen={onArtifactOpen}\n            />\n          ) : null}\n          {outputs.length > 0 && sources.length > 0 ? <div className=\"h-px bg-border\" /> : null}\n          {sources.length > 0 ? (\n            <ArtifactGroup\n              title={messages.sources}\n              artifacts={sources}\n              maxItems={showAll ? sources.length : maxItemsPerGroup}\n              onArtifactOpen={onArtifactOpen}\n            />\n          ) : null}\n          {onViewAll && !showAll && (outputs.length > maxItemsPerGroup || sources.length > maxItemsPerGroup) ? (\n            <Button\n              type=\"button\"\n              variant=\"ghost\"\n              size=\"sm\"\n              className=\"min-h-8 gap-2 px-0 text-sm text-muted-foreground hover:text-foreground\"\n              onClick={onViewAll}\n            >\n              <Link2 className=\"size-4\" aria-hidden=\"true\" />\n              <span>{messages.viewAll}</span>\n            </Button>\n          ) : null}\n        </div>\n        <PopoverPrimitive.Arrow className=\"fill-popover\" />\n      </PopoverPrimitive.Content>\n    </PopoverPrimitive.Root>\n  );\n}\n","import {\n  closestCenter,\n  DndContext,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors,\n  type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n  horizontalListSortingStrategy,\n  SortableContext,\n  sortableKeyboardCoordinates,\n  useSortable,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport {\n  Download,\n  ExternalLink,\n  File,\n  FileCode2,\n  FileImage,\n  FileText,\n  Film,\n  Globe2,\n  Loader2,\n  Music2,\n  PanelRightClose,\n  Presentation,\n  RefreshCw,\n  TriangleAlert,\n  X,\n} from \"lucide-react\";\nimport type {\n  ComponentType,\n  KeyboardEvent,\n  MouseEvent,\n  ReactNode,\n} from \"react\";\n\nimport { useMonkeysLocaleMessages } from \"../../provider\";\nimport { cn } from \"../layout\";\nimport { Button } from \"../primitives\";\nimport {\n  type AgentWorkbenchAppearanceOptions,\n  useAgentWorkbenchAppearance,\n} from \"./appearance\";\nimport type {\n  AgentWorkbenchArtifactItem,\n  AgentWorkbenchArtifactKind,\n  AgentWorkbenchArtifactWorkspaceIntent,\n} from \"./artifact-model\";\n\nexport interface AgentWorkbenchArtifactWorkspaceProps\n  extends AgentWorkbenchAppearanceOptions {\n  artifacts: readonly AgentWorkbenchArtifactItem[];\n  activeArtifactId?: string;\n  className?: string;\n  renderArtifact: (artifact: AgentWorkbenchArtifactItem) => ReactNode;\n  onIntent?: (intent: AgentWorkbenchArtifactWorkspaceIntent) => void;\n}\n\nconst ARTIFACT_ICONS: Record<\n  AgentWorkbenchArtifactKind,\n  ComponentType<{ className?: string }>\n> = {\n  audio: Music2,\n  file: File,\n  html: FileCode2,\n  image: FileImage,\n  markdown: FileText,\n  pdf: FileText,\n  presentation: Presentation,\n  video: Film,\n  web: Globe2,\n};\n\nfunction SortableArtifactTab({\n  artifact,\n  selected,\n  onClose,\n}: {\n  artifact: AgentWorkbenchArtifactItem;\n  selected: boolean;\n  onClose: () => void;\n}) {\n  const messages = useMonkeysLocaleMessages().agentWorkbench.artifactWorkspace;\n  const Icon = ARTIFACT_ICONS[artifact.kind];\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    setActivatorNodeRef,\n    transform,\n    transition,\n    isDragging,\n  } = useSortable({\n    id: artifact.id,\n  });\n  const {\n    role: _sortableRole,\n    tabIndex: _sortableTabIndex,\n    ...sortableA11y\n  } = attributes;\n  const setTabRef = (node: HTMLButtonElement | null) => {\n    setNodeRef(node);\n    setActivatorNodeRef(node);\n  };\n  const handleMouseDown = (event: MouseEvent<HTMLButtonElement>) => {\n    if (event.button !== 1) return;\n    event.preventDefault();\n    onClose();\n  };\n  const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n    if (\n      !(event.target instanceof Element) ||\n      !event.target.closest(\"[data-close-artifact-tab]\")\n    )\n      return;\n    event.preventDefault();\n    onClose();\n  };\n  const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n    listeners?.onKeyDown?.(event);\n    if (event.key !== \"Delete\" && event.key !== \"Backspace\") return;\n    event.preventDefault();\n    onClose();\n  };\n\n  return (\n    <TabsPrimitive.Trigger\n      ref={setTabRef}\n      value={artifact.id}\n      style={{ transform: CSS.Transform.toString(transform), transition }}\n      className={cn(\n        \"group/tab relative flex h-9 max-w-56 shrink-0 items-center gap-2 rounded-lg pl-3 pr-8 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n        selected\n          ? \"bg-background text-foreground shadow-sm\"\n          : \"text-muted-foreground hover:bg-background/60\",\n        isDragging && \"opacity-60\",\n      )}\n      onMouseDown={handleMouseDown}\n      onClick={handleClick}\n      {...sortableA11y}\n      {...listeners}\n      onKeyDown={handleKeyDown}\n    >\n      <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n      <span className=\"truncate\">{artifact.name}</span>\n      <span\n        className=\"absolute right-1.5 flex size-6 items-center justify-center rounded-md opacity-0 hover:bg-muted group-focus/tab:opacity-100 group-hover/tab:opacity-100 data-[selected=true]:opacity-100\"\n        data-selected={selected}\n        data-close-artifact-tab=\"\"\n        title={messages.closeTab({ name: artifact.name })}\n        aria-hidden=\"true\"\n      >\n        <X className=\"size-3.5\" aria-hidden=\"true\" />\n      </span>\n    </TabsPrimitive.Trigger>\n  );\n}\n\nexport function AgentWorkbenchArtifactWorkspace({\n  artifacts,\n  activeArtifactId,\n  className,\n  variant,\n  density,\n  renderArtifact,\n  onIntent,\n}: AgentWorkbenchArtifactWorkspaceProps) {\n  const appearance = useAgentWorkbenchAppearance({ variant, density });\n  const compact = appearance.density === \"compact\";\n  const messages = useMonkeysLocaleMessages().agentWorkbench.artifactWorkspace;\n  const activeArtifact =\n    artifacts.find((artifact) => artifact.id === activeArtifactId) ??\n    artifacts[0];\n  const sensors = useSensors(\n    useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    }),\n  );\n\n  if (!activeArtifact) return null;\n\n  const handleDragEnd = ({ active, over }: DragEndEvent) => {\n    if (!over || active.id === over.id) return;\n    onIntent?.({\n      type: \"reorder\",\n      artifactId: String(active.id),\n      overArtifactId: String(over.id),\n    });\n  };\n\n  const artifactContent =\n    activeArtifact.status === \"loading\" ? (\n      <div\n        className=\"flex size-full min-h-48 items-center justify-center p-6 text-center\"\n        role=\"status\"\n      >\n        <div className=\"flex min-w-0 flex-col items-center gap-3 text-sm text-muted-foreground\">\n          <Loader2 className=\"size-5 animate-spin\" aria-hidden=\"true\" />\n          <span>{messages.loading}</span>\n        </div>\n      </div>\n    ) : activeArtifact.status === \"error\" ? (\n      <div\n        className=\"flex size-full min-h-48 items-center justify-center p-6 text-center\"\n        role=\"alert\"\n      >\n        <div className=\"flex min-w-0 max-w-sm flex-col items-center gap-3\">\n          <span className=\"flex size-10 items-center justify-center rounded-full bg-destructive/10 text-destructive-text\">\n            <TriangleAlert className=\"size-5\" aria-hidden=\"true\" />\n          </span>\n          <div className=\"min-w-0\">\n            <div className=\"break-words text-sm font-medium text-foreground [overflow-wrap:anywhere]\">\n              {messages.failed}\n            </div>\n            {activeArtifact.description ? (\n              <p className=\"mt-1 max-h-24 overflow-auto whitespace-pre-wrap break-words text-sm text-muted-foreground [overflow-wrap:anywhere]\">\n                {activeArtifact.description}\n              </p>\n            ) : null}\n          </div>\n          {onIntent ? (\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              size=\"sm\"\n              className=\"gap-2\"\n              onClick={() =>\n                onIntent({ type: \"retry\", artifactId: activeArtifact.id })\n              }\n            >\n              <RefreshCw className=\"size-4\" aria-hidden=\"true\" />\n              {messages.retry}\n            </Button>\n          ) : null}\n        </div>\n      </div>\n    ) : (\n      renderArtifact(activeArtifact)\n    );\n\n  return (\n    <TabsPrimitive.Root\n      value={activeArtifact.id}\n      onValueChange={(artifactId) => onIntent?.({ type: \"select\", artifactId })}\n      data-agent-workbench-variant={appearance.variant}\n      data-agent-workbench-density={appearance.density}\n      data-agent-workbench-status={activeArtifact.status}\n      data-agent-workbench-surface=\"panel\"\n      className={cn(\n        \"flex size-full min-h-0 min-w-0 flex-col bg-card text-card-foreground\",\n        className,\n      )}\n      orientation=\"horizontal\"\n    >\n      <div\n        className={cn(\n          \"relative z-10 flex shrink-0 items-center gap-2 border-b border-border bg-muted/40 px-2\",\n          compact ? \"h-10\" : \"h-12\",\n        )}\n      >\n        <DndContext\n          sensors={sensors}\n          collisionDetection={closestCenter}\n          onDragEnd={handleDragEnd}\n        >\n          <SortableContext\n            items={artifacts.map((artifact) => artifact.id)}\n            strategy={horizontalListSortingStrategy}\n          >\n            <TabsPrimitive.List\n              className=\"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n              aria-label={messages.tabs}\n            >\n              {artifacts.map((artifact) => (\n                <SortableArtifactTab\n                  key={artifact.id}\n                  artifact={artifact}\n                  selected={artifact.id === activeArtifact.id}\n                  onClose={() =>\n                    onIntent?.({ type: \"close\", artifactId: artifact.id })\n                  }\n                />\n              ))}\n            </TabsPrimitive.List>\n          </SortableContext>\n        </DndContext>\n        <div className=\"relative z-20 flex shrink-0 items-center gap-2\">\n          {activeArtifact.url ? (\n            <>\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                size=\"icon\"\n                className=\"size-8 shrink-0 text-muted-foreground hover:text-foreground\"\n                aria-label={messages.download({ name: activeArtifact.name })}\n                onClick={() =>\n                  onIntent?.({\n                    type: \"download\",\n                    artifactId: activeArtifact.id,\n                  })\n                }\n              >\n                <Download className=\"size-4\" aria-hidden=\"true\" />\n              </Button>\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                size=\"icon\"\n                className=\"size-8 shrink-0 text-muted-foreground hover:text-foreground\"\n                aria-label={messages.openExternal({\n                  name: activeArtifact.name,\n                })}\n                onClick={() =>\n                  onIntent?.({\n                    type: \"open-external\",\n                    artifactId: activeArtifact.id,\n                  })\n                }\n              >\n                <ExternalLink className=\"size-4\" aria-hidden=\"true\" />\n              </Button>\n            </>\n          ) : null}\n          <Button\n            type=\"button\"\n            variant=\"ghost\"\n            size=\"icon\"\n            className=\"size-8 shrink-0 text-muted-foreground hover:text-foreground\"\n            aria-label={messages.closeWorkspace}\n            onClick={() => onIntent?.({ type: \"close-workspace\" })}\n          >\n            <PanelRightClose className=\"size-4\" aria-hidden=\"true\" />\n          </Button>\n        </div>\n      </div>\n      <div className=\"min-h-0 min-w-0 flex-1 overflow-hidden\">\n        {artifacts.map((artifact) => (\n          <TabsPrimitive.Content\n            key={artifact.id}\n            value={artifact.id}\n            className=\"size-full min-h-0 min-w-0 outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n          >\n            {artifact.id === activeArtifact.id ? artifactContent : null}\n          </TabsPrimitive.Content>\n        ))}\n      </div>\n    </TabsPrimitive.Root>\n  );\n}\n"]}