diff options
Diffstat (limited to 'src/Agent.Core/Prompts/PromptComposer.cs')
| -rw-r--r-- | src/Agent.Core/Prompts/PromptComposer.cs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/Agent.Core/Prompts/PromptComposer.cs b/src/Agent.Core/Prompts/PromptComposer.cs index e07c7e8..69b18f3 100644 --- a/src/Agent.Core/Prompts/PromptComposer.cs +++ b/src/Agent.Core/Prompts/PromptComposer.cs @@ -1,5 +1,6 @@ using Agent.Core.Ollama; using Agent.Core.Sessions; +using Agent.Core.Skills; namespace Agent.Core.Prompts; @@ -7,7 +8,8 @@ public sealed record PromptContext( string FixedSystemPrompt, string UserSystemPrompt, string Locale, - IReadOnlyList<string> Skills, + IReadOnlyList<AgentSkill> AvailableSkills, + IReadOnlyList<AgentSkill> SelectedSkills, string SandboxCapabilitySummary, string TaskGraphSummary, string PreviousSummary, @@ -24,13 +26,29 @@ public static class PromptComposer new("system", context.FixedSystemPrompt), new("system", context.UserSystemPrompt), new("system", $"Respond in locale: {context.Locale}."), - new("system", string.Join("\n\n", context.Skills)), + new("system", ComposeSkillCatalog(context.AvailableSkills)), new("system", context.SandboxCapabilitySummary), new("system", context.TaskGraphSummary), new("system", context.PreviousSummary) }; + // Inject selected skill instructions (Progressive Disclosure Stage 3). + foreach (AgentSkill skill in context.SelectedSkills) + messages.Add(new("system", skill.Instructions)); messages.AddRange(context.Conversation.Select(static item => new OllamaMessage(item.Role, item.Content))); messages.Add(new OllamaMessage("user", context.Request, context.Images)); return messages; } + + /// <summary> + /// Stage 1 Discovery: only name + description are included. Full instructions are NOT included. + /// </summary> + private static string ComposeSkillCatalog(IReadOnlyList<AgentSkill> skills) + { + if (skills.Count == 0) return "No skills available."; + var lines = new List<string> { "Available skills:" }; + foreach (AgentSkill skill in skills) + lines.Add($"- {skill.Name}: {skill.Description}"); + lines.Add("If a skill is relevant to the request, indicate which skills to use."); + return string.Join("\n", lines); + } } |
