mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
c1e6e0cc7a
Large directories like node_modules/.venv could return thousands of entries, wasting tokens and causing timeouts. Add offset/limit pagination to ListDir RPC and collapse heavy subdirectories (>50 items) into summaries in recursive mode. Collapsing runs at the bridge layer before pagination so the page window reflects the collapsed view.
132 lines
2.3 KiB
Protocol Buffer
132 lines
2.3 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package bridgepb;
|
|
|
|
option go_package = "github.com/memohai/memoh/internal/workspace/bridgepb";
|
|
|
|
service ContainerService {
|
|
rpc ReadFile(ReadFileRequest) returns (ReadFileResponse);
|
|
rpc WriteFile(WriteFileRequest) returns (WriteFileResponse);
|
|
rpc ListDir(ListDirRequest) returns (ListDirResponse);
|
|
rpc Stat(StatRequest) returns (StatResponse);
|
|
rpc Mkdir(MkdirRequest) returns (MkdirResponse);
|
|
rpc Rename(RenameRequest) returns (RenameResponse);
|
|
rpc Exec(stream ExecInput) returns (stream ExecOutput);
|
|
rpc ReadRaw(ReadRawRequest) returns (stream DataChunk);
|
|
rpc WriteRaw(stream WriteRawChunk) returns (WriteRawResponse);
|
|
rpc DeleteFile(DeleteFileRequest) returns (DeleteFileResponse);
|
|
}
|
|
|
|
message ReadFileRequest {
|
|
string path = 1;
|
|
int32 line_offset = 2;
|
|
int32 n_lines = 3;
|
|
}
|
|
|
|
message ReadFileResponse {
|
|
string content = 1;
|
|
int32 total_lines = 2;
|
|
bool binary = 3;
|
|
}
|
|
|
|
message WriteFileRequest {
|
|
string path = 1;
|
|
bytes content = 2;
|
|
}
|
|
|
|
message WriteFileResponse {}
|
|
|
|
message ListDirRequest {
|
|
string path = 1;
|
|
bool recursive = 2;
|
|
int32 offset = 3;
|
|
int32 limit = 4;
|
|
int32 collapse_threshold = 5;
|
|
}
|
|
|
|
message FileEntry {
|
|
string path = 1;
|
|
bool is_dir = 2;
|
|
int64 size = 3;
|
|
string mode = 4;
|
|
string mod_time = 5;
|
|
string summary = 6;
|
|
}
|
|
|
|
message ListDirResponse {
|
|
repeated FileEntry entries = 1;
|
|
int32 total_count = 2;
|
|
bool truncated = 3;
|
|
}
|
|
|
|
message ExecInput {
|
|
string command = 1;
|
|
string work_dir = 2;
|
|
repeated string env = 3;
|
|
int32 timeout_seconds = 4;
|
|
bytes stdin_data = 5;
|
|
bool pty = 6;
|
|
TerminalResize resize = 7;
|
|
}
|
|
|
|
message TerminalResize {
|
|
uint32 cols = 1;
|
|
uint32 rows = 2;
|
|
}
|
|
|
|
message ExecOutput {
|
|
enum Stream {
|
|
STDOUT = 0;
|
|
STDERR = 1;
|
|
EXIT = 2;
|
|
}
|
|
Stream stream = 1;
|
|
bytes data = 2;
|
|
int32 exit_code = 3;
|
|
}
|
|
|
|
message ReadRawRequest {
|
|
string path = 1;
|
|
}
|
|
|
|
message DataChunk {
|
|
bytes data = 1;
|
|
}
|
|
|
|
message WriteRawChunk {
|
|
string path = 1;
|
|
bytes data = 2;
|
|
}
|
|
|
|
message WriteRawResponse {
|
|
int64 bytes_written = 1;
|
|
}
|
|
|
|
message DeleteFileRequest {
|
|
string path = 1;
|
|
bool recursive = 2;
|
|
}
|
|
|
|
message DeleteFileResponse {}
|
|
|
|
message StatRequest {
|
|
string path = 1;
|
|
}
|
|
|
|
message StatResponse {
|
|
FileEntry entry = 1;
|
|
}
|
|
|
|
message MkdirRequest {
|
|
string path = 1;
|
|
}
|
|
|
|
message MkdirResponse {}
|
|
|
|
message RenameRequest {
|
|
string old_path = 1;
|
|
string new_path = 2;
|
|
}
|
|
|
|
message RenameResponse {}
|