进入小镇后先恢复项目与工作记录,再展示向导。已有项目直接展示各居民的最近活动、需求与回复摘要,以及查看记录 / 继续入口;关闭面板后可从“工作记录”按钮返回。没有保存的项目时,只有一个已有项目则自动选中,多个项目则列出供选择。加载、超时、恢复失败和上次项目失效分别提示,不再都显示成首次选择文件夹。未配置模型时仍可查看已有记录;实际发送被配置检查拦截时,打开模型设置并保留草稿。配置状态只表示已选择模型和具备凭据,不表示连接测试通过。
已有项目的文件夹操作收在“更换项目”中。已有对话或草稿的居民显示“继续会话”,打开后复用该项目下的居民 Session。选择居民前刷新 Session 目录,避免工作区先恢复、会话目录尚未加载时覆盖旧映射。
居民面板先显示需要确认的工具请求和本轮进展,再显示输入框。运行中发送补充会排队;关闭面板不取消任务。当前请求、回复与本轮工具返回结果可直接查看,之前的对话默认折叠。“本轮已结束”不代表代码正确或测试通过,需查看居民的验证说明与执行结果。
未发送文本以 qcode.resident-drafts.v1 保存在当前浏览器,按项目和居民隔离;首次读取会回退到更名前的 agent-isles.resident-drafts.v1,成功迁移后只写新键。仅在发送成功且草稿未被改写时清除。存储不可用时提示用户复制保存,草稿不提供跨浏览器或多标签页同步保证。
项目选择和居民 Session 关联通过本地 Host 的 /qcode/resident-state 保存到 DSH_HOME/qcode-state.json,串行合并更新并原子替换文件;不复制 DSH 的会话历史。缺少新状态文件时会读取更名前的 agent-isles-state.json,并在下一次更新时写入新文件;旧路由在迁移期保留别名。旧浏览器映射在打开居民时迁移;浏览器映射缺失时,只恢复当前项目中标题明确且唯一的旧居民会话。已删除或存在歧义的会话不自动替换,提示在高级工作台检查。无法关联居民的历史会话提供高级工作台入口。最近摘要通过 DSH 的公开 follow 接口读取一页后释放,不发送模型请求。Teacher / File Keeper 的只读约束仍是角色提示,不是独立权限沙箱。
corepack yarn build:webcorepack yarn typechecknode --test packages/qcode-web/tests/resident-model.test.mjs packages/qcode-web/tests/model-settings.test.mjsgit diff --check
本次另使用隔离的 DSH_HOME、项目和本机模拟模型做浏览器验收:缺 Key 保留草稿、保存后使用用户 Key、刷新后复用 Session 并继续上下文、关闭面板后完成任务,以及真实 write/read 工具往返。模拟模型只提供确定性回复,不验证真实模型的代码生成质量;世界 iframe 在该验收中用测试页面替代。桌面和 390px 宽手机面板均检查过。