├── gui ├── README.md ├── .gitignore ├── frontend │ ├── package.json.md5 │ ├── src │ │ ├── vite-env.d.ts │ │ ├── lib │ │ │ ├── utils.ts │ │ │ └── golog.ts │ │ ├── views │ │ │ ├── types.ts │ │ │ ├── Footer.tsx │ │ │ ├── AlertMessage.tsx │ │ │ └── Log.tsx │ │ ├── main.tsx │ │ ├── components │ │ │ ├── ui │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── avatar.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ ├── resizable.tsx │ │ │ │ ├── toggle-group.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── accordion.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── input-otp.tsx │ │ │ │ ├── breadcrumb.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── pagination.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── alert-dialog.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ └── command.tsx │ │ │ ├── theme-toggle.tsx │ │ │ └── theme-provider.tsx │ │ ├── App.tsx │ │ ├── hooks │ │ │ └── use-mobile.ts │ │ ├── assets │ │ │ └── react.svg │ │ └── index.css │ ├── tsconfig.json │ ├── index.html │ ├── vite.config.ts │ ├── components.json │ ├── wailsjs │ │ ├── go │ │ │ ├── main │ │ │ │ ├── App.d.ts │ │ │ │ └── App.js │ │ │ └── models.ts │ │ └── runtime │ │ │ └── package.json │ ├── tsconfig.node.json │ ├── tsconfig.app.json │ └── package.json ├── build │ ├── appicon.png │ ├── windows │ │ ├── icon.ico │ │ ├── info.json │ │ ├── wails.exe.manifest │ │ └── installer │ │ │ ├── project.nsi │ │ │ └── wails_tools.nsh │ ├── darwin │ │ ├── Info.plist │ │ └── Info.dev.plist │ └── README.md ├── wails.json ├── version.js ├── main.go ├── go.mod └── app.go ├── tests ├── nginx-tomcat │ ├── code │ │ └── index.html │ ├── docker-compose.yml │ └── default.conf ├── nginx-tomcat-load-balance │ ├── code │ │ └── index.html │ ├── docker-compose.yml │ └── default.conf ├── img │ ├── gui.jpg │ ├── suo5.gif │ ├── big-files.jpg │ ├── experience.gif │ ├── little-files.jpg │ └── big-files-no-limit.jpg └── mbtest │ └── main.go ├── mise.toml ├── assets ├── README.md ├── java │ └── README.md ├── .net │ └── README.md └── php │ └── README.md ├── DONATION.md ├── .golangci.yml ├── .gitignore ├── .github ├── workflows │ ├── lint.yml │ └── release.yml └── actions │ ├── setup │ └── action.yml │ └── run-tests │ └── action.yml ├── netrans ├── conn.go ├── frame_test.go ├── reader_test.go ├── speed.go ├── frame.go └── reader.go ├── suo5 ├── event.go ├── cookiejar.go ├── conn.go ├── heartbeat.go ├── classic.go ├── protocol.go └── tunnel.go ├── LICENSE ├── ctrl ├── forward.go └── socks5.go ├── go.mod └── CHANGELOG.md /gui/README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | -------------------------------------------------------------------------------- /tests/nginx-tomcat/code/index.html: -------------------------------------------------------------------------------- 1 |

It Works

-------------------------------------------------------------------------------- /gui/.gitignore: -------------------------------------------------------------------------------- 1 | build/bin 2 | node_modules 3 | frontend/dist 4 | -------------------------------------------------------------------------------- /gui/frontend/package.json.md5: -------------------------------------------------------------------------------- 1 | 666937a365483166c4234e595a8195a5 -------------------------------------------------------------------------------- /tests/nginx-tomcat-load-balance/code/index.html: -------------------------------------------------------------------------------- 1 |

It Works

-------------------------------------------------------------------------------- /gui/frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | go = "1.20.14" 3 | node = "22.14.0" 4 | 5 | [env] 6 | -------------------------------------------------------------------------------- /tests/img/gui.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/gui.jpg -------------------------------------------------------------------------------- /tests/img/suo5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/suo5.gif -------------------------------------------------------------------------------- /gui/build/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/gui/build/appicon.png -------------------------------------------------------------------------------- /tests/img/big-files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/big-files.jpg -------------------------------------------------------------------------------- /gui/build/windows/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/gui/build/windows/icon.ico -------------------------------------------------------------------------------- /tests/img/experience.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/experience.gif -------------------------------------------------------------------------------- /tests/img/little-files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/little-files.jpg -------------------------------------------------------------------------------- /tests/img/big-files-no-limit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zema1/suo5/HEAD/tests/img/big-files-no-limit.jpg -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # Suo5 Remote Scripts 2 | 3 | ## 进入查看详情 4 | 5 | - [Java](java) 6 | - [.Net](.net) 7 | - [PHP](php) 8 | -------------------------------------------------------------------------------- /DONATION.md: -------------------------------------------------------------------------------- 1 | ## 捐赠 2 | 3 | 感谢您的支持,这将使我更有动力维护开源项目! 4 | 5 | 您也可以从首页加我微信,有问题方便讨论, 添加好友记得备注 `问题反馈与讨论` ~ 6 | 7 | -------------------------------------------------------------------------------- /gui/frontend/src/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 | -------------------------------------------------------------------------------- /gui/frontend/src/views/types.ts: -------------------------------------------------------------------------------- 1 | export enum ConnectStatus { 2 | INITIAL = 'INITIAL', 3 | CONNECTING = 'CONNECTING', 4 | SUCCESS = 'SUCCESS', 5 | FAILED = 'FAILED', 6 | } 7 | 8 | export enum Feature { 9 | SOCKS5 = 'socks5', 10 | FORWARD = "forward", 11 | } -------------------------------------------------------------------------------- /gui/frontend/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import './index.css' 4 | import App from './App' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /gui/frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ], 7 | "compilerOptions": { 8 | "baseUrl": ".", 9 | "paths": { 10 | "@/*": ["./src/*"] 11 | }, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 2 | 3 | function AspectRatio({ 4 | ...props 5 | }: React.ComponentProps) { 6 | return 7 | } 8 | 9 | export { AspectRatio } 10 | -------------------------------------------------------------------------------- /gui/frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | gui2 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ className, ...props }: React.ComponentProps<"div">) { 4 | return ( 5 |
10 | ) 11 | } 12 | 13 | export { Skeleton } 14 | -------------------------------------------------------------------------------- /gui/frontend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import tailwindcss from "@tailwindcss/vite" 3 | import react from "@vitejs/plugin-react" 4 | import {defineConfig} from "vite" 5 | 6 | // https://vite.dev/config/ 7 | export default defineConfig({ 8 | plugins: [react(), tailwindcss()], 9 | resolve: { 10 | alias: { 11 | "@": path.resolve(__dirname, "./src"), 12 | }, 13 | }, 14 | }) -------------------------------------------------------------------------------- /tests/nginx-tomcat/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | nginx: 4 | image: nginx 5 | ports: 6 | - "8070:80" 7 | volumes: 8 | - ./default.conf:/etc/nginx/conf.d/default.conf:ro 9 | 10 | tomcat: 11 | image: tomcat:9 12 | volumes: 13 | - ./server.xml:/usr/local/tomcat/conf/server.xml:ro 14 | - ./code:/usr/local/tomcat/webapps/code/ 15 | # ports: 16 | # - "8071:8080" 17 | -------------------------------------------------------------------------------- /gui/build/windows/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "fixed": { 3 | "file_version": "{{.Info.ProductVersion}}" 4 | }, 5 | "info": { 6 | "0000": { 7 | "ProductVersion": "{{.Info.ProductVersion}}", 8 | "CompanyName": "{{.Info.CompanyName}}", 9 | "FileDescription": "{{.Info.ProductName}}", 10 | "LegalCopyright": "{{.Info.Copyright}}", 11 | "ProductName": "{{.Info.ProductName}}", 12 | "Comments": "{{.Info.Comments}}" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /gui/frontend/src/App.tsx: -------------------------------------------------------------------------------- 1 | import Home from '@/views/Home' 2 | import {Toaster} from "@/components/ui/sonner" 3 | import {ThemeProvider} from "@/components/theme-provider" 4 | 5 | export default function App() { 6 | return ( 7 | 8 |
9 | 10 |
11 | 12 |
13 | ) 14 | } -------------------------------------------------------------------------------- /.golangci.yml: -------------------------------------------------------------------------------- 1 | version: "2" 2 | linters: 3 | exclusions: 4 | generated: lax 5 | presets: 6 | - comments 7 | - common-false-positives 8 | - legacy 9 | - std-error-handling 10 | paths: 11 | - tests 12 | - assets 13 | - gui 14 | - third_party$ 15 | - builtin$ 16 | - examples$ 17 | formatters: 18 | exclusions: 19 | generated: lax 20 | paths: 21 | - third_party$ 22 | - builtin$ 23 | - examples$ 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .DS_Store 3 | 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | release/ 11 | 12 | # Test binary, built with `go test -c` 13 | *.test 14 | _test 15 | _testmain.go 16 | 17 | # Output of the go coverage tool, specifically when used with LiteIDE 18 | *.out 19 | 20 | # Dependency directories (remove the comment below to include it) 21 | vendor/ 22 | 23 | *.env 24 | config.yml 25 | 26 | *.sqlite3 27 | *.sqlite3-journal 28 | 29 | data/ 30 | *backup/ -------------------------------------------------------------------------------- /gui/frontend/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "src/index.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 | } -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Run linters 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | permissions: 8 | contents: read 9 | jobs: 10 | lint: 11 | name: golangci-lint 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | submodules: recursive 17 | - uses: actions/setup-go@v5 18 | with: 19 | go-version: '1.20' 20 | - run: go mod download 21 | - uses: golangci/golangci-lint-action@v8 22 | with: 23 | skip-cache: true 24 | -------------------------------------------------------------------------------- /gui/wails.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://wails.io/schemas/config.v2.json", 3 | "name": "suo5", 4 | "outputfilename": "suo5-gui", 5 | "frontend:install": "npm install", 6 | "frontend:build": "npm run build", 7 | "frontend:dev:watcher": "npm run dev", 8 | "frontend:dev:serverUrl": "auto", 9 | "author": { 10 | "name": "", 11 | "email": "" 12 | }, 13 | "info": { 14 | "companyName": "", 15 | "productName": "suo5-gui", 16 | "productVersion": "0.0.0", 17 | "copyright": "All rights reserved", 18 | "comments": "Built using Wails (https://wails.app)" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /gui/frontend/wailsjs/go/main/App.d.ts: -------------------------------------------------------------------------------- 1 | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 2 | // This file is automatically generated. DO NOT EDIT 3 | import {suo5} from '../models'; 4 | import {main} from '../models'; 5 | 6 | export function DefaultSuo5Config():Promise; 7 | 8 | export function ExportConfig(arg1:suo5.Suo5Config):Promise; 9 | 10 | export function GetStatus():Promise; 11 | 12 | export function ImportConfig():Promise; 13 | 14 | export function RunSuo5WithConfig(arg1:suo5.Suo5Config):Promise; 15 | 16 | export function Stop():Promise; 17 | -------------------------------------------------------------------------------- /gui/frontend/src/hooks/use-mobile.ts: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /gui/frontend/wailsjs/runtime/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@wailsapp/runtime", 3 | "version": "2.0.0", 4 | "description": "Wails Javascript runtime library", 5 | "main": "runtime.js", 6 | "types": "runtime.d.ts", 7 | "scripts": { 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/wailsapp/wails.git" 12 | }, 13 | "keywords": [ 14 | "Wails", 15 | "Javascript", 16 | "Go" 17 | ], 18 | "author": "Lea Anthony ", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/wailsapp/wails/issues" 22 | }, 23 | "homepage": "https://github.com/wailsapp/wails#readme" 24 | } 25 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/sonner.tsx: -------------------------------------------------------------------------------- 1 | import { useTheme } from "next-themes" 2 | import { Toaster as Sonner, ToasterProps } from "sonner" 3 | 4 | const Toaster = ({ ...props }: ToasterProps) => { 5 | const { theme = "system" } = useTheme() 6 | 7 | return ( 8 | 20 | ) 21 | } 22 | 23 | export { Toaster } 24 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as LabelPrimitive from "@radix-ui/react-label" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | function Label({ 9 | className, 10 | ...props 11 | }: React.ComponentProps) { 12 | return ( 13 | 21 | ) 22 | } 23 | 24 | export { Label } 25 | -------------------------------------------------------------------------------- /gui/version.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs") 2 | const manifest = require("./wails.json") 3 | const version = process.argv[2].replace("v", "").split("-")[0] 4 | 5 | if (!version) { 6 | console.log("No version supplied") 7 | process.exit(1) 8 | } 9 | 10 | // update version in wails.json 11 | manifest.info.productVersion = version 12 | const data = JSON.stringify(manifest, null, 2) 13 | fs.writeFileSync("wails.json", data) 14 | 15 | // read main.go and replace v0.0.0 with the new version 16 | const mainGoPath = "./main.go" 17 | const mainGoContent = fs.readFileSync(mainGoPath, "utf8") 18 | const newMainGoContent = mainGoContent.replace(/v\d+\.\d+\.\d+/, `v${version}`) 19 | fs.writeFileSync(mainGoPath, newMainGoContent) 20 | 21 | console.log(`Updated build version to ${version}`) -------------------------------------------------------------------------------- /gui/frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2022", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "node", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | "esModuleInterop": true, 16 | "allowSyntheticDefaultImports": true, 17 | 18 | /* Linting */ 19 | "strict": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noFallthroughCasesInSwitch": true, 23 | "noUncheckedSideEffectImports": true 24 | }, 25 | "include": ["vite.config.ts"] 26 | } 27 | -------------------------------------------------------------------------------- /gui/frontend/wailsjs/go/main/App.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 3 | // This file is automatically generated. DO NOT EDIT 4 | 5 | export function DefaultSuo5Config() { 6 | return window['go']['main']['App']['DefaultSuo5Config'](); 7 | } 8 | 9 | export function ExportConfig(arg1) { 10 | return window['go']['main']['App']['ExportConfig'](arg1); 11 | } 12 | 13 | export function GetStatus() { 14 | return window['go']['main']['App']['GetStatus'](); 15 | } 16 | 17 | export function ImportConfig() { 18 | return window['go']['main']['App']['ImportConfig'](); 19 | } 20 | 21 | export function RunSuo5WithConfig(arg1) { 22 | return window['go']['main']['App']['RunSuo5WithConfig'](arg1); 23 | } 24 | 25 | export function Stop() { 26 | return window['go']['main']['App']['Stop'](); 27 | } 28 | -------------------------------------------------------------------------------- /assets/java/README.md: -------------------------------------------------------------------------------- 1 | # Java 2 | 3 | 推荐使用 [MemshellParty](https://github.com/ReaJason/MemShellParty) 项目来生成内存马并进行注入。 4 | 5 | 环境依赖:Java 6及以上版本。 6 | 7 | 下方表格是 CI 测试中确认可以使用的版本,实际上绝大部分中间件都可以使用,只要实现了 Java Servlet 规范即可。 8 | 9 | | 中间件 | 自动检测 | 全双工 | 半双工 | 短链接 | 10 | |:---------------------|:----:|:---:|:---:|:---:| 11 | | Tomcat (4.1-10) | ✓ | ✓ | ✓ | ✓ | 12 | | Jetty (9.4-11.0) | ✓ | ✓ | ✓ | ✓ | 13 | | Resin (3.1-4.0) | ✓ | ✓ | ✓ | ✓ | 14 | | JBoss (4-7, EAP-7) | ✓ | ✓ | ✓ | ✓ | 15 | | WebSphere | ✓ | ✓ | ✓ | ✓ | 16 | | Weblogic (10.3-14.1) | ✓ | ✓ | ✓ | ✓ | 17 | | TongWeb (6) | ✓ | ✓ | ✓ | ✓ | 18 | 19 | 暂时不打算支持的中间件为: 20 | 21 | - Netty 22 | - Spring Webflux 23 | 24 | 主要原因是用的比较少,而且语法比较特殊,需要投入精力单独适配。如果你觉得这些中间件很重要,可以提 issue 说明理由,我会考虑支持。 25 | -------------------------------------------------------------------------------- /gui/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "embed" 5 | 6 | "github.com/wailsapp/wails/v2" 7 | "github.com/wailsapp/wails/v2/pkg/options" 8 | "github.com/wailsapp/wails/v2/pkg/options/assetserver" 9 | ) 10 | 11 | //go:embed all:frontend/dist 12 | var assets embed.FS 13 | 14 | func main() { 15 | // Create an instance of the app structure 16 | app := NewApp() 17 | 18 | // Create application with options 19 | err := wails.Run(&options.App{ 20 | Title: "Suo5 - 开源版 v0.0.0", 21 | Width: 620, 22 | Height: 860, 23 | MinWidth: 550, 24 | MinHeight: 600, 25 | AssetServer: &assetserver.Options{ 26 | Assets: assets, 27 | }, 28 | OnStartup: app.Startup, 29 | OnShutdown: app.Shutdown, 30 | Bind: []interface{}{ 31 | app, 32 | }, 33 | }) 34 | 35 | if err != nil { 36 | println("Error:", err.Error()) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/separator.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as SeparatorPrimitive from "@radix-ui/react-separator" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | function Separator({ 9 | className, 10 | orientation = "horizontal", 11 | decorative = true, 12 | ...props 13 | }: React.ComponentProps) { 14 | return ( 15 | 25 | ) 26 | } 27 | 28 | export { Separator } 29 | -------------------------------------------------------------------------------- /gui/frontend/src/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | function Textarea({ className, ...props }: React.ComponentProps<"textarea">) { 6 | return ( 7 |