4.3 KiB
4.3 KiB
name, description, owner, pillar, triggers, updated
| name | description | owner | pillar | triggers | updated | ||||
|---|---|---|---|---|---|---|---|---|---|
| 宿主挂载执行_SHELL | 金仓掌管:卡若控制台 / 网关对话里「云上 bash」≠ 用户 Mac; 用 Docker(或本机 Darwin)宿主挂载对齐磁盘与宿主 CLI(ffmpeg 等)。 触发:宿主执行、宿主挂载、Mac 路径、云上 bash、/Users、karo_exec、万推控制台、挂载出错、宿主程序、Docker shell。 | 金仓 | 金 |
|
2026-05-10 |
宿主挂载执行(Shell 宿主语义)
〇、问题范式(必读)
控制台、万推等平台里的「助手 bash 自动执行」若跑在 Linux 云端/容器,则:
- 没有浏览器所在 Mac 上的
/Users/…、brew、macOS open -a … - 「挂载」在用户 Mac 侧的文件夹,不等于云上进程能看见同一路径
卡若 ai 网站(karuo_exec、助手 Markdown 内的 bash/sh 代码块自动执行):命令在 站点 Node 宿主运行;若为 Linux/Docker,与上条同理。站点已对明显 Mac-centric 命令做 宿主语义预检,并注入 Agent 系统说明;真正跑宿主音视频等仍须走本节「宿主壳」或使用会话 工作区挂载(仅服务端可见的那段目录树)。
一、会话工作区(站点侧,抽象层 ①)
控制台 绑定本机挂载目录,使 workspace_* 的根为服务端可读路径。不解决宿主 ffmpeg 在用户 Mac 二进制层执行,仅解决同一台 server 进程下的相对路径读写。
参见网站侧栏:系统设置 → 设备与本地 / 挂载、/api/chat/workspace-mounts。
一·甲:统一「整理」入口(2026-05-20 沉淀)
- 三处共用同一组件:
site/src/modules/workspace-mount/WorkspaceMountPicker.tsx— 对话底栏、项目管理新建/编辑、系统设置「本地文件」均经此模块挂载与解绑;不允许各自再造「选目录 / 手填路径」。 - 路径白名单:
site/src/lib/workspace-mount-policy.ts:assertMountPathPolicy(absPath)默认禁止「自己爬上去」挂载,仅允许 HOME / Documents / Documents/个人 / Documents/开发 与一键推荐目录及KARUO_LOCAL_WORKSPACE_MOUNT_PREFIXES。 - 后端两条线都走 policy:
local-workspace-mount-storage.ts:assertValidLocalMountPath(/api/chat/workspace-mounts)与workspace-roots-storage.ts:ensureWorkspaceRoot(/api/docs/workspace)。LocalFilesPanel选目录/粘贴路径双 POST,保持两套集合一致。 - 放开手填:仅
KARUO_ALLOW_FREE_MOUNT=1时 UI 才显示「管理员手填」入口;管理员仍受 policy 校验,前缀环境变量与运行时一致。 - 选目录优先级:本机桥接
pnpm run local-bridge(127.0.0.1:39281) →showDirectoryPicker(Electron/壳带.path) → 常用目录一键 chip。错误提示固定一句「请在 site 跑 pnpm run local-bridge / 或点常用目录」,不提供越界路径文案。 - API 透传
allowFreeMount/localBridgeCmd,避免前端硬编码命令。
二、宿主挂载开发壳(Mac 终端侧,抽象层 ②)
在 用户 Mac 的终端构建带 apt 工具的 Linux 容器,并把家目录绑定为容器内 /host:
- 主仓路径:
01_卡资(金)/金仓_存储备份/docker-mac-host-shell/(Dockerfile、docker-compose.yml、run-shell.sh) - 宿主机:
~/Movies/foo.mp4 - 容器内:
/host/Movies/foo.mp4 - CLI(
ffmpeg、zsh)用镜像内安装的版本,不等于宿主 Homebrew,但可操作同一批挂载文件。
三、与网站对话的衔接
| 用户需求 | 走法 |
|---|---|
| 只改服务端可见工程文件 | workspace_* + 会话挂载 |
| 必须用户 Mac 上跑转码 / 宿主工具 | Mac 终端跑 docker-mac-host-shell,别把 /Users/ 塞进云端 bash |
| 管理员确知无隐私风险须在 Linux 放行 Mac 字面量 | KARUO_EXEC_ALLOW_MAC_PATHS=1(仍可能执行失败) |
四、验收
- Agent 收到的 system 中带 命令执行环境与挂载 小节;Linux 宿主下不再一本正经生成仅靠
/Users/才可执行的脚本而不加说明。 - 用户能理解:Web 不能直接挂载浏览器那台机器的任意路径,除非服务端进程本身能读到(工作区挂载)或在 Mac 开宿主壳。