完善抠图恢复展示与契约说明
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
统一图片源守卫的错误文案,避免将抠图误称为参考编辑。 恢复面板显示抠图模式和背景色,缺失字段不推断默认值。 补充同名抠图恢复项的展示回归测试。 同步历史决策引用与当前恢复展示规范。
This commit is contained in:
@@ -1415,7 +1415,7 @@ fn resolve_resource_edit_source(
|
||||
| LocalProjectResourceEditKind::BackgroundRemoval
|
||||
if !lower_media_type.starts_with("image/") =>
|
||||
{
|
||||
return Err("图片参考编辑只能用于图片资源".to_string());
|
||||
return Err("此操作只能用于图片资源".to_string());
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
@@ -463,9 +463,20 @@ type ResourceEditServiceIdentityConfirmation = {
|
||||
expiresAt: number;
|
||||
};
|
||||
|
||||
function pendingResourceEditKindLabel(editKind: string) {
|
||||
function pendingResourceEditKindLabel({
|
||||
editKind,
|
||||
backgroundMode,
|
||||
screenColor,
|
||||
}: PendingLocalProjectResourceEdit) {
|
||||
if (editKind === 'image') return '图片编辑';
|
||||
if (editKind === 'background-removal') return '图片抠图';
|
||||
if (editKind === 'background-removal') {
|
||||
if (backgroundMode === 'complex') return '图片抠图 · 复杂背景';
|
||||
if (backgroundMode === 'flat') {
|
||||
const color = screenColor === 'auto' ? '自动背景色' : screenColor;
|
||||
return `图片抠图 · 平面背景${color ? ` · ${color}` : ''}`;
|
||||
}
|
||||
return '图片抠图';
|
||||
}
|
||||
if (editKind === 'text') return '文本编辑';
|
||||
if (editKind === 'agent-result') return '智能体结果编辑';
|
||||
return '资源编辑';
|
||||
@@ -9111,7 +9122,7 @@ export default function ProjectDevelopmentView({
|
||||
<div>
|
||||
<strong>{pending.assetName}</strong>
|
||||
<small>
|
||||
{pendingResourceEditKindLabel(pending.editKind)} ·{' '}
|
||||
{pendingResourceEditKindLabel(pending)} ·{' '}
|
||||
{pendingResourceEditCreatedAtLabel(pending.createdAt)}
|
||||
</small>
|
||||
<span>
|
||||
|
||||
@@ -109,6 +109,8 @@ type PendingResourceEditFixture = {
|
||||
editKind: string;
|
||||
sourceResourceId: string;
|
||||
assetName: string;
|
||||
backgroundMode?: string | null;
|
||||
screenColor?: string | null;
|
||||
phase: string;
|
||||
createdAt: number;
|
||||
};
|
||||
@@ -1294,6 +1296,42 @@ describe('project resource live canvas integration', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('恢复面板显示同名抠图的模式和颜色,缺失字段不推断默认值', async () => {
|
||||
installTauri({
|
||||
pendingResourceEdits: [
|
||||
{ backgroundMode: 'complex' },
|
||||
{ backgroundMode: 'flat', screenColor: 'auto' },
|
||||
{ backgroundMode: 'flat', screenColor: '#AABBCC' },
|
||||
{ backgroundMode: 'flat' },
|
||||
{},
|
||||
].map((options, index) => ({
|
||||
operationId: `background-${index}`,
|
||||
editKind: 'background-removal',
|
||||
sourceResourceId: 'source-art',
|
||||
assetName: '透明底',
|
||||
phase: 'accepted',
|
||||
createdAt: 1,
|
||||
...options,
|
||||
})),
|
||||
});
|
||||
render(<DerivedWorkbench />);
|
||||
fireEvent.click(
|
||||
await screen.findByRole('button', { name: '管理未完成编辑 (5)' }),
|
||||
);
|
||||
const labels = screen
|
||||
.getAllByText('透明底')
|
||||
.map((name) => name.nextElementSibling?.textContent);
|
||||
expect(
|
||||
labels.map((label) => label?.split(' · ').slice(0, -1).join(' · ')),
|
||||
).toEqual([
|
||||
'图片抠图 · 复杂背景',
|
||||
'图片抠图 · 平面背景 · 自动背景色',
|
||||
'图片抠图 · 平面背景 · #AABBCC',
|
||||
'图片抠图 · 平面背景',
|
||||
'图片抠图',
|
||||
]);
|
||||
});
|
||||
|
||||
it('恢复面板可跳过首条失败任务继续任意 operation,且对账项不会被重放', async () => {
|
||||
const failedOperationId = '11111111-1111-4111-8111-111111111111';
|
||||
const resumableOperationId = '22222222-2222-4222-8222-222222222222';
|
||||
|
||||
@@ -8205,7 +8205,7 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
## 2026-08-24 AGC Direct 抠图语义工具
|
||||
|
||||
- 决策:将抠图能力通过 `agc_remove_background` 加入受控 `agc_tools`。工具只接受当前 manifest 的图片 `sourceLocalAssetId` 与结果名称;普通登录态使用账号鉴权的 `/api/editor/images/background-removals`,ExternalDeveloper 模式使用 External v1 `/api/external/v1/editor/images/background-removals`。客户端负责正式 resourceId、画布/素材目录、稳定 operation/idempotency 身份、权限和错误脱敏,不向 Codex 暴露内部 BgFilter worker、凭据或任意 API。
|
||||
- 约束:异步结果只投影有界队列状态,不允许模型自行构造源 URL 或在不确定提交后更换请求身份;两种路由都接收客户端稳定幂等身份,External v1 继续负责 API Key、幂等接收与统一 operation 查询,客户端不得绕过该契约。
|
||||
- 约束:异步结果与恢复语义以本文「2026-09-17 AGC 抠图接入本地资源编辑恢复闭环」决策为准。不允许模型自行构造源 URL 或在不确定提交后更换请求身份;两种路由都接收客户端稳定幂等身份,External v1 继续负责 API Key、幂等接收与统一 operation 查询,客户端不得绕过该契约。
|
||||
|
||||
## 2026-08-24 资源详情动作、空态滚动与最终图多步恢复
|
||||
|
||||
@@ -8864,3 +8864,4 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
- 决策:抠图作为 `LocalProjectResourceEditKind::BackgroundRemoval` 接入现有资源编辑账本,模式和背景色写入 operation 身份;提交后复用同一套轮询、结果下载、staging、manifest 提交和恢复逻辑。已有账本优先恢复,禁止在未知结果时换 operation/idempotency 重发。
|
||||
- 边界:主站异步队列、BgFilter 和 SpacetimeDB schema 不变;Agent 只获得本地完成资源和安全身份投影,不接触内部 worker 或凭据。
|
||||
- 恢复:已受理任务中断后按原 operation 续查;提交结果不确定时保留账本并人工对账。升级前无账本的 queued 回执不自动迁移或重发,已有远端成果通过正式素材导入恢复。
|
||||
- 展示:恢复面板按账本显示抠图模式,平面背景模式同时显示已记录的自动背景色或颜色值,缺失字段不推断默认值,帮助区分同名待处理任务。
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
## 资源画布交互与工作台状态同步
|
||||
|
||||
- 未完成抠图的恢复项在现有类型行显示账本中的复杂/平面背景模式;平面模式显示已记录的自动背景色或颜色值,缺失模式/颜色不补默认值,恢复仍按原 operation 身份执行。
|
||||
- 活动回合初始空快照、首次成功读取的空结果及禁用后的空态保持同一数组引用;快照签名初值与空态重置值均为 `[]`。无原生 invoke 的窗口测试只期待首次状态发布,异步空结果测试显式控制请求完成,不以初始空数组作为请求已完成的证据。
|
||||
- 工作台向窗口标题栏发布正在运行的项目时,输入未变化不得形成重复发布与清理的渲染循环;打开项目动作始终使用当前工作台处理逻辑,退出工作台后清除其标题栏状态。
|
||||
- 资源子画布(含「所有资源」)保留空白处左键框选、资源卡左键选中/拖动、触摸板双指平移及捏合缩放;右键按住空白处或资源卡拖动时平移画布,不改变资源选择与布局。中键和空格抓手继续可用。总览保留既有左键平移,并支持右键平移。
|
||||
|
||||
Reference in New Issue
Block a user