headless-driver.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/env node
  2. /** Snapshot-only Loader driver: stream one fixture turn as canonical JSONL. */
  3. import type { Context } from '@deepseek-ai/cordis'
  4. import { boot, installFailLoud, loadEnv, resolveConfigPath } from '@deepseek-ai/dsh-app-boot'
  5. import { runFixtureTurn } from '@deepseek-ai/dsh-loader-smoke'
  6. import type { SessionEvent } from '@deepseek-ai/dsh-session'
  7. const NAME = 'headless-test-driver'
  8. const [configPath, ...taskParts] = process.argv.slice(2)
  9. if (configPath === undefined || taskParts.length === 0 || taskParts.every(part => part.trim() === '')) {
  10. throw new Error(`${NAME}: expected <config-path> <task...>`)
  11. }
  12. const uninstallFailLoud = installFailLoud(NAME)
  13. let ctx: Context | undefined
  14. try {
  15. loadEnv(NAME)
  16. ctx = await boot(NAME, resolveConfigPath(configPath, undefined))
  17. const result = await runFixtureTurn(ctx, {
  18. task: taskParts.join(' '),
  19. onEvent: (sessionId: string, event: SessionEvent) => {
  20. process.stdout.write(`${JSON.stringify({ type: 'session_event', sessionId, event })}\n`)
  21. },
  22. })
  23. process.stdout.write(`${JSON.stringify(result)}\n`)
  24. } catch (error: unknown) {
  25. process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`)
  26. process.exitCode = 1
  27. } finally {
  28. await ctx?.fiber.dispose()
  29. uninstallFailLoud()
  30. }