@wirecat/cli-core 0.298.0 → 0.300.0
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/dist/cli/index.d.ts +2 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/admin-commands.d.ts.map +1 -1
- package/dist/cli/messenger/admin-commands.js +24 -20
- package/dist/cli/messenger/admin-commands.js.map +1 -1
- package/dist/cli/messenger/chats-read-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-read-command.js +17 -14
- package/dist/cli/messenger/chats-read-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +7 -1
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/history-query.d.ts +4 -0
- package/dist/cli/messenger/history-query.d.ts.map +1 -1
- package/dist/cli/messenger/history-query.js +7 -0
- package/dist/cli/messenger/history-query.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +8 -5
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/messages-delete-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-delete-command.js +9 -2
- package/dist/cli/messenger/messages-delete-command.js.map +1 -1
- package/dist/cli/messenger/messages-send-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-send-command.js +8 -5
- package/dist/cli/messenger/messages-send-command.js.map +1 -1
- package/dist/cli/messenger/polls-command.d.ts.map +1 -1
- package/dist/cli/messenger/polls-command.js +4 -2
- package/dist/cli/messenger/polls-command.js.map +1 -1
- package/dist/files/index.d.ts +1 -1
- package/dist/files/index.d.ts.map +1 -1
- package/dist/files/index.js +1 -1
- package/dist/files/index.js.map +1 -1
- package/dist/files/ordinary-file.d.ts +3 -1
- package/dist/files/ordinary-file.d.ts.map +1 -1
- package/dist/files/ordinary-file.js +3 -4
- package/dist/files/ordinary-file.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/persistence/native/index.d.ts +3 -0
- package/dist/persistence/native/index.d.ts.map +1 -0
- package/dist/persistence/native/index.js +2 -0
- package/dist/persistence/native/index.js.map +1 -0
- package/dist/persistence/native/recording-partial-metadata.d.ts +12 -0
- package/dist/persistence/native/recording-partial-metadata.d.ts.map +1 -0
- package/dist/persistence/native/recording-partial-metadata.js +74 -0
- package/dist/persistence/native/recording-partial-metadata.js.map +1 -0
- package/dist/persistence/native/recording-partial-store.d.ts +26 -0
- package/dist/persistence/native/recording-partial-store.d.ts.map +1 -0
- package/dist/persistence/native/recording-partial-store.js +128 -0
- package/dist/persistence/native/recording-partial-store.js.map +1 -0
- package/dist/persistence/native/recording-partial-writer.d.ts +17 -0
- package/dist/persistence/native/recording-partial-writer.d.ts.map +1 -0
- package/dist/persistence/native/recording-partial-writer.js +98 -0
- package/dist/persistence/native/recording-partial-writer.js.map +1 -0
- package/package.json +9 -1
- package/parity.json +28 -7
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { open, rename, unlink } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { CliError } from "@wirecat/cli-base";
|
|
5
|
+
import { sameOrdinaryFile, syncDirectory } from "../../files/index.js";
|
|
6
|
+
import { metadataLimit, missing } from "./recording-partial-metadata.js";
|
|
7
|
+
export const partialWriter = async (input) => {
|
|
8
|
+
const { file, signal, partial } = input;
|
|
9
|
+
const owned = await file.stat({ bigint: true });
|
|
10
|
+
let size = input.fingerprint.offset;
|
|
11
|
+
const hash = input.fingerprint.hash;
|
|
12
|
+
let closed = false;
|
|
13
|
+
let failed = false;
|
|
14
|
+
const usable = async () => {
|
|
15
|
+
signal?.throwIfAborted();
|
|
16
|
+
if (closed || failed)
|
|
17
|
+
throw new CliError("validation_error", "recording partial writer is no longer writable");
|
|
18
|
+
if (!(await sameOrdinaryFile(input.path, owned)))
|
|
19
|
+
throw new CliError("validation_error", "recording partial changed before append");
|
|
20
|
+
};
|
|
21
|
+
const checkpoint = async () => {
|
|
22
|
+
await usable();
|
|
23
|
+
await file.sync();
|
|
24
|
+
if (!partial.validator || !input.persistent) {
|
|
25
|
+
await syncDirectory(input.root);
|
|
26
|
+
signal?.throwIfAborted();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const content = JSON.stringify({ ...partial, offset: size, sha256: hash.copy().digest("hex") });
|
|
30
|
+
if (Buffer.byteLength(content) > metadataLimit)
|
|
31
|
+
throw new CliError("validation_error", "recording partial metadata exceeds its byte limit");
|
|
32
|
+
const temp = join(input.root, `${input.prefix}${randomUUID()}.tmp`);
|
|
33
|
+
const metadata = await open(temp, "wx", 0o600);
|
|
34
|
+
try {
|
|
35
|
+
try {
|
|
36
|
+
await metadata.writeFile(content);
|
|
37
|
+
await metadata.sync();
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await metadata.close();
|
|
41
|
+
}
|
|
42
|
+
await usable();
|
|
43
|
+
await rename(temp, input.metadataPath);
|
|
44
|
+
await syncDirectory(input.root);
|
|
45
|
+
signal?.throwIfAborted();
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await unlink(temp).catch((error) => {
|
|
49
|
+
if (!missing(error))
|
|
50
|
+
throw error;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
write: async (bytes) => {
|
|
56
|
+
await usable();
|
|
57
|
+
if (!(bytes instanceof Uint8Array) || bytes.length > input.maxBytes - size)
|
|
58
|
+
throw new CliError("validation_error", "recording partial exceeds its byte limit");
|
|
59
|
+
let offset = 0;
|
|
60
|
+
try {
|
|
61
|
+
while (offset < bytes.length) {
|
|
62
|
+
signal?.throwIfAborted();
|
|
63
|
+
const written = (await file.write(bytes, offset, bytes.length - offset, size + offset)).bytesWritten;
|
|
64
|
+
if (written === 0)
|
|
65
|
+
throw new CliError("configuration_error", "recording partial write did not progress");
|
|
66
|
+
offset += written;
|
|
67
|
+
}
|
|
68
|
+
hash.update(bytes);
|
|
69
|
+
size += bytes.length;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
failed = true;
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
checkpoint,
|
|
77
|
+
finish: async () => {
|
|
78
|
+
await checkpoint();
|
|
79
|
+
signal?.throwIfAborted();
|
|
80
|
+
const sha256 = hash.copy().digest("hex");
|
|
81
|
+
input.complete(partial.validator ? { ...partial, offset: size, sha256 } : null);
|
|
82
|
+
return { size, sha256 };
|
|
83
|
+
},
|
|
84
|
+
close: async () => {
|
|
85
|
+
if (closed)
|
|
86
|
+
return;
|
|
87
|
+
closed = true;
|
|
88
|
+
try {
|
|
89
|
+
await file.close();
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
input.complete(null);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=recording-partial-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording-partial-writer.js","sourceRoot":"","sources":["../../../src/persistence/native/recording-partial-writer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.300.0",
|
|
4
4
|
"description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|
|
@@ -63,6 +63,10 @@
|
|
|
63
63
|
"types": "./dist/parity/index.d.ts",
|
|
64
64
|
"default": "./dist/parity/index.js"
|
|
65
65
|
},
|
|
66
|
+
"./mcp": {
|
|
67
|
+
"types": "./dist/mcp/index.d.ts",
|
|
68
|
+
"default": "./dist/mcp/index.js"
|
|
69
|
+
},
|
|
66
70
|
"./testing": {
|
|
67
71
|
"types": "./dist/kit/index.d.ts",
|
|
68
72
|
"default": "./dist/kit/index.js"
|
|
@@ -108,6 +112,10 @@
|
|
|
108
112
|
"types": "./dist/files/index.d.ts",
|
|
109
113
|
"default": "./dist/files/index.js"
|
|
110
114
|
},
|
|
115
|
+
"./persistence/native": {
|
|
116
|
+
"types": "./dist/persistence/native/index.d.ts",
|
|
117
|
+
"default": "./dist/persistence/native/index.js"
|
|
118
|
+
},
|
|
111
119
|
"./speech/wav": {
|
|
112
120
|
"types": "./dist/speech/wav.d.ts",
|
|
113
121
|
"default": "./dist/speech/wav.js"
|
package/parity.json
CHANGED
|
@@ -1867,7 +1867,10 @@
|
|
|
1867
1867
|
"chats mark-read": {
|
|
1868
1868
|
"in": "all",
|
|
1869
1869
|
"options": {
|
|
1870
|
-
"--topic":
|
|
1870
|
+
"--topic": {
|
|
1871
|
+
"in": ["tg"],
|
|
1872
|
+
"reason": "MAX has no forum topics"
|
|
1873
|
+
},
|
|
1871
1874
|
"--until-id": "all"
|
|
1872
1875
|
}
|
|
1873
1876
|
},
|
|
@@ -1966,15 +1969,27 @@
|
|
|
1966
1969
|
"chats requests accept": {
|
|
1967
1970
|
"in": "all",
|
|
1968
1971
|
"options": {
|
|
1969
|
-
"--all":
|
|
1970
|
-
|
|
1972
|
+
"--all": {
|
|
1973
|
+
"in": ["tg"],
|
|
1974
|
+
"reason": "MAX answers one join request at a time"
|
|
1975
|
+
},
|
|
1976
|
+
"--link": {
|
|
1977
|
+
"in": ["tg"],
|
|
1978
|
+
"reason": "MAX answers one join request at a time"
|
|
1979
|
+
}
|
|
1971
1980
|
}
|
|
1972
1981
|
},
|
|
1973
1982
|
"chats requests decline": {
|
|
1974
1983
|
"in": "all",
|
|
1975
1984
|
"options": {
|
|
1976
|
-
"--all":
|
|
1977
|
-
|
|
1985
|
+
"--all": {
|
|
1986
|
+
"in": ["tg"],
|
|
1987
|
+
"reason": "MAX answers one join request at a time"
|
|
1988
|
+
},
|
|
1989
|
+
"--link": {
|
|
1990
|
+
"in": ["tg"],
|
|
1991
|
+
"reason": "MAX answers one join request at a time"
|
|
1992
|
+
}
|
|
1978
1993
|
}
|
|
1979
1994
|
},
|
|
1980
1995
|
"chats requests list": {
|
|
@@ -2778,7 +2793,10 @@
|
|
|
2778
2793
|
"tg": "tg-cli backlog: stickers"
|
|
2779
2794
|
}
|
|
2780
2795
|
},
|
|
2781
|
-
"--topic":
|
|
2796
|
+
"--topic": {
|
|
2797
|
+
"in": ["tg"],
|
|
2798
|
+
"reason": "MAX has no forum topics"
|
|
2799
|
+
},
|
|
2782
2800
|
"--voice": "all"
|
|
2783
2801
|
}
|
|
2784
2802
|
},
|
|
@@ -2899,7 +2917,10 @@
|
|
|
2899
2917
|
"in": ["tg"],
|
|
2900
2918
|
"reason": "max-cli creates no quizzes"
|
|
2901
2919
|
},
|
|
2902
|
-
"--topic":
|
|
2920
|
+
"--topic": {
|
|
2921
|
+
"in": ["tg"],
|
|
2922
|
+
"reason": "MAX has no forum topics"
|
|
2923
|
+
}
|
|
2903
2924
|
}
|
|
2904
2925
|
},
|
|
2905
2926
|
"polls show": {
|