utils.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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 const settingsLanguageSelectSelector = '[data-action="settings-language"]'
  13. export function createSdk(directory?: string) {
  14. return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
  15. }
  16. export async function getWorktree() {
  17. const sdk = createSdk()
  18. const result = await sdk.path.get()
  19. const data = result.data
  20. if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${serverUrl}/path`)
  21. return data.worktree
  22. }
  23. export function dirSlug(directory: string) {
  24. return base64Encode(directory)
  25. }
  26. export function dirPath(directory: string) {
  27. return `/${dirSlug(directory)}`
  28. }
  29. export function sessionPath(directory: string, sessionID?: string) {
  30. return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}`
  31. }