@tinycloud/courier 0.6.0-beta.33 → 0.6.0-beta.35
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 +54 -13
- package/dist/commands.js +21 -5
- package/dist/commands.js.map +1 -1
- package/dist/flags.js +1 -1
- package/dist/flags.js.map +1 -1
- package/dist/guard/paseo.js +1 -0
- package/dist/guard/paseo.js.map +1 -1
- package/dist/inbox.js +13 -8
- package/dist/inbox.js.map +1 -1
- package/dist/intake/intake.js +32 -2
- package/dist/intake/intake.js.map +1 -1
- package/dist/interim-owner.js +2 -2
- package/dist/interim-owner.js.map +1 -1
- package/dist/interim-runtime.js +2 -2
- package/dist/interim-runtime.js.map +1 -1
- package/dist/invitation.js +2 -0
- package/dist/invitation.js.map +1 -1
- package/dist/node.d.ts +4 -0
- package/dist/node.js +15 -0
- package/dist/node.js.map +1 -1
- package/dist/notify.d.ts +1 -1
- package/dist/notify.js +3 -1
- package/dist/notify.js.map +1 -1
- package/dist/pause.js +4 -1
- package/dist/pause.js.map +1 -1
- package/dist/private-dir.d.ts +37 -0
- package/dist/private-dir.js +270 -0
- package/dist/private-dir.js.map +1 -0
- package/dist/state.js +2 -2
- package/dist/state.js.map +1 -1
- package/dist/store.d.ts +30 -0
- package/dist/store.js +74 -1
- package/dist/store.js.map +1 -1
- package/dist/thread.d.ts +26 -3
- package/dist/thread.js +215 -50
- package/dist/thread.js.map +1 -1
- package/dist/watch-cache.d.ts +16 -0
- package/dist/watch-cache.js +84 -0
- package/dist/watch-cache.js.map +1 -0
- package/dist/watch-cmd.js +3 -0
- package/dist/watch-cmd.js.map +1 -1
- package/dist/watch.d.ts +73 -4
- package/dist/watch.js +275 -58
- package/dist/watch.js.map +1 -1
- package/package.json +3 -3
package/dist/thread.d.ts
CHANGED
|
@@ -15,13 +15,34 @@ export interface CacheLimits {
|
|
|
15
15
|
* `courier read`'s private cache of one thread, per agent (`<COURIER_HOME>/read-cache/<did:key id>/<thread>.json`,
|
|
16
16
|
* owner-only): messages and meta are create-only, so a repeated read fetches only entries it has not read yet. Tasks
|
|
17
17
|
* change and are always fetched. A missing, foreign, expired (7 days) or corrupt file is an empty cache; the agent's
|
|
18
|
-
* files stay within 64 MiB together, oldest dropped first.
|
|
18
|
+
* files stay within 64 MiB together, oldest dropped first. `full` starts empty: everything is fetched again and kept.
|
|
19
|
+
* Nothing is read or written unless every directory from the profile down is a real, owner-only directory of this user.
|
|
19
20
|
*/
|
|
20
|
-
export declare function diskThreadCache(agent: string, threadId: string, limits?: CacheLimits): ThreadCache & {
|
|
21
|
+
export declare function diskThreadCache(agent: string, threadId: string, limits?: CacheLimits, full?: boolean): ThreadCache & {
|
|
21
22
|
save(): void;
|
|
22
23
|
};
|
|
23
|
-
/**
|
|
24
|
+
/** Only the read cache: every cached counterparty body on this machine, removed through checked directories only. */
|
|
24
25
|
export declare function clearReadCache(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Revocation, refusal, owner revocation or a new agent key: the read cache and the watcher's local knowledge
|
|
28
|
+
* (`watch-cache/`) both go.
|
|
29
|
+
*/
|
|
30
|
+
export declare function clearLocalCaches(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Records one key this agent created under its thread root in the owner's space, after the write succeeded (`send`,
|
|
33
|
+
* the outbox, a pause inform, a task, a session's meta). One file per entry, so concurrent writers never lose each
|
|
34
|
+
* other's records. It never fails the write: if the record can't be written, the thread's listing marks are dropped
|
|
35
|
+
* so the next read lists again.
|
|
36
|
+
*/
|
|
37
|
+
export declare function recordOwnerSpaceWrite(agent: string, spaceId: string | undefined, threadId: string, key: string): void;
|
|
38
|
+
/** This agent's thread roots in the owner's space: from the local record while a listing is under an hour old. */
|
|
39
|
+
export interface OwnerSpaceIndex {
|
|
40
|
+
/** The keys under `root`, or undefined when the root must be listed. */
|
|
41
|
+
keys(root: string): string[] | undefined;
|
|
42
|
+
/** A listing of `root` just returned `keys`: they are recorded, then the listing is marked as current. */
|
|
43
|
+
listed(root: string, keys: readonly string[]): void;
|
|
44
|
+
}
|
|
45
|
+
export declare function diskOwnerSpaceIndex(agent: string, spaceId: string, threadId: string, full?: boolean, now?: number): OwnerSpaceIndex;
|
|
25
46
|
export interface ThreadEntry {
|
|
26
47
|
peer?: string;
|
|
27
48
|
kind: 'meta' | 'msg' | 'task';
|
|
@@ -46,6 +67,8 @@ export declare function collectThread(input: {
|
|
|
46
67
|
exactPeer?: boolean;
|
|
47
68
|
kvFor(peer: StoredPeer): Promise<KV>;
|
|
48
69
|
cache?: ThreadCache;
|
|
70
|
+
/** The owner-space index of our thread roots: while current, our side of the thread isn't listed. */
|
|
71
|
+
ownerSpace?: OwnerSpaceIndex;
|
|
49
72
|
/** This agent's courier DID and space: cached own entries belong to them, so a re-init or a new key starts empty. */
|
|
50
73
|
self?: {
|
|
51
74
|
courierDid: string;
|
package/dist/thread.js
CHANGED
|
@@ -1,45 +1,52 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
import fs from 'node:fs';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { messageView, oneLine, taskView } from './a2a.js';
|
|
4
5
|
import { agentId, k, PREFIX } from './keys.js';
|
|
5
|
-
import { profileDir
|
|
6
|
-
import {
|
|
6
|
+
import { profileDir } from './profile.js';
|
|
7
|
+
import { privateChild, privateDir, readPrivateFile, removePrivate, stillPrivate, unlinkPrivateFile, writePrivateFile } from './private-dir.js';
|
|
8
|
+
import { getJsonMany, listAll } from './store.js';
|
|
9
|
+
import { ULID } from './request.js';
|
|
7
10
|
const SAFE_ID = /^[0-9A-Za-z_-]{1,64}$/;
|
|
8
11
|
/** All of one agent's cached threads together, in bytes as written. */
|
|
9
12
|
const CACHE_MAX_BYTES = 64 * 1024 * 1024;
|
|
10
13
|
const CACHE_MAX_AGE_MS = 7 * 24 * 3600_000;
|
|
11
|
-
|
|
14
|
+
/** How long `courier read` uses its local record of this agent's own writes to a thread before listing them again. */
|
|
15
|
+
const OWN_INDEX_TRUST_MS = 3600_000;
|
|
16
|
+
const READ_CACHE = 'read-cache';
|
|
17
|
+
const WATCH_CACHE = 'watch-cache';
|
|
12
18
|
let preparedRoot;
|
|
13
19
|
/**
|
|
14
20
|
* Once per process: the cache directories are owner-only (0700) even if an earlier run left them looser, and thread
|
|
15
|
-
* files from before the cache was per agent (`read-cache/<thread>.json`) are deleted
|
|
16
|
-
*
|
|
21
|
+
* files from before the cache was per agent (`read-cache/<thread ULID>.json`) are deleted; nothing else at the root is.
|
|
22
|
+
* Every directory is opened without following a symlink and the chain from the profile down is checked again right
|
|
23
|
+
* before each change, so a component swapped for a link is never followed. Other users' entries are left alone.
|
|
17
24
|
*/
|
|
18
25
|
function prepareCacheRoot() {
|
|
19
|
-
const
|
|
20
|
-
if (preparedRoot ===
|
|
26
|
+
const marker = path.join(profileDir(), READ_CACHE);
|
|
27
|
+
if (preparedRoot === marker)
|
|
21
28
|
return;
|
|
22
|
-
preparedRoot =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
stat = fs.lstatSync(root);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
29
|
+
preparedRoot = marker;
|
|
30
|
+
const root = privateDir([READ_CACHE], false);
|
|
31
|
+
if (!root)
|
|
28
32
|
return;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
for (const name of fs.readdirSync(root.path)) {
|
|
34
|
+
if (!stillPrivate(root))
|
|
35
|
+
return;
|
|
36
|
+
let child;
|
|
37
|
+
try {
|
|
38
|
+
child = fs.lstatSync(path.join(root.path, name));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
37
43
|
if (child.uid !== process.getuid?.())
|
|
38
44
|
continue;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
// Only our own pre-upgrade thread files, unlinked after the chain and the entry are checked again.
|
|
46
|
+
if (child.isFile() && name.endsWith('.json') && ULID.test(name.slice(0, -5)))
|
|
47
|
+
unlinkPrivateFile(root, name);
|
|
48
|
+
else if (child.isDirectory())
|
|
49
|
+
privateChild(root, name);
|
|
43
50
|
}
|
|
44
51
|
}
|
|
45
52
|
/** A cached thread file is used only while it is a regular file of this user written within the age bound. */
|
|
@@ -54,32 +61,38 @@ function fresh(file, limits) {
|
|
|
54
61
|
}
|
|
55
62
|
/** Keeps the agent's newest thread files within the byte bound and drops any older than the age bound. */
|
|
56
63
|
function prune(dir, limits) {
|
|
57
|
-
const files = fs.readdirSync(dir).filter(name => name.endsWith('.json')).
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
const files = fs.readdirSync(dir.path).filter(name => name.endsWith('.json')).flatMap(name => {
|
|
65
|
+
try {
|
|
66
|
+
const stat = fs.lstatSync(path.join(dir.path, name));
|
|
67
|
+
return [{ name, mtime: stat.mtimeMs, bytes: stat.size, keep: stat.isFile() && limits.now - stat.mtimeMs < limits.maxAgeMs }];
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
61
72
|
}).sort((a, b) => b.mtime - a.mtime);
|
|
62
73
|
let total = 0;
|
|
63
74
|
for (const entry of files) {
|
|
64
75
|
total += entry.bytes;
|
|
65
76
|
if (!entry.keep || total > limits.maxBytes)
|
|
66
|
-
|
|
77
|
+
unlinkPrivateFile(dir, entry.name);
|
|
67
78
|
}
|
|
68
79
|
}
|
|
69
80
|
/**
|
|
70
81
|
* `courier read`'s private cache of one thread, per agent (`<COURIER_HOME>/read-cache/<did:key id>/<thread>.json`,
|
|
71
82
|
* owner-only): messages and meta are create-only, so a repeated read fetches only entries it has not read yet. Tasks
|
|
72
83
|
* change and are always fetched. A missing, foreign, expired (7 days) or corrupt file is an empty cache; the agent's
|
|
73
|
-
* files stay within 64 MiB together, oldest dropped first.
|
|
84
|
+
* files stay within 64 MiB together, oldest dropped first. `full` starts empty: everything is fetched again and kept.
|
|
85
|
+
* Nothing is read or written unless every directory from the profile down is a real, owner-only directory of this user.
|
|
74
86
|
*/
|
|
75
|
-
export function diskThreadCache(agent, threadId, limits = { now: Date.now(), maxBytes: CACHE_MAX_BYTES, maxAgeMs: CACHE_MAX_AGE_MS }) {
|
|
87
|
+
export function diskThreadCache(agent, threadId, limits = { now: Date.now(), maxBytes: CACHE_MAX_BYTES, maxAgeMs: CACHE_MAX_AGE_MS }, full = false) {
|
|
76
88
|
prepareCacheRoot();
|
|
77
|
-
const
|
|
78
|
-
const
|
|
89
|
+
const parts = [READ_CACHE, agentId(agent)];
|
|
90
|
+
const name = `${threadId}.json`;
|
|
79
91
|
let entries = {};
|
|
80
|
-
|
|
92
|
+
const existing = !full && SAFE_ID.test(threadId) ? privateDir(parts, false) : undefined;
|
|
93
|
+
if (existing && fresh(path.join(existing.path, name), limits)) {
|
|
81
94
|
try {
|
|
82
|
-
const parsed = JSON.parse(
|
|
95
|
+
const parsed = JSON.parse(readPrivateFile(existing, name) ?? '{}');
|
|
83
96
|
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
84
97
|
entries = parsed;
|
|
85
98
|
}
|
|
@@ -92,23 +105,158 @@ export function diskThreadCache(agent, threadId, limits = { now: Date.now(), max
|
|
|
92
105
|
save() {
|
|
93
106
|
if (!changed || !SAFE_ID.test(threadId))
|
|
94
107
|
return;
|
|
95
|
-
|
|
96
|
-
if (!
|
|
108
|
+
const dir = privateDir(parts, true);
|
|
109
|
+
if (!dir)
|
|
97
110
|
return;
|
|
98
|
-
//
|
|
111
|
+
// The file is pretty JSON and a newline.
|
|
99
112
|
if (Buffer.byteLength(JSON.stringify(entries, null, 2)) + 1 > limits.maxBytes)
|
|
100
|
-
|
|
113
|
+
unlinkPrivateFile(dir, name);
|
|
101
114
|
else
|
|
102
|
-
|
|
115
|
+
writePrivateFile(dir, name, entries);
|
|
103
116
|
prune(dir, limits);
|
|
104
117
|
},
|
|
105
118
|
};
|
|
106
119
|
}
|
|
107
|
-
/**
|
|
120
|
+
/** Only the read cache: every cached counterparty body on this machine, removed through checked directories only. */
|
|
108
121
|
export function clearReadCache() {
|
|
109
|
-
|
|
122
|
+
removePrivate(READ_CACHE);
|
|
110
123
|
preparedRoot = undefined;
|
|
111
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Revocation, refusal, owner revocation or a new agent key: the read cache and the watcher's local knowledge
|
|
127
|
+
* (`watch-cache/`) both go.
|
|
128
|
+
*/
|
|
129
|
+
export function clearLocalCaches() {
|
|
130
|
+
clearReadCache();
|
|
131
|
+
removePrivate(WATCH_CACHE);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The owner-space index: keys written under this agent's thread roots in the owner's space, which may be by this agent
|
|
135
|
+
* or by another agent of the same owner (same-owner agents are one principal, as the grants are). `courier read`
|
|
136
|
+
* shows them as `authority: 'self'`.
|
|
137
|
+
*/
|
|
138
|
+
const ownerSpaceParts = (agent, threadId) => [READ_CACHE, agentId(agent), 'owner-space', threadId];
|
|
139
|
+
const ownerSpaceName = (prefix, spaceId, key) => `${prefix}-${createHash('sha256').update(`${spaceId}\n${key}`).digest('hex')}.json`;
|
|
140
|
+
/**
|
|
141
|
+
* Records one key this agent created under its thread root in the owner's space, after the write succeeded (`send`,
|
|
142
|
+
* the outbox, a pause inform, a task, a session's meta). One file per entry, so concurrent writers never lose each
|
|
143
|
+
* other's records. It never fails the write: if the record can't be written, the thread's listing marks are dropped
|
|
144
|
+
* so the next read lists again.
|
|
145
|
+
*/
|
|
146
|
+
export function recordOwnerSpaceWrite(agent, spaceId, threadId, key) {
|
|
147
|
+
if (!SAFE_ID.test(threadId) || !spaceId)
|
|
148
|
+
return;
|
|
149
|
+
let parts;
|
|
150
|
+
try {
|
|
151
|
+
parts = ownerSpaceParts(agent, threadId);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return;
|
|
155
|
+
} // no did:key: this agent has no read cache at all
|
|
156
|
+
try {
|
|
157
|
+
prepareCacheRoot();
|
|
158
|
+
const dir = privateDir(parts, true);
|
|
159
|
+
if (!dir || !writePrivateFile(dir, ownerSpaceName('e', spaceId, key), { space: spaceId, key }))
|
|
160
|
+
throw new Error('not recorded');
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
try {
|
|
164
|
+
const dir = privateDir(parts, false);
|
|
165
|
+
if (!dir)
|
|
166
|
+
return; // no safe directory: no listing marks to trust
|
|
167
|
+
for (const name of fs.readdirSync(dir.path))
|
|
168
|
+
if (name.startsWith('listed-'))
|
|
169
|
+
unlinkPrivateFile(dir, name);
|
|
170
|
+
}
|
|
171
|
+
catch { /* no listing marks: the next read lists anyway */ }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export function diskOwnerSpaceIndex(agent, spaceId, threadId, full = false, now = Date.now()) {
|
|
175
|
+
const parts = ownerSpaceParts(agent, threadId);
|
|
176
|
+
const uid = process.getuid?.();
|
|
177
|
+
const regular = (dir, name) => {
|
|
178
|
+
try {
|
|
179
|
+
const stat = fs.lstatSync(path.join(dir.path, name));
|
|
180
|
+
return stat.isFile() && stat.uid === uid ? stat : undefined;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
return {
|
|
187
|
+
keys(root) {
|
|
188
|
+
if (full || !SAFE_ID.test(threadId))
|
|
189
|
+
return undefined;
|
|
190
|
+
const dir = privateDir(parts, false);
|
|
191
|
+
if (!dir)
|
|
192
|
+
return undefined;
|
|
193
|
+
let listedAt;
|
|
194
|
+
try {
|
|
195
|
+
const name = ownerSpaceName('listed', spaceId, root);
|
|
196
|
+
if (!regular(dir, name))
|
|
197
|
+
return undefined;
|
|
198
|
+
const mark = JSON.parse(readPrivateFile(dir, name) ?? 'null');
|
|
199
|
+
if (!mark || typeof mark !== 'object')
|
|
200
|
+
return undefined;
|
|
201
|
+
const { space, root: markRoot, listedAt: at } = mark;
|
|
202
|
+
if (space !== spaceId || markRoot !== root || typeof at !== 'string')
|
|
203
|
+
return undefined;
|
|
204
|
+
listedAt = Date.parse(at);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
if (!(now - listedAt >= 0 && now - listedAt < OWN_INDEX_TRUST_MS))
|
|
210
|
+
return undefined;
|
|
211
|
+
const keys = [];
|
|
212
|
+
try {
|
|
213
|
+
for (const name of fs.readdirSync(dir.path)) {
|
|
214
|
+
if (!name.startsWith('e-'))
|
|
215
|
+
continue;
|
|
216
|
+
const stat = regular(dir, name);
|
|
217
|
+
if (!stat)
|
|
218
|
+
continue;
|
|
219
|
+
// Every listing re-records what it saw, so an entry this old is from before the current listing mark.
|
|
220
|
+
if (now - stat.mtimeMs >= CACHE_MAX_AGE_MS) {
|
|
221
|
+
unlinkPrivateFile(dir, name);
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const text = readPrivateFile(dir, name);
|
|
225
|
+
if (text === undefined)
|
|
226
|
+
return undefined;
|
|
227
|
+
const entry = JSON.parse(text);
|
|
228
|
+
if (!entry || typeof entry !== 'object')
|
|
229
|
+
return undefined;
|
|
230
|
+
const { space, key } = entry;
|
|
231
|
+
if (typeof key !== 'string' || typeof space !== 'string')
|
|
232
|
+
return undefined;
|
|
233
|
+
if (space === spaceId && key.startsWith(`${root}/`))
|
|
234
|
+
keys.push(key);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
return keys.sort();
|
|
241
|
+
},
|
|
242
|
+
listed(root, keys) {
|
|
243
|
+
if (!SAFE_ID.test(threadId))
|
|
244
|
+
return;
|
|
245
|
+
try {
|
|
246
|
+
prepareCacheRoot();
|
|
247
|
+
const dir = privateDir(parts, true);
|
|
248
|
+
if (!dir)
|
|
249
|
+
return;
|
|
250
|
+
for (const key of keys) {
|
|
251
|
+
if (key.startsWith(`${root}/`) && !writePrivateFile(dir, ownerSpaceName('e', spaceId, key), { space: spaceId, key }))
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
writePrivateFile(dir, ownerSpaceName('listed', spaceId, root), { space: spaceId, root, listedAt: new Date(now).toISOString() });
|
|
255
|
+
}
|
|
256
|
+
catch { /* without a mark, the next read lists again */ }
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
112
260
|
export function peerReadError(peer) {
|
|
113
261
|
return { peer, code: 'peer-read-failed', message: `Couldn't read messages from ${oneLine(peer, 80)}.` };
|
|
114
262
|
}
|
|
@@ -133,6 +281,7 @@ export async function collectThread(input) {
|
|
|
133
281
|
// Failure of our own listing cannot safely be interpreted as an absent mapping.
|
|
134
282
|
const mine = await listAll(selfKv, `${k.threadRoot(peer.handle, threadId)}/`);
|
|
135
283
|
local.set(peer.handle, mine);
|
|
284
|
+
input.ownerSpace?.listed(k.threadRoot(peer.handle, threadId), mine);
|
|
136
285
|
const mirrored = await listAll(selfKv, `${PREFIX}/me/mirror/${peer.handle}/threads/${threadId}/`);
|
|
137
286
|
if (mine.length || mirrored.length)
|
|
138
287
|
known.push(peer);
|
|
@@ -140,20 +289,31 @@ export async function collectThread(input) {
|
|
|
140
289
|
if (known.length)
|
|
141
290
|
peers = known;
|
|
142
291
|
}
|
|
143
|
-
/**
|
|
292
|
+
/**
|
|
293
|
+
* `source`: whose space the keys are in (none: not cached). A cached body is used only for a key the current,
|
|
294
|
+
* authorized listing returned, or, for our own entries, that our own record holds.
|
|
295
|
+
*/
|
|
144
296
|
async function append(kv, keys, peer, side, source) {
|
|
145
297
|
const root = side === 'me' ? k.threadRoot(peer, threadId) : undefined;
|
|
146
|
-
|
|
298
|
+
const wanted = keys.flatMap(key => {
|
|
147
299
|
if (root && !key.startsWith(`${root}/`))
|
|
148
|
-
|
|
300
|
+
return [];
|
|
149
301
|
const kind = key.endsWith('/meta.json') ? 'meta'
|
|
150
302
|
: /\/msg\/[^/]+\.json$/.test(key) ? 'msg'
|
|
151
303
|
: /\/task\/[^/]+\.json$/.test(key) ? 'task' : undefined;
|
|
152
304
|
if (!kind)
|
|
153
|
-
|
|
305
|
+
return [];
|
|
154
306
|
const cacheId = kind === 'task' || !source ? undefined : `${source}:${key}`;
|
|
155
|
-
|
|
156
|
-
|
|
307
|
+
return [{ key, kind, cacheId, cached: cacheId === undefined ? undefined : input.cache?.get(cacheId) }];
|
|
308
|
+
});
|
|
309
|
+
// Everything not already cached in bounded batches; each entry is still checked on its own below. A value over
|
|
310
|
+
// the cap is reported as an error for that entry, and every other entry is shown.
|
|
311
|
+
const fetched = await getJsonMany(kv, wanted.filter(entry => entry.cached === undefined).map(entry => entry.key));
|
|
312
|
+
for (const key of fetched.tooLarge) {
|
|
313
|
+
errors.push({ peer, code: 'entry-too-large', message: `An entry of ${oneLine(peer, 80)} is too large to read (${oneLine(key.slice(key.lastIndexOf('/') + 1), 80)}).` });
|
|
314
|
+
}
|
|
315
|
+
for (const { key, kind, cacheId, cached } of wanted) {
|
|
316
|
+
const got = cached !== undefined ? { value: cached } : fetched.values.get(key);
|
|
157
317
|
if (!got)
|
|
158
318
|
continue;
|
|
159
319
|
if (cacheId !== undefined && cached === undefined)
|
|
@@ -165,7 +325,12 @@ export async function collectThread(input) {
|
|
|
165
325
|
}
|
|
166
326
|
}
|
|
167
327
|
for (const peer of peers) {
|
|
168
|
-
const
|
|
328
|
+
const root = k.threadRoot(peer.handle, threadId);
|
|
329
|
+
let mine = local.get(peer.handle) ?? input.ownerSpace?.keys(root);
|
|
330
|
+
if (mine === undefined) {
|
|
331
|
+
mine = await listAll(selfKv, `${root}/`);
|
|
332
|
+
input.ownerSpace?.listed(root, mine);
|
|
333
|
+
}
|
|
169
334
|
await append(selfKv, mine, peer.handle, 'me', input.self && `self:${input.self.courierDid}:${input.self.spaceId}`);
|
|
170
335
|
if (!peer.inbound || !peer.theirHandleForMe)
|
|
171
336
|
continue;
|
package/dist/thread.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StoredPeer } from './profile.js';
|
|
2
|
+
import { type LocalWatchCache } from './watch.js';
|
|
3
|
+
/**
|
|
4
|
+
* `<COURIER_HOME>/watch-cache/<did:key id>.json`, owner-only, in a checked private directory: what this agent's watcher
|
|
5
|
+
* already learned from the node (receipted message ids, mirrored meta keys, marker read times, the claim pruning
|
|
6
|
+
* time), so a restart or a `--once` run need not fetch it again.
|
|
7
|
+
* - Bound to this agent's DID and space.
|
|
8
|
+
* - Each peer's facts carry the identity (DID, space, session) they were learned under. They are loaded and saved
|
|
9
|
+
* only while the peer's current identity is the same; otherwise they are dropped, never re-stamped.
|
|
10
|
+
* - Only `peers()` (the eligible peers) are kept. A bad file, an old format or an unsafe directory is the same as no
|
|
11
|
+
* file. Deleted with the read cache (revoke, refusal, owner revocation, key rotation).
|
|
12
|
+
*/
|
|
13
|
+
export declare function fileWatchCache(agent: string, space: string, peers: () => StoredPeer[]): {
|
|
14
|
+
load(): LocalWatchCache | undefined;
|
|
15
|
+
save(cache: LocalWatchCache): void;
|
|
16
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { isRecord } from './a2a.js';
|
|
2
|
+
import { agentId, PREFIX } from './keys.js';
|
|
3
|
+
import { privateDir, readPrivateFile, writePrivateFile } from './private-dir.js';
|
|
4
|
+
import { peerIdentity, sameIdentity } from './watch.js';
|
|
5
|
+
const DIR = 'watch-cache';
|
|
6
|
+
const strings = (value) => Array.isArray(value) && value.every(item => typeof item === 'string');
|
|
7
|
+
const metaPrefix = (peer) => peer.theirHandleForMe ? `${PREFIX}/to/${peer.theirHandleForMe}/` : undefined;
|
|
8
|
+
function parse(text) {
|
|
9
|
+
const value = JSON.parse(text ?? 'null');
|
|
10
|
+
if (!isRecord(value) || value.v !== 2 || !isRecord(value.self) || typeof value.self.did !== 'string' || typeof value.self.space !== 'string'
|
|
11
|
+
|| !isRecord(value.peers) || (value.claimsPrunedAt !== undefined && typeof value.claimsPrunedAt !== 'number'))
|
|
12
|
+
return undefined;
|
|
13
|
+
for (const facts of Object.values(value.peers)) {
|
|
14
|
+
if (!isRecord(facts) || typeof facts.did !== 'string' || typeof facts.space !== 'string'
|
|
15
|
+
|| !(facts.session === null || typeof facts.session === 'string') || !strings(facts.receipted) || !strings(facts.metaMirrored)
|
|
16
|
+
|| (facts.markerReadAt !== undefined && typeof facts.markerReadAt !== 'number'))
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* `<COURIER_HOME>/watch-cache/<did:key id>.json`, owner-only, in a checked private directory: what this agent's watcher
|
|
23
|
+
* already learned from the node (receipted message ids, mirrored meta keys, marker read times, the claim pruning
|
|
24
|
+
* time), so a restart or a `--once` run need not fetch it again.
|
|
25
|
+
* - Bound to this agent's DID and space.
|
|
26
|
+
* - Each peer's facts carry the identity (DID, space, session) they were learned under. They are loaded and saved
|
|
27
|
+
* only while the peer's current identity is the same; otherwise they are dropped, never re-stamped.
|
|
28
|
+
* - Only `peers()` (the eligible peers) are kept. A bad file, an old format or an unsafe directory is the same as no
|
|
29
|
+
* file. Deleted with the read cache (revoke, refusal, owner revocation, key rotation).
|
|
30
|
+
*/
|
|
31
|
+
export function fileWatchCache(agent, space, peers) {
|
|
32
|
+
const name = `${agentId(agent)}.json`;
|
|
33
|
+
return {
|
|
34
|
+
load() {
|
|
35
|
+
try {
|
|
36
|
+
const dir = privateDir([DIR], false);
|
|
37
|
+
if (!dir)
|
|
38
|
+
return undefined;
|
|
39
|
+
const file = parse(readPrivateFile(dir, name));
|
|
40
|
+
if (!file || file.self.did !== agent || file.self.space !== space)
|
|
41
|
+
return undefined;
|
|
42
|
+
const cache = { v: 1, claimsPrunedAt: file.claimsPrunedAt, markerReadAt: {}, metaMirrored: {}, receipted: {}, identities: {} };
|
|
43
|
+
for (const peer of peers()) {
|
|
44
|
+
const facts = Object.hasOwn(file.peers, peer.handle) ? file.peers[peer.handle] : undefined;
|
|
45
|
+
const identity = peerIdentity(peer);
|
|
46
|
+
if (!facts || !sameIdentity({ did: facts.did, space: facts.space, session: facts.session }, identity))
|
|
47
|
+
continue;
|
|
48
|
+
cache.identities[peer.handle] = identity;
|
|
49
|
+
if (facts.markerReadAt !== undefined)
|
|
50
|
+
cache.markerReadAt[peer.handle] = facts.markerReadAt;
|
|
51
|
+
cache.receipted[peer.handle] = facts.receipted;
|
|
52
|
+
const prefix = metaPrefix(peer);
|
|
53
|
+
if (prefix)
|
|
54
|
+
cache.metaMirrored[peer.handle] = facts.metaMirrored.filter(key => key.startsWith(prefix));
|
|
55
|
+
}
|
|
56
|
+
return cache;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
save(cache) {
|
|
63
|
+
const dir = privateDir([DIR], true);
|
|
64
|
+
if (!dir)
|
|
65
|
+
return;
|
|
66
|
+
const file = { v: 2, self: { did: agent, space }, peers: {}, ...(cache.claimsPrunedAt !== undefined ? { claimsPrunedAt: cache.claimsPrunedAt } : {}) };
|
|
67
|
+
for (const peer of peers()) {
|
|
68
|
+
const identity = peerIdentity(peer);
|
|
69
|
+
// Facts learned under another identity of this handle are dropped, never stamped with the current one.
|
|
70
|
+
if (!sameIdentity(Object.hasOwn(cache.identities, peer.handle) ? cache.identities[peer.handle] : undefined, identity))
|
|
71
|
+
continue;
|
|
72
|
+
const prefix = metaPrefix(peer);
|
|
73
|
+
file.peers[peer.handle] = {
|
|
74
|
+
...identity,
|
|
75
|
+
...(cache.markerReadAt[peer.handle] !== undefined ? { markerReadAt: cache.markerReadAt[peer.handle] } : {}),
|
|
76
|
+
receipted: cache.receipted[peer.handle] ?? [],
|
|
77
|
+
metaMirrored: prefix ? (cache.metaMirrored[peer.handle] ?? []).filter(key => key.startsWith(prefix)) : [],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
writePrivateFile(dir, name, file);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=watch-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-cache.js","sourceRoot":"","sources":["../src/watch-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/watch-cmd.js
CHANGED
|
@@ -9,6 +9,7 @@ import { CourierError } from './errors.js';
|
|
|
9
9
|
import { loadProfile, profileDir, writeSecure } from './profile.js';
|
|
10
10
|
import { peerHooks, peerKv } from './node.js';
|
|
11
11
|
import { WATCH_DEFAULTS, Watcher } from './watch.js';
|
|
12
|
+
import { fileWatchCache } from './watch-cache.js';
|
|
12
13
|
import { UNGUARDED_REFUSAL, createWaker, jsonLineLog, killAllRunners, spawnRunner } from './wake.js';
|
|
13
14
|
import { startsAgentCli } from './guard/policy.js';
|
|
14
15
|
import { guardArgv } from './guard/command.js';
|
|
@@ -278,6 +279,8 @@ export async function cmdWatch(args) {
|
|
|
278
279
|
postInform: async (peer, threadId, text, pauseId) => { await postPausedInform(node.kv, loadProfile(), peer, threadId, text, pauseId); },
|
|
279
280
|
notify: createNotifier(notifyConfig(args, config), { run: spawnRunner }),
|
|
280
281
|
holder: { profileId: watcherProfileId() },
|
|
282
|
+
// Only eligible peers' facts are kept: a refused, latched or removed peer's facts go with the next save.
|
|
283
|
+
localCache: fileWatchCache(node.credentialHolderDid, profile.spaceId, () => Object.values(loadProfile().peers).filter(peer => watchPeerEligible(peer))),
|
|
281
284
|
log,
|
|
282
285
|
}, opts);
|
|
283
286
|
const stop = new AbortController();
|