Files
Pawan Osman 7bb5801a8c Rewrite project as OpenCursor, a VS Code AI coding agent extension
Replace the ChatGPT reverse proxy (Docker/proxy server) entirely with
OpenCursor: a Cursor-like agentic coding extension for VS Code.

- Remove proxy server, Dockerfiles, docker-compose setups, and CI workflows
- Add agent loop with tools (files, shell, search, web, MCP), multi-provider
  LLM support (OpenAI-compatible, Ollama, llama.cpp) with OAuth
- Add semantic indexing, workspace context, and @-mentions
- Add sidebar chat + settings webview UI (React), inline review, personas,
  hooks, and approval policies
- Switch to pnpm, esbuild bundling, and VS Code extension packaging
2026-07-05 22:07:25 +03:00

115 lines
2.0 KiB
TypeScript

/*
* Copyright (c) 2026 Pawan Osman <https://github.com/PawanOsman>
*
* This file is part of OpenCursor — AI coding agent chat inside VS Code.
* https://github.com/PawanOsman/OpenCursor
*
* Licensed under the MIT License. See LICENSE file in the project root.
*/
import * as React from "react";
import {
Bot,
Brain,
Check,
ChevronDown,
Clock,
ChevronRight,
Circle,
CircleDot,
Code2,
Database,
FileCode,
FileSearch,
FileText,
Folder,
GitBranch,
GitCommitHorizontal,
Globe,
BookOpen,
History as HistoryIcon,
Image as ImageIcon,
Infinity as InfinityIcon,
Link as LinkIcon,
ListChecks,
ListTodo,
MessageSquare,
MoreHorizontal,
Download,
Paperclip,
Pencil,
Play,
Plus,
RotateCcw,
Ruler,
Search,
Settings,
Sparkles,
SlidersHorizontal,
Terminal,
Trash2,
Wrench,
X,
type LucideIcon,
} from "lucide-react";
const MAP = {
file: FileText,
folder: Folder,
search: Search,
terminal: Terminal,
edit: Pencil,
trash: Trash2,
reset: RotateCcw,
check: Check,
close: X,
chevD: ChevronDown,
chevR: ChevronRight,
brain: Brain,
history: HistoryIcon,
infinity: InfinityIcon,
agent: Sparkles,
bot: Bot,
chat: MessageSquare,
list: ListChecks,
plus: Plus,
settings: Settings,
model: SlidersHorizontal,
tools: Wrench,
code: Code2,
fileCode: FileCode,
database: Database,
fileSearch: FileSearch,
globe: Globe,
link: LinkIcon,
todo: ListTodo,
ruler: Ruler,
task: Bot,
image: ImageIcon,
paperclip: Paperclip,
circle: Circle,
circleDot: CircleDot,
clock: Clock,
play: Play,
gitBranch: GitBranch,
gitCommit: GitCommitHorizontal,
book: BookOpen,
more: MoreHorizontal,
download: Download,
} satisfies Record<string, LucideIcon>;
export type IconName = keyof typeof MAP;
export function Icon({
name,
className,
size = 16,
}: {
name: IconName;
className?: string;
size?: number;
}) {
const Cmp = MAP[name];
return <Cmp className={className} size={size} strokeWidth={1.75} absoluteStrokeWidth />;
}