@memohai/cloud-runtime 0.1.0 → 2026.9.12-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/bridge.proto +29 -1
- package/dist/cli.mjs +1260 -300
- package/package.json +9 -8
- package/scripts/build.mjs +4 -3
- package/src/bootstrap.ts +4 -4
- package/src/cloud.ts +22 -6
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Connects your machine to [Memoh Cloud](https://app.memoh.net) as a remote
|
|
4
4
|
runtime. This is the Cloud distribution of the open-source
|
|
5
|
-
[`@memohai/runtime`](https://github.com/
|
|
5
|
+
[`@memohai/runtime`](https://github.com/felinics/Memoh/tree/main/packages/runtime)
|
|
6
6
|
CLI: identical behaviour, with the Cloud endpoint preconfigured.
|
|
7
7
|
|
|
8
8
|
## Usage
|
|
@@ -28,7 +28,7 @@ same as upstream.
|
|
|
28
28
|
## License and source
|
|
29
29
|
|
|
30
30
|
AGPL-3.0-only. The published artifact bundles the upstream runtime
|
|
31
|
-
implementation from [
|
|
31
|
+
implementation from [felinics/Memoh](https://github.com/felinics/Memoh);
|
|
32
32
|
`memoh-cloud-runtime --version` prints the exact upstream commit inside your
|
|
33
33
|
build. The Cloud overlay (`src/`) and the build script (`scripts/`) ship in
|
|
34
34
|
this tarball; building from source requires the Memoh monorepo checked out
|
package/dist/bridge.proto
CHANGED
|
@@ -2,7 +2,7 @@ syntax = "proto3";
|
|
|
2
2
|
|
|
3
3
|
package bridgepb;
|
|
4
4
|
|
|
5
|
-
option go_package = "github.com/
|
|
5
|
+
option go_package = "github.com/felinics/memoh/internal/workspace/bridgepb";
|
|
6
6
|
|
|
7
7
|
service ContainerService {
|
|
8
8
|
rpc ReadFile(ReadFileRequest) returns (ReadFileResponse);
|
|
@@ -16,6 +16,12 @@ service ContainerService {
|
|
|
16
16
|
rpc ReverseHTTP(stream ReverseHTTPFrame) returns (stream ReverseHTTPFrame);
|
|
17
17
|
rpc ReadRaw(ReadRawRequest) returns (stream DataChunk);
|
|
18
18
|
rpc WriteRaw(stream WriteRawChunk) returns (WriteRawResponse);
|
|
19
|
+
// These anchored variants are security boundaries for ACP session state.
|
|
20
|
+
// The server opens root and every relative_path component without following
|
|
21
|
+
// symbolic links. WriteRawNoFollow creates a new regular file and fails if
|
|
22
|
+
// the final component already exists.
|
|
23
|
+
rpc ReadRawNoFollow(ReadRawNoFollowRequest) returns (stream DataChunk);
|
|
24
|
+
rpc WriteRawNoFollow(stream WriteRawNoFollowChunk) returns (WriteRawResponse);
|
|
19
25
|
rpc DeleteFile(DeleteFileRequest) returns (DeleteFileResponse);
|
|
20
26
|
}
|
|
21
27
|
|
|
@@ -44,6 +50,11 @@ message ListDirRequest {
|
|
|
44
50
|
int32 offset = 3;
|
|
45
51
|
int32 limit = 4;
|
|
46
52
|
int32 collapse_threshold = 5;
|
|
53
|
+
// max_entries, when positive, makes the bridge STOP TRAVERSING and fail
|
|
54
|
+
// with ResourceExhausted once more than max_entries entries exist, bounding
|
|
55
|
+
// server-side memory before collection instead of after. Zero keeps the
|
|
56
|
+
// unbounded pre-existing behavior for general callers.
|
|
57
|
+
int32 max_entries = 6;
|
|
47
58
|
}
|
|
48
59
|
|
|
49
60
|
message FileEntry {
|
|
@@ -153,12 +164,29 @@ message DataChunk {
|
|
|
153
164
|
message WriteRawChunk {
|
|
154
165
|
string path = 1;
|
|
155
166
|
bytes data = 2;
|
|
167
|
+
// abort tells the bridge the sender's source failed mid-stream: discard the
|
|
168
|
+
// temporary file and fail the write instead of committing a partial target.
|
|
169
|
+
// The sender then waits for the terminal status, so cleanup is synchronous.
|
|
170
|
+
bool abort = 3;
|
|
156
171
|
}
|
|
157
172
|
|
|
158
173
|
message WriteRawResponse {
|
|
159
174
|
int64 bytes_written = 1;
|
|
160
175
|
}
|
|
161
176
|
|
|
177
|
+
message ReadRawNoFollowRequest {
|
|
178
|
+
string root = 1;
|
|
179
|
+
string relative_path = 2;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
message WriteRawNoFollowChunk {
|
|
183
|
+
string root = 1;
|
|
184
|
+
string relative_path = 2;
|
|
185
|
+
bytes data = 3;
|
|
186
|
+
// abort mirrors WriteRawChunk.abort for the anchored variant.
|
|
187
|
+
bool abort = 4;
|
|
188
|
+
}
|
|
189
|
+
|
|
162
190
|
message DeleteFileRequest {
|
|
163
191
|
string path = 1;
|
|
164
192
|
bool recursive = 2;
|