Skip to content

Commit ee23043

Browse files
BrendonovichHona
andauthored
Remove CLI from electron app (#17803)
Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com>
1 parent 9c1c061 commit ee23043

38 files changed

+284
-521
lines changed

bun.lock

Lines changed: 29 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@
7171
"@solidjs/router": "0.15.4",
7272
"@solidjs/start": "https://pkg.pr.new/@solidjs/start@dfb2020",
7373
"solid-js": "1.9.10",
74-
"vite-plugin-solid": "2.11.10"
74+
"vite-plugin-solid": "2.11.10",
75+
"@lydell/node-pty": "1.2.0-beta.10"
7576
}
7677
},
7778
"devDependencies": {

packages/app/src/components/terminal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ export const Terminal = (props: TerminalProps) => {
521521
next.searchParams.set("cursor", String(seek))
522522
next.protocol = next.protocol === "https:" ? "wss:" : "ws:"
523523
if (!sameOrigin && password) {
524+
next.searchParams.set("auth_token", btoa(`${username}:${password}`))
524525
// For same-origin requests, let the browser reuse the page's existing auth.
525526
next.username = username
526527
next.password = password

packages/desktop-electron/electron-builder.config.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ const getBase = (): Configuration => ({
3434
},
3535
files: ["out/**/*", "resources/**/*"],
3636
extraResources: [
37-
{
38-
from: "resources/",
39-
to: "",
40-
filter: ["opencode-cli*"],
41-
},
4237
{
4338
from: "native/",
4439
to: "native/",

packages/desktop-electron/electron.vite.config.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { defineConfig } from "electron-vite"
22
import appPlugin from "@opencode-ai/app/vite"
3+
import * as fs from "node:fs/promises"
34

45
const channel = (() => {
56
const raw = process.env.OPENCODE_CHANNEL
67
if (raw === "dev" || raw === "beta" || raw === "prod") return raw
78
return "dev"
89
})()
910

11+
const OPENCODE_SERVER_DIST = "../opencode/dist/node"
12+
13+
const nodePtyPkg = `@lydell/node-pty-${process.platform}-${process.arch}`
14+
1015
export default defineConfig({
1116
main: {
1217
define: {
@@ -16,7 +21,33 @@ export default defineConfig({
1621
rollupOptions: {
1722
input: { index: "src/main/index.ts" },
1823
},
24+
externalizeDeps: { include: [nodePtyPkg] },
1925
},
26+
plugins: [
27+
{
28+
name: "opencode:node-pty-narrower",
29+
enforce: "pre",
30+
resolveId(s) {
31+
if (s === "@lydell/node-pty") return nodePtyPkg
32+
},
33+
},
34+
{
35+
name: "opencode:virtual-server-module",
36+
enforce: "pre",
37+
resolveId(id) {
38+
if (id === "virtual:opencode-server") return this.resolve(`${OPENCODE_SERVER_DIST}/node.js`)
39+
},
40+
},
41+
{
42+
name: "opencode:copy-server-assets",
43+
async writeBundle() {
44+
for (const l of await fs.readdir(OPENCODE_SERVER_DIST)) {
45+
if (!l.endsWith(".wasm")) continue
46+
await fs.writeFile(`./out/main/chunks/${l}`, await fs.readFile(`${OPENCODE_SERVER_DIST}/${l}`))
47+
}
48+
},
49+
},
50+
],
2051
},
2152
preload: {
2253
build: {

packages/desktop-electron/package.json

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"typecheck": "tsgo -b",
1414
"predev": "bun ./scripts/predev.ts",
1515
"dev": "electron-vite dev",
16-
"prebuild": "bun ./scripts/copy-icons.ts",
16+
"prebuild": "bun ./scripts/prebuild.ts",
1717
"build": "electron-vite build",
1818
"preview": "electron-vite preview",
1919
"package": "electron-builder --config electron-builder.config.ts",
@@ -24,31 +24,42 @@
2424
},
2525
"main": "./out/main/index.js",
2626
"dependencies": {
27-
"@opencode-ai/app": "workspace:*",
28-
"@opencode-ai/ui": "workspace:*",
29-
"@solid-primitives/i18n": "2.2.1",
30-
"@solid-primitives/storage": "catalog:",
31-
"@solidjs/meta": "catalog:",
32-
"@solidjs/router": "0.15.4",
3327
"effect": "catalog:",
3428
"electron-context-menu": "4.1.2",
3529
"electron-log": "^5",
3630
"electron-store": "^10",
3731
"electron-updater": "^6",
3832
"electron-window-state": "^5.0.3",
39-
"marked": "^15",
40-
"solid-js": "catalog:",
41-
"tree-kill": "^1.2.2"
33+
"marked": "^15"
4234
},
4335
"devDependencies": {
4436
"@actions/artifact": "4.0.0",
37+
"@lydell/node-pty": "catalog:",
38+
"@opencode-ai/app": "workspace:*",
39+
"@opencode-ai/ui": "workspace:*",
40+
"@solid-primitives/i18n": "2.2.1",
41+
"@solid-primitives/storage": "catalog:",
42+
"@solidjs/meta": "catalog:",
43+
"@solidjs/router": "0.15.4",
4544
"@types/bun": "catalog:",
4645
"@types/node": "catalog:",
4746
"@typescript/native-preview": "catalog:",
47+
"@valibot/to-json-schema": "1.6.0",
4848
"electron": "40.4.1",
4949
"electron-builder": "^26",
5050
"electron-vite": "^5",
51+
"solid-js": "catalog:",
52+
"sury": "11.0.0-alpha.4",
5153
"typescript": "~5.6.2",
52-
"vite": "catalog:"
54+
"vite": "catalog:",
55+
"zod-openapi": "5.4.6"
56+
},
57+
"optionalDependencies": {
58+
"@lydell/node-pty-darwin-arm64": "1.2.0-beta.10",
59+
"@lydell/node-pty-darwin-x64": "1.2.0-beta.10",
60+
"@lydell/node-pty-linux-arm64": "1.2.0-beta.10",
61+
"@lydell/node-pty-linux-x64": "1.2.0-beta.10",
62+
"@lydell/node-pty-win32-arm64": "1.2.0-beta.10",
63+
"@lydell/node-pty-win32-x64": "1.2.0-beta.10"
5364
}
5465
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env bun
2+
import { $ } from "bun"
3+
4+
import { resolveChannel } from "./utils"
5+
6+
const channel = resolveChannel()
7+
await $`bun ./scripts/copy-icons.ts ${channel}`
8+
9+
await $`cd ../opencode && bun script/build-node.ts`
Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
import { $ } from "bun"
22

3-
import { copyBinaryToSidecarFolder, getCurrentSidecar, windowsify } from "./utils"
4-
53
await $`bun ./scripts/copy-icons.ts ${process.env.OPENCODE_CHANNEL ?? "dev"}`
64

7-
const RUST_TARGET = Bun.env.RUST_TARGET
8-
9-
const sidecarConfig = getCurrentSidecar(RUST_TARGET)
10-
11-
const binaryPath = windowsify(`../opencode/dist/${sidecarConfig.ocBinary}/bin/opencode`)
12-
13-
await (sidecarConfig.ocBinary.includes("-baseline")
14-
? $`cd ../opencode && bun run build --single --baseline`
15-
: $`cd ../opencode && bun run build --single`)
16-
17-
await copyBinaryToSidecarFolder(binaryPath, RUST_TARGET)
5+
await $`cd ../opencode && bun script/build-node.ts`
Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
#!/usr/bin/env bun
2-
import { $ } from "bun"
3-
42
import { Script } from "@opencode-ai/script"
5-
import { copyBinaryToSidecarFolder, getCurrentSidecar, resolveChannel, windowsify } from "./utils"
63

7-
const channel = resolveChannel()
8-
await $`bun ./scripts/copy-icons.ts ${channel}`
4+
await import("./prebuild")
95

106
const pkg = await Bun.file("./package.json").json()
117
pkg.version = Script.version
128
await Bun.write("./package.json", JSON.stringify(pkg, null, 2) + "\n")
139
console.log(`Updated package.json version to ${Script.version}`)
14-
15-
const sidecarConfig = getCurrentSidecar()
16-
const artifact = process.env.OPENCODE_CLI_ARTIFACT ?? "opencode-cli"
17-
18-
const dir = "resources/opencode-binaries"
19-
20-
await $`mkdir -p ${dir}`
21-
await $`gh run download ${process.env.GITHUB_RUN_ID} -n ${artifact}`.cwd(dir)
22-
23-
await copyBinaryToSidecarFolder(windowsify(`${dir}/${sidecarConfig.ocBinary}/bin/opencode`))
24-
25-
await $`rm -rf ${dir}`

0 commit comments

Comments
 (0)