Skip to content

Commit 9678ca1

Browse files
committed
Merge remote-tracking branch 'origin/replatform/tauri-shell' into cx/openwork-tauri-pr2
# Conflicts: # packages/desktop-shell/scripts/prepare-runtime.js # packages/desktop-shell/scripts/smoke-runtime.js
2 parents 04d80b9 + 225f157 commit 9678ca1

3 files changed

Lines changed: 46 additions & 8 deletions

File tree

packages/desktop-shell/scripts/prepare-runtime.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ const target = desktopTarget();
3636
const skipBuild = process.env.OPENWORK_DESKTOP_SKIP_BUILD === '1';
3737

3838
const npm = process.env.npm_execpath;
39-
if (!npm) throw new Error('npm_execpath is unavailable. Run through npm.');
39+
if (!skipBuild && !npm) {
40+
throw new Error('npm_execpath is unavailable. Run through npm.');
41+
}
4042

4143
if (!skipBuild) {
4244
execFileSync(process.execPath, [npm, 'run', 'build', '--', '--cli-only'], {
@@ -87,6 +89,7 @@ fs.mkdirSync(libDir, { recursive: true });
8789
fs.writeFileSync(path.join(packageRoot, '.gitkeep'), '');
8890
fs.mkdirSync(binDir, { recursive: true });
8991
copyDirectory(distDir, libDir);
92+
installRuntimeDependencies(libDir, target);
9093
await installNodeRuntime(nodeDir, target);
9194
copyDocumentTools();
9295
await installUvRuntime(path.join(toolsDir, 'uv'), target);
@@ -321,6 +324,25 @@ function findFile(directory, name) {
321324
return undefined;
322325
}
323326

327+
function installRuntimeDependencies(destination, desktopTarget) {
328+
const [platform, arch] = desktopTarget.split('-');
329+
const command = npm ? process.execPath : 'npm';
330+
const args = [
331+
...(npm ? [npm] : []),
332+
'install',
333+
'--omit=dev',
334+
'--ignore-scripts',
335+
'--no-package-lock',
336+
'--no-audit',
337+
'--no-fund',
338+
'--os',
339+
platform,
340+
'--cpu',
341+
arch,
342+
];
343+
execFileSync(command, args, { cwd: destination, stdio: 'inherit' });
344+
}
345+
324346
function writeLaunchers(desktopTarget) {
325347
if (desktopTarget.startsWith('win32-')) {
326348
fs.writeFileSync(

packages/desktop-shell/scripts/smoke-runtime.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,20 @@ function verifyRuntimeIntegrity() {
208208
],
209209
{ stdio: 'pipe', timeout: 180_000 },
210210
);
211+
for (const packageName of [
212+
'@lydell/node-pty',
213+
'@qwen-code/audio-capture',
214+
'@teddyzhu/clipboard',
215+
'sharp',
216+
]) {
217+
execFileSync(
218+
nodePath,
219+
[
220+
'--input-type=module',
221+
'--eval',
222+
`await import(${JSON.stringify(packageName)})`,
223+
],
224+
{ cwd: path.join(runtimeRoot, 'lib'), stdio: 'pipe' },
225+
);
226+
}
211227
}

packages/desktop-shell/src-tauri/src/local_control.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,8 @@ fn rewrite_request(
344344
}
345345
let header = std::str::from_utf8(header_bytes).map_err(|_| 400_u16)?;
346346
let public_authority = public_origin.strip_prefix("http://").ok_or(500_u16)?;
347-
let pair_protocol = format!("openwork-bearer.{}", URL_SAFE_NO_PAD.encode(pair_token));
348-
let runtime_protocol = format!("openwork-bearer.{}", URL_SAFE_NO_PAD.encode(runtime_token));
347+
let pair_protocol = format!("qwen-bearer.{}", URL_SAFE_NO_PAD.encode(pair_token));
348+
let runtime_protocol = format!("qwen-bearer.{}", URL_SAFE_NO_PAD.encode(runtime_token));
349349
let websocket = header.lines().any(|line| {
350350
line.split_once(':').is_some_and(|(name, value)| {
351351
name.eq_ignore_ascii_case("upgrade") && value.trim().eq_ignore_ascii_case("websocket")
@@ -387,7 +387,7 @@ fn rewrite_request(
387387
for protocol in value.split(',').map(str::trim) {
388388
if protocol == pair_protocol {
389389
protocols.push(runtime_protocol.as_str());
390-
} else if protocol.contains("openwork-bearer.") {
390+
} else if protocol.contains("qwen-bearer.") {
391391
return Err(403);
392392
} else {
393393
protocols.push(protocol);
@@ -927,7 +927,7 @@ mod tests {
927927
let pair = URL_SAFE_NO_PAD.encode("pair-token");
928928
let runtime = URL_SAFE_NO_PAD.encode("runtime-token");
929929
let request = format!(
930-
"GET /acp HTTP/1.1\r\nHost: 192.168.1.10:49152\r\nOrigin: http://192.168.1.10:49152\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Protocol: qwen-ws, openwork-bearer.{pair}\r\n\r\n"
930+
"GET /acp HTTP/1.1\r\nHost: 192.168.1.10:49152\r\nOrigin: http://192.168.1.10:49152\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Protocol: qwen-ws, qwen-bearer.{pair}\r\n\r\n"
931931
);
932932
let rewritten = rewrite_request(
933933
request.as_bytes(),
@@ -940,12 +940,12 @@ mod tests {
940940
)
941941
.expect("rewrite");
942942
let rewritten = String::from_utf8(rewritten).expect("utf8");
943-
assert!(rewritten.contains(&format!("openwork-bearer.{runtime}")));
944-
assert!(!rewritten.contains(&format!("openwork-bearer.{pair}")));
943+
assert!(rewritten.contains(&format!("qwen-bearer.{runtime}")));
944+
assert!(!rewritten.contains(&format!("qwen-bearer.{pair}")));
945945
assert!(rewritten.contains("Connection: Upgrade\r\n"));
946946

947947
let request = format!(
948-
"GET /acp HTTP/1.1\r\nHost: 192.168.1.10:49152\r\nOrigin: http://192.168.1.10:49152\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Protocol: leak-openwork-bearer.{pair}, openwork-bearer.{pair}\r\n\r\n"
948+
"GET /acp HTTP/1.1\r\nHost: 192.168.1.10:49152\r\nOrigin: http://192.168.1.10:49152\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Protocol: leak-qwen-bearer.{pair}, qwen-bearer.{pair}\r\n\r\n"
949949
);
950950
assert_eq!(
951951
rewrite_request(

0 commit comments

Comments
 (0)