Commit graph

45 commits

Author SHA1 Message Date
Sam & Claude
d8927de671 release: bump Clawdie version to 0.11.0 (unify clawdie-iso + colibri)
- build.cfg: ISO_VERSION 0.10.0 -> 0.11.0; reword the version note — clawdie-iso
  and colibri now share one unified Clawdie release version (zot/clawdie-ai stay
  provenance in build-manifest.json).
- CHANGELOG: [0.11.0] entry (date in EU format DD.mon.YYYY per AGENTS rule)
  covering the versioning unify, operator-session hardening, poudriere
  build-server scripts, and the duplicate-port retirement.

colibri Cargo.toml + port DISTVERSION bump to 0.11.0 lands in the colibri repo
(separate branch). Tags held until both bumps merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:52:52 +02:00
54f9fb4a0b docs(iso): clean builder handoff terminology (Sam & Codex)
Replace stale colibri-smoke-agent references with colibri-test-agent, mark colibri-tui optional/desirable, update image-name comments, and avoid smoke wording in current build handoff docs.\n\nChecks: sh -n build.sh; sh -n scripts/test-release-gate.sh; ./scripts/check-format.sh; git diff --check.
2026-06-15 18:50:16 +02:00
f87dc1d38f docs(iso): build zot with release version (Sam & Codex)
Use zot's Makefile VERSION hook in release/live rebuild instructions and preflight hints so the staged binary reports 0.2.29 instead of the local-build 0.0.0 default.\n\nChecks: sh -n build.sh; sh -n scripts/stage-zot-iso.sh; sh -n scripts/stage-colibri-iso.sh; ./scripts/check-format.sh; git diff --check; stage-zot-iso dummy-artifact smoke; VERSION=0.2.29 make build in zot produced 'zot 0.2.29'.
2026-06-15 18:31:10 +02:00
Sam & Claude
67b6477119 feat(iso): give the image its own product version (0.10.0) + colibri provenance (Sam & Claude)
Decouple the ISO identity from zot and cut the first numbered milestone.

Versioning schema (decided 2026-06-15):
- ISO_VERSION is now an explicit product version (build.cfg: 0.10.0); the
  "auto"/zot-tracking path is removed and a build with no version fails fast.
  The image no longer borrows zot's number — component versions are provenance.
- build-manifest.json: "iso_version_tracks":"zot" -> "version_scheme":"product",
  and add colibri_commit/colibri_dirty (the image stages adjacent colibri
  binaries; record which commit produced them — the main reproducibility gap).

Docs/version consistency (from docs to flashing/testing/skill):
- CHANGELOG: new [0.10.0] "Operator Image" milestone (stable XFCE + colibri
  service fixes + self-rebuild lane); reword the version model and repo table.
- README/BUILD/FLASHING/TESTING/iso-publish: artifact examples 0.2.29 -> 0.10.0;
  version-scheme prose updated to product-version, not zot-tracking.

Stacked on the live-rebuild branch (PR #56); merge after it.

Checks: sh -n build.sh OK; prettier clean on all changed docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:08:30 +02:00
Sam & Claude
606ace1127 build: ISO version auto-tracks the zot release it is built on
Drop the hand-maintained ISO_VERSION=0.1.0. Default ISO_VERSION=auto resolves at
build time from the zot checkout (git describe --tags), falling back to the pinned
ZOT_VERSION, and strips the leading v (v0.2.29 -> 0.2.29). Records zot_version +
zot_commit in build-manifest.json; the banner shows which zot it tracks. Set
ISO_VERSION=x.y.z to override.

Also drops the stale 'independent from Clawdie-AI runtime version' comment — the
version's only anchor is zot now.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 10:50:58 +02:00
Sam & Claude
480c5bdcb5 Fold the agent harness under the colibri feature (drop FEATURE_ZOT)
The agent (a static Go binary) was a separately-named opt-in stage gated by
FEATURE_ZOT=NO, so baseline builds shipped colibri without its agent. It is
really a component of colibri, not its own product surface — so name and stage
it under the colibri umbrella.

- build.cfg: remove FEATURE_ZOT; add internal COLIBRI_STAGE_AGENT (default YES,
  undocumented escape hatch for daemon-only debug builds). Keep ZOT_REPO/
  ZOT_VERSION as internal staging inputs (they point at the real agent repo+tag).
- build.sh: preflight + install now gate on FEATURE_COLIBRI (and the hidden
  COLIBRI_STAGE_AGENT), banner folds the agent into the Colibri line, messages
  use colibri-agent naming.
- README: agent harness presented under the colibri control plane; pi retained
  as a spawnable agent backend rather than the default harness.

Behavior change for the builder: with FEATURE_COLIBRI=YES (default) the agent
now stages on baseline builds, so preflight FAILS if the agent binary is not
prebuilt in $ZOT_REPO/bin. Build it first (GOOS=freebsd go build -o bin/zot
./cmd/zot) or pass COLIBRI_STAGE_AGENT=NO for a daemon-only image.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 18:42:01 +02:00
0e6d8cbe53 Drop unresolved Clawdie service staging from USB (Sam & Codex)
Keeps service clawdie as a deployed-system contract only, removes the old mini-binary FEATURE_CLAWDIE staging lane from the ISO build, and adds explicit Linux-vs-FreeBSD proof boundaries for provider/runtime claims.\n\nChecks: ./scripts/check-format.sh; git diff --check; sh -n over scripts/ firstboot/ live/operator-session/ executables
2026-06-13 12:12:34 +02:00
6d0290d07e Clarify Colibri live and Clawdie deploy service split (Sam & Codex)
Removes stale Herdr references, reserves service clawdie for deployed disk/server targets, and keeps the live USB on colibri_daemon. Drops the baseline live rc.d/clawdie wrapper so the mounted-image contract matches the docs.\n\nChecks: ./scripts/check-format.sh; git diff --check; sh -n over scripts/ firstboot/ live/operator-session/ executables
2026-06-13 12:00:57 +02:00
Sam & Claude
7704fae717 feat(iso): stage zot agent (pinned) + populate ZOT_HOME/auth.json (Sam & Claude)
First concrete step of the zot consolidation (colibri ADR). Opt-in FEATURE_ZOT
(default NO; Pi stays default during migration).

- build.cfg: FEATURE_ZOT, ZOT_VERSION (pinned v0.2.29), ZOT_REPO,
  ZOT_ARTIFACT_DIR, ZOT_DEEPSEEK_KEY (optional bake).
- scripts/stage-zot-iso.sh: install the prebuilt zot binary -> /usr/local/bin/zot;
  populate the operator's $ZOT_HOME (~/.local/state/zot) with auth.json
  ({"deepseek":{"api_key":...}}, 0600) when a key is given, else an
  auth.json.sample template + README (telegram via `zot telegram-bot setup`).
- build.sh: status line, resolve_zot_paths, preflight_zot_artifacts (errors with
  the GOOS=freebsd go-build hint — zot has no FreeBSD release), install_zot_agent
  (+ chown operator state), wired into preflight + install sequences.

zot is built on the FreeBSD host from the pinned tag:
  (cd $ZOT_REPO && git checkout v0.2.29 && GOOS=freebsd GOARCH=amd64 \
     go build -trimpath -o bin/zot ./cmd/zot)

sh -n clean; staging smoke-tested (binary staged, auth.json 0600 valid).
Credentials use zot's own resolution (--api-key -> env -> auth.json), replacing
baked-into-binary keys. Default build unchanged (FEATURE_ZOT=NO).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 10:33:37 +02:00
Sam & Claude
5157db0d8c feat(iso): auto-start the Colibri daemon at boot (Sam & Claude)
Re-landed on current main (the earlier branch never merged — main moved under
it). Flip COLIBRI_DAEMON_ENABLE default NO -> YES now that live boot is proven
on AMD hardware. rc.d is REQUIRE: LOGIN, so it starts after login and cannot
block SDDM/XFCE. Still env-overridable. Pair with colibri socket-perms fix so
operators connect without EACCES. CLAWDIE_ENABLE left NO.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 10:53:41 +02:00
7ba92ed116 Standardize ISO build checkouts under /home/clawdie/ai (Sam & Codex) 2026-06-05 00:39:37 +02:00
Sam & Claude
3491f532a2 fix(build): honor GPU_DRIVER from the environment (Sam & Claude)
build.cfg hard-set GPU_DRIVER="" , and build.sh sources build.cfg after the
environment is already set, so `env GPU_DRIVER=nvidia-590 ./build.sh` was
silently clobbered to "" (no NVIDIA branch baked). There is no --gpu-driver
flag in build.sh, so the environment is the only way to set it.

Use GPU_DRIVER="${GPU_DRIVER:-}" so an env value is honored; default stays "".
Verified: env nvidia-590 -> nvidia-590; no env -> "". Replaces the
detached-worktree workaround applied during the live build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:03:31 +02:00
Sam & Claude
a9323aeddc feat(gpu): universal NVIDIA lane — detect + install branch at boot (Sam & Claude)
Opt-in NVIDIA_UNIVERSAL lane (default NO; normal/single-branch builds unchanged):
one ISO that adapts to an unknown NVIDIA target.

- build.cfg: NVIDIA_UNIVERSAL flag.
- build.sh: install_nvidia_universal_repo() stages an on-image pkg repo with all
  three branches (390/470/580 + settings), pkg-repo metadata, and a file:// repo
  conf; universal mode bakes no branch and sets clawdie_live_gpu_mode=nvidia-auto.
- clawdie_live_gpu: nvidia-auto mode detects the device id (PR #30 fix) -> branch
  {390,470,590} -> pkg-name -> `pkg install -r clawdie-nvidia` -> kldload, all
  best-effort with fallback to integrated/scfb (never blocks boot).
- doc/NVIDIA-UNIVERSAL-HANDOFF.md: Codex FreeBSD build + hardware validation plan.

sh -n clean; detector+branch+pkg map unit-tested on Linux
(1c8c->590->nvidia-driver-580, 0fc8->470, 0e22->390). The pkg fetch/repo layout,
offline boot install, writable root, kernel ABI, and image size MUST be validated
on the FreeBSD build host + real NVIDIA hardware (see handoff).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:19:36 +02:00
41dd4d11cd Merge pull request 'fix: clawdie pre-build hardening + Codex handoff' (#6) from fix/clawdie-prebuild-hardening into main 2026-06-04 20:04:23 +02:00
a0884351ee Merge pull request 'feat: stage the simplified clawdie agent into the ISO (Sam & Claude)' (#5) from feat/clawdie-staging-onto-live-boot into main
Reviewed-on: #5
2026-06-04 20:04:23 +02:00
8febb8e506 Merge pull request 'pi/main-live-boot-xfce-colibri-fixes' (#4) from pi/main-live-boot-xfce-colibri-fixes into main
Simplifying Clawdie service
2026-06-04 20:04:23 +02:00
949ddbdeca Merge xfce-operator-usb: Colibri ISO staging (Sam & Claude)
# Conflicts:
#	AGENTS.md
2026-06-04 20:04:23 +02:00
b163cf1014 Merge xfce-operator-usb: Track F Colibri, DeepSeek smoke, LLM provider harness 2026-06-04 20:04:23 +02:00
e5496c247e Make installer image UEFI bootable 2026-06-04 20:04:23 +02:00
f81f487560 Align ISO config docs with post-install setup 2026-06-04 20:04:23 +02:00
014edc1d9f Clean up docs: fix /login wording, add VPS doc link, remove dead build.cfg IMAGE_NAME, delete stale handoff (Sam & Claude) 2026-06-04 20:04:23 +02:00
8cc2cca60e Add ISO build manifest metadata 2026-06-04 20:04:22 +02:00
f9cc62bb02 Bundle current Clawdie AI for install validation 2026-06-04 20:04:22 +02:00
3a9954f9ec Boot live installer session and narrow install-time contract (Sam & Codex) 2026-06-04 20:04:22 +02:00
23f4f1aaec feat(firstboot): unify setup import across USB and VPS 2026-06-04 20:04:22 +02:00
26d2214bd5 Default ISO code hosting: git (no Forgejo)
---

Build: n/a | Tests: n/a (bash -n ok)
2026-06-04 20:04:22 +02:00
225b6f1667 bump: Version 0.9.1 — v1.0.0 embeddings + CMS + Crowdin (Sam & Claude) 2026-06-04 20:04:22 +02:00
42f0c6922b Bump version to 0.9.0 (Sam & ZAI)
Phase 0 complete: Unified ISO with GPU fix

Changes warrant minor version bump:
- Breaking change: unified ISO (no --target flag)
- Critical fix: GPU driver installation
- New features: desktop detection,- Documentation: sudo unification

Roadmap to v1.0.0:
- v0.9.0: Unified ISO (current)
- v0.9.1: Qt6 GUI Phase 1-2
- v0.9.2: Qt6 GUI Phase 3
- v1.0.0: Qt6 GUI Phase 4
2026-06-04 20:04:22 +02:00
c3599469e0 feat: rename cloud→vps, fix domain naming (Sam & Claude)
Breaking changes:
- --target cloud renamed to --target vps
- Default domain changed from "home.arpa" to "${agentname}.home.arpa"

Changes:
- build.cfg: TARGET="vps" (was cloud)
- build.sh: --target vps, error messages updated
- firstboot.sh: AGENT_DOMAIN defaults to ${agentname}.home.arpa
- vps/firstboot-vps.sh: TARGET=vps
- Rename cloud-path-test.sh → vps-path-test.sh
- Update integration-test.sh: clawdie.home.arpa
- Update MODULE-MANIFEST.md, shell-system.sh examples
- Update BUILD.md: "VPS target" (was "VPS/cloud target")

Why:
- "vps" is more precise than "cloud" (VPS != always cloud)
- ${agentname}.home.arpa follows mDNS standard
- .local collides with mDNS (as noted in shell-env.sh)

Migration: Update build scripts from --target cloud to --target vps
2026-06-04 20:04:22 +02:00
033d9ba0f4 feat: recommend Tailscale with optional opt-out (Sam & Claude)
- Change default FEATURE_TAILSCALE from NO to YES
- Add build-time warning if TAILSCALE_AUTHKEY not set
- Update firstboot wizard: Tailscale moves to screen 2
- Add summary screen showing Tailscale status
- Update shell-tailscale.sh to handle missing auth key gracefully
- Update BUILD.md with new recommended/optional flow

User experience:
  - With auth key: Tailscale auto-connects (secure)
  - Without auth key: Warning shown, build continues (public SSH)
  - Wizard allows enabling/disabling with clear warnings

No breaking changes - existing builds still work.
2026-06-04 20:04:22 +02:00
0aee135c43 Add EMBED_API_KEY and EMBED_DIMENSIONS to .env pipeline
The .env template was missing two vars that src/config.ts reads at
runtime.  Without them embeddings silently fall back to wrong defaults
(768 dims vs the 1024 the pgvector schema expects).

- shell-env.sh: add EMBED_API_KEY + EMBED_DIMENSIONS to template
- build.cfg: add matching defaults (1024 dims)
- firstboot.sh: export the new vars
- cloud-path-test.sh: add EMBED var checks (now 19 total)

Build: not tested | Tests: PASS (cloud-path 19/19, integration 7/7)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
d65ef7c33f Add Tailscale firstboot module (Sam & Codex) 2026-06-04 20:04:21 +02:00
16252fb67c iso: sync clawdie-ai v1.0.2 + codex baseline (Sam & Codex) 2026-06-04 20:04:21 +02:00
28f2100a47 feat: add local LLM choice and model seeding 2026-06-04 20:04:21 +02:00
93a690db85 feat: enable forgejo by default in firstboot 2026-06-04 20:04:21 +02:00
74752134c1 feat(build): bake new agent config vars into ISO image
build.cfg now uses ${VAR:-} pattern so env vars take precedence,
enabling cloud builds with arbitrary agent config via environment.

build.sh step 6 now injects all new fields (AGENT_GENDER,
PI_TUI_PROVIDER, PI_TUI_MODEL, API keys, Telegram, embeddings)
into the baked build.cfg inside the image.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
e46d955527 feat: make firstboot agent-name-agnostic for multi-agent deployments
Derive AGENT_NAME from ASSISTANT_NAME instead of hardcoding "clawdie".
Database names, users, and identity vars now follow the agent name.

Add configurable fields to build.cfg and shell-env.sh:
- AGENT_GENDER, PI_TUI_PROVIDER, PI_TUI_MODEL
- ZAI_API_KEY, OPENROUTER_API_KEY, EMBED_BASE_URL, EMBED_MODEL
- TELEGRAM_BOT_TOKEN, FEATURE_TELEGRAM (pre-bakeable for cloud)

Add gender selection to baremetal wizard (bsddialog radiolist).
Update bhyve-test.sh with --name flag, tap0/bridge auto-setup,
sparse disk reuse, and reduced default disk size (25G).

Tested: dry-run env generation produces correct Mevy config
(agent_name=mevy, db=mevy, provider=zai, model=glm-5).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
01cbe6e962 refactor: replace XFCE/MATE/KDE with Lumina across all files
- Create packages/pkg-list-lumina.txt with Lumina desktop environment packages
- Delete pkg-list-xfce.txt, pkg-list-mate.txt, pkg-list-kde.txt
- Remove desktop-installer from pkg-list-desktop-base.txt
- build.cfg: DEFAULT_DESKTOP=lumina (sole supported DE)
- build.sh: use pkg-list-lumina.txt instead of pkg-list-xfce.txt
- BUILD.md: update DEFAULT_DESKTOP comment
- CLAWDIE-ISO.md: add deprecation notice, update all DE references to Lumina only

Lumina is the sole supported FreeBSD-native desktop environment as per
LUMINA-INTEGRATION.md and CLAWDIE-ISO-REFACTORED.md specifications.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
53d83b26c0 chore: Switch default domain from .local to .internal, bump to v0.9.0
- Update default agent domain: clawdie.local → clawdie.internal
- Avoids mDNS conflicts and uses RFC-compliant .internal TLD
- Update baremetal wizard prompt to show .internal example
- Bump CLAWDIE_VERSION from 0.8.2 to 0.9.0 (cloud/baremetal + SSH support)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
17f0259d6d build: Add SSH key and system password support
- Add --ssh-key flag for providing SSH public key at build time
- Add --root-password and --clawdie-password flags for custom system passwords
- Update build.cfg with SSH_PUBLIC_KEY, ROOT_PASSWORD, CLAWDIE_USER_PASSWORD
- Bake all security-related vars into ISO for firstboot access

Enables secure passwordless SSH auth and custom password provisioning.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
b430d9053c build.cfg: Add TARGET, ASSISTANT_NAME, AGENT_DOMAIN, TZ defaults
Add deploy target configuration and cloud pre-bake variables.
Cloud builds accept these via CLI flags; baremetal leaves them blank
for interactive collection via bsddialog wizard.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
4de842b1e5 build.cfg: Add GPU_DRIVER default
Add GPU_DRIVER configuration variable (defaults to empty) to enable --gpu-driver
flag parametrization at build time. Supports 6 variants:
- intel | amd | nvidia-590 | nvidia-470 | nvidia-390 | vesa | "" (auto-detect)

This allows build.sh to bake GPU driver selection into the ISO, bypassing live
pciconf detection at firstboot and guaranteeing ONE reboot instead of TWO.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
969f1d4007 build: Upgrade ISO builder for Clawdie Shell v0.9.0
Changes:
- Increase image size from 8G → 25G (accommodate bundled packages)
- Refactor image prep: create fresh 25GB UFS image with proper MBR/BSD partitioning
  (replaces simple memstick copy; enables larger filesystem + offline package cache)
- Remove KDE/MATE desktop options (focus to XFCE only)
- Fix FreeBSD download URL path (15.0 ISO-IMAGES)
- Add bsdinstall post-install hook variables (nonInteractive, PARTITIONS, DISTRIBUTIONS)
- Implement idempotent mdconfig reattachment for interrupted builds

Build workflow:
  ./build.sh --fetch-only    # Fetch packages (no root needed)
  ./build.sh --skip-fetch    # Assemble ISO (requires root for mdconfig/gpart/newfs)

Tested on FreeBSD 15.0-RELEASE-p4.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
fa2391727d fix(build): use EU date format for user-facing ISO filename
Change IMAGE_NAME from YYYYMMDD to DD.mmm.YYYY per AGENTS.md convention.
No numeric-only months — ambiguous for humans and LLMs.

Output: clawdie-iso-17.mar.2026.img (instead of clawdie-iso-20260317.img)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
61b00accb4 feat: initial clawdie-iso skeleton
USB installer for Clawdie-AI. Combines FreeBSD base install,
desktop-installer GPU/DE setup, and Clawdie-AI deployment into
a single rc.firstboot wizard flow.

Skeleton includes:
- build.cfg: FreeBSD 15.0-RELEASE-p4, amd64, XFCE default
- build.sh: 7-step build outline (fetch → inject → repack), stubs
- installerconfig: bsdinstall post-install hook, copies firstboot/ to HDD
- firstboot/rc.d/clawdie-firstboot: runs once on first HDD boot
- firstboot/firstboot.sh: tiered bsddialog wizard (identity, desktop,
  pi profile, auto-generated secrets, AGENTS.md seeding, npm prefix setup)
- firstboot/gpu-detect.sh: pciconf PCI ID → kld/xorg driver mapping
- CLAWDIE-ISO.md: full design doc (copied from clawdie-ai)

VirtualBox excluded. pkg latest default. LLM keys deferred to pi first-run.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00