分享一个 macOS 风格的 Web 桌面文件管理系统,包含 Go 后端和 React 前端。支持窗口管理、代码编辑、终端模拟、Docker 管理、视频/音乐播放、AI 对话与 Skills 扩展等功能。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wuhen8

分享一个 macOS 风格的 Web 桌面文件管理系统,包含 Go 后端和 React 前端。支持窗口管理、代码编辑、终端模拟、Docker 管理、视频/音乐播放、AI 对话与 Skills 扩展等功能。

  •  
  •   wuhen8 2 月 14 日 1597 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。

    全 AI 编写,没写一行代码,go 后端,React 前端,ai 还是比较适合写 React

    功能特性

    后端

    • RESTful API + WebSocket 实时通信
    • 文件/文件夹 CRUD 操作
    • 分片上传(支持 S3 直传)
    • JWT 认证机制
    • Docker Compose 管理
    • 终端 WebSocket 代理
    • 定时任务管理
    • AI 对话 + Skills 扩展系统
    • 多存储驱动(本地文件系统、S3/MinIO )

    前端

    • macOS 风格桌面体验(窗口拖拽、缩放、吸附、最大化/最小化)
    • 16 个模块化应用(文件管理器、代码编辑器、终端、Docker 管理、AI 对话等)
    • Monaco Editor 代码编辑(语法高亮、格式化)
    • xterm.js 终端模拟器
    • ArtPlayer 视频播放器
    • 音乐播放器(播放列表、循环、随机)
    • Markdown 预览( GFM + 代码高亮)
    • Spotlight 搜索( Cmd+K )
    • 右键上下文菜单系统
    • 全局快捷键
    • 主题与偏好设置(壁纸、Dock 大小、编辑器主题等)
    • 应用商店(安装/卸载扩展应用)

    Skills 系统

    Skills 是 AI 对话功能的扩展机制,允许你为 AI 添加自定义知识(提示词)或可执行工具(脚本)。

    Skills 目录位于 {FM_DATA_DIR}/skills/(默认 /opt/file-manager/skills/),启动时自动创建。

    Skill 类型

    1. 提示词 Skill ( Prompt Skill )

    为 AI 注入额外的上下文知识,支持两种格式:

    社区格式(推荐) 子目录 + SKILL.md

    skills/ └── my-knowledge/ └── SKILL.md 

    SKILL.md 支持 YAML frontmatter:

    --- name: my-knowledge description: 自定义知识描述 --- 这里是提示词内容,AI 对话时会自动加载。 

    根级文件(旧格式) 直接放置 .md.txt 文件:

    skills/ └── my-prompt.md 

    单个提示词文件最大 20KB ,所有提示词总计最大 200KB 。

    2. 脚本工具 Skill ( Script Tool Skill )

    让 AI 能够调用自定义脚本执行操作(如读取 Excel 、调用外部 API 等)。脚本在 Docker 沙箱容器中隔离执行。

    子目录格式(推荐) meta.json + main.py / main.sh

    skills/ └── read_excel/ ├── meta.json └── main.py 

    meta.json 定义工具的名称、描述和参数:

    { "name": "read_excel", "description": "读取 Excel 文件内容", "parameters": { "type": "object", "properties": { "file_path": { "type": "string", "description": "文件路径" } }, "required": ["file_path"] } } 

    main.py 中通过 ARGS 获取参数:

    # ARGS 是一个 dict ,包含 AI 传入的参数 file_path = ARGS["file_path"] # 你的处理逻辑... print(result) 

    main.sh 中通过 $ARGS 环境变量获取 JSON 参数:

    echo "$ARGS" | jq -r '.file_path' # 你的处理逻辑... 

    根级文件(旧格式) .py/.sh + 同名 .json

    skills/ ├── read_excel.py └── read_excel.json 

    沙箱配置

    脚本工具 Skill 在 Docker 沙箱容器中执行,需要:

    1. 预先创建并启动一个 Docker 容器(默认名称 fm-sandbox,可通过 FM_SANDBOX_CONTAINER 环境变量修改)
    2. 将 Skills 目录挂载到容器的 /skills/ 路径

    示例:

    docker run -d --name fm-sandbox \ -v /opt/file-manager/skills:/skills:ro \ python:3.11-slim \ sleep infinity 

    技术栈

    后端

    • Go + Gin Web Framework
    • JWT Authentication ( golang-jwt )
    • WebSocket ( gorilla/websocket )
    • Docker SDK
    • S3/MinIO ( minio-go )
    • SQLite ( modernc.org/sqlite

    前端

    • React 18 + TypeScript
    • Vite 5 (构建工具)
    • Zustand (状态管理)
    • Tailwind CSS 4
    • shadcn/ui ( Radix UI + Tailwind )
    • Monaco Editor (代码编辑)
    • xterm.js (终端)
    • ArtPlayer (视频播放)
    • framer-motion (动画)
    • Axios ( HTTP 请求)
    • lucide-react (图标)

    环境变量

    变量名 说明 默认值
    FM_DATA_DIR 应用数据目录,存放数据库、Skills 、配置等 /opt/file-manager
    FM_PORT 服务监听端口 8080
    FM_JWT_SECRET JWT 签名密钥。未设置时每次启动随机生成,重启后所有已签发的 Token 失效 随机 32 字节
    FM_SANDBOX_CONTAINER AI Skills 脚本执行所用的 Docker 沙箱容器名称 fm-sandbox

    示例:

    export FM_DATA_DIR=/data/file-manager export FM_PORT=9090 export FM_JWT_SECRET=your-secret-key export FM_SANDBOX_COnTAINER=my-sandbox 

    大家可以在这里体验一下 https://huggingface.co/spaces/wuhenba/webos https://wuhenba-webos.hf.space/ 密码: Admin@123

    二进制包也在这里可以下载

    6 条回复    2026-02-16 15:57:56 +08:00
    Moyyyyyyyyyyye
        1
    Moyyyyyyyyyyye  
    PRO
       2 月 14 日
    我更希望自己的产品介绍自己写,ai 写的看的有用的信息密度太低了,个人见解
    GPLer
        2
    GPLer  
       2 月 15 日
    虽然是虚拟环境,但还是提醒楼主注意下安全问题,试了下有完整权限。
    wuhen8
        3
    wuhen8  
    OP
       2 月 16 日
    @Moyyyyyyyyyyye 有道理,下次注意一下,自己写一个
    wuhen8
        4
    wuhen8  
    OP
       2 月 16 日
    @GPLer 里面没有隐私数据,隔一段时间自动重启就没了,纯演示我感觉蛮好
    org100
        5
    org100  
       2 月 16 日
    一直卡在 正在验证登录状态...
    wuhen8
        6
    wuhen8  
    OP
       2 月 16 日
    @org100 好了,你可以再试试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5481 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 07:17 PVG 15:17 LAX 00:17 JFK 03:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86