local-commander-agent 0.3.43 → 0.3.44
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 +5 -0
- package/package.json +1 -1
- package/runtime/JobHost.exe +0 -0
- package/runtime/LocalCommanderAgent.exe +0 -0
- package/runtime/OwnerBridge.exe +0 -0
- package/runtime/agent.mjs +9 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Change history
|
|
2
2
|
|
|
3
|
+
## 0.3.44 - 2026-10-22
|
|
4
|
+
|
|
5
|
+
- New: when you set up a computer, the window that asks what may be used now shows the Local Commander account the computer joined. Someone helping you can approve your computer from their own phone with the code you read to them. Continue only if you know that account; Cancel shares nothing.
|
|
6
|
+
- Includes everything in 0.3.43.
|
|
7
|
+
|
|
3
8
|
## 0.3.43 - 2026-10-21
|
|
4
9
|
|
|
5
10
|
- Faster: file search on Windows reads files in batches through one helper process instead of starting one per file. A search over 300 files now takes well under a second. Results are unchanged.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "local-commander-agent",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.44",
|
|
4
4
|
"description": "Windows 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": {
|
package/runtime/JobHost.exe
CHANGED
|
Binary file
|
|
Binary file
|
package/runtime/OwnerBridge.exe
CHANGED
|
Binary file
|
package/runtime/agent.mjs
CHANGED
|
@@ -27330,7 +27330,7 @@ async function choosePosixFolder() {
|
|
|
27330
27330
|
}
|
|
27331
27331
|
async function choosePosixAccess() {
|
|
27332
27332
|
return terminal2(async (ask) => {
|
|
27333
|
-
if (process.platform === "darwin") await ask("
|
|
27333
|
+
if (process.platform === "darwin") await ask("Local Commander runs each command as its own launchd job and stops that job's processes when the command ends; work handed to other services is not stopped. Press Enter to review access: ");
|
|
27334
27334
|
const choice = await ask("Local Commander access\n1. One folder: read and write files\n2. Full Access: account capabilities across this computer, including commands and localhost\nEnter 1 or 2 (empty cancels): ");
|
|
27335
27335
|
if (choice !== "1" && choice !== "2") return null;
|
|
27336
27336
|
const folder = choice === "2" ? "/" : await ask("Absolute folder path: ");
|
|
@@ -28370,11 +28370,14 @@ var WindowsPrivateStore = class _WindowsPrivateStore {
|
|
|
28370
28370
|
}
|
|
28371
28371
|
/** Replace scope only after an explicit local dialog; updates never call this implicitly. */
|
|
28372
28372
|
async configureAccess() {
|
|
28373
|
+
let account = "";
|
|
28373
28374
|
const expected = await this.run(() => this.withLock(async () => {
|
|
28374
|
-
|
|
28375
|
+
const enrollment = (await this.readState())?.enrollment;
|
|
28376
|
+
if (!enrollment) throw fail2("ENROLLMENT_REQUIRED");
|
|
28377
|
+
account = enrollment.accountEmail;
|
|
28375
28378
|
return this.rawHash();
|
|
28376
28379
|
}));
|
|
28377
|
-
const decision = await this.chooseAccess();
|
|
28380
|
+
const decision = await this.chooseAccess(account);
|
|
28378
28381
|
if (decision === null) return null;
|
|
28379
28382
|
const selected = parseAccessSelection(decision);
|
|
28380
28383
|
if (!selected) return null;
|
|
@@ -28417,9 +28420,9 @@ var WindowsPrivateStore = class _WindowsPrivateStore {
|
|
|
28417
28420
|
return structuredClone(workspaces);
|
|
28418
28421
|
}));
|
|
28419
28422
|
}
|
|
28420
|
-
chooseAccess() {
|
|
28423
|
+
chooseAccess(account) {
|
|
28421
28424
|
if (this.posix) return this.run(() => choosePosixAccess());
|
|
28422
|
-
return this.run(async () => parseAccessSelection(await _WindowsPrivateStore.invoke(this.bridge, "choose-access", {}, 24e4, true)));
|
|
28425
|
+
return this.run(async () => parseAccessSelection(await _WindowsPrivateStore.invoke(this.bridge, "choose-access", { data: Buffer.from(account, "utf8").toString("base64") }, 24e4, true)));
|
|
28423
28426
|
}
|
|
28424
28427
|
loadPermissionHistory() {
|
|
28425
28428
|
return this.run(async () => structuredClone((await this.readState())?.permissionHistory ?? []));
|
|
@@ -49273,7 +49276,7 @@ async function restoreContentAudit(input2, output2, key) {
|
|
|
49273
49276
|
}
|
|
49274
49277
|
|
|
49275
49278
|
// agent/src/main.ts
|
|
49276
|
-
var AGENT_VERSION2 = true ? "0.3.
|
|
49279
|
+
var AGENT_VERSION2 = true ? "0.3.44" : "0.3.2";
|
|
49277
49280
|
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" : "";
|
|
49278
49281
|
var AI_CONNECTION_SHIPPED = false;
|
|
49279
49282
|
function processAlive(pid) {
|