Commit Graph

16 Commits

Author SHA1 Message Date
8d10effd56 feat(permission): 只读权限联动执行环境锁定沙箱
- set_permission_mode 进入 readonly 时强制切 sandbox(存 pre_readonly_execution_mode 供切离恢复)
- set_execution_mode 新增 readonly 锁(拦 direct,与 plan 锁并列)
- apply_pending_runtime_mode_changes 执行环境应用加 try/except 防御
- POST /api/permission-mode 响应带 execution state
- 前端执行环境组 readonly 时禁用+锁定标记,权限切换后同步执行环境
2026-08-13 15:24:24 +08:00
ec294e2545 feat(work-mode): 新增运行模式系统 plan/ask/execute 三档
- 输入栏新增运行模式切换器,仅对话空闲可切换,新对话继承当前选择
- plan 档锁定只读权限与沙箱执行环境(UI 禁用+后端强制),网络权限保持可调
- 计划写入 .astrion/plan/,submit_plan 提交后前端弹窗审批,批准自动切换 execute
- ask 档直接输出讨论并禁用 ask_user;execute 档自行补全细节直接开工
- 个性化新增默认运行模式(默认 plan),主提示词加运行模式让位注解
- 修复后台命令绕过只读权限的漏洞(宿主机按 sandbox_write_access 选只读沙箱计划)
- 计划审批与询问弹窗改用 100dvh 动态视口高度,适配移动端 Safari
2026-08-13 12:52:19 +08:00
56c067b710 feat(memory): 新增项目记忆最大注入条数设置,记忆索引按最近修改排序
- 个人空间-上下文新增「最大记忆注入」(默认 20,最小 5,留空无上限)
- 提示词中项目记忆索引从文件名字典序改为按 mtime 倒序注入
- 超上限时截断并注入说明:共 N 条、仅注入前 x 条、其余用 search_project_memory 检索
- 修复 memory_system 模板条件块只删标记不删占位文字导致的「暂无xx记忆」残留
2026-08-12 23:07:14 +08:00
ff927d6739 refactor(files): 下线独立 /file-manager 页面及其写操作端点
- 删除页面路由:/file-manager、/file-manager/editor、/file-preview/<path>
- 删除写端点:/api/gui/files/{create,delete,rename,copy,move,upload,download/batch}
- 保留主 SPA 共享端点:/api/files、entries、text、download、/api/project/files/search
- 拆除前端入口链:QuickMenu → InputComposer → App.vue → openGuiFileManager
- 删除 static/file_manager/ 目录(git 历史可恢复)
- sanitize_filename_preserve_unicode 迁至 server/utils_common.py,
  清理 5 个拆分文件的死 import,修复 api_v1/chat 上传的引用来源
- 安全收益:create/rename 路径穿越与 preview 存储型 XSS 随页面物理消解
2026-08-12 19:14:01 +08:00
045cc72c43 feat(ask-user): 弹窗新增「不回答」选项
- 弹窗 footer 新增「✕ 不回答」按钮,只跳过当前查看的问题,
  其余问题保持待回答
- 后端 answer() 支持 dismissed 类型答案,跳过非空校验
- 模型侧工具结果返回「用户没有回答或不想回答这个问题,
  请直接输出内容向用户提问」,引导模型改为在对话中提问
2026-08-07 14:31:05 +08:00
dc61bd92dc refactor(runtime-mode): 运行期模式切换通知改为基线漂移检测机制 2026-08-01 10:02:24 +08:00
493ac160eb fix(windows): 平台适配与稳定性修复(进程终止/编码/原子写/事件竞态/子智能体)
- 进程终止:Windows 用 CTRL_BREAK + taskkill /F /T 替代不存在的 killpg/SIGKILL,
  超时/取消全路径有界;_is_pid_alive 改 ctypes(原 os.kill(pid,0) 在 Windows 会真杀进程);
  reader 任务 finally 收口,消除 Task was destroyed but it is pending / unclosed transport
- 子智能体调度链:_run_coro 超时 60s + 失败 cancel/close 防幽灵协程;create 改先调度后提交、
  失败回滚;state 归属守卫 + 新建 120s 宽限期防误标已终止;_ensure_event_loop 加锁;
  子智能体 todo 改 per-agent 隔离存储,不再串到主智能体前端
- 子智能体执行环境(execution_env_text.py):创建/切换/恢复三时点注入环境说明,
  Windows 下 sandbox=WSL2 bash、direct=cmd;inject_notification 纯通知不触发新一轮工作,
  tool 序列中延迟到安全点 flush;传统子智能体按既定语义不通知
- 编码:git 侧边栏 subprocess 显式 utf-8 + errors=replace(修中文 Windows GBK
  _readerthread 崩溃导致侧边栏空白);check_environment/install_package 用 self.python_cmd
- 安全/路径:permission.py Windows deny 列表生效 + 驱动器根拦截;路径比较统一 normcase;
  /tmp 白名单平台分流;正斜杠判断归一化;os-release 平台守卫;PowerShell -ExecutionPolicy Bypass
- 稳定性:任务事件轮询持锁快照(修 deque mutated during iteration);
  原子写新增 replace_with_retry(修 WinError 5/32 瞬时持锁);
  共享文件兜底链 symlink→os.link 硬链接→copy2
- 部署:新增 _bootstrap.bat / setup.bat / start.bat Windows 启动脚本
2026-07-31 11:33:57 +08:00
cf51ab0555 refactor(cleanup): 移除余额查询功能、清理前端调试日志、规整终端输出 2026-07-25 12:07:04 +08:00
c9c3eedd82 feat: 移除实验性间隔思考模式,推理强度前置到前端
- 彻底移除「每 N 次请求强制思考」的间隔调度机制(思考/非思考交替导致缓存命中率极低)
- 运行模式收敛为 fast/thinking:原 deep 改名 thinking,历史数据读取时映射
- 新增推理强度五档滑块(low/medium/high/xhigh/max + 默认不传参),置于模型/模式弹窗
- 模型配置新增 reasoning_effort 开关;档位会话级持久化到对话 meta,随对话保存/恢复
- 个人空间新增「默认推理强度」;新用户默认运行模式改为 thinking
- 滑块交互:JS 插值驱动(点击/拖动/吸附全程平滑),首帧档位语义定位无闪烁
- 保存链路:前端防抖 600ms + conversation_id 兜底,修复 /new 发消息丢档位、切对话恢复错误
2026-07-21 13:47:53 +08:00
bd06f96d07 fix(server,static): 修复执行环境/权限模式切换对当前对话不生效
对话级 terminal 隔离后,模式切换请求未携带 conversation_id,
落在工作区级服务 terminal 上;而任务实际运行在对话级 terminal,
且 load_conversation 每次都会从对话 metadata 恢复创建时冻结的模式,
导致旧对话模式永远无法改变、新对话继承服务 terminal 的瞬时模式。

- 前端 permission.ts:权限/执行环境/网络权限的 POST 与 GET
  均携带当前 conversation_id,路由到对话级 terminal 并持久化到正确对话
- 后端 permission.py:切换时同步工作区级服务 terminal 的内存态
  (persist=False),保证新建对话继承最新模式而非过期模式
- 附带修复:运行期间切换的 pending 队列此前排在错误的 terminal 上,
  任务工具循环永远消费不到
2026-07-20 14:25:49 +08:00
1289c31dfe fix(model): 修复重启后进入对话模型回变为默认模型
对话级隔离后存在四处模型覆盖/错存路径:
1. 对话级 terminal 绑定加载用 restore_model=False,重启后新建的
   对话级 terminal 丢失对话保存的模型 -> 绑定加载恢复模型
2. /api/model 把工作区级 terminal 的陈旧 current_conversation_id
   当目标保存,模型写到错误对话或丢失(且用陈旧 history 全量保存
   有覆盖新消息风险)-> 仅当请求显式携带 conversation_id 且与
   terminal 当前对话一致时才持久化
3. 前端切换模型不携带 conversation_id -> handleModelSelect 带上
4. _apply_workspace_personalization_preferences 把 session 全局模型
   /个性化默认模型覆盖到对话级 terminal -> 对话级 terminal 跳过,
   其模型由绑定加载权威确定
2026-07-20 02:20:06 +08:00
e3c897947f refactor(paths): 统一迁移运行态数据路径到 Astrion 命名空间
- 工作区内部路径 .agents/ -> .astrion/
- 默认运行态数据根 ~/.agents/agents/ -> ~/.astrion/astrion/
- 环境变量 AGENTS_DATA_ROOT -> ASTRION_DATA_ROOT(无兼容)
- 同步更新代码、测试、文档与脚本中的路径引用
- 新增 .gitignore 忽略 .astrion/ 与 .agents/ 运行态目录
2026-07-10 00:35:15 +08:00
3db4e0beb4 feat(sandbox): macOS host sandbox deny-list for sensitive paths
- Add default deny_read_paths/deny_read_regexes to host_sandbox_policy.json
- Generate deny rules for ~/.ssh, ~/.aws, ~/.kube, keychains, .env, etc.
- Readonly sandbox: global read + deny sensitive + write only /dev/null
- Workspace-write sandbox: global read + deny sensitive + writable paths
- Keep workspace files readable by re-allowing workspace subpath after deny
- Backend API validates path authorization against deny list
- Path auth dialog hint explains readable paths behavior
2026-07-09 16:25:04 +08:00
f7b79418f9 fix(android): 修复App文件下载、PDF卡片展示与本地媒体发送 2026-06-24 00:59:48 +08:00
e4a663594d feat: Android App 原生 PDF 预览与前端 show_file 卡片
- 集成 AndroidPdfViewer (mhiew fork) 实现不依赖浏览器的 PDF 预览
- 新增 PdfPreviewActivity 与 JS Bridge (AndroidPdfBridge)
- ShowFileCard 在 Android App 内对 PDF 显示「预览」按钮,不内嵌 iframe
- 新增 /api/file/content 后端接口用于文件内容 inline 预览
- 前端支持 <show_file> 标签与 download:// 链接渲染
- 更新 Android 版本号至 1.0.35
2026-06-24 00:06:10 +08:00
f661dc6456 refactor(server,modules,utils,frontend): split oversized modules into packages and fix regressions
- Split server/chat.py, server/status.py, server/tasks.py into sub-packages
- Split utils/context_manager.py, utils/conversation_manager.py into mixin packages
- Split modules/file_manager.py, persistent_terminal.py, terminal_ops.py, mcp_client_manager.py into packages
- Split core/main_terminal_parts/context.py into base + mixins
- Split static/src/app/methods/{ui,message,upload,taskPolling,conversation} into sub-modules
- Fix flattened method exports, dynamic import paths, missing cross-module imports
- Add missing permission/network/execution mode constants and _PERMISSION_MODE_LABEL
- Update AGENTS.md, CLAUDE.md and project memories to reflect new structure
2026-06-20 15:54:48 +08:00