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; + }; +}