(messages: Record<string, SessionMessageResponse> = {})
| 79 | } |
| 80 | |
| 81 | function createHarness(messages: Record<string, SessionMessageResponse> = {}) { |
| 82 | const updates: SessionUpdateParams[] = [] |
| 83 | const calls = { |
| 84 | eventSubscribe: 0, |
| 85 | message: 0, |
| 86 | } |
| 87 | const events = createEventStream() |
| 88 | const sdk = { |
| 89 | global: { |
| 90 | event: (options?: { signal?: AbortSignal }) => { |
| 91 | calls.eventSubscribe++ |
| 92 | return Promise.resolve({ stream: events.stream(options?.signal) }) |
| 93 | }, |
| 94 | }, |
| 95 | session: { |
| 96 | message: (input: { messageID: string }) => { |
| 97 | calls.message++ |
| 98 | return Promise.resolve({ data: messages[input.messageID] }) |
| 99 | }, |
| 100 | get: () => Promise.resolve({ data: { id: "ses_loaded" } }), |
| 101 | messages: () => Promise.resolve({ data: [] }), |
| 102 | }, |
| 103 | } as unknown as OpencodeClient |
| 104 | const connection = { |
| 105 | sessionUpdate: (params: SessionUpdateParams) => { |
| 106 | updates.push(params) |
| 107 | return Promise.resolve() |
| 108 | }, |
| 109 | } satisfies Pick<AgentSideConnection, "sessionUpdate"> |
| 110 | const session = makeSessionService() |
| 111 | const subscription = new ACPEvent.Subscription({ sdk, connection, session }) |
| 112 | |
| 113 | return { calls, connection, events, sdk, session, subscription, updates } |
| 114 | } |
| 115 | |
| 116 | function textDelta(sessionID: string, messageID: string, partID: string, delta: string): Event { |
| 117 | return { |
no test coverage detected