83 lines
2.5 KiB
Nix
83 lines
2.5 KiB
Nix
|
|
# Harness-agnostic agent management utilities
|
||
|
|
#
|
||
|
|
# This module provides functions to load canonical agent definitions and
|
||
|
|
# render them for different AI coding tools (OpenCode, Claude Code, Pi).
|
||
|
|
#
|
||
|
|
# Usage in your configuration:
|
||
|
|
#
|
||
|
|
# # In your flake or configuration:
|
||
|
|
# let
|
||
|
|
# m3taLib = inputs.m3ta-nixpkgs.lib.${system};
|
||
|
|
#
|
||
|
|
# # Load canonical agents from the AGENTS flake input
|
||
|
|
# canonical = m3taLib.agents.loadCanonical { agentsInput = inputs.agents; };
|
||
|
|
#
|
||
|
|
# # Render for a specific tool
|
||
|
|
# agentFiles = m3taLib.agents.renderForTool {
|
||
|
|
# inherit pkgs;
|
||
|
|
# agentsInput = inputs.agents;
|
||
|
|
# tool = "opencode";
|
||
|
|
# };
|
||
|
|
# in { ... }
|
||
|
|
#
|
||
|
|
# Renderers are stubs for now (Tasks 9-11 will provide real implementations).
|
||
|
|
{lib}: let
|
||
|
|
agentsLib = {
|
||
|
|
# Load canonical agent definitions from the AGENTS flake input.
|
||
|
|
# agentsInput: the AGENTS flake (e.g., inputs.agents in a consuming flake)
|
||
|
|
# Returns the canonical attrset from lib.loadAgents (keyed by slug).
|
||
|
|
loadCanonical = {agentsInput}: agentsInput.lib.loadAgents;
|
||
|
|
|
||
|
|
# Stub: OpenCode renderer — produces .opencode/agents/*.md files.
|
||
|
|
# To be implemented in Task 9.
|
||
|
|
renderForOpencode = {
|
||
|
|
pkgs,
|
||
|
|
canonical,
|
||
|
|
modelOverrides ? {},
|
||
|
|
}:
|
||
|
|
pkgs.runCommand "opencode-agents" {} "echo stub > $out";
|
||
|
|
|
||
|
|
# Stub: Claude Code renderer — produces .claude/agents/*.md files.
|
||
|
|
# To be implemented in Task 10.
|
||
|
|
renderForClaudeCode = {
|
||
|
|
pkgs,
|
||
|
|
canonical,
|
||
|
|
modelOverrides ? {},
|
||
|
|
}:
|
||
|
|
pkgs.runCommand "claude-code-agents" {} "echo stub > $out";
|
||
|
|
|
||
|
|
# Stub: Pi renderer — produces AGENTS.md + SYSTEM.md.
|
||
|
|
# To be implemented in Task 11.
|
||
|
|
renderForPi = {
|
||
|
|
pkgs,
|
||
|
|
canonical,
|
||
|
|
}:
|
||
|
|
pkgs.runCommand "pi-agents" {} "echo stub > $out";
|
||
|
|
|
||
|
|
# Dispatch renderer by tool name.
|
||
|
|
# tool: "opencode" | "claude-code" | "pi"
|
||
|
|
renderForTool = {
|
||
|
|
pkgs,
|
||
|
|
agentsInput,
|
||
|
|
tool,
|
||
|
|
modelOverrides ? {},
|
||
|
|
}: let
|
||
|
|
canonical = agentsInput.lib.loadAgents;
|
||
|
|
in
|
||
|
|
if tool == "opencode"
|
||
|
|
then
|
||
|
|
agentsLib.renderForOpencode {
|
||
|
|
inherit pkgs canonical modelOverrides;
|
||
|
|
}
|
||
|
|
else if tool == "claude-code"
|
||
|
|
then
|
||
|
|
agentsLib.renderForClaudeCode {
|
||
|
|
inherit pkgs canonical modelOverrides;
|
||
|
|
}
|
||
|
|
else if tool == "pi"
|
||
|
|
then agentsLib.renderForPi {inherit pkgs canonical;}
|
||
|
|
else throw "lib.agents.renderForTool: unknown tool '${tool}'. Must be opencode, claude-code, or pi.";
|
||
|
|
};
|
||
|
|
in
|
||
|
|
agentsLib
|