1
0
Files
Toak/Core/Skills/DynamicSkill.cs

48 lines
1.5 KiB
C#

using System.Diagnostics;
namespace Toak.Core.Skills;
public class DynamicSkill(SkillDefinition def) : ISkill
{
private readonly SkillDefinition _def = def;
public string Name => _def.Name;
public string Description => _def.Description;
public string[] Hotwords => _def.Hotwords;
public bool HandlesExecution => _def.Action.ToLowerInvariant() == "script";
public string GetSystemPrompt(string rawTranscript)
{
return _def.SystemPrompt.Replace("{transcript}", rawTranscript);
}
public void Execute(string llmResult)
{
if (HandlesExecution && !string.IsNullOrWhiteSpace(_def.ScriptPath))
{
var expandedPath = Environment.ExpandEnvironmentVariables(_def.ScriptPath);
if (expandedPath.StartsWith("~"))
{
expandedPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + expandedPath.Substring(1);
}
try
{
var process = Process.Start(new ProcessStartInfo
{
FileName = expandedPath,
Arguments = $"\"{llmResult.Replace("\"", "\\\"")}\"",
UseShellExecute = false,
CreateNoWindow = true
});
process?.WaitForExit();
}
catch (Exception ex)
{
Console.WriteLine($"[DynamicSkill] Error executing script '{expandedPath}': {ex.Message}");
}
}
}
}