fix(ralph-loop): persist session message count at loop start
This commit is contained in:
@@ -603,7 +603,7 @@ describe("ralph-loop", () => {
|
||||
expect(hook.getState()).toBeNull()
|
||||
|
||||
// then - messages API was called with correct session ID
|
||||
expect(messagesCalls.length).toBe(1)
|
||||
expect(messagesCalls.length).toBe(2)
|
||||
expect(messagesCalls[0].sessionID).toBe("session-123")
|
||||
})
|
||||
|
||||
@@ -633,7 +633,7 @@ describe("ralph-loop", () => {
|
||||
expect(hook.getState()).toBeNull()
|
||||
|
||||
// then - messages API was called with correct session ID
|
||||
expect(messagesCalls.length).toBe(1)
|
||||
expect(messagesCalls.length).toBe(2)
|
||||
expect(messagesCalls[0].sessionID).toBe("session-123")
|
||||
})
|
||||
|
||||
@@ -1075,7 +1075,7 @@ Original task: Build something`
|
||||
expect(promptCalls.length).toBe(0)
|
||||
expect(hook.getState()).toBeNull()
|
||||
// API should NOT be called since transcript found completion
|
||||
expect(messagesCalls.length).toBe(0)
|
||||
expect(messagesCalls.length).toBe(1)
|
||||
})
|
||||
|
||||
test("should show ultrawork completion toast", async () => {
|
||||
|
||||
@@ -24,6 +24,19 @@ export interface RalphLoopHook {
|
||||
|
||||
const DEFAULT_API_TIMEOUT = 5000 as const
|
||||
|
||||
function getMessageCountFromResponse(messagesResponse: unknown): number {
|
||||
if (Array.isArray(messagesResponse)) {
|
||||
return messagesResponse.length
|
||||
}
|
||||
|
||||
if (typeof messagesResponse === "object" && messagesResponse !== null && "data" in messagesResponse) {
|
||||
const data = (messagesResponse as { data?: unknown }).data
|
||||
return Array.isArray(data) ? data.length : 0
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
export function createRalphLoopHook(
|
||||
ctx: PluginInput,
|
||||
options?: RalphLoopOptions
|
||||
@@ -52,7 +65,25 @@ export function createRalphLoopHook(
|
||||
|
||||
return {
|
||||
event,
|
||||
startLoop: loopState.startLoop,
|
||||
startLoop: (sessionID, prompt, loopOptions): boolean => {
|
||||
const startSuccess = loopState.startLoop(sessionID, prompt, loopOptions)
|
||||
if (!startSuccess || typeof loopOptions?.messageCountAtStart === "number") {
|
||||
return startSuccess
|
||||
}
|
||||
|
||||
ctx.client.session
|
||||
.messages({
|
||||
path: { id: sessionID },
|
||||
query: { directory: ctx.directory },
|
||||
})
|
||||
.then((messagesResponse: unknown) => {
|
||||
const messageCountAtStart = getMessageCountFromResponse(messagesResponse)
|
||||
loopState.setMessageCountAtStart(sessionID, messageCountAtStart)
|
||||
})
|
||||
.catch(() => {})
|
||||
|
||||
return startSuccess
|
||||
},
|
||||
cancelLoop: loopState.cancelLoop,
|
||||
getState: loopState.getState as () => RalphLoopState | null,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user