Files
prompt-optimizer/docs/workspace/prompt-data-standardization/02-收藏提示词(含测试结果)后续阶段任务.md

29 KiB
Raw Blame History

通用提示词资产模型落地任务

0. 校订状态2026-05-02

本文是《01-提示词数据格式标准化设计》的分阶段落地清单,不对应单个 Trellis 任务。到 2026-05-02 为止,相关 Trellis 任务已经全部归档,当前没有未关闭的 active task。

已经随最近一轮归档任务完成并校订的范围:

  • 测试结果示例保存走显式保存目标面板,绑定来源只用于默认目标选择和追溯。
  • 示例保存是资产 / 收藏级动作,不绑定具体正文版本,也不以 workspace 正文和目标资产当前正文一致作为追加门禁。
  • 追加示例默认不修改 favorite 正文、function mode 或正文版本链。
  • 用户显式选择保存 / 更新提示词正文时,正文变化可以通过 FavoriteManager 形成新的 content version。
  • 保存目标面板已经覆盖 bound / unbound 默认模式和 create / update 切换测试。
  • PromptAsset 媒体引用的导入、导出和 GC 扫描已经覆盖新旧结构。

仍保留为后续范围、且目前未绑定 active Trellis 任务的主要事项:

  • 用户可见的多 session UI 与 createSession / switchSession / archiveSession 等显式会话操作。
  • 点击优化即创建新 normalized session / optimization chain 的运行时改造。
  • 多测试结果批量保存为多个 example。
  • 独立的正文版本管理 UI例如版本差异、冲突提示、手动切换或合并。
  • 收藏详情来源分区、Garden 来源展示层级和完整会话消息可视化编辑体验。
  • 模式不匹配时的明确用户提示,以及部分 E2E / 回归覆盖。

1. 任务背景

本任务基于《01-提示词数据格式标准化设计》展开。后续工作不再只围绕“收藏提示词”打补丁,而是建立一个可复用的 Prompt Asset提示词资产模型让工作区、收藏、测试结果、Prompt Garden 导入、导入导出、资产清理等路径共享同一套领域对象。

当前工程里,FavoritePrompt 仍然是已经落地的持久化容器和服务接口。新模型的第一阶段目标不是直接替换收藏服务,而是在收藏数据之上建立稳定的规范化视图与新写入结构:

  • 读取侧把旧收藏、当前可复现元数据、Garden 元数据统一转换成 PromptAsset
  • 写入侧:新能力优先写入 metadata.promptAsset,同时保留旧字段作为兼容展示和回滚路径。
  • 展示侧:收藏详情、示例编辑、应用到工作区等逻辑逐步只消费 PromptAsset 或由 PromptAsset 派生出的展示视图。

Prompt Garden 目前尚未作为用户可见能力公开,因此 Garden 兼容路径可以调整。更重要的是让项目自己的提示词模型足够通用、可演化,并且不把外部来源快照当成内部主模型。


2. 总体目标

建立统一的提示词资产产品行为:

  1. 工作区可以保存提示词资产正文。
  2. 测试结果可以保存为一个或多个真实示例。
  3. 提示词资产正文有独立版本链。
  4. 示例挂在提示词资产 / 收藏下,但不进入正文版本链,也不要求和当前正文版本严格绑定。
  5. basic / pro / image 三类模式使用同一套 PromptContract 识别能力边界。
  6. 旧收藏、当前 workspace 可复现元数据、Garden 导入、新 metadata.promptAsset 并行兼容。

3. 当前边界

3.1 已有代码行为

早期方案曾让工作区普通收藏自动生成类似 workspace-current 的可复现示例。当前实现已经收敛为新的合同:普通工作区保存只保存提示词正文和变量定义,不自动写入 example。只有用户在测试结果卡片里点击“保存为示例”时才把真实 PromptTestRun 转换为 PromptExample / reproducibility example。

  • workspace-current 可以继续被读取和展示。
  • 新模型不应把工作区临时变量值、临时输入图、测试输入输出默认当成提示词资产正文的一部分。
  • 新写入通过 metadata.reproducibility 表达用户可编辑的变量/示例草稿,由 FavoriteManager / metadata helper 刷新 metadata.promptAssetUI 表单不直接手写 promptAsset

当前会话和历史链也已经有部分实现:

  • session/v1/basic-systemsession/v1/pro-variablesession/v1/pro-multisession/v1/image-* 保存工作区运行态。
  • session store 中的 chainId/versionId 指向当前优化历史链。
  • core PromptRecordChain 保存一条优化链,链内 versionsPromptRecord[]
  • pro/conversation 通过 messageChainMap 保存消息到优化链的映射。
  • 多列测试通过 testVariantstestVariantResultstestVariantLastRunFingerprint 保存当前测试运行态。
  • 各子模式 session store 已增加内部 assetBinding / origin,从收藏或 PromptAsset 加载工作区后可以记录来源资产和版本。
  • useSessionManager.getPromptSession() / hydrated session 已能把当前 session、优化链、测试 run、asset binding、origin 投影到标准模型。

因此目标态可以继续使用“会话”概念,但要把它定义为 Prompt Asset 的运行态容器,而不是和收藏资产、历史链、测试示例混为一体。

同时,当前实现还没有用户可见的“新建会话 / 切换会话 / 关闭会话”产品概念。useSessionManager 现在主要按 SubModeKey 保存和恢复固定快照,这更像“每个模式一个自动草稿”。后续如果要让用户显式管理多个会话,还需要引入 session registry 的产品交互在此之前session 作为无感来源坐标即可。

目标模型应把 PromptRecordChain 视为兼容来源,而不是最终主模型。最终主模型是 PromptOptimizationChain:一个 session 有且只有一条主优化链,链有 rootrecords 可以为空。这样“只有原始提示词、还没有优化结果,但可以直接测试”就是合法状态。

3.2 不变约束

  • 暂不破坏 FavoritePrompt 持久化接口。
  • 暂不要求旧数据一次性迁移。
  • 不把 Garden 原始快照改写为项目内部模型。
  • 不在 metadata 中长期内联大体积 base64 图片。
  • 变量定义属于资产;变量值属于执行运行态或示例。

4. 产品行为定义

4.1 工作区保存提示词资产

工作区保存的语义是:把当前工作区正文沉淀为提示词资产正文

工作区点击收藏/保存
→ 新建提示词资产或更新已有提示词资产
→ 新建:正文 = 当前工作区正文
→ 更新:若正文变化,创建新的 content version
→ 可选:提取变量定义
→ 不默认生成真实测试 example

规则:

  • 保存正文模板本身。
  • 可以保存变量定义,但不把当前变量值写成变量默认值。
  • 不读取 testContenttestVariantResults、reasoning、模型输出等执行运行态。
  • 当前 workspace-current 示例在兼容层保留,但不作为目标态新增合同。

4.2 测试结果保存为示例

测试结果保存的语义是:把某次真实执行运行态沉淀为 PromptExample,并挂到某个提示词资产上

测试结果区域点击收藏/保存
→ 选择一个或多个测试结果
→ 新建提示词资产或追加到已有提示词资产
→ 新建:正文默认取该测试结果实际使用的提示词正文
→ 更新:默认只追加 example
→ 如需创建或切换正文版本,走独立的显式版本管理动作

规则:

  • 新建资产时,可以同时创建正文版本和第一个示例。
  • 更新资产时,默认只追加示例,不静默更新正文。
  • 示例保存目标是资产 / 收藏;来源 revision 可以作为追溯信息进入 basedOnVersionId 或 metadata但不能要求 workspace 正文与目标资产当前版本正文一致。
  • 目标态支持多个测试结果一次保存为多个示例;当前实现已支持单个结果保存,批量选择仍是后续范围。

4.3 外部来源导入

外部来源导入的语义是:把外部提示词转换为项目自己的提示词资产,同时保留来源快照用于追溯

规则:

  • Garden、文件导入、未来远程仓库导入都应落到 ExternalSourceSnapshot
  • 外部快照只作为来源证据,不作为内部读写主模型。
  • 解析出的内部资产写入 PromptAsset / metadata.promptAsset
  • 再次编辑、保存、追加示例时,只更新内部资产结构,不反写外部原始快照。

5. 分阶段任务

阶段 A建立通用模型与 normalize 层

A0. 已落地的 Core 基础层

  • 新增 packages/core/src/services/prompt-model
  • @prompt-optimizer/core 导出 prompt-model 公共 API
  • 新增 PromptModeKeyPromptContractPromptContentPromptAssetPromptSessionPromptOptimizationChainPromptTestRunSet
  • 新增 resolvePromptModeKey(),支持 legacy context 和当前 pro-multi 到标准模式的映射
  • 新增 promptModeKeyToFavoriteMode(),保留 FavoritePrompt 当前兼容分类
  • 新增 promptAssetFromFavorite(),提供 FavoritePrompt -> PromptAsset 只读投影
  • 新增 promptRecordChainToOptimizationChain(),提供 PromptRecordChain -> PromptOptimizationChain 兼容投影
  • 新增 createRootOnlyPromptOptimizationChain(),支持未优化原始提示词直接测试
  • 新增 core 单测覆盖模式映射、收藏投影、Garden snapshot 不反写、历史链投影和 root-only chain

A1. 新增类型定义

  • 新增 PromptAsset
  • 新增 PromptContentVersion
  • 新增 PromptContract
  • 新增 PromptExample
  • 新增 PromptTestRun / PromptTestRunSet
  • 新增 PromptImageRef
  • 新增 PromptSourceRef

这些类型已经下沉到 packages/core/src/services/prompt-model。UI 后续不再新建平行领域类型,应该从 @prompt-optimizer/core 引入或在 UI 侧仅做展示视图派生。

A2. 建立 FavoritePrompt -> PromptAsset 适配器

  • 读取 metadata.promptAsset.schemaVersion === 'prompt-model/v1'
  • 读取当前可复现 metadata
  • 读取 Garden / 外部来源快照中的变量和示例
  • 读取 legacy variables / examples
  • FavoritePrompt.content 合成最小资产视图
  • UI 变量/示例读取入口优先消费 metadata.promptAsset / reproducibility 派生视图,并保留旧结构降级展示
  • 收藏详情、编辑器初始化、示例展示、应用到工作区优先使用标准投影
  • pro-conversation messages 应用到工作区时恢复为现有 pro-multi 消息卡片
  • 收藏详情来源分区和完整会话消息编辑体验继续增强

读取优先级建议:

  1. metadata.promptAsset
  2. 当前可复现结构
  3. Garden / external source 解析结果
  4. legacy metadata
  5. FavoritePrompt 基础字段

A3. 补充模型兼容测试

  • basic-system / basic-user 解析测试
  • pro-variable / pro-conversation 解析测试
  • image-text2image / image-image2image / image-multiimage 解析测试
  • Garden 来源不会被内部写入覆盖的测试
  • 旧收藏最小降级视图测试

阶段 A+:会话、历史链、测试链建模

A+1. 建立显式 session registry

  • 新增 core PromptSessionRegistry / PromptSessionSummary 类型
  • 新增 createPromptSessionRegistry() 纯函数,记录 activeSessionId
  • 记录 activeSessionIdByMode
  • 记录 session summary 列表
  • 把现有 session/v1/{modeKey} 映射成 implicit session 的标准视图
  • 为 implicit session 合成稳定 ID例如 implicit:basic-system
  • 第一阶段明确不暴露完整多会话 UI当前只把 session 作为无感来源坐标和 normalized view

A+2. 建立 PromptSession normalized view

  • 新增 promptSessionFromLegacySnapshot(),可从现有 session/v1/* 快照合成 PromptSession
  • 为 session 增加稳定 sessionId
  • 增加 lifecycle: implicit/active/background/closed/archived
  • 增加 origin: blank/workspace/asset/favorite/history/garden/import/external
  • 支持 assetBinding:未保存时为空,保存/收藏后可绑定 assetId
  • 建立 optimization: PromptOptimizationChain
  • chainId/versionId 适配进 optimization.metadata 和 session metadata
  • 把 pro/conversation 的 messageChainMap 作为旧消息级链兼容来源
  • 把 UI 布局、模型选择、模板选择保留在 session.ui
  • UI session manager 增加只读 normalized view 查询入口,不改变保存/恢复/切换行为
  • UI 工作区或调试面板消费 normalized view

A+3. 建立 session 与资产的关系

  • 新建工作区时创建运行态 draft asset
  • 从收藏/资产打开时给当前隐式 session 写入 assetBinding / origin
  • 保证当前隐式 session 同一时间最多绑定一个 asset/version
  • 保存/收藏时通过 FavoriteManager 将当前收藏刷新为 metadata.promptAsset
  • 保存后 session 继续存在,并通过 assetBinding.assetId 指向持久化资产
  • 显式 session registry 场景下创建或恢复绑定 asset 的 session
  • 当前隐式 session 场景下,切换模式仍由 session manager 负责保存/恢复运行态

A+4. 设计新建/切换/关闭会话操作

  • createSession({ mode, subMode, origin })
  • switchSession(sessionId)
  • openAssetSession(assetId)
  • openHistorySession(chainId, recordId?)
  • forkSession(sessionId)
  • archiveSession(sessionId)
  • discardDraftSession(sessionId)
  • startOptimizationSession(rootContent)
  • appendIteration(sessionId, iterationInput)
  • 新建会话时不覆盖旧 session
  • 切换会话前先保存当前 session
  • 关闭 session 不删除已保存资产

A+5. 建立 root-only 优化链模型

  • 新增 PromptOptimizationChain
  • 新增 PromptRootSnapshot
  • 新增 PromptOptimizationRecord
  • records 允许为空
  • 一条 normalized session 有且只有一条主 PromptOptimizationChain
  • 点击“优化”创建新的 session 和新的 optimization chain
  • 优化成功后写入第一条 optimize record
  • 点击“迭代/继续优化”追加 iterate record
  • 从现有 PromptRecordChain 适配到 PromptOptimizationChain
  • 只有用户明确保存 / 更新资产正文时才生成或追加 PromptContentVersion
  • 不把旧 PromptRecordChain.versions 自动迁移为资产 contentVersions

A+6. 建立测试链模型

  • 新增 promptTestRunSetsFromLegacySessionSnapshot(),从 testVariants / testVariantResults 合成 PromptTestRunSet
  • 每个有结果的测试列生成一个 PromptTestRun
  • PromptTestRun.revision 记录 session、optimization chain、revision
  • 支持 revision.kind = root,用于原始提示词直接测试
  • 支持 revision.kind = record,用于某次优化/迭代结果测试
  • 支持 revision.kind = workspace,用于当前未保存编辑器内容测试
  • 测试链保留在 normalized session 中
  • 用户收藏测试结果时再转换成资产 PromptExample
  • workspace 测试保持 revision.kind = workspaceasset/favorite 来源放入 metadata不伪装成 asset-version

阶段 B新写入结构落地

B1. 新建收藏写入 metadata.promptAsset

  • 工作区新建收藏时写入 metadata.promptAsset
  • 编辑收藏时刷新 metadata.promptAsset
  • 保留 FavoritePrompt.content 作为旧服务和旧 UI 的正文 fallback
  • 保留当前可复现结构作为过渡兼容字段
  • 不写回 Garden 原始快照

B2. 编辑保存时区分正文与元数据

  • 只改标题、标签、分类时不创建正文版本
  • 正文变化时创建新的 PromptContentVersion
  • 示例变化时只更新 examples
  • 来源信息变化时只更新 source

B3. 媒体引用改为资产引用

  • 运行态图片转为 PromptImageRef.kind = 'asset'
  • UI 展示通过 asset store 解析图片
  • 导入导出保留可恢复的媒体引用
  • 资产清理识别新旧结构中的图片引用

阶段 C工作区保存语义收敛

C1. 收窄工作区保存行为

  • 工作区保存只负责提示词正文与变量定义
  • 变量值不写成资产变量默认值
  • 输入图片不默认写成示例输入
  • 不默认生成 workspace-current 新示例

C2. 保留过渡兼容

  • workspace-current 可以继续读取
  • 旧收藏详情仍能展示 workspace 示例
  • 应用旧示例到工作区仍可用
  • 新 UI 优先显示 PromptAsset / reproducibility 投影中的正文、变量和示例

阶段 D测试结果保存为示例

D1. 测试结果入口

  • 文本测试结果卡片增加收藏/保存入口
  • 图像测试结果卡片增加收藏/保存入口
  • 支持单个结果保存
  • 支持多结果批量保存为多个 example

D2. 从执行运行态生成 PromptTestRun

  • 记录实际使用的 prompt body
  • 记录实际变量值
  • 记录输入文本、输入图片、会话消息
  • 记录输出文本或输出图片
  • 记录 provider / model / parameters
  • 记录运行时间与错误状态
  • 记录来源 sessionId、historyChainId、historyRecordId
  • 记录 assetBinding / origin 等来源坐标

D3. 从 PromptTestRun 生成 PromptExample

模式 子模式 示例输入 示例输出
basic system input.text output.text
basic user parameters? output.text
pro variable parameters output.text
pro conversation messages + parameters? output.text
image text2image parameters? output.images
image image2image input.images + parameters? output.images
image multiimage input.images[] + parameters? output.images

说明:

  • parameters 是示例运行输入,不等于资产变量定义。
  • messages 只属于 pro-conversation 或未来对话类能力。
  • 图片统一通过 PromptImageRef 引用,不直接塞入模型主体。
  • 当前已落地 promptExampleFromTestRun():成功且有输出的 run 可以生成 example失败或无输出返回 null
  • PromptExample.basedOnVersionId 优先表达实际测试 revisionrecord -> recordIdroot -> root idasset-version -> versionIdworkspace draft -> ${session.id}:draft。这是追溯线索,不是示例追加到已有收藏前的正文匹配条件。
  • 如果 workspace draft 来自 asset/favoriteasset/version/favorite 来源保留在 source metadata 中,不把 workspace 测试伪装成不可变 asset-version 测试。

阶段 E更新已有资产时的示例追加策略

E1. 示例追加确认

  • 如果测试结果来自已绑定的 favorite / asset打开保存目标弹窗并默认选中该收藏用户确认后追加 example
  • 如果测试结果来自未保存 session draft以 draft-derived example 进入保存弹窗,不伪装成当前资产版本
  • 不使用 workspace 正文与目标资产当前正文的严格比较来决定是否允许追加 example
  • 追加 example 时保留 favorite 正文、function mode 和正文版本链

E2. 用户选择策略

  • 默认:只追加 example不更新正文
  • 可选:通过显式保存 / 更新正文动作创建新 content version这和示例追加是独立动作
  • 可选:另存为新资产
  • 禁止静默替换目标资产正文

阶段 FUI 消费模型迁移

F1. 收藏详情页

  • 收藏详情页优先消费 PromptAsset / reproducibility 派生展示视图
  • 基础信息、正文、变量、示例展示使用标准投影
  • Garden 来源不被普通保存链路覆盖
  • 来源分区继续收敛为“内部资产 + 外部来源摘要”的展示结构
  • 不重复展示同一份 Garden 详情的视觉层级继续优化

F2. 示例编辑器

  • 示例编辑器基于 PromptExample / FavoriteReproducibilityExample 兼容投影
  • 文本、变量值、会话消息、输入图片、输出图片使用统一字段保留
  • 只在用户显式编辑示例时修改 example
  • 不通过编辑示例反向修改正文版本
  • 完整会话消息可视化编辑体验后续单独设计

F3. 应用到工作区

  • 应用资产正文到对应功能模式
  • 应用变量定义到变量编辑区域
  • 应用 example 时才填充变量值、输入图、会话消息
  • pro-conversation 当前映射到既有 pro-multi,并恢复 messages 到消息卡片
  • 模式不匹配时给出明确用户提示

阶段 G导入导出与清理

G1. 导出

  • 导出包含 metadata.promptAsset
  • 导出保留兼容字段
  • 导出包含必要媒体资产引用
  • 导出来源快照但不把来源快照当成唯一数据

G2. 导入

  • 优先读取 metadata.promptAsset
  • 无新结构时走 normalize 兼容路径
  • 导入 Garden 时生成内部资产结构和外部来源快照
  • 导入失败时保留可展示的 legacy fallback

G3. 媒体资产清理

  • GC 扫描 metadata.promptAsset
  • GC 扫描当前可复现结构
  • GC 扫描 Garden / legacy 结构
  • 未被引用的 asset 才允许清理

6. 模式支持矩阵

模式 子模式 工作区保存 测试结果保存 关键结构
basic system 支持 支持 system prompt + input/output text
basic user 支持 支持 user prompt + output text
pro variable 支持 支持 variables + rendered output
pro conversation 支持 支持 messages + variables + output
image text2image 支持 支持 prompt + output images
image image2image 支持 支持 prompt + input images + output images
image multiimage 支持 支持 prompt + multiple input images + output images

历史字段映射:

历史字段 目标概念
optimizationMode: system contract.family = basic, subMode = system
optimizationMode: user contract.family = basic, subMode = user
functionMode: context contract.family = pro
pro-multi 命名 contract.family = pro, subMode = conversation
imageSubMode contract.family = image, subMode = text2image/image2image/multiimage

7. 会话、资产、历史链关系

目标关系:

PromptSession
  ├─ assetBinding.assetId?        // 已保存资产;未保存为空
  ├─ draft                        // 当前工作区资产草稿
  ├─ optimization                 // 一条主优化链,可 root-only
  └─ testRuns[]                   // 当前测试链

PromptAsset
  ├─ contentVersions[]            // 正式资产正文版本
  └─ examples[]                   // 从测试运行沉淀出来的示例

PromptOptimizationChain
  ├─ root                         // 原始提示词
  └─ records[]                    // 优化/迭代输出,可为空

产品语义:

  • 一个会话最多对应一个提示词资产;资产可以还没真正保存,此时只是 session draft。
  • 一个会话有且只有一条主优化链。
  • 一条优化链有 rootrecords 可以为空。
  • 只有 root、没有优化结果时仍然可以直接测试原始提示词。
  • 点击“优化”创建新的 session 和新的 optimization chain。
  • 点击“迭代/继续优化”追加到当前 session 的当前 optimization chain。
  • 一条优化链里面的 records 表达优化过程,不直接等于资产正文版本。
  • 保存资产正文时,从当前 session draft、optimization root 或当前 record 生成资产 content version。
  • 测试结果留在 session test run 中;收藏测试结果时转成 asset example。
  • 从资产继续编辑时,应进入绑定该 asset 的 session而不是直接修改 asset 本体。

会话操作语义:

操作 语义
新建会话 创建新的运行态 draft不覆盖当前会话
点击优化 创建新的会话和优化链root 为点击时的原始提示词
点击迭代 在当前会话的当前优化链追加 record
切换会话 保存当前会话,恢复目标会话,并切换到目标模式
打开资产 优先恢复绑定该资产的会话;没有则从资产创建会话
从历史继续 从历史链记录创建会话,保留来源 chain/record
保存资产 将 session draft 沉淀为资产或资产正文版本
关闭会话 归档/丢弃运行态,不删除已保存资产

兼容策略:

  • 当前 session/v1/{modeKey} 先作为 implicit session 使用。
  • useSessionManager.switchMode/switchSubMode 继续负责模式级自动保存恢复。
  • 新的 switchSession(sessionId) 在内部复用现有保存/恢复能力,但选择的是具体 session而不是固定 mode key。
  • 第一阶段可以不做多会话列表 UI只先建立 registry 和 normalize 规则。

8. 测试要求

单元测试

  • FavoritePrompt -> PromptAsset normalize 覆盖
  • session/v1/* -> PromptSession normalize 覆盖
  • implicit session ID 合成覆盖
  • session registry active session 更新覆盖
  • 新建会话不覆盖当前 session 覆盖
  • 切换会话保存/恢复顺序覆盖
  • 点击优化创建新 session / 新 chain 覆盖
  • 点击迭代追加当前 chain 覆盖
  • root-only chain 覆盖
  • 新旧 metadata 读取优先级覆盖
  • 正文版本新增与追加覆盖
  • 示例追加、编辑、删除的兼容投影覆盖
  • PromptTestRun -> PromptExample 转换覆盖
  • PromptOptimizationChain.root -> PromptContentVersion 显式保存转换覆盖
  • PromptOptimizationRecord -> PromptContentVersion 显式保存转换覆盖
  • PromptRecordChain -> PromptOptimizationChain 兼容转换覆盖
  • Garden 来源不被反写覆盖
  • 图片 PromptImageRef.kind = 'asset' 引用统计覆盖
  • 保存测试结果时的 asset binding / revision based-on fallback 覆盖
  • 收藏应用到工作区时的 PromptAsset draft、变量、图片、messages 覆盖
  • 保存目标面板 bound / unbound 默认模式和 create / update 切换覆盖

E2E 测试

  • 工作区新建资产:保存正文成功
  • 工作区更新资产:正文变化时版本增加
  • 新建空会话:旧工作区内容仍可切回
  • 切换会话:模式、正文、历史链、测试列恢复正确
  • 点击优化:创建新会话和新优化链
  • 点击迭代:当前会话链追加记录
  • 未优化原始提示词测试:生成 root revision test run
  • 从未保存 session draft 收藏:生成资产并绑定 session
  • 从已保存资产继续编辑:恢复绑定 session
  • 工作区保存不默认生成新 example
  • 测试结果新建资产:生成 example
  • 测试结果追加到已有资产example 数量增加
  • 多测试结果批量保存:多个 example 成功关联
  • 图像模式保存:输入图和输出图可恢复
  • 收藏示例应用流程覆盖变量、图片和 pro-conversation messages 恢复

回归要求

  • 旧收藏仍可展示
  • 旧收藏仍可应用到工作区
  • 当前 workspace 可复现信息仍可读取
  • 当前 session restore 不回退
  • 当前 history restore 不回退
  • Garden 导入预览不回退
  • 资产清理不会误删新旧图片引用

9. 推荐实施顺序

当前已经完成的基础顺序:

  1. 已落 PromptAsset 类型与 core normalize 适配器。
  2. 已让收藏变量/示例读取入口优先消费 metadata.promptAsset / reproducibility 派生视图。
  3. 已落 PromptSessionRegistryPromptSession normalized view 的 core 纯适配层,可把现有 session/history/test state 纳入模型。
  4. 已让现有 UI session manager 暴露 normalized view / hydrated session并透传 asset binding、origin、revision 坐标。
  5. 已让新建/编辑收藏通过 FavoriteManager 刷新 metadata.promptAsset,并保留旧可复现字段作为兼容。
  6. 已收敛工作区保存语义,停止新增 workspace-current 伪 example。
  7. 已实现测试结果保存为 example、追加到 linked favorite、刷新收藏列表、应用 example 到工作区。
  8. 已实现 PromptAsset 应用适配层,并支持 pro-conversation messages 恢复到现有 pro-multi 工作区。
  9. 已实现显式保存目标面板bound session 默认更新关联收藏unbound session 默认新建,用户可在 create / update 之间切换。
  10. 已明确并测试:测试结果示例保存不以正文一致性作为追加门禁,只追加示例时不修改正文版本链。
  11. 已实现 PromptAsset 媒体引用的导入、导出和 GC 扫描覆盖。

下一阶段建议顺序:

  1. 批量 example 管理:支持一次选择多个测试结果保存为多个 example并补齐对应交互和测试。
  2. 独立正文版本管理:补版本差异、冲突提示、手动切换 / 合并等 UI注意它和“保存测试结果为示例”仍是两个动作。
  3. 显式 session UI 放后:当前无感 session 已能承载来源坐标,只有当产品需要多草稿切换时再做新建/切换/关闭入口。
  4. pro-conversation 的完整消息编辑器和历史链可视化单独设计,不和资产应用适配层继续耦合。
  5. 收藏详情来源分区、Garden 来源展示层级、模式不匹配提示和剩余 E2E / 回归覆盖可拆成独立 Trellis 任务。

这样可以继续沿着“资产边界先稳住,显式 session 后置”的路径推进避免一次性重构收藏服务、Prompt Garden、工作区和测试结果四条链路。