Commit Graph

67 Commits

Author SHA1 Message Date
joshp123
11d69d8a1c feat: package npm runtime plugins for Nix
Add a hash-backed npm runtime plugin path that lowers OpenClaw-style npm sources into immutable plugin roots and wires them through the existing Home Manager plugin resolver. Keep flake-backed customPlugins unchanged and document the boundary for agents and maintainers.

Tests: nix build .#checks.aarch64-darwin.default-instance --no-link; nix flake check --no-build; git diff --check

Co-authored-by: Codex <noreply@openai.com>
2026-05-08 18:29:45 +08:00
joshp123
3a0c35bf68 Fix QMD model prewarm activation
Use QMD's real update/embed/query commands instead of the nonexistent qmd pull path, and keep the activation script in nix/scripts instead of inline Nix.

Tests: nix build .#checks.aarch64-darwin.config-validity .#checks.aarch64-darwin.qmd-runtime --no-link; nix eval .#checks.x86_64-linux.qmd-runtime.name; scripts/check-flake-lock-owners.sh; git diff --check
2026-05-06 11:09:33 +02:00
joshp123
32f0772a59 Use upstream QMD on Linux
Keep the QMD package internal to OpenClaw, but source it from upstream tobi/qmd on Linux and from the repaired nix-openclaw-tools package on Darwin until upstream Darwin packaging works.

Tests: scripts/check-flake-lock-owners.sh; nix build .#checks.aarch64-darwin.qmd-runtime --no-link; nix eval .#packages.x86_64-linux.qmd.outPath; nix eval .#packages.aarch64-darwin.qmd.outPath; git diff --check
2026-05-06 10:31:54 +02:00
joshp123
505c50fa58 Use upstream QMD on Linux
Keep upstream tobi/qmd as the Linux QMD package while retaining the nix-openclaw-tools Darwin repair package until upstream Darwin is fixed. This preserves the batteries-included runtime path without forking the Linux package surface.

Tests: nix build '.#checks.aarch64-darwin.qmd-runtime' --accept-flake-config --no-link; nix eval --option eval-cache false --raw '.#checks.x86_64-linux.qmd-runtime.name' --accept-flake-config; nix eval --option eval-cache false --raw '.#checks.aarch64-darwin.qmd-runtime.name' --accept-flake-config; git diff --check
2026-05-06 10:01:46 +02:00
joshp123
d56fa8a75c consume QMD through OpenClaw tools
What:
- consume QMD from nix-openclaw-tools instead of a separate upstream flake input
- expose QMD as an internal OpenClaw battery on Darwin and Linux
- add an opt-in Home Manager qmd model prewarm activation
- keep plugin packages off the user's shell PATH by default while preserving the runtime PATH

Why:
- nix-openclaw-tools owns reproducible tool packages and cacheable plugin metadata
- nixos-config should configure OpenClaw, not hand-wire runtime tools

Tests:
- nix build .#checks.aarch64-darwin.package-contents --accept-flake-config --no-link
- nix build .#checks.aarch64-darwin.qmd-runtime --accept-flake-config --no-link
- nix build .#checks.aarch64-darwin.bin-surface .#checks.aarch64-darwin.config-validity .#checks.aarch64-darwin.gateway-smoke --accept-flake-config --no-link
- nix eval .#checks.x86_64-linux.default-instance.drvPath --accept-flake-config
2026-05-06 09:44:37 +02:00
joshp123
3abd2d14cb feat: bundle QMD for opt-in local memory
Make QMD the Nix-supported batteries-included local memory backend by pinning the upstream QMD flake and adding qmd to the private openclaw wrapper PATH.

Keep QMD opt-in through upstream OpenClaw config with memory.backend = qmd, and document that builtin memorySearch.provider = local remains an escape hatch rather than the primary supported Nix path.

Also point nix run .#openclaw at the batteries-included bundle so app execution gets the same internal runtime PATH as the package.

Tests: sh -n nix/scripts/check-openclaw-qmd-runtime.sh; scripts/check-flake-lock-owners.sh; git diff --check; nix flake show --accept-flake-config --json; nix build .#checks.aarch64-darwin.qmd-runtime .#checks.aarch64-darwin.bin-surface .#packages.aarch64-darwin.openclaw --accept-flake-config --no-link --print-out-paths; nix build .#checks.x86_64-linux.qmd-runtime --accept-flake-config --no-link --print-out-paths; nix build .#checks.aarch64-darwin.ci --accept-flake-config --no-link --print-out-paths; nix build .#packages.x86_64-linux.openclaw .#checks.x86_64-linux.bin-surface --accept-flake-config --no-link --print-out-paths; scripts/hm-activation-macos.sh; nix build .#checks.x86_64-linux.gateway-smoke --accept-flake-config --no-link --print-out-paths; nix run .#openclaw --accept-flake-config -- --version; bash -n scripts/update-pins.sh; node --check scripts/select-openclaw-release.mjs; node --check scripts/select-openclaw-release.test.mjs; node scripts/select-openclaw-release.test.mjs
2026-05-05 20:24:25 +02:00
joshp123
8c6267b2c3 fix: decouple source and mac app release pins
Select the latest stable OpenClaw source release independently from the newest public macOS app artifact. Report app lag instead of skipping source releases without desktop assets, and teach yolo to materialize source/app pins separately.

Tests: bash -n scripts/update-pins.sh; node --check scripts/select-openclaw-release.mjs scripts/select-openclaw-release.test.mjs; node scripts/select-openclaw-release.test.mjs; GITHUB_ACTIONS=true scripts/update-pins.sh select; ruby -e 'require "yaml"; YAML.load_file(".github/workflows/yolo-update.yml")'; nix flake show --accept-flake-config --json; git diff --check
2026-05-05 18:22:33 +02:00
joshp123
eb9a52bf96 fix: keep runtime tools internal
Expose only the openclaw command from the default package while keeping bundled runtime tools on the wrapper PATH. Remove the public openclaw-tools package output and document runtime tools as implementation detail.

Tests: nix build .#packages.aarch64-darwin.openclaw .#checks.aarch64-darwin.bin-surface .#packages.x86_64-linux.openclaw .#checks.x86_64-linux.bin-surface --accept-flake-config --no-link --print-out-paths; nix build .#checks.aarch64-darwin.ci --accept-flake-config --no-link --print-out-paths; git diff --check --cached
2026-05-05 18:14:08 +02:00
the sun gif man
bf7764385a
Revise contributions section in README
Updated contribution guidelines to emphasize Discord communication and clarify PR process.
2026-05-05 14:51:45 +02:00
joshp123
3333bb831e docs: repair agent-first onboarding
What:
- export the agent-first flake template
- remove unsupported Intel macOS setup claims
- replace stale Discord channel links with the public invite path
- simplify the advanced dual-instance example and sync plugin docs

Why:
- make the documented first-run path match the flake users actually consume
- avoid sending users toward unsupported systems or dead Discord links

Tests:
- git diff --cached --check: passed
- nix flake show --json --accept-flake-config | jq -e '.templates."agent-first"': passed
- nix flake init -t /Users/josh/code/nix-openclaw#agent-first --accept-flake-config: wrote flake.nix and documents/
- rg stale onboarding strings in README.md AGENTS.md templates/agent-first/flake.nix docs: no matches
2026-05-05 12:30:36 +02:00
joshp123
ba7d1573a4 ci: focus OpenClaw checks on Nix package contract
What:
- replace the misleading gateway test check with a source-checks build/config-options check
- remove the full upstream Vitest suite from the hard Nix promotion gate
- document that yolo validates the Nix-owned package contract, not upstream source test health

Why:
- the current full packageable upstream release builds as a package but has failing upstream Vitest cases when rebuilt from source
- nix-openclaw should block on packaging, smoke startup, config generation, module activation, and app artifacts rather than an upstream-owned unit test suite

Tests:
- git diff --check
- bash -n scripts/update-pins.sh scripts/hm-activation-macos.sh nix/modules/home-manager/openclaw-launchd-relink.sh nix/scripts/source-checks-build.sh nix/scripts/source-checks-check.sh nix/scripts/config-options-check.sh
- ruby -e 'require "yaml"; YAML.load_file(".github/workflows/ci.yml"); YAML.load_file(".github/workflows/yolo-update.yml")'
- nix eval --accept-flake-config --raw .#checks.x86_64-linux.source-checks.drvPath
- nix eval --accept-flake-config --raw .#checks.x86_64-linux.ci.drvPath
- nix flake show --accept-flake-config --all-systems --json
- scripts/check-flake-lock-owners.sh
- node scripts/select-openclaw-release.test.mjs
- scripts/hm-activation-macos.sh
- nix build --accept-flake-config -L .#checks.aarch64-darwin.ci
2026-05-05 10:52:55 +02:00
joshp123
d9b42b0f77 test: cover OpenClaw plugin surface
Fix the documented minimal Home Manager plugin option to use customPlugins, remove the stale duplicate skill-file builder, and assert duplicate plugin skill paths against the paths Home Manager actually installs.

Add local plugin fixtures so the default-instance check covers the agent-facing customPlugins path and duplicate skill collisions.
2026-05-05 09:29:34 +02:00
joshp123
123f0a7cc4 docs: harden maintainer automation context
What:
- move the completed OpenClaw packaging ExecPlan out of the pending slot
- document recursive self-review and the macOS Home Manager activation gate for daily maintenance
- make macOS app publishing explicitly out of scope for nix-openclaw automation
- replace an unclear README ownership label with release automation

Why:
- future maintainer runs need enough durable context to repair nix-openclaw without relearning this thread
- missing upstream macOS assets should be classified, not turned into a competing release process

Tests:
- git diff --check
- node scripts/select-openclaw-release.test.mjs
- bash -n scripts/update-pins.sh
- ruby -e 'require "yaml"; YAML.load_file(".github/workflows/yolo-update.yml"); YAML.load_file(".github/workflows/ci.yml")'
- scripts/check-flake-lock-owners.sh
- nix flake show --accept-flake-config
2026-05-05 08:37:36 +02:00
joshp123
a468354c55 fix: harden OpenClaw Nix release packaging
What:
- make openclaw the canonical agent-first package surface and document the maintainer automation contract
- select the newest full packageable OpenClaw stable release and report newer assetless stable releases
- validate public CLI config, smoke-test gateway runtime, and share source checks across gateway tests/config option generation
- fix Nix-store hardlink runtime handling and Linux builder scratch space
- add daily Codex maintainer automation for direct-to-main repair after full gates
- block yolo promotion if promote materializes a different diff than validation

Why:
- keep nix-openclaw reliable for macOS and Linux users while upstream release assets lag source tags
- make yolo and daily automation uphold one clean Nix package contract

Tests:
- node scripts/select-openclaw-release.test.mjs
- bash -n scripts/update-pins.sh
- sh -n nix/scripts/build-root.sh nix/scripts/gateway-install.sh nix/scripts/gateway-prebuild.sh nix/scripts/gateway-tests-check.sh nix/scripts/source-checks-check.sh
- ruby -e 'require "yaml"; YAML.load_file(".github/workflows/yolo-update.yml")'
- scripts/check-flake-lock-owners.sh
- GITHUB_ACTIONS=true scripts/update-pins.sh select
- nix flake show --accept-flake-config
- nix build .#checks.aarch64-darwin.ci --accept-flake-config --max-jobs 1 -L
- nix build .#checks.x86_64-linux.ci --accept-flake-config --max-jobs 1 -L
2026-05-05 08:00:13 +02:00
joshp123
34e5f011b9 fix(ci): validate stable release bumps before promotion
What:
- split the stable-release updater into read-only selection and pin materialization modes
- rewrite yolo into select, validate-linux, validate-macos, and promote jobs
- fail yolo when the newest stable release is incomplete instead of silently sticking
- update maintainer docs to describe the new safe promotion policy

Why:
- stop direct yolo pushes from moving main without the same Linux and macOS proof as CI
- keep mirroring the newest stable release while making broken upstream releases visible

Tests:
- bash -n scripts/update-pins.sh
- ruby -e 'require "yaml"; YAML.load_file(".github/workflows/yolo-update.yml"); puts "yaml-ok"'
- GITHUB_ACTIONS=true GH_TOKEN="$(gh auth token)" scripts/update-pins.sh select
- temp copy pinned to v2026.4.11: scripts/update-pins.sh select emits v2026.4.14 tuple
2026-04-14 18:10:25 +02:00
joshp123
4e93f4ac56 feat(releases): mirror OpenClaw stable releases
What:
- switch the pin updater from upstream-main commit selection to upstream stable release selection
- restore Yolo Update Pins as an hourly stable-release poller
- update maintainer and README docs to describe stable-release mirroring and the recovery lesson

Why:
- OpenClaw stable is already tag-based upstream, and nix-openclaw should mirror that release line directly
- this removes the old latest-green-main churn model and keeps source + app pins tied to one published upstream release

Tests:
- bash -n scripts/update-pins.sh
- GITHUB_ACTIONS=true GH_TOKEN="$(gh auth token)" scripts/update-pins.sh
2026-04-10 16:05:01 +02:00
joshp123
38edf67292 🤖 refactor: hard-break legacy plugin options and unify bundled catalog
What:
- remove legacy option migrations for programs.openclaw.firstParty/plugins
- add explicit removed-option failures pointing to bundledPlugins/customPlugins
- add plugin-catalog.nix as single source of truth for bundled plugins
- generate bundled option toggles, source map, linux check selection, and tool list from the catalog
- update docs/wording from first-party to bundled plugins

Why:
- enforce forward-only API changes with fail-fast errors
- eliminate duplicated plugin lists drifting across module/check/tool surfaces
- keep consumer configuration mental model simple: bundledPlugins + customPlugins only

Tests:
- nix flake check --no-build (pass)
2026-02-17 19:51:06 -08:00
joshp123
2b3c43d1d0 revert: pause cachix migration; restore garnix CI 2026-02-14 11:38:43 -08:00
joshp123
507b50a853 ci: replace garnix cache warmup with github actions + cachix
- Add Nix Build & Cache workflow (linux + macOS) to build repo targets and optionally push to Cachix
- Rework Cache Only to verify Cachix outputs after build workflow completes
- Update README pipeline docs to reflect GHA + Cachix
2026-02-13 23:12:42 -08:00
Josh Palmer
2cb22671dc Golden paths + safer workspace + mac app Nix mode
- Add golden paths doc and link from README\n- Default workspaceDir to stateDir/workspace and pin agents.defaults.workspace when unset\n- Fix macOS app defaults domain and add openclaw.nixMode toggle
2026-02-08 10:45:22 -08:00
DJTBOT
a52fe152e9 docs: standardize OpenClaw casing
What:
- replace "Openclaw" -> "OpenClaw" in user-facing docs, module descriptions, and messages

Why:
- consistent product naming after upstream rename

Tests:
- none (string-only change)
2026-02-05 13:11:45 -08:00
DJTBOT
f578b82ace 🤖 feat: rename plugin option namespaces
What:
- add bundledPlugins/customPlugins options
- alias firstParty/plugins to new names
- update docs + checks to new naming

Why:
- clearer split between bundled and custom plugins

Tests:
- not run (config/docs change)
2026-02-04 10:27:41 -08:00
DJTBOT
a21a3a6e72 🤖 feat: allow first-party plugin config
What:
- add firstParty.<name>.config option
- pass config into first-party plugin entries
- document first-party config example

Why:
- support batteries-included plugins with env/settings

Tests:
- not run (config/docs change)
2026-02-04 09:50:22 -08:00
DJTBOT
90a1bbfe86 🤖 feat: enable goplaces first-party plugin
What:
- pin nix-steipete-tools to include goplaces plugin
- add goplaces to first-party sources and defaults
- update docs and linux first-party allowlist

Why:
- ship goplaces by default across macOS/Linux
- keep first-party plugin set consistent

Tests:
- nix flake check --accept-flake-config (aborted: offline fetch)
2026-02-03 19:37:30 +01:00
DJTBOT
4f0b44385a 🤖 docs: warn about symlink adoption
What:
- clarify that adopted workspace docs should be copied with symlinks dereferenced

Why:
- prevent broken Nix store links when moving docs across machines

Tests:
- not run (docs-only change)
2026-02-03 18:50:40 +01:00
DJTBOT
eb90f3b813 🤖 docs: manage extended Openclaw documents
What:
- sync optional docs (IDENTITY/USER/LORE/HEARTBEAT/PROMPTING-EXAMPLES) into workspaces when present
- extend document guard to cover optional files
- document optional docs in README

Why:
- keep workspace docs Nix-managed without manual home.file wiring
- avoid broken Mac symlinks when dogfooding on Linux

Tests:
- nix flake check (warnings: uncommitted tree, ignored flake config, unknown flake output)
2026-02-03 13:02:05 +01:00
DJTBOT
0e5f3c1a9b Fix gateway startup defaults for HM activation
- Default gateway.mode=local in generated Nix config.
- Add gateway auth token to HM activation configs.
- Document gateway auth token in template + README.

Tests: not run (CI)
2026-02-01 12:38:25 +01:00
DJTBOT
ec4614cd9d docs: note no-PR policy
- add prominent contributions warning in README
- add maintainer list + Discord workflow in AGENTS

Tests: not run (docs only)
2026-01-30 23:55:14 +01:00
DJTBOT
952a04f349 feat: make config schema-only
- replace manual config builders with schema-typed config merge
- split home-manager module into smaller files (<400 LOC)
- update docs + template for new config shape
- stub config-options check for config.lib.file
- document no-deprecation policy

Tests: not run (CI pending)
2026-01-30 23:49:26 +01:00
DJTBOT
9d8bafc4a8 🔄 rebrand: moltbot → openclaw
Rename all packages, modules, scripts, docs from moltbot to openclaw.

- Packages: moltbot-gateway → openclaw-gateway, moltbot → openclaw
- Binary: mainProgram now 'openclaw' (matches upstream package.json)
- Modules: homeManagerModules.openclaw, darwinModules.openclaw
- Programs: programs.openclaw
- Paths: ~/.openclaw, /tmp/openclaw, lib/openclaw
- Env vars: OPENCLAW_LOG_DIR, OPENCLAW_RELOAD_HM_CMD
- Launchd: com.steipete.openclaw.*
- Plugin API: openclawPlugin
- Kept: CLAWDBOT_* env vars (upstream still uses these)
- Kept: upstream source patch match string in gateway-postpatch.sh

Tests: not run locally (x86_64-linux; CI will validate)
2026-01-30 14:34:49 +01:00
DJTBOT
f0482a8a0c 🤖 rename nix-moltbot surfaces to moltbot
What:
- rename Clawdbot modules/packages/scripts/docs to Moltbot naming
- update yolo updater + config generation for Moltbot schema
- keep Clawdbot app asset names + env exports for upstream compatibility

Why:
- align Nix packaging with moltbot org rename
- fix hourly pin update failures after schema rename

Tests:
- not run (blocked on updated nix-moltbot remote for full nixos-config build)
2026-01-28 12:21:06 +01:00
DJTBOT
f7a287fb28 🤖 codex: update app pin helper + docs channel
What:
- accept Clawdbot/Clawdis app zip names in update-pins
- auto-fix app hash when fetchzip differs
- rename Discord channel reference in README

Why:
- upstream release assets renamed
- keep pin updates reliable

Tests:
- not run (script change only)
2026-01-17 20:28:17 +01:00
DJTBOT
5a5382ab92 hm: auto-exclude git tool
What: auto-drop git from bundled toolchain when programs.git.enable.

Why: avoid git-jump buildEnv collision without user config.

Tests: not run (module change)
2026-01-14 17:43:39 +01:00
DJTBOT
7f07d9e844 tools: allow toolchain overrides
What: add tool list overrides + excludes in tooling and module defaults.

Why: let downstream drop overlapping tools to avoid buildEnv collisions.

Tests: not run (packaging change)
2026-01-14 16:45:57 +01:00
DJTBOT
e0ca9e3885 Update clawdbot pin and generate config options 2026-01-07 18:59:37 +01:00
DJTBOT
d6ba4a08ab Fix config drift and add schema sync check 2026-01-07 18:15:32 +01:00
DJTBOT
bad94c1b40 Simplify CI to stable Linux+macOS builds 2026-01-07 16:55:30 +01:00
DJTBOT
3e144b1c02 Restore agent-first quick start 2026-01-07 16:26:58 +01:00
DJTBOT
e29865d99e Fix gateway tests and add Linux systemd support 2026-01-07 16:25:27 +01:00
DJTBOT
b66501789e nix: collapse tools into single package 2026-01-07 15:54:02 +01:00
DJTBOT
8021219372 nix: package set, canary pin, and build fixes 2026-01-07 15:11:39 +01:00
DJTBOT
8b85e51008 docs: surface plugin ease as key Nix benefit
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 00:28:23 +01:00
DJTBOT
82db5da92c docs: add Requirements section and clarify flow
- Add Requirements section making clear Nix must be installed first
- Link to Determinate Nix docs
- Include install command for those without Nix
- Add note to Plugins section: complete Quick Start first

Addresses user feedback about unclear ordering.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 00:26:05 +01:00
DJTBOT
8e5eb36b34 docs: move comic into collapsible section
Keeps the top of README clean while rewarding curious readers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 00:12:05 +01:00
DJTBOT
5bd04585e2 docs: restructure README for newcomers
- Add table of contents and "Why Nix?" section explaining value prop
- Add "How It Works" section with Gateway/Plugins/Skills concepts
- Reorganize Quick Start with agent-first primary, manual in collapsible
- Split Plugins section into users (first-party, community) vs developers
- Move Docker/dual-instance to Advanced section
- Add "What Clawdbot needs" minimal requirements
- Simplify plugin config examples with human-readable values
- Add note that users' agents handle config, not users directly
- Document bootstrap ritual in onboarding flow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 00:03:23 +01:00
DJTBOT
d7b8a5cd4f Publish docker image to GHCR 2026-01-04 18:54:41 +01:00
DJTBOT
fd4e93a691 Improve docker env defaults and docs 2026-01-04 18:47:01 +01:00
DJTBOT
c9922d289a Improve docker image streaming and config compat 2026-01-04 18:22:28 +01:00
DJTBOT
19215a13b4 Allow linux gateway builds for docker image 2026-01-04 18:17:13 +01:00
DJTBOT
e05b8c6613 Add Nix-built Docker POC for clawdbot 2026-01-04 16:43:48 +01:00