Commit Graph

5579 Commits

Author SHA1 Message Date
suzmii 454ed320a5 修复审核版本 revision 冲突
Project CI / Backend tests (pull_request) Failing after 33s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m57s
Project CI / Frontend tests (pull_request) Failing after 1m33s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 3m39s
Project CI / Repository checks (pull_request) Failing after 25s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 4m46s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m54s
Project CI / Native shell tests (pull_request) Successful in 6m1s
审核队列与版本快照使用所属游戏当前 publication_revision,避免新游戏审核通过时误携带 0。

详情审核动作使用最新详情 revision,并补充后台回归测试。
2026-10-03 14:34:01 +08:00
suzmii 2eac0975df 修复发行资源路径与审核试玩 Cookie
Project CI / Backend tests (pull_request) Failing after 29s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m48s
Project CI / Frontend tests (pull_request) Failing after 1m11s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 3m18s
Project CI / Repository checks (pull_request) Failing after 42s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 4m13s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m15s
Project CI / Native shell tests (pull_request) Successful in 6m37s
归一化发行包根绝对资源引用并兼容已有发行包,修复正式运行时素材请求跑到本地 Vite 的问题。

审核预览仅拒绝真实平台 refresh Cookie,保留版本绑定 Token 和私有缓存隔离。
2026-10-03 13:26:23 +08:00
suzmii 44f02ee19b 完善游戏审核试玩与客户端版本更新
后台审核详情复用公开游戏详情样式,补齐发布者、冻结资料、素材换签和待审 ZIP 试玩。

AGC 保存已发布作品绑定,支持同一 gameId 更新版本并由用户填写目标版本号。

保留 SpacetimeDB 表结构不变,增加版本号请求校验、幂等边界和本地清单字段。
2026-10-03 12:35:57 +08:00
suzmii 783ca014ef 合并 master 到作品管理分支 2026-10-03 12:30:07 +08:00
k88936 d90f4fdfdc Merge pull request 'style/优化聊天历史页' (#590) from feat/smoother-dialog-history into master
Project CI / AI game creator shell Rust crates (push) Successful in 1m55s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m12s
Project CI / Backend tests (push) Successful in 4m51s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 5m11s
Project CI / Frontend tests (push) Successful in 2m22s
Project CI / Native shell tests (push) Successful in 5m36s
Project CI / AI game creator shell web tests (push) Successful in 2m34s
Project CI / Repository checks (push) Successful in 3m3s
Reviewed-on: #590
2026-10-02 23:22:32 +08:00
k88936 1874a6e9ec 注释:为会话滚动锚点的全表量测补 TODO 性能分析
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m55s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 4m18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m33s
Project CI / Backend tests (pull_request) Successful in 3m58s
Project CI / Repository checks (pull_request) Successful in 3m4s
Project CI / Frontend tests (pull_request) Successful in 3m25s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m14s
Project CI / Native shell tests (pull_request) Successful in 5m49s
- conversationScrollAnchor.ts 的 readTopVisibleTurnAnchor 循环上方新增 // TODO(perf): 注释,仅注释、无行为变化
- 记录量测口径:最坏 O(锚点之前的块数) 次 getBoundingClientRect,同帧首次调用后布局已干净、后续不再各自触发 reflow,属 low,不是振荡源
- 记录 rAF 节流与「只在补偿前才读」都省不掉这次遍历,故不采纳
- 记录二分 / 续扫被收起 <details> 的 0 矩形打断单调性,需先定「隐藏块怎么参与」
- 首选后续方向:缓存上次命中的块身份并从附近续扫,不破坏单调性假设

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 22:34:07 +08:00
k88936 0ae94caf16 修复:更早历史的世代号在渲染期推进,切换项目的守卫不等 effect
- 换项目时 historyLoadTokenRef 与 projectPathRef 同一处推进,复位 effect 不再推进
- 旧读取在「切换提交完成、复位 effect 未跑」的窗口落地时立刻失效,不再合并条目或写游标
- ADR 第 1 条与决策记录说明推进时机与其安全性依据(该窗口内不会新起带旧游标的读取)

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 22:27:33 +08:00
k88936 2b01476891 修复:动画期间内容变高时把回到底部动画重新对准新底部
- 程序化平滑滚动期间布局补偿不再直接跳过:内容变高时以新的 scrollHeight 重发平滑滚动
- 避免动画停在旧目标后 programmaticScrollRef 等不到贴底事件、跟随与补偿整段挂起
- hook 用例断言动画目标从 [1200] 变为 [1200,1500] 且仍能交还控制权
- ADR 第 3 条补一条口径,决策记录补齐本条与错误行结构两条

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 22:25:47 +08:00
k88936 8f91227d17 修复:历史加载错误行的重试按钮移出断言式 live region
- 内联错误行由 <p role=alert> 改为普通容器,role=alert 只包住错误文案本身
- 重试按钮留在 live region 之外,避免被卷进 assertive + atomic 的整体播报
- 组件用例断言 alert 不包含重试按钮,重试仍是可点击的唯一手动出路
- ADR 同步错误行的无障碍结构

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 22:24:21 +08:00
k88936 ff88ad9210 Merge remote-tracking branch 'origin/master' into feat/smoother-dialog-history
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m39s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 3m41s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m25s
Project CI / Backend tests (pull_request) Successful in 4m46s
Project CI / Frontend tests (pull_request) Successful in 2m30s
Project CI / Repository checks (pull_request) Successful in 2m58s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m14s
Project CI / Native shell tests (pull_request) Successful in 5m37s
2026-10-02 20:19:53 +08:00
k88936 429557ea6a 修复:会话滚动锚点改用稳定块身份定位
锚点从「回合 key + 块序号」改为「回合 key + 块身份」,findTurnBlock 按 data-block-key 定位:回合收口时过程块被折进 details,块序号会整体后移,原实现会解析到隔壁块并按错误基准写 scrollTop。

收集选择器收敛为 [data-turn-key][data-block-key],只把可定位的块计入候选。

锚点块没有布局盒(被折进收起的 details)时读锚点跳过它、restoreTurnAnchor 判失败并放弃这次补偿,调用方拿当前位置重新起锚。

用例补齐:块序号后移后按块身份仍还原到同一块、收起的 details 里的块不参与读取也不参与还原、只收集带块身份的块。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:18:08 +08:00
k88936 42de1b4c39 展示:可锚定块带上稳定块身份 data-block-key
DirectProjectTurn 给正文块写 data-block-key={block.key},「执行过程」包装块与终态文案各给一个回合内唯一的字面量块身份。

ToolCallGroup 与 AgentReasoning 新增可选 blockKey 并透传到 data-block-key,turnKey 的注释改成「按回合 key + 块身份定位」。

组件用例断言每个可锚定块都有块身份且同回合内唯一,并用 running→finished 前后对照钉住「块序号会整体后移、块身份不变」。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:15:07 +08:00
k88936 9f7c2e318c 文档:前插锚点改用稳定块身份
锚点契约从「回合 key + 块序号 + 偏移」改为「回合 key + 块身份(data-block-key)+ 偏移」,写明 running→finished 收口后块序号整体后移、序号锚点会解析到隔壁块的原因。

补记锚点块没有布局盒(被折进收起的 details)时读锚点跳过、还原判失败并放弃这次补偿的规则。

备选方案补记被否掉的「锚点存块序号」与「改找同回合其它可见块」,验收清单补「长回合收口时视口不跳」。

决策记录同步同一条决策与测试口径。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:12:35 +08:00
k88936 a589dad003 文档:同步 review 修正后的会话滚动契约
- ADR 第 1 条补「一次加载与它所属的世代绑定」,第 2 条补块集合缓存与失效信号
- 决策记录追加两处内部缺陷的症状、修正与验证口径

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:59:34 +08:00
k88936 1caf8ae8b0 优化:会话滚动锚点复用块集合缓存
collectTurnBlocks 结果按列表缓存(WeakMap),读锚点与还原锚点在同一帧内不再各查一遍整份列表

useConversationScroll 的 MutationObserver 在子元素增删时调 invalidateTurnBlocks,失效信号与重订阅共用同一处

新增两例纯函数用例:连续收集只查一次 DOM、子元素变化并失效后重新收集

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:58:19 +08:00
k88936 e3c3091ec4 修复:更早历史读取按世代号失效旧请求
loadEarlierHistory 的成功 / 失败 / finally 守卫从「项目路径相等」改成「世代号相等」,A→B→A 之后在飞的旧读取不会再清掉新一代的加载态

新增 historyLoadTokenRef,切项目与每次读取各推进一格,旧世代落地时整段丢弃:不合并条目、不写游标、不关并发闸门

新增一例控制器用例驱动 A→B→A 与同路径新读取在飞,修正前在「旧读取落地」处确实红

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:57:04 +08:00
kdletters db0332ea09 把 AGC 的 cc 执行器与本机 Claude Code 配置彻底隔离
Project CI / AI game creator shell Rust crates (push) Successful in 1m43s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m14s
Project CI / Backend tests (push) Successful in 4m38s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 5m23s
Project CI / Frontend tests (push) Successful in 2m8s
Project CI / Native shell tests (push) Successful in 6m11s
Project CI / Repository checks (push) Successful in 3m15s
Project CI / AI game creator shell web tests (push) Successful in 2m34s
- sidecar 子进程把 HOME、USERPROFILE、CLAUDE_CONFIG_DIR 全部指向项目内隔离目录,不再读用户自己的 ~/.claude.json(个人 MCP、插件市场、凭据),也不再往真实 profile 写 projects / sessions
- requestTimeoutMs 在 cc 执行器里改为静默预算:sidecar 每有一条事件就重置,连续静默超预算才按 sidecar-turn-timeout 收口
- 新增 CLAUDE_CODE_TURN_MAX_DURATION(45 分钟)兜底事件流假活,正常情况更早到的是 DirectProject 的 maxTurnSeconds
- claude_route 诊断行改成 source / host / auth,避开日志脱敏标记(原 credential=bearer 会被整行替换)
- 新增 sidecar 环境隔离单测:USERPROFILE / CLAUDE_CONFIG_DIR 指向隔离目录,且不下发本机 ANTHROPIC_*
- pitfalls.md 记录配置隔离、静默超时语义与脱敏标记的坑
2026-10-02 19:54:13 +08:00
kdletters c5673c5757 修复 AGC 的 cc 路由被本机 ANTHROPIC_* 环境顶掉
- claude_code_cli.rs 用 claude_code_route 统一决定 cc 的 baseUrl 与凭据:平台会话 > 自定义端点 > 配置 key,本机 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY 完全不再参与
- 未登录且没配 key 时由 game_creator_claude_code_cli_route_error 明确报「cc 模式需要先登录陶泥儿账号」,不再静默回落到用户个人中转
- 不再把 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN 放进 sidecar 的 copy_env 白名单,凭据只由解析出的路由下发
- 新增 agent.direct_codex.claude_route 诊断行(source / host / credential),只写主机名,不带路径与凭据
- 新增 claude_code_cli 路由单测:平台优先、自定义端点用 x-api-key、未登录不回落本机环境、baseUrl /v1 归一化、主机名诊断
- pitfalls.md 记录本次「官方模型全被发到用户个人中转」的根因、现行口径与排查手段
2026-10-02 19:30:59 +08:00
k88936 97e8f1b652 Merge remote-tracking branch 'origin/master' into feat/smoother-dialog-history
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m50s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m30s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 4m51s
Project CI / Backend tests (pull_request) Successful in 4m53s
Project CI / Frontend tests (pull_request) Successful in 2m33s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m27s
Project CI / Native shell tests (pull_request) Successful in 5m47s
Project CI / Repository checks (pull_request) Successful in 3m4s
2026-10-02 19:20:53 +08:00
k88936 ccc9b776d1 修复:切项目时复位 DirectProject 对话滚动所有权
useConversationScroll 新增 conversationKey 身份信号,身份变化时复位跟随最新 / 贴底 / 有新回复 / 前插锚点 / 折叠头 / 程序化滚动标记

复位时把终态指纹同步成新会话内容并重新贴底,避免同一次提交里的内容变化被算成「有新回复」

DirectProjectConversation 透传身份键,DirectProjectChatView 传项目路径,不重建列表 DOM

新增 3 条换会话用例与 1 条组件用例,组件用例抽成 conversationElement 以便 rerender

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:13:07 +08:00
k88936 95a32a316f 文档:换会话时复位 DirectProject 滚动所有权
- ADR 新增第 6 条:会话身份作为显式信号复位跟随最新/锚点/胶囊状态,并记录「key 重建列表」的取舍
- 决策记录追加换会话复位的症状、决策与验证口径

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:08:54 +08:00
k88936 986136171e 修复控制器回归测试的 invoke 替身类型
- vi.fn 返回固定签名,装不进 window.__TAURI__.core.invoke 的泛型签名,显式转成 TauriInvoke
- tsc 不再报 TS2322;用例行为与断言不变

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:57:43 +08:00
k88936 9cff7bf049 修复更早历史读取失败消息为空时挂起态与错误行一起消失
- 失败消息统一收口成非空兜底文案,空 message 不再让 historyError 变 falsy
- 新增控制器回归用例:宿主抛 new Error() 时挂起态仍成立

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:53:51 +08:00
k88936 77401adfe8 修复更早历史加载被旧项目读取提前关闭加载态
- loadEarlierHistory 的 finally 补上项目归属守卫,旧项目在飞的读取落地时不再清掉新项目的加载态与并发闸门
- 新增控制器回归用例:切项目后旧读取落地,新项目的加载态保持到它自己收口

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:52:33 +08:00
kdletters fcb3f2d258 修复 process_identity 在 dev feature 组合下编不过
Project CI / AI game creator shell Rust crates (push) Successful in 1m14s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 5m28s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m44s
Project CI / Backend tests (push) Successful in 4m40s
Project CI / Frontend tests (push) Successful in 2m47s
Project CI / Repository checks (push) Successful in 3m22s
Project CI / AI game creator shell web tests (push) Successful in 2m25s
Project CI / Native shell tests (push) Successful in 6m44s
- process_identity:补 use std::io;,dev 构建(no-default-features + editor-execute)下 io::Error 解析不到,挡住本地开发栈启动
2026-10-02 18:51:11 +08:00
kdletters a5c2ddb917 cc 收尾解析补不过脱敏的失败诊断
Project CI / AI game creator shell Rust crates (push) Successful in 1m48s
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
- claude_code_cli:parse 之后写 claude-parse-done chars=N / claude-parse-error 分段 trace,失败时再往 stderr 打一行 [agc-cc-direct] parse failed: <原因>
- 起因:2026-10-02 18:19 那轮模型已回复(33/103 tokens,149 秒)却在 claude-parse-start 之后被丢弃收成 host_dropped,AppData 日志因文本含 turnToken= 被整体脱敏,看不到原因
2026-10-02 18:47:28 +08:00
suzmii c8e4ca2512 修复发行包遗漏项目素材
构建项目发布时补入 dist 未包含的项目根 assets 文件,并优先保留 dist 同路径产物。

增加 Phaser 发行包素材回归测试并同步发行契约文档。
2026-10-02 18:33:36 +08:00
k88936 238c3c60d7 修复:点回到底部后平滑滚动不再被自身补偿打断
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 1m53s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 2m41s
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m57s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m21s
Project CI / Repository checks (pull_request) Failing after 27s
Project CI / Frontend tests (pull_request) Successful in 2m36s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m24s
Project CI / Native shell tests (pull_request) Successful in 5m42s
- 新增 programmaticScrollRef:动画在飞时滚动事件不翻转跟随、布局补偿整段跳过
- 只有真的还要走一段距离才接管滚动位置;滚到贴底或滚轮 / 触摸 / 键盘接手即交还
- 补齐 hook 用例:动画途中胶囊不闪回、不写 scrollTop、落位后与被打断后照常判定

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:18:34 +08:00
k88936 ecb84f1e70 修复:展开折叠块时把新展开的正文露出来
- 新增纯函数 toggleRevealDelta:折叠头冻结与露出正文合成一次 scrollTop 位移
- 正文底边超出视口只补超出量,正文比视口还高才对齐正文顶边,收起不额外滚动
- 补齐用例:纯函数六例与 freezeToggleHead 两条真机行为

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:18:26 +08:00
k88936 e82070098c 文档:修订 DirectProject 对话滚动契约
- 补充程序化平滑滚动独占滚动位置的规则:动画期间滚动事件与布局补偿都不得写 scrollTop
- 补充折叠展开「刚好露出新展开正文」的最小位移规则,并明确收起不额外滚动
- 决策记录追加两个真机缺陷的根因、修正与 Chromium 复验结论

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 18:18:20 +08:00
k88936 5092412d89 文档:同步 DirectProject 对话滚动契约与旧口径
- ADR 修正样式删除口径:.message-history-more 因策划对话仍在用而保留,后续项一并说明
- 历史技术方案去掉「必须显示显示更早的对话按钮」的过期要求,改为引用新 ADR 的入口形态
- 决策记录新增本次滚动契约、边界与验证口径

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:54:15 +08:00
k88936 65b90ed43e 测试:覆盖更早历史自动加载、前插锚点与回到底部胶囊
- 新增与实现同目录的 5 组用例:阈值与加载门、锚点读取/还原、折叠头冻结与正文对齐、hook 状态机、组件层按钮移除与重试行
- 根 vitest.config.ts 补一条 include,同目录用例才进得了门禁
- 既有断言同步:消息列表类名加上 overflow-anchor 工具类,DirectProjectConversation 用例改用新的加载状态入参

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:54:10 +08:00
k88936 0aa9dad3c7 功能:DirectProject 对话自动加载更早历史并支持回到底部
- 删掉常驻的「显示更早的对话」按钮,改由触顶与填充视口两条触发自动加载,失败即挂起并留内联重试行
- 新增 useConversationScroll:列表唯一滚动所有权(跟随最新、ResizeObserver 补偿、前插锚点冻结、胶囊显隐)
- 新增顶部加载行与底部居中 sticky 胶囊两个表现组件,文案与阈值取自 conversationScrollPolicy
- 列表追加 overflow-anchor:none 关掉原生锚定;「有新回复」按最后一轮终态内容指纹判定
- DirectProjectChatView 交出 messagesRef / shouldFollowLatestRef / handleScroll,只传加载状态与回调

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:54:03 +08:00
k88936 1653a2be6e 功能:DirectProject 回合块标记 data-turn-key 供滚动锚点定位
- DirectProjectTurn 的正文块、执行过程折叠块与终态文案块写上 data-turn-key
- ToolCallGroup 与 AgentReasoning 新增可选 turnKey 透传,工具组与思考块也带回合身份
- 锚点按「回合 key + 块内序号 + 偏移」定位,不新增 DOM 包裹层

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:53:53 +08:00
k88936 72ad9b8cdb 功能:DirectProject 聊天控制器暴露更早历史的加载态、失败态与重试入口
控制器新增 historyLoading / historyError 两个可渲染状态,与并发判据用的 ref 同步镜像。
loadEarlierHistory 失败时写入 historyError 并挂起自动加载,成功路径清掉失败记录。
新增 retryEarlierHistory:先解挂起再走同一条加载入口,供内联错误行的重试按钮调用。
加载失败不再写顶部状态行(状态行留给首屏读取失败等其它用途)。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:42:14 +08:00
k88936 f0ae0bd5d7 重构:抽出 DirectProject 对话滚动判据、锚点与折叠补偿纯函数
新增 conversationScrollPolicy.ts:滚动/自动加载阈值、加载门、胶囊文案与填充视口判据集中在一处。
新增 conversationScrollAnchor.ts:回合 key + 块序号 + 偏移的锚点读取与还原,供前插补偿使用。
新增 conversationToggleReveal.ts:折叠头解析、头部冻结与超长正文对齐,覆盖 details 与 aria-expanded 两种折叠。
新增 useDelayedFlag.ts:延迟显示开关位,避免本地读取瞬间返回时闪一下加载行。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:41:55 +08:00
k88936 c68531b0aa 文档:新增 DirectProject 对话滚动与历史自动加载 ADR
新增 ADR,记录更早历史自动加载、内联加载/错误行、回合 key 锚点前插、回到底部胶囊与折叠展开的滚动契约。

在旧「对话历史单一事实源」ADR 的分页条目上补充指向新 ADR 的引用,保留原分页锚点口径。

docs/README.md 登记新 ADR。

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:27:49 +08:00
k88936 4b02bcc7b0 Merge pull request 'refactor/类型化工具调用错误' (#568) from feat/typed-tool-error into master
Project CI / AI game creator shell Rust crates (push) Successful in 2m9s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m31s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 4m40s
Project CI / Backend tests (push) Successful in 4m47s
Project CI / Frontend tests (push) Successful in 3m7s
Project CI / AI game creator shell web tests (push) Successful in 3m1s
Project CI / Native shell tests (push) Successful in 6m7s
Project CI / Repository checks (push) Successful in 3m39s
Reviewed-on: #568
2026-10-02 17:07:13 +08:00
suzmii db344426f2 修复发行游戏在沙箱中访问存储报错
将运行期存储兼容层保存为独立 JavaScript 文件,通过 include_str 注入发行 HTML。

保持 opaque sandbox 隔离,仅提供当前运行实例的 localStorage 与 sessionStorage 兼容能力。

同步发行沙箱验收脚本和玩法运行契约文档。
2026-10-02 17:06:46 +08:00
k88936 3e9a059d16 Merge remote-tracking branch 'origin/master' into feat/typed-tool-error
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m49s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 4m32s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m32s
Project CI / Backend tests (pull_request) Successful in 4m34s
Project CI / Frontend tests (pull_request) Successful in 2m33s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m31s
Project CI / Native shell tests (pull_request) Successful in 5m36s
Project CI / Repository checks (pull_request) Successful in 3m9s
2026-10-02 16:56:45 +08:00
k88936 19c992f98b 对齐 Gitea 缓存维护用例与已退役 smoke job 的 job 数量
- test_gitea_cache_maintenance.py 中两处硬编码的缓存导出/合并分组数 6 改为按 maintainer RUST_JOB_IDS 动态取值,避免新增或退役 CI job 时用例与实现脱节
2026-10-02 16:55:49 +08:00
k88936 2a3e64a999 格式化 AGC 壳 Rust 源码(rustfmt)
- cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml
- 覆盖退役与合并期间改动的 27 个文件,恢复 check:rustfmt 门禁
2026-10-02 16:36:44 +08:00
k88936 5ffd7dcd0a 修正 AGC 退役后 prompt 边界门禁用例引用已删除源文件
- prompt_source_boundaries.rs 移除 src/agent/prompt.rs、runtime_actions/provider_request_builders.rs、runtime_actions/provider_tool_plan.rs、agent_native_tools.rs、context_compaction.rs、goal.rs、generation/run_lifecycle.rs、generation/role_briefs.rs、runtime_protocol/autonomous_completion.rs、runtime_driver/task_start.rs 等已随自建 Runtime 退役的条目
- prompt_source_boundaries.rs 的常量门禁与工具描述门禁同步移除 runtime_driver.rs、agent_native_tools.rs 条目
- runtime_prompt_bundle_build.rs 删除 provider_request_builders.rs、provider_tool_plan.rs、agent/prompt.rs 三个已退役文件的断言;「不得再内联 prompt 正文」由 src 全树 include_str! 扫描继续兜底
2026-10-02 16:36:35 +08:00
kdletters e1b304d390 自定义 Anthropic 端点改用 x-api-key 出示凭据
Project CI / AI game creator shell Rust crates (push) Successful in 1m56s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m12s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m26s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 4m5s
Project CI / Frontend tests (push) Successful in 3m26s
Project CI / Backend tests (push) Successful in 5m20s
Project CI / Repository checks (push) Successful in 3m26s
Project CI / AI game creator shell web tests (push) Successful in 2m8s
Project CI / Native shell tests (push) Successful in 7m43s
- claude_code_cli:custom 模型(用户自带 key 的 Claude 兼容端点)下把 key 放到 ANTHROPIC_API_KEY,让 Claude Code 走 Anthropic 规范的 x-api-key 头;官方模型仍走平台会话的 ANTHROPIC_AUTH_TOKEN
- 依据:同一次 /v1/messages 请求,Router 只认 x-api-key 时返回 200,走 Authorization: Bearer 时会长时间不响应
2026-10-02 16:35:05 +08:00
k88936 31ff818403 Merge remote-tracking branch 'origin/master' into feat/typed-tool-error
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m0s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 2m23s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m15s
Project CI / Frontend tests (pull_request) Successful in 3m7s
Project CI / Repository checks (pull_request) Failing after 1m11s
Project CI / Backend tests (pull_request) Successful in 5m10s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m11s
Project CI / Native shell tests (pull_request) Successful in 5m55s
2026-10-02 16:22:49 +08:00
k88936 4246052bff 合并 origin/master 到 feat/typed-tool-error
- 取 master 退役 DirectProject 工具调用与回合流账本(#560):删除 direct_tool_calls / direct_turn_stream,direct_events 的回合更新收敛为状态与活动,不再广播 game-creator-direct-turn-update
- 取 master 修复 AGC 文件列举被无关临时锁删除打断(#552)与素材导入 / 资源提交项目锁争用(#581)
- 保留本分支 typed 工具错误口径:逐工具错误枚举、派发边界携带原始 error、工具返回不再软失败
- 保留本分支退役 AGC 独立 Agent Runtime / CLI 执行面的删除,继续删掉 master 侧 runtime_actions 等测试与入口
- 补齐 master 新增的 with_conversation_write_contention 测试助手,项目写锁调用统一为 acquire_project_write_lock_with_wait
- 账户素材分页 offset 上限 500 的 schema、预检与行为对齐,越界 offset 返回 typed 错误并适配相关用例
- 错误事件结构体 message 保留调用方原文,脱敏只发生在落盘与应用日志边界
2026-10-02 16:18:50 +08:00
kdletters 3a0d92b622 Anthropic 直通只用 x-api-key 出示 Router 凭据
Project CI / AI game creator shell Rust crates (push) Successful in 1m55s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m20s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m36s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m24s
Project CI / Frontend tests (push) Successful in 3m27s
Project CI / Repository checks (push) Successful in 3m43s
Project CI / Backend tests (push) Successful in 5m15s
Project CI / AI game creator shell web tests (push) Successful in 1m47s
Project CI / Native shell tests (push) Successful in 7m34s
- llm:原生 Anthropic 直通不再同时带 Authorization: Bearer,只发 Anthropic 规范的 x-api-key
- 实测:Router 对同一次 /v1/messages 请求,只带 x-api-key 时 200(4.7s 返回真实回复),同时带 Bearer 时 79 秒后被断开
2026-10-02 16:14:56 +08:00
suzmii 772e9f0d42 修复游戏封面预览并统一发布灰度说明
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m53s
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m41s
Project CI / Frontend tests (pull_request) Failing after 1m5s
Project CI / Repository checks (pull_request) Failing after 23s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m48s
Project CI / Native shell tests (pull_request) Successful in 5m43s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 10m6s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 10m9s
封面生成结果经鉴权 read-url 转为安全 data URL 预览,失败时不阻断已登记素材发布。

统一后台、前端与后端对 game-distribution:publish 未配置和关闭状态的说明。
2026-10-02 16:03:28 +08:00
kdletters 3e9bc76c2c Anthropic 路由改回原生优先、桥接兜底
Project CI / AI game creator shell Rust crates (push) Successful in 1m46s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m31s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m38s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m33s
Project CI / Frontend tests (push) Successful in 2m41s
Project CI / Backend tests (push) Successful in 4m17s
Project CI / Repository checks (push) Successful in 2m51s
Project CI / AI game creator shell web tests (push) Successful in 1m52s
Project CI / Native shell tests (push) Successful in 5m49s
- llm:/api/llm/anthropic/* 先按 Anthropic 原样直通 Router 的 /v1/messages(20 秒首包上限),拿到 2xx 就直接透传
- llm:直通返回非 2xx、连接失败或首包超时才回退到 Anthropic→Chat 协议桥接,并记录 model/status 便于定位
- 测试:两条 Anthropic 路由用例改为「原生先被拒 + 桥接命中」的两段式 mock
2026-10-02 15:49:01 +08:00
kdletters 580c74759a Anthropic 桥接对上游一律流式,并补非流式聚合
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m19s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m4s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m30s
Project CI / AI game creator shell Rust crates (push) Successful in 1m17s
Project CI / Frontend tests (push) Successful in 3m14s
Project CI / Repository checks (push) Successful in 3m49s
Project CI / Backend tests (push) Successful in 5m45s
Project CI / AI game creator shell web tests (push) Successful in 1m51s
Project CI / Native shell tests (push) Successful in 6m47s
- anthropic_bridge:向 Router 一律请求 stream=true,兼容只接受流式 chat 的上游
- anthropic_bridge:新增 SSE 聚合,客户端要非流式时在网关侧拼回 OpenAI 形状再转 Anthropic message
- llm:非流式分支按上游返回形状选择直读 JSON 或聚合 SSE
- 测试:新增聚合单测(文本 + tool_calls + usage → Anthropic tool_use 还原)
2026-10-02 15:29:42 +08:00