using UnityEngine; using LLM.Editor.Data; using LLM.Editor.Core; using LLM.Editor.Helper; using Newtonsoft.Json.Linq; using JetBrains.Annotations; namespace LLM.Editor.Commands { /// /// A command that allows the LLM to write to, update, or clear its own /// short-term memory for the current session. /// [UsedImplicitly] public class UpdateWorkingContextCommand : ICommand { [System.Serializable] private class UpdateWorkingContextParams { public JObject updates; public string[] keysToRemove; public bool clearAll; } private readonly UpdateWorkingContextParams _params; public UpdateWorkingContextCommand(string jsonParams) { _params = jsonParams?.FromJson(); } public CommandOutcome Execute(CommandContext context) { if (_params == null) { Debug.LogError("[UpdateWorkingContextCommand] Invalid parameters."); return CommandOutcome.Error; } var workingContext = SessionManager.LoadWorkingContext(); if (_params.clearAll) { workingContext = new JObject(); } else { if (_params.keysToRemove != null) { foreach (var key in _params.keysToRemove) { workingContext.Remove(key); } } if (_params.updates != null) { workingContext.Merge(_params.updates, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Replace }); } } SessionManager.SaveWorkingContext(workingContext); Debug.Log($"[UpdateWorkingContextCommand] Working context updated:\n{workingContext.ToString(Newtonsoft.Json.Formatting.Indented)}"); return CommandOutcome.Success; } } }