Skip to content

chore: 同步上游 pingdotgg/t3code main 至 5ffe045931 - #37

Merged
Hylouis233 merged 23 commits into
mainfrom
chore/upstream-sync-20261022d
Oct 22, 2026
Merged

Hylouis233 merged 23 commits into
mainfrom
chore/upstream-sync-20261022d

Conversation

@Hylouis233

@Hylouis233 Hylouis233 commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

同步上游 pingdotgg/t3code 5ffe045931 到 opent3code

取代 #36(#36 由 github-actions 自动创建,head 为 pingdotgg:main,存在冲突,fork CI 不会运行)。

上游范围

  • fork main 基线:a2fb75793a(chore: 同步上游 pingdotgg/t3code main 至 49e97d48f9 #35 合并)
  • 上一次合并基点:49e97d48f9
  • 本次合并的上游 sha:5ffe045931(fix(server): a Claude agent stops when the server that started it dies (#23389))
  • 上游范围:49e97d48f9..5ffe045931,共 21 个提交(6f6f68ad2d 起)
  • 合并提交:3841086615(--no-ff)
  • 变更:141 个文件,+4368 / -1380。主要涉及:
    • apps/server:orchestration-v2 放弃的 turn 在继续线程前先中断、运行时长/结束方式指标(RunMetrics)、Claude agent 随启动它的 server 退出、webhook 过滤器支持 [] 数组通配、克隆在 SSH key 被拒时回退 HTTPS
    • apps/web:ChatView 流式回复/访问标记不再整体重渲染、RTL(阿拉伯语/希伯来语)文本、列表布局次数上限(React error 185)、侧边栏视频不再反复重载、ChatGPT Business 用量限制的管理员请求文案
    • apps/mobile:草稿、iPad 头部/输入框布局、Dynamic Island 等修复
    • packages/*:client-runtime RPC 会话变化时刷新 Git refs;shared 新增 cloneUrl;provider-pi 在下一轮运行时 fork 已完成的 turn;source-control-gitcafe 支持请求 reviewer 与打标签
    • 构建:typescript 改为 npm:@tsc-rs/typescript@0.8.0(tsc-rs drop-in),移除 @effect/tsgo,各包 typecheck 脚本从 tsc-rs --noEmit 改为 tsc --noEmit;@legendapp/list 补丁更新;pnpm-lock.yaml 相应更新

冲突

文件 fork 侧 上游侧 处理
apps/server/src/orchestration-v2/RunExecutionService.test.ts(约 2892 行,测试 session fixture) 已把 fixture 的类型断言从 ProviderAdapter.ProviderAdapterV2SessionRuntime 改为 fork 的 ManagedProviderSessionRuntime(provider runtime lifetime 相关改动) 在同一 fixture 中新增 interruptTurn: input.interruptTurn ?? (() => Effect.void),断言仍为 ProviderAdapterV2SessionRuntime 合并两侧:保留上游新增的 interruptTurn 行,类型断言保留 fork 的 ManagedProviderSessionRuntime(与本文件其余 fixture 一致)。未改动其他逻辑

其余文件均自动合并。上游本范围未改动 .github/,fork 的工作流、脚本及 if: github.repository == 'pingdotgg/t3code' 守卫原样保留。

删除检查

git diff --diff-filter=D --name-only origin/main HEAD 为空:本次合并没有删除任何文件,fork 独有文件均未被删。

其他检查:

  • apps/server/src/provider/model-manifest.json 与 origin/main 一致:opencode/1=1、opencode/2=2、pi/2=2 不变
  • .github/workflows/cursor-hygiene-webhook.yml 仍不存在
  • opent3code-source-integrity.cjs --placeholder-only a2fb757 HEAD 通过

上游 CI

本地测试(Node 24.22.0,CI=true vp install --frozen-lockfile 通过)

检查 结果
node --test .github/scripts/opent3code-*.test.cjs ✅ 105/105
apps/server providerCompatibility / ModelManifest / providerMaintenanceRunner ✅ 3 个文件,38/38
apps/server 上游改动及冲突相关测试(RunExecutionService、ProviderTurnStartService、RunMetrics、ClaudeAgentSdkQueryRunner、CodexAdapterV2、AssetAccess、webhookFilter、webhookTemplate、SourceControlRepositoryService) ✅ 9 个文件,213/213
packages/shared 单元测试 ✅ 91 个文件,1014 通过 / 2 跳过
packages/contracts 单元测试 ✅ 28 个文件,149/149
packages/provider-pi 单元测试 ✅ 7 个文件,125/125
packages/source-control-gitcafe 单元测试 ✅ 5 个文件,57/57
packages/client-runtime 单元测试 ✅ 118 个文件,1131/1131
packages/client-runtime 类型检查(tsc --noEmit,tsc-rs) ✅ 0 错误
source integrity(placeholder-only) ✅

未验证

  • 本地用的是 Node 24.22.0,未在 engines.node 指定的 Node 26.12.1 下测试
  • 未跑 server 类型检查、server 全量测试、web/browser 测试、桌面构建
  • apps/web(41 个文件)、apps/mobile(17 个文件)、apps/desktop 的单元测试与类型检查未在本地运行,交给 CI
  • 移动端 iOS/Android 原生构建与真机行为未验证
  • 合并后 RunExecutionService.ts 中上游“中断被放弃的 turn”与 fork 的 provider runtime lifetime 逻辑为自动合并,仅由上述 server 单测覆盖,未做端到端验证

同步后修复

  • 原因:上游 f8e4834(run metrics)把 EventSink 的 publishStoredEvents(events, outcomes) 改成必须传 outcomes(由 applyStoredEvents 返回)。fork 独有的 writeIfRuntimeRequestCurrent 自动合并后仍然只传一个参数,所以 Check 报 TS2554,运行时报 TypeError: outcomes is not iterable(RunMetrics.ts:92)。Test Server 1–3 的失败都由此连锁引起,涉及 EventSink.runtime-request-races、ProviderSessionManager、ProviderEventIngestor、Muse/OpenCode replay。另外,上游新增的 ProviderTurnStartService.test.ts:727 fixture 用的是 ProviderAdapterV2SessionRuntime,与 fork 的 ProviderSessionManagerV2.get 返回类型 ManagedProviderSessionRuntime 不符,报 TS2322。
  • 修复(ca78ddf3ff):writeIfRuntimeRequestCurrent 改为保存 applyStoredEvents 返回的 outcomes 并传给 publishStoredEvents,写法与其他 guarded writer 一致;fixture 的 cast 改为 ProviderSessionManager.ManagedProviderSessionRuntime。
  • 测试(本地,逐个运行):apps/server tsc --noEmit 0 error;EventSink.runtime-request-races 9/9、ProviderEventIngestor 48/48、ProviderSessionManager 68/68、ProviderTurnStartService 32/32、MuseReplayFixtures 8/8、OpenCodeReplayFixtures 22/22、providerCompatibility 13/13、ModelManifest 6/6、providerMaintenanceRunner 19/19;node --test .github/scripts/opent3code-*.test.cjs 105/105;改动的文件 vp check 通过。

Yash-Singh1 and others added 22 commits October 21, 2026 20:47
…2094)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#23052)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…card (pingdotgg#23282)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…uests (pingdotgg#23034)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…sed (pingdotgg#23170)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ngdotgg#23096)

Co-authored-by: Vishal <vishalprashantdoshi@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Vishal Doshi <vdoshi96@users.noreply.github.com>
…ingdotgg#23106)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Nikita Maximilian Grimm <github@nikitagrimm.de>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tch (pingdotgg#23023)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… Activities (pingdotgg#23327)

Fixes pingdotgg#15682. Takes over pingdotgg#23035.

Co-authored-by: Taylor Dolezal <onlydole@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gg#23117)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
pingdotgg#23389)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 08:36
@Hylouis233
Hylouis233 enabled auto-merge October 22, 2026 08:36
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T09:45:32.667462Z ca78ddf New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the size:XXL 1,000+ effective changed lines. label Oct 22, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added vouch:trusted Author has write access or is explicitly trusted by OpenT3Code. 📱 Native Change Native fingerprint changed; a new native build is required for compatible OTA updates. labels Oct 22, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3841086615

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +38 to +41
if (Array.isArray(value) && /\[\]/.test(filter.path)) {
const texts = value.map(scalarText).filter((text): text is string => text !== undefined);
if (filter.op === "notEquals") return texts.every((text) => text !== filter.value);
return texts.some((text) => matchesScalar(filter, text));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Treat non-scalar wildcard elements as existing

For an exists filter such as body.reviewers[], a non-empty array of objects resolves to an array, but every object is discarded by scalarText, leaving texts empty and causing the filter to fail. This contradicts the filter contract in packages/contracts/src/scheduledTask.ts, which says wildcard exists succeeds whenever the resulting list is non-empty, and silently prevents otherwise valid webhook-triggered tasks from running. Handle exists from the wildcard array length before converting elements to scalar text.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.9 KiB 20.9 KiB 0 B (0.0%) 29.3 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB −7 B (−0.1%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB −7 B (−0.6%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: a2fb757 · PR result: ca78ddf · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

…es after sync

Upstream made publishStoredEvents require the run outcomes produced by
applyStoredEvents (run metrics). The fork-only writeIfRuntimeRequestCurrent
still published without them, so every guarded runtime-request write threw
"outcomes is not iterable". Record and pass the outcomes like the other
guarded writers.

Also type the upstream ProviderTurnStartService session-manager fixture as
the fork's ManagedProviderSessionRuntime.
@Hylouis233
Hylouis233 disabled auto-merge October 22, 2026 09:41
@Hylouis233
Hylouis233 enabled auto-merge October 22, 2026 09:41
@Hylouis233
Hylouis233 merged commit a78d988 into main Oct 22, 2026
19 of 21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Native fingerprint changed; a new native build is required for compatible OTA updates. size:XXL 1,000+ effective changed lines. vouch:trusted Author has write access or is explicitly trusted by OpenT3Code.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants