GoForum › 🌐 V2EX
分享一个 macOS 风格的 Web 桌面文件管理系统,包含 Go 后端和 React 前端。支持窗口管理、代码编辑、终端模拟、Docker 管理、视频/音乐播放、AI 对话与 Skills 扩展等功能。
wuhen8 ·
2026-02-14 16:47 ·
0 次点赞 · 1 条回复
全 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 沙箱容器中执行,需要:
- 预先创建并启动一个 Docker 容器(默认名称
fm-sandbox,可通过FM_SANDBOX_CONTAINER环境变量修改) - 将 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
二进制包也在这里可以下载
1 条回复
添加回复
你还需要 登录
后发表回复
我更希望自己的产品介绍自己写,ai 写的看的有用的信息密度太低了,个人见解