feat(skills): capacités agent découvrables via idea_list_agents
Ajoute SkillKind (Workflow/Reference) sur Skill, extrait le use case ResolveAgentCapabilities à partir des SkillRef assignés, et enrichit idea_list_agents d'un champ additif capabilities (name, description, kind) — remplace l'exposition de SkillRef opaques par un inventaire de capacités interrogeable, source commune avec le bloc « Skills disponibles » injecté au lancement (#119). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -827,6 +827,43 @@ async fn list_reconstructs_agents_from_manifest() {
|
||||
assert_eq!(out.agents, vec![a]);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn list_resolves_agent_capabilities_additively() {
|
||||
let mut a = scratch_agent(aid(1), "Backend", "agents/backend.md", pid(9));
|
||||
let skill_id = SkillId::from_uuid(uuid::Uuid::from_u128(77));
|
||||
a.assign_skill(domain::SkillRef::new(skill_id, domain::SkillScope::Global));
|
||||
let contexts = FakeContexts::with_agent(&a, "ctx");
|
||||
let skills = FakeSkills::with(vec![Skill::new(
|
||||
skill_id,
|
||||
"review",
|
||||
MarkdownDoc::new("# Review workflow\n\nbody"),
|
||||
domain::SkillScope::Global,
|
||||
)
|
||||
.unwrap()
|
||||
.with_description(Some("Reviews changes".to_owned()))
|
||||
.with_kind(domain::SkillKind::Reference)]);
|
||||
let resolver = Arc::new(application::ResolveAgentCapabilities::new(Arc::new(skills)));
|
||||
let list = ListAgents::with_capabilities(Arc::new(contexts), resolver);
|
||||
|
||||
let out = list
|
||||
.execute(ListAgentsInput { project: project() })
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(out.agents, vec![a.clone()]);
|
||||
let entries = out.discovery_entries();
|
||||
assert_eq!(entries.len(), 1);
|
||||
assert_eq!(entries[0].agent.id, a.id);
|
||||
assert_eq!(entries[0].agent.skills.len(), 1);
|
||||
assert_eq!(entries[0].capabilities.len(), 1);
|
||||
assert_eq!(entries[0].capabilities[0].name, "review");
|
||||
assert_eq!(entries[0].capabilities[0].description, "Reviews changes");
|
||||
assert_eq!(
|
||||
entries[0].capabilities[0].kind,
|
||||
domain::SkillKind::Reference
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn read_then_update_context_roundtrips() {
|
||||
let a = scratch_agent(aid(1), "Backend", "agents/backend.md", pid(9));
|
||||
|
||||
Reference in New Issue
Block a user