├── .gitattributes ├── frontend ├── bun.lockb ├── app │ ├── favicon.ico │ ├── chat │ │ └── page.tsx │ ├── layout.tsx │ ├── globals.css │ └── page.tsx ├── public │ ├── asterisk.png │ ├── deepclaude.ico │ ├── deepclaude.png │ ├── r1-plus-sonnet-benchmarks.png │ ├── vercel.svg │ ├── window.svg │ ├── file.svg │ ├── globe.svg │ └── next.svg ├── postcss.config.mjs ├── lib │ └── utils.ts ├── next.config.ts ├── components │ ├── ui │ │ ├── collapsible.tsx │ │ ├── textarea.tsx │ │ ├── label.tsx │ │ ├── input.tsx │ │ ├── toaster.tsx │ │ ├── copy-button.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── markdown-editor.tsx │ │ ├── dialog.tsx │ │ ├── use-toast.ts │ │ ├── sheet.tsx │ │ ├── form.tsx │ │ ├── toast.tsx │ │ └── select.tsx │ └── settings.tsx ├── eslint.config.mjs ├── components.json ├── .gitignore ├── tsconfig.json ├── hooks │ └── use-feature-flags.ts ├── README.md ├── package.json ├── tailwind.config.ts └── providers │ └── posthog.tsx ├── src ├── models │ ├── mod.rs │ ├── request.rs │ └── response.rs ├── clients │ ├── mod.rs │ ├── deepseek.rs │ └── anthropic.rs ├── main.rs ├── config.rs ├── error.rs └── handlers.rs ├── docker-compose.yml ├── .gitignore ├── config.toml ├── Dockerfile ├── LICENSE.md ├── Cargo.toml ├── CONTRIBUTING.md └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | * linguist-vendored 2 | *.rs linguist-vendored=false -------------------------------------------------------------------------------- /frontend/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/bun.lockb -------------------------------------------------------------------------------- /frontend/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/app/favicon.ico -------------------------------------------------------------------------------- /frontend/public/asterisk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/public/asterisk.png -------------------------------------------------------------------------------- /frontend/public/deepclaude.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/public/deepclaude.ico -------------------------------------------------------------------------------- /frontend/public/deepclaude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/public/deepclaude.png -------------------------------------------------------------------------------- /src/models/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod request; 2 | pub mod response; 3 | 4 | pub use request::*; 5 | pub use response::*; 6 | -------------------------------------------------------------------------------- /frontend/public/r1-plus-sonnet-benchmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/deepclaude/main/frontend/public/r1-plus-sonnet-benchmarks.png -------------------------------------------------------------------------------- /frontend/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /frontend/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /frontend/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | output: 'export', // Changed from 'standalone' to 'export' 5 | distDir: 'dist', // This will output to './dist' instead of '.next' 6 | images: { 7 | unoptimized: true, // Required for 'export' 8 | } 9 | } 10 | 11 | export default nextConfig; -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | api: 3 | build: . 4 | container_name: deepclaude_api 5 | restart: unless-stopped 6 | ports: 7 | - "127.0.0.1:1337:1337" 8 | volumes: 9 | - ./config.toml:/usr/local/bin/config.toml 10 | networks: 11 | - deepclaude_network 12 | 13 | networks: 14 | deepclaude_network: 15 | name: deepclaude_network -------------------------------------------------------------------------------- /frontend/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /frontend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { FlatCompat } from '@eslint/eslintrc' 2 | 3 | const compat = new FlatCompat({ 4 | // import.meta.dirname is available after Node.js v20.11.0 5 | baseDirectory: import.meta.dirname, 6 | }) 7 | 8 | const eslintConfig = [ 9 | ...compat.config({ 10 | extends: ['next'], 11 | rules: { 12 | 'react/no-unescaped-entities': 'off', 13 | '@next/next/no-page-custom-font': 'off', 14 | }, 15 | }), 16 | ] 17 | 18 | export default eslintConfig -------------------------------------------------------------------------------- /frontend/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "app/globals.css", 9 | "baseColor": "zinc", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | 6 | # These are backup files generated by rustfmt 7 | **/*.rs.bk 8 | 9 | # MSVC Windows builds of rustc generate these, which store debugging information 10 | *.pdb 11 | 12 | # RustRover 13 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 14 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 15 | # and can be added to the global gitignore or merged into this file. For a more nuclear 16 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 17 | #.idea/ -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | /dist 23 | 24 | # misc 25 | .DS_Store 26 | *.pem 27 | 28 | # debug 29 | npm-debug.log* 30 | yarn-debug.log* 31 | yarn-error.log* 32 | .pnpm-debug.log* 33 | 34 | # env files (can opt-in for committing if needed) 35 | .env* 36 | 37 | # vercel 38 | .vercel 39 | 40 | # typescript 41 | *.tsbuildinfo 42 | next-env.d.ts 43 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | # Server Configuration 2 | [server] 3 | host = "127.0.0.1" 4 | port = 1337 5 | 6 | # Pricing Configuration (per million tokens) 7 | [pricing] 8 | [pricing.deepseek] 9 | input_cache_hit_price = 0.14 10 | input_cache_miss_price = 0.55 11 | output_price = 2.19 12 | 13 | [pricing.anthropic] 14 | [pricing.anthropic.claude_3_sonnet] 15 | input_price = 3.0 16 | output_price = 15.0 17 | cache_write_price = 3.75 18 | cache_read_price = 0.30 19 | 20 | [pricing.anthropic.claude_3_haiku] 21 | input_price = 0.80 22 | output_price = 4.0 23 | cache_write_price = 1.0 24 | cache_read_price = 0.08 25 | 26 | [pricing.anthropic.claude_3_opus] 27 | input_price = 15.0 28 | output_price = 75.0 29 | cache_write_price = 18.75 30 | cache_read_price = 1.50 31 | -------------------------------------------------------------------------------- /frontend/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "../../lib/utils" 4 | 5 | const Textarea = React.forwardRef< 6 | HTMLTextAreaElement, 7 | React.ComponentProps<"textarea"> 8 | >(({ className, ...props }, ref) => { 9 | return ( 10 |