Commit Graph
58 Commits
Author SHA1 Message Date
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