29 KiB
通用提示词资产模型落地任务
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. 总体目标
建立统一的提示词资产产品行为:
- 工作区可以保存提示词资产正文。
- 测试结果可以保存为一个或多个真实示例。
- 提示词资产正文有独立版本链。
- 示例挂在提示词资产 / 收藏下,但不进入正文版本链,也不要求和当前正文版本严格绑定。
basic / pro / image三类模式使用同一套PromptContract识别能力边界。- 旧收藏、当前 workspace 可复现元数据、Garden 导入、新
metadata.promptAsset并行兼容。
3. 当前边界
3.1 已有代码行为
早期方案曾让工作区普通收藏自动生成类似 workspace-current 的可复现示例。当前实现已经收敛为新的合同:普通工作区保存只保存提示词正文和变量定义,不自动写入 example。只有用户在测试结果卡片里点击“保存为示例”时,才把真实 PromptTestRun 转换为 PromptExample / reproducibility example。
- 旧
workspace-current可以继续被读取和展示。 - 新模型不应把工作区临时变量值、临时输入图、测试输入输出默认当成提示词资产正文的一部分。
- 新写入通过
metadata.reproducibility表达用户可编辑的变量/示例草稿,由 FavoriteManager / metadata helper 刷新metadata.promptAsset,UI 表单不直接手写promptAsset。
当前会话和历史链也已经有部分实现:
session/v1/basic-system、session/v1/pro-variable、session/v1/pro-multi、session/v1/image-*保存工作区运行态。- session store 中的
chainId/versionId指向当前优化历史链。 - core
PromptRecordChain保存一条优化链,链内versions是PromptRecord[]。 - pro/conversation 通过
messageChainMap保存消息到优化链的映射。 - 多列测试通过
testVariants、testVariantResults、testVariantLastRunFingerprint保存当前测试运行态。 - 各子模式 session store 已增加内部
assetBinding/origin,从收藏或 PromptAsset 加载工作区后可以记录来源资产和版本。 useSessionManager.getPromptSession()/ hydrated session 已能把当前 session、优化链、测试 run、asset binding、origin 投影到标准模型。
因此目标态可以继续使用“会话”概念,但要把它定义为 Prompt Asset 的运行态容器,而不是和收藏资产、历史链、测试示例混为一体。
同时,当前实现还没有用户可见的“新建会话 / 切换会话 / 关闭会话”产品概念。useSessionManager 现在主要按 SubModeKey 保存和恢复固定快照,这更像“每个模式一个自动草稿”。后续如果要让用户显式管理多个会话,还需要引入 session registry 的产品交互;在此之前,session 作为无感来源坐标即可。
目标模型应把 PromptRecordChain 视为兼容来源,而不是最终主模型。最终主模型是 PromptOptimizationChain:一个 session 有且只有一条主优化链,链有 root,records 可以为空。这样“只有原始提示词、还没有优化结果,但可以直接测试”就是合法状态。
3.2 不变约束
- 暂不破坏
FavoritePrompt持久化接口。 - 暂不要求旧数据一次性迁移。
- 不把 Garden 原始快照改写为项目内部模型。
- 不在 metadata 中长期内联大体积 base64 图片。
- 变量定义属于资产;变量值属于执行运行态或示例。
4. 产品行为定义
4.1 工作区保存提示词资产
工作区保存的语义是:把当前工作区正文沉淀为提示词资产正文。
工作区点击收藏/保存
→ 新建提示词资产或更新已有提示词资产
→ 新建:正文 = 当前工作区正文
→ 更新:若正文变化,创建新的 content version
→ 可选:提取变量定义
→ 不默认生成真实测试 example
规则:
- 保存正文模板本身。
- 可以保存变量定义,但不把当前变量值写成变量默认值。
- 不读取
testContent、testVariantResults、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 - 新增
PromptModeKey、PromptContract、PromptContent、PromptAsset、PromptSession、PromptOptimizationChain、PromptTestRunSet - 新增
resolvePromptModeKey(),支持 legacycontext和当前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-conversationmessages 应用到工作区时恢复为现有pro-multi消息卡片- 收藏详情来源分区和完整会话消息编辑体验继续增强
读取优先级建议:
metadata.promptAsset- 当前可复现结构
- Garden / external source 解析结果
- legacy metadata
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
- 优化成功后写入第一条
optimizerecord - 点击“迭代/继续优化”追加
iteraterecord - 从现有
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 = workspace,asset/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优先表达实际测试 revision:record -> recordId,root -> root id,asset-version -> versionId,workspace draft ->${session.id}:draft。这是追溯线索,不是示例追加到已有收藏前的正文匹配条件。- 如果 workspace draft 来自 asset/favorite,asset/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;这和示例追加是独立动作
- 可选:另存为新资产
- 禁止静默替换目标资产正文
阶段 F:UI 消费模型迁移
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。
- 一个会话有且只有一条主优化链。
- 一条优化链有 root,records 可以为空。
- 只有 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 -> PromptAssetnormalize 覆盖session/v1/* -> PromptSessionnormalize 覆盖- 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-conversationmessages 恢复
回归要求
- 旧收藏仍可展示
- 旧收藏仍可应用到工作区
- 当前 workspace 可复现信息仍可读取
- 当前 session restore 不回退
- 当前 history restore 不回退
- Garden 导入预览不回退
- 资产清理不会误删新旧图片引用
9. 推荐实施顺序
当前已经完成的基础顺序:
- 已落
PromptAsset类型与 core normalize 适配器。 - 已让收藏变量/示例读取入口优先消费
metadata.promptAsset/ reproducibility 派生视图。 - 已落
PromptSessionRegistry和PromptSessionnormalized view 的 core 纯适配层,可把现有 session/history/test state 纳入模型。 - 已让现有 UI session manager 暴露 normalized view / hydrated session,并透传 asset binding、origin、revision 坐标。
- 已让新建/编辑收藏通过 FavoriteManager 刷新
metadata.promptAsset,并保留旧可复现字段作为兼容。 - 已收敛工作区保存语义,停止新增
workspace-current伪 example。 - 已实现测试结果保存为 example、追加到 linked favorite、刷新收藏列表、应用 example 到工作区。
- 已实现 PromptAsset 应用适配层,并支持
pro-conversationmessages 恢复到现有pro-multi工作区。 - 已实现显式保存目标面板:bound session 默认更新关联收藏,unbound session 默认新建,用户可在 create / update 之间切换。
- 已明确并测试:测试结果示例保存不以正文一致性作为追加门禁,只追加示例时不修改正文版本链。
- 已实现 PromptAsset 媒体引用的导入、导出和 GC 扫描覆盖。
下一阶段建议顺序:
- 批量 example 管理:支持一次选择多个测试结果保存为多个 example,并补齐对应交互和测试。
- 独立正文版本管理:补版本差异、冲突提示、手动切换 / 合并等 UI;注意它和“保存测试结果为示例”仍是两个动作。
- 显式 session UI 放后:当前无感 session 已能承载来源坐标,只有当产品需要多草稿切换时再做新建/切换/关闭入口。
pro-conversation的完整消息编辑器和历史链可视化单独设计,不和资产应用适配层继续耦合。- 收藏详情来源分区、Garden 来源展示层级、模式不匹配提示和剩余 E2E / 回归覆盖可拆成独立 Trellis 任务。
这样可以继续沿着“资产边界先稳住,显式 session 后置”的路径推进,避免一次性重构收藏服务、Prompt Garden、工作区和测试结果四条链路。