From d74788a4cb9b5af174062d80081a858728341717 Mon Sep 17 00:00:00 2001 From: Alexander Miroshnichenko Date: Mon, 14 Sep 2026 12:31:39 +0300 Subject: [PATCH] feat(packages): Add marmel autonomous coding agent Pin Na1w/marmel to commit fd551ae. Upstream publishes no tags or releases, so the version uses the shape nix-update generates for a tagless repository, keeping `nix-update --version=branch=main` usable. The test suite runs green (325 lib tests plus all integration suites) with two accommodations, both documented in the derivation: - Export SSL_CERT_FILE from nixpkgs cacert. rustls refuses to construct a reqwest::Client without a system trust store, which failed 38 tests with "No CA certificates were loaded from the system". - Serialise the test harness. The lib suite shares process-global worker registries and steer/abort buses, so manager-loop tests fail nondeterministically on parallel threads: one unchanged derivation produced 3 failures, then 1 failure, then 0 with --test-threads=1. No test is skipped or filtered. Annotated example configs are installed to share/doc/marmel/examples/. Role prompts are embedded via include_str!, so there is no runtime data directory. Upstream README states MIT but ships no LICENSE file and no Cargo.toml license field. --- README.md | 1 + packages/marmel/default.nix | 5 +++ packages/marmel/package.nix | 76 +++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 packages/marmel/default.nix create mode 100644 packages/marmel/package.nix diff --git a/README.md b/README.md index e55f248..e4b5519 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ A custom Nix overlay and flake providing additional packages not found in upstre | `graphify` | Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph | AI Coding Agents | | `haivemind` | Multi-model AI consensus, aggregation, and fusion runner for popular AI CLIs | AI Coding Agents | | `hipengine` | ROCm-native local LLM inference engine with torch-free runtime for AMD RDNA GPUs | AI Inference | +| `marmel` | Autonomous agentic coding assistant with Manager + specialist subagent orchestration over any OpenAI-compatible LLM backend | AI Coding Agents | | `mcp-gateway` | Universal Model Context Protocol gateway that sits between AI client and MCP tools/servers | MCP Servers | | `nftables-analyzer` | Analyze nftables firewall rules and evaluate traffic queries | Networking | | `nftablesbuilder` | Web interface to manage nftables rules with drag-and-drop rule creation | Networking | diff --git a/packages/marmel/default.nix b/packages/marmel/default.nix new file mode 100644 index 0000000..291b4f4 --- /dev/null +++ b/packages/marmel/default.nix @@ -0,0 +1,5 @@ +{ + pkgs, + ... +}: +pkgs.callPackage ./package.nix { } diff --git a/packages/marmel/package.nix b/packages/marmel/package.nix new file mode 100644 index 0000000..28d9310 --- /dev/null +++ b/packages/marmel/package.nix @@ -0,0 +1,76 @@ +{ + lib, + rustPlatform, + fetchFromGitHub, + cacert, +}: + +rustPlatform.buildRustPackage rec { + pname = "marmel"; + # Upstream publishes no git tags or releases, so this is pinned to a commit. + # The version shape matches what `nix-update --version=branch=main` generates + # for a tagless repository. + version = "unstable-2026-09-13"; + + src = fetchFromGitHub { + owner = "Na1w"; + repo = "marmel"; + rev = "fd551ae3198d427b0f0df3429f88764c49095b23"; + hash = "sha256-nghvUF0EdqTGWT6GMG5oW1iK76r9vgvYeUj98hNraIo="; + }; + + cargoHash = "sha256-sUSsxcj4m4uJ28RKdJWKsb+MlVW6GkWjZdhKPFKlE/Y="; + + nativeCheckInputs = [ cacert ]; + + # The test suite builds `reqwest::Client`s, and rustls rejects construction + # outright when no system trust store is found ("No CA certificates were + # loaded from the system"). The sandbox has no /etc/ssl, so point the tests + # at nixpkgs' bundle. Build-time only; the installed binary still uses the + # host's trust store at runtime. + preCheck = '' + export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt + ''; + + # Serialise the test harness. The lib suite shares process-global worker + # registries and steer/abort buses (src/orchestrator/workers.rs, + # src/orchestrator/bus.rs, src/orchestrator/preemption.rs), so the + # manager-loop tests fail nondeterministically when the harness runs them on + # parallel threads: rebuilding one unchanged derivation yielded 3 failures, + # then 1 failure, then 0 with serial threads. All 325 tests still run — none + # are skipped or filtered. Drop this flag once upstream makes that state + # per-instance. + cargoTestFlags = [ + "--" + "--test-threads=1" + ]; + + # Role prompts are embedded with `include_str!`, so the binary needs no + # runtime data files. The annotated example configs are the de-facto + # first-run documentation, since a backend URL and model are mandatory. + postInstall = '' + install -Dm644 marmel.toml.example $out/share/doc/${pname}/examples/marmel.toml.example + install -Dm644 marmel.toml.cloud $out/share/doc/${pname}/examples/marmel.toml.cloud + ''; + + passthru = { + category = "AI Coding Agents"; + updateScript = [ + "nix-update" + "--flake" + ".#marmel" + "--version=branch=main" + ]; + }; + + meta = { + description = "Autonomous agentic coding assistant with Manager + specialist subagent orchestration over any OpenAI-compatible LLM backend"; + homepage = "https://github.com/Na1w/marmel"; + # Upstream README states MIT, but the repository ships no LICENSE file and + # Cargo.toml has no license field. + license = lib.licenses.mit; + sourceProvenance = with lib.sourceTypes; [ fromSource ]; + mainProgram = "marmel"; + platforms = lib.platforms.unix; + }; +}