diff --git a/CHANGELOG.md b/CHANGELOG.md index 70def26..354036f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,27 @@ All notable changes to DeepCode are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.5] — 2026-05-28 + +### Polish + dead-code removal +- **Composer `+` menu wired**. Click `+` → popover with three actions: + Attach file (opens native file picker, inserts `@` + into the textarea), Slash command (prepends `/`), Memory note + (prepends `#`). Replaces the previously-disabled `+` button. +- **Plugins toggle works.** Click the switch on any plugin → writes + to `settings.disabledPlugins[]` so the change survives restart + and the agent picks it up on the next turn. Optimistic UI with + rollback on failure. +- **Dead code removed.** Deleted unused screens (FilePanel.tsx — + Monaco file panel not surfaced in new shell; legacy Chat.tsx stub; + Nav.tsx — only the type was needed, moved to `src/types/screens.ts`; + Terminal.tsx — xterm side-pane wasn't wired in). Trimmed deps: + removed `@monaco-editor/react`, `monaco-editor`, `@xterm/*`, + `tailwindcss`, `postcss`, `autoprefixer` — none referenced any + more. +- ScreenName type moved to `src/types/screens.ts` (single source of + truth for App.tsx + InspectorRail). + ## [0.1.4] — 2026-05-28 ### Robustness + polish diff --git a/apps/cli/package.json b/apps/cli/package.json index 322a8ce..c52adf1 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "deepcode-cli", - "version": "0.1.4", + "version": "0.1.5", "description": "DeepCode CLI — DeepSeek-powered AI coding agent, parity with Claude Code", "license": "MIT", "type": "module", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 20a2020..3105c3c 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@deepcode/desktop", - "version": "0.1.4", + "version": "0.1.5", "private": true, "description": "DeepCode Mac desktop client — Tauri + React", "license": "MIT", @@ -21,7 +21,6 @@ "dependencies": { "@deepcode/core": "workspace:*", "@deepcode/shared-ui": "workspace:*", - "@monaco-editor/react": "^4.7.0", "@tauri-apps/api": "^2.0.0", "@tauri-apps/plugin-dialog": "^2.0.0", "@tauri-apps/plugin-fs": "^2.0.0", @@ -29,10 +28,6 @@ "@tauri-apps/plugin-process": "^2.3.1", "@tauri-apps/plugin-shell": "^2.0.0", "@tauri-apps/plugin-updater": "^2.0.0", - "@xterm/addon-fit": "^0.11.0", - "@xterm/addon-web-links": "^0.12.0", - "@xterm/xterm": "^6.0.0", - "monaco-editor": "^0.55.1", "react": "^18.3.0", "react-dom": "^18.3.0" }, @@ -42,9 +37,6 @@ "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.0", - "autoprefixer": "^10.5.0", - "postcss": "^8.5.15", - "tailwindcss": "^3.4", "typescript": "^5.7.0", "vite": "^5.4.0", "vitest": "^2.1.9" diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index f9860e8..a4de589 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deepcode_desktop" -version = "0.1.4" +version = "0.1.5" description = "DeepCode Mac desktop client" authors = ["oratis"] edition = "2021" diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 4ae4f75..7e9752a 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "DeepCode", - "version": "0.1.4", + "version": "0.1.5", "identifier": "dev.deepcode.desktop", "build": { "frontendDist": "../dist", diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx index 6f4a294..e63e231 100644 --- a/apps/desktop/src/App.tsx +++ b/apps/desktop/src/App.tsx @@ -19,7 +19,7 @@ import { ReplScreen } from './screens/Repl.js'; import { SessionsScreen } from './screens/Sessions.js'; import { SettingsScreen } from './screens/Settings.js'; import { SkillsScreen } from './screens/Skills.js'; -import type { ScreenName } from './components/Nav.js'; +import type { ScreenName } from './types/screens.js'; import type { UpdateInfo } from './types/global.js'; export function App(): JSX.Element { diff --git a/apps/desktop/src/components/InspectorRail.tsx b/apps/desktop/src/components/InspectorRail.tsx index a0d91f4..8074b88 100644 --- a/apps/desktop/src/components/InspectorRail.tsx +++ b/apps/desktop/src/components/InspectorRail.tsx @@ -6,7 +6,7 @@ // chevron is still deferred (the full-width inspector panel lands in // the next phase) — we leave it disabled with a tooltip. -import type { ScreenName } from './Nav.js'; +import type { ScreenName } from '../types/screens.js'; interface InspectorRailProps { /** Plan items pending — shown as a badge on ▤. */ diff --git a/apps/desktop/src/components/Nav.tsx b/apps/desktop/src/components/Nav.tsx deleted file mode 100644 index 3eee6af..0000000 --- a/apps/desktop/src/components/Nav.tsx +++ /dev/null @@ -1,52 +0,0 @@ -// Top nav — switches between the main screens. -// Spec: docs/VISUAL_DESIGN.html screen #1 header -// Milestone: M6-rest - -export type ScreenName = - | 'repl' - | 'chat' - | 'sessions' - | 'plugins' - | 'skills' - | 'permissions' - | 'mcp' - | 'settings' - | 'about'; - -interface NavProps { - active: ScreenName; - onChange: (next: ScreenName) => void; -} - -const ITEMS: Array<{ name: ScreenName; label: string }> = [ - { name: 'repl', label: 'REPL' }, - { name: 'chat', label: 'Chat' }, - { name: 'sessions', label: 'Sessions' }, - { name: 'plugins', label: 'Plugins' }, - { name: 'skills', label: 'Skills' }, - { name: 'permissions', label: 'Permissions' }, - { name: 'mcp', label: 'MCP' }, - { name: 'settings', label: 'Settings' }, - { name: 'about', label: 'About' }, -]; - -export function Nav({ active, onChange }: NavProps): JSX.Element { - return ( - - ); -} diff --git a/apps/desktop/src/components/PlusMenu.tsx b/apps/desktop/src/components/PlusMenu.tsx new file mode 100644 index 0000000..aa3939b --- /dev/null +++ b/apps/desktop/src/components/PlusMenu.tsx @@ -0,0 +1,126 @@ +// Composer "+" popover — design spec screen #4. +// Click-popover with three actions: Attach file / Slash command / Memory. +// Sits absolute-positioned above the composer toolbar (opens upward so +// it doesn't get clipped by the chat-stream above the composer). + +import { useEffect, useRef, useState } from 'react'; + +export interface PlusMenuItem { + icon: string; // emoji or single-char icon + label: string; + description?: string; + onClick: () => void | Promise; + disabled?: boolean; +} + +interface PlusMenuProps { + items: PlusMenuItem[]; + disabled?: boolean; +} + +export function PlusMenu({ items, disabled }: PlusMenuProps): JSX.Element { + const [open, setOpen] = useState(false); + const rootRef = useRef(null); + + useEffect(() => { + if (!open) return; + function handle(e: MouseEvent): void { + if (!rootRef.current?.contains(e.target as Node)) setOpen(false); + } + function esc(e: KeyboardEvent): void { + if (e.key === 'Escape') setOpen(false); + } + window.addEventListener('mousedown', handle); + window.addEventListener('keydown', esc); + return () => { + window.removeEventListener('mousedown', handle); + window.removeEventListener('keydown', esc); + }; + }, [open]); + + return ( +
+ + {open && ( +
+ {items.map((item) => ( + + ))} +
+ )} +
+ ); +} diff --git a/apps/desktop/src/components/Terminal.tsx b/apps/desktop/src/components/Terminal.tsx deleted file mode 100644 index 1eca07c..0000000 --- a/apps/desktop/src/components/Terminal.tsx +++ /dev/null @@ -1,202 +0,0 @@ -// xterm.js-backed terminal component. -// Spec: docs/DEVELOPMENT_PLAN.md §4 — Mac client terminal embed -// -// MVP scope: a working shell prompt the user can run commands in. -// Commands execute via tool_bash (Rust side). Each command launches -// a fresh /bin/sh -c — no long-running PTY session (that needs -// node-pty equivalent, which is M6-rest+). -// -// Input handling: line-based. User types a full command + Enter → -// it runs → output streams back → next prompt. - -import { useEffect, useRef } from 'react'; -import { Terminal as XTerm } from '@xterm/xterm'; -import { FitAddon } from '@xterm/addon-fit'; -import { WebLinksAddon } from '@xterm/addon-web-links'; -import '@xterm/xterm/css/xterm.css'; -import { invoke } from '@tauri-apps/api/core'; - -interface BashOk { - stdout: string; - stderr: string; - exitCode: number; - timedOut: boolean; -} - -const THEME = { - background: '#0e0e10', - foreground: '#f4f4f5', - cursor: '#a3e635', - selectionBackground: '#27272a', - black: '#0e0e10', - red: '#f87171', - green: '#a3e635', - yellow: '#fcd34d', - blue: '#60a5fa', - magenta: '#c084fc', - cyan: '#67e8f9', - white: '#f4f4f5', - brightBlack: '#71717a', - brightRed: '#fca5a5', - brightGreen: '#bef264', - brightYellow: '#fde68a', - brightBlue: '#93c5fd', - brightMagenta: '#d8b4fe', - brightCyan: '#a5f3fc', - brightWhite: '#fafafa', -}; - -const PROMPT = '\x1b[1;32m$\x1b[0m '; - -export function Terminal(): JSX.Element { - const container = useRef(null); - const termRef = useRef(null); - const fitRef = useRef(null); - const inputBuf = useRef(''); - const cwd = useRef(''); - - useEffect(() => { - if (!container.current) return; - const term = new XTerm({ - theme: THEME, - fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', - fontSize: 13, - cursorBlink: true, - cursorStyle: 'block', - scrollback: 5000, - }); - const fit = new FitAddon(); - term.loadAddon(fit); - term.loadAddon(new WebLinksAddon()); - term.open(container.current); - fit.fit(); - termRef.current = term; - fitRef.current = fit; - - // Capture cwd via Tauri - invoke<{ home_dir: string | null }>('get_app_info').then((info) => { - cwd.current = info.home_dir ?? '/'; - term.writeln( - '\x1b[1;36mDeepCode terminal\x1b[0m — each line runs as /bin/sh -c; type a command + Enter.', - ); - writePrompt(); - }); - - term.onData((data: string) => { - handleData(data); - }); - - const onResize = () => fit.fit(); - window.addEventListener('resize', onResize); - return () => { - window.removeEventListener('resize', onResize); - term.dispose(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - function writePrompt(): void { - const t = termRef.current; - if (!t) return; - const cwdShort = cwd.current.replace(/.*\//, ''); - t.write(`\r\n\x1b[1;34m${cwdShort || cwd.current}\x1b[0m ${PROMPT}`); - } - - function handleData(data: string): void { - const t = termRef.current; - if (!t) return; - // Handle Enter - if (data === '\r' || data === '\n') { - const cmd = inputBuf.current.trim(); - inputBuf.current = ''; - t.write('\r\n'); - if (!cmd) { - writePrompt(); - return; - } - if (cmd === 'clear' || cmd === 'cls') { - t.clear(); - writePrompt(); - return; - } - // Handle `cd` specially so subsequent commands inherit the dir - const cdMatch = /^cd(?:\s+(.+))?$/.exec(cmd); - if (cdMatch) { - const dir = (cdMatch[1] ?? '').trim() || '~'; - void resolveCdAndRun(dir); - return; - } - void runBash(cmd); - return; - } - // Handle backspace (DEL or BS) - if (data === '\x7f' || data === '\b') { - if (inputBuf.current.length > 0) { - inputBuf.current = inputBuf.current.slice(0, -1); - t.write('\b \b'); - } - return; - } - // Ignore other control chars for MVP - if (data.charCodeAt(0) < 32 && data !== '\t') { - return; - } - inputBuf.current += data; - t.write(data); - } - - async function runBash(command: string): Promise { - const t = termRef.current; - if (!t) return; - try { - const r = (await invoke('tool_bash', { - input: { command, cwd: cwd.current, timeout_ms: 60_000 }, - })) as BashOk; - if (r.stdout) t.write(r.stdout.replace(/\n/g, '\r\n')); - if (r.stderr) { - if (r.stdout && !r.stdout.endsWith('\n')) t.write('\r\n'); - t.write(`\x1b[1;31m${r.stderr.replace(/\n/g, '\r\n')}\x1b[0m`); - } - if (r.timedOut) { - t.write('\r\n\x1b[1;33m(timed out after 60s)\x1b[0m'); - } - } catch (err) { - t.write(`\r\n\x1b[1;31m${(err as Error).message ?? String(err)}\x1b[0m`); - } - writePrompt(); - } - - async function resolveCdAndRun(dir: string): Promise { - const t = termRef.current; - if (!t) return; - // Use shell to resolve ~ and relative paths atomically - const cmd = `cd ${shellQuote(dir)} && pwd`; - try { - const r = (await invoke('tool_bash', { - input: { command: cmd, cwd: cwd.current, timeout_ms: 10_000 }, - })) as BashOk; - if (r.exitCode === 0 && r.stdout.trim()) { - cwd.current = r.stdout.trim(); - } else { - t.write(`\x1b[1;31m${r.stderr || `cd: ${dir}: No such directory`}\x1b[0m`); - } - } catch (err) { - t.write(`\x1b[1;31m${(err as Error).message ?? String(err)}\x1b[0m`); - } - writePrompt(); - } - - return ( -
-
- Terminal · /bin/sh -
-
-
- ); -} - -function shellQuote(s: string): string { - if (s === '~' || s.startsWith('~/')) return s; // Let shell expand - return `'${s.replace(/'/g, "'\\''")}'`; -} diff --git a/apps/desktop/src/lib/tauri-api.ts b/apps/desktop/src/lib/tauri-api.ts index c265ce6..43557f7 100644 --- a/apps/desktop/src/lib/tauri-api.ts +++ b/apps/desktop/src/lib/tauri-api.ts @@ -105,6 +105,22 @@ export async function pickFolder(): Promise { return null; } +/** Show native file-picker dialog (single file). Returns absolute path or null on cancel. */ +export async function pickFile(opts: { defaultPath?: string } = {}): Promise { + const { open } = await import('@tauri-apps/plugin-dialog'); + const result: unknown = await open({ + multiple: false, + directory: false, + title: 'Attach a file', + defaultPath: opts.defaultPath, + }); + if (typeof result === 'string') return result; + if (Array.isArray(result) && result.length > 0 && typeof result[0] === 'string') { + return result[0]; + } + return null; +} + export async function listSessions(): Promise { return (await invoke('list_sessions')) as SessionMeta[]; } diff --git a/apps/desktop/src/screens/Chat.tsx b/apps/desktop/src/screens/Chat.tsx deleted file mode 100644 index 72fc54c..0000000 --- a/apps/desktop/src/screens/Chat.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// Legacy ChatScreen — kept for type-export symmetry only. The new shell -// renders ReplScreen directly. The xterm terminal side-pane lives here -// for now but isn't reachable from the active navigation; it'll move -// into the "+ menu" panel work in the next phase. - -export function ChatScreen(): JSX.Element { - return ( -
-

Chat

-

- The chat surface has moved into the main REPL. Click the ◐ icon in - the right rail to go there. -

-
- ); -} diff --git a/apps/desktop/src/screens/FilePanel.tsx b/apps/desktop/src/screens/FilePanel.tsx deleted file mode 100644 index f41dcc4..0000000 --- a/apps/desktop/src/screens/FilePanel.tsx +++ /dev/null @@ -1,257 +0,0 @@ -// File panel — Monaco-backed file viewer with Source / Diff / History tabs. -// Spec: docs/VISUAL_DESIGN.html screens #8 and #11 (M7) - -import { useEffect, useState } from 'react'; -import Editor, { DiffEditor, type Monaco } from '@monaco-editor/react'; -import { invoke } from '@tauri-apps/api/core'; - -interface OpenFile { - path: string; - view: 'source' | 'diff' | 'history'; - content?: string; - /** For diff view — the prior content. */ - baseContent?: string; - error?: string; -} - -type GitLogEntry = { hash: string; date: string; subject: string }; - -export function FilePanel(): JSX.Element { - const [files, setFiles] = useState([]); - const [active, setActive] = useState(0); - const [history, setHistory] = useState([]); - - function closeTab(idx: number): void { - setFiles((fs) => fs.filter((_, i) => i !== idx)); - setActive((a) => Math.max(0, Math.min(a, files.length - 2))); - } - - async function switchView(view: OpenFile['view']): Promise { - const current = files[active]; - if (!current) return; - if (view === 'diff' && current.baseContent === undefined) { - try { - const r = (await invoke('tool_bash', { - input: { - command: `git show HEAD:${shellQuote(current.path)} 2>/dev/null || true`, - timeout_ms: 10_000, - }, - })) as { stdout: string }; - setFiles((fs) => - fs.map((f, i) => (i === active ? { ...f, view, baseContent: r.stdout } : f)), - ); - } catch { - setFiles((fs) => fs.map((f, i) => (i === active ? { ...f, view } : f))); - } - return; - } - if (view === 'history') { - try { - const r = (await invoke('tool_bash', { - input: { - command: `git log --pretty=format:'%h%x09%ad%x09%s' --date=short -- ${shellQuote(current.path)} 2>/dev/null | head -50`, - timeout_ms: 10_000, - }, - })) as { stdout: string }; - const entries: GitLogEntry[] = r.stdout - .split('\n') - .filter((line) => line.trim()) - .map((line) => { - const [hash = '', date = '', subject = ''] = line.split('\t'); - return { hash, date, subject }; - }); - setHistory(entries); - } catch { - setHistory([]); - } - } - setFiles((fs) => fs.map((f, i) => (i === active ? { ...f, view } : f))); - } - - // Open a demo file from the cwd - async function openDemo(): Promise { - const path = 'README.md'; - try { - const r = (await invoke('tool_read', { filePath: path })) as { content: string }; - setFiles((fs) => [...fs, { path, view: 'source', content: r.content }]); - setActive(files.length); - } catch (err) { - setFiles((fs) => [ - ...fs, - { path, view: 'source', error: (err as Error).message ?? String(err) }, - ]); - } - } - - // Configure Monaco for our dark theme on first load - function handleMount(_editor: unknown, monaco: Monaco): void { - monaco.editor.defineTheme('deepcode-dark', { - base: 'vs-dark', - inherit: true, - rules: [], - colors: { - 'editor.background': '#0e0e10', - 'editor.foreground': '#f4f4f5', - 'editor.lineHighlightBackground': '#18181b', - 'editorLineNumber.foreground': '#52525b', - 'editor.selectionBackground': '#27272a', - }, - }); - monaco.editor.setTheme('deepcode-dark'); - } - - useEffect(() => { - // History reset on tab switch - setHistory([]); - }, [active]); - - if (files.length === 0) { - return ( -
-
File panel
-
-
-

No file open.

-

- Files referenced in the chat will open here automatically. -

- -
-
-
- ); - } - - const current = files[active]!; - const lang = guessLanguage(current.path); - - return ( -
- {/* Tab bar */} -
- {files.map((f, i) => ( -
setActive(i)} - className={ - 'flex cursor-pointer items-center gap-1 border-r border-border px-3 py-2 ' + - (i === active ? 'bg-bg' : 'text-muted hover:text-fg') - } - > - {f.path.split('/').pop()} - -
- ))} -
- {/* View switcher */} -
- {(['source', 'diff', 'history'] as const).map((v) => ( - - ))} -
{current.path}
-
- {/* Body */} -
- {current.error ? ( -
Error: {current.error}
- ) : current.view === 'source' ? ( - - ) : current.view === 'diff' ? ( - - ) : ( -
- {history.length === 0 ? ( -

No git history for this file (or not a git repo).

- ) : ( - - - - - - - - - - {history.map((e) => ( - - - - - - ))} - -
HashDateSubject
{e.hash}{e.date}{e.subject}
- )} -
- )} -
-
- ); -} - -function shellQuote(s: string): string { - return `'${s.replace(/'/g, "'\\''")}'`; -} - -function guessLanguage(path: string): string { - const ext = path.split('.').pop()?.toLowerCase() ?? ''; - return ( - { - ts: 'typescript', - tsx: 'typescript', - js: 'javascript', - jsx: 'javascript', - json: 'json', - md: 'markdown', - py: 'python', - rs: 'rust', - go: 'go', - rb: 'ruby', - sh: 'shell', - bash: 'shell', - yml: 'yaml', - yaml: 'yaml', - html: 'html', - css: 'css', - sql: 'sql', - toml: 'toml', - }[ext] ?? 'plaintext' - ); -} diff --git a/apps/desktop/src/screens/Plugins.tsx b/apps/desktop/src/screens/Plugins.tsx index 92dfeac..f9daa5d 100644 --- a/apps/desktop/src/screens/Plugins.tsx +++ b/apps/desktop/src/screens/Plugins.tsx @@ -6,6 +6,7 @@ import { useEffect, useState } from 'react'; import { Badge, type BadgeKind } from '../components/Badge.js'; import { Card, Screen } from '../components/Screen.js'; +import { loadSettingsFile, saveSettingsFile } from '../lib/tauri-api.js'; interface PluginRow { name: string; @@ -29,17 +30,64 @@ export function PluginsScreen(): JSX.Element { const [installing, setInstalling] = useState(false); const [feedback, setFeedback] = useState(null); + // Initial load — merge live list with settings.disabledPlugins[]. useEffect(() => { - if (window.deepcode?.plugins?.list) { - void window.deepcode.plugins - .list() - .then((rows) => setPlugins(rows as PluginRow[])) - .catch(() => setPlugins([])); - } else { - setPlugins([]); - } + void (async () => { + try { + const [rows, settings] = await Promise.all([ + window.deepcode?.plugins?.list?.() ?? Promise.resolve([]), + loadSettingsFile().catch(() => ({}) as Record), + ]); + const disabled = new Set( + Array.isArray(settings.disabledPlugins) + ? (settings.disabledPlugins as string[]) + : [], + ); + const merged = (rows as PluginRow[]).map((p) => ({ + ...p, + enabled: !disabled.has(p.name), + })); + setPlugins(merged); + } catch { + setPlugins([]); + } + })(); }, []); + async function handleToggle(name: string, nextEnabled: boolean): Promise { + // Optimistic UI + setPlugins((ps) => + ps ? ps.map((p) => (p.name === name ? { ...p, enabled: nextEnabled } : p)) : ps, + ); + try { + const current = (await loadSettingsFile()) as Record; + const disabled = new Set( + Array.isArray(current.disabledPlugins) + ? (current.disabledPlugins as string[]) + : [], + ); + if (nextEnabled) disabled.delete(name); + else disabled.add(name); + await saveSettingsFile({ + ...current, + disabledPlugins: [...disabled], + }); + setFeedback( + `✓ ${nextEnabled ? 'Enabled' : 'Disabled'} "${name}". Takes effect on next agent turn.`, + ); + } catch (err) { + // Revert + setPlugins((ps) => + ps + ? ps.map((p) => + p.name === name ? { ...p, enabled: !nextEnabled } : p, + ) + : ps, + ); + setFeedback(`✕ Toggle failed: ${(err as Error).message}`); + } + } + async function handleInstall(): Promise { if (!installSpec.trim()) return; setInstalling(true); @@ -170,9 +218,7 @@ export function PluginsScreen(): JSX.Element { { - /* TODO setEnabled via core */ - }} + onChange={() => void handleToggle(p.name, !p.enabled)} />
diff --git a/apps/desktop/src/screens/Repl.tsx b/apps/desktop/src/screens/Repl.tsx index 4551e1f..9774fcc 100644 --- a/apps/desktop/src/screens/Repl.tsx +++ b/apps/desktop/src/screens/Repl.tsx @@ -26,12 +26,14 @@ import { } from '@deepcode/core/dist/keybindings/vim.js'; import { Dropdown, type DropdownOption } from '../components/Dropdown.js'; import { Pill } from '../components/Pill.js'; +import { PlusMenu, type PlusMenuItem } from '../components/PlusMenu.js'; import { ToolCard } from '../components/ToolCard.js'; import { projectName } from '../lib/project.js'; import { appendAllowMatcher, loadKeybindings, loadSettingsFile, + pickFile, saveSettingsFile, } from '../lib/tauri-api.js'; @@ -519,14 +521,52 @@ export function ReplScreen({ rows={Math.min(6, Math.max(1, input.split('\n').length))} />
- + for the agent to read', + onClick: async () => { + const filePath = await pickFile({ defaultPath: projectPath }); + if (!filePath) return; + const ta = composerRef.current; + if (!ta) return; + const ref = `@${filePath}`; + const cursor = ta.selectionStart; + const before = ta.value.slice(0, cursor); + const after = ta.value.slice(cursor); + const prefix = before.length === 0 || before.endsWith(' ') ? '' : ' '; + const suffix = after.startsWith(' ') || after.length === 0 ? ' ' : ' '; + setInput(before + prefix + ref + suffix + after); + ta.focus(); + }, + }, + { + icon: '/', + label: 'Slash command', + description: 'Type / in the box (palette lands in v0.2)', + onClick: () => { + const ta = composerRef.current; + if (!ta) return; + if (!input.startsWith('/')) setInput('/' + input); + ta.focus(); + }, + }, + { + icon: '#', + label: 'Memory note', + description: 'Type # to remember (writes DEEPCODE.md in v0.2)', + onClick: () => { + const ta = composerRef.current; + if (!ta) return; + if (!input.startsWith('#')) setInput('# ' + input); + ta.focus(); + }, + }, + ]} + /> value={mode} diff --git a/apps/desktop/src/types/screens.ts b/apps/desktop/src/types/screens.ts new file mode 100644 index 0000000..ed22fd1 --- /dev/null +++ b/apps/desktop/src/types/screens.ts @@ -0,0 +1,14 @@ +// The canonical list of top-level screens the app shell can navigate to. +// Imported by App.tsx (renderScreen switch) and InspectorRail.tsx (button +// routing). Update both sites when adding a new screen. + +export type ScreenName = + | 'repl' + | 'chat' // alias for 'repl' — kept for IPC-shim backwards compat + | 'sessions' + | 'plugins' + | 'skills' + | 'permissions' + | 'mcp' + | 'settings' + | 'about'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75ed09e..35b1643 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,9 +60,6 @@ importers: '@deepcode/shared-ui': specifier: workspace:* version: link:../../packages/shared-ui - '@monaco-editor/react': - specifier: ^4.7.0 - version: 4.7.0(monaco-editor@0.55.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tauri-apps/api': specifier: ^2.0.0 version: 2.11.0 @@ -84,18 +81,6 @@ importers: '@tauri-apps/plugin-updater': specifier: ^2.0.0 version: 2.10.1 - '@xterm/addon-fit': - specifier: ^0.11.0 - version: 0.11.0 - '@xterm/addon-web-links': - specifier: ^0.12.0 - version: 0.12.0 - '@xterm/xterm': - specifier: ^6.0.0 - version: 6.0.0 - monaco-editor: - specifier: ^0.55.1 - version: 0.55.1 react: specifier: ^18.3.0 version: 18.3.1 @@ -118,15 +103,6 @@ importers: '@vitejs/plugin-react': specifier: ^4.3.0 version: 4.7.0(vite@5.4.21(@types/node@22.19.19)) - autoprefixer: - specifier: ^10.5.0 - version: 10.5.0(postcss@8.5.15) - postcss: - specifier: ^8.5.15 - version: 8.5.15 - tailwindcss: - specifier: ^3.4 - version: 3.4.19 typescript: specifier: ^5.7.0 version: 5.9.3 @@ -199,10 +175,6 @@ importers: packages: - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -514,28 +486,6 @@ packages: '@cfworker/json-schema': optional: true - '@monaco-editor/loader@1.7.0': - resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} - - '@monaco-editor/react@4.7.0': - resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} - peerDependencies: - monaco-editor: '>= 0.25.0 < 1' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -791,9 +741,6 @@ packages: '@types/react@18.3.29': resolution: {integrity: sha512-ch0qJdr2JY0r04NXSprbK6TXOgnaJ1Tz23fm5W+z0/CBah6BSBc3n96h7K9GOtwh0HrilNWHIBzE1Ko4Dcw/Wg==} - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/vscode@1.120.0': resolution: {integrity: sha512-feaT4Rst+FkTch5zz/ZbNCxoIvo55YU80Be2kiL7OJcod4+CUYf2lUBPdIJzozNnSEMq1VRTGrWEcCGFB3fBmA==} @@ -891,15 +838,6 @@ packages: '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@xterm/addon-fit@0.11.0': - resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==} - - '@xterm/addon-web-links@0.12.0': - resolution: {integrity: sha512-4Smom3RPyVp7ZMYOYDoC/9eGJJJqYhnPLGGqJ6wOBfB8VxPViJNSKdgRYb8NpaM6YSelEKbA2SStD7lGyqaobw==} - - '@xterm/xterm@6.0.0': - resolution: {integrity: sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==} - accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -932,16 +870,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -949,13 +877,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - autoprefixer@10.5.0: - resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -968,10 +889,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -983,10 +900,6 @@ packages: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1012,10 +925,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} @@ -1031,10 +940,6 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1042,10 +947,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1080,11 +981,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -1108,15 +1004,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dompurify@3.2.7: - resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1240,10 +1127,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1253,9 +1136,6 @@ packages: fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1269,10 +1149,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - finalhandler@2.1.1: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} @@ -1292,9 +1168,6 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -1319,10 +1192,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1391,14 +1260,6 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1407,10 +1268,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -1463,13 +1320,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1490,11 +1340,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - marked@14.0.0: - resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} - engines: {node: '>= 18'} - hasBin: true - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -1507,14 +1352,6 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} @@ -1530,15 +1367,9 @@ packages: minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - monaco-editor@0.55.1: - resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1555,18 +1386,10 @@ packages: resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} engines: {node: '>=18'} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -1618,9 +1441,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-to-regexp@8.4.2: resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} @@ -1634,69 +1454,14 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -1722,9 +1487,6 @@ packages: resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -1746,13 +1508,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1761,15 +1516,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.60.4: resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1779,9 +1525,6 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -1842,9 +1585,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - state-local@1.0.7: - resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -1856,31 +1596,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tailwindcss@3.4.19: - resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1903,10 +1622,6 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -1917,9 +1632,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1956,9 +1668,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -2058,8 +1767,6 @@ packages: snapshots: - '@alloc/quick-lru@5.2.0': {} - '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -2348,29 +2055,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@monaco-editor/loader@1.7.0': - dependencies: - state-local: 1.0.7 - - '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@monaco-editor/loader': 1.7.0 - monaco-editor: 0.55.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/rollup-android-arm-eabi@4.60.4': @@ -2563,9 +2247,6 @@ snapshots: '@types/prop-types': 15.7.15 csstype: 3.2.3 - '@types/trusted-types@2.0.7': - optional: true - '@types/vscode@1.120.0': {} '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': @@ -2711,12 +2392,6 @@ snapshots: loupe: 3.2.1 tinyrainbow: 1.2.0 - '@xterm/addon-fit@0.11.0': {} - - '@xterm/addon-web-links@0.12.0': {} - - '@xterm/xterm@6.0.0': {} - accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -2750,36 +2425,16 @@ snapshots: dependencies: color-convert: 2.0.1 - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - - arg@5.0.2: {} - argparse@2.0.1: {} assertion-error@2.0.1: {} - autoprefixer@10.5.0(postcss@8.5.15): - dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.15 - postcss-value-parser: 4.2.0 - balanced-match@1.0.2: {} balanced-match@4.0.4: {} baseline-browser-mapping@2.10.32: {} - binary-extensions@2.3.0: {} - body-parser@2.2.2: dependencies: bytes: 3.1.2 @@ -2803,10 +2458,6 @@ snapshots: dependencies: balanced-match: 4.0.4 - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.32 @@ -2831,8 +2482,6 @@ snapshots: callsites@3.1.0: {} - camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001793: {} chai@5.3.3: @@ -2850,26 +2499,12 @@ snapshots: check-error@2.1.3: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} - commander@4.1.1: {} - concat-map@0.0.1: {} content-disposition@1.1.0: {} @@ -2895,8 +2530,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cssesc@3.0.0: {} - csstype@3.2.3: {} debug@4.4.3: @@ -2909,14 +2542,6 @@ snapshots: depd@2.0.0: {} - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - dompurify@3.2.7: - optionalDependencies: - '@types/trusted-types': 2.0.7 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -3095,24 +2720,12 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} fast-uri@3.1.2: {} - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -3121,10 +2734,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - finalhandler@2.1.1: dependencies: debug: 4.4.3 @@ -3150,8 +2759,6 @@ snapshots: forwarded@0.2.0: {} - fraction.js@5.3.4: {} - fresh@2.0.0: {} fsevents@2.3.3: @@ -3179,10 +2786,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -3232,27 +2835,18 @@ snapshots: ipaddr.js@1.9.1: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.3 - is-extglob@2.1.1: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-number@7.0.0: {} - is-promise@4.0.0: {} isexe@2.0.0: {} - jiti@1.21.7: {} + jiti@1.21.7: + optional: true jose@6.2.3: {} @@ -3285,10 +2879,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -3309,21 +2899,12 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - marked@14.0.0: {} - math-intrinsics@1.1.0: {} media-typer@1.1.0: {} merge-descriptors@2.0.0: {} - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - mime-db@1.54.0: {} mime-types@3.0.2: @@ -3338,19 +2919,8 @@ snapshots: dependencies: brace-expansion: 1.1.15 - monaco-editor@0.55.1: - dependencies: - dompurify: 3.2.7 - marked: 14.0.0 - ms@2.1.3: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -3359,12 +2929,8 @@ snapshots: node-releases@2.0.46: {} - normalize-path@3.0.0: {} - object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} on-finished@2.4.1: @@ -3406,8 +2972,6 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: {} - path-to-regexp@8.4.2: {} pathe@1.1.2: {} @@ -3416,47 +2980,10 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.2: {} - picomatch@4.0.4: {} - pify@2.3.0: {} - - pirates@4.0.7: {} - pkce-challenge@5.0.1: {} - postcss-import@15.1.0(postcss@8.5.15): - dependencies: - postcss: 8.5.15 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.12 - - postcss-js@4.1.0(postcss@8.5.15): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.15 - - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 1.21.7 - postcss: 8.5.15 - - postcss-nested@6.2.0(postcss@8.5.15): - dependencies: - postcss: 8.5.15 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - postcss@8.5.15: dependencies: nanoid: 3.3.12 @@ -3478,8 +3005,6 @@ snapshots: dependencies: side-channel: 1.1.0 - queue-microtask@1.2.3: {} - range-parser@1.2.1: {} raw-body@3.0.2: @@ -3501,27 +3026,10 @@ snapshots: dependencies: loose-envify: 1.4.0 - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.2 - require-from-string@2.0.2: {} resolve-from@4.0.0: {} - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.1.0: {} - rollup@4.60.4: dependencies: '@types/estree': 1.0.8 @@ -3563,10 +3071,6 @@ snapshots: transitivePeerDependencies: - supports-color - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - safer-buffer@2.1.2: {} scheduler@0.23.2: @@ -3644,66 +3148,16 @@ snapshots: stackback@0.0.2: {} - state-local@1.0.7: {} - statuses@2.0.2: {} std-env@3.10.0: {} strip-json-comments@3.1.1: {} - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.16 - ts-interface-checker: 0.1.13 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - - tailwindcss@3.4.19: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.15 - postcss-import: 15.1.0(postcss@8.5.15) - postcss-js: 4.1.0(postcss@8.5.15) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15) - postcss-nested: 6.2.0(postcss@8.5.15) - postcss-selector-parser: 6.1.2 - resolve: 1.22.12 - sucrase: 3.35.1 - transitivePeerDependencies: - - tsx - - yaml - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -3719,18 +3173,12 @@ snapshots: tinyspy@3.0.2: {} - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - toidentifier@1.0.1: {} ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 - ts-interface-checker@0.1.13: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -3768,8 +3216,6 @@ snapshots: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - vary@1.1.2: {} vite-node@2.1.9(@types/node@22.19.19):