summaryrefslogtreecommitdiff
path: root/src/Agent.Core/Prompts/PromptComposer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Agent.Core/Prompts/PromptComposer.cs')
-rw-r--r--src/Agent.Core/Prompts/PromptComposer.cs22
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);
+ }
}