opencode-node 0.0.0-next-15918 → 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # opencode-node
2
+
3
+ Reserved for OpenCode.
package/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict"
2
+
3
+ module.exports = {}
package/package.json CHANGED
@@ -1,31 +1,12 @@
1
1
  {
2
2
  "name": "opencode-node",
3
- "bin": {
4
- "opencode2-node": "./bin/opencode2-node.exe"
5
- },
6
- "scripts": {
7
- "postinstall": "node ./postinstall.mjs"
8
- },
9
- "version": "0.0.0-next-15918",
3
+ "version": "0.0.0",
4
+ "description": "Reserved for OpenCode.",
10
5
  "license": "MIT",
11
6
  "repository": {
12
7
  "type": "git",
13
8
  "url": "git+https://github.com/anomalyco/opencode.git"
14
9
  },
15
- "os": [
16
- "darwin",
17
- "linux",
18
- "win32"
19
- ],
20
- "cpu": [
21
- "arm64",
22
- "x64"
23
- ],
24
- "optionalDependencies": {
25
- "@opencode-ai/cli-node-windows-x64": "0.0.0-next-15918",
26
- "@opencode-ai/cli-node-windows-arm64": "0.0.0-next-15918",
27
- "@opencode-ai/cli-node-linux-arm64": "0.0.0-next-15918",
28
- "@opencode-ai/cli-node-linux-x64": "0.0.0-next-15918",
29
- "@opencode-ai/cli-node-darwin-arm64": "0.0.0-next-15918"
30
- }
31
- }
10
+ "main": "index.js",
11
+ "files": ["index.js", "README.md"]
12
+ }
@@ -1,5 +0,0 @@
1
- echo "Error: opencode-node's postinstall script was not run." >&2
2
- echo "" >&2
3
- echo "This occurs when installation scripts are disabled." >&2
4
- echo "Run the package postinstall script or reinstall with scripts enabled." >&2
5
- exit 1
package/postinstall.mjs DELETED
@@ -1,161 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import childProcess from "node:child_process"
4
- import fs from "node:fs"
5
- import os from "node:os"
6
- import path from "node:path"
7
- import { createRequire } from "node:module"
8
- import { fileURLToPath } from "node:url"
9
-
10
- const directory = path.dirname(fileURLToPath(import.meta.url))
11
- const require = createRequire(import.meta.url)
12
- const packageJson = JSON.parse(fs.readFileSync(path.join(directory, "package.json"), "utf8"))
13
- const command = Object.keys(packageJson.bin ?? {})[0]
14
- if (!command) throw new Error("OpenCode package does not declare a binary")
15
-
16
- const platform = { darwin: "darwin", linux: "linux", win32: "windows" }[os.platform()] ?? os.platform()
17
- const arch = { x64: "x64", arm64: "arm64", arm: "arm" }[os.arch()] ?? os.arch()
18
- const sourceBinary = platform === "windows" ? `${command}.exe` : command
19
- const targetBinary = path.resolve(directory, packageJson.bin[command])
20
- const dependencies = packageJson.optionalDependencies ?? {}
21
- const base = Object.keys(dependencies).find((name) => name.endsWith(`-${platform}-${arch}`))
22
- if (!base) throw new Error(`OpenCode does not provide a binary for ${platform}-${arch}`)
23
-
24
- function supportsAvx2() {
25
- if (arch !== "x64") return false
26
- if (platform === "linux") {
27
- try {
28
- return /(^|\s)avx2(\s|$)/i.test(fs.readFileSync("/proc/cpuinfo", "utf8"))
29
- } catch {
30
- return false
31
- }
32
- }
33
- if (platform === "darwin") {
34
- try {
35
- const result = childProcess.spawnSync("sysctl", ["-n", "hw.optional.avx2_0"], {
36
- encoding: "utf8",
37
- timeout: 1500,
38
- })
39
- return result.status === 0 && (result.stdout || "").trim() === "1"
40
- } catch {
41
- return false
42
- }
43
- }
44
- if (platform === "windows") {
45
- const script =
46
- '(Add-Type -MemberDefinition "[DllImport(""kernel32.dll"")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);" -Name Kernel32 -Namespace Win32 -PassThru)::IsProcessorFeaturePresent(40)'
47
- for (const executable of ["powershell.exe", "pwsh.exe", "pwsh", "powershell"]) {
48
- try {
49
- const result = childProcess.spawnSync(executable, ["-NoProfile", "-NonInteractive", "-Command", script], {
50
- encoding: "utf8",
51
- timeout: 3000,
52
- windowsHide: true,
53
- })
54
- if (result.status !== 0) continue
55
- const output = (result.stdout || "").trim().toLowerCase()
56
- if (output === "true" || output === "1") return true
57
- if (output === "false" || output === "0") return false
58
- } catch {
59
- continue
60
- }
61
- }
62
- }
63
- return false
64
- }
65
-
66
- function isMusl() {
67
- if (platform !== "linux") return false
68
- try {
69
- if (fs.existsSync("/etc/alpine-release")) return true
70
- const result = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" })
71
- return `${result.stdout || ""}${result.stderr || ""}`.toLowerCase().includes("musl")
72
- } catch {
73
- return false
74
- }
75
- }
76
-
77
- function packageNames() {
78
- const baseline = arch === "x64" && !supportsAvx2()
79
- const names =
80
- platform === "linux"
81
- ? isMusl()
82
- ? arch === "x64"
83
- ? baseline
84
- ? [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base]
85
- : [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`]
86
- : [`${base}-musl`, base]
87
- : arch === "x64"
88
- ? baseline
89
- ? [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`]
90
- : [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`]
91
- : [base, `${base}-musl`]
92
- : arch === "x64"
93
- ? baseline
94
- ? [`${base}-baseline`, base]
95
- : [base, `${base}-baseline`]
96
- : [base]
97
- return names.filter((name) => dependencies[name])
98
- }
99
-
100
- function copyBinary(source) {
101
- if (!fs.existsSync(source)) throw new Error(`Binary not found at ${source}`)
102
- fs.mkdirSync(path.dirname(targetBinary), { recursive: true })
103
- if (fs.existsSync(targetBinary)) fs.unlinkSync(targetBinary)
104
- try {
105
- fs.linkSync(source, targetBinary)
106
- } catch {
107
- fs.copyFileSync(source, targetBinary)
108
- }
109
- fs.chmodSync(targetBinary, 0o755)
110
- }
111
-
112
- function resolveBinary(name) {
113
- const packagePath = require.resolve(`${name}/package.json`)
114
- return path.join(path.dirname(packagePath), "bin", sourceBinary)
115
- }
116
-
117
- function installPackage(name) {
118
- const temp = fs.mkdtempSync(path.join(os.tmpdir(), "opencode-install-"))
119
- try {
120
- const result = childProcess.spawnSync(
121
- "npm",
122
- ["install", "--ignore-scripts", "--no-save", "--loglevel=error", "--prefix", temp, `${name}@${dependencies[name]}`],
123
- { stdio: "inherit", windowsHide: true },
124
- )
125
- if (result.status !== 0) return false
126
- copyBinary(path.join(temp, "node_modules", name, "bin", sourceBinary))
127
- return true
128
- } finally {
129
- fs.rmSync(temp, { recursive: true, force: true })
130
- }
131
- }
132
-
133
- function verifyBinary() {
134
- return (
135
- childProcess.spawnSync(targetBinary, ["--version"], {
136
- stdio: "ignore",
137
- windowsHide: true,
138
- }).status === 0
139
- )
140
- }
141
-
142
- function main() {
143
- const names = packageNames()
144
- for (const name of names) {
145
- try {
146
- copyBinary(resolveBinary(name))
147
- if (verifyBinary()) return
148
- } catch {
149
- if (installPackage(name) && verifyBinary()) return
150
- }
151
- }
152
-
153
- throw new Error(`Failed to install OpenCode. Try manually installing ${names.map((name) => JSON.stringify(name)).join(" or ")}.`)
154
- }
155
-
156
- try {
157
- main()
158
- } catch (error) {
159
- console.error(error instanceof Error ? error.message : String(error))
160
- process.exit(1)
161
- }