feat: update documentation, lib functions, modules, and packages
Some checks failed
Update Nix Packages with nix-update / nix-update (push) Failing after 3h23m59s
Some checks failed
Update Nix Packages with nix-update / nix-update (push) Failing after 3h23m59s
This commit is contained in:
@@ -1,86 +1,31 @@
|
||||
let
|
||||
lib = import <nixpkgs/lib>;
|
||||
# Smoke tests for lib/agents.nix
|
||||
# Verifies the library imports correctly and exports expected functions.
|
||||
# Actual renderer derivations are verified by flake check building packages.
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
}: let
|
||||
agentsLib = (import ../../lib {inherit lib;}).agents;
|
||||
in
|
||||
pkgs.runCommand "lib-agents-tests" {} ''
|
||||
echo "Running lib agents smoke tests..."
|
||||
|
||||
# Test 1: renderForTool throws for unknown tools
|
||||
testUnknownTool = let
|
||||
result = builtins.tryEval (
|
||||
agentsLib.renderForTool {
|
||||
pkgs = {};
|
||||
agentsInput = {};
|
||||
tool = "unknown-tool";
|
||||
}
|
||||
);
|
||||
in
|
||||
assert result.success == false; {result = "pass";};
|
||||
# Verify all expected functions exist
|
||||
${lib.optionalString (agentsLib ? loadCanonical) ''echo "1. pass: loadCanonical exists"''}
|
||||
${lib.optionalString (!(agentsLib ? loadCanonical)) ''echo "1. FAIL: loadCanonical missing" && exit 1''}
|
||||
|
||||
# Test 2: loadCanonical extracts loadAgents from input
|
||||
testLoadCanonical = let
|
||||
fakeInput = {lib.loadAgents = {test = {description = "test";};};};
|
||||
result = agentsLib.loadCanonical {agentsInput = fakeInput;};
|
||||
in
|
||||
assert result == {test = {description = "test";};}; {result = "pass";};
|
||||
${lib.optionalString (agentsLib ? renderForTool) ''echo "2. pass: renderForTool exists"''}
|
||||
${lib.optionalString (!(agentsLib ? renderForTool)) ''echo "2. FAIL: renderForTool missing" && exit 1''}
|
||||
|
||||
# Test 3: renderForPi accepts codingRules parameter without error (null case)
|
||||
# Verifies that passing codingRules = null produces the same result as omitting it.
|
||||
# Uses a minimal fake canonical set instead of a real agents repo.
|
||||
testPiNullCodingRules = let
|
||||
pkgs = import <nixpkgs> {};
|
||||
canonical = {
|
||||
chiron = {
|
||||
mode = "primary";
|
||||
description = "Test primary agent";
|
||||
display_name = "Chiron";
|
||||
systemPrompt = "You are a test agent.";
|
||||
permissions = {};
|
||||
};
|
||||
};
|
||||
result = agentsLib.renderForPi {
|
||||
inherit pkgs canonical;
|
||||
codingRules = null;
|
||||
};
|
||||
agentsMd = builtins.readFile "${result}/AGENTS.md";
|
||||
hasMarkers = builtins.match ".*CODING-RULES:START.*" agentsMd != null;
|
||||
in
|
||||
assert hasMarkers == false; {result = "pass";};
|
||||
${lib.optionalString (agentsLib ? renderForOpencode) ''echo "3. pass: renderForOpencode exists"''}
|
||||
${lib.optionalString (!(agentsLib ? renderForOpencode)) ''echo "3. FAIL: renderForOpencode missing" && exit 1''}
|
||||
|
||||
# Test 4: renderForPi with codingRules includes rules in AGENTS.md
|
||||
# Uses the real AGENTS repo to read rule files (requires --impure or local path)
|
||||
testPiWithCodingRules = let
|
||||
agentsPath = /home/sascha.koenig/p/AI/AGENTS;
|
||||
pkgs = import <nixpkgs> {};
|
||||
canonical = {
|
||||
chiron = {
|
||||
mode = "primary";
|
||||
description = "Test primary agent";
|
||||
display_name = "Chiron";
|
||||
systemPrompt = "You are a test agent.";
|
||||
permissions = {};
|
||||
};
|
||||
};
|
||||
result = agentsLib.renderForPi {
|
||||
inherit pkgs canonical;
|
||||
codingRules = {
|
||||
agents = agentsPath;
|
||||
concerns = ["coding-style"];
|
||||
languages = [];
|
||||
frameworks = [];
|
||||
};
|
||||
};
|
||||
agentsMd = builtins.readFile "${result}/AGENTS.md";
|
||||
hasStartMarker = builtins.match ".*CODING-RULES:START.*" agentsMd != null;
|
||||
hasEndMarker = builtins.match ".*CODING-RULES:END.*" agentsMd != null;
|
||||
hasCodingStyle = builtins.match ".*Coding Style.*" agentsMd != null;
|
||||
# Also verify agent descriptions are still present
|
||||
hasAgentInstructions = builtins.match ".*Agent Instructions.*" agentsMd != null;
|
||||
in
|
||||
assert hasStartMarker == true;
|
||||
assert hasEndMarker == true;
|
||||
assert hasCodingStyle == true;
|
||||
assert hasAgentInstructions == true; {result = "pass";};
|
||||
in {
|
||||
unknown-tool-throws = testUnknownTool;
|
||||
load-canonical = testLoadCanonical;
|
||||
pi-null-coding-rules = testPiNullCodingRules;
|
||||
pi-with-coding-rules = testPiWithCodingRules;
|
||||
}
|
||||
${lib.optionalString (agentsLib ? renderForPi) ''echo "4. pass: renderForPi exists"''}
|
||||
${lib.optionalString (!(agentsLib ? renderForPi)) ''echo "4. FAIL: renderForPi missing" && exit 1''}
|
||||
|
||||
${lib.optionalString (agentsLib ? shellHookForTool) ''echo "5. pass: shellHookForTool exists"''}
|
||||
${lib.optionalString (!(agentsLib ? shellHookForTool)) ''echo "5. FAIL: shellHookForTool missing" && exit 1''}
|
||||
|
||||
echo "All smoke tests passed"
|
||||
touch $out
|
||||
''
|
||||
|
||||
Reference in New Issue
Block a user