2.0.0 路线图
markstream-vue@2.0.0 是一个破坏性的大版本。本页是 2.0 范围的持续更新路线图:每个目标带任务清单,已完成项标注 commit/PR,同一份清单在 GitHub 的 2.0.0 milestone 下跟踪。
目标 1:移除 Monaco 与 stream-markdown,只保留 stream-diffs ✅
2.0 的核心破坏性变更:移除基于 Monaco 的代码块 API 与基于 Shiki 的 stream-markdown 渲染器。代码块只由 stream-diffs 渲染(未安装可选 peer 时回退为普通 <pre>)。
跟踪于 issue #615,并已通过 PR #619 合入 2.0.0 集成分支。
- [x] 在六个 adapter 中统一用
codeBlockOptions/CodeBlockOptions替换monacoOptions/codeBlockMonacoOptions,并移除 Monaco-only 公开类型 - [x] 删除
stream-markdown的MarkdownCodeBlockNode组件及其样式 - [x] 删除
codeRenderer、markdownCodeRenderer与NodeRendererCodeRenderer;自动使用stream-diffs,普通输出用renderCodeBlocksAsPre,自定义 renderer 用带作用域的组件覆盖 - [x] 使用与 renderer 无关的公开标识符(
CodeBlockTheme、CodeBlockThemePair、CodeBlockOptions、resolveLanguageId、preloadCodeBlockRuntime),不公开原始 runtime module - [x] vue2 / react / svelte / angular / octane 迁移到仅 stream-diffs
- [x] 更新测试与快照;全量测试通过(313 文件 / 2684 用例)
- [x] 清理 playground(依赖、vite 配置、sandbox 页面)
- [x] 更新文档(en + zh)、LLM 文档、包描述
目标 2:Parser 可靠性与可维护性 ✅
2.0 的中性 parser 工作与渲染器移除独立跟踪,主任务见 issue #625,内部 runtime 所有权与 reset 生命周期见 issue #633。
九个 parser 增量已按依赖顺序通过 PR #635、#636、#637、#638、#639、#640、#641、#642 与 #643 合入 2.0.0。这组改动先冻结正确性、API、内存分配与性能门禁,再拆分 parser 阶段并收紧流式生命周期的所有权。
Parser options 迁移
2.0 移除了此前从包根入口导出的 parser-only options 接口。应用代码应统一使用 ParseOptions 描述解析配置。原先未文档化的结构复用与计时采集字段现已正式命名为 reuseStableTopLevelNodes 与 parserMetrics;其余 cursor、fragment 与 stream-control 标志全部保持内部实现,不提供公开替代项。ParserRuntime 与 ParseContext 只是内部细节,不是 Session API。
目标 3:2.0.0 发布验证
在发布前跑通常规发布门禁。
- [x] 全量库构建(
pnpm build)与 DTS 生成 - [x]
pnpm test:api:strict(public API 快照、exports、子路径隔离) - [x] 各框架 smoke:react / octane / vue2-cjs / minimal / pack(可选 peer)
- [x] 收敛
check:peer-deps工作区根目录可选 peer - [x] 准备协调一致的
2.0.0-beta.1包版本、release notes 与 2.0 迁移指南;先发布 beta 完成验证,再将同一版本矩阵提升到稳定版
发布维护者交接
以下 registry 操作需要 npm maintainer 权限;beta 阶段步骤已完成,stable 发布的 dist-tag 切换由 node scripts/release-stable-family.mjs --publish 自动执行:
- [x] 已运行
npm dist-tag add markstream-vue@1.1.2-beta.3 legacy-next,保留 1.x 预发布渠道。 - [x] 已通过
release:family:preflight+publish:*:current发布协调 beta 家族(2.0.0-beta.1…2.0.0-beta.3),并对已发布包完成真实安装验证。 - [x] Stable 切换:
release-stable-family.mjs按依赖序推送的 tag 触发 Release (Stable) workflow,由其通过resolve-dist-tag把每个包之前的latest移到legacy(拒绝时会打印准确的npm dist-tag add命令)。
目标 4:运行时视觉验证
stream-diffs 交接已同时通过真实浏览器、单测与类型检查验证。
- [x] playground:代码块高度同步、diff 主题切换、inline/side-by-side 行为
- [x]
test:e2e:octane-playground在 stream-diffs 选择器下通过 - [x] svelte 在
.is-diff .code-block-body上的 diff 颜色映射
目标 5:遗留清理(低优先)
目标 1 中刻意未纳入的小型一致性清理。
- [x] 重命名 svelte / react / vue2 包内的 Monaco 命名内部变量(例如
resolvedMonacoOptions) - [x] 将手动 e2e 调试脚本更新为 stream-diffs 选择器与仓库相对路径
- [x] 移除 react / vue2 代码块主题类型中未使用的
langs字段 - [x] 记录不在 2.0 范围内的既有 typecheck 问题:Vue2 包直接运行
vue-tsc时会触达markstream-core的rootDir之外(TS6059),且HtmlPreviewFrame.vue使用了import.meta.env
相关
- GitHub milestone:
2.0.0 - 路线图 checklist:issue #618
- 迁移指南:从 1.x 迁移到 2.0
- 1.0 基线:1.0 Release Readiness