Skip to content

fix(markdown): flush pending input at end of stream - #1503

Draft
yiminzme wants to merge 1 commit into
AAswordman:devfrom
yiminzme:fix/markdown-eof-flush
Draft

yiminzme wants to merge 1 commit into
AAswordman:devfrom
yiminzme:fix/markdown-eof-flush

Conversation

@yiminzme

Copy link
Copy Markdown

变更说明 / Description

背景与动机 / Context and motivation

官方 1.12.2 中,纯数字答案可能已经进入消息内容,聊天页却只显示思考区域。最小输入为 42 或 `sample

42`,末尾没有换行。添加换行后可以正常输出。当前 dev 的相关实现也可复现。

原生 Markdown 解析器暂存行首数字,等待判断有序列表标记。上游流自然结束时,Kotlin 调用链没有释放这段待定内容,销毁 session 后尾部正文丢失。

改动范围 / Changes

  • 增加显式 finish,在 EOF 释放待定文本、结束活动分组,重复 finish 返回空结果。
  • 通过 JNI 和 Kotlin Session 接入静态 inline、Char 流与 String 流的自然结束路径。
  • 增量输出裁去已渲染的 initialContent 前缀,避免 EOF 时重放 seed。
  • 新增独立 C++ 回归程序和 6 项 Android instrumentation 入口测试。

兼容性与风险 / Compatibility and risks

保留现有 push、dispose 和上层流接口。自然结束时补齐尾部内容,取消或异常沿原有关闭路径处理。涉及 JNI 和流分组生命周期,需要 Android 构建及设备回归确认。

关联 Issue / Related issue

本 PR 自带最小复现,尚无对应 issue 编号。

验证方式 / Verification

Windows 宿主使用 MinGW g++ 6.3、C++14 和 JDK 21 JNI 头文件。

  • 原版诊断在裸数字及 think 后数字、整串与逐字输入下共出现 4 项失败。
  • 修正后 C++ 回归为 Checks=45 failures=0,覆盖 EOF、换行、未完成标记、整串/逐字、重复 finish、seed 和新后缀。
  • JNI 翻译单元宿主编译通过。
  • git diff --check 通过。
  • python -B ci/script/check_repo_hygiene.py --base <dev-base> --candidate HEAD 通过,7 个文件,0 errors / 0 warnings。

C++ 检查在仓库根目录编译以下源文件,包含 JDK 的 include、include/win32 以及 app/src/main/cpp/streamnative,编译参数为 -std=c++14 -Wall -Wextra,然后运行得到的程序。Linux 可按本机 JDK 使用 include/linux,Linux 环境尚未运行。

app/src/test/cpp/streamnative/MarkdownEofTest.cpp
app/src/main/cpp/streamnative/StreamOperators.cpp
app/src/main/cpp/streamnative/StringExtensions.cpp
app/src/main/cpp/streamnative/plugins/StreamMarkdownPlugin.cpp
app/src/main/cpp/streamnative/plugins/StreamXmlPlugin.cpp

Android instrumentation、Kotlin 编译和 APK 构建尚未运行,本地未配齐该项目 Android SDK/NDK 和外部构建依赖。以 Draft 提交,方便先审查根因与修改,并由项目 CI 核 Android 兼容性。

证据 / Evidence

官方版手机对照中,原数字答案重入会话后仍不可见,完整中文句子并以句号结尾的回复正常显示。独立宿主诊断可稳定复现相同 EOF 丢字路径。手机保持官方 APK,补丁的手机效果仍待验证。

检查清单 / Checklist

  • 已记录可复现验证和未运行项原因
  • 日常开发 PR 的目标分支为 dev
  • Candidate checks 最终结果待本次 PR 运行
  • 最终 diff 无无关、临时、生成、二进制或敏感内容
  • 已提供源码回归与官方版手机对照,Android 补丁回归待验

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant