12#ifndef YAZE_SRC_CLI_SERVICE_AGENT_TOOLS_PROJECT_TOOL_H_
13#define YAZE_SRC_CLI_SERVICE_AGENT_TOOLS_PROJECT_TOOL_H_
22#include "absl/status/status.h"
23#include "absl/status/statusor.h"
48 static constexpr uint32_t
kMagic = 0x59415A45;
70 std::chrono::system_clock::time_point
created;
76 absl::Status
SaveToFile(
const std::string& filepath)
const;
78 const std::string& filepath);
98 absl::Status
Initialize(
const std::string& base_path);
109 const std::vector<RomEdit>& edits,
110 const std::array<uint8_t, 32>& rom_checksum);
128 absl::StatusOr<ProjectSnapshot>
GetSnapshot(
const std::string&
name)
const;
142 bool include_rom =
false);
155 absl::StatusOr<std::string>
DiffSnapshots(
const std::string& snapshot1,
156 const std::string& snapshot2)
const;
196 static std::array<uint8_t, 32>
ComputeSHA256(
const uint8_t* data,
204 static std::string
FormatChecksum(
const std::array<uint8_t, 32>& checksum);
212 const std::chrono::system_clock::time_point& time);
219 static absl::StatusOr<std::chrono::system_clock::time_point>
ParseTimestamp(
220 const std::string& timestamp);
237 std::string
FormatEdits(
const std::vector<RomEdit>& edits)
const;
258 std::string
GetName()
const override {
return "project-status"; }
261 return "Show current project state and pending edits";
265 return "project-status [--format <json|text>]";
273 return absl::OkStatus();
290 std::string
GetName()
const override {
return "project-snapshot"; }
293 return "Create named checkpoint with edit deltas";
297 return "project-snapshot --name <name> [--description <desc>] [--format <json|text>]";
321 std::string
GetName()
const override {
return "project-restore"; }
324 return "Restore ROM to named checkpoint";
328 return "project-restore --name <name> [--format <json|text>]";
352 std::string
GetName()
const override {
return "project-export"; }
355 return "Export project as portable archive";
359 return "project-export --path <path> [--include-rom] [--format <json|text>]";
382 std::string
GetName()
const override {
return "project-import"; }
387 return "project-import --path <path> [--format <json|text>]";
410 std::string
GetName()
const override {
return "project-diff"; }
415 return "project-diff --snapshot1 <name> --snapshot2 <name> [--format <json|text>]";
422 return parser.
RequireArgs({
"snapshot1",
"snapshot2"});
Agent context for state preservation across tool calls.
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Agent context for maintaining state across tool calls.
Utility for parsing common CLI argument patterns.
absl::Status RequireArgs(const std::vector< std::string > &required) const
Validate that required arguments are present.
Base class for CLI command handlers.