合并 master 并接入 DirectProject 新聊天架构

- 合并 origin/master(304 个提交:DirectProject 聊天容器重构、Project Supervisor 退役、策划附件导入、CI 隔离编译缓存等)。
- 接受 master 对 ProjectSupervisorView / SupervisorChatOnlyView 的退役与预览快捷测试收敛;发布入口改由 DirectProject 聊天头承载。
- DirectProjectChatHeader 新增「发布到游戏广场」入口(无回调不渲染、回合忙态禁用),DirectProjectChatView 透传 onRequestGamePublish。
- App.tsx 继续由工作台壳持有试玩包导出与 GameDistributionPublishPanel,沿用 project.export_package 权限确认队列;check-config 把该命令从 native-only 清单移回 App invoke。
- 后台游戏审核 API / 类型 / 路由测试与 master 新增的 AGC 模板管理按双方保留合并,并修掉拼接造成的接口与用例闭合缺陷。
- 修正 master 自带的 viteProxyConfig 断言:/api/creation-entry 属退役路由,测试改为断言不进入代理。
- 记录合并踩坑:语法结构内部的冲突不能简单按「双方保留」拼接,必须按某一侧骨架重建并跑 tsc 与单文件测试。
- 验证:全量 vitest 393 文件 / 4374 用例通过,root / AGC / admin-web 三端 typecheck,cargo check 与游戏分发 Rust 测试,encoding、doc-index、rustfmt、SpacetimeDB schema guard。
This commit is contained in:
2026-09-22 16:45:29 +08:00
651 changed files with 78860 additions and 60952 deletions
+2 -2
View File
@@ -887,7 +887,7 @@ export async function fetchWithApiAuth(
requestHeaders[REQUEST_ID_HEADER] = requestId;
let hasAuthHeader = Boolean(
requestHeaders.Authorization?.trim() ||
requestHeaders.authorization?.trim(),
requestHeaders.authorization?.trim(),
);
if (
@@ -903,7 +903,7 @@ export async function fetchWithApiAuth(
requestHeaders[REQUEST_ID_HEADER] = requestId;
hasAuthHeader = Boolean(
requestHeaders.Authorization?.trim() ||
requestHeaders.authorization?.trim(),
requestHeaders.authorization?.trim(),
);
} catch (error) {
if (requestSignal?.aborted) {
@@ -211,7 +211,8 @@ describe('editorProjectClient', () => {
{ deadlineAt: expect.any(Number) },
);
const requestOptions = requestJsonMock.mock.calls[0]?.[3] as
{ deadlineAt?: number } | undefined;
| { deadlineAt?: number }
| undefined;
expect(requestOptions?.deadlineAt).toBeGreaterThanOrEqual(
startedAt + 60_000,
);
@@ -219,7 +219,9 @@ export type EditorAssetGenerationInputs = {
};
export type EditorProjectResourceSourceType =
'uploaded' | 'generated' | 'mock_generated';
| 'uploaded'
| 'generated'
| 'mock_generated';
export type EditorProjectResourceSnapshot = {
resourceId: string;
@@ -328,7 +330,11 @@ export type EditorImageGenerationInput = {
prompt: string;
size?: string;
kind?:
'spec' | 'character' | 'quick-edit' | 'ui-design' | 'publication-material';
| 'spec'
| 'character'
| 'quick-edit'
| 'ui-design'
| 'publication-material';
model?: string;
screenColor?: string;
segModel?: string;
@@ -538,7 +544,12 @@ export type EditorIconSpritesheetSliceResult = {
export type EditorCharacterAnimationResolution = '480p' | '720p';
export type EditorCharacterAnimationRatio =
'same' | '1:1' | '4:3' | '16:9' | '9:16' | '3:4';
| 'same'
| '1:1'
| '4:3'
| '16:9'
| '9:16'
| '3:4';
export type EditorCharacterAnimationFrameCount = 32 | 40 | 48;
@@ -600,7 +611,12 @@ export type EditorVideoModel =
export type EditorVideoResolution = '480p' | '720p' | '1080p';
export type EditorVideoSoundMode = 'on' | 'off';
export type EditorVideoAspectRatio =
'16:9' | '9:16' | '1:1' | '4:3' | '3:4' | '21:9';
| '16:9'
| '9:16'
| '1:1'
| '4:3'
| '3:4'
| '21:9';
export type EditorVideoGenerationInput = {
prompt: string;