]> acesimba.cloud Git - codebuddy-web.git/log
codebuddy-web.git
7 hours agofeat: 快捷链接支持 git 持久化、开机自启开关与关联服务(含 systemd 自启脚本) master
Codebuddy [Wed, 30 Sep 2026 15:04:28 +0000 (23:04 +0800)]
feat: 快捷链接支持 git 持久化、开机自启开关与关联服务(含 systemd 自启脚本)

8 hours agotasks: auto-save 2026-09-30T22:50:38
Codebuddy [Wed, 30 Sep 2026 14:50:38 +0000 (22:50 +0800)]
tasks: auto-save 2026-09-30T22:50:38

8 hours agotasks: auto-save 2026-09-30T22:32:01
Codebuddy [Wed, 30 Sep 2026 14:32:01 +0000 (22:32 +0800)]
tasks: auto-save 2026-09-30T22:32:01

8 hours agotasks: auto-save 2026-09-30T22:30:40
Codebuddy [Wed, 30 Sep 2026 14:30:40 +0000 (22:30 +0800)]
tasks: auto-save 2026-09-30T22:30:40

8 hours agotasks: auto-save 2026-09-30T22:30:05
Codebuddy [Wed, 30 Sep 2026 14:30:05 +0000 (22:30 +0800)]
tasks: auto-save 2026-09-30T22:30:05

17 hours agotasks: auto-save 2026-09-30T13:31:23
Codebuddy [Wed, 30 Sep 2026 05:31:23 +0000 (13:31 +0800)]
tasks: auto-save 2026-09-30T13:31:23

17 hours agotasks: auto-save 2026-09-30T13:29:08
Codebuddy [Wed, 30 Sep 2026 05:29:08 +0000 (13:29 +0800)]
tasks: auto-save 2026-09-30T13:29:08

17 hours agotasks: auto-save 2026-09-30T13:27:36
Codebuddy [Wed, 30 Sep 2026 05:27:36 +0000 (13:27 +0800)]
tasks: auto-save 2026-09-30T13:27:36

17 hours agotasks: auto-save 2026-09-30T13:19:37
Codebuddy [Wed, 30 Sep 2026 05:19:37 +0000 (13:19 +0800)]
tasks: auto-save 2026-09-30T13:19:37

17 hours agofeat: 任务清单自动 commit 后同步 push 到 github(使用新 token)
Codebuddy [Wed, 30 Sep 2026 05:08:01 +0000 (13:08 +0800)]
feat: 任务清单自动 commit 后同步 push 到 github(使用新 token)

20 hours agotasks: 同步运行期任务清单变更(last_used 等)
Codebuddy [Wed, 30 Sep 2026 02:48:45 +0000 (10:48 +0800)]
tasks: 同步运行期任务清单变更(last_used 等)

20 hours agotasks: 任务清单纳入 git 版本管理(固定文件+自动提交+非破坏式恢复)
Codebuddy [Wed, 30 Sep 2026 02:33:29 +0000 (10:33 +0800)]
tasks: 任务清单纳入 git 版本管理(固定文件+自动提交+非破坏式恢复)

- .gitignore: 取消忽略 data/tasks.json,忽略其 .tmp/损坏备份
- app.py: save_tasks 保存后自动 git commit;load_tasks 缺失/损坏时优先从 git HEAD 恢复,不再静默用单任务种子覆盖

12 days agofix: 修复任务删除接口 405(缺失 @app.delete 装饰器)
Codebuddy [Fri, 18 Sep 2026 06:29:59 +0000 (14:29 +0800)]
fix: 修复任务删除接口 405(缺失 @app.delete 装饰器)

- api_delete_task 缺少 @app.delete("/api/tasks/{task_id}") 装饰器,
  导致 DELETE 路由从未注册,调用返回 405 Method Not Allowed,
  前端回退显示「删除失败」
- 补回装饰器,删除任务(含 24h 冷却、暂停校验等既有限制)恢复正常

2 weeks agofeat: 快捷链接支持拖拽排序与名称文字颜色
Codebuddy [Mon, 14 Sep 2026 03:43:56 +0000 (11:43 +0800)]
feat: 快捷链接支持拖拽排序与名称文字颜色

- 后端: POST/PUT /api/urls 支持可选 color 字段;新增 POST /api/urls/reorder
  接收 {order:[id...]} 持久化拖拽顺序,缺失项自动补齐防丢
- 前端: 链接行可拖拽排序(仅手柄 ⠿ 可拖,避免误触链接跳转);
  编辑 modal 新增 10 色文字颜色选择(与底色协调,含主题色);
  名称按所选色渲染;顶栏「🔗 链接」改为 window.open 新标签页打开 /list
- 调色板微调: 移除与主题色过近的青蓝,改用 periwinkle 紫,避免相邻/同色相近

2 weeks agofeat: 新增 /list 快捷链接配置页(URL 手工增删改、新标签打开)
Codebuddy [Mon, 14 Sep 2026 02:07:06 +0000 (10:07 +0800)]
feat: 新增 /list 快捷链接配置页(URL 手工增删改、新标签打开)

- 后端: 新增 data/urls.json 读写(load_urls/save_urls),CRUD 路由
  GET/POST/PUT/DELETE /api/urls(_auth_ok 鉴权),新增 GET /list 返回 SPA 外壳
- 前端: 顶栏「🔗 链接」Icon(位于重启会话右侧)同标签跳转 /list;
  /list 渲染链接列表,链接 target=_blank 新标签打开;
  新增/编辑 modal(name+url),删除带确认;列表用 textContent 防 XSS
- .gitignore: 将 data/urls.json 纳入运行时用户数据忽略项

2 weeks agofeat: 注入并展示会话行为严格准则(7条)到所有会话
Codebuddy [Thu, 10 Sep 2026 08:07:06 +0000 (16:07 +0800)]
feat: 注入并展示会话行为严格准则(7条)到所有会话

- backend/agent_guidelines.md: 替换为用户要求的7条严格行为准则
  (严格按描述执行/不擅自建议设计分析优化/不改UI标准/不新增字体字号颜色样式/
  无情感传达只报结果/结果后不给进阶建议),经 --append-system-prompt 注入每个会话
- backend/app.py: 新增 GET /api/guidelines 返回准则文本,供前端初始化界面展示
- frontend/index.html: 打开任意会话窗口时 showGuidelinesBanner() 在终端初始化
  界面打印准则横幅(沿用现有连接横幅样式,不新增任何UI元素)

覆盖:新建会话 + 已有会话重连/重启均按新准则;前端每次开窗口可见。

3 weeks agofix(frontend): 编辑任务名称时暂停列表自动刷新,避免输入框被刷新清空
Codebuddy [Mon, 7 Sep 2026 09:35:09 +0000 (17:35 +0800)]
fix(frontend): 编辑任务名称时暂停列表自动刷新,避免输入框被刷新清空

3 weeks agofeat: 技能侧栏改为可收起抽屉(默认收起,☰ 打开)
Codebuddy [Thu, 3 Sep 2026 07:55:39 +0000 (15:55 +0800)]
feat: 技能侧栏改为可收起抽屉(默认收起,☰ 打开)

- 技能侧栏默认 sk-collapsed(display:none),任务列表占满整宽
- 顶部工具栏新增「☰ 技能」按钮,点击以覆盖式抽屉滑出,不挤压任务列表
- 支持四种关闭方式:再点 ☰ / 面板右上角 ✕ / 点遮罩 / Esc
- 打开时加半透明遮罩,关闭时移除定位

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
3 weeks agofeat: 任务列表支持分组(新建/重命名/删除,任务可在分组间移动)
Codebuddy [Thu, 3 Sep 2026 04:15:51 +0000 (12:15 +0800)]
feat: 任务列表支持分组(新建/重命名/删除,任务可在分组间移动)

数据模型(增量、兼容老数据):
- tasks.json 顶层新增 groups: [{id, name}];任务新增 group 字段
- group 为空/缺失即归入内置「未分类」;老数据无需迁移

后端:
- 新增 GET/POST /api/groups、PUT/DELETE /api/groups/{gid}
- 删除分组仅摘掉任务的分组归属(回到未分类),不删除任何任务
- PUT /api/tasks/{tid} 扩展支持 group 字段,实现任务移动(校验 gid 存在)

前端:
- 任务列表按分组渲染区块:分组标题行(组名+数量+✎重命名+✕删除)+ 区块内
  沿用原 .task-grid,卡片样式与尺寸完全不变
- 内置「未分类」放最后,不可重命名/删除;空分组也显示,方便移入任务
- 分组重命名:点击组名变输入框,Enter 保存 / Esc 取消
- 工具栏新增「+ 新建分组」
- 任务移动:扩展现有 ✎ 编辑面板,新增「分组」下拉(未分类 + 所有分组)
- “+ 新建任务”卡片仍仅保留在「未分类」

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agofix: 修复会话恢复失败(No conversation found,进程秒退)
Codebuddy [Tue, 1 Sep 2026 08:25:52 +0000 (16:25 +0800)]
fix: 修复会话恢复失败(No conversation found,进程秒退)

codebuddy 近期在交互式 pty 下,仅传 --resume <sid> 会报
"No conversation found with session ID" 并 exit 1,导致任务一启动就退出。
必须 --session-id <sid> 与 --resume <sid> 同时传才能可靠恢复会话。

- _launch_process 的 resume 分支改为同时传 --session-id 与 --resume
- 现象上表现为"切换模型后进不去":换模型会重启进程,重启时暴露该 resume 失败

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agofeat: 粘贴弹窗整窗支持拖拽上传 + 拖拽高亮反馈
Codebuddy [Sat, 29 Aug 2026 01:58:45 +0000 (09:58 +0800)]
feat: 粘贴弹窗整窗支持拖拽上传 + 拖拽高亮反馈

- 拖拽监听从 textarea 移到 #paste-modal 整层遮罩,modal 内任意位置都能接住拖放
  (事件冒泡同样覆盖 textarea,不会重复上传)
- dragover 统一 preventDefault,避免拖到非 textarea 区域时被浏览器默认行为接管
  (会直接打开文件/导航离开,可能中断会话)
- 设置 dropEffect='copy',光标显示复制而非禁止图标
- 拖拽进入时 dialog 加绿色外发光、输入框变虚线绿框;用 dragDepth 计数器避免
  子元素间移动时高亮闪烁,关闭弹窗时清理状态
- 仅在检测到文件时 preventDefault,保留拖文本进 textarea 正常插入
- 输入框下方新增拖拽提示文字

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agostyle: 站点图标改为白底深灰线条风格
Codebuddy [Fri, 28 Aug 2026 12:23:53 +0000 (20:23 +0800)]
style: 站点图标改为白底深灰线条风格

- favicon.svg:背景 #ffffff,外框 #a1a1aa,`>` 提示符与光标改为深灰 #3f3f46
- 登录页内联 SVG logo 同步为同一配色,保持品牌统一
- 保留浅灰外框:浏览器标签背景偏浅,避免纯白方块融入背景看不出轮廓

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agofix: 交互提示框处可自由上翻;下拉模型列表实时刷新
Codebuddy [Fri, 28 Aug 2026 09:42:37 +0000 (17:42 +0800)]
fix: 交互提示框处可自由上翻;下拉模型列表实时刷新

滚动(终端):
- 交互提示框会频繁重绘,重绘输出会在滚动事件生效前把画面拉回底部,导致用户上翻被拽回
- 在 xterm viewport 上监听 wheel/touchmove 用户手势,立即停止贴底并进入 300ms 保护期
- 保护期内输出回调忽略 scrollToBottom;手势停止后按当前位置重新判定是否恢复跟随
- 只监听 wheel/touchmove,不监听 scroll(后者会被程序化 scrollToBottom 触发,会误伤流式贴底)
- 保留原行为:未手动滚动时流式输出仍自动滚到最新行

模型列表:
- /api/models 新增 ?force=1,强制重扫 codebuddy --help,前端下拉打开时带上该参数
- scan_models 改为自身管理锁,subprocess 移到锁外执行,避免阻塞 /ws 等请求
- api_set_model 遇到未知模型时强制重扫一次再判定,避免新上线模型被误拒

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agofeat: 任务列表支持编辑名称与任务描述(最多50字)
Codebuddy [Thu, 27 Aug 2026 06:36:55 +0000 (14:36 +0800)]
feat: 任务列表支持编辑名称与任务描述(最多50字)

- 后端新增 PUT /api/tasks/{id}:更新名称(仅改显示名,保留原 cwd)与描述(最多50汉字,空串清空)
- 前端任务卡片新增描述行(空时显示淡灰占位),悬停显 ✎ 编辑按钮进入内联编辑
- 描述框带 x/50 字数计数,沿用现有深色主题样式,卡片尺寸基本不变

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
4 weeks agofeat: 新增黑白灰终端风格站点图标(favicon + 登录页 logo)
Codebuddy [Thu, 27 Aug 2026 02:56:15 +0000 (10:56 +0800)]
feat: 新增黑白灰终端风格站点图标(favicon + 登录页 logo)

- 新增 frontend/favicon.svg:圆角方块 + 白色 > 提示符 + 灰色光标,黑/白/灰极简设计
- 后端新增 /favicon.svg 路由(image/svg+xml,缓存 1 天)
- frontend/index.html 添加 <link rel="icon"> 并替换登录页 🤖 emoji 为同款内联 SVG

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
5 weeks agofix(backend): 模型切换真正重启会话 + 新增后台进程回收机制
Codebuddy [Sat, 22 Aug 2026 15:35:26 +0000 (23:35 +0800)]
fix(backend): 模型切换真正重启会话 + 新增后台进程回收机制

- 模型切换(api_set_model)改为服务端 SIGTERM+SIGKILL 杀旧进程并立刻移除
  RUNNING entry,重连按新模型拉起新会话。修复 Station AI Demo 卡死无法输入:
  codebuddy 忽略 SIGTERM 导致旧进程僵死、重连 attach 回死进程
- 放宽 /ws 连接守卫,允许 prev is None 时重连,避免竞态误拒"已在另一窗口运行"
- api_kill 同样补 SIGKILL 兜底
- 新增 _reap_loop 回收协程(startup 即启动),每 30s 清理已退出/僵死且已断开
  连接的 RUNNING entry;不触碰后台常驻会话与仍连接的会话
- 前端:模型切换成功后延迟 800ms 重连并移除 killCurrent,不再依赖不可靠的前端 pid

Co-Authored-By: CodeBuddy <noreply@codebuddy.ai>
5 weeks agofix(ui): 模型下拉切换无效修复 + 点开下拉实时刷新模型列表
Codebuddy [Fri, 21 Aug 2026 12:40:25 +0000 (20:40 +0800)]
fix(ui): 模型下拉切换无效修复 + 点开下拉实时刷新模型列表

- change 监听器从 showTerminalMode() 内移至脚本初始化区,全局只绑定一次,
  避免重复进入终端页导致重复绑定/未绑定,菜单点了没反应
- 新增 focus/mousedown 触发 loadModelSelect(),每次点开下拉实时拉取最新模型列表

6 weeks agofeat: 默认模型固定为 hy3;非黏贴上传保留原始文件名
Codebuddy [Tue, 18 Aug 2026 13:26:19 +0000 (21:26 +0800)]
feat: 默认模型固定为 hy3;非黏贴上传保留原始文件名

6 weeks agodocs: 校正帮助文档与实际功能不符处(移除已删的会话页帮助按钮;删除确认改为三重确认+倒计时;页脚措辞)
Codebuddy [Tue, 18 Aug 2026 02:03:04 +0000 (10:03 +0800)]
docs: 校正帮助文档与实际功能不符处(移除已删的会话页帮助按钮;删除确认改为三重确认+倒计时;页脚措辞)

6 weeks agofix(ui): 粘贴弹窗移除点击外部关闭,新增右上角✕(关闭并清空),避免误触丢失输入
Codebuddy [Tue, 18 Aug 2026 01:39:16 +0000 (09:39 +0800)]
fix(ui): 粘贴弹窗移除点击外部关闭,新增右上角✕(关闭并清空),避免误触丢失输入

6 weeks agofix(ui): 顶栏按钮防裁切换行;帮助按钮仅保留列表页(黑底白字红图标),移除会话页帮助按钮
Codebuddy [Mon, 17 Aug 2026 05:44:08 +0000 (13:44 +0800)]
fix(ui): 顶栏按钮防裁切换行;帮助按钮仅保留列表页(黑底白字红图标),移除会话页帮助按钮

6 weeks agofix: 已上传文件按 task_id 正确解析所属会话任务名(load_tasks 实为 {tasks:[...]})
Codebuddy [Mon, 17 Aug 2026 03:27:48 +0000 (11:27 +0800)]
fix: 已上传文件按 task_id 正确解析所属会话任务名(load_tasks 实为 {tasks:[...]})

6 weeks agofeat: 帮助页改版(规格风格+侧边目录+MD下载,移除FAQ);上传上限统一提升至20MB
Codebuddy [Mon, 17 Aug 2026 02:10:52 +0000 (10:10 +0800)]
feat: 帮助页改版(规格风格+侧边目录+MD下载,移除FAQ);上传上限统一提升至20MB

6 weeks agochore: 忽略运行时生成的上传文件索引 data/uploads_index.json
Codebuddy [Mon, 17 Aug 2026 01:35:37 +0000 (09:35 +0800)]
chore: 忽略运行时生成的上传文件索引 data/uploads_index.json

6 weeks agofeat: 添加设计说明/帮助页(/help,可打印为 PDF),应用内「❓ 帮助」按钮入口
Codebuddy [Mon, 17 Aug 2026 01:29:39 +0000 (09:29 +0800)]
feat: 添加设计说明/帮助页(/help,可打印为 PDF),应用内「❓ 帮助」按钮入口

6 weeks agofeat: 首页“已上传文件”弹窗(表格/多选/全选删除),上传文件关联所属会话任务
Codebuddy [Sun, 16 Aug 2026 23:30:40 +0000 (07:30 +0800)]
feat: 首页“已上传文件”弹窗(表格/多选/全选删除),上传文件关联所属会话任务

6 weeks agofix(iPad+paste): 终端页布局固定/键盘适配/自动滚动;粘贴栏支持任意文件(≤5MB)与已上传列表/删除
Codebuddy [Sun, 16 Aug 2026 23:12:11 +0000 (07:12 +0800)]
fix(iPad+paste): 终端页布局固定/键盘适配/自动滚动;粘贴栏支持任意文件(≤5MB)与已上传列表/删除

6 weeks agofeat: 浏览器标签页标题改为「会话名 - CLI」,去掉无意义状态点,便于多标签区分
Codebuddy [Sat, 15 Aug 2026 10:11:56 +0000 (18:11 +0800)]
feat: 浏览器标签页标题改为「会话名 - CLI」,去掉无意义状态点,便于多标签区分

6 weeks agofix: 上传/更新 skill 时按 zip 内声明名覆盖已存在技能,避免产生重复目录
Codebuddy [Sat, 15 Aug 2026 09:35:42 +0000 (17:35 +0800)]
fix: 上传/更新 skill 时按 zip 内声明名覆盖已存在技能,避免产生重复目录

- _do_upload_skill 在解析出技能名后,若 zip 内 frontmatter name 对应一个已存在的技能目录,
  则安装到该目录(覆盖)而非新建,修复“更新后列表出现两个同名技能”的问题

6 weeks agofeat: 首页常驻左侧技能面板(查看/上传/更新/编辑/删除/加载)
Codebuddy [Sat, 15 Aug 2026 09:20:42 +0000 (17:20 +0800)]
feat: 首页常驻左侧技能面板(查看/上传/更新/编辑/删除/加载)

- 列表页改为左 300px 技能侧边栏 + 右任务网格布局
- 侧边栏常驻展示已加载技能,支持上传新增、zip 覆盖更新、内联编辑 SKILL.md、删除、加载到运行中会话
- 移除列表页右上角冗余的弹窗按钮;弹窗保留给终端页
- 侧边栏随列表页自动刷新(编辑/加载面板打开时跳过以免清掉输入)

6 weeks agofeat: 首页支持全局 skill 管理(查看/新增/更新/删除)及运行中会话热加载选择器
Codebuddy [Sat, 15 Aug 2026 08:49:34 +0000 (16:49 +0800)]
feat: 首页支持全局 skill 管理(查看/新增/更新/删除)及运行中会话热加载选择器

- 后端抽共享 helper,新增全局接口 GET/POST /api/skills、GET/PUT/DELETE /api/skills/{name}
- 前端将技能弹窗移到 body 级,首页与终端页共用;首页新增「🧩 技能」入口
- 首页「加载」按运行中会话弹出选择器(可多选/全部),无运行会话则提示已全局就位
- 修复 _extract_skill_zip 根级文件+单子目录混合结构的裁前缀 bug,并优先用 SKILL.md frontmatter 命名

6 weeks agofix(skills): 上传支持扁平 zip 与自动命名
Codebuddy [Fri, 14 Aug 2026 12:37:58 +0000 (20:37 +0800)]
fix(skills): 上传支持扁平 zip 与自动命名

- 解压跳过 __MACOSX / ._* 系统文件
- 支持扁平结构(技能内容直接压缩,无统一顶层目录):原样解压
- 扁平时从 SKILL.md frontmatter 的 name 自动取 skill 名称,缺省回退到文件名
- 仅『恰好 1 个顶层目录』才剥前缀(单目录包裹场景)

6 weeks agofix: 任务列表页每 5 秒自动刷新状态
Codebuddy [Fri, 14 Aug 2026 10:17:08 +0000 (18:17 +0800)]
fix: 任务列表页每 5 秒自动刷新状态

- 进入列表页启动定时器,离开/退出登录/进入终端时停止
- 解决列表页状态不随会话实时变化的问题(纯前端,刷新即生效)

6 weeks agofeat: 支持在会话中管理自定义 skill(上传/删除/更新/热加载)
Codebuddy [Fri, 14 Aug 2026 02:25:03 +0000 (10:25 +0800)]
feat: 支持在会话中管理自定义 skill(上传/删除/更新/热加载)

- 后端新增全局 skill 管理接口(~/.codebuddy/skills):
  GET/POST/PUT/DELETE /api/tasks/{id}/skills[/{name}]
  GET /api/tasks/{id}/skills/{name}/content
  POST /api/tasks/{id}/skills/{name}/notify(向运行中的会话注入 skill 路径实现热加载)
- zip 上传带 zip-slip 防护、单顶层目录校验、必需 SKILL.md 校验
- 前端新增「🧩 技能」按钮与弹窗:上传 zip、列出、删除、在线编辑 SKILL.md、通知加载
- 已实证 codebuddy 从 ~/.codebuddy/skills 自动发现 skill

6 weeks agofeat: 拆分后台状态为运行中/等待中
Codebuddy [Thu, 13 Aug 2026 23:57:02 +0000 (07:57 +0800)]
feat: 拆分后台状态为运行中/等待中

- 后端 drain 记录 last_output_ts,/api/tasks 按 IDLE_THRESHOLD(2.5s) 区分
  background(后台运行中) 与新增 background_idle(后台等待中)
- 前端新增 tc-waiting 样式与 background_idle 渲染(⏸ 后台等待中)
- 解决关窗后交互式会话仍显示'后台运行中'的误导问题

6 weeks agofix(frontend): 修复 reattach/连接提示中的 ANSI 转义被写成字面量
Codebuddy [Thu, 13 Aug 2026 08:37:34 +0000 (16:37 +0800)]
fix(frontend): 修复 reattach/连接提示中的 ANSI 转义被写成字面量

- renderReattach 与 connectWS 的状态提示误用双反斜杠 \\x1b,导致 xterm 把转义序列当纯文本打印
- 统一改为单反斜杠 \x1b,连接成功/重新连接/任务状态等提示恢复正常彩色
- 仅前端改动,刷新浏览器即生效

6 weeks agofix(terminal): xterm lineHeight 1.0 导致字形顶部被裁切
Codebuddy [Thu, 13 Aug 2026 05:30:20 +0000 (13:30 +0800)]
fix(terminal): xterm lineHeight 1.0 导致字形顶部被裁切

- new Terminal 选项补充 lineHeight: 1.3(原未设置,默认 1.0)
- 单元格高度由 20px 增至约 26px,中文等字形顶部不再被裁
- 仅前端改动,刷新浏览器即生效,保留 body 滚动锁定

7 weeks agofeat(console): 每个会话注入"修改前先确认"行为准则(软约束)
Codebuddy [Wed, 12 Aug 2026 12:21:02 +0000 (20:21 +0800)]
feat(console): 每个会话注入"修改前先确认"行为准则(软约束)

- 新增 backend/agent_guidelines.md:收到问题/需求先总结、确认要点、给方案、等用户确认后才动手,未确认不改代码/不提交
- _launch_process 在拉起每个 codebuddy 会话时追加 --append-system-prompt 注入该准则
- 不覆盖 codebuddy 内置系统提示,仅追加;准则文件缺失时优雅跳过
- 适用所有会话(words/study-mountion/Codebuddy-web 等),从启动起自带确认纪律

7 weeks agofeat(console): 删除任务时可选一并删除历史会话与工作目录
Codebuddy [Wed, 12 Aug 2026 09:35:01 +0000 (17:35 +0800)]
feat(console): 删除任务时可选一并删除历史会话与工作目录

- 删除确认弹窗新增两个复选框:同时删除历史会话(对话记录)、同时删除工作目录
- 后端 /api/tasks/{id} DELETE 新增 delete_session / delete_cwd 查询参数
- 按 session_id 删除 ~/.codebuddy/projects/*/*.jsonl 会话文件(含锁文件)
- 按 cwd 删除工作目录,带安全护栏:仅允许 TASK_HOME_ROOT 下的子目录,拒绝删除根目录或越界路径
- 返回 removed_session / removed_cwd / cwd_error 供前端提示

7 weeks agofeat(console): 断线保活 + 四态实时状态 + 重连聚焦修复
Codebuddy [Wed, 12 Aug 2026 09:21:13 +0000 (17:21 +0800)]
feat(console): 断线保活 + 四态实时状态 + 重连聚焦修复

- 浏览器关闭不再杀死任务:/ws 断开只解绑 ws,进程组保留后台运行
- 新增 RUNNING 注册表与 _drain 异步读取,缓冲 PTY 输出供重连回放
- /api/tasks 返回四态 live_status:前台已登录 / 后台运行中 / 后台任务待确认 / 空闲
- 后台跑完且无人观看时显示「后台任务待确认(退出码 N)」提示用户回来确认
- 重连发送 reattach 消息(运行时长/回放/当前任务),并自动聚焦终端,去除冗余分隔行

7 weeks agofix(frontend): lock page scroll on iOS and pin top-bar for iPad
Codebuddy [Tue, 11 Aug 2026 22:26:10 +0000 (06:26 +0800)]
fix(frontend): lock page scroll on iOS and pin top-bar for iPad

- Use body{position:fixed; inset:0; overflow:hidden} to reliably lock the
  page on iOS Safari (overflow:hidden on body is ignored by iOS).
- Remove ineffective position:sticky from .top-bar; with body fixed the
  top-bar is a flex-shrink:0 flex item pinned at the top naturally.
- Fixes two iPad issues: title bar scrolling away, and page not
  auto-scrolling to newest terminal output (xterm handles internal scroll).

2 months ago新增控制台模型切换能力(默认最新 GLM,每日扫描)
Codebuddy [Tue, 28 Jul 2026 10:30:27 +0000 (18:30 +0800)]
新增控制台模型切换能力(默认最新 GLM,每日扫描)

3 months ago任务清单:暂停/恢复 + 受限删除
Codebuddy [Thu, 18 Jun 2026 08:57:20 +0000 (16:57 +0800)]
任务清单:暂停/恢复 + 受限删除

后端 (backend/app.py):
- GET /api/tasks 返回 status (active/paused) 和 paused_at 字段
- POST /api/tasks/{id}/pause: 标记暂停,记录 paused_at
- POST /api/tasks/{id}/resume: 恢复启用,清除 paused_at
- DELETE /api/tasks/{id}: 仅允许删除已暂停超 24 小时的任务

前端 (frontend/index.html):
- 任务卡片:删除按钮改为暂停(⏸)/恢复(▶)按钮
- 默认仅列出启用状态任务,勾选"显示全部任务"查看暂停的
- 暂停超 24 小时的任务才显示删除按钮(✕)
- 删除确认 modal:3 次确认,每次需等待 10 秒才能点击
- 暂停状态任务卡片半透明显示,标注已暂停时长
- ESC/点击遮罩/取消按钮 关闭删除 modal

3 months ago修复粘贴框关闭与终端复制
Codebuddy [Thu, 18 Jun 2026 08:46:35 +0000 (16:46 +0800)]
修复粘贴框关闭与终端复制

问题1: 粘贴框无法关闭
- ESC 监听提升到 document 级(避免焦点不在 pasteInput 时失效)
- 点击遮罩层(modal 外部)关闭 modal
- 移除 pasteInput 上的重复 ESC 处理

问题2: 终端选区无法复制
- 加 attachCustomKeyEventHandler: 有选区时 Ctrl+C 复制到剪贴板(不发中断)
- 优先用 navigator.clipboard.writeText,HTTP 下用临时 textarea + execCommand 兜底
- 无选区时 Ctrl+C 正常发中断信号

3 months ago粘贴改为右上角弹窗模式(避免发送自动提交问题)
Codebuddy [Thu, 18 Jun 2026 08:39:34 +0000 (16:39 +0800)]
粘贴改为右上角弹窗模式(避免发送自动提交问题)

变更:
- 移除下方独立输入框,恢复 xterm 原生输入(两条绿线之间)
- 右上角"列表"后加回"📋 粘贴"按钮
- 点击弹出 modal:textarea + 📎 + ✕ + 发送,样式复用豆包式输入框
- modal 支持文字/图片粘贴、图片拖拽、📎 选文件
- Ctrl+Enter 或点发送:内容进 xterm 输入行(不自动提交),modal 自动关闭
- ESC 关闭 modal
- 发送逻辑只发内容字符流,不带 \r,用户自行回车提交

原因: 之前自动提交方案(\n / \r / bracketed paste 包裹)均无法让 codebuddy
CLI 正确触发提交。改为"内容进输入行 + 用户回车"最可靠,符合终端交互本质。

3 months ago方案B: xterm输出区 + 独立输入框(豆包式)
Codebuddy [Thu, 18 Jun 2026 08:07:46 +0000 (16:07 +0800)]
方案B: xterm输出区 + 独立输入框(豆包式)

重构终端页为上下两区:
- 上: xterm 区保留 codebuddy TUI 输出(流式/工具调用/交互确认)
- 下: 独立多行 textarea 输入区 + 发送/📎/✕ 按钮

输入区能力:
- 文字粘贴: 浏览器原生 textarea paste,可靠不失效
- 图片粘贴: Ctrl+V 截图自动上传到 /api/upload-image,显示绿色 chip
- 图片拖拽: 拖文件到输入框上传
- 📎 按钮: 选择图片文件
- 发送: Ctrl+Enter 或点发送按钮,文字+图片标签一起进 PTY

移除:
- 旧的 xterm paste 监听(与 xterm 内部冲突导致粘贴失效)
- 旧的 📋 粘贴 modal(被独立输入区取代)

保留: backend /api/upload-image 端点不变

3 months ago支持终端粘贴文字与截图(未完成,待方案B重构)
Codebuddy [Thu, 18 Jun 2026 07:58:56 +0000 (15:58 +0800)]
支持终端粘贴文字与截图(未完成,待方案B重构)

新增:
- backend: /api/upload-image 端点,接收 base64 图片存到 data/pastes/
- frontend: paste 事件检测图片/文字,上传后以 <image_local_path> 标签发 CLI
- frontend: 顶部栏 📋 粘贴按钮 + modal(多行 textarea 输入)
- frontend: extractPasteText/htmlToText(HTML 转 TSV/纯文本)
- .gitignore: 排除 data/pastes/

已知问题: 自定义 paste 监听与 xterm 内部冲突,文字粘贴失效。
下一步: 按方案 B 重构——xterm 区保留 TUI 输出,下方加独立 textarea 输入框。

3 months agoInitial commit: Codebuddy Web Console
Codebuddy [Thu, 18 Jun 2026 03:56:19 +0000 (11:56 +0800)]
Initial commit: Codebuddy Web Console

前后端分离结构:
- backend/app.py: FastAPI 后端 (PTY 终端 + 任务注册表 + JWT 鉴权)
- frontend/index.html: xterm.js 前端页面
- data/: 任务注册表运行时状态 (tasks.json 已 gitignore)
- logs/: 运行时日志 (已 gitignore)

原单文件 /root/codebuddy-web.py 拆分为前后端分离,
systemd 服务指向 /home/Codebuddy-web/backend/app.py