Class InlineRenderer

java.lang.Object
com.yapcli.render.inline.InlineRenderer
All Implemented Interfaces:
Renderer, AutoCloseable

public final class InlineRenderer extends Object implements Renderer
Inline 流式渲染器:默认形态。

不进 alternate screen,主屏直接输出;输入期状态区紧跟当前 prompt 渲染。 工具调用块、行内 diff、HITL 单字符提示、palette 等高级特性在 Day 3 / Day 4 落地, 现阶段对应方法委托给 PlainRenderer 兜底。

  • Constructor Details

    • InlineRenderer

      public InlineRenderer(org.jline.terminal.Terminal terminal)
  • Method Details

    • beginTurn

      public void beginTurn()
      Description copied from interface: Renderer
      开始一次用户任务输出。默认 no-op;inline renderer 用它重置本轮可重绘 transcript。
      Specified by:
      beginTurn in interface Renderer
    • start

      public void start()
      Description copied from interface: Renderer
      启动渲染器(例如设置滚动区域、启动 GUI 主循环)。Main 必须先调用一次。
      Specified by:
      start in interface Renderer
    • beforeInput

      public void beforeInput()
      Description copied from interface: Renderer
      进入用户输入前。inline renderer 用它刷新输入周边状态。
      Specified by:
      beforeInput in interface Renderer
    • afterInput

      public void afterInput()
      Description copied from interface: Renderer
      用户输入结束后。inline renderer 用它恢复输入周边状态。
      Specified by:
      afterInput in interface Renderer
    • inputPrompt

      public String inputPrompt()
      Description copied from interface: Renderer
      当前渲染器希望 LineReader 使用的左侧输入提示。
      Specified by:
      inputPrompt in interface Renderer
    • inputRightPrompt

      public String inputRightPrompt()
      Description copied from interface: Renderer
      当前渲染器希望 LineReader 使用的右侧提示;返回 null 表示不显示。
      Specified by:
      inputRightPrompt in interface Renderer
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Renderer
    • stream

      public PrintStream stream()
      Description copied from interface: Renderer
      流式输出的目标 PrintStream。

      Agent.StreamRenderer / PlanExecuteAgent.TaskStreamRenderer / SubAgent.SubAgentStreamRenderer 把流式 reasoning / content 写到这里。

      对 InlineRenderer / PlainRenderer 而言这就是 System.out; LanternaRenderer 返回一个把字节写入 CenterPane 的 PrintStream。

      Specified by:
      stream in interface Renderer
    • terminalColumns

      public int terminalColumns()
      Description copied from interface: Renderer
      当前输出区域可用列数。Markdown 表格等宽布局按这个值做收缩和换行。
      Specified by:
      terminalColumns in interface Renderer
    • supportsThinkingPanel

      public boolean supportsThinkingPanel()
      Description copied from interface: Renderer
      当前渲染器是否支持独立的模型思考面板。
      Specified by:
      supportsThinkingPanel in interface Renderer
    • beginThinking

      public void beginThinking(String label)
      Description copied from interface: Renderer
      开始显示模型思考面板。plain renderer 保持 no-op,继续用正文流式输出。
      Specified by:
      beginThinking in interface Renderer
    • appendThinking

      public void appendThinking(String delta)
      Description copied from interface: Renderer
      追加模型 reasoning delta 到思考面板。
      Specified by:
      appendThinking in interface Renderer
    • endThinking

      public void endThinking()
      Description copied from interface: Renderer
      结束并清理模型思考面板。
      Specified by:
      endThinking in interface Renderer
    • supportsActivityPanel

      public boolean supportsActivityPanel()
      Description copied from interface: Renderer
      当前渲染器是否支持通用临时活动面板。
      Specified by:
      supportsActivityPanel in interface Renderer
    • beginActivity

      public void beginActivity(String label, String detail)
      Description copied from interface: Renderer
      开始显示通用临时活动面板,用于非 Agent 思考的阻塞操作。
      Specified by:
      beginActivity in interface Renderer
    • endActivity

      public void endActivity()
      Description copied from interface: Renderer
      结束并清理通用临时活动面板。
      Specified by:
      endActivity in interface Renderer
    • bindLineReader

      public void bindLineReader(org.jline.reader.LineReader lineReader)
      绑定当前交互循环使用的 JLine LineReader。

      绑定后,用户正在输入时的异步输出会优先通过 LineReader.printAbove(String) 显示在输入行上方;非读取态和 测试/降级路径继续使用构造时注入的 PrintStream

    • installStartupScreen

      public void installStartupScreen(List<String> lines)
      在 LineReader 第一次进入 readLine 时打印首屏。

      首屏不能在 readLine 之前用普通 stdout 打印:底部 Status 初始化后,LineReader 第一次重绘会重新接管输入区,提前打印的 banner 容易被滚动或覆盖。挂到 LineReader.CALLBACK_INIT 后,JLine 会把首屏、输入行和底部 dock 放在同一个 显示生命周期里处理。

    • clearAcceptedInput

      public void clearAcceptedInput(String input)
      清掉 JLine accept 后留在屏幕上的编辑态输入行。

      普通任务会随后以 > prompt 的 transcript 块写回;这里清理的是编辑态 * prompt,避免同一条输入在屏幕上出现两次。

    • printSubmittedPrompt

      public void printSubmittedPrompt(String input)
    • appendToolCalls

      public void appendToolCalls(List<LlmClient.ToolCall> toolCalls)
      Description copied from interface: Renderer
      渲染一组工具调用的标签和关键参数。

      InlineRenderer 把每条调用包装成可折叠块(Day 3); LanternaRenderer 写入 CenterPane.appendToolCall; PlainRenderer 直接 println 当前 Agent 内已有的标签格式。

      Specified by:
      appendToolCalls in interface Renderer
    • appendDiff

      public void appendDiff(String filePath, String before, String after)
      Description copied from interface: Renderer
      渲染一个文件 diff 块。
      Specified by:
      appendDiff in interface Renderer
      Parameters:
      filePath - 文件路径
      before - 修改前内容(null 表示新建)
      after - 修改后内容(null 表示删除)
    • updateStatus

      public void updateStatus(StatusInfo status)
      Description copied from interface: Renderer
      更新底部状态栏 / StatusPane。允许频繁调用,渲染器内部自行节流。
      Specified by:
      updateStatus in interface Renderer
    • promptApproval

      public ApprovalResult promptApproval(ApprovalRequest request)
      Description copied from interface: Renderer
      同步阻塞地展示 HITL 审批请求并收集决策。

      实现需要保证在 GUI 线程之外调用时不死锁;如果实现是 Lanterna, 内部用 CountDownLatch 把 GUI 线程结果回写主线程。

      Specified by:
      promptApproval in interface Renderer
    • openPalette

      public int openPalette(String title, List<String> items)
      Description copied from interface: Renderer
      显示一个临时浮起的选择列表,等待用户选定一项或取消。
      Specified by:
      openPalette in interface Renderer
      Returns:
      选中项的下标;用户取消(Esc)返回 -1
    • hasStatusBar

      public boolean hasStatusBar()
      测试可见:当前实例是否启动了 status bar。
    • terminal

      public org.jline.terminal.Terminal terminal()
      测试 / Main.java 可见:拿到 terminal 用于其它 inline 组件。
    • blockRegistry

      public BlockRegistry blockRegistry()
      Main.java 用:把 Ctrl+O 绑定到 toggleLast。
    • toggleLastBlock

      public boolean toggleLastBlock()
      Main.java 用:Ctrl+O 触发内存态切换,然后重绘本轮 transcript。