Ctrl K
ComunidadGuías…

bin/daemon/computer-name.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { execFileSync } from "node:child_process";
import { hostname } from "node:os";
import { join } from "node:path";
import { claimIdentityRecord } from "@cotal-ai/workspace";
import { writeSecretFileAtomic } from "@cotal-ai/core";
import { computerName } from "./name-validation.js";

export function defaultComputerName(): string {
  if (process.platform === "darwin") {
    for (const key of ["ComputerName", "LocalHostName"]) {
      try {
        const value = execFileSync("/usr/sbin/scutil", ["--get", key], { encoding: "utf8", timeout: 3000, stdio: ["ignore", "pipe", "ignore"] }).trim();
        if (value) return computerName(value);
      } catch { /* An unset persistent preference uses the next documented name. */ }
    }
  }
  return computerName(hostname());
}
const pathFor = (home: string) => join(home, "daemon", "computer-name.json");
export function readComputerName(home: string): string {
  return claimIdentityRecord(pathFor(home), "computer name", (raw: unknown): { v: 1; name: string } | undefined => {
    if (!raw || typeof raw !== "object" || Array.isArray(raw)) return undefined;
    const r = raw as Record<string, unknown>;
    if (r.v !== 1 || Object.keys(r).sort().join(",") !== "name,v") return undefined;
    try { return { v: 1, name: computerName(r.name) }; } catch { return undefined; }
  }, () => ({ v: 1 as const, name: defaultComputerName() })).name;
}
export function saveComputerName(home: string, value: unknown): string {
  const name = computerName(value);
  writeSecretFileAtomic(pathFor(home), JSON.stringify({ v: 1, name }));
  return name;
}