import * as vscode from 'vscode'; import * as os from 'os'; import { getThemeKindName } from './theme'; import type { ConnectionStatus } from './opencode'; import type { WorkspaceFolderCandidate } from './workspaceResolver'; type PanelType = 'chat' | 'agentManager'; export interface WebviewHtmlOptions { webview: vscode.Webview; extensionUri: vscode.Uri; workspaceFolder: string; workspaceFolders?: WorkspaceFolderCandidate[]; initialStatus: ConnectionStatus; cliAvailable: boolean; panelType?: PanelType; initialSessionId?: string; viewMode?: 'sidebar' | 'editor'; devServerUrl?: string | null; extensionVersion?: string; } const asCspToken = (value: string | null | undefined): string | null => { if (!value) { return null; } const trimmed = value.trim(); return trimmed.length > 0 ? trimmed : null; }; const toOrigin = (value: string | null | undefined): string | null => { if (!value) { return null; } try { return new URL(value).origin; } catch { return null; } }; const uniqueTokens = (values: Array): string => { return Array.from(new Set(values.map(asCspToken).filter((value): value is string => Boolean(value)))).join(' '); }; export function getWebviewHtml(options: WebviewHtmlOptions): string { const { webview, extensionUri, workspaceFolder, workspaceFolders = [], initialStatus, cliAvailable, panelType = 'chat', initialSessionId, viewMode = 'sidebar', devServerUrl, extensionVersion = '', } = options; const workspaceFoldersJson = JSON.stringify(workspaceFolders).replace(/ OpenChamber
${!cliAvailable ? `
OpenCode CLI not found. Please install it first.
` : ''}
`; }