wsb-daemon 0.275.7622

wsb's daemon: the workbench, the GitHub mirror's schedule and peer continuity, for every workspace on the machine
<!--
  What this machine is called: the name paired machines show it as, kept in
  its identity under the workshop's `.state` — never committed. The hostname
  until it is given another.
-->
<script lang="ts">
  import { onMount } from "svelte";
  import { peers } from "../../stores/peers.svelte.js";
  import SettingsSection from "./SettingsSection.svelte";

  let name = $state("");
  onMount(() => {
    void peers.load();
  });
  $effect(() => {
    name = peers.machine?.name ?? "";
  });
  const dirty = $derived(name.trim() !== "" && name.trim() !== (peers.machine?.name ?? ""));
</script>

<SettingsSection title="Machine" description="What this machine is called, here and by its peers.">
  <div class="settings-form">
    <label class="field">
      <span class="field-label">Name</span>
      <input class="field-input" bind:value={name} />
    </label>
    {#if peers.error}
      <p class="settings-refused" role="alert">{peers.error}</p>
    {/if}
    {#if dirty}
      <div class="button-row">
        <button class="primary" disabled={peers.busy === "rename"} onclick={() => void peers.rename(name.trim())}>
          {peers.busy === "rename" ? "Renaming…" : "Rename"}
        </button>
      </div>
    {/if}
  </div>
</SettingsSection>

<style>
  .settings-form {
    display: flex;
    flex-direction: column;
    gap: var(--wb-spacing-10);
  }

  .settings-refused {
    color: var(--wb-error);
    font-size: var(--wb-font-size-12);
  }
</style>