Commit Graph
128 Commits
Author SHA1 Message Date
Dark-Alex-17 1e15bc31d5 style: applied uniform style across files 2026-08-28 11:35:45 -06:00
Dark-Alex-17 92d9464b38 feat(mcp): enforce per-server tool allowlists across runtime, jobs, agents, and graph nodes 2026-08-27 14:43:18 -06:00
Dark-Alex-17 a92ebb5b94 feat(mcp): add mcp_tools allowlist config surfaces across roles, sessions, agents, graphs, and skills 2026-08-27 14:13:35 -06:00
Dark-Alex-17 429ae3cc8e refactor(function): finish supervisor-to-agent vocabulary migration
The supervisor registry went kind-generic (TaskHandle::Agent | Job)
earlier in this branch, but the module holding the agent__* handlers
and two model-facing error strings still carried the old name:

- src/function/supervisor.rs -> src/function/agents.rs (it contains
  only agent__* tool handlers, pairing with function/jobs.rs; the
  kind-generic src/supervisor/ registry keeps its name)
- 'Supervisor tool failed' -> 'Agent tool failed'
- 'Unknown supervisor action' -> 'Unknown agent action'
2026-08-26 14:57:36 -06:00
Dark-Alex-17 404a45a311 feat(jobs): node-local job ownership and capability-gated job__* visibility
Graph LLM nodes now own the jobs they start, on every exit path. A new
node_job_scope on RequestContext records job ids started while a node
runs: the turn-end guardrail nags only about the node's own jobs
(parallel branches no longer see each other's), and the node executor
reaps — cancels and deregisters — anything left registered when the
node exits, including error, timeout, and retry-exhaustion paths.
Cross-node job handoff is no longer possible; a crashed node takes its
in-flight jobs with it.

With inheritance gone, job__* declarations are gated on capability:
the family is only declared when at least one declared tool would pass
job__start's whitelist (shared predicate: is_backgroundable_tool). One
carve-out — while a context still owns registered jobs (job started,
tool disabled mid-session), the lifecycle verbs stay declared so a
running job can never become unreachable; job__start alone disappears.
A graph node with tools: [] now sees no job__* tools at all.

Prompt instructions, tool declarations, and graph.example.yaml updated
to the node-local semantics; +7 tests, 8 visibility pins rewritten.
2026-08-26 13:43:05 -06:00
Dark-Alex-17 bfb8105682 fix(graph): gate unix-only test imports behind cfg(unix)
The executor integration-test module hoisted job-test paths into
module-level imports, but their only consumer is a #[cfg(unix)] test —
on Windows the imports went unused and failed -D warnings.
2026-08-26 13:00:16 -06:00
Dark-Alex-17 fa04e09373 feat(graph): support max_concurrent_jobs at the graph level
Graph agents could only inherit the app-wide job budget; the agent-level
header in graph.yaml now accepts max_concurrent_jobs alongside
model/temperature, flowing through AgentConfig::from_graph into the
run-wide supervisor. Deliberately graph-wide, not per-node: jobs outlive
the node that started them.
2026-08-26 12:53:17 -06:00
Dark-Alex-17 4e50b4ff4a refactor: Modified the naming of several generalized supervisor values 2026-08-26 12:43:51 -06:00
Dark-Alex-17 28018f33c9 test(jobs): add feature, hardening, and surface test matrix for background jobs
Covers the plan's T7 matrix: zero-diff invariants when jobs are off
(byte-identical tool lists and prompts, None-vs-Some select_functions),
validation hardening (shell/path-shaped/PATH-resolvable names, undeclared
MCP servers, non-whitelisted and context-filtered tools, mapping-tool
aliases, mid-batch tool-scope freshness), process lifecycle (grandchild
process-group kill, pgid clear after normal completion, panic skips the
completion notification), guardrail behavior (finished-job discard on
force-terminate, bounded inject-then-terminate iteration burn), surface
conformance (concrete_tool_names exclusion, toggle rejection, tools_info
listing, infra preservation under empty filters), supervisor swaps
(use_agent/exit_agent kill running jobs, child contexts cannot reach
parent job ids), and graph-node job lifecycle with deferred notification
drain.
2026-08-25 20:33:10 -06:00
Dark-Alex-17 5f23e2403f fix: user__ask should have been renamed to user__select in graph agent user interaction invocations 2026-08-21 14:49:27 -06:00
Dark-Alex-17 f61a8f7afd style: updated styles across macro implementation 2026-08-21 11:55:13 -06:00
Dark-Alex-17 f39381aa9d feat: add enabled_macros config field at global, role, agent, and session levels
Mirrors the enabled_skills plumbing per plans/custom-commands-design.md §5:
- global: Config + AppConfig structs, from_config copy, and the
  COYOTE_ENABLED_MACROS env-override arm (csv_to_vec parsing)
- role: frontmatter via parse_string_or_array (list or csv string),
  plus the export() mirror so Role::save round-trips the field
- agent (non-graph): plain serde on AgentConfig; graph.yaml silently
  ignores the key (pinned by test, no field on Graph by design)
- session: plain serde with csv-or-vec deserializer

Empty list/string deserializes to Some([]) (explicit zero), distinct
from absent/null (None) — pinned by tests at every level, including
the env arm (serial-fenced against the from_config tests, which read
the process env via load_envs).
2026-08-21 11:55:13 -06:00
Dark-Alex-17 644d899f78 fix: Prevent infinite hangs in coder agent and implement timeouts for LLM API calls and interactive tools 2026-08-14 15:22:25 -06:00
Dark-Alex-17 860566bf50 feat: let workflow rag nodes select a RAG driver
`RagNode` gains an optional `driver`, forwarded into `RagInitConfig` so a
graph node can build its knowledge base on duckdb instead of yaml. Nodes
that name no driver forward `None`, which still resolves to yaml, so
existing workflows are unaffected.

An unknown driver is rejected up front rather than at construction time.
`Rag::create` dispatches unknown drivers to its yaml catch-all, so a typo
would otherwise embed every document and persist the bogus string, after
which every subsequent load fails validation and the agent cannot start.
The check asks `RagData::validate()` through a probe value instead of
restating the list of valid drivers, so the two cannot drift.
2026-08-11 13:46:59 -06:00
Dark-Alex-17 a8fb32b6bd fix: strip reasoning blocks for structured LLM output in graph agents 2026-08-05 16:10:03 -06:00
Dark-Alex-17 a2c4f05c8c feat: renamed the user__ask to user__select and improved descriptions to improve model usage 2026-07-23 18:22:18 -06:00
Dark-Alex-17 320dbf2479 fix: Correctly inherit graph-global model for extractor model if none is defined 2026-07-17 11:42:28 -06:00
Dark-Alex-17 e9a8c01dc4 feat: Added support for modifying the reasoning effort of reasoning models 2026-07-16 12:28:04 -06:00
Dark-Alex-17 7fc06ad9bc feat: Implemented graph-based RAG 2026-07-08 21:20:50 -06:00
Dark-Alex-17 00939e4634 feat: Added explicit guardrail handling for pending agents 2026-06-11 20:20:14 -06:00
Dark-Alex-17 165d0d113d feat: added skill hint prompt injection and configuration 2026-06-05 14:48:54 -06:00
Dark-Alex-17 b997e9493c fix: accidental regression on enabled_skills being empty = all 2026-06-04 16:12:32 -06:00
Dark-Alex-17 e54a2e42c9 test: improve vault password file errors by propagating up 2026-06-04 15:32:31 -06:00
Dark-Alex-17 6c4e042dad fix: add agent context check to skill visibility validation 2026-06-04 14:19:38 -06:00
Dark-Alex-17 ebf3b5f776 test: improved skill validation test in graph validator 2026-06-04 14:02:34 -06:00
Dark-Alex-17 84dcb3078b feat: validate visible_skills field at config load time 2026-06-04 13:43:40 -06:00
Dark-Alex-17 7b320e08c4 fix: enforced global visible_skills in llm node validation and improved skill loading error handling across the project 2026-06-04 13:09:43 -06:00
Dark-Alex-17 7078280b3d fix: restore agent skill policy on error during effective policy calculation 2026-06-04 12:16:42 -06:00
Dark-Alex-17 46d4b78ccc fix: fixed tool filtering logic for skills and user functions in agents 2026-06-04 11:03:44 -06:00
Dark-Alex-17 73a4499c68 fix: don't silently fail on skill role composition extraction in llm nodes 2026-06-04 09:09:55 -06:00
Dark-Alex-17 7ec81ae607 fix: effective_policy unconditionally overwrote skill values for role-like structs 2026-06-03 14:54:42 -06:00
Dark-Alex-17 260bf4e5bc fmt: applied formatting to refactored mcp_servers and tools lists 2026-06-03 14:02:06 -06:00
Dark-Alex-17 ece66448e0 refactor: support both CSV and list formats for enabled_tools 2026-06-03 13:58:24 -06:00
Dark-Alex-17 a254d60876 refactor: Support both CSV and list formats for enabled_mcp_servers 2026-06-03 13:23:13 -06:00
Dark-Alex-17 5ebf8649a6 fmt: applied uniform formatting across refactored vault code 2026-06-03 11:15:11 -06:00
Dark-Alex-17 b1782b614f fix: llm nodes accidentally skipped skill_registry::effective_role because I was passing an inline role instead 2026-06-02 12:58:14 -06:00
Dark-Alex-17 2acff31213 feat: llm graph nodes support skills 2026-06-02 12:39:43 -06:00
Dark-Alex-17 be5d280c32 fix: bash-based user interactions in agents accidentally regressed in graph implementation 2026-05-27 15:20:19 -06:00
Dark-Alex-17 0facb15e32 feat: rename Loki to Coyote 2026-05-27 12:47:32 -06:00
Dark-Alex-17 0c2e4df647 feat: LLM node failures propgate up 2026-05-22 18:27:03 -06:00
Dark-Alex-17 e6da252a5a feat: Removed indicatif spinners. The UX just won't stop clobbering for parallel graph nodes 2026-05-22 12:56:04 -06:00
Dark-Alex-17 558b764db8 feat: Added agent variables support for graph agents and improved script executor to use the same environment variables as normal agent tool calling for further flexibility 2026-05-21 13:27:33 -06:00
Dark-Alex-17 0bb312a85c feat: Improved UX with colored spinners for parallel graph agents and no clobbering outputs for sub-agents 2026-05-21 13:00:44 -06:00
Dark-Alex-17 597f823bdf fmt: cleaned up graph implementation 2026-05-21 11:27:29 -06:00
Dark-Alex-17 81c037515e feat: improved UX for parallel graph execution 2026-05-20 18:54:20 -06:00
Dark-Alex-17 3c7d19da07 fix: Added additional graph validation for parallel reads and writes with dependencies between nodes states 2026-05-20 17:35:33 -06:00
Dark-Alex-17 98d16d9a56 fix: bug in next_single method and improved outcome handling for LLM node execution 2026-05-20 16:27:25 -06:00
Dark-Alex-17 26de81e84e test: implemented integration tests for the parallel frontier-based graph scheduling 2026-05-20 16:09:07 -06:00
Dark-Alex-17 20c28b55d5 feat: added branch progress tracker for better visualization of parallel graph super-steps 2026-05-20 15:50:38 -06:00
Dark-Alex-17 9a061944ae feat: created the RenderMode enum to suppress stdout streaming during parallel graph super-steps 2026-05-20 15:32:03 -06:00