local-commander-agent 0.3.49 → 0.3.50
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/CHANGELOG.md +6 -1
- package/package.json +4 -4
- package/runtime/JobHost.exe +0 -0
- package/runtime/LocalCommanderAgent.exe +0 -0
- package/runtime/OwnerBridge.exe +0 -0
- package/runtime/agent.mjs +8 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# Change history
|
|
2
2
|
|
|
3
|
+
## 0.3.50 - 2026-10-23
|
|
4
|
+
|
|
5
|
+
- Fixed: a computer paused because its identity changed (for example after a rename or a disk copy) now waits instead of stopping. After you click Trust at localcmd.app it reconnects within about a minute, with no restart.
|
|
6
|
+
- Includes everything in 0.3.49.
|
|
7
|
+
|
|
3
8
|
## 0.3.49 - 2026-10-23
|
|
4
9
|
|
|
5
10
|
- Commands without an explicit working folder no longer block file work across the approved drive. Specify cwd when folder serialization is needed.
|
|
6
|
-
- Work held by another task in the same folder
|
|
11
|
+
- Work held by another task in the same folder is refused after 20 seconds instead of disappearing behind a relay timeout. Nothing ran; retry after the other task finishes. Public asynchronous polling currently reports PRE_ACCEPTANCE_REJECTED for this refusal.
|
|
7
12
|
- Includes everything in 0.3.48.
|
|
8
13
|
|
|
9
14
|
## 0.3.48 - 2026-10-22
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "local-commander-agent",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.50",
|
|
4
4
|
"description": "Computer companion for Local Commander: connect AI clients to local files, approved commands and localhost. Requires https://localcmd.app.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"arm64"
|
|
17
17
|
],
|
|
18
18
|
"optionalDependencies": {
|
|
19
|
-
"local-commander-agent-darwin-arm64": "0.3.
|
|
20
|
-
"local-commander-agent-linux-arm64": "0.3.
|
|
21
|
-
"local-commander-agent-linux-x64": "0.3.
|
|
19
|
+
"local-commander-agent-darwin-arm64": "0.3.50",
|
|
20
|
+
"local-commander-agent-linux-arm64": "0.3.50",
|
|
21
|
+
"local-commander-agent-linux-x64": "0.3.50"
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|
|
24
24
|
"node": ">=20.0.0"
|
package/runtime/JobHost.exe
CHANGED
|
Binary file
|
|
Binary file
|
package/runtime/OwnerBridge.exe
CHANGED
|
Binary file
|
package/runtime/agent.mjs
CHANGED
|
@@ -47410,9 +47410,9 @@ function waitForMessage(socket, maxBytes, timeoutMs2, timeoutCode) {
|
|
|
47410
47410
|
cleanup();
|
|
47411
47411
|
reject(new RelayClientError(error62.code === "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH" ? "RELAY_FRAME_TOO_LARGE" : "RELAY_SOCKET_FAILED"));
|
|
47412
47412
|
};
|
|
47413
|
-
const onClose = () => {
|
|
47413
|
+
const onClose = (code, reason) => {
|
|
47414
47414
|
cleanup();
|
|
47415
|
-
reject(new RelayClientError("RELAY_SOCKET_CLOSED"));
|
|
47415
|
+
reject(new RelayClientError(code === 1008 && reason.toString("utf8") === "device_quarantined" ? "RELAY_DEVICE_QUARANTINED" : "RELAY_SOCKET_CLOSED"));
|
|
47416
47416
|
};
|
|
47417
47417
|
socket.once("message", onMessage);
|
|
47418
47418
|
socket.once("error", onError);
|
|
@@ -50840,9 +50840,10 @@ async function restoreContentAudit(input2, output2, key) {
|
|
|
50840
50840
|
}
|
|
50841
50841
|
|
|
50842
50842
|
// agent/src/main.ts
|
|
50843
|
-
var AGENT_VERSION2 = true ? "0.3.
|
|
50843
|
+
var AGENT_VERSION2 = true ? "0.3.50" : "0.3.2";
|
|
50844
50844
|
var NETWORK_PUBLIC_KEY = true ? "-----BEGIN PUBLIC KEY-----\nMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvmu+81vWtJBQDZNHcAIW\nzCSxpG+R9RBsum2df5mP2cOW+wyUDTpnYquFge1qgI5YYTF96j0xCyXL8B9FeNWs\n939opWNmv53j+CQlS4cEIQhBbZSCu0eC4icsVEzBhvf68MB+E668SOtZBcVTEnyh\n96PTcupxS10rQJBWDinbKBXRC2gvGYeu01rWa/nsrndy4vAYP5t3yQtdOC8e8mr0\n+2Mg2Qhiq+KiTCtDd+L9oXvoLqqJYbzUIveNGha25AWxF1Weblp0gOM87hell5gV\nK7q4ZLUq/wBRGYNmQRdLyV7/WRE1FFPSW21/SBZQ/5aU4UqJU/MjMcrJUrnRKngz\nYKmo0czkxS3N7Q2KVxomgR1AQSuQFKMrboZYKjShADp9RIYUxzs7cYg51Of5PnHh\n6Ax+VevDGfzjMD+yHuyxYZqCtX4OwgolJxz63UQbzKlris+8xb5lLYTbIuz90Pss\nn6HK/F5May25c6oMmS3nh/NsiZopL1OvdtWKTt1L4WlRAgMBAAE=\n-----END PUBLIC KEY-----\n" : "";
|
|
50845
50845
|
var AI_CONNECTION_SHIPPED = false;
|
|
50846
|
+
var QUARANTINE_RETRY_MS = 6e4;
|
|
50846
50847
|
function processAlive(pid) {
|
|
50847
50848
|
if (!Number.isInteger(pid) || pid <= 0) return false;
|
|
50848
50849
|
try {
|
|
@@ -50988,7 +50989,7 @@ async function runAgent(options) {
|
|
|
50988
50989
|
try {
|
|
50989
50990
|
while (!options.signal.aborted) {
|
|
50990
50991
|
computerName = await readComputerName();
|
|
50991
|
-
let ready;
|
|
50992
|
+
let ready, wait = delay4;
|
|
50992
50993
|
const readyPromise = new Promise((resolve) => {
|
|
50993
50994
|
ready = resolve;
|
|
50994
50995
|
});
|
|
@@ -51077,6 +51078,8 @@ async function runAgent(options) {
|
|
|
51077
51078
|
ready();
|
|
51078
51079
|
monitor(() => options.monitor?.connectionFailed(error62));
|
|
51079
51080
|
if (error62 instanceof RelayClientError && ["RELAY_CONNECT_FAILED", "RELAY_CONNECT_CLOSED", "RELAY_CONNECT_TIMEOUT", "RELAY_HANDSHAKE_TIMEOUT"].includes(error62.code)) {
|
|
51081
|
+
} else if (error62 instanceof RelayClientError && error62.code === "RELAY_DEVICE_QUARANTINED") {
|
|
51082
|
+
wait = Math.max(delay4, QUARANTINE_RETRY_MS);
|
|
51080
51083
|
} else throw error62;
|
|
51081
51084
|
} finally {
|
|
51082
51085
|
connectivity?.close();
|
|
@@ -51094,7 +51097,7 @@ async function runAgent(options) {
|
|
|
51094
51097
|
await bridge.disconnected();
|
|
51095
51098
|
connection = null;
|
|
51096
51099
|
}
|
|
51097
|
-
if (!options.signal.aborted) await aborted2(options.signal,
|
|
51100
|
+
if (!options.signal.aborted) await aborted2(options.signal, wait);
|
|
51098
51101
|
}
|
|
51099
51102
|
} finally {
|
|
51100
51103
|
try {
|