Skip to content

注入服务 ​

Tessera 的设计原则(ADR-0001):组件自身零网络请求、零落盘。一切外部能力由宿主通过 props 注入,编辑器从 editor.storage.tesseraServices 读取。

UploadService(图片上传) ​

ts
interface UploadService {
  uploadImage(file: File | Blob): Promise<{ url: string; name?: string; mime?: string }>
  uploadFile?(file: File | Blob): Promise<{ url: string; name?: string; mime?: string }>
}

注入后,编辑器的粘贴、拖拽与斜杠 /图片 三个入口都会走 uploadImage,插入返回的 URL。不注入则无上传能力(图片入口隐藏)。

CommentStore + IdentityService(行内评论) ​

ts
interface CommentThread {
  id: string
  quote: string
  resolved: boolean
  createdAt: number
  entries: { id: string; authorId: string; authorName: string; text: string; ts: number }[]
}
interface CommentStore {
  list(): Promise<CommentThread[]>
  upsert(thread: CommentThread): Promise<void>
  remove(id: string): Promise<void>
}
interface IdentityService {
  getCurrentUser(): { id: string; name: string } | null
}

注入后:划词 💬 或 ⌘⌥M 发评论;面板按文档序列线程,支持解决 / 重开 / 删除与 ↑↓ 跳转。文档中的评论锚点是 comment mark(data-thread-id),与线程数据一同持久化。

设计动机 ​

不同宿主的模型供应商、密钥管理、审计与合规策略各不相同。组件绑死任何供给方都会毁掉通用性——因此 AI Runtime、上传、存储、身份全部走同一注入模式(见 ADR-0001)。