@onescience/onecode 1.14.50-202607010646 → 1.14.50-202607011517

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/postinstall.mjs +21 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onescience/onecode",
3
- "version": "1.14.50-202607010646",
3
+ "version": "1.14.50-202607011517",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "OneScience AI coding agent for the terminal.",
package/postinstall.mjs CHANGED
@@ -89,33 +89,47 @@ function downloadFile(url, dest) {
89
89
  })
90
90
  }
91
91
 
92
+ function moveDir(src, dest) {
93
+ fs.rmSync(dest, { recursive: true, force: true })
94
+ fs.mkdirSync(path.dirname(dest), { recursive: true })
95
+ try {
96
+ fs.renameSync(src, dest)
97
+ } catch (err) {
98
+ if (err?.code !== "EXDEV") throw err
99
+ fs.cpSync(src, dest, { recursive: true })
100
+ fs.rmSync(src, { recursive: true, force: true })
101
+ }
102
+ }
103
+
92
104
  async function downloadAndExtractPlatformPackage() {
93
105
  const packageName = platformPackageName()
94
106
  const version = ownVersion()
95
107
  const url = platformTgzUrl(version)
96
108
  const nodeModulesDir = path.join(__dirname, "node_modules")
97
109
  const targetDir = path.join(nodeModulesDir, packageName)
98
- const tmpTgz = path.join(os.tmpdir(), `${packageName}-${version}.tgz`)
99
- const tmpExtract = path.join(os.tmpdir(), `${packageName}-${version}-extract`)
110
+ // Use a work dir beside the package so extract/rename stays on the same filesystem
111
+ // (/tmp is often a separate mount and rename → EXDEV for global npm installs).
112
+ const workDir = path.join(__dirname, ".postinstall-work")
113
+ const tmpTgz = path.join(workDir, `${packageName}-${version}.tgz`)
114
+ const tmpExtract = path.join(workDir, "extract")
100
115
 
101
116
  console.log(`Downloading ${packageName} from ${url}`)
117
+ fs.rmSync(workDir, { recursive: true, force: true })
118
+ fs.mkdirSync(workDir, { recursive: true })
102
119
  await downloadFile(url, tmpTgz)
103
120
  console.log(`Downloaded ${path.basename(tmpTgz)} (${(fs.statSync(tmpTgz).size / 1024 / 1024).toFixed(1)} MB)`)
104
121
 
105
- fs.rmSync(tmpExtract, { recursive: true, force: true })
106
122
  fs.mkdirSync(tmpExtract, { recursive: true })
107
123
  execSync(`tar -xzf "${tmpTgz}"`, { cwd: tmpExtract, stdio: "pipe" })
108
- fs.unlinkSync(tmpTgz)
109
124
 
110
125
  const extractedRoot = path.join(tmpExtract, "package")
111
126
  if (!fs.existsSync(extractedRoot)) {
112
127
  throw new Error(`Expected package/ inside tgz downloaded from ${url}`)
113
128
  }
114
129
 
115
- fs.rmSync(targetDir, { recursive: true, force: true })
116
130
  fs.mkdirSync(nodeModulesDir, { recursive: true })
117
- fs.renameSync(extractedRoot, targetDir)
118
- fs.rmSync(tmpExtract, { recursive: true, force: true })
131
+ moveDir(extractedRoot, targetDir)
132
+ fs.rmSync(workDir, { recursive: true, force: true })
119
133
 
120
134
  const binaryName = detectPlatformAndArch().platform === "windows" ? `${product}.exe` : product
121
135
  const binaryPath = path.join(targetDir, "bin", binaryName)