diff --git a/packages/opencode/src/app/app.ts b/packages/opencode/src/app/app.ts index ac442359..873554d9 100644 --- a/packages/opencode/src/app/app.ts +++ b/packages/opencode/src/app/app.ts @@ -46,7 +46,7 @@ export namespace App { const data = path.join( Global.Path.data, "project", - git ? git.split(path.sep).filter(Boolean).join("-") : "global", + git ? directory(git) : "global", ) const stateFile = Bun.file(path.join(data, APP_JSON)) const state = (await stateFile.json().catch(() => ({}))) as { @@ -133,4 +133,13 @@ export namespace App { }), ) } + + function directory(input: string): string { + return input + .split(path.sep) + .filter(Boolean) + .join("-") + .replace(/[^A-Za-z0-9_]/g, "-") + } } + diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts index d5890e8d..50fa5ccc 100644 --- a/packages/opencode/src/index.ts +++ b/packages/opencode/src/index.ts @@ -4,6 +4,7 @@ import { Server } from "./server/server" import fs from "fs/promises" import path from "path" import { Share } from "./share/share" +import url from "node:url" import { Global } from "./global" import yargs from "yargs" import { hideBin } from "yargs/helpers" @@ -63,7 +64,7 @@ const cli = yargs(hideBin(process.argv)) const server = Server.listen() let cmd = ["go", "run", "./main.go"] - let cwd = new URL("../../tui/cmd/opencode", import.meta.url).pathname + let cwd = url.fileURLToPath(new URL("../../tui/cmd/opencode", import.meta.url)) if (Bun.embeddedFiles.length > 0) { const blob = Bun.embeddedFiles[0] as File const binary = path.join(Global.Path.cache, "tui", blob.name) diff --git a/packages/opencode/src/util/log.ts b/packages/opencode/src/util/log.ts index a6691d5d..7db81de0 100644 --- a/packages/opencode/src/util/log.ts +++ b/packages/opencode/src/util/log.ts @@ -19,7 +19,7 @@ export namespace Log { await fs.mkdir(dir, { recursive: true }) cleanup(dir) if (options.print) return - logpath = path.join(dir, new Date().toISOString().split(".")[0] + ".log") + logpath = path.join(dir, new Date().toISOString().split(".")[0].replace(/:/g, "") + ".log") const logfile = Bun.file(logpath) await fs.truncate(logpath).catch(() => {}) const writer = logfile.writer() diff --git a/packages/tui/internal/theme/loader.go b/packages/tui/internal/theme/loader.go index 424dc5f5..7df46b7f 100644 --- a/packages/tui/internal/theme/loader.go +++ b/packages/tui/internal/theme/loader.go @@ -6,6 +6,7 @@ import ( "fmt" "image/color" "os" + "path" "path/filepath" "strings" @@ -42,7 +43,7 @@ func LoadThemesFromJSON() error { continue } themeName := strings.TrimSuffix(entry.Name(), ".json") - data, err := themesFS.ReadFile(filepath.Join("themes", entry.Name())) + data, err := themesFS.ReadFile(path.Join("themes", entry.Name())) if err != nil { return fmt.Errorf("failed to read theme file %s: %w", entry.Name(), err) } diff --git a/scripts/hooks.bat b/scripts/hooks.bat new file mode 100644 index 00000000..52d69010 --- /dev/null +++ b/scripts/hooks.bat @@ -0,0 +1,16 @@ +@echo off + +if not exist ".git" ( + exit /b 0 +) + +if not exist ".git\hooks" ( + mkdir ".git\hooks" +) + +( + echo #!/bin/sh + echo bun run typecheck +) > ".git\hooks\pre-push" + +echo ✅ Pre-push hook installed