@chunklib/agentic-v2 0.0.0-stage → 2.2.7

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/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ Agentic Proprietary Notice
2
+
3
+ The Agentic distribution is proprietary and is not offered under an
4
+ open-source license. No rights are granted to copy, modify, distribute,
5
+ sublicense, sell, or otherwise use the Agentic-specific distribution except
6
+ as separately agreed in writing.
7
+
8
+ Third-party and upstream-derived components remain subject to their own
9
+ licenses. See THIRD_PARTY_NOTICES.md and the accompanying license files.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 opencode
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,11 @@
1
+ # Third-Party Notices
2
+
3
+ Agentic V2 contains code derived from OpenCode. Those upstream-derived portions
4
+ remain available under the OpenCode MIT License; the complete upstream notice
5
+ is distributed as `LICENSE-OPENCODE` and remains in `LICENSE` in this source
6
+ workspace.
7
+
8
+ Agentic V2 also uses third-party packages. Their own package metadata and license
9
+ files govern those components. The Agentic V2 `UNLICENSED` package declaration
10
+ applies only to the Agentic distribution and does not replace, restrict, or
11
+ remove any third-party license or notice.
@@ -0,0 +1,5 @@
1
+ echo "Error: @chunklib/agentic-v2'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/package.json CHANGED
@@ -1,6 +1,28 @@
1
1
  {
2
2
  "name": "@chunklib/agentic-v2",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "bin": {
4
+ "agentic-v2": "./bin/agentic-v2.exe"
5
+ },
6
+ "opencodeSourceBinary": "opencode",
7
+ "scripts": {
8
+ "postinstall": "node ./postinstall.mjs"
9
+ },
10
+ "version": "2.2.7",
11
+ "license": "UNLICENSED",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/chunklib/agentic-v2.git"
15
+ },
16
+ "os": [
17
+ "darwin",
18
+ "linux",
19
+ "win32"
20
+ ],
21
+ "cpu": [
22
+ "arm64",
23
+ "x64"
24
+ ],
25
+ "optionalDependencies": {
26
+ "@chunklib/agentic-v2-darwin-arm64": "2.2.7"
27
+ }
6
28
  }
@@ -0,0 +1,193 @@
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("Agentic V2 package does not declare a binary")
15
+ const sourceCommand = packageJson.opencodeSourceBinary ?? command
16
+
17
+ const platform = { darwin: "darwin", linux: "linux", win32: "windows" }[os.platform()] ?? os.platform()
18
+ const nodeArch = { x64: "x64", arm64: "arm64", arm: "arm" }[os.arch()] ?? os.arch()
19
+ // x64 Node runs emulated on Windows ARM64, but PROCESSOR_IDENTIFIER still names the host CPU.
20
+ const arch =
21
+ platform === "windows" && nodeArch === "x64" && process.env.PROCESSOR_IDENTIFIER?.startsWith("ARM")
22
+ ? "arm64"
23
+ : nodeArch
24
+ // Windows cannot spawn npm's .cmd shim directly, so reuse the npm CLI that runs this script.
25
+ const npm = process.env.npm_execpath?.endsWith("npm-cli.js") ? [process.execPath, process.env.npm_execpath] : ["npm"]
26
+ const sourceBinary = platform === "windows" ? `${sourceCommand}.exe` : sourceCommand
27
+ const targetBinary = path.resolve(directory, packageJson.bin[command])
28
+ const dependencies = packageJson.optionalDependencies ?? {}
29
+ const base = Object.keys(dependencies).find((name) => name.endsWith(`-${platform}-${arch}`))
30
+ if (!base) throw new Error(`Agentic V2 does not provide a binary for ${platform}-${arch}`)
31
+
32
+ function supportsAvx2() {
33
+ if (arch !== "x64") return false
34
+ if (platform === "linux") {
35
+ try {
36
+ return /(^|\s)avx2(\s|$)/i.test(fs.readFileSync("/proc/cpuinfo", "utf8"))
37
+ } catch {
38
+ return false
39
+ }
40
+ }
41
+ if (platform === "darwin") {
42
+ try {
43
+ const result = childProcess.spawnSync("sysctl", ["-n", "hw.optional.avx2_0"], {
44
+ encoding: "utf8",
45
+ timeout: 1500,
46
+ })
47
+ return result.status === 0 && (result.stdout || "").trim() === "1"
48
+ } catch {
49
+ return false
50
+ }
51
+ }
52
+ if (platform === "windows") {
53
+ const script =
54
+ '(Add-Type -MemberDefinition "[DllImport(""kernel32.dll"")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);" -Name Kernel32 -Namespace Win32 -PassThru)::IsProcessorFeaturePresent(40)'
55
+ for (const executable of ["powershell.exe", "pwsh.exe", "pwsh", "powershell"]) {
56
+ try {
57
+ const result = childProcess.spawnSync(executable, ["-NoProfile", "-NonInteractive", "-Command", script], {
58
+ encoding: "utf8",
59
+ timeout: 3000,
60
+ windowsHide: true,
61
+ })
62
+ if (result.status !== 0) continue
63
+ const output = (result.stdout || "").trim().toLowerCase()
64
+ if (output === "true" || output === "1") return true
65
+ if (output === "false" || output === "0") return false
66
+ } catch {
67
+ continue
68
+ }
69
+ }
70
+ }
71
+ return false
72
+ }
73
+
74
+ function isMusl() {
75
+ if (platform !== "linux") return false
76
+ try {
77
+ if (fs.existsSync("/etc/alpine-release")) return true
78
+ const result = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" })
79
+ return `${result.stdout || ""}${result.stderr || ""}`.toLowerCase().includes("musl")
80
+ } catch {
81
+ return false
82
+ }
83
+ }
84
+
85
+ function packageNames() {
86
+ const baseline = arch === "x64" && !supportsAvx2()
87
+ const names =
88
+ platform === "linux"
89
+ ? isMusl()
90
+ ? arch === "x64"
91
+ ? baseline
92
+ ? [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base]
93
+ : [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`]
94
+ : [`${base}-musl`, base]
95
+ : arch === "x64"
96
+ ? baseline
97
+ ? [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`]
98
+ : [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`]
99
+ : [base, `${base}-musl`]
100
+ : arch === "x64"
101
+ ? baseline
102
+ ? [`${base}-baseline`, base]
103
+ : [base, `${base}-baseline`]
104
+ : [base]
105
+ // Windows 11 on ARM64 can still run the x64 binary under emulation when the native one fails.
106
+ const x64 = base.replace(/-arm64$/, "-x64")
107
+ const emulated = platform === "windows" && arch === "arm64" ? [`${x64}-baseline`, x64] : []
108
+ return [...names, ...emulated].filter((name) => dependencies[name])
109
+ }
110
+
111
+ function copyBinary(source) {
112
+ if (!fs.existsSync(source)) throw new Error(`Binary not found at ${source}`)
113
+ fs.mkdirSync(path.dirname(targetBinary), { recursive: true })
114
+ if (fs.existsSync(targetBinary)) {
115
+ try {
116
+ fs.unlinkSync(targetBinary)
117
+ } catch {}
118
+ }
119
+ try {
120
+ fs.linkSync(source, targetBinary)
121
+ } catch {
122
+ fs.copyFileSync(source, targetBinary)
123
+ }
124
+ fs.chmodSync(targetBinary, 0o755)
125
+ }
126
+
127
+ function resolveBinary(name) {
128
+ const packagePath = require.resolve(`${name}/package.json`)
129
+ // Package managers keep an older platform package when the matching version is not yet on the registry,
130
+ // which would silently install the previous release under the new launcher.
131
+ const version = JSON.parse(fs.readFileSync(packagePath, "utf8")).version
132
+ if (version !== dependencies[name]) throw new Error(`${name} is ${version}, expected ${dependencies[name]}`)
133
+ return path.join(path.dirname(packagePath), "bin", sourceBinary)
134
+ }
135
+
136
+ function installPackage(name) {
137
+ const temp = fs.mkdtempSync(path.join(os.tmpdir(), "opencode-install-"))
138
+ try {
139
+ const result = childProcess.spawnSync(
140
+ npm[0],
141
+ [
142
+ ...npm.slice(1),
143
+ "install",
144
+ "--ignore-scripts",
145
+ "--no-save",
146
+ "--loglevel=error",
147
+ // npm rejects a package built for another CPU, such as arm64 under emulated x64 Node, unless forced.
148
+ ...(name.includes(`-${platform}-${nodeArch}`) ? [] : ["--force"]),
149
+ "--prefix",
150
+ temp,
151
+ `${name}@${dependencies[name]}`,
152
+ ],
153
+ { stdio: "inherit", windowsHide: true },
154
+ )
155
+ if (result.status !== 0) return false
156
+ copyBinary(path.join(temp, "node_modules", name, "bin", sourceBinary))
157
+ return true
158
+ } finally {
159
+ fs.rmSync(temp, { recursive: true, force: true })
160
+ }
161
+ }
162
+
163
+ function verifyBinary() {
164
+ return (
165
+ childProcess.spawnSync(targetBinary, ["--version"], {
166
+ stdio: "ignore",
167
+ windowsHide: true,
168
+ }).status === 0
169
+ )
170
+ }
171
+
172
+ function main() {
173
+ const names = packageNames()
174
+ for (const name of names) {
175
+ try {
176
+ copyBinary(resolveBinary(name))
177
+ if (verifyBinary()) return
178
+ } catch {
179
+ if (installPackage(name) && verifyBinary()) return
180
+ }
181
+ }
182
+
183
+ throw new Error(
184
+ `Failed to install Agentic V2. Try manually installing ${names.map((name) => JSON.stringify(name)).join(" or ")}.`,
185
+ )
186
+ }
187
+
188
+ try {
189
+ main()
190
+ } catch (error) {
191
+ console.error(error instanceof Error ? error.message : String(error))
192
+ process.exit(1)
193
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.