aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/proto
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
commit5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8 (patch)
treec64baa8d5866c8e339eaf660dd3f94f30a3f7d8a /crates/turtle/proto
parentchore: Somewhat simplify sync code (diff)
downloadatuin-5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8.zip
chore: Move everything into one big crate
That helps remove duplicated code and rustc/cargo will now also show dead code correctly.
Diffstat (limited to 'crates/turtle/proto')
-rw-r--r--crates/turtle/proto/control.proto62
-rw-r--r--crates/turtle/proto/history.proto81
-rw-r--r--crates/turtle/proto/search.proto35
-rw-r--r--crates/turtle/proto/semantic.proto47
4 files changed, 225 insertions, 0 deletions
diff --git a/crates/turtle/proto/control.proto b/crates/turtle/proto/control.proto
new file mode 100644
index 00000000..06347902
--- /dev/null
+++ b/crates/turtle/proto/control.proto
@@ -0,0 +1,62 @@
+syntax = "proto3";
+package control;
+
+// The Control service allows external processes (CLI commands, etc.)
+// to inject events into the running daemon.
+service Control {
+ // Send an event to the daemon's event bus
+ rpc SendEvent(SendEventRequest) returns (SendEventResponse);
+}
+
+message SendEventRequest {
+ oneof event {
+ // History was pruned - search index needs full rebuild
+ HistoryPrunedEvent history_pruned = 1;
+
+ // Specific history items were deleted
+ HistoryDeletedEvent history_deleted = 2;
+
+ // Request immediate sync
+ ForceSyncEvent force_sync = 3;
+
+ // Settings have changed, reload if needed
+ SettingsReloadedEvent settings_reloaded = 4;
+
+ // Request graceful shutdown
+ ShutdownEvent shutdown = 5;
+
+ // History was rebuilt - search index needs full rebuild
+ HistoryRebuiltEvent history_rebuilt = 6;
+ }
+}
+
+message SendEventResponse {
+ // Empty on success; errors come through gRPC status
+}
+
+// Individual event message types
+
+message HistoryPrunedEvent {
+ // No fields needed - just signals that pruning happened
+}
+
+message HistoryRebuiltEvent {
+ // No fields needed - just signals that rebuilding happened
+}
+
+message HistoryDeletedEvent {
+ // IDs of deleted history items (UUIDs as strings)
+ repeated string ids = 1;
+}
+
+message ForceSyncEvent {
+ // No fields needed - just triggers sync
+}
+
+message SettingsReloadedEvent {
+ // No fields needed - components should re-read settings
+}
+
+message ShutdownEvent {
+ // No fields needed - triggers graceful shutdown
+}
diff --git a/crates/turtle/proto/history.proto b/crates/turtle/proto/history.proto
new file mode 100644
index 00000000..59c12471
--- /dev/null
+++ b/crates/turtle/proto/history.proto
@@ -0,0 +1,81 @@
+syntax = "proto3";
+package history;
+
+message StartHistoryRequest {
+ // If people are still using my software in ~530 years, they can figure out a u128 migration
+ uint64 timestamp = 1; // nanosecond unix epoch
+ string command = 2;
+ string cwd = 3;
+ string session = 4;
+ string hostname = 5;
+ string author = 6;
+ string intent = 7;
+}
+
+message EndHistoryRequest {
+ string id = 1;
+ int64 exit = 2;
+ uint64 duration = 3;
+}
+
+message StartHistoryReply {
+ string id = 1;
+ string version = 2;
+ uint32 protocol = 3;
+}
+
+message EndHistoryReply {
+ string id = 1;
+ uint64 idx = 2;
+ string version = 3;
+ uint32 protocol = 4;
+}
+
+message StatusRequest {}
+
+message StatusReply {
+ bool healthy = 1;
+ string version = 2;
+ uint32 pid = 3;
+ uint32 protocol = 4;
+}
+
+message ShutdownRequest {}
+
+message ShutdownReply {
+ bool accepted = 1;
+}
+
+message TailHistoryRequest {}
+
+enum HistoryEventKind {
+ HISTORY_EVENT_KIND_UNSPECIFIED = 0;
+ HISTORY_EVENT_KIND_STARTED = 1;
+ HISTORY_EVENT_KIND_ENDED = 2;
+}
+
+message HistoryEntry {
+ uint64 timestamp = 1; // nanosecond unix epoch
+ string id = 2;
+ string command = 3;
+ string cwd = 4;
+ string session = 5;
+ string hostname = 6;
+ string author = 7;
+ string intent = 8;
+ int64 exit = 9;
+ int64 duration = 10;
+}
+
+message TailHistoryReply {
+ HistoryEventKind kind = 1;
+ HistoryEntry history = 2;
+}
+
+service History {
+ rpc StartHistory(StartHistoryRequest) returns (StartHistoryReply);
+ rpc EndHistory(EndHistoryRequest) returns (EndHistoryReply);
+ rpc TailHistory(TailHistoryRequest) returns (stream TailHistoryReply);
+ rpc Status(StatusRequest) returns (StatusReply);
+ rpc Shutdown(ShutdownRequest) returns (ShutdownReply);
+}
diff --git a/crates/turtle/proto/search.proto b/crates/turtle/proto/search.proto
new file mode 100644
index 00000000..6b84acbd
--- /dev/null
+++ b/crates/turtle/proto/search.proto
@@ -0,0 +1,35 @@
+syntax = "proto3";
+package search;
+
+enum FilterMode {
+ GLOBAL = 0;
+ HOST = 1;
+ SESSION = 2;
+ DIRECTORY = 3;
+ WORKSPACE = 4;
+ SESSION_PRELOAD = 5;
+}
+
+message SearchContext {
+ string session_id = 1;
+ string cwd = 2;
+ string hostname = 3;
+ string host_id = 4;
+ optional string git_root = 5;
+}
+
+message SearchRequest {
+ string query = 1;
+ uint64 query_id = 2; // Incrementing ID to match responses to queries
+ FilterMode filter_mode = 3;
+ SearchContext context = 4;
+}
+
+message SearchResponse {
+ uint64 query_id = 1; // Echo back the query ID
+ repeated bytes ids = 2;
+}
+
+service Search {
+ rpc Search(stream SearchRequest) returns (stream SearchResponse);
+}
diff --git a/crates/turtle/proto/semantic.proto b/crates/turtle/proto/semantic.proto
new file mode 100644
index 00000000..07e550c8
--- /dev/null
+++ b/crates/turtle/proto/semantic.proto
@@ -0,0 +1,47 @@
+syntax = "proto3";
+package semantic;
+
+service Semantic {
+ rpc RecordCommands(stream CommandCapture) returns (RecordCommandsReply);
+ rpc CommandOutput(CommandOutputRequest) returns (CommandOutputReply);
+}
+
+message CommandCapture {
+ string prompt = 1;
+ string command = 2;
+ string output = 3;
+ optional int32 exit_code = 4;
+ optional string history_id = 5;
+ optional string session_id = 6;
+ bool output_truncated = 7;
+ uint64 output_observed_bytes = 8;
+}
+
+message RecordCommandsReply {
+ uint64 accepted = 1;
+}
+
+message CommandOutputRequest {
+ string history_id = 1;
+ repeated OutputRange ranges = 2;
+}
+
+message OutputRange {
+ int64 start = 1;
+ int64 end = 2;
+}
+
+message OutputLine {
+ uint64 line_number = 1;
+ string content = 2;
+}
+
+message CommandOutputReply {
+ bool found = 1;
+ string output = 2;
+ uint64 total_bytes = 3;
+ uint64 total_lines = 4;
+ repeated OutputLine lines = 5;
+ bool output_truncated = 6;
+ uint64 output_observed_bytes = 7;
+}