]> acesimba.cloud Git - codebuddy-web.git/log
codebuddy-web.git
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