Skip to content

[v2] 装配公共执行服务、目录与演示入口 - #237

Merged
EricWvi merged 5 commits into
ora-space:mainfrom
ElephantGit:feat/774-execution-assembly
Oct 31, 2026
Merged

EricWvi merged 5 commits into
ora-space:mainfrom
ElephantGit:feat/774-execution-assembly

Conversation

@ElephantGit

@ElephantGit ElephantGit commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

将现有页面的公共执行注入点接到 PostgreSQL、纯模型执行和每项目 Node Driver。普通启动先恢复旧 Node/会话、准备真实 Demo Git 项目,再开放 HTTP;同一个 Service 提供执行与模型/执行器目录,并支持 -fixture-check 和按归属停止后的 -cleanup。

已 rebase 到 main bad9e4d7(#230 已合入);本 PR 仅保留公共 Service、catalog、启动与 demo 装配,diff 不再包含 Node Driver。保留当前 chat、成员、空间和项目接线。

收到 SIGTERM 时取消 HTTP 请求上下文,让打开的 chat SSE 完成观察者清理,再关闭 runtime/数据库;HTTP 超时会关闭连接并保留退出错误。浏览器断开只结束自身观察。收到已持久化终态后的 Append 会等待原 worker 完成 ACK/收尾,再重查权限、会话与 attempt;真实运行中仍返回 Busy,避免终态发布与收尾间的下一轮排队停滞。

演示租户成员可信,项目创建允许任意 HTTPS 主机,服务器会访问给定地址;边界写入 projectrepos README。执行关闭失败返回错误并保留可能仍被 worker 使用的数据库句柄。

验证:Go 1.27.1 / PostgreSQL 17.11 下 gofmt、全包 vet/race/build;HTTP SSE 与连续轮次交接回归先确认旧行为失败,修复后通过。原生真实 Node/OpenCode 的公共 Service 并发、工具文件、取消、End、重开连接池与 Service 后完整读回通过(52.98s);正式 CLI fixture-check 通过(20.55s)。前端完整 check 通过(67 文件、490 测试),API 生成无漂移,全部 18 项 Playwright e2e 通过。实际浏览器验证真实 Agent 工具结果、刷新后历史读回,并在 SSE 页面打开时发送 SIGTERM,服务正常退出且无所属 Node 残留。当前 head 截图见关联运行。

本轮模型使用 fixture,外部 provider opt-in 未启用。v2,不涉及 specs。

Refs ora-space/circus#774

@ObsisMc ObsisMc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审 head 437de52b44c1417439f52a9c8c08b6b2df980f22(基线 main bad9e4d7,落后 0)。

核对

  • diff 已不含 #230 的 agentruntime / node 内容;22 个文件都是 v2-server/ 和 frontend-v2/e2e 下的交付物,描述写了「v2,不涉及 specs」和 Refs ora-space/circus#774。
  • 装配顺序正确:数据目录锁 → agentruntime.New(含 Node 恢复;无资产时只做 Recover)→ executionruntime.New(先结算旧会话)→ prepareDemo → HTTP。退出时先 Shutdown HTTP,再 runtime.Close(join worker、关 driver),最后关数据库;Close 未确认时不关库。
  • main 把同一个 Service 同时注入 Execution 和 Catalog,Projects 也注入了,符合 owner 要求的"从 server.Options 接入、不各自改启动入口"。
  • owner 的 #231 结论已写进 projectrepos/README.md:演示成员可信,HTTPS 不限 host,不能作为不可信成员的抓取代理。
  • 权限:Start / Append 检查当前成员关系;Cancel / End / 读取走带 scope 的 ReadExecutionSession;worker 用原归属写终态,ownership-only 写入没有暴露给页面。和 #228 reviewer 的提醒一致。
  • ced2ed59:BaseContext 绑定进程信号 ctx,SIGTERM 时 SSE 观察者先退出,Shutdown 不再卡到超时。
  • 437de52b:终态已发布、worker 还在 ACK/收尾时,Append 先释放锁等 prior.done,再循环重查关闭、授权、会话、attempt 和 ending,不会重叠派发。仍在运行的轮次照旧返回 Busy。

本地验证(Go 1.27.1,aarch64,PostgreSQL 17.11 独立库)

  • go vet ./...、go build ./... 通过。
  • go test -race 覆盖 internal/executionruntime、internal/server、internal/store、internal/projectrepos 和根包,全部通过。
  • 跳过 TestRealServiceAgentPostgresRestartAndConcurrentConversations 和 TestConfiguredProviderServicePostgresRestart:本机是 arm64,没有 x86_64 Node 资产,也没开 provider。真实 Node/Agent 以作者在原生 x86_64 上的验收和截图为准,我没有独立复跑。
  • head 上的 server/frontend/e2e CI 全绿。

非阻塞建议

  1. Service.failed 是全进程的闸门:任何一个 worker 的终态写入失败,或 Agent 停止未确认,都会让整个服务拒绝所有新的 Start/Append(包括别人的纯模型对话),清单也返回 503,直到重启。README 写明了这是有意的 fail-closed,演示期可以接受;如果后续出现"一个 Agent 卡住导致全站不可用",可以考虑把闸门缩到项目或会话。
  2. workspaces、workspaceSession、ending 三个 map 不回收,单进程演示问题不大,和 #230 的回收后置一起承接即可。

结论:可以合并;合并由 owner 决定。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants