Files
Prompt-Envelope-Protocol/src/types/protocol.ts
T
carry 92ecb139ad refactor: 静态变量提到对话外 + System Prompt 模板展开可视化
- 新建 SessionBar:会话变量独立于消息气泡,显示在对话顶部
- 重写 SystemPromptView:解析 {{var}} 占位符并内联展示模板→变量映射
- 重构 MessageList:提取 static_var 到 varMap,过滤后传入气泡
- 更新 SegmentRenderer + MessageBubble:传递 varMap 到 SystemPromptView
- 更新所有 Demo:static_var 从 user 消息迁移到 system 消息,使用真实会话配置(current_date、language、knowledge_cutoff)
- 更新导出逻辑:system 消息中收集 static_var 并在模板中展开 {{var}}
- 更新测试:新增模板展开用例,18 tests pass
2026-06-07 14:44:29 +08:00

142 lines
3.6 KiB
TypeScript

// ============================================================
// Prompt Envelope Protocol — Type Definitions
// ============================================================
// --- 顶层信封 ---
export interface PromptEnvelope {
version: '1.0'
model?: string // 导出时使用的 model 名称,如 'gpt-4-turbo'
messages: Message[]
}
// --- 单条消息 ---
export interface Message {
id: string
role: 'system' | 'user' | 'assistant'
segments: Segment[]
timestamp: number
}
// --- Segment 联合类型 ---
export type Segment =
| TextSegment
| StaticVarSegment
| SystemPromptSegment
| MemorySegment
| SkillSegment
| ToolOverviewSegment
| ToolCallRequestSegment
| ToolCallResultSegment
| DocumentSegment
| LongTextSegment
| MediaSegment
// --- 各 Segment 类型 ---
export interface TextSegment {
kind: 'text'
content: string
}
/**
* 会话级静态变量 —— 在对话开始时注入到 System Prompt 模板中展开。
* 例如 {{current_date}} 在模板中展开为 "2026年6月7日"。
* 这些变量对用户可见,解释了模型"看到"的上下文配置。
*/
export interface StaticVarSegment {
kind: 'static_var'
name: string // 模板变量名,e.g. "current_date"
value: string // 展开后的值,e.g. "2026年6月7日"
description?: string // 简短说明该变量的用途
}
export interface SystemPromptSegment {
kind: 'system_prompt'
content: string
collapsed: boolean // default: true
}
export interface MemorySegment {
kind: 'memory'
description?: string // 简短解释 memory 的作用
items: MemoryItem[]
collapsed: boolean
}
export interface MemoryItem {
title: string
content: string
}
export interface SkillSegment {
kind: 'skills'
description?: string // 简短解释 skills 是什么
items: SkillItem[]
collapsed: boolean
}
/**
* Skill 遵循 Anthropic 渐进式披露机制:
*
* 第 1 层 — 名称 + 一句话描述(始终可见,在 skills 面板中)
* 第 2 层 — 详细描述 + 触发条件(点击展开单个 skill)
* 第 3 层 — 完整指令(再次点击展开 —— 触发时作为一条新消息追加到对话中)
*/
export interface SkillItem {
name: string
description: string // 第 1 层:一句话描述
detail?: string // 第 2 层:详细说明(功能、输入输出、适用场景)
triggers?: string[] // 第 2 层:触发条件(用户说哪些话会触发此 skill)
instructions?: string // 第 3 层:注入 LLM 上下文的完整 system prompt
}
export interface ToolOverviewSegment {
kind: 'tool_overview'
items: ToolItem[]
collapsed: boolean
}
export interface ToolItem {
name: string
description: string
parameters: string // 人类可读的参数摘要
schema?: Record<string, unknown> // JSON Schema — 导出时作为 tools[].function.parameters
}
export interface ToolCallRequestSegment {
kind: 'tool_call_request'
toolName: string
arguments: Record<string, unknown>
collapsed: boolean // default: false
}
export interface ToolCallResultSegment {
kind: 'tool_call_result'
toolName: string
result: string // 摘要文本
success: boolean
collapsed: boolean // default: true
}
export interface DocumentSegment {
kind: 'document'
fileName: string
mimeType: string
snippet: string // 前 200 字符预览
sizeBytes: number
}
export interface LongTextSegment {
kind: 'long_text'
content: string
charCount: number
collapsed: boolean // default: true
}
export interface MediaSegment {
kind: 'media'
mediaType: 'image' | 'audio' | 'video'
url: string
altText?: string
}