这个文件给 agent 读,不是给终端用户读的。
mogan-test 是一个面向运行中 moganstem -server 实例的可脚本化控制层。
它不是 Mogan 的替代品,而是通过 CLI 命令连接到一个已经启动的 server,
再通过测试运行时完成认证并驱动真实的编辑器进程。
主要入口:
./bin/mogan-cli运行时分层:
- Shell 路由:
bin/mogan-cli、bin/lib/mogan-cli/*.sh - Scheme 命令元数据:
src/cli/commands/*.scm - Client runtime:
src/cli/runtime/client.scm - Server runtime:
src/cli/runtime/mogan-server-runtime.scm
通常默认以下条件成立:
- Mogan 源码树位于
/home/mingshen/git/mogan - 已构建二进制位于
/home/mingshen/git/mogan/build/linux/x86_64/{debug,release}/moganstem gf已在PATH中可用- 已有一个带
mogan-server-runtime.scm的moganstem -server进程在运行
典型启动流程:
./bin/mogan-cli build-client
./bin/mogan-cli start-server
./bin/mogan-cli create-account
./bin/mogan-cli connect重复性工作优先使用 target:
./bin/mogan-cli target run smoke <command> ...statusworkflowpingcurrent-bufferbuffer-textstatebuffer-listtraces
如果需要机器可读验证,优先用 state。它能返回:
- 当前 buffer 路径
- 标题
- modified 状态
- 光标路径
- 选区状态
- 样式、语言、页面设置
- 序列化后的 buffer tree
new-documentwrite-textstream-textinsert-textinsert-returndelete-leftdelete-rightundoredoclear-undo-history
重要细节:
stream-text可以制造“正在输入”的观感,但单靠内嵌\n不保证生成你想要的可见块结构。- 如果你需要真实段落边界,请显式调用
insert-return。
select-allselect-startselect-endclear-selectioncopycutpaste
move-leftmove-rightmove-upmove-downmove-startmove-endmove-start-linemove-end-linemove-start-paragraphmove-end-paragraphmove-word-leftmove-word-rightmove-to-linemove-to-column
open-filesave-buffersave-asexport-bufferrevert-bufferclose-bufferswitch-buffer
search-statesearch-setsearch-nextsearch-prevsearch-firstsearch-lastreplace-setreplace-onereplace-all
set-main-styleset-document-languageadd-style-packageremove-style-packageset-page-mediumset-page-typeset-page-orientation
insert-inline-equationinsert-equationinsert-fractioninsert-sqrtinsert-supinsert-subinsert-suminsert-integralinsert-matrixinsert-tableinsert-boldinsert-italicinsert-codeinsert-link
insert-sectioninsert-subsectioninsert-subsubsectionexit-right
这几个命令插入的是真实 section 节点,不是“看起来像标题”的普通文本。
统一规则:
- 只有
section、subsection、subsubsection这类标题结构需要在插入后执行exit-right。 - 如果标题后需要正文段落,再执行
insert-return。 section、subsection、subsubsection的标题文本不要带显式编号,编号交给环境自动生成。
关键使用规则:
./bin/mogan-cli insert-section "标题"
./bin/mogan-cli exit-right
./bin/mogan-cli insert-return
./bin/mogan-cli insert-text "正文"如果省略 exit-right,后续编辑可能仍然停留在 section 标题结构内部,而不是落到你预期的正文位置。
insert-sessionsession-evaluatesession-evaluate-allsession-evaluate-abovesession-evaluate-belowsession-interruptsession-stop
insert-session 插入的是真实 session 节点,不是普通代码文本块。
最小用法:
./bin/mogan-cli new-document
./bin/mogan-cli insert-session scheme
./bin/mogan-cli insert-text "(+ 1 2)"
./bin/mogan-cli session-evaluate
./bin/mogan-cli state预期 tree 会出现类似结构:
(document
(session "scheme" "default"
(document
(unfolded-io "Scheme] " (document "(+ 1 2)") (document "3"))
(input "Scheme] " (document "")))))补充约定:
insert-session <language> [variant],例如insert-session python或insert-session scheme- 插入后光标通常会落在当前 session 的输入区,后续可直接
insert-text session-evaluate只执行当前输入session-evaluate-all、session-evaluate-above、session-evaluate-below对应批量执行不同范围- 如果执行中的 session 卡住,可用
session-interrupt或session-stop
new-document- 必要时先设置 style / language
- 先插结构:section、subsection、equation、matrix、table
- section 类插入后立刻
exit-right - 需要正文段落时,用
insert-return制造真实段落边界 - 用
state或buffer-text验证 tree 形状 - 如果需要交付物,再
export-buffer
可以用 stream-text --chunk-size N,但真实结构边界仍然应靠显式命令完成,而不是靠原始换行字符。
优先用:
target runbatchscenario
示例:
./bin/mogan-cli target run smoke state
./bin/mogan-cli batch smoke -- new-document -- insert-section "Intro" -- exit-right -- insert-return -- insert-text "Body"
./bin/mogan-cli scenario batch-smoke smoke- 这是对真实编辑器的 live 控制。很多命令只有在 server 真正运行并可连接时才有意义。
create-account、connect以及所有远程控制命令都依赖 server 侧 runtime 已被加载。state里的buffer_text是序列化树,不是渲染后的纯文本。- 如果你要验证“真实结构”,应看
buffer-text或state返回的 tree,而不是只看视觉渲染。 - 对于 section 标题,不要假设普通
insert-return就能自动跳出结构。应显式调用exit-right。 - 对于
insert-section、insert-subsection、insert-subsubsection,不要把1.、1.1、第一节之类编号写进标题文本。 - 不要把
<math|...>、<with|...>之类原始 TeXmacs 标记当纯文本写进去。应使用专门的结构化命令。
- 连接 trace:
/tmp/mogan-test-connect-trace.log - 服务端 trace:
/tmp/mogan-test-server-trace.log - runtime result:
/tmp/mogan-test-runtime-result.txt - runtime output:
/tmp/mogan-test-runtime-output.log
创建真实 section,且正文位于标题结构外部:
./bin/mogan-cli new-document
./bin/mogan-cli insert-section "Section A"
./bin/mogan-cli exit-right
./bin/mogan-cli insert-return
./bin/mogan-cli insert-text "Body outside section title."
./bin/mogan-cli buffer-text预期 tree 形状:
(document
(section "Section A")
"Body outside section title.")