| 1234567891011121314151617181920212223242526272829303132 |
- /** Replay Stagehand's recorded auxiliary events through the packaged SDK's event projection. */
- import { randomUUID } from 'node:crypto'
- import { readFileSync } from 'node:fs'
- export const name = 'python-browser-use-events'
- export const inject = ['sessions']
- /**
- * @param {import('@deepseek-ai/cordis').Context} ctx - Snapshot runtime services.
- */
- export function apply(ctx) {
- const fixture = new URL('../../snapshots/session/browser-use-stagehand-native/session.v3.jsonl', import.meta.url)
- const events = readFileSync(fixture, 'utf8').trimEnd().split('\n').map(line => JSON.parse(line))
- const request = events.find(event => event.type === 'browser-use/stagehand-llm-request')
- const result = events.find(event => event.type === 'browser-use/stagehand-llm-result')
- if (request === undefined || result === undefined) throw new Error('Stagehand recording lacks auxiliary inference events')
- ctx.on('agent/turn-stopping', async ({ agent }) => {
- if (agent.session.header.parentSession !== undefined) return
- const before = JSON.stringify(agent.session.deriveMessages())
- const requestData = structuredClone(request.data)
- requestData.request.sessionId = agent.session.id
- for (const message of requestData.request.messages) message.id = randomUUID()
- const logged = agent.session.append(request.type, requestData)
- await ctx.sessions.flush(agent.session)
- agent.session.append(result.type, { ...structuredClone(result.data), requestSeq: logged.seq })
- await ctx.sessions.flush(agent.session)
- if (JSON.stringify(agent.session.deriveMessages()) !== before) {
- throw new Error('Stagehand auxiliary events changed model-visible messages')
- }
- })
- }
|