Commit Graph
100 Commits
Author SHA1 Message Date
openqj 0787496427 Merge pull request #170 from openqj/feat-image-edit-mcp
feat: 图片改图 MCP 工具 image_edit
2026-10-30 04:12:46 +08:00
openqj 09880e8f4e Merge pull request #79 from openqj/feat-app-max-permissions
feat: GitHub App manifest 扩到主机最大权限
2026-10-30 04:11:13 +08:00
openqj 5b03e0a85d Merge pull request #169 from openqj/feat-console-redesign
console: 重排版为侧边导航 + 三栏工作台 + 任务详情内页签
2026-10-30 03:45:48 +08:00
openqj f0aba700e0 Merge pull request #168 from openqj/feat-imagegen-mcp-basefix
fix: imagegen MCP env 必须写死本地网关 base URL
2026-10-30 03:15:59 +08:00
openqj da7b8e3a4f Merge pull request #167 from openqj/feat-imagegen-mcp
feat: 图片生成 MCP 工具 image_generate(中转站图片分组)
2026-10-30 03:03:07 +08:00
openqj cf6721f427 Merge pull request #163 from openqj/feat-docker-timeout-evidence
feat(docker): 超时不再只剩一句 docker run timeout,留存 partial 与容器日志
2026-10-30 02:54:30 +08:00
openqj 27ca53465e Merge pull request #162 from openqj/feat-task-result-full
feat(tasks): 完整结果另存 result_text_full,详情不再只剩 2000 字
2026-10-30 02:54:21 +08:00
openqj 4bbe6a99e3 Merge pull request #164 from openqj/feat-cloud-mcp-more
feat(mcp): 云端 MCP 工具从 8 个扩到 12 个
2026-10-30 02:47:36 +08:00
openqj 367b9d8873 Merge pull request #161 from openqj/feat-automation-audit-pg
fix(automations): 审计行不再显式插 TEXT id,PG identity 下不再丢审计
2026-10-30 02:47:28 +08:00
openqj 276d433da6 Merge pull request #166 from openqj/feat-console-pagination-tabs
console: 任务列表服务端分页 + 控制台分页面签
2026-10-30 02:38:35 +08:00
openqj 6a5a837aac Merge pull request #165 from openqj/feat-doc-tools-result-cap
文档/图片工具进任务镜像 + 结果截断改为提取 text 上限 20000 字
2026-10-30 02:19:46 +08:00
openqj 9a11ef27b8 Merge pull request #159 from openqj/feat-cloud-mcp-server
feat(cloud): MCP 云端任务入口 + 上游 0.164 对齐配置
2026-10-30 01:55:43 +08:00
openqj 0c458cb2ce Merge pull request #158 from openqj/feat-repo-access-check
feat(repos): 仓库接入预检 + codexsvc deploy key 配给脚本
2026-10-30 01:53:52 +08:00
openqj aa5bf7da72 Merge pull request #157 from openqj/feat-final-audit-detail
fix(worker): 终态审计带上 error,复发卡死可定位
2026-10-30 01:53:39 +08:00
openqj 8d8774edee Merge pull request #160 from openqj/feat-console-single-chat
console: 对话只留一处实时单列;任务列表与 API Key 加滚动上限、三栏等高
2026-10-30 01:52:45 +08:00
openqj 9ac0199eba Merge pull request #156 from openqj/feat-cross-worker-kill
feat: 跨 worker 真 kill(kill_requests 意图表 + 收殓器)与自动化触发入闸
2026-10-30 01:40:05 +08:00
openqj b306b56517 Merge pull request #155 from openqj/feat-chatgpt-codex-align1
ChatGPT Codex 对齐:技能包 + 租户播种 + web_search Docker 联网修法
2026-10-30 01:29:47 +08:00
openqj 3c80d277b0 Merge pull request #154 from openqj/feat-console-detail-cards
console: 任务详情改卡片式排版
2026-10-30 01:24:54 +08:00
openqj 6d4f87e286 Merge pull request #151 from openqj/feat-trace-truncation
trace: 标注被截断的链路消息,避免误读为模型未写完
2026-10-30 01:12:33 +08:00
openqj fd9fe5f254 Merge pull request #153 from openqj/feat-auth-unknown-role
fix(auth): unknown project role denies instead of KeyError 500
2026-10-30 00:55:54 +08:00
openqj 284e821d0c Merge pull request #152 from openqj/feat-console-task-detail-meta
console: 任务详情显示首字、总耗时、token 与自动成本明细
2026-10-30 00:50:08 +08:00
openqj 3696dad7c8 Merge pull request #146 from openqj/feat-task-files-tenant
fix: task files endpoint resolves tenant docker worktrees
2026-10-30 00:04:37 +08:00
openqj d4a517fc7e Merge pull request #150 from openqj/feat-console-task-meta
console: 任务列表行显示首字、总耗时、token(服务端列表补 total_tokens)
2026-10-29 18:38:36 +08:00
openqj e5bf361c6d Merge pull request #149 from openqj/feat-no-full-confirm
console: 新建任务选完全访问不再弹确认框
2026-10-29 18:17:16 +08:00
openqj baf330f112 Merge pull request #148 from openqj/feat-console-goal-invincible
console: 增加 goal 模式无敌版勾选
2026-10-29 18:05:19 +08:00
openqj 9961a251d1 Merge pull request #147 from openqj/feat-prestart-goal-logs
worker: 补漏:goal 路径的 docker 分段日志 + 审计任务 id
2026-10-29 17:52:30 +08:00
openqj a17f0c7412 Merge pull request #145 from openqj/feat-prestart-logs
worker: 启动前分段日志(派发卡死可定位)
2026-10-29 17:33:05 +08:00
openqj 0129b0149a Merge pull request #144 from openqj/feat-neverstart-fresh
worker: 从未启动的任务自动续跑回落全新跑
2026-10-29 16:51:42 +08:00
openqj a4586cbebc Merge pull request #143 from openqj/feat-harness2-followups
harness2: per-role models, sweep batch, task file assets endpoint
2026-10-29 16:39:48 +08:00
openqj 9e444eca38 Merge pull request #142 from openqj/feat-state-lock
host: 修复断点丢失(tmp 碰撞 + 跨容器 flock 失效)
2026-10-29 16:04:12 +08:00
openqj 7425f2e778 Merge pull request #141 from openqj/feat-harness2-gaps
harness2: upstream gap fill — trivial fix, session budget, tag validation, preflight
2026-10-29 15:40:09 +08:00
openqj 4d16d63313 Merge pull request #140 from openqj/feat-longtask-p0-three
断点镜像状态标签回落:host-state 条目写 status 不是 goal_status
2026-10-29 15:37:51 +08:00
openqj 3d60f32bd3 Merge pull request #139 from openqj/feat-longtask-p0-three
长任务 P0 三件:断点进库、错误分类+熔断、Run/Step 时间线
2026-10-29 15:19:43 +08:00
openqj d56bd3a99e Merge pull request #138 from openqj/feat-harness2
harness2: recursive harness optimization wired to real codex tasks
2026-10-29 14:28:44 +08:00
openqj b34812f605 Merge pull request #137 from openqj/feat-longtask-resume-guard
fix: 断点丢失时 goal-resume 拒绝成 failed,阻断自动恢复空转
2026-10-29 14:24:44 +08:00
openqj e48b756f96 Merge pull request #136 from openqj/feat-longtask-invincible
无敌补齐:连续失败上限 + worker退出审计 + 配额恢复自动续跑
2026-10-29 13:16:49 +08:00
openqj 88fcfeebd3 Merge pull request #135 from openqj/feat-console-keys-ui
CI verify pass. Deploy follows separately via deploy.py.
2026-10-29 12:57:18 +08:00
openqj 49f3ff7cb6 Merge pull request #134 from openqj/feat-longtask-docker-resume-env
修法:Docker 断点续跑透传密钥环境(SUB2API_API_KEY 缺失空转)
2026-10-29 12:48:12 +08:00
openqj c757810097 Merge pull request #133 from openqj/feat-longtask-auto-resume
长任务中断自动恢复:仅用户暂停才暂停,不限时
2026-10-29 11:48:22 +08:00
openqj 0ef896c317 Merge pull request #132 from openqj/feat-console-gapfix
console: 分栏改独立容器,修模块间空白间距
2026-10-29 11:04:22 +08:00
openqj e7f7edf5c2 Merge pull request #131 from openqj/feat-readme-update
docs: README 对齐生产现状(main 93c25a9,补 PR #130 自适应分栏)
2026-10-29 10:48:52 +08:00
openqj 93c25a92bc Merge pull request #130 from openqj/feat-console-adaptive
console: 按宽度自适应分栏(一栏/两栏/三栏)
2026-10-29 10:35:54 +08:00
openqj 4c3420ae8e Merge pull request #129 from openqj/feat-console-github
console: GitHub 风格(Primer)
2026-10-29 10:21:44 +08:00
openqj bbe02efc14 Merge pull request #128 from openqj/feat-console-dashboard
console: 一页式控制台排版 + 数据卡片
2026-10-29 10:04:17 +08:00
openqj a13762cfbe Merge pull request #126 from openqj/feat-chat-history
chat: 持久化继续消息,chat-history 交替历史
2026-10-29 07:07:34 +08:00
openqj 811912c841 Merge pull request #125 from openqj/feat-console-muse-style
console: 按 Muse 网页端/桌面端视觉重做
2026-10-29 06:58:11 +08:00
openqj 5ca5cc91cc Merge pull request #124 from openqj/feat-console-react
console: React 生产级重写(左列表 + 中对话 + 右详情)
2026-10-29 06:38:35 +08:00
openqj 3f4e849a93 Merge pull request #122 from openqj/feat-pm-wait-deadlock
worker: always start capacity pool threads in run_all
2026-10-29 05:47:32 +08:00
openqj ab0aaf4a5e Merge pull request #121 from openqj/feat-child-model
feat: 子任务默认模型/强度(child_model/child_effort)
2026-10-29 05:35:51 +08:00
openqj f99e667222 Merge pull request #120 from openqj/feat-marker-wait-heartbeat
worker: heartbeat parent task during marker poll/wait loops
2026-10-29 04:47:33 +08:00
openqj fd2309686e Merge pull request #119 from openqj/feat-git-pull-deploy
deploy: add git-pull source for host deployment
2026-10-29 03:45:27 +08:00
openqj 630d14fe07 Merge pull request #118 from openqj/feat-coord-running-leak
worker: release running slot after coordinator completes
2026-10-29 03:07:35 +08:00
openqj a367da3ed0 Merge pull request #117 from openqj/feat-autoscaler-coord-guard
autoscaler: guard scale-down against live coordinators and busy victims
2026-10-29 00:37:44 +08:00
openqj 4cf5888f94 Merge pull request #116 from openqj/feat-automem-pg-replace
fix(db): register auto-memory tables in _OR_REPLACE_PK
2026-10-28 23:01:16 +08:00
openqj ce83dcf586 Merge pull request #114 from openqj/feat-websearch-docker-env
fix: pass search env into Docker task containers (SEARXNG_URL was lost)
2026-10-28 22:22:55 +08:00
openqj ffeed25f50 Merge pull request #115 from openqj/feat-rate-limit-retry-after
429 限流加 Retry-After 头
2026-10-28 20:22:11 +08:00
openqj 7279d0a81c Merge pull request #110 from openqj/feat-marker-tools
任务内标记工具:task-create/task-poll/task-read、wait-threads、task-cancel/task-retry
2026-10-28 20:19:39 +08:00
openqj eae9884b13 Merge pull request #111 from openqj/feat-coord-row-vanished
协调员行消失按中断处理:本体行消失即放槽,子任务行消失按 interrupted 合流
2026-10-28 17:46:23 +08:00
openqj a0b6333f0c Merge pull request #113 from openqj/feat-websearch-worker
feat: websearch MCP worker wiring + egress (public SearXNG route)
2026-10-28 17:36:22 +08:00
openqj 075908fe58 Merge pull request #112 from openqj/feat-websearch-mcp
feat: web search MCP v1 (oh-my-pi pattern, Python stdlib)
2026-10-28 17:21:19 +08:00
openqj 5026e75b2c Merge pull request #109 from openqj/feat-goal-fail-resume
goal 异常退出记 interrupted,可断点续跑
2026-10-28 15:53:35 +08:00
openqj d129f7bf8c Merge pull request #108 from openqj/feat-auto-memory
云端身份记忆 + 自动提取注入:官方 memories 对齐(确定性 v1)
2026-10-28 12:19:17 +08:00
openqj ea5ab6207c Merge pull request #93 from openqj/feat-cost-notify-3
成本预算与失败通知第三批:G7 分层、G8 Docker 轮询掐断、G9 worker 忽略 host 预算、G13/G14 归属
2026-10-28 11:49:44 +08:00
openqj ac553509ea Merge pull request #107 from openqj/feat-thread-unarchive-noresume
fix: thread/unarchive 不再预 resume
2026-10-28 09:46:57 +08:00
openqj 5c9beb8a6d Merge pull request #106 from openqj/feat-thread-unarchive
fix: thread/unarchive 走已归档解析(--archived 列表)
2026-10-28 06:30:17 +08:00
openqj f5d6d6b9f0 Merge pull request #105 from openqj/feat-thread-resolve
fix: 线程解析按 home×provider 穷尽回退(共享 home + sub2api)
2026-10-28 05:45:43 +08:00
openqj 86eb43f1ca Merge pull request #104 from openqj/feat-thread-lifecycle
feat: 线程生命周期对齐 15 项(bindings/refs/快照/心跳绑定/移交落点)
2026-10-28 05:04:53 +08:00
openqj aee60fcb7d Merge pull request #103 from openqj/feat-thread-wait-ops
feat: 线程等待与状态读取 8 项(wait/read/message/handoff/worktree/pr-checks/automation/sleep)
2026-10-28 04:43:02 +08:00
openqj 38c0797cb3 Merge pull request #100 from openqj/feat-residual-a
残留批次A:成员删除、PR needs_local_worker 落库、推送 DNS TOCTOU
2026-10-28 03:27:59 +08:00
openqj 6e3eb7ba11 Merge pull request #99 from openqj/feat-p2
feat: P2 控制台与运维批(成员管理、任务筛选、链路下载、线程操作与 skills/MCP、迁移对齐、monitor 告警、备份回滚、Caddy 选项)
2026-10-28 00:52:55 +08:00
openqj 97f019d1dd Merge pull request #98 from openqj/feat-p1-security
feat: P1 安全批(执行中配额检查、成本实账、goal/协调员语义、PR 通道、孤儿签名、控制面与控制台加固)
2026-10-28 00:36:54 +08:00
openqj d254240d84 Merge pull request #96 from openqj/feat-p0-security
feat: P0 安全批(真全局管理员、双人配额门、默认配额、fix-review 收紧、App 配置限管理员、取消真杀任务)
2026-10-28 00:17:37 +08:00
openqj d0ca1f7f60 Merge pull request #97 from openqj/feat-login-retry
登录限流下开通突发不再硬失败(节流 + 429 重试)
2026-10-27 23:34:41 +08:00
openqj 494c3847d4 Merge pull request #94 from openqj/feat-regperf
perf: 注册开通复用进程内管理员会话
2026-10-27 22:46:50 +08:00
openqj cc0c707ccd Merge pull request #90 from openqj/feat-cost-notify-1
成本预算与失败通知第一批(G1/G2/G5/G6/无价上报)
2026-10-27 21:58:55 +08:00
openqj c2f82da5e0 Merge pull request #92 from openqj/feat-sub2api-hotfix
fix: docker 默认 runner 支持 env + 并发开通竞态复用
2026-10-27 18:10:50 +08:00
openqj 99efa93bd3 Merge pull request #88 from openqj/feat-sub2api
sub2api 网关接入:每用户独立账号 + 任务注入 + 网关可配置
2026-10-27 17:30:14 +08:00
openqj 437684902a Merge pull request #86 from openqj/feat-multiuser-hardening
多用户生产级缺口批:sweep 鉴权、默认配额、默认 executor、 无价 token 上限
2026-10-27 17:22:40 +08:00
openqj c1f9313c10 Merge pull request #87 from openqj/feat-coordinator
feat: 协调员任务(并行子任务、等齐、合流汇总)
2026-10-27 16:25:32 +08:00
openqj e786e1f85d Merge pull request #89 from openqj/feat-p1
P1 补齐:自动评审队列、自动化+分诊、并发 caps、运行时审批队列
2026-10-27 16:00:53 +08:00
openqj 29efc6c61f Merge pull request #85 from openqj/feat-task-turn-ids
feat: 任务列表显示 turn_id 与 root_turn_id
2026-10-27 15:44:33 +08:00
openqj 559a7dcb9f Merge pull request #84 from openqj/feat-peer-messages
feat: 任务间互发消息(API + agent 标记块,不中断任务)
2026-10-27 14:30:14 +08:00
openqj 4901a1090b Merge pull request #83 from openqj/feat-tenant-trace
fix: 租户 Docker 任务链路可见(租户目录优先、共享目录兜底)
2026-10-27 13:01:35 +08:00
openqj 79a1d56856 Merge pull request #82 from openqj/feat-subagent-chain
feat: 命令台子代理链路(主任务/模型子代理/委派子任务 + 过程调用实时同步)
2026-10-27 11:54:41 +08:00
openqj 34cd0eeba7 Merge pull request #81 from openqj/feat-orphan-worker
fix: worker 代码变化自退 + 部署时清孤儿 worker
2026-10-27 11:26:47 +08:00
openqj c007fafcc7 Merge pull request #78 from openqj/feat-quota-hardening
worker: enforce quotas during execution
2026-10-27 11:13:49 +08:00
openqj c189df4a20 Merge pull request #76 from openqj/fix-handler-500
fix: 请求处理未捕获异常回 500 JSON,不再断连变 nginx 502
2026-10-27 11:01:31 +08:00
openqj ad8bf280d0 Merge pull request #77 from openqj/feat-staging-cleanup
fix: 提前失败路也清附件暂存
2026-10-27 11:00:27 +08:00
openqj b0772d0eac Merge pull request #75 from openqj/feat-deploy-key
feat: deploy 无密码时走密钥直连
2026-10-27 05:50:52 +08:00
openqj 0a862c11f7 Merge pull request #74 from openqj/feat-repo-picker2
GitHub 仓库选择菜单:安装仓库列表 + PATCH 补仓库 + 控制台下拉
2026-10-27 05:48:08 +08:00
openqj d91e5134f5 Merge pull request #73 from openqj/fix-rate-limit-deadlock
fix: 限流清理移出请求路径,根治 rate_limit_hits 死锁
2026-10-27 05:45:18 +08:00
openqj 5ba4d35839 Merge pull request #72 from openqj/feat-goal-marker
fix: goal 宣告检测容忍行尾句号
2026-10-27 05:32:11 +08:00
openqj 43748804d3 Merge pull request #71 from openqj/feat-quotas
租户配额与计费:按用户月度 USD 上限 + 建任务/分支/重试准入 402
2026-10-27 05:28:25 +08:00
openqj 2a7cdd582f Merge pull request #70 from openqj/feat-continue
feat: 旧任务继续会话——终端任务带新消息 + 全部选项同一会话续跑
2026-10-27 04:46:06 +08:00
openqj cf293914d9 Merge pull request #69 from openqj/feat-attachments
feat: 任务附件——文件/文件夹/图片进任务工作区
2026-10-27 04:39:05 +08:00
openqj c102327040 Merge pull request #68 from openqj/env-console
feat: 命令台云端环境——选、建、管 + 任务绑定环境
2026-10-27 04:13:11 +08:00
openqjandhost c86b450851 feat: goal 模式新语义——prompt 即目标,无验收命令,不限轮次,模型宣告完成 (#67)
console 打勾 goal 模式时不再有专用 goal 文本、验收命令、轮次
三个输入(已移除,换成说明行),只发 goal_mode=1;server 侧
goal_mode=1 时 goal 存 prompt、验收命令空、轮次存 0,带验收
命令或与计划模式同用时 400,旧的带验收命令任务照原样可用。

host.py goal 循环:verify 为空时不跑验测,轮次提示里写明
标记约定;模型在完整跑完的回合末尾单独一行输出“目标已
达成”即达标(超时回合的部分文本含标记也不算);--max-rounds
0 为不限轮次,goal-resume 续跑按 0 处理(不用 or 兜底成 3)。
刹车只有取消与预算耗尽(后者记 interrupted、可续跑)。

迁移与 worker:tasks 加 goal_mode 列(server 迁移、worker 列
补齐、PG schema 三处同步);worker 按 goal_mode 或
verify_command 判定 goal 路径,重试与后续消息排空对新语义
同样只跑一次/不排空;Local/Docker goal_task 的 --verify 可选、
--max-rounds 0 原样传。

Co-authored-by: host <host@test.local>
2026-10-27 03:54:48 +08:00
openqjandhost 4179fb1a0a fix: 命令台初始化有 key 即加载模型列表 (#66)
回访用户 key 已在 localStorage 里:此前模型列表只在点“保存”
时加载一次,重开页面下拉永远只有默认项(2026-10-27 实测)。
初始化序列补 if (getKey()) loadRelayModels();单测补初始化
序列含该调用的标记断言。

另:公网 /relay/models 曾因 nginx 缺 /relay/ 代理返回 404,
与本修无关,nginx 侧另行补 location。

Co-authored-by: host <host@test.local>
2026-10-27 03:33:35 +08:00
openqjandhost f4443dca4f feat: 计划模式 + 后续消息 + 会话分支接云端 (#65)
- 计划模式:tasks 加 plan 列;plan 与 approval=full / goal 冲突时
  400;执行器在 approval 参数后追加 --sandbox read-only(本地
  dispatch/run/goal/popen 与 Docker 内层命令全覆盖),host 任务
  存下 sandbox 后续轮次自动继承只读。
- 后续消息:新表 task_followups;POST/GET /tasks/{id}/followups
  (仅 queued/running 的非 goal 任务;direct 立即往链路追加
  phase=followup-direct 条目,本轮跑完后优先于排队执行;排队
  按 direct 优先、队内先来先服务逐条再跑一轮,同一 thread;
  一条失败即停、剩余 pending 留给重试入口;取消时回 pending)。
- 会话分支:POST /tasks/{id}/fork(仅终态任务;继承 executor/
  模型/强度/权限/计划,goal 字段置空);worker 先 fork 再跑首轮,
  首轮失败不自动重试、不重复分叉,失败后走重试入口重跑首轮。
- 修任务级模型被覆盖:worker 此前无条件写成主模型,控制台
  选的模型实际不生效;现为任务级 > worker 主模型 > 配置。
- Docker 租户准备抽成 _docker_task_context,供普通尝试与 fork 共用。
- console:新建任务计划勾选(含冲突拦截)、详情计划徽标与
  分支来源、分支按钮与表单、后续消息区、列表 [计划]/[分支] 标记。
- 测试:cloud/tests/test_task_links.py 17 个(server 校验与继承、
  worker 模型优先、只读命令、排空顺序与停排、goal 不排空、
  fork 单次性);全量 cloud 542、host 49、deploy 14。

Co-authored-by: host <host@test.local>
2026-10-27 03:17:51 +08:00
openqj 6da3745127 Merge pull request #64 from openqj/goal-align-2
CI verify pass 2m2s,合并后走新链路推生产。
2026-10-27 03:08:49 +08:00