Skip to content

Commit d9cb43a

Browse files
authored
Revert commits to fix bug that plain mode not notifing (#12)
* Revert "feat: Only output the last assistant message in plain-cli" This reverts commit b42b607. * Revert "feat: Execute saveSession and Stop hooks in parallel using IIFE" This reverts commit 2f775cb.
1 parent 7f9eb3a commit d9cb43a

3 files changed

Lines changed: 11 additions & 65 deletions

File tree

packages/agent-sdk/src/managers/aiManager.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,11 @@ export class AIManager {
444444
if (recursionDepth === 0) {
445445
this.setIsLoading(false);
446446

447-
// Save session and execute Stop hooks in parallel but maintain order
448-
(async () => {
449-
// Save session before executing Stop hooks
450-
await this.messageManager.saveSession();
451-
452-
// Execute Stop hooks when AI response cycle completes
453-
await this.executeStopHooks();
454-
})();
447+
// Save session before executing Stop hooks
448+
await this.messageManager.saveSession();
449+
450+
// Execute Stop hooks when AI response cycle completes
451+
await this.executeStopHooks();
455452
}
456453
}
457454
}

packages/code/src/plain-cli.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@ export async function startPlainCli(options: PlainCliOptions): Promise<void> {
2222
}
2323

2424
let agent: Agent;
25-
let lastAssistantMessage: string | undefined;
2625

2726
// Setup callbacks for agent
2827
const callbacks: AgentCallbacks = {
2928
onAssistantMessageAdded: (content?: string) => {
30-
// Store the content instead of immediately printing it
29+
// Only output the content field, not tool calls
3130
if (content) {
32-
lastAssistantMessage = content;
31+
console.log(content);
3332
}
3433
},
3534
};
@@ -48,11 +47,6 @@ export async function startPlainCli(options: PlainCliOptions): Promise<void> {
4847
await agent.sendMessage(message);
4948
}
5049

51-
// Output only the last assistant message
52-
if (lastAssistantMessage) {
53-
console.log(lastAssistantMessage);
54-
}
55-
5650
// Destroy agent and exit after sendMessage completes
5751
agent.destroy();
5852
process.exit(0);

packages/code/tests/plain-cli.test.ts

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ test("startPlainCli sends message and exits after completion", async () => {
7777
expect(mockExit).toHaveBeenCalledWith(0);
7878
});
7979

80-
test("onAssistantMessageAdded collects content but doesn't output immediately", async () => {
80+
test("onAssistantMessageAdded outputs content", async () => {
8181
const mockAgent = {
8282
sendMessage: vi.fn(),
8383
destroy: vi.fn(),
@@ -103,15 +103,13 @@ test("onAssistantMessageAdded collects content but doesn't output immediately",
103103
expect(String(error)).toContain("process.exit called");
104104
}
105105

106-
// Test the onAssistantMessageAdded callback - it should NOT output immediately
106+
// Test the onAssistantMessageAdded callback
107107
capturedCallbacks?.onAssistantMessageAdded?.(
108108
"Hello, this is assistant content!",
109109
);
110110

111-
// Verify that console.log was NOT called during the callback
112-
expect(consoleSpy).not.toHaveBeenCalledWith(
113-
"Hello, this is assistant content!",
114-
);
111+
// Verify that console.log was called with the content
112+
expect(consoleSpy).toHaveBeenCalledWith("Hello, this is assistant content!");
115113

116114
consoleSpy.mockRestore();
117115
});
@@ -148,49 +146,6 @@ test("startPlainCli works with continue session", async () => {
148146
expect(mockExit).toHaveBeenCalledWith(0);
149147
});
150148

151-
test("outputs only the last assistant message after sendMessage completes", async () => {
152-
const mockAgent = {
153-
sendMessage: vi.fn(),
154-
destroy: vi.fn(),
155-
abortMessage: vi.fn(),
156-
};
157-
158-
interface AgentCallbacks {
159-
onAssistantMessageAdded?: (content?: string) => void;
160-
}
161-
162-
let capturedCallbacks: AgentCallbacks | undefined;
163-
vi.mocked(Agent.create).mockImplementation(async (options) => {
164-
capturedCallbacks = options.callbacks;
165-
return mockAgent as unknown as Agent;
166-
});
167-
168-
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => {});
169-
170-
// Simulate multiple assistant messages during sendMessage
171-
mockAgent.sendMessage.mockImplementation(async () => {
172-
// Simulate first assistant message
173-
capturedCallbacks?.onAssistantMessageAdded?.("First message");
174-
// Simulate second assistant message
175-
capturedCallbacks?.onAssistantMessageAdded?.("Second message");
176-
// Simulate final assistant message
177-
capturedCallbacks?.onAssistantMessageAdded?.("Final message");
178-
});
179-
180-
try {
181-
await startPlainCli({ message: "test message" });
182-
} catch (error) {
183-
// Expected when process.exit is called
184-
expect(String(error)).toContain("process.exit called");
185-
}
186-
187-
// Verify that only the last message was output
188-
expect(consoleSpy).toHaveBeenCalledTimes(1);
189-
expect(consoleSpy).toHaveBeenCalledWith("Final message");
190-
191-
consoleSpy.mockRestore();
192-
});
193-
194149
afterEach(() => {
195150
vi.clearAllMocks();
196151
mockExit.mockClear();

0 commit comments

Comments
 (0)