mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 05:43:55 +00:00
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
|
|
import { base64Encode, checksum } from "@opencode-ai/util/encode"
|
|
|
|
export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"
|
|
export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
|
|
|
|
export const serverUrl = `http://${serverHost}:${serverPort}`
|
|
export const serverName = `${serverHost}:${serverPort}`
|
|
|
|
const localHosts = ["127.0.0.1", "localhost"]
|
|
|
|
const serverLabels = (() => {
|
|
const url = new URL(serverUrl)
|
|
if (!localHosts.includes(url.hostname)) return [serverName]
|
|
return localHosts.map((host) => `${host}:${url.port}`)
|
|
})()
|
|
|
|
export const serverNames = [...new Set(serverLabels)]
|
|
|
|
export const serverUrls = serverNames.map((name) => `http://${name}`)
|
|
|
|
const escape = (value: string) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
|
|
|
export const serverNamePattern = new RegExp(`(?:${serverNames.map(escape).join("|")})`)
|
|
|
|
export const modKey = process.platform === "darwin" ? "Meta" : "Control"
|
|
export const terminalToggleKey = "Control+Backquote"
|
|
|
|
export function createSdk(directory?: string) {
|
|
return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
|
|
}
|
|
|
|
export async function resolveDirectory(directory: string) {
|
|
return createSdk(directory)
|
|
.path.get()
|
|
.then((x) => x.data?.directory ?? directory)
|
|
}
|
|
|
|
export async function getWorktree() {
|
|
const sdk = createSdk()
|
|
const result = await sdk.path.get()
|
|
const data = result.data
|
|
if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${serverUrl}/path`)
|
|
return data.worktree
|
|
}
|
|
|
|
export function dirSlug(directory: string) {
|
|
return base64Encode(directory)
|
|
}
|
|
|
|
export function dirPath(directory: string) {
|
|
return `/${dirSlug(directory)}`
|
|
}
|
|
|
|
export function sessionPath(directory: string, sessionID?: string) {
|
|
return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}`
|
|
}
|
|
|
|
export function workspacePersistKey(directory: string, key: string) {
|
|
const head = (directory.slice(0, 12) || "workspace").replace(/[^a-zA-Z0-9._-]/g, "-")
|
|
const sum = checksum(directory) ?? "0"
|
|
return `opencode.workspace.${head}.${sum}.dat:workspace:${key}`
|
|
}
|