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 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.43",
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": {
Binary file
Binary file
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("This experimental macOS runtime 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: ");
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
- if (!(await this.readState())?.enrollment) throw fail2("ENROLLMENT_REQUIRED");
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.43" : "0.3.2";
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) {