utils.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
  2. import { base64Encode } from "@opencode-ai/util/encode"
  3. export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
  4. export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
  5. export const serverUrl = `http://${serverHost}:${serverPort}`
  6. export const serverName = `${serverHost}:${serverPort}`
  7. export const modKey = process.platform === "darwin" ? "Meta" : "Control"
  8. export const terminalToggleKey = "Control+Backquote"
  9. export const promptSelector = '[data-component="prompt-input"]'
  10. export const terminalSelector = '[data-component="terminal"]'
  11. export const modelVariantCycleSelector = '[data-action="model-variant-cycle"]'
  12. export function createSdk(directory?: string) {
  13. return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
  14. }
  15. export async function getWorktree() {
  16. const sdk = createSdk()
  17. const result = await sdk.path.get()
  18. const data = result.data
  19. if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${serverUrl}/path`)
  20. return data.worktree
  21. }
  22. export function dirSlug(directory: string) {
  23. return base64Encode(directory)
  24. }
  25. export function dirPath(directory: string) {
  26. return `/${dirSlug(directory)}`
  27. }
  28. export function sessionPath(directory: string, sessionID?: string) {
  29. return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}`
  30. }