@tinycloud/courier 0.6.0-beta.29 → 0.6.0-beta.30
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 +63 -14
- package/dist/commands.js +6 -1
- package/dist/commands.js.map +1 -1
- package/dist/intake/intake.js +7 -1
- package/dist/intake/intake.js.map +1 -1
- package/dist/interim-owner.js +2 -0
- package/dist/interim-owner.js.map +1 -1
- package/dist/interim-runtime.d.ts +9 -3
- package/dist/interim-runtime.js +39 -9
- package/dist/interim-runtime.js.map +1 -1
- package/dist/keys.d.ts +15 -0
- package/dist/keys.js +26 -0
- package/dist/keys.js.map +1 -1
- package/dist/node.d.ts +4 -1
- package/dist/node.js +33 -17
- package/dist/node.js.map +1 -1
- package/dist/pause.d.ts +3 -3
- package/dist/pause.js +32 -12
- package/dist/pause.js.map +1 -1
- package/dist/state.js +2 -0
- package/dist/state.js.map +1 -1
- package/dist/thread.d.ts +29 -1
- package/dist/thread.js +120 -5
- package/dist/thread.js.map +1 -1
- package/dist/watch-cmd.js +10 -3
- package/dist/watch-cmd.js.map +1 -1
- package/dist/watch.d.ts +72 -10
- package/dist/watch.js +353 -45
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
package/dist/interim-runtime.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { CourierError, isAuthorizationRefusal, isNotFoundError } from './errors.js';
|
|
1
|
+
import { CourierError, errInfo, isAuthorizationRefusal, isNotFoundError } from './errors.js';
|
|
2
2
|
import { cmd } from './program.js';
|
|
3
|
-
import {
|
|
3
|
+
import { stateKeys } from './keys.js';
|
|
4
4
|
import { oneLine } from './a2a.js';
|
|
5
5
|
import { loadGrant, loadProfile, withProfileTransaction } from './profile.js';
|
|
6
6
|
import { courierNode, peerKv } from './node.js';
|
|
7
|
+
import { clearReadCache } from './thread.js';
|
|
7
8
|
import { maintainOutbound } from './interim-renewal.js';
|
|
8
9
|
import { markOwnerRefused, preflightOwner } from './interim-owner.js';
|
|
9
10
|
export async function prepareOwnerAccess(request = false) {
|
|
@@ -21,22 +22,32 @@ export async function prepareOwnerAccess(request = false) {
|
|
|
21
22
|
: `Courier couldn't create an approval request. Run \`${cmd('init --request')}\` to try again.`);
|
|
22
23
|
return result;
|
|
23
24
|
}
|
|
24
|
-
/**
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Explicit and automatic paths use the same profile transaction and the same issuance policy. `strict` (the watcher,
|
|
27
|
+
* before acting for `target`): unless that peer's check gave a positive verdict (our grant live or just renewed, and,
|
|
28
|
+
* with `collect`, its grant to us readable), throw `authority-unverified` so the action fails closed and stays queued.
|
|
29
|
+
* A peer that is no longer eligible is not an error: the caller drops its work.
|
|
30
|
+
*/
|
|
31
|
+
export async function maintainPeerSet(node, target, collect = false, strict = false) {
|
|
26
32
|
const handles = Object.values(loadProfile().peers).filter(peer => peer.status === 'paired' && (!target || peer.handle === target)).map(peer => peer.handle);
|
|
27
33
|
let canRequestApproval = true;
|
|
34
|
+
const verdicts = new Map();
|
|
28
35
|
for (const handle of handles) {
|
|
29
36
|
try {
|
|
30
37
|
await withProfileTransaction(async (profile, save) => {
|
|
31
38
|
const peer = profile.peers[handle];
|
|
32
|
-
if (!peer || !watchPeerEligible(peer))
|
|
39
|
+
if (!peer || !watchPeerEligible(peer)) {
|
|
40
|
+
verdicts.set(handle, 'ineligible');
|
|
33
41
|
return;
|
|
42
|
+
}
|
|
34
43
|
if (node.credentialHolderDid !== profile.courierDid) {
|
|
35
44
|
canRequestApproval = false;
|
|
45
|
+
verdicts.set(handle, 'holder-mismatch');
|
|
36
46
|
return;
|
|
37
47
|
}
|
|
38
48
|
try {
|
|
39
49
|
const result = await maintainOutbound(node, profile, peer, save);
|
|
50
|
+
verdicts.set(handle, result.state);
|
|
40
51
|
if (result.state === 'lapsed' || result.state === 'owner-revoked')
|
|
41
52
|
canRequestApproval = false;
|
|
42
53
|
if (result.state === 'unavailable') {
|
|
@@ -57,6 +68,7 @@ export async function maintainPeerSet(node, target, collect = false) {
|
|
|
57
68
|
if (isAuthorizationRefusal(error) || (error instanceof CourierError && error.code === 'owner-authority-refused'))
|
|
58
69
|
throw error;
|
|
59
70
|
canRequestApproval = false;
|
|
71
|
+
verdicts.set(handle, `error: ${errInfo(error).code ?? 'unknown'}`);
|
|
60
72
|
peer.interim ??= { cleanup: {} };
|
|
61
73
|
peer.interim.unavailableAt ??= new Date().toISOString();
|
|
62
74
|
profile.version = 4;
|
|
@@ -71,12 +83,18 @@ export async function maintainPeerSet(node, target, collect = false) {
|
|
|
71
83
|
await peerKv(node, current, peer);
|
|
72
84
|
}
|
|
73
85
|
catch (error) {
|
|
74
|
-
if (isAuthorizationRefusal(error))
|
|
86
|
+
if (isAuthorizationRefusal(error)) {
|
|
75
87
|
await recordAuthorityRefusal(`peer:${handle}`);
|
|
88
|
+
verdicts.set(handle, 'ineligible');
|
|
89
|
+
}
|
|
76
90
|
else if (!(error instanceof CourierError))
|
|
77
91
|
throw error;
|
|
92
|
+
else
|
|
93
|
+
verdicts.set(handle, `error: ${error.code}`);
|
|
78
94
|
}
|
|
79
95
|
}
|
|
96
|
+
else
|
|
97
|
+
verdicts.set(handle, 'ineligible');
|
|
80
98
|
}
|
|
81
99
|
}
|
|
82
100
|
catch (error) {
|
|
@@ -87,6 +105,7 @@ export async function maintainPeerSet(node, target, collect = false) {
|
|
|
87
105
|
if (!(error instanceof CourierError))
|
|
88
106
|
throw error;
|
|
89
107
|
canRequestApproval = false;
|
|
108
|
+
verdicts.set(handle, `error: ${error.code}`);
|
|
90
109
|
// Other peers stay independent; the normal requested read still reports this peer's refusal.
|
|
91
110
|
console.error(`Courier couldn't renew access for ${oneLine(handle)}. Its current access is unchanged.`);
|
|
92
111
|
}
|
|
@@ -96,7 +115,8 @@ export async function maintainPeerSet(node, target, collect = false) {
|
|
|
96
115
|
// restoreSession is local. Even with no eligible peer lineage, prove owner authority on the node before asking.
|
|
97
116
|
let authenticated = false;
|
|
98
117
|
try {
|
|
99
|
-
|
|
118
|
+
// This agent's own watch.json: a read only, and never another agent's state.
|
|
119
|
+
const read = await node.kv.get(stateKeys(loadProfile().courierDid).watch, { prefix: '' });
|
|
100
120
|
if (!read.ok && !isNotFoundError(read.error))
|
|
101
121
|
throw read.error;
|
|
102
122
|
authenticated = true; // A signed, authorized 404 also proves the read was accepted.
|
|
@@ -111,6 +131,12 @@ export async function maintainPeerSet(node, target, collect = false) {
|
|
|
111
131
|
if (authenticated)
|
|
112
132
|
await prepareOwnerAccess(true);
|
|
113
133
|
}
|
|
134
|
+
if (strict && target !== undefined) {
|
|
135
|
+
const verdict = verdicts.get(target) ?? 'ineligible';
|
|
136
|
+
if (verdict !== 'live' && verdict !== 'renewed' && verdict !== 'ineligible') {
|
|
137
|
+
throw new CourierError('authority-unverified', `Couldn't verify current access for ${oneLine(target)} (${verdict}); nothing is done for it until a check succeeds.`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
114
140
|
}
|
|
115
141
|
export function watchPeerEligible(peer, now = Date.now()) {
|
|
116
142
|
return peer.status === 'paired' && !!peer.inbound && !!peer.theirHandleForMe
|
|
@@ -118,6 +144,7 @@ export function watchPeerEligible(peer, now = Date.now()) {
|
|
|
118
144
|
&& !peer.interim?.latchedAt && !peer.interim?.inboundRefusedAt;
|
|
119
145
|
}
|
|
120
146
|
export async function recordAuthorityRefusal(source) {
|
|
147
|
+
clearReadCache();
|
|
121
148
|
if (!source.startsWith('peer:')) {
|
|
122
149
|
await markOwnerRefused();
|
|
123
150
|
return;
|
|
@@ -144,12 +171,15 @@ export async function createRuntimeNode() {
|
|
|
144
171
|
throw error;
|
|
145
172
|
}
|
|
146
173
|
}
|
|
147
|
-
/**
|
|
148
|
-
export async function
|
|
174
|
+
/** Local only: owner access state, and a changed owner grant restarts a service so every captured SDK service uses the verified new session. */
|
|
175
|
+
export async function watchOwnerPreflight(node) {
|
|
149
176
|
await prepareOwnerAccess();
|
|
150
177
|
if (loadGrant()?.delegationCid !== node.restorableSession?.delegationCid) {
|
|
151
178
|
throw new CourierError('owner-grant-changed', `Your approval for Courier changed. Run your \`${cmd('watch')}\` command again to use it.`);
|
|
152
179
|
}
|
|
180
|
+
}
|
|
181
|
+
export async function watchPreflight(node) {
|
|
182
|
+
await watchOwnerPreflight(node);
|
|
153
183
|
await maintainPeerSet(node);
|
|
154
184
|
}
|
|
155
185
|
//# sourceMappingURL=interim-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interim-runtime.js","sourceRoot":"","sources":["../src/interim-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"interim-runtime.js","sourceRoot":"","sources":["../src/interim-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -40,5 +40,20 @@ export declare const k: {
|
|
|
40
40
|
ordersPrefix: string;
|
|
41
41
|
mePrefix: string;
|
|
42
42
|
};
|
|
43
|
+
/** The keys one watcher owns. */
|
|
44
|
+
export interface StateKeys {
|
|
45
|
+
watch: string;
|
|
46
|
+
paused(peer: string, threadId: string): string;
|
|
47
|
+
pausedPrefix: string;
|
|
48
|
+
wakeClaim(peer: string, threadId: string, firstId: string): string;
|
|
49
|
+
wakeClaimsPrefix: string;
|
|
50
|
+
}
|
|
51
|
+
/** The method-specific id of an agent's `did:key`: the stable name of everything Courier keeps per agent. */
|
|
52
|
+
export declare function agentId(agent: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Watcher state of one Courier agent, under `me/state/agents/<its did:key id>/`: agents of one owner share the space,
|
|
55
|
+
* never one watcher state or pause marker. Without an agent: the shared `me/state/` keys used before TC-2917.
|
|
56
|
+
*/
|
|
57
|
+
export declare function stateKeys(agent?: string): StateKeys;
|
|
43
58
|
/** Peer-read capability entries for `delegateTo`, spec §3/§5 and TC-708. */
|
|
44
59
|
export declare function peerReadPermissions(peer: string, space: string, sessionId?: string): PermissionEntry[];
|
package/dist/keys.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CourierError } from './errors.js';
|
|
1
2
|
/** Courier KV layout and the single source of agent grant authority. */
|
|
2
3
|
export const PREFIX = 'xyz.tinycloud.courier';
|
|
3
4
|
export const EXT = 'https://tinycloud.xyz/ext/courier/v0';
|
|
@@ -60,6 +61,31 @@ export const k = {
|
|
|
60
61
|
ordersPrefix: `${PREFIX}/me/orders/`,
|
|
61
62
|
mePrefix: `${PREFIX}/me/`,
|
|
62
63
|
};
|
|
64
|
+
const DID_KEY = /^did:key:(z[1-9A-HJ-NP-Za-km-z]{1,128})$/;
|
|
65
|
+
/** The method-specific id of an agent's `did:key`: the stable name of everything Courier keeps per agent. */
|
|
66
|
+
export function agentId(agent) {
|
|
67
|
+
const id = DID_KEY.exec(agent)?.[1];
|
|
68
|
+
if (!id)
|
|
69
|
+
throw new CourierError('bad-profile', 'The Courier agent DID is not a did:key; its per-agent state has no key.');
|
|
70
|
+
return id;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Watcher state of one Courier agent, under `me/state/agents/<its did:key id>/`: agents of one owner share the space,
|
|
74
|
+
* never one watcher state or pause marker. Without an agent: the shared `me/state/` keys used before TC-2917.
|
|
75
|
+
*/
|
|
76
|
+
export function stateKeys(agent) {
|
|
77
|
+
if (agent === undefined)
|
|
78
|
+
return { watch: k.watchState, paused: k.paused, pausedPrefix: k.pausedPrefix, wakeClaim: k.wakeClaim, wakeClaimsPrefix: k.wakeClaimsPrefix };
|
|
79
|
+
const id = agentId(agent);
|
|
80
|
+
const root = `${PREFIX}/me/state/agents/${id}/`;
|
|
81
|
+
return {
|
|
82
|
+
watch: `${root}watch.json`,
|
|
83
|
+
paused: (peer, threadId) => `${root}paused/${peer}/${threadId}.json`,
|
|
84
|
+
pausedPrefix: `${root}paused/`,
|
|
85
|
+
wakeClaim: (peer, threadId, firstId) => `${root}wake-claims/${peer}/${threadId}/${firstId}.json`,
|
|
86
|
+
wakeClaimsPrefix: `${root}wake-claims/`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
63
89
|
/** Peer-read capability entries for `delegateTo`, spec §3/§5 and TC-708. */
|
|
64
90
|
export function peerReadPermissions(peer, space, sessionId) {
|
|
65
91
|
const root = sessionId ? `${k.threadRoot(peer, sessionId)}/` : k.toPeer(peer);
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -11,7 +11,10 @@ export declare function nodeOpts(host: string): {
|
|
|
11
11
|
};
|
|
12
12
|
export declare function courierNode(profile: Profile, home?: string): Promise<TinyCloudNode>;
|
|
13
13
|
export declare function currentInbound(node: TinyCloudNode, profile: Profile, peer: StoredPeer): Promise<ValidatedRuntimeDelegation>;
|
|
14
|
-
|
|
14
|
+
/** `renew: false` skips reading the peer's renewal marker; the watcher reads it on its renewal schedule instead. */
|
|
15
|
+
export declare function peerKv(node: TinyCloudNode, profile: Profile, peer: StoredPeer, options?: {
|
|
16
|
+
renew?: boolean;
|
|
17
|
+
}): Promise<import("@tinycloud/node-sdk").IKVService>;
|
|
15
18
|
/** Ignore outbound issuance and display labels; compare identity, both mailbox handles and the original grant. */
|
|
16
19
|
export declare function renewalBinding(profile: Profile, peer: StoredPeer | undefined): string;
|
|
17
20
|
export declare function assertInboundLive(peer: StoredPeer, signedExpiry?: Date): void;
|
package/dist/node.js
CHANGED
|
@@ -16,7 +16,18 @@ export function nodeOpts(host) {
|
|
|
16
16
|
includeAccountRegistryPermissions: false,
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* The node each peer's reads go through, and the grant installed on it for that peer. The SDK uses the first installed
|
|
21
|
+
* grant that covers an operation (TC-2938), so a superseded grant must never sit beside its successor: the first grant
|
|
22
|
+
* of a peer is installed on the main node, and any later one on a fresh reader node that holds only it.
|
|
23
|
+
*/
|
|
24
|
+
const peerReaders = new WeakMap();
|
|
25
|
+
function readersOf(node) {
|
|
26
|
+
let readers = peerReaders.get(node);
|
|
27
|
+
if (!readers)
|
|
28
|
+
peerReaders.set(node, readers = new Map());
|
|
29
|
+
return readers;
|
|
30
|
+
}
|
|
20
31
|
export async function courierNode(profile, home) {
|
|
21
32
|
const key = loadKey(home);
|
|
22
33
|
const grant = loadGrant(home);
|
|
@@ -74,14 +85,13 @@ export async function currentInbound(node, profile, peer) {
|
|
|
74
85
|
if (peer.interim?.latchedAt || peer.interim?.inboundRefusedAt)
|
|
75
86
|
throw new CourierError('peer-revoked', `Sharing with ${peer.handle} was revoked. A new pairing is required.`);
|
|
76
87
|
assertInboundLive(peer);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
activatedCids.set(node, cids);
|
|
81
|
-
}
|
|
82
|
-
if (!cids.has(peer.inbound.cid)) {
|
|
88
|
+
const readers = readersOf(node);
|
|
89
|
+
const known = readers.get(peer.handle);
|
|
90
|
+
if (known?.cid !== peer.inbound.cid) {
|
|
83
91
|
const delegation = deserializeDelegation(peer.inbound.delegation);
|
|
84
|
-
|
|
92
|
+
// A peer whose earlier grant is installed on the main node gets a reader of its own for the new one.
|
|
93
|
+
const reader = known ? await courierNode(profile) : node;
|
|
94
|
+
const activated = await activateValidatedRuntimeDelegation(reader, delegation, { host: profile.host });
|
|
85
95
|
assertPeerDelegation(activated, {
|
|
86
96
|
issuer: peer.courierDid,
|
|
87
97
|
audience: profile.courierDid,
|
|
@@ -92,19 +102,23 @@ export async function currentInbound(node, profile, peer) {
|
|
|
92
102
|
if (activated.cid !== peer.inbound.cid) {
|
|
93
103
|
throw new CourierError('bad-delegation', `Peer delegation CID does not match the stored CID for ${peer.handle}.`);
|
|
94
104
|
}
|
|
95
|
-
|
|
105
|
+
readers.set(peer.handle, { cid: activated.cid, reader, activated });
|
|
96
106
|
}
|
|
97
|
-
const current =
|
|
107
|
+
const current = readers.get(peer.handle).activated;
|
|
98
108
|
assertInboundLive(peer, current.expiry);
|
|
99
109
|
return current;
|
|
100
110
|
}
|
|
101
|
-
|
|
111
|
+
/** The node holding only this peer's current grant (after `currentInbound`). */
|
|
112
|
+
function peerReader(node, peer) {
|
|
113
|
+
return readersOf(node).get(peer.handle).reader;
|
|
114
|
+
}
|
|
115
|
+
/** `renew: false` skips reading the peer's renewal marker; the watcher reads it on its renewal schedule instead. */
|
|
116
|
+
export async function peerKv(node, profile, peer, options = {}) {
|
|
102
117
|
const original = renewalBinding(profile, peer);
|
|
103
118
|
const current = await currentInbound(node, profile, peer);
|
|
104
|
-
const
|
|
105
|
-
const kv = node.kvForSpace(peer.spaceId);
|
|
119
|
+
const kv = peerReader(node, peer).kvForSpace(peer.spaceId);
|
|
106
120
|
// Awaiting-C still needs the explicit pairing acknowledgement, not a renewal.
|
|
107
|
-
if (peer.status !== 'paired')
|
|
121
|
+
if (peer.status !== 'paired' || options.renew === false)
|
|
108
122
|
return kv;
|
|
109
123
|
const update = await getJson(kv, k.peerDelegation(peer.theirHandleForMe, peer.sessionId));
|
|
110
124
|
assertInboundLive(peer, current.expiry);
|
|
@@ -116,7 +130,9 @@ export async function peerKv(node, profile, peer) {
|
|
|
116
130
|
if (delegation.spaceId !== peer.spaceId || delegation.ownerAddress.toLowerCase() !== peer.ownerDid.split(':').at(-1)?.toLowerCase()) {
|
|
117
131
|
throw new CourierError('bad-delegation', 'Peer renewal owner or space does not match the pairing.');
|
|
118
132
|
}
|
|
119
|
-
|
|
133
|
+
// The successor goes on a fresh reader: installed next to the current grant it would never be used.
|
|
134
|
+
const reader = await courierNode(profile);
|
|
135
|
+
const renewed = await activateValidatedRuntimeDelegation(reader, delegation, {
|
|
120
136
|
host: profile.host,
|
|
121
137
|
// Preserve signed caveats as well as the mailbox/session abilities.
|
|
122
138
|
authorize: permissions => canonicalJson(permissions.map(entry => canonicalJson(entry)).sort()) === canonicalJson(current.effectivePermissions.map(entry => canonicalJson(entry)).sort()),
|
|
@@ -140,8 +156,8 @@ export async function peerKv(node, profile, peer) {
|
|
|
140
156
|
if (profile.peers[peer.handle])
|
|
141
157
|
profile.peers[peer.handle].inbound = inbound;
|
|
142
158
|
});
|
|
143
|
-
|
|
144
|
-
return
|
|
159
|
+
readersOf(node).set(peer.handle, { cid: renewed.cid, reader, activated: renewed });
|
|
160
|
+
return reader.kvForSpace(peer.spaceId);
|
|
145
161
|
}
|
|
146
162
|
/** Ignore outbound issuance and display labels; compare identity, both mailbox handles and the original grant. */
|
|
147
163
|
export function renewalBinding(profile, peer) {
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,kCAAkC,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEvK,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5F,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO;QACL,IAAI;QACJ,sBAAsB,EAAE,CAAC,IAAI,CAAC;QAC9B,qBAAqB,EAAE,KAAK;QAC5B,iBAAiB,EAAE,KAAK;QACxB,oBAAoB,EAAE,KAAK;QAC3B,iCAAiC,EAAE,KAAK;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/pause.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { KV } from './inbox.js';
|
|
|
2
2
|
import type { ParsedArgs } from './args.js';
|
|
3
3
|
import { courierNode } from './node.js';
|
|
4
4
|
import { loadProfile, type Profile } from './profile.js';
|
|
5
|
-
/** `me/state/paused/<peer>/<thread>.json`. The watcher is the only writer of watch.json; markers are how humans and the CLI talk to it. */
|
|
5
|
+
/** `me/state/agents/<agent>/paused/<peer>/<thread>.json`. The watcher is the only writer of watch.json; markers are how humans and the CLI talk to it. */
|
|
6
6
|
export interface PauseMarker {
|
|
7
7
|
v: 1;
|
|
8
8
|
peer: string;
|
|
@@ -18,8 +18,8 @@ export interface PauseMarker {
|
|
|
18
18
|
export declare function nextNoticeId(kv: KV, peer: string, threadId: string, now?: number): Promise<string>;
|
|
19
19
|
/** Posts the machine-readable "thread paused" `inform` to the peer (it never wakes anyone; its watcher notifies its human). */
|
|
20
20
|
export declare function postPausedInform(kv: KV, profile: Profile, peerHandle: string, threadId: string, text: string, messageId?: string, resumed?: boolean): Promise<string>;
|
|
21
|
-
/** Creates the marker; false if the thread was already paused. */
|
|
22
|
-
export declare function writePauseMarker(kv: KV, marker: PauseMarker): Promise<boolean>;
|
|
21
|
+
/** Creates the marker (at `key`, by default the shared pre-TC-2917 location); false if the thread was already paused. */
|
|
22
|
+
export declare function writePauseMarker(kv: KV, marker: PauseMarker, key?: string): Promise<boolean>;
|
|
23
23
|
/** Humans only: stop waking this side's agent for a thread and tell the peer with an `inform`. */
|
|
24
24
|
export declare function cmdPause(args: ParsedArgs, deps?: {
|
|
25
25
|
profile?: typeof loadProfile;
|
package/dist/pause.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CourierError } from './errors.js';
|
|
2
2
|
import { decodeTime, ulid } from 'ulid';
|
|
3
3
|
import { ULID } from './request.js';
|
|
4
|
-
import { k, PREFIX } from './keys.js';
|
|
4
|
+
import { k, PREFIX, stateKeys } from './keys.js';
|
|
5
5
|
import { buildMessage } from './a2a.js';
|
|
6
6
|
import { del, getJson, listAll, putCreate, putMatch } from './store.js';
|
|
7
7
|
import { cmd } from './program.js';
|
|
@@ -34,10 +34,10 @@ export async function postPausedInform(kv, profile, peerHandle, threadId, text,
|
|
|
34
34
|
}
|
|
35
35
|
return message.messageId;
|
|
36
36
|
}
|
|
37
|
-
/** Creates the marker; false if the thread was already paused. */
|
|
38
|
-
export async function writePauseMarker(kv, marker) {
|
|
37
|
+
/** Creates the marker (at `key`, by default the shared pre-TC-2917 location); false if the thread was already paused. */
|
|
38
|
+
export async function writePauseMarker(kv, marker, key = k.paused(marker.peer, marker.threadId)) {
|
|
39
39
|
try {
|
|
40
|
-
await putCreate(kv,
|
|
40
|
+
await putCreate(kv, key, marker);
|
|
41
41
|
return true;
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
@@ -46,6 +46,19 @@ export async function writePauseMarker(kv, marker) {
|
|
|
46
46
|
throw error;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* A pause from before TC-2917 is at the shared `me/state/paused/` key. `pause` and `resume` copy it (create-only, so a
|
|
51
|
+
* repeat is harmless) to this agent's key before reading that, so a thread paused before the upgrade stays paused
|
|
52
|
+
* until a human resumes it. The watcher copies them on its first start. Returns the shared key if it holds a marker.
|
|
53
|
+
*/
|
|
54
|
+
async function adoptLegacyPause(kv, peer, threadId, markerKey) {
|
|
55
|
+
const legacyKey = k.paused(peer, threadId);
|
|
56
|
+
const legacy = await getJson(kv, legacyKey);
|
|
57
|
+
if (!legacy)
|
|
58
|
+
return undefined;
|
|
59
|
+
await writePauseMarker(kv, legacy.value, markerKey);
|
|
60
|
+
return legacyKey;
|
|
61
|
+
}
|
|
49
62
|
function target(args, usage) {
|
|
50
63
|
const [peer, threadId] = args.positional;
|
|
51
64
|
if (!peer || !threadId)
|
|
@@ -62,15 +75,17 @@ export async function cmdPause(args, deps = {}) {
|
|
|
62
75
|
const profile = (deps.profile ?? loadProfile)();
|
|
63
76
|
const paired = getPeer(profile, peer);
|
|
64
77
|
const node = await (deps.node ?? courierNode)(profile);
|
|
78
|
+
const markerKey = stateKeys(profile.courierDid).paused(peer, threadId);
|
|
65
79
|
let exists = await getJson(node.kv, k.threadMeta(peer, threadId)) ?? await getJson(node.kv, k.mirrorMeta(peer, threadId));
|
|
66
80
|
if (!exists && paired.inbound && paired.theirHandleForMe)
|
|
67
81
|
exists = await getJson(await peerKv(node, profile, paired), `${PREFIX}/to/${paired.theirHandleForMe}/threads/${threadId}/meta.json`);
|
|
68
82
|
if (!exists)
|
|
69
83
|
throw new CourierError('not-found', `Thread ${threadId} with ${peer} does not exist.`);
|
|
84
|
+
await adoptLegacyPause(node.kv, peer, threadId, markerKey);
|
|
70
85
|
const reason = args.has('reason') && args.get('reason') !== 'true' ? args.get('reason') : 'paused by its owner';
|
|
71
86
|
const marker = { v: 1, peer, threadId, by: 'human', at: new Date().toISOString(), reason, informId: await nextNoticeId(node.kv, peer, threadId), informSent: false };
|
|
72
|
-
const wrote = await writePauseMarker(node.kv, marker);
|
|
73
|
-
const stored = await getJson(node.kv,
|
|
87
|
+
const wrote = await writePauseMarker(node.kv, marker, markerKey);
|
|
88
|
+
const stored = await getJson(node.kv, markerKey);
|
|
74
89
|
if (!stored)
|
|
75
90
|
throw new CourierError('not-found', 'The pause marker disappeared; try again.');
|
|
76
91
|
if (!wrote && (stored.value.by !== 'human' || stored.value.informSent)) {
|
|
@@ -80,13 +95,13 @@ export async function cmdPause(args, deps = {}) {
|
|
|
80
95
|
const saved = stored.value;
|
|
81
96
|
if (!saved.informId) {
|
|
82
97
|
saved.informId = await nextNoticeId(node.kv, peer, threadId);
|
|
83
|
-
await putMatch(node.kv,
|
|
98
|
+
await putMatch(node.kv, markerKey, saved, stored.etag);
|
|
84
99
|
}
|
|
85
100
|
// A failed inform can be retried with the same message id, without duplicate messages or marker creation.
|
|
86
101
|
await postPausedInform(node.kv, profile, peer, threadId, 'Thread paused by its owner. Its agent waits until its owner resumes it.', saved.informId);
|
|
87
|
-
const fresh = await getJson(node.kv,
|
|
102
|
+
const fresh = await getJson(node.kv, markerKey);
|
|
88
103
|
if (fresh)
|
|
89
|
-
await putMatch(node.kv,
|
|
104
|
+
await putMatch(node.kv, markerKey, { ...fresh.value, informSent: true }, fresh.etag);
|
|
90
105
|
console.log(`Paused thread ${threadId} with ${peer}; told ${peer}. Resume: ${cmd(`resume ${peer} ${threadId}`)}`);
|
|
91
106
|
}
|
|
92
107
|
/** Humans only: wake this side's agent for the thread again; the wake budget starts over. */
|
|
@@ -95,17 +110,22 @@ export async function cmdResume(args, deps = {}) {
|
|
|
95
110
|
const profile = (deps.profile ?? loadProfile)();
|
|
96
111
|
getPeer(profile, peer);
|
|
97
112
|
const node = await (deps.node ?? courierNode)(profile);
|
|
98
|
-
const
|
|
113
|
+
const markerKey = stateKeys(profile.courierDid).paused(peer, threadId);
|
|
114
|
+
const legacyKey = await adoptLegacyPause(node.kv, peer, threadId, markerKey);
|
|
115
|
+
const stored = await getJson(node.kv, markerKey);
|
|
99
116
|
if (!stored) {
|
|
100
117
|
console.log(`Thread ${threadId} with ${peer} is not paused.`);
|
|
101
118
|
return;
|
|
102
119
|
}
|
|
103
120
|
const resumeInformId = stored.value.resumeInformId ?? await nextNoticeId(node.kv, peer, threadId);
|
|
104
121
|
if (!stored.value.resumeInformId)
|
|
105
|
-
await putMatch(node.kv,
|
|
122
|
+
await putMatch(node.kv, markerKey, { ...stored.value, resumeInformId }, stored.etag);
|
|
106
123
|
// Persist the id before posting: a retry cannot produce another resume transition.
|
|
107
124
|
await postPausedInform(node.kv, profile, peer, threadId, 'Thread resumed by its owner.', resumeInformId, true);
|
|
108
|
-
|
|
125
|
+
// The shared copy goes first: a retry after a crash here still finds this agent's marker and its resume inform id.
|
|
126
|
+
if (legacyKey)
|
|
127
|
+
await del(node.kv, legacyKey);
|
|
128
|
+
await del(node.kv, markerKey);
|
|
109
129
|
console.log(`Resumed thread ${threadId} with ${peer}. A running watcher picks this up with the next message it sees.`);
|
|
110
130
|
}
|
|
111
131
|
//# sourceMappingURL=pause.js.map
|
package/dist/pause.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pause.js","sourceRoot":"","sources":["../src/pause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"pause.js","sourceRoot":"","sources":["../src/pause.ts"],"names":[],"mappings":"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"}
|
package/dist/state.js
CHANGED
|
@@ -11,6 +11,7 @@ import { REVOKE_URL } from './grant-refusal.js';
|
|
|
11
11
|
import { CourierError } from './errors.js';
|
|
12
12
|
import { base64url32, ed25519DidKey, ed25519PublicKey } from './did-key.js';
|
|
13
13
|
import { formatRemovalCommand, recordLiveness } from './file-lock.js';
|
|
14
|
+
import { clearReadCache } from './thread.js';
|
|
14
15
|
/**
|
|
15
16
|
* One derivation of where `init` stands, shared by every init mode.
|
|
16
17
|
*
|
|
@@ -488,6 +489,7 @@ function applyRotation(journal) {
|
|
|
488
489
|
saveKey(journal.key);
|
|
489
490
|
saveProfile(journal.profile);
|
|
490
491
|
removeIfPresent(path.join(profileDir(), 'grant.json'));
|
|
492
|
+
clearReadCache(); // the old agent's cached counterparty bodies
|
|
491
493
|
if (journal.discardApproval)
|
|
492
494
|
clearPending();
|
|
493
495
|
for (const grant of journal.discardedGrants ?? [])
|