@kenkaiiii/ggcoder 4.3.232 → 4.3.234
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -89
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +8 -16
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +14 -44
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/core/runtime-mode.d.ts +0 -11
- package/dist/core/runtime-mode.d.ts.map +1 -1
- package/dist/core/runtime-mode.js +0 -9
- package/dist/core/runtime-mode.js.map +1 -1
- package/dist/core/session-restore-display.test.js +4 -110
- package/dist/core/session-restore-display.test.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts +1 -2
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +11 -58
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +3 -158
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/bash.d.ts +1 -4
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +3 -12
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checkpoint-hook.test.js +3 -3
- package/dist/tools/checkpoint-hook.test.js.map +1 -1
- package/dist/tools/edit.d.ts +1 -4
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +5 -13
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/enter-plan.js +1 -1
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/index.d.ts +0 -9
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +0 -2
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/screenshot.d.ts +1 -1
- package/dist/tools/subagent.d.ts +1 -4
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +2 -5
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/write.d.ts +1 -4
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +5 -13
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.d.ts +5 -20
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +134 -309
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +23 -25
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +37 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/app-items.test.d.ts +2 -0
- package/dist/ui/app-items.test.d.ts.map +1 -0
- package/dist/ui/app-items.test.js +38 -0
- package/dist/ui/app-items.test.js.map +1 -0
- package/dist/ui/app-state-persistence.test.js +14 -318
- package/dist/ui/app-state-persistence.test.js.map +1 -1
- package/dist/ui/chat-layout-pinning.test.js +74 -4
- package/dist/ui/chat-layout-pinning.test.js.map +1 -1
- package/dist/ui/components/AssistantMessage.test.js +6 -9
- package/dist/ui/components/AssistantMessage.test.js.map +1 -1
- package/dist/ui/components/Banner.js +1 -1
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/ChatFooterPane.d.ts +1 -5
- package/dist/ui/components/ChatFooterPane.d.ts.map +1 -1
- package/dist/ui/components/ChatFooterPane.js +3 -4
- package/dist/ui/components/ChatFooterPane.js.map +1 -1
- package/dist/ui/components/ChatInputStack.d.ts +3 -1
- package/dist/ui/components/ChatInputStack.d.ts.map +1 -1
- package/dist/ui/components/ChatInputStack.js +4 -3
- package/dist/ui/components/ChatInputStack.js.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +3 -16
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.js +2 -3
- package/dist/ui/components/ChatScreen.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +3 -8
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +5 -25
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts +1 -9
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +2 -44
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/LiveToolPanel.d.ts +30 -0
- package/dist/ui/components/LiveToolPanel.d.ts.map +1 -0
- package/dist/ui/components/LiveToolPanel.js +66 -0
- package/dist/ui/components/LiveToolPanel.js.map +1 -0
- package/dist/ui/components/ToolExecution.js +0 -2
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +1 -1
- package/dist/ui/components/TranscriptViewport.js +1 -1
- package/dist/ui/footer-jump-regression.test.js +12 -2
- package/dist/ui/footer-jump-regression.test.js.map +1 -1
- package/dist/ui/footer-status-layout.test.js +4 -12
- package/dist/ui/footer-status-layout.test.js.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +3 -4
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.js +26 -4
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
- package/dist/ui/hooks/useModeState.d.ts +4 -19
- package/dist/ui/hooks/useModeState.d.ts.map +1 -1
- package/dist/ui/hooks/useModeState.js +5 -45
- package/dist/ui/hooks/useModeState.js.map +1 -1
- package/dist/ui/hooks/usePixelFixFlow.js +2 -2
- package/dist/ui/layout-decisions.d.ts +11 -34
- package/dist/ui/layout-decisions.d.ts.map +1 -1
- package/dist/ui/layout-decisions.js +15 -42
- package/dist/ui/layout-decisions.js.map +1 -1
- package/dist/ui/live-area-height.d.ts.map +1 -1
- package/dist/ui/live-area-height.js +6 -1
- package/dist/ui/live-area-height.js.map +1 -1
- package/dist/ui/live-frame-height.test.js +26 -1
- package/dist/ui/live-frame-height.test.js.map +1 -1
- package/dist/ui/plan-overlay.test.js +1 -1
- package/dist/ui/plan-overlay.test.js.map +1 -1
- package/dist/ui/prompt-routing.d.ts +1 -19
- package/dist/ui/prompt-routing.d.ts.map +1 -1
- package/dist/ui/prompt-routing.js +1 -79
- package/dist/ui/prompt-routing.js.map +1 -1
- package/dist/ui/render.d.ts +3 -18
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +0 -10
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/scroll-stabilization.test.js +1 -7
- package/dist/ui/scroll-stabilization.test.js.map +1 -1
- package/dist/ui/slash-command-images.test.js +11 -86
- package/dist/ui/slash-command-images.test.js.map +1 -1
- package/dist/ui/streaming-flush-bounce.test.d.ts +2 -0
- package/dist/ui/streaming-flush-bounce.test.d.ts.map +1 -0
- package/dist/ui/streaming-flush-bounce.test.js +156 -0
- package/dist/ui/streaming-flush-bounce.test.js.map +1 -0
- package/dist/ui/submit-prompt-command.d.ts +1 -16
- package/dist/ui/submit-prompt-command.d.ts.map +1 -1
- package/dist/ui/submit-prompt-command.js +4 -54
- package/dist/ui/submit-prompt-command.js.map +1 -1
- package/dist/ui/submit-slash-commands.d.ts +0 -1
- package/dist/ui/submit-slash-commands.d.ts.map +1 -1
- package/dist/ui/submit-slash-commands.js +0 -4
- package/dist/ui/submit-slash-commands.js.map +1 -1
- package/dist/ui/terminal-history-status-renderers.d.ts +0 -1
- package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
- package/dist/ui/terminal-history-status-renderers.js +0 -3
- package/dist/ui/terminal-history-status-renderers.js.map +1 -1
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +11 -56
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/terminal-history.test.js +6 -33
- package/dist/ui/terminal-history.test.js.map +1 -1
- package/dist/ui/tool-line-summary.d.ts +29 -0
- package/dist/ui/tool-line-summary.d.ts.map +1 -0
- package/dist/ui/tool-line-summary.js +153 -0
- package/dist/ui/tool-line-summary.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts +1 -1
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +18 -12
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/presentation.d.ts +1 -17
- package/dist/ui/transcript/presentation.d.ts.map +1 -1
- package/dist/ui/transcript/presentation.js +0 -26
- package/dist/ui/transcript/presentation.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +2 -2
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +14 -9
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +5 -8
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/transcript/tool-presentation.js +1 -1
- package/dist/ui/transcript/tool-presentation.js.map +1 -1
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -1
- package/dist/ui/transcript/transcript-lines.js +4 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -1
- package/dist/ui/tui-history-parity.test.js +0 -47
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.js +2 -1
- package/dist/ui/tui-simulation.test.js.map +1 -1
- package/package.json +3 -3
- package/dist/core/goal-controller.d.ts +0 -82
- package/dist/core/goal-controller.d.ts.map +0 -1
- package/dist/core/goal-controller.js +0 -838
- package/dist/core/goal-controller.js.map +0 -1
- package/dist/core/goal-controller.test.d.ts +0 -2
- package/dist/core/goal-controller.test.d.ts.map +0 -1
- package/dist/core/goal-controller.test.js +0 -1279
- package/dist/core/goal-controller.test.js.map +0 -1
- package/dist/core/goal-engine.d.ts +0 -61
- package/dist/core/goal-engine.d.ts.map +0 -1
- package/dist/core/goal-engine.js +0 -123
- package/dist/core/goal-engine.js.map +0 -1
- package/dist/core/goal-engine.test.d.ts +0 -2
- package/dist/core/goal-engine.test.d.ts.map +0 -1
- package/dist/core/goal-engine.test.js +0 -295
- package/dist/core/goal-engine.test.js.map +0 -1
- package/dist/core/goal-integration.d.ts +0 -80
- package/dist/core/goal-integration.d.ts.map +0 -1
- package/dist/core/goal-integration.js +0 -296
- package/dist/core/goal-integration.js.map +0 -1
- package/dist/core/goal-integration.test.d.ts +0 -2
- package/dist/core/goal-integration.test.d.ts.map +0 -1
- package/dist/core/goal-integration.test.js +0 -369
- package/dist/core/goal-integration.test.js.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
- package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.js +0 -248
- package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
- package/dist/core/goal-overhead-harness.d.ts +0 -33
- package/dist/core/goal-overhead-harness.d.ts.map +0 -1
- package/dist/core/goal-overhead-harness.js +0 -268
- package/dist/core/goal-overhead-harness.js.map +0 -1
- package/dist/core/goal-prerequisites.d.ts +0 -23
- package/dist/core/goal-prerequisites.d.ts.map +0 -1
- package/dist/core/goal-prerequisites.js +0 -114
- package/dist/core/goal-prerequisites.js.map +0 -1
- package/dist/core/goal-prerequisites.test.d.ts +0 -2
- package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
- package/dist/core/goal-prerequisites.test.js +0 -154
- package/dist/core/goal-prerequisites.test.js.map +0 -1
- package/dist/core/goal-references.d.ts +0 -14
- package/dist/core/goal-references.d.ts.map +0 -1
- package/dist/core/goal-references.js +0 -153
- package/dist/core/goal-references.js.map +0 -1
- package/dist/core/goal-references.test.d.ts +0 -2
- package/dist/core/goal-references.test.d.ts.map +0 -1
- package/dist/core/goal-references.test.js +0 -77
- package/dist/core/goal-references.test.js.map +0 -1
- package/dist/core/goal-store.d.ts +0 -289
- package/dist/core/goal-store.d.ts.map +0 -1
- package/dist/core/goal-store.js +0 -1156
- package/dist/core/goal-store.js.map +0 -1
- package/dist/core/goal-store.test.d.ts +0 -2
- package/dist/core/goal-store.test.d.ts.map +0 -1
- package/dist/core/goal-store.test.js +0 -530
- package/dist/core/goal-store.test.js.map +0 -1
- package/dist/core/goal-verifier.d.ts +0 -17
- package/dist/core/goal-verifier.d.ts.map +0 -1
- package/dist/core/goal-verifier.js +0 -87
- package/dist/core/goal-verifier.js.map +0 -1
- package/dist/core/goal-verifier.test.d.ts +0 -2
- package/dist/core/goal-verifier.test.d.ts.map +0 -1
- package/dist/core/goal-verifier.test.js +0 -131
- package/dist/core/goal-verifier.test.js.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
- package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
- package/dist/core/goal-worker.d.ts +0 -61
- package/dist/core/goal-worker.d.ts.map +0 -1
- package/dist/core/goal-worker.js +0 -467
- package/dist/core/goal-worker.js.map +0 -1
- package/dist/core/goal-worker.test.d.ts +0 -2
- package/dist/core/goal-worker.test.d.ts.map +0 -1
- package/dist/core/goal-worker.test.js +0 -493
- package/dist/core/goal-worker.test.js.map +0 -1
- package/dist/core/goal-worktree.d.ts +0 -108
- package/dist/core/goal-worktree.d.ts.map +0 -1
- package/dist/core/goal-worktree.js +0 -300
- package/dist/core/goal-worktree.js.map +0 -1
- package/dist/core/goal-worktree.test.d.ts +0 -2
- package/dist/core/goal-worktree.test.d.ts.map +0 -1
- package/dist/core/goal-worktree.test.js +0 -448
- package/dist/core/goal-worktree.test.js.map +0 -1
- package/dist/tools/goal-mode.test.d.ts +0 -2
- package/dist/tools/goal-mode.test.d.ts.map +0 -1
- package/dist/tools/goal-mode.test.js +0 -121
- package/dist/tools/goal-mode.test.js.map +0 -1
- package/dist/tools/goals.d.ts +0 -143
- package/dist/tools/goals.d.ts.map +0 -1
- package/dist/tools/goals.js +0 -1038
- package/dist/tools/goals.js.map +0 -1
- package/dist/tools/goals.test.d.ts +0 -2
- package/dist/tools/goals.test.d.ts.map +0 -1
- package/dist/tools/goals.test.js +0 -1444
- package/dist/tools/goals.test.js.map +0 -1
- package/dist/ui/components/GoalOverlay.d.ts +0 -83
- package/dist/ui/components/GoalOverlay.d.ts.map +0 -1
- package/dist/ui/components/GoalOverlay.js +0 -710
- package/dist/ui/components/GoalOverlay.js.map +0 -1
- package/dist/ui/components/GoalPickerMenu.d.ts +0 -9
- package/dist/ui/components/GoalPickerMenu.d.ts.map +0 -1
- package/dist/ui/components/GoalPickerMenu.js +0 -37
- package/dist/ui/components/GoalPickerMenu.js.map +0 -1
- package/dist/ui/components/GoalStatusBar.d.ts +0 -26
- package/dist/ui/components/GoalStatusBar.d.ts.map +0 -1
- package/dist/ui/components/GoalStatusBar.js +0 -130
- package/dist/ui/components/GoalStatusBar.js.map +0 -1
- package/dist/ui/components/GoalStatusBar.test.d.ts +0 -2
- package/dist/ui/components/GoalStatusBar.test.d.ts.map +0 -1
- package/dist/ui/components/GoalStatusBar.test.js +0 -17
- package/dist/ui/components/GoalStatusBar.test.js.map +0 -1
- package/dist/ui/goal-events.d.ts +0 -125
- package/dist/ui/goal-events.d.ts.map +0 -1
- package/dist/ui/goal-events.js +0 -407
- package/dist/ui/goal-events.js.map +0 -1
- package/dist/ui/goal-events.test.d.ts +0 -2
- package/dist/ui/goal-events.test.d.ts.map +0 -1
- package/dist/ui/goal-events.test.js +0 -416
- package/dist/ui/goal-events.test.js.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +0 -555
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
- package/dist/ui/goal-overlay.test.d.ts +0 -2
- package/dist/ui/goal-overlay.test.d.ts.map +0 -1
- package/dist/ui/goal-overlay.test.js +0 -384
- package/dist/ui/goal-overlay.test.js.map +0 -1
- package/dist/ui/goal-progress.d.ts +0 -31
- package/dist/ui/goal-progress.d.ts.map +0 -1
- package/dist/ui/goal-progress.js +0 -149
- package/dist/ui/goal-progress.js.map +0 -1
- package/dist/ui/goal-run-helpers.d.ts +0 -12
- package/dist/ui/goal-run-helpers.d.ts.map +0 -1
- package/dist/ui/goal-run-helpers.js +0 -42
- package/dist/ui/goal-run-helpers.js.map +0 -1
- package/dist/ui/goal-status-bar.test.d.ts +0 -2
- package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
- package/dist/ui/goal-status-bar.test.js +0 -174
- package/dist/ui/goal-status-bar.test.js.map +0 -1
- package/dist/ui/goal-summary.d.ts +0 -14
- package/dist/ui/goal-summary.d.ts.map +0 -1
- package/dist/ui/goal-summary.js +0 -194
- package/dist/ui/goal-summary.js.map +0 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts +0 -82
- package/dist/ui/hooks/useGoalOrchestration.d.ts.map +0 -1
- package/dist/ui/hooks/useGoalOrchestration.js +0 -863
- package/dist/ui/hooks/useGoalOrchestration.js.map +0 -1
- package/dist/ui/hooks/useGoalPickerController.d.ts +0 -22
- package/dist/ui/hooks/useGoalPickerController.d.ts.map +0 -1
- package/dist/ui/hooks/useGoalPickerController.js +0 -35
- package/dist/ui/hooks/useGoalPickerController.js.map +0 -1
- package/dist/ui/prompt-routing.test.d.ts +0 -2
- package/dist/ui/prompt-routing.test.d.ts.map +0 -1
- package/dist/ui/prompt-routing.test.js +0 -48
- package/dist/ui/prompt-routing.test.js.map +0 -1
- package/dist/ui/transcript/GoalRows.d.ts +0 -10
- package/dist/ui/transcript/GoalRows.d.ts.map +0 -1
- package/dist/ui/transcript/GoalRows.js +0 -35
- package/dist/ui/transcript/GoalRows.js.map +0 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Regression for the per-chunk footer "bounce" during streaming.
|
|
3
|
+
//
|
|
4
|
+
// The assistant response is flushed to native scrollback paragraph-by-paragraph
|
|
5
|
+
// while it streams (see assistant-stream-split). The scrollback print happens in
|
|
6
|
+
// an effect AFTER paint, while `flushedChars` only advances in that same effect.
|
|
7
|
+
// If the live frame is sliced solely by the already-committed `flushedChars`,
|
|
8
|
+
// the just-flushed paragraph renders BOTH in scrollback and still live for one
|
|
9
|
+
// frame — a transient height bump that shoves the footer up, then back down on
|
|
10
|
+
// every paragraph boundary. App fixes this by slicing the live text with the
|
|
11
|
+
// PROSPECTIVE flush computed during render. This test models that flow and
|
|
12
|
+
// asserts the footer offset from the bottom stays constant across flushes.
|
|
13
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
14
|
+
import { render, Text, useStdout } from "ink";
|
|
15
|
+
import { describe, expect, it } from "vitest";
|
|
16
|
+
import stripAnsi from "strip-ansi";
|
|
17
|
+
import { ChatControls, ChatLayout } from "./components/ChatLayout.js";
|
|
18
|
+
import { ChatLivePane } from "./components/ChatLivePane.js";
|
|
19
|
+
import { TerminalSizeProvider } from "./hooks/useTerminalSize.js";
|
|
20
|
+
import { renderTranscriptItem } from "./transcript/TranscriptRenderer.js";
|
|
21
|
+
import { loadTheme, ThemeContext } from "./theme/theme.js";
|
|
22
|
+
import { createTerminalHistoryPrinter } from "./terminal-history.js";
|
|
23
|
+
import { useTranscriptHistory } from "./hooks/useTranscriptHistory.js";
|
|
24
|
+
import { ScreenRecorder, makeRecordingStdout } from "./testing/screen-recorder.js";
|
|
25
|
+
import { splitAssistantStreamingText } from "./utils/assistant-stream-split.js";
|
|
26
|
+
import { stripDoneMarkers } from "../utils/plan-steps.js";
|
|
27
|
+
const COLUMNS = 80;
|
|
28
|
+
const ROWS = 24;
|
|
29
|
+
const theme = loadTheme("dark");
|
|
30
|
+
const terminalContext = {
|
|
31
|
+
theme,
|
|
32
|
+
columns: COLUMNS,
|
|
33
|
+
version: "sim",
|
|
34
|
+
model: "sim-model",
|
|
35
|
+
provider: "anthropic",
|
|
36
|
+
cwd: "/tmp/sim-project",
|
|
37
|
+
};
|
|
38
|
+
const FOOTER_BOTTOM = "SIM_ACTIVITY_BAR";
|
|
39
|
+
let idCounter = 0;
|
|
40
|
+
const getId = () => `chunk-${idCounter++}`;
|
|
41
|
+
function Controls() {
|
|
42
|
+
return (_jsxs(ChatControls, { controlsRef: () => { }, children: [_jsx(Text, { children: "SIM_STATUS" }), _jsx(Text, { children: "SIM_INPUT" }), _jsx(Text, { children: "SIM_FOOTER" }), _jsx(Text, { children: FOOTER_BOTTOM })] }));
|
|
43
|
+
}
|
|
44
|
+
// Mirrors App.tsx: prospective flush is computed during render so the live
|
|
45
|
+
// frame drops the to-be-flushed prefix immediately; the scrollback print is
|
|
46
|
+
// deferred to the effect.
|
|
47
|
+
function Driver({ rawText }) {
|
|
48
|
+
const { write: writeStdout } = useStdout();
|
|
49
|
+
const [history, setHistory] = useState([]);
|
|
50
|
+
const [liveItems, setLiveItems] = useState([]);
|
|
51
|
+
const flushRef = useRef({ flushedChars: 0, text: "" });
|
|
52
|
+
const { queueFlush } = useTranscriptHistory({
|
|
53
|
+
terminalHistoryPrinter: createTerminalHistoryPrinter(),
|
|
54
|
+
terminalHistoryContext: terminalContext,
|
|
55
|
+
writeStdout,
|
|
56
|
+
sessionPathRef: { current: undefined },
|
|
57
|
+
sessionManagerRef: { current: null },
|
|
58
|
+
history,
|
|
59
|
+
setHistory,
|
|
60
|
+
setLiveItems,
|
|
61
|
+
});
|
|
62
|
+
const alreadyFlushed = flushRef.current.flushedChars;
|
|
63
|
+
const pendingFlushChars = rawText
|
|
64
|
+
? splitAssistantStreamingText(rawText.slice(alreadyFlushed)).flushedText.length
|
|
65
|
+
: 0;
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!rawText) {
|
|
68
|
+
flushRef.current = { flushedChars: 0, text: "" };
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (rawText === flushRef.current.text)
|
|
72
|
+
return;
|
|
73
|
+
const split = splitAssistantStreamingText(rawText.slice(flushRef.current.flushedChars));
|
|
74
|
+
if (split.flushedText.length > 0) {
|
|
75
|
+
queueFlush([
|
|
76
|
+
{
|
|
77
|
+
kind: "assistant",
|
|
78
|
+
text: stripDoneMarkers(split.flushedText),
|
|
79
|
+
continuation: flushRef.current.flushedChars > 0,
|
|
80
|
+
id: getId(),
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
flushRef.current = {
|
|
84
|
+
flushedChars: flushRef.current.flushedChars + split.flushedText.length,
|
|
85
|
+
text: rawText,
|
|
86
|
+
};
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
flushRef.current = { ...flushRef.current, text: rawText };
|
|
90
|
+
}, [rawText, queueFlush]);
|
|
91
|
+
const visibleStreamingText = stripDoneMarkers(rawText.slice(alreadyFlushed + pendingFlushChars));
|
|
92
|
+
const renderItem = (item, index, items) => renderTranscriptItem({
|
|
93
|
+
item,
|
|
94
|
+
index,
|
|
95
|
+
items,
|
|
96
|
+
version: "sim",
|
|
97
|
+
currentModel: "sim-model",
|
|
98
|
+
currentProvider: "anthropic",
|
|
99
|
+
displayedCwd: "/tmp/sim-project",
|
|
100
|
+
columns: COLUMNS,
|
|
101
|
+
theme,
|
|
102
|
+
renderMarkdown: true,
|
|
103
|
+
measuredLiveAreaRows: ROWS,
|
|
104
|
+
});
|
|
105
|
+
return (_jsx(ThemeContext.Provider, { value: theme, children: _jsx(TerminalSizeProvider, { children: _jsxs(ChatLayout, { columns: COLUMNS, children: [_jsx(ChatLivePane, { liveItems: liveItems, renderItem: renderItem, isRunning: true, visibleStreamingText: visibleStreamingText, streamingThinking: "", thinkingMs: 0, reserveStreamingSpacing: false, renderMarkdown: true, measuredLiveAreaRows: ROWS, assistantMarginTop: 0, streamingContinuation: alreadyFlushed + pendingFlushChars > 0 }), _jsx(Controls, {})] }) }) }));
|
|
106
|
+
}
|
|
107
|
+
async function tick() {
|
|
108
|
+
await new Promise((resolve) => setTimeout(resolve, 45));
|
|
109
|
+
}
|
|
110
|
+
function paragraph(n) {
|
|
111
|
+
return Array.from({ length: 3 }, (_, i) => `P${n}_LINE_${i + 1}`).join("\n");
|
|
112
|
+
}
|
|
113
|
+
describe("streaming flush footer bounce", () => {
|
|
114
|
+
it("keeps the footer at a constant offset across paragraph flush boundaries", async () => {
|
|
115
|
+
const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
|
|
116
|
+
const stdout = makeRecordingStdout(recorder);
|
|
117
|
+
const footerOffsets = [];
|
|
118
|
+
const capture = () => {
|
|
119
|
+
const lines = recorder.viewportLines().map((line) => stripAnsi(line));
|
|
120
|
+
const footerIdx = lines.findIndex((line) => line.includes(FOOTER_BOTTOM));
|
|
121
|
+
footerOffsets.push(footerIdx === -1 ? -1 : lines.length - footerIdx);
|
|
122
|
+
};
|
|
123
|
+
// Stream a 3-paragraph response: text grows, then crosses a blank-line
|
|
124
|
+
// boundary (flush), then grows again, etc. The boundary frames are where the
|
|
125
|
+
// bounce used to occur.
|
|
126
|
+
const steps = [
|
|
127
|
+
paragraph(1),
|
|
128
|
+
`${paragraph(1)}\n\n`,
|
|
129
|
+
`${paragraph(1)}\n\n${paragraph(2)}`,
|
|
130
|
+
`${paragraph(1)}\n\n${paragraph(2)}\n\n`,
|
|
131
|
+
`${paragraph(1)}\n\n${paragraph(2)}\n\n${paragraph(3)}`,
|
|
132
|
+
];
|
|
133
|
+
const mounted = render(_jsx(Driver, { rawText: steps[0] }), {
|
|
134
|
+
stdout,
|
|
135
|
+
columns: COLUMNS,
|
|
136
|
+
rows: ROWS,
|
|
137
|
+
patchConsole: false,
|
|
138
|
+
maxFps: 1000,
|
|
139
|
+
});
|
|
140
|
+
await tick();
|
|
141
|
+
capture();
|
|
142
|
+
for (let i = 1; i < steps.length; i++) {
|
|
143
|
+
mounted.rerender(_jsx(Driver, { rawText: steps[i] }));
|
|
144
|
+
await tick();
|
|
145
|
+
await tick();
|
|
146
|
+
capture();
|
|
147
|
+
}
|
|
148
|
+
mounted.unmount();
|
|
149
|
+
// The footer (controls block) must stay pinned the same distance from the
|
|
150
|
+
// bottom on every frame — no transient grow/shrink as paragraphs flush.
|
|
151
|
+
for (const offset of footerOffsets) {
|
|
152
|
+
expect(offset).toBe(footerOffsets[0]);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=streaming-flush-bounce.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-flush-bounce.test.js","sourceRoot":"","sources":["../../src/ui/streaming-flush-bounce.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
|
-
import type { Message } from "@kenkaiiii/gg-ai";
|
|
3
2
|
import type { ImageAttachment } from "../utils/image.js";
|
|
4
3
|
import type { CustomCommand } from "../core/custom-commands.js";
|
|
5
|
-
import type { GoalMode } from "../core/runtime-mode.js";
|
|
6
|
-
import type { GoalReference } from "../core/goal-store.js";
|
|
7
4
|
import type { CompletedItem, UserItem } from "./app-items.js";
|
|
8
5
|
import type { UserContent } from "./hooks/useAgentLoop.js";
|
|
9
6
|
interface PromptCommandSubmitOptions {
|
|
10
7
|
trimmed: string;
|
|
11
8
|
inputImages: ImageAttachment[];
|
|
12
|
-
cwd: string;
|
|
13
9
|
currentModel: string;
|
|
14
10
|
customCommands: CustomCommand[];
|
|
15
|
-
messagesRef: React.MutableRefObject<Message[]>;
|
|
16
|
-
goalSetupPanePendingRef: React.MutableRefObject<boolean>;
|
|
17
|
-
goalModeStateRef: React.MutableRefObject<GoalMode>;
|
|
18
|
-
goalAutoExpandRef: React.MutableRefObject<boolean>;
|
|
19
|
-
setActiveGoalReferences: (references: readonly GoalReference[] | undefined) => void;
|
|
20
11
|
setLastUserMessage: (message: string) => void;
|
|
21
12
|
setDoneStatus: (status: {
|
|
22
13
|
verb: string;
|
|
@@ -24,17 +15,11 @@ interface PromptCommandSubmitOptions {
|
|
|
24
15
|
toolsUsed: string[];
|
|
25
16
|
} | null) => void;
|
|
26
17
|
finalizeSubmittedUserItem: (item: UserItem) => void;
|
|
27
|
-
setGoalModeAndPrompt: (mode: GoalMode) => Promise<void>;
|
|
28
18
|
runAgent: (content: UserContent) => Promise<void>;
|
|
29
|
-
appendGoalAgentTransition: (text: string) => void;
|
|
30
19
|
setLiveItems: React.Dispatch<React.SetStateAction<CompletedItem[]>>;
|
|
31
20
|
getId: () => string;
|
|
32
|
-
setGoalAutoExpand: (value: boolean) => void;
|
|
33
|
-
setPlanAutoExpand: (value: boolean) => void;
|
|
34
|
-
closeTaskPicker: () => void;
|
|
35
|
-
openGoalPicker: () => void;
|
|
36
21
|
reloadCustomCommands: () => void;
|
|
37
22
|
}
|
|
38
|
-
export declare function submitPromptCommand({ trimmed, inputImages,
|
|
23
|
+
export declare function submitPromptCommand({ trimmed, inputImages, currentModel, customCommands, setLastUserMessage, setDoneStatus, finalizeSubmittedUserItem, runAgent, setLiveItems, getId, reloadCustomCommands, }: PromptCommandSubmitOptions): Promise<boolean>;
|
|
39
24
|
export {};
|
|
40
25
|
//# sourceMappingURL=submit-prompt-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-prompt-command.d.ts","sourceRoot":"","sources":["../../src/ui/submit-prompt-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"submit-prompt-command.d.ts","sourceRoot":"","sources":["../../src/ui/submit-prompt-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAClG,yBAAyB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,yBAAyB,EACzB,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,oBAAoB,GACrB,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC/C"}
|
|
@@ -1,33 +1,18 @@
|
|
|
1
1
|
import { getModel } from "../core/model-registry.js";
|
|
2
2
|
import { PROMPT_COMMANDS } from "../core/prompt-commands.js";
|
|
3
|
-
import { buildGoalReferenceContext } from "../core/goal-references.js";
|
|
4
3
|
import { log } from "../core/logger.js";
|
|
5
|
-
import { buildUserContentWithAttachments,
|
|
6
|
-
import { getGoalSetupPaneTransitionAfterRun } from "./layout-decisions.js";
|
|
4
|
+
import { buildUserContentWithAttachments, routePromptCommandInput } from "./prompt-routing.js";
|
|
7
5
|
import { toErrorItem } from "./error-item.js";
|
|
8
|
-
export async function submitPromptCommand({ trimmed, inputImages,
|
|
6
|
+
export async function submitPromptCommand({ trimmed, inputImages, currentModel, customCommands, setLastUserMessage, setDoneStatus, finalizeSubmittedUserItem, runAgent, setLiveItems, getId, reloadCustomCommands, }) {
|
|
9
7
|
const promptCommandRoute = routePromptCommandInput(trimmed, PROMPT_COMMANDS, customCommands);
|
|
10
8
|
if (!promptCommandRoute)
|
|
11
9
|
return false;
|
|
12
10
|
const { cmdName, cmdArgs, fullPrompt } = promptCommandRoute;
|
|
13
11
|
log("INFO", "command", `Prompt command: /${cmdName}${cmdArgs ? ` (args: ${cmdArgs})` : ""}`);
|
|
14
12
|
const hasImages = inputImages.length > 0;
|
|
15
|
-
const isGoalSetupCommand = isGoalPromptCommandName(cmdName);
|
|
16
|
-
let promptForAgent = fullPrompt;
|
|
17
|
-
if (isGoalSetupCommand) {
|
|
18
|
-
const referenceContext = await buildGoalReferenceContext({
|
|
19
|
-
cwd,
|
|
20
|
-
originalGoalPrompt: fullPrompt,
|
|
21
|
-
attachments: inputImages,
|
|
22
|
-
});
|
|
23
|
-
setActiveGoalReferences(referenceContext.references);
|
|
24
|
-
promptForAgent = referenceContext.promptSection
|
|
25
|
-
? `${fullPrompt}\n\n${referenceContext.promptSection}`
|
|
26
|
-
: fullPrompt;
|
|
27
|
-
}
|
|
28
13
|
const modelInfo = getModel(currentModel);
|
|
29
14
|
const modelSupportsImages = modelInfo?.supportsImages ?? true;
|
|
30
|
-
const userContent = buildUserContentWithAttachments(
|
|
15
|
+
const userContent = buildUserContentWithAttachments(fullPrompt, inputImages, modelSupportsImages);
|
|
31
16
|
const userItem = {
|
|
32
17
|
kind: "user",
|
|
33
18
|
text: trimmed,
|
|
@@ -38,27 +23,12 @@ export async function submitPromptCommand({ trimmed, inputImages, cwd, currentMo
|
|
|
38
23
|
setDoneStatus(null);
|
|
39
24
|
finalizeSubmittedUserItem(userItem);
|
|
40
25
|
try {
|
|
41
|
-
|
|
42
|
-
goalSetupPanePendingRef.current = true;
|
|
43
|
-
await runGoalPromptSetupSequence({
|
|
44
|
-
userContent,
|
|
45
|
-
fullPrompt: promptForAgent,
|
|
46
|
-
messagesRef,
|
|
47
|
-
setGoalModeAndPrompt,
|
|
48
|
-
runAgent,
|
|
49
|
-
onStage: appendGoalAgentTransition,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
await runAgent(userContent);
|
|
54
|
-
}
|
|
26
|
+
await runAgent(userContent);
|
|
55
27
|
}
|
|
56
28
|
catch (err) {
|
|
57
29
|
const msg = err instanceof Error ? err.message : String(err);
|
|
58
30
|
log("ERROR", "error", msg);
|
|
59
31
|
const isAbort = msg.includes("aborted") || msg.includes("abort");
|
|
60
|
-
if (isGoalSetupCommand)
|
|
61
|
-
goalSetupPanePendingRef.current = false;
|
|
62
32
|
setLiveItems((prev) => [
|
|
63
33
|
...prev,
|
|
64
34
|
isAbort
|
|
@@ -66,26 +36,6 @@ export async function submitPromptCommand({ trimmed, inputImages, cwd, currentMo
|
|
|
66
36
|
: toErrorItem(err, getId()),
|
|
67
37
|
]);
|
|
68
38
|
}
|
|
69
|
-
finally {
|
|
70
|
-
if (isGoalSetupCommand) {
|
|
71
|
-
setActiveGoalReferences(undefined);
|
|
72
|
-
const paneTransition = getGoalSetupPaneTransitionAfterRun({
|
|
73
|
-
isGoalSetupCommand,
|
|
74
|
-
setupPanePending: goalSetupPanePendingRef.current,
|
|
75
|
-
});
|
|
76
|
-
goalSetupPanePendingRef.current = false;
|
|
77
|
-
if (goalModeStateRef.current !== "off") {
|
|
78
|
-
await setGoalModeAndPrompt("off");
|
|
79
|
-
}
|
|
80
|
-
if (paneTransition) {
|
|
81
|
-
goalAutoExpandRef.current = false;
|
|
82
|
-
setGoalAutoExpand(false);
|
|
83
|
-
setPlanAutoExpand(false);
|
|
84
|
-
closeTaskPicker();
|
|
85
|
-
openGoalPicker();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
39
|
reloadCustomCommands();
|
|
90
40
|
return true;
|
|
91
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-prompt-command.js","sourceRoot":"","sources":["../../src/ui/submit-prompt-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"submit-prompt-command.js","sourceRoot":"","sources":["../../src/ui/submit-prompt-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgB9C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,yBAAyB,EACzB,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,oBAAoB,GACO;IAC3B,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC7F,IAAI,CAAC,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC;IAC5D,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,oBAAoB,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7F,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,mBAAmB,GAAG,SAAS,EAAE,cAAc,IAAI,IAAI,CAAC;IAC9D,MAAM,WAAW,GAAG,+BAA+B,CAAC,UAAU,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAElG,MAAM,QAAQ,GAAa;QACzB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACtD,EAAE,EAAE,KAAK,EAAE;KACZ,CAAC;IACF,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjE,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,GAAG,IAAI;YACP,OAAO;gBACL,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;gBAChE,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -6,7 +6,6 @@ interface UiSlashCommandActions {
|
|
|
6
6
|
openThemeSelector: () => void;
|
|
7
7
|
toggleMarkdown: () => void;
|
|
8
8
|
clearApprovedPlan: () => void;
|
|
9
|
-
openGoalsPicker: () => void;
|
|
10
9
|
}
|
|
11
10
|
export declare function handleUiSlashCommand(trimmed: string, actions: UiSlashCommandActions): Promise<boolean>;
|
|
12
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-slash-commands.d.ts","sourceRoot":"","sources":["../../src/ui/submit-slash-commands.ts"],"names":[],"mappings":"AAAA,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"submit-slash-commands.d.ts","sourceRoot":"","sources":["../../src/ui/submit-slash-commands.ts"],"names":[],"mappings":"AAAA,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAqClB"}
|
|
@@ -27,10 +27,6 @@ export async function handleUiSlashCommand(trimmed, actions) {
|
|
|
27
27
|
actions.clearApprovedPlan();
|
|
28
28
|
return true;
|
|
29
29
|
}
|
|
30
|
-
if (trimmed === "/goals") {
|
|
31
|
-
actions.openGoalsPicker();
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
30
|
return false;
|
|
35
31
|
}
|
|
36
32
|
//# sourceMappingURL=submit-slash-commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-slash-commands.js","sourceRoot":"","sources":["../../src/ui/submit-slash-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"submit-slash-commands.js","sourceRoot":"","sources":["../../src/ui/submit-slash-commands.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,OAA8B;IAE9B,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACnE,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -3,7 +3,6 @@ import type { TerminalHistoryContext } from "./terminal-history.js";
|
|
|
3
3
|
import { BLACK_CIRCLE } from "./constants/figures.js";
|
|
4
4
|
import { normalizeStatusText } from "./terminal-history-format.js";
|
|
5
5
|
export declare function renderStatusLine(glyph: string, text: string, context: TerminalHistoryContext, glyphColor: string, bold: boolean, textAlreadyStyled?: boolean): string;
|
|
6
|
-
export declare function renderGoal(title: string, workerId: string | undefined, context: TerminalHistoryContext): string;
|
|
7
6
|
export declare function renderError(headline: string, message: string, guidance: string, context: TerminalHistoryContext): string;
|
|
8
7
|
export declare function renderStylePack(added: readonly LanguageId[], showSetupHint: boolean, context: TerminalHistoryContext): string;
|
|
9
8
|
export declare function renderSetupHint(context: TerminalHistoryContext): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-history-status-renderers.d.ts","sourceRoot":"","sources":["../../src/ui/terminal-history-status-renderers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAOL,mBAAmB,EAIpB,MAAM,8BAA8B,CAAC;AAStC,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,iBAAiB,UAAQ,GACxB,MAAM,CAOR;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"terminal-history-status-renderers.d.ts","sourceRoot":"","sources":["../../src/ui/terminal-history-status-renderers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAOL,mBAAmB,EAIpB,MAAM,8BAA8B,CAAC;AAStC,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,iBAAiB,UAAQ,GACxB,MAAM,CAOR;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CAcR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,aAAa,EAAE,OAAO,EACtB,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CAkBR;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAYvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAOzF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAQxE;AAED,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CAYR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,EAC5C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CASR;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CAQR;AAED,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -9,9 +9,6 @@ export function renderStatusLine(glyph, text, context, glyphColor, bold, textAlr
|
|
|
9
9
|
: color(bold ? glyphColor : context.theme.textDim, text, bold);
|
|
10
10
|
return prefixFirstLine(body, prefix, continuation);
|
|
11
11
|
}
|
|
12
|
-
export function renderGoal(title, workerId, context) {
|
|
13
|
-
return `${RESPONSE_LEFT_PADDING}${color(context.theme.success, "▶", true)} ${dim(context, "Goal: ")}${color(context.theme.success, title)}${workerId ? dim(context, ` · worker ${workerId}`) : ""}`;
|
|
14
|
-
}
|
|
15
12
|
export function renderError(headline, message, guidance, context) {
|
|
16
13
|
const presentation = presentError({
|
|
17
14
|
kind: "error",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-history-status-renderers.js","sourceRoot":"","sources":["../../src/ui/terminal-history-status-renderers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,KAAK,EACL,KAAK,EACL,GAAG,EACH,gBAAgB,EAChB,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,IAAY,EACZ,OAA+B,EAC/B,UAAkB,EAClB,IAAa,EACb,iBAAiB,GAAG,KAAK;IAEzB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;IACrD,MAAM,YAAY,GAAG,KAAK,CAAC;IAC3B,MAAM,IAAI,GAAG,iBAAiB;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,OAAO,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"terminal-history-status-renderers.js","sourceRoot":"","sources":["../../src/ui/terminal-history-status-renderers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-history.d.ts","sourceRoot":"","sources":["../../src/ui/terminal-history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-history.d.ts","sourceRoot":"","sources":["../../src/ui/terminal-history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAK9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AA0F9C,MAAM,WAAW,sBAAsB;IACrC,KAAK,CACH,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GAC5D,IAAI,CAAC;IACR,KAAK,IAAI,IAAI,CAAC;IACd,YAAY,IAAI,IAAI,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,MAAuB,GACxB,GAAE,6BAAkC,GAAG,sBAAsB,CAmF7D;AAED,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,sBAAsB,GAC9B,MAAM,CAmIR"}
|
|
@@ -2,6 +2,7 @@ import chalk from "chalk";
|
|
|
2
2
|
import stringWidth from "string-width";
|
|
3
3
|
import wrapAnsi from "wrap-ansi";
|
|
4
4
|
import { getModel } from "../core/model-registry.js";
|
|
5
|
+
import { isPanelReplacedToolItem } from "./app-items.js";
|
|
5
6
|
import { BLACK_CIRCLE, RETURN_SYMBOL } from "./constants/figures.js";
|
|
6
7
|
import { SPINNER_FRAMES } from "./spinner-frames.js";
|
|
7
8
|
import { getUserMessageDisplayParts } from "./utils/user-message-display.js";
|
|
@@ -14,8 +15,8 @@ import { createHyperlink } from "./utils/hyperlink.js";
|
|
|
14
15
|
import { supportsHyperlinks } from "./utils/supports-hyperlinks.js";
|
|
15
16
|
import { shouldSeparateTranscriptItems } from "./transcript/spacing.js";
|
|
16
17
|
import { MAX_OUTPUT_LINES, RESPONSE_LEFT_PADDING, USER_MESSAGE_BACKGROUND, USER_MESSAGE_BOTTOM_FILL, USER_MESSAGE_HORIZONTAL_PADDING, USER_MESSAGE_PREFIX, USER_MESSAGE_TOP_FILL, block, color, dim, formatCompactTokens, formatDuration, formatHistoryWrite, gradientLine, indent, stripAnsi, truncatePlain, userChipSegment, wrapPlain, } from "./terminal-history-format.js";
|
|
17
|
-
import { renderCompacted, renderCompacting, renderError,
|
|
18
|
-
import { presentDuration,
|
|
18
|
+
import { renderCompacted, renderCompacting, renderError, renderSetupHint, renderStatusLine, renderStepDone, renderStylePack, renderUpdateNotice, } from "./terminal-history-status-renderers.js";
|
|
19
|
+
import { presentDuration, presentInfo, presentModelTransition, presentPlanEvent, presentQueued, presentStopped, presentTask, presentThemeTransition, } from "./transcript/presentation.js";
|
|
19
20
|
import { toolTonePalette } from "./transcript/tool-presentation.js";
|
|
20
21
|
const LOGO_LINES = [" ▄▀▀▀ ▄▀▀▀", " █ ▀█ █ ▀█", " ▀▄▄▀ ▀▄▄▀"];
|
|
21
22
|
const PLAN_MODE_LOGO = [
|
|
@@ -51,7 +52,7 @@ const GAP = " ";
|
|
|
51
52
|
const LOGO_WIDTH = 9;
|
|
52
53
|
const SIDE_BY_SIDE_MIN = LOGO_WIDTH + GAP.length + 62;
|
|
53
54
|
const COMPACT_TOOLS = new Set(["read", "grep", "find", "ls", "source_path"]);
|
|
54
|
-
const STATE_TOOLS = new Set(["tasks"
|
|
55
|
+
const STATE_TOOLS = new Set(["tasks"]);
|
|
55
56
|
const SERVER_STYLE_TOOLS = new Set(["web_search"]);
|
|
56
57
|
export function createTerminalHistoryPrinter({ stream = process.stdout, } = {}) {
|
|
57
58
|
const printed = new Set();
|
|
@@ -62,6 +63,11 @@ export function createTerminalHistoryPrinter({ stream = process.stdout, } = {})
|
|
|
62
63
|
for (const item of items) {
|
|
63
64
|
if (!options?.force && printed.has(item.id))
|
|
64
65
|
continue;
|
|
66
|
+
// Tool activity is shown live in the pinned LiveToolPanel, not the
|
|
67
|
+
// scrollback transcript. Skip without touching spacing state so the
|
|
68
|
+
// surrounding non-tool rows keep their separators.
|
|
69
|
+
if (isPanelReplacedToolItem(item))
|
|
70
|
+
continue;
|
|
65
71
|
const output = serializeCompletedItemToTerminalHistory(item, context);
|
|
66
72
|
const endsWithBlankLine = item.kind === "banner";
|
|
67
73
|
// A continuation assistant chunk is the next paragraph of a response
|
|
@@ -159,14 +165,10 @@ export function serializeCompletedItemToTerminalHistory(item, context) {
|
|
|
159
165
|
return renderServerToolDone(item.name, item.input, item.resultType, item.durationMs, context);
|
|
160
166
|
case "subagent_group":
|
|
161
167
|
return renderSubAgentGroup(item.agents, item.aborted, context);
|
|
162
|
-
case "goal":
|
|
163
|
-
return renderGoal(item.title, item.workerId, context);
|
|
164
168
|
case "task": {
|
|
165
169
|
const presentation = presentTask(item);
|
|
166
170
|
return renderStatusLine(presentation.glyph.trim(), `${dim(context, presentation.label ?? "")}${color(context.theme.commandColor, presentation.text, true)}`, context, context.theme.commandColor, presentation.bold, true);
|
|
167
171
|
}
|
|
168
|
-
case "goal_progress":
|
|
169
|
-
return renderGoalProgress(item, context);
|
|
170
172
|
case "error":
|
|
171
173
|
return renderError(item.headline, item.message, item.guidance, context);
|
|
172
174
|
case "info": {
|
|
@@ -191,10 +193,6 @@ export function serializeCompletedItemToTerminalHistory(item, context) {
|
|
|
191
193
|
return renderSessionSummary(item.summary, context);
|
|
192
194
|
case "plan_transition":
|
|
193
195
|
return renderPlanModeLogo(context);
|
|
194
|
-
case "goal_agent_transition": {
|
|
195
|
-
const presentation = presentGoalAgentTransition(item);
|
|
196
|
-
return renderStatusLine(presentation.glyph.trim(), presentation.text, context, context.theme.commandColor, presentation.bold);
|
|
197
|
-
}
|
|
198
196
|
case "model_transition": {
|
|
199
197
|
const presentation = presentModelTransition(item);
|
|
200
198
|
return renderStatusLine(presentation.glyph.trim(), `${dim(context, presentation.label ?? "")}${color(context.theme.commandColor, presentation.text, true)}`, context, context.theme.commandColor, presentation.bold, true);
|
|
@@ -259,7 +257,7 @@ function renderBanner(context) {
|
|
|
259
257
|
const home = process.env.HOME ?? "";
|
|
260
258
|
const displayPath = home && context.cwd.startsWith(home) ? `~${context.cwd.slice(home.length)}` : context.cwd;
|
|
261
259
|
const logo = LOGO_LINES.map((lineText) => gradientLine(lineText, GRADIENT));
|
|
262
|
-
const shortcuts = `${color(context.theme.primary, "
|
|
260
|
+
const shortcuts = `${color(context.theme.primary, "Ctrl+T")} ${dim(context, "tasks · ")}${color(context.theme.primary, "Ctrl+S")} ${dim(context, "skills · ")}${color(context.theme.primary, "Shift+Tab")} ${dim(context, "toggle thinking")}`;
|
|
263
261
|
if (context.columns < SIDE_BY_SIDE_MIN) {
|
|
264
262
|
return block([
|
|
265
263
|
"",
|
|
@@ -434,45 +432,6 @@ function renderSubAgentGroup(agents, aborted, context) {
|
|
|
434
432
|
});
|
|
435
433
|
return block(lines);
|
|
436
434
|
}
|
|
437
|
-
function renderGoalProgress(item, context) {
|
|
438
|
-
const isError = item.status === "failed" || item.status === "fail" || item.status === "blocked";
|
|
439
|
-
const status = isError
|
|
440
|
-
? "error"
|
|
441
|
-
: item.phase === "worker_finished" ||
|
|
442
|
-
item.phase === "verifier_finished" ||
|
|
443
|
-
item.phase === "terminal"
|
|
444
|
-
? "done"
|
|
445
|
-
: "running";
|
|
446
|
-
const labelColor = isError
|
|
447
|
-
? context.theme.error
|
|
448
|
-
: item.phase === "worker_finished" || item.phase === "terminal"
|
|
449
|
-
? context.theme.success
|
|
450
|
-
: item.phase === "verifier_finished" || item.phase === "verifier_started"
|
|
451
|
-
? context.theme.accent
|
|
452
|
-
: item.phase === "orchestrator_reviewing" || item.phase === "orchestrator_working"
|
|
453
|
-
? context.theme.secondary
|
|
454
|
-
: item.phase === "continuing"
|
|
455
|
-
? context.theme.warning
|
|
456
|
-
: context.theme.primary;
|
|
457
|
-
const header = `${toolHeader(status, color(labelColor, item.title, true), "", context, {
|
|
458
|
-
dotColor: labelColor,
|
|
459
|
-
indicator: BLACK_CIRCLE,
|
|
460
|
-
})}${item.workerId ? dim(context, ` · worker ${item.workerId}`) : ""}`;
|
|
461
|
-
const bodyLines = [];
|
|
462
|
-
if (item.detail) {
|
|
463
|
-
bodyLines.push(dim(context, wrapPlain(item.detail, context.columns - 8)));
|
|
464
|
-
}
|
|
465
|
-
for (const row of item.summaryRows ?? []) {
|
|
466
|
-
bodyLines.push(`${dim(context, row.label.padEnd(12))}${color(context.theme.text, row.value)}${row.detail ? dim(context, ` · ${row.detail}`) : ""}`);
|
|
467
|
-
}
|
|
468
|
-
for (const section of item.summarySections ?? []) {
|
|
469
|
-
bodyLines.push(dim(context, section.title));
|
|
470
|
-
for (const sectionLine of section.lines) {
|
|
471
|
-
bodyLines.push(`${color(context.theme.text, "• ")}${color(context.theme.text, sectionLine)}`);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return block([header, ...messageResponse(bodyLines, context)]);
|
|
475
|
-
}
|
|
476
435
|
function renderServerStyleToolDone(name, args, result, isError, context) {
|
|
477
436
|
const { label, detail } = getToolHeaderParts(name, args);
|
|
478
437
|
const searchCount = (result.match(/^\d+\./gm) ?? []).length;
|
|
@@ -638,7 +597,6 @@ function getToolHeaderParts(name, args) {
|
|
|
638
597
|
return { label: displayName, detail: url.length > 60 ? `${url.slice(0, 57)}…` : url };
|
|
639
598
|
}
|
|
640
599
|
case "tasks":
|
|
641
|
-
case "goals":
|
|
642
600
|
return { label: displayName, detail: String(args.action ?? "") };
|
|
643
601
|
default:
|
|
644
602
|
return { label: displayName, detail: name.startsWith("mcp__") ? getMCPDetailArg(args) : "" };
|
|
@@ -680,8 +638,6 @@ function toolDisplayName(name) {
|
|
|
680
638
|
return "Source";
|
|
681
639
|
case "tasks":
|
|
682
640
|
return "Task";
|
|
683
|
-
case "goals":
|
|
684
|
-
return "Goal";
|
|
685
641
|
default:
|
|
686
642
|
return snakeToTitle(name);
|
|
687
643
|
}
|
|
@@ -784,8 +740,7 @@ function getInlineSummary(name, result, isError) {
|
|
|
784
740
|
return extractSourcePath(result) ? shortenPath(extractSourcePath(result) ?? "") : "resolved";
|
|
785
741
|
case "task_stop":
|
|
786
742
|
return result.split("\n")[0] ?? "stopped";
|
|
787
|
-
case "tasks":
|
|
788
|
-
case "goals": {
|
|
743
|
+
case "tasks": {
|
|
789
744
|
const quoted = result.match(/"([^"]+)"/)?.[1];
|
|
790
745
|
if (quoted)
|
|
791
746
|
return quoted.length > 50 ? `${quoted.slice(0, 47)}…` : quoted;
|