本地项目
侧栏的「项目 +」用于创建项目。桌面版选择本地文件夹,名称默认取文件夹名,可编辑;点击「创建并授权项目」才保存授权。取消选择或关闭弹窗不会创建项目。现有 Web/Host 调试入口需输入已认证 Host 所在电脑的绝对路径并确认,没有系统文件夹选择器。该入口不是生产版本,后续项目功能无需为纯 Web 适配;UI 验证可使用明确标注的项目样例。
点击项目名称展开或收起。项目下可以新建多个对话,或通过「项目目录」打开文件工作区;尚无对话时,该入口先创建一个项目对话。项目名称旁的编辑按钮可重命名。项目之外的新对话仍是独立对话,不继承当前项目权限。当前不提供项目删除、目录迁移、现有会话归档或完整文件树。
项目名称、授权根目录、根目录身份、折叠状态和会话的 projectId 存在本机 state.json。旧状态没有 projects 时按空列表读取,旧会话保持独立。会话日志与模型历史仍按会话 ID 保存,不在项目之间共享。
Host 根据可信项目记录派生目录权限,不采用文件请求附带的 root 或 projectId。项目会话不能单独更换或撤销根目录;项目目录移动、替换或不可访问时明确报错,需恢复原目录或新建项目。根目录设备/文件身份在每次工具访问时检查,待审批写入也不能转到替换后的目录。原有相对路径、隐藏文件、符号链接、硬链接和 Host 私有数据限制不变,所有文件写入仍需批准完整内容。应用层检查并不替代操作系统沙箱,不能防御其他本机进程持续恶意竞态修改文件树。
tests/projects.test.ts 使用临时目录验证权限派生、伪造参数、并发审批、根目录替换、重启与旧数据兼容。project-sidebar.test.tsx 验证创建/取消、原生选择器接口、重命名、折叠、会话归属和重复点击。qa.html 使用同一侧栏/文件组件的明确标注样例,目录选择返回测试路径且数据仅存内存,不授予真实文件权限;正式应用不会启用这套样例。
真实 macOS 文件夹选择弹窗和 Electron 原生视图遮挡仍需要桌面实测。没有使用真实密钥或调用收费 API。