|
|
265f71e297
|
fix(static): 修复运行期加载对话进度块周期性重复显示
对账循环把 pending/cancel_requested 的活任务误判为「缺轮询」(服务端活跃
集合含 pending/cancel_requested,而 hasActiveTask 只认 running),每 2.5s
触发一次「清去重 + 偏移归零」的全量事件重放;思考/文本/tool_preparing 块
创建无幂等,每轮重放整份追加,十几份后页面卡死。
A: 对账 resume 增加 alreadyTrackingMain 判定(同任务且轮询在跑则不介入,
仅幂等对齐 taskInProgress 标志位)
B: resumeTask 收编 resetOffset——同任务且轮询在跑时拒绝归零事件偏移,
仅冷启动恢复(不同任务或轮询已停)允许归零
D: startThinkingAction/startTextAction/handleToolPreparing 幂等创建,
已有流式块/同 id 块时复用而非新建,作为去重集合被清后的最后防线
|
2026-07-21 14:39:42 +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 |
|
|
|
496bbe4f97
|
docs: 计划文档加注方向C后语义演进与bootstrap只读边界
|
2026-07-20 23:50:20 +08:00 |
|
|
|
01a1658a99
|
feat(server): 对话保存改为按 message_id 合并写(方向C merge-on-save)
save_conversation 全量覆写改为合并写:快路径前缀追加与现状一致;
慢路径以磁盘为基、同 id 取内存版、内存独有追加在后——旧实例任何
时机的写回都不再丢消息,回退从根免疫。豁免路径(allow_shrink,
仅检查点恢复)保持覆写语义。A 守卫降级为 merged 断言,缩减写回
从拒绝进化为矫正(旧实例独有消息也能救回)。慢路径矫正时打印
🔀 [ConvSaveMerge] 观察日志。详见计划文档 §7。
|
2026-07-20 23:16:04 +08:00 |
|
|
|
858ff45187
|
feat(static): 进入对话统一走 bootstrap 协议(方案B)
新增 enterConversation 单一入口:一次 GET bootstrap 拿全量数据,
restoreTaskState 增加快速路径(注入 task/events 跳过三次串行请求与
4s 死等,消除运行中刷新的两段式体验);needsRebuild 仍前端重算保证
恢复行为与现状等价。PUT load 保留后端兼容、前端不再调用。
|
2026-07-20 22:31:01 +08:00 |
|
|
|
21f3acdf16
|
feat(server): 新增对话 bootstrap 聚合接口(方案B)
GET /api/conversations/<id>/bootstrap 一次性返回进入对话所需的
meta/messages/running/task_replay(needs_rebuild/replay_from 判定移植自
前端 compression.ts),只读语义不写对话文件,规避 safe_nav 双轨与旧内存
回写面。设计文档:docs/conversation_load_unification_plan.md
|
2026-07-20 22:30:43 +08:00 |
|
|
|
17c48474d9
|
docs: 对话加载统一化计划(A防回写+B统一加载协议),屏蔽子智能体交付目录
|
2026-07-20 21:24:00 +08:00 |
|
|
|
a9fe6ae622
|
fix(server): 对话保存防回退守卫与load同对话跳过切换前保存
crud_mixin.save_conversation 新增 allow_shrink 参数与守卫:消息数缩减且未
豁免时拒绝写入,堵住工作区级/对话级双实例旧内存回写(当日三次实锤:
load切换前保存542→506、新建前保存104→77、__del__析构103→77)。
检查点恢复作为唯一合法缩减路径显式豁免。load_conversation_by_id 加载
目标==当前对话时跳过切换前保存(接下来以磁盘为准重载)。debug trace
增加 shrink_suspect 字段覆盖旧非空回写场景。
|
2026-07-20 21:23:29 +08:00 |
|
|
|
ccdc101192
|
chore(terminal): 删除无调用的 _derive_pip_from_python 死代码
|
2026-07-20 15:53:16 +08:00 |
|
|
|
cb877b4b67
|
fix(static): 对话级并行后调整输入栏锁定与发送守卫
- displayLockEngaged 不再因当前对话有运行中任务而硬锁输入栏,仅压缩期间锁定;
- 同对话运行守卫后移到 composerBusy 分支之后,避免刷新后对账未恢复时误发新任务。
|
2026-07-20 15:51:21 +08:00 |
|
|
|
bfc039a9a9
|
fix(terminal): 移除命令执行前的 python/pip 路径重写,按用户原始命令执行
run_command 与后台 run_command 此前会把命令中的 python/python3/pip/pip3 正则替换为解析出的容器或本地解释器路径,删除该重写逻辑后命令按原样执行。
|
2026-07-20 15:51:21 +08:00 |
|
|
|
0dd51c7b48
|
chore(debug): 新增对话保存写入追踪日志,捕获空覆盖调用栈
临时调试代码:每次保存对话时记录 old/new 消息数与项目内调用栈到
logs/conversation_save_debug.log(JSONL),wipe_suspect 时额外打印告警。
用于排查对话消息被清空问题,确认修复后应移除。
|
2026-07-20 15:16:45 +08:00 |
|
|
|
766080c05c
|
chore(gitignore): 屏蔽 .playwright-mcp 调试快照目录
|
2026-07-20 15:15:58 +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 |
|
|
|
8628954f30
|
fix(server): 修复对话消息被空历史覆盖——WebTerminal.__del__与回收器保存增加非空守卫
对话级 terminal 隔离后,被丢弃的实例(竞态重复、回收重建、TTL回收)
常处于 current_conversation_id 已设但 conversation_history 为空的状态,
GC 触发 __del__ 时无条件 save_current_conversation 把磁盘非空对话覆盖为空。
两处保存路径均增加 conversation_history 非空守卫。
|
2026-07-20 13:26:18 +08:00 |
|
|
|
de318636ce
|
docs(AGENTS): 添加8091/8092运行环境边界说明
说明当前仓库跑在8091端口,数据在/Users/jojo/.astrion/astrion;
8092端口为本项目代码副本运行的智能体程序,数据在
/Users/jojo/.astrion/astrion-clone,禁止操作。
|
2026-07-20 11:33:10 +08:00 |
|
|
|
2366c359bf
|
chore(memory): 同步第三轮边界修复与环境教训到项目记忆
|
2026-07-20 03:41:54 +08:00 |
|
|
|
07c5fbca91
|
docs: 记录第三轮边界排查——idle多智能体语义修正与TTL实测环境教训
|
2026-07-20 03:39:34 +08:00 |
|
|
|
e8bbaccfd0
|
fix(tasks): REST对账剔除idle多智能体任务——对齐socket语义,修复幽灵运行态与回收器误阻塞
|
2026-07-20 03:37:58 +08:00 |
|
|
|
6b5b173260
|
fix(server): 对话级隔离边界修复——压缩路由走对话级terminal、回收器竞态防护、空cid任务补建对话
|
2026-07-20 03:21:09 +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 |
|
|
|
a4eb688814
|
feat(server,static): 对话运行状态 REST 对账与 conversation 级 WebTerminal 隔离
议题1 运行状态对账:
- 后端新增 GET /api/conversations/<id>/running-status 聚合主任务/子智能体/
后台命令/多智能体四类运行状态
- 前端 3 个 1s probe 收敛为单个 2.5s 对账循环,事件为主、对账纠偏,
清理方向连续 2 次确认,恢复方向立即接管,修复轮询 404 卡死
议题4 conversation 级隔离:
- terminal 缓存键改为 username::workspace::conversation 三段,
每个对话独立 WebTerminal/文件管理/终端/子智能体
- 同工作区多对话可并行运行,互斥维度从工作区改为同对话
- socket 终端面板按对话过滤广播,terminal 工具每对话最多 3 个
- 常驻内存 + 24h TTL 回收器(无活动且无运行任务才回收)
- 子智能体 restore 按 owner_conversation_id 过滤,避免多 manager 重复恢复
|
2026-07-20 01:05:17 +08:00 |
|
|
|
c414d268b3
|
fix(sub-agent): 修复运行中快照被误判 failed 及错误信息落盘
- output.json 停留在 running/idle 快照(success 为 None)时一律先走存活判定,
任何模式下都不把仍在运行的子智能体误判为 failed
- 本进程 asyncio 句柄已结束但快照未更新:判 failed 并保留真实异常信息
- 传统模式无句柄(进程重启):快照 600s 内未更新才按僵尸任务判 failed
- _finalize_task 支持 error 字段,失败/超时/异常退出均落盘可读错误信息
|
2026-07-20 01:04:38 +08:00 |
|
|
|
121793367a
|
feat(prompts): 增加信息诚实与验证规范\n\n- 在主系统提示词、视觉版提示词、多智能体 Team Leader 提示词、\n 子智能体通用提示词中统一加入五小节约束:\n 1. 信息来源必须明确标注;\n 2. 结论确定性必须分级;\n 3. 禁止将操作完成等同于任务完成;\n 4. 替代方案必须经用户许可并说明缺陷;\n 5. 异常排查优先怀疑自己。
|
2026-07-18 00:57:25 +08:00 |
|
|
|
cfdec831d8
|
fix(static): 修复极简模式并行工具时摘要行空白与 reel 动画消失
089291f7 将 .summary-tool-reel-window 宽度改为 auto,但其内部
reel 轨道为 absolute 定位不贡献宽度,导致窗口塌缩为 0 宽:
并行工具调用时摘要行渲染空白、滚动 reel 动画不可见。
恢复 reel 窗口 width: min(100%, 36em) 与上下渐变遮罩,
同时保留 089291f7 的摘要行图标偏移修复(18px 固定图标容器
+ clip-path 右侧裁剪 + summary-icon-inner 左移 10px)。
|
2026-07-18 00:57:25 +08:00 |
|
|
|
1d0a7e95fa
|
feat(multi-agent): 扩展 sleep 工具模式并修复 /new 模式切换状态继承
- sleep 工具支持 wait_sub_agent_output / wait_sub_agent_ids / wait_runcommand_id 模式
- 多智能体工具移除 ask_sub_agent,新增 stop_sub_agent
- 前后端补齐对应 formatter、渲染与工具执行分支
- 修复从多智能体模式切回 /new 后,新对话继承 terminal.multi_agent_mode 导致实际运行在多智能体模式的问题
|
2026-07-17 22:51:04 +08:00 |
|
|
|
d4c3e73134
|
fix(sub_agent): 移除 search_workspace 工具并清理内存调试代码
- 删除子智能体 search_workspace 工具定义、路由、formatter 与测试
- 传统/多智能体模式共用 SUB_AGENT_TOOLS,一处删除同时生效
- 老对话恢复后再调用 search_workspace 会返回 未知工具 错误
- 清理多智能体排查期间加入的 memory_debug 模块及所有调用点
(modules/memory_debug.py 删除,server/ core/ utils/ modules/sub_agent/ 中相关埋点全部移除)
- 顺手删除 SubAgentActivityDialog 中 search_workspace 的历史显示文案
|
2026-07-17 14:05:35 +08:00 |
|
|
|
2b131de702
|
perf(debug): 内存监控增强为 100ms 采样 + 多维度指标
- 采样间隔从 1s 降到 100ms,spike 阈值降到 50MB
- 增加 uss/shared/private/data/dirty/compressed 等指标
- 更贴近 macOS 活动监视器'内存'列的统计口径
|
2026-07-17 12:16:16 +08:00 |
|
|
|
faef998a9a
|
perf(debug): 增强内存监控:每秒采样 + 更多关键路径埋点
- 改用 psutil 实时 RSS 取代历史最大 ru_maxrss
- 新增后台每秒采样线程,检测到 >100MB/s 增长立即记录
- WebTerminal 初始化时自动启动采样
- 增加子智能体恢复加载 conversation.json、httpx 流式/非流式响应、
工具返回结果、模型输出组装等埋点
|
2026-07-15 17:33:47 +08:00 |
|
|
|
248f5a4b1a
|
fix(debug): 修正 macOS 内存单位换算
|
2026-07-15 17:26:09 +08:00 |
|
|
|
310d82f4b8
|
perf(debug): 添加多智能体模式内存监控埋点
- 新增 modules/memory_debug.py 统一内存监控模块
- 在子智能体任务、主对话 build_messages、多智能体消息注入、
API 请求准备、深压缩等关键路径记录 RSS/VMS 和消息规模
- 日志输出到 ~/.astrion/astrion/host/logs/memory_debug.log
|
2026-07-15 17:02:33 +08:00 |
|
|
|
3138d23687
|
feat(multi-agent): 重构 Team Leader 提示词分工策略并新增 sleep wait_sub_agent_output_ids
|
2026-07-15 14:55:14 +08:00 |
|
|
|
11ffdc2bb5
|
fix: 优化浮动菜单位置计算与 token 处理
|
2026-07-15 04:37:26 +08:00 |
|
|
|
089291f77e
|
fix(static): 修复极简模式摘要行图标偏移、侧边栏空工作区显示及 folder-closed 图标缺失
|
2026-07-15 04:34:24 +08:00 |
|
|
|
4f3ba722a1
|
fix(multi-agent): web模式支持加载预设角色,多智能体面板显示活跃子智能体
|
2026-07-15 02:38:12 +08:00 |
|
|
|
69e3ef51b6
|
feat(multi-agent): 明确 Team Leader 是子智能体的 user
|
2026-07-15 01:42:30 +08:00 |
|
|
|
b2b8013f3a
|
fix(static): add avatar favicon to login and other standalone pages
|
2026-07-15 01:17:24 +08:00 |
|
|
|
f6cbe78d68
|
fix(static): make avatar favicon adapt to browser color scheme
|
2026-07-15 01:09:13 +08:00 |
|
|
|
57aaf76809
|
fix(static): make avatar favicon permanently white
|
2026-07-15 01:05:49 +08:00 |
|
|
|
a60e164aa2
|
fix(static): center avatar favicon and use pure black/white for light/dark modes
|
2026-07-15 01:01:59 +08:00 |
|
|
|
f8f5d26ee3
|
feat(static): add Astrion avatar favicon and touch icons
|
2026-07-15 00:51:20 +08:00 |
|
|
|
4e1d08f106
|
fix(frontend): 修复多个前端交互问题
- 修复运行时 intent Unicode 转义显示异常(后端 extract_intent_from_partial 解码)
- 修复 ask_user 弹窗问题/说明不换行
- 修复刷新页面后等待回答提示不恢复(添加 fetchPendingUserQuestions 并在初始化路径调用)
- 修复回答问题弹窗长问题撑满窗口(header/context 限高滚动)
- 修复角色编辑器模型选择菜单定位与滚动
- 在 AGENTS.md 中再次强调前端调试日志必须统一筛选词
测试:/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/bin/python3.9 -m unittest test.test_server_refactor_smoke; npm run build
|
2026-07-15 00:31:13 +08:00 |
|
|
|
297a6cc5ec
|
Merge branch 'multiagent-mode'
|
2026-07-14 23:41:20 +08:00 |
|
|
|
7ea4638c8c
|
feat(multi_agent): 优化 Team Leader 与子智能体 prompt,新增 Brainstormer 角色
|
2026-07-14 23:40:02 +08:00 |
|
|
|
351cd311c2
|
fix(multi-agent): 修复压缩404、prompt冻结串扰、子智能体状态串扰及/multiagent/new跳转问题
|
2026-07-14 23:22:06 +08:00 |
|
|
|
ce92697181
|
feat(multi_agent): add formatters and structured rendering for multi-agent tools
|
2026-07-14 22:14:55 +08:00 |
|
|
|
571ed6c81f
|
fix(sub-agent): 修复传统模式 terminate 后子智能体仍继续调用工具的问题
- _call_model 中硬取消时直接抛出 CancelledError,避免返回半成品 tool_calls
- 软停止时仍优雅 break,后续由 _run_loop 丢弃半成品并进入 idle
- 保持 _mark_task_done 不覆盖 terminated 状态
- 侧边栏当前对话运行态标记修复保留
|
2026-07-14 20:37:57 +08:00 |
|
|
|
0aa37b83ee
|
fix(stop-button): 修复REST轮询路径两个bug
1. lifecycle.ts handleTaskStopped: 移除'再次按下停止按钮以结束后台任务'弹窗。
后台任务停止不再走停止按钮二次点击路径。
2. 主对话空闲+后台任务跑时输入栏依然为停止按钮:
根因 - App.vue 传给 InputComposer 的 streaming-message 用的是
composerStreamingForInput (= composerBusy && !displayLockEngaged),
只要有后台任务 taskInProgress=true 就让 streamingMessage=true。
改为传 streamingUi (= streamingMessage || hasPendingToolActions),
只看主对话自身是否在流式输出,与后台任务无关。
3. 后端 chat_flow_task_main.py 用户主动停止时发的 task_stopped
事件没带 has_running_* 字段,导致前端误判为完全空闲。
补全字段(has_running_sub_agents/has_running_background_commands/
has_running_multi_agent),前端用此信息决定是否保持对话运行态。
|
2026-07-14 19:46:31 +08:00 |
|
|
|
ae70e4902e
|
refactor(stop-button): 拆分停止按钮和后台任务控制
停止按钮现在只停主智能体,与后台任务无关。
- 后端 cancel_task 简化:移除两段式判断、force_stop参数、is_ma_mode分支
- 删除 _force_stop_multi_agent 方法
- 新增 /api/sub_agents/stop_all 接口(mode=terminate/soft_stop)
- 前端 stopTask 移除 forceStop 概念,只取消主智能体
- 取消期间不再二次点击终结子智能体
子智能体停止按钮:
- InputComposer state bar 加'x个子智能体运行中'按钮
- 独立浮层显示,不依赖 git 栏(参考 askuser 方案)
- 点击传统模式弹窗终结;多智能体弹窗软停止
- App.vue 新增 handleStopAllSubAgents 调 ui.confirmDialog
后台指令停止按钮:
- LeftPanel 后台指令标签右边加停止按钮
- 仅当 panelMode=backgroundCommands 且存在运行中后台指令时显示
- 调 backgroundCommandStore.stopAllCommands 无二次确认
showStopIcon 只看主对话 streaming 状态:
- 后台任务在跑但主对话空闲时显示发送按钮
- 多智能体 / 传统模式统一处理
子智能体 store 加 stopAllAgents(mode) action 调新 API
useLegacySocket task_stopped handler 简化:
- 移除 multi_agent_reloaded 重载
- 移除'再次按下停止按钮以结束后台任务'提示
- 保留 has_running_multi_agent/sub_agents 用于 taskInProgress 判定
清理调试日志:[TaskCancel][stop_debug], [STOP_DEBUG] 全部去掉
保留 ma_debug 框架用于多智能体调试
|
2026-07-14 18:34:56 +08:00 |
|
|
|
30bfb79cbd
|
wip(multi-agent): 停止按钮软停止链路调试日志+对话切换500修复+子智能体进度面板+多智能体软停止机制
|
2026-07-14 17:50:15 +08:00 |
|