 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 |
|
openqj
|
028ef02a86
|
Merge pull request #63 from openqj/goal-long-task
CI verify pass 2m10s,合并后走新链路推生产。
|
2026-10-27 02:49:13 +08:00 |
|
 openqjandhost
|
fc016fd459
|
style: 命令台 GUI 美化 (#62)
只改样式与布局骨架,不动 JS 逻辑与接口:
- 卡片化分区(API Key / 健康 / 项目+Workers 两栏 / 新建任务 / 任务列表 / 任务详情),柔和底色 + 圆角 + 细阴影
- 按钮分主次:保存 key 与提交任务为主按钮(蓝),取消为红色弱化按钮;输入框获焦有蓝圈
- 任务状态改圆点 + 彩色文字(running 蓝、completed 绿、failed 红、merged 紫、interrupted 橙),行悬停高亮
- 表格去网格线、表头浅灰,详情/链路区改浅灰圆角框;窄屏单栏自适应
- 验证:HTML 标签平衡、全部 41 个 JS 用 id 齐全、接口标记齐全、零外部引用、JS 经 node --check、test_console 4/4
Co-authored-by: host <host@test.local>
|
2026-10-27 02:45:08 +08:00 |
|
 openqjandhost
|
799f7c3edb
|
feat: 任务实时链路 SSE (#61)
host.py:回合通知摘要成链路条目,增量追加到 <state>/host-traces/<task>.jsonl(上限 5000 行);dispatch/run/goal/delegate 设链路文件
cloud/server.py:GET /tasks/{id}/trace 快照 + /trace/stream SSE(snapshot → entry → done;worktree 在别机时空链路 + 说明)
console:详情链路区,运行中 fetch 流式渲染(EventSource 不能带 X-API-Key 头),终态走快照;DOM 上限 1000 条
单测:test_host_trace 7 + test_task_trace 6;host 49、cloud 525、deploy 14 全过
Co-authored-by: host <host@test.local>
|
2026-10-27 02:27:15 +08:00 |
|
 openqjandhost
|
6022f1dada
|
chore: default model gpt-6.1-sol -> gpt-5.6-terra (#60)
Co-authored-by: host <host@test.local>
|
2026-10-27 02:00:09 +08:00 |
|
 openqjandhost
|
8b2f3968dc
|
feat: per-task model/effort/approval + relay models endpoint (#59)
Co-authored-by: host <host@test.local>
|
2026-10-27 01:44:53 +08:00 |
|
 openqjandhost
|
cff152c5a2
|
fix: console reloads data right after saving key (#58)
Co-authored-by: host <host@test.local>
|
2026-10-27 01:26:19 +08:00 |
|
 openqjandhost
|
e40c2c33bb
|
feat: web command console v1 (GET /console) (#57)
Co-authored-by: host <host@test.local>
|
2026-10-27 01:02:24 +08:00 |
|
 openqjandhost
|
c6e633d162
|
fix: host_deploy stops/starts and health-checks server-2 too (#56)
Co-authored-by: host <host@test.local>
|
2026-10-27 00:50:33 +08:00 |
|
 openqjandhost
|
84ff968111
|
fix: deploy verify parsing must ignore ssh warning lines (#55)
Co-authored-by: host <host@test.local>
|
2026-10-27 00:41:40 +08:00 |
|
 openqjandhost
|
32125f7a98
|
docs: new-host onboarding checklist (HA stage 4) (#54)
Co-authored-by: host <host@test.local>
|
2026-10-27 00:30:32 +08:00 |
|
 openqjandhost
|
de81b1643f
|
docs: Postgres fast-rebuild runbook (HA stage 3, option 1) (#53)
Co-authored-by: host <host@test.local>
|
2026-10-27 00:22:31 +08:00 |
|
 openqjandhost
|
06b9fd12fd
|
HA stage 2: DB-shared rate limiting + second server unit + monitor both-servers check (#52)
Co-authored-by: host <host@test.local>
|
2026-10-27 00:15:16 +08:00 |
|
 openqjandhost
|
fc8e337d0f
|
HA 阶段 1:worktree_host + 跨主机 /pr 队列化 (#50)
* 部署自动化:唯一发布链路 deploy.py + host_deploy.sh,sha/commit 双重验真,失败回滚
旧链路三次栽过的坑:通用 tar 路径导致旧包误部署、传输不验 sha、
主机脚本多份漂移、health 通过不等于新代码上线。本单把四点变硬门禁:
- 产物唯一命名 codex-app-server-<commit>.tar.gz + .sha256,远端唯一路径
- git archive 产物 + DEPLOYED_COMMIT 清单,默认拒绝脏工作区
- 传输链 scp -> scp_run -> chunk 分片,每路传完远端验 sha,不符删掉重来
- 主机侧唯一脚本:先验 sha/清单,staging 解包 + 编译检查,换目录上线,
work/ 原样保留,health + 上线 commit 不符即回滚并退出非零
- deploy.py 成功后独立 ssh 再读一次 live 清单二次核对
- CI:host-verify 加 deploy/tests;release.yml 只在手动/tag + production
environment 审批时部署,主干推送绝不自动部署生产
- deploy.sh 标记为旧链路弃用
- health 的 commit 字段已在父提交 HA 阶段 0 里随 server.py 落地,
本分支整体包含它;commit 为空时只靠文件核对,门禁同样成立
测试:host 32、cloud 487(4 跳过)、deploy 9,全部通过;
host_deploy.sh 仿真覆盖成功/坏 sha/清单不符/health commit 不符回滚。
生产实机部署未做,等确认后再用新链路推。
* HA stage 1: worktree_host + queued cross-host PR jobs
---------
Co-authored-by: host <host@test.local>
|
2026-10-27 00:05:18 +08:00 |
|
 openqjandhost
|
455513dd33
|
HA stage 0: health reads workers registry, daily pg_dump timer, backup freshness in monitor (#48)
Co-authored-by: host <host@test.local>
|
2026-10-26 23:51:54 +08:00 |
|
 openqjandhost
|
275de39148
|
docs: multi-machine HA design (phased, grounded in current single-host facts) (#47)
Co-authored-by: host <host@test.local>
|
2026-10-26 23:41:38 +08:00 |
|
openqj
|
4c6b6ad039
|
Merge pull request #46 from openqj/pg-decimal-cost
修项目成本按天接口在 Postgres 上的 Decimal 序列化崩溃
|
2026-10-26 23:19:54 +08:00 |
|
openqj
|
70177989f2
|
Merge pull request #45 from openqj/real-cost
逐任务真实成本:上游用量事件 + 价目表计价
|
2026-10-26 18:44:09 +08:00 |
|
openqj
|
353d6c1aa8
|
Merge pull request #43 from openqj/goal-cloud
云端 goal/merge/review 三事件:goal 循环 + PR 事件通知
|
2026-10-26 18:14:17 +08:00 |
|
openqj
|
26e73124fb
|
Merge pull request #42 from openqj/push-notify
推送真发送:webhook/slack 内置发送端 + worker 终态通知
|
2026-10-26 17:34:14 +08:00 |
|
openqj
|
b7dace55b9
|
Merge pull request #41 from openqj/pr-timeout
pr 超时:git/gh 子进程默认 120 秒超时
|
2026-10-26 17:03:33 +08:00 |
|
openqj
|
37d049d6b7
|
Merge pull request #39 from openqj/app-token
App-token:推分支建 PR 改走 GitHub App
|
2026-10-26 16:49:46 +08:00 |
|
openqj
|
ee4b01c8f6
|
Merge pull request #37 from openqj/multi-key
多 key:OAuth 登录不再轮换
|
2026-10-26 16:30:15 +08:00 |
|
openqj
|
aa5ad41eba
|
Merge pull request #36 from openqj/github-app-pg-dialect
修 GitHub App 安装在 Postgres 上崩
|
2026-10-26 16:13:58 +08:00 |
|
openqj
|
f07b3ccc7c
|
Merge pull request #35 from openqj/github-app-install
GitHub App 一键安装
|
2026-10-26 16:05:08 +08:00 |
|
openqj
|
ecf4b5c715
|
Merge pull request #34 from openqj/bind-external-identity
oauth: bind existing accounts to external identities
|
2026-10-26 15:50:12 +08:00 |
|
openqj
|
5735ea16d6
|
Merge pull request #32 from openqj/pr-commit-before-push
pr: commit worktree changes before push
|
2026-10-26 15:22:57 +08:00 |
|
openqj
|
b984171f27
|
Merge pull request #30 from openqj/monitor-autoscaler-check
monitor.sh: worker check accepts autoscaler (static worker retired)
|
2026-10-26 11:03:49 +08:00 |
|
openqj
|
7c0e9366f8
|
Merge pull request #29 from openqj/docker-runtime-prod
Production docker tasks: --docker-runtime runsc in autoscaler unit
|
2026-10-26 10:38:36 +08:00 |
|
openqj
|
54834c3744
|
Merge pull request #28 from openqj/docker-runtime-runsc
Docker tasks: --docker-runtime option (runsc support, default off)
|
2026-10-26 10:29:14 +08:00 |
|
openqj
|
b31e9365de
|
Merge pull request #27 from openqj/host-profile-fixes
Fix codex-host profile (capability + netlink for bwrap)
|
2026-10-26 08:41:53 +08:00 |
|
openqj
|
bfe3521ef7
|
Merge pull request #26 from openqj/host-sandbox
Host-level sandbox tasks (LocalExecutor + bwrap)
|
2026-10-26 08:26:53 +08:00 |
|
openqj
|
67acddaf7c
|
Merge pull request #25 from openqj/egress-fixes
Fix egress/AppArmor configs found during host install
|
2026-10-26 08:03:13 +08:00 |
|
openqj
|
7859d5dd8c
|
Merge pull request #24 from openqj/outer-hardening
Outer hardening: AppArmor, pids limit, egress allowlist
|
2026-10-26 07:43:57 +08:00 |
|
openqj
|
4f7c7eb13e
|
Merge pull request #23 from openqj/tenant-isolation
Multi-tenant isolation for Docker tasks
|
2026-10-26 07:26:33 +08:00 |
|
openqj
|
c5d245a7fb
|
Merge pull request #22 from openqj/autoscaler
Autoscale workers by queue depth
|
2026-10-26 06:58:42 +08:00 |
|
openqj
|
67e1d3eb24
|
Merge pull request #21 from openqj/worker-concurrency-and-retry
Worker concurrency, survival (heartbeat/sweep/drain), retry endpoint
|
2026-10-26 06:48:48 +08:00 |
|
openqj
|
341f4a83e1
|
Merge pull request #20 from openqj/worker-poll-perf
Perf: light worker poll query + tasks(status) index
|
2026-10-26 06:21:30 +08:00 |
|
openqj
|
a1e492657a
|
Merge pull request #19 from openqj/host-error-surfacing
Surface failed-turn reason from thread_history in dispatch output
|
2026-10-26 06:15:03 +08:00 |
|
openqj
|
6a857e06bd
|
Merge pull request #18 from openqj/fallback-real-turn-token-and-codex-home
Fallback: extract HTTP code from failed-turn JSON; Docker codex_home points at real relay home
|
2026-10-26 06:09:37 +08:00 |
|
openqj
|
edc187bb70
|
Merge pull request #17 from openqj/docker-config-codex-home
Docker config: writable codex_home under /app/work
|
2026-10-26 05:59:27 +08:00 |
|
openqj
|
0f2e427d93
|
Merge pull request #16 from openqj/docker-config-repo-and-stderr
Docker default repo + keep stderr in worker error_text
|
2026-10-26 05:48:17 +08:00 |
|
openqj
|
3acf0d7b8c
|
Merge pull request #15 from openqj/docker-config-state-path
Fix Docker config state path to work/host-state.json
|
2026-10-26 05:41:33 +08:00 |
|
openqj
|
f49ccfd9bf
|
Merge pull request #14 from openqj/docker-config-in-repo
Commit host-config-docker.json to the repo
|
2026-10-26 05:37:22 +08:00 |
|
openqj
|
1e33b6b3e0
|
Merge pull request #13 from openqj/fallback-thread-start-crash
Fallback also triggers on thread/start crash with explicit HTTP code
|
2026-10-26 05:31:34 +08:00 |
|
openqj
|
52048d7633
|
Merge pull request #12 from openqj/model-fallback-retry
Real model fallback retry (opt-in, at most once)
|
2026-10-26 05:25:29 +08:00 |
|
openqj
|
f1d42d04f3
|
Merge pull request #11 from openqj/workers-precision-fix
Fix workers time columns to DOUBLE PRECISION on Postgres
|
2026-10-26 05:07:16 +08:00 |
|
openqj
|
3bc9d49d0c
|
Merge pull request #10 from openqj/cloud-dispatch-pr
Cloud dispatch pool + auto PR (opt-in, skip clearly)
|
2026-10-26 04:59:51 +08:00 |
|
openqj
|
d3e588e4b3
|
Merge pull request #9 from openqj/deploy-clean-fix
Fix deploy/rollback to clean code dir before extract
|
2026-10-26 04:43:18 +08:00 |
|
openqj
|
138094a3ae
|
Merge pull request #8 from openqj/ops-batch
Ops batch: deploy automation, backup restore drill, monitoring, multi-user verification
|
2026-10-26 04:37:53 +08:00 |
|
openqj
|
6afef78ca8
|
Merge pull request #7 from openqj/repo-url-batch
Project repo_url: worker can run tasks from any git repo
|
2026-10-26 04:17:42 +08:00 |
|
openqj
|
71510a32d4
|
Merge pull request #6 from openqj/hotfix-cleanup-infra
Hotfix: stale-container cleanup must not delete infra containers
|
2026-10-26 04:02:54 +08:00 |
|
openqj
|
5a6d136ce4
|
Merge pull request #5 from openqj/prod-grade-batch
Production-grade: webhook execution, Postgres backup, rate limit, worker timeout/retry
|
2026-10-26 03:56:40 +08:00 |
|
openqj
|
86160ad175
|
Merge pull request #4 from openqj/oauth-real-login
OAuth real browser login: GET callback, userinfo, API key issuance
|
2026-10-26 03:36:52 +08:00 |
|
openqj
|
fbb00b8b6f
|
Merge pull request #3 from openqj/postgres-backend
Postgres real backend: psycopg adapter, schema, migration
|
2026-10-26 03:28:25 +08:00 |
|
openqj
|
a19e77ee44
|
Merge pull request #2 from openqj/host/ci-cloud-tests
host: ci-cloud-tests
|
2026-10-26 03:09:08 +08:00 |
|
openqj
|
dfd6ec4013
|
Merge pull request #1 from openqj/chore/gitignore-state-backups
Ignore host-state backup files
|
2026-10-26 03:01:19 +08:00 |
|