Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Chats now start at the middle conversation-detail level (edit diffs expanded, thinking visible, tool output still summarized) instead of the most-collapsed overview; Ctrl+O keeps cycling overview -> details -> all unchanged.
Original file line number Diff line number Diff line change
Expand Up @@ -1228,9 +1228,9 @@ export class InteractiveMode {
private rosterBar: { summaries(): SessionSummary[]; dispose(): Promise<void> } | undefined;

private toolOutputExpanded = false;
private editDiffsExpanded = false;
private editDiffsExpanded = true;

private hideThinkingBlock = true;
private hideThinkingBlock = false;
private readonly mermaidMarkdownTransform = createMermaidMarkdownTransform({
getMode: () => this.settingsManager.getMermaidRenderingMode(),
theme,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,17 @@ describe("conversation detail cycle", () => {
const source = JSON.stringify(context.messages);
const mode = createMode(harness);
await mode.renderSessionContext(context);
assertMode(mode, "overview");
cycle(mode);
assertMode(mode, "details");
cycle(mode);
assertMode(mode, "all");
cycle(mode);
assertMode(mode, "overview");
mode.defaultEditor.handleInput("\x10");
assertMode(mode, "all");
assertMode(mode, "overview");
await mode.renderSessionContext(context, { clearChat: true });
assertMode(mode, "all");
cycle(mode);
assertMode(mode, "overview");
cycle(mode);
assertMode(mode, "details");
expect(JSON.stringify(context.messages)).toBe(source);
expect(readFileSync(sessionFile, "utf8")).toBe(savedTrace);
expect(harness.settingsManager.getGlobalSettings()).toMatchObject({ hideThinkingBlock: false });
Expand Down Expand Up @@ -192,7 +192,7 @@ describe("conversation detail cycle", () => {
const reopened = createMode(harness);
await reopened.renderSessionContext(context);
for (const mode of [live, reopened]) {
for (const detail of ["overview", "details", "all"] as const) {
for (const detail of ["details", "all", "overview"] as const) {
const text = render(mode);
expect(text).toContain("Work before notification.");
expect(text).toContain("Work after notification.");
Expand All @@ -219,7 +219,6 @@ describe("conversation detail cycle", () => {
}
expect(render(mode)).not.toContain("[bash-done pid:42 exit:0]");
cycle(mode);
cycle(mode);
expect(render(mode).match(/\[bash-done pid:42 exit:0\]/g)).toHaveLength(1);
}
expect(JSON.stringify(context.messages)).toBe(source);
Expand All @@ -241,7 +240,6 @@ describe("conversation detail cycle", () => {
]);
await harness.session.prompt("Stream the fixture");
const mode = createMode(harness);
cycle(mode);
for (const event of harness.events) {
if (
event.type === "message_start" ||
Expand Down Expand Up @@ -285,7 +283,6 @@ describe("conversation detail cycle", () => {
await mode.handleEvent({ type: "message_start", message });
expect(render(mode)).not.toContain("LIVE_AGENT_BODY");
expect(render(mode)).toContain("Agent message received");
cycle(mode);
expect(render(mode)).toContain("Agent message received");
cycle(mode);
expect(render(mode)).toContain("LIVE_AGENT_BODY");
Expand Down Expand Up @@ -324,7 +321,6 @@ describe("conversation detail cycle", () => {
Object.assign(mode, { sideQuestionComponent: side, pendingBashComponents: [pendingBash] });
const bashText = () => stripAnsi([...side.render(120), ...pendingBash.render(120)].join("\n"));
expect(bashText()).not.toContain("HIDDEN_BASH_HEAD");
cycle(mode);
expect(bashText()).not.toContain("HIDDEN_BASH_HEAD");
cycle(mode);
expect(bashText().match(/HIDDEN_BASH_HEAD/g)).toHaveLength(2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ describe("visible conversation spacing", () => {
const reopened = createMode(harness);
await reopened.renderSessionContext(context);
for (const mode of [live, reopened])
for (const detail of [0, 1, 2, 0]) {
for (const detail of [1, 2, 0, 1]) {
assertSpacing(rows(mode.chatContainer.children), detail);
mode.defaultEditor.handleInput("\x0f");
}
Expand Down Expand Up @@ -227,7 +227,7 @@ describe("visible conversation spacing", () => {
await reopened.renderSessionContext({ messages, thinkingLevel: "off", serviceTier: "default", model: null });
for (const mode of [live, reopened]) {
const [refinementComponent, empty, firstShell, thinking, secondShell] = mode.chatContainer.children;
for (const detail of [0, 1, 2, 0]) {
for (const detail of [1, 2, 0, 1]) {
expect(empty!.render(120)).toEqual([]);
const refinementRows = refinementComponent!.render(120);
const firstShellRows = firstShell!.render(120);
Expand Down
Loading