Skip to content

famstack 0.4.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@arthware-dev arthware-dev released this 07 Oct 20:12
· 3 commits to main since this release
06caace

Highlights

A family diary from the memories room. Voice messages and short notes the family posts in the memories room become a diary in the family wiki: one page per month that opens with a summary of the month, and one card per memory with its summary, the facts in it, the transcript and the recording. Every morning the archivist posts the day's cards in the room. A reply in a card's thread corrects a name, a date or whom a memory was for, and the correction stays. When the room has been quiet for two weeks, the archivist invites the next memory.

Answers with their sources. Ask the archivist by name in any room it is in ("Archivist, when does the car insurance renew?") and the answer cites the pages it came from. A voice message counts as a message: speaking a question gets the same answer as typing it. The wiki menu follows what a family looks for (Start, Recent, Diary, People, Topics, Documents), and the original photo, PDF or recording sits behind each page.

AI on this Mac or anywhere else. ./stack ai switch managed runs the models on this Mac with the engine the ai stacklet installs. ./stack ai switch <address> uses a server the stack does not manage: another machine on the network, a hosted provider, or an AI app on this Mac, which ./stack list shows as localhost. Speech-to-text and text-to-speech can stay on this Mac while chat runs elsewhere.

Easier to run. ./stack update moves the checkout to a release and names what to restart, and ./stack list marks stacklets that still run older code. The installer asks for the family's language and adds a famstack command that works from any directory. Backups include the Matrix timeline with the voice recordings. Domain mode serves every stacklet under its own name with HTTPS certificates from Hetzner or Cloudflare DNS (the infra stacklet is beta). A menu bar app (beta) shows what needs attention and controls each stacklet, on this Mac or on another one over SSH: ./stack app install builds and installs it.

The agent is beta. On its first start it can sign in only after core has created its chat account: run ./stack restart core, then ./stack restart agent (#173).

Upgrading from v0.2.x and v0.3.0-beta.x

v0.3.0-beta.3 has no ./stack update, so the first step is by hand. From this release on, ./stack update does it.

  1. Move the checkout to the release:

    git fetch --tags
    git checkout v0.4.0-rc.1
    ./stack doctor

    stack doctor warns when stack.toml has no [core] language. Add the family's language there (en or de) if it should differ from the voice in [ai] language.

  2. Restart everything once. This applies the tools server change in core and labels every container with the code it runs:

    ./stack restart all
  3. Optional: the diary brings family-life topics to the seed ontology. An existing install keeps its own ontology.toml. ./stack memory ontology replaces that file with the seed and deletes topics the family added by hand, so look at the difference first and copy hand-made topics aside:

    ./stack memory ontology --dry-run
    ./stack memory ontology

Breaking: ./stack memory wiki no longer regenerates pages by itself. Use ./stack memory wiki update --all for every page, or ./stack memory wiki update --home and the other page flags as before. This only affects scripts that called the bare command.

Security

  • Core Stacklet: Serve only the /go links on port 42000; search, logs and status answer inside the stack only
  • Code Stacklet: Keep admin passwords out of the output of a failed Forgejo account setup

Added

  • AI Stacklet: Choose the AI server with ./stack ai switch: managed for this Mac, or a server's address (#168)
  • AI Stacklet: Handle a voice message like typed text in every room, through the bot that owns the room (#85)
  • AI Stacklet: Send voice messages to the AI server when no separate speech server is set
  • Agent Stacklet: Mark the agent stacklet as beta and say how to finish its first start (#172, #174)
  • Agent Stacklet: Answer simple questions in about half the time (#93)
  • Agent Stacklet: Run the agent against an AI server on another machine
  • Archivist Bot: Answer a message that starts or ends with the archivist's name
  • Archivist Bot: Post each morning's diary cards in the memories room, and invite a memory after two quiet weeks
  • Archivist Bot: Link the wiki page in the reply to a capture (#122)
  • Archivist Bot: File a link card when a page cannot be read, and say what blocked it (#96)
  • Archivist Bot: Choose the language a room's filings are written in with !config language (#185)
  • Backup Stacklet: Back up the Matrix timeline together with the voice recordings (#87)
  • Backup Stacklet: Keep each stacklet's data in its own directory on the backup disk; older backup disks keep working (#88)
  • Infra Stacklet: Serve domain mode through Caddy with HTTPS certificates from the DNS provider (#111)
  • Memory Stacklet: Turn the memories room into a family diary with month pages and one card per memory (#132)
  • Memory Stacklet: Correct a diary card with a reply in its thread, including whom a memory was for (#132, #136)
  • Memory Stacklet: Show where an answer came from: every search hit links its page (#81)
  • Memory Stacklet: Sort the wiki menu by what the family looks for (#159)
  • Memory Stacklet: Keep the original file behind a wiki page, playable or downloadable there (#92)
  • Memory Stacklet: Bring the wiki up to date on demand with ./stack memory wiki update
  • Memory Stacklet: Search the wiki pages with rare words first and the section heading in each excerpt
  • Memory Stacklet: Ask the family memory from the terminal with ./stack memory ask
  • Messages Stacklet: Reply to, react to and read a bot's answer from the terminal with ./stack messages
  • stack CLI: Move the checkout to a release with ./stack update, which names what to restart
  • stack CLI: Mark stacklets running older code in ./stack list; ./stack restart alone restarts them
  • stack CLI: Add a famstack command that works from any directory
  • stack CLI: Ask for the family's language during install, and warn in ./stack doctor when it is missing
  • stack CLI: Start, stop, restart or destroy several stacklets in one command
  • stack CLI: Show the checkout's actual version in every command
  • stack CLI: Load stacklets that do not ship with famstack from ~/famstack-extensions
  • stack CLI: Sign in to Forgejo, Paperless and Immich through a single sign-on stacklet (#125, #128)
  • stack CLI: Add ./stack errors for recent error lines across every stacklet (#187)
  • stack CLI: Add ./stack host for memory, disk and what each stacklet uses (#187)
  • stack CLI: Show each stacklet's address in ./stack list and ./stack status (#187)
  • stack CLI: Print ./stack doctor and ./stack config as JSON with --json, credentials hidden (#187)
  • Add a menu bar app (beta) for this Mac or another one over SSH: what needs attention, each stacklet, recent errors, disk and memory; install it with ./stack app install (#187)

Fixed

  • AI Stacklet: Install oMLX without Homebrew stopping to ask (#171)
  • AI Stacklet: Start the AI engine when ./stack up ai finds it stopped
  • AI Stacklet: Start Whisper on every ./stack up ai, not only after a configuration change
  • AI Stacklet: Send the API key when waiting for oMLX to start, instead of waiting 30 seconds and warning (#181)
  • AI Stacklet: Let other machines on the network use this Mac's AI engine and Whisper in port mode
  • Backup Stacklet: Find diskutil, mount and docker in the nightly cron run, which failed with No such file or directory: 'diskutil'; ./stack restart backup rewrites the cron entry (#188)
  • Agent Stacklet: Stop the agent calling tools in a loop forever (#82)
  • Archivist Bot: Write every filing in the household language, so a photo in a German household gets a German title and summary (#185)
  • Archivist Bot: Let the family retry a filing the AI could not classify with a reply in its thread
  • Archivist Bot: Cap the length of every AI answer, so a server that reserves memory for it accepts the request
  • Archivist Bot: Count only people when deciding whose room it is
  • Code Stacklet: Make SSH clone URLs work in domain mode
  • Core Stacklet: Stop the host API from starting at login once core is down (#135)
  • Docs Stacklet: Stop an English household getting German summaries (#86)
  • Docs Stacklet: Create tags, document types and correspondents every family member can see (#178)
  • Docs Stacklet: Create Paperless admins whose password contains a quote
  • Infra Stacklet: Show the next-step hints after ./stack up infra
  • Memory Stacklet: Show a welcome page instead of a 404 on a wiki with no pages yet (#84)
  • Memory Stacklet: Resolve links between notes and documents in the wiki (#183)
  • Memory Stacklet: Stop the curator calling a working mirror broken (#83)
  • Messages Stacklet: Post the Memories welcome on a fresh install
  • Messages Stacklet: Make the family admin an admin in every family room
  • Messages Stacklet: Open Element on localhost on this Mac and in the apps on other devices
  • Messages Stacklet: Point Element and phones at the current homeserver address
  • Messages Stacklet: Stop invites to the same person stalling for minutes
  • stack CLI: Show image downloads when a stacklet starts
  • stack CLI: Show why compose failed when a stacklet cannot start
  • stack CLI: Remove the containers of a stacklet whose first start failed
  • stack CLI: Re-render .env on ./stack down, so a compose variable a release adds cannot block a stop (#95)
  • stack CLI: Rebuild locally built images on current base images
  • stack CLI: Save a setting without rewriting other lines in stack.toml
  • stack CLI: Report a question answered no as cancelled, not as a failure
  • stack CLI: Treat https = false as plain HTTP
  • stack CLI: Compare container settings with the compose configuration in ./stack doctor
  • stack CLI: Print the fixes ./stack doctor suggests as runnable commands
  • stack CLI: Check stacklets that run a single container in ./stack doctor, such as Forgejo (#187)
  • stack CLI: Point the fix for an exited container at its stacklet's logs in ./stack doctor (#187)
  • stack CLI: Print what a stacklet command returns when asked for --json
  • stack CLI: Name instances installed before the installer wrote a name (#118)
  • Pin container images to a minor line or an exact version (#114)

Documentation

  • Explain running the stack's AI on another machine
  • Name the service on port 42000 in the port tables