@agentshouse/mdruntime 0.1.0-c97456d63baba → 0.1.0-c9873d788cfb6
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 +19 -16
- package/dist/acceptance.d.ts +6 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +389 -0
- package/dist/actions.d.ts +20 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +251 -0
- package/dist/adapter.d.ts +153 -79
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +7 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +40 -41
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +31 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +319 -107
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -16
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -88
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/chat-types.d.ts +5 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +13 -0
- package/dist/client.d.ts +33 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +98 -11
- package/dist/collection.d.ts +11 -21
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +39 -291
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +717 -0
- package/dist/connection.d.ts +7 -129
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +100 -3344
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- package/dist/conversation-live.d.ts +136 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +248 -0
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +53 -0
- package/dist/conversation.d.ts +53 -43
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +938 -680
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +175 -0
- package/dist/durability.d.ts +16 -4
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +5 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +33 -28
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +7 -8
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +101 -24
- package/dist/identity.d.ts +0 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -6
- package/dist/index.d.ts +33 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +560 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +268 -0
- package/dist/listing.d.ts +53 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +175 -0
- package/dist/live.d.ts +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +165 -0
- package/dist/locks.d.ts +9 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +61 -0
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +61 -0
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +19 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +248 -103
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +168 -0
- package/dist/model.d.ts +8 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +6 -18
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +193 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +17 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +100 -5
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +57 -0
- package/dist/outcome.d.ts +49 -8
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +42 -0
- package/dist/overlay.d.ts +4 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +106 -156
- package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +45 -46
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +226 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +272 -0
- package/dist/query.d.ts +26 -185
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -464
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +12 -1
- package/dist/reach.d.ts +19 -9
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +287 -99
- package/dist/react.d.ts +12 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +14 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/reads.d.ts +37 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +171 -0
- package/dist/recovery.d.ts +3 -2
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +43 -8
- package/dist/refresh.d.ts +17 -14
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +143 -52
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +56 -0
- package/dist/replica.d.ts +55 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +332 -181
- package/dist/room-draft.d.ts +37 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +161 -74
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +216 -0
- package/dist/rows.d.ts +31 -29
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -116
- package/dist/runtime.d.ts +43 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +55 -14
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +536 -187
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1006 -0
- package/dist/search.d.ts +15 -77
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -184
- package/dist/seed.d.ts +25 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +146 -0
- package/dist/shared.d.ts +8 -4
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +126 -69
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +295 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +20 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +77 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/rooms.d.ts +43 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +39 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +70 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +175 -0
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +81 -0
- package/dist/status.d.ts +4 -5
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- package/dist/store/fences.d.ts +16 -0
- package/dist/store/fences.d.ts.map +1 -0
- package/dist/store/fences.js +26 -0
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +34 -0
- package/dist/store/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +431 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +43 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +57 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +106 -150
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +136 -713
- package/dist/stored.d.ts +156 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +649 -0
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +223 -0
- package/dist/sync.d.ts +20 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +532 -0
- package/dist/tables.d.ts +417 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +740 -0
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +51 -21
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +11 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +16 -0
- package/dist/wire.d.ts +50 -6
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +16 -2
- package/package.json +18 -19
- package/AGENTS.md +0 -299
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -27
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -63
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -188
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -22
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -155
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -629
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -34
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/read-side.d.ts +0 -25
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -639
package/dist/actions.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { roomTarget, target } from '@agentshouse/mdmodel';
|
|
2
|
+
import { resendConversations } from './conversation.js';
|
|
3
|
+
import { listingNow } from './listing.js';
|
|
4
|
+
import { locked, lockedRooms } from './locks.js';
|
|
5
|
+
import { scoped } from './models.js';
|
|
6
|
+
import { ABSENT_TARGET, calledResult, failure, historyAnswer, LOCKED_UNREADABLE, lockedRoom, undeclared, UNCERTAIN, UNREADABLE, } from './outcome.js';
|
|
7
|
+
import { refuse } from './refusal.js';
|
|
8
|
+
function operationOf(input) {
|
|
9
|
+
const operation = input?.operation_id;
|
|
10
|
+
return typeof operation === 'string' ? operation : null;
|
|
11
|
+
}
|
|
12
|
+
export async function readHistory(runtime, locator, path, query = {}) {
|
|
13
|
+
const { store, socket, journal } = runtime;
|
|
14
|
+
const { session } = socket;
|
|
15
|
+
if (socket.closed() || session.now().refusal !== null)
|
|
16
|
+
return UNCERTAIN;
|
|
17
|
+
await socket.firstDiscovery;
|
|
18
|
+
if (!session.now().roomsNamed)
|
|
19
|
+
return UNCERTAIN;
|
|
20
|
+
try {
|
|
21
|
+
await socket.authorize();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return UNCERTAIN;
|
|
25
|
+
}
|
|
26
|
+
const { closed, authorization, refusal } = session.now();
|
|
27
|
+
if (closed || authorization === undefined || refusal !== null)
|
|
28
|
+
return UNCERTAIN;
|
|
29
|
+
const since = store.fences.count();
|
|
30
|
+
const transfer = ['transfer', 'history', locator, path];
|
|
31
|
+
if (query.revision !== undefined)
|
|
32
|
+
transfer.push(query.revision);
|
|
33
|
+
if (query.pageToken !== undefined)
|
|
34
|
+
transfer.push(query.pageToken);
|
|
35
|
+
journal.record(transfer.join(' '));
|
|
36
|
+
try {
|
|
37
|
+
const result = await socket.history(authorization, {
|
|
38
|
+
locator,
|
|
39
|
+
path,
|
|
40
|
+
...(query.revision === undefined ? {} : { revision: query.revision }),
|
|
41
|
+
...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),
|
|
42
|
+
});
|
|
43
|
+
journal.record(`outcome history ${result.kind}`);
|
|
44
|
+
if (store.fences.since(locator, since))
|
|
45
|
+
return failure({ kind: 'room-not-readable', locator });
|
|
46
|
+
if (result.kind === 'scoped-refusal') {
|
|
47
|
+
const room = await store.record(result.locator);
|
|
48
|
+
if (room !== undefined)
|
|
49
|
+
await scoped(runtime, result, room, await store.open());
|
|
50
|
+
}
|
|
51
|
+
if (result.kind === 'revoked-authorization')
|
|
52
|
+
await refuse(runtime, 'revoked-authorization');
|
|
53
|
+
return historyAnswer(result);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
journal.record('outcome history transport-uncertainty');
|
|
57
|
+
return UNCERTAIN;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export async function located(runtime, room, path, destination) {
|
|
61
|
+
const crossing = roomTarget(destination);
|
|
62
|
+
const listing = await listingNow(runtime);
|
|
63
|
+
if (crossing === null) {
|
|
64
|
+
const named = target(path, destination);
|
|
65
|
+
return named === null || !listing.has(room) ? null : { room, path: named };
|
|
66
|
+
}
|
|
67
|
+
const held = [...listing.values()].find((listed) => listed.handle === crossing.handle);
|
|
68
|
+
return held === undefined ? null : { room: held.locator, path: crossing.path };
|
|
69
|
+
}
|
|
70
|
+
export async function resolveReference(runtime, room, path, destination) {
|
|
71
|
+
const { store } = runtime;
|
|
72
|
+
if (roomTarget(destination) === null && target(path, destination) === null) {
|
|
73
|
+
return ABSENT_TARGET;
|
|
74
|
+
}
|
|
75
|
+
const at = await located(runtime, room, path, destination);
|
|
76
|
+
if (at === null)
|
|
77
|
+
return UNREADABLE;
|
|
78
|
+
if (await locked(runtime, at.room))
|
|
79
|
+
return LOCKED_UNREADABLE;
|
|
80
|
+
const held = await store.record(at.room);
|
|
81
|
+
if (held !== undefined &&
|
|
82
|
+
(await (await store.open()).entries(held.key, 'visible', [at.path])).length > 0) {
|
|
83
|
+
return { kind: 'document', ...at };
|
|
84
|
+
}
|
|
85
|
+
const history = await readHistory(runtime, at.room, at.path);
|
|
86
|
+
if (history.kind === 'no-history' || history.kind === 'revision')
|
|
87
|
+
return ABSENT_TARGET;
|
|
88
|
+
if (history.kind !== 'history')
|
|
89
|
+
return history;
|
|
90
|
+
const [last] = history.revisions;
|
|
91
|
+
if (last === undefined)
|
|
92
|
+
return ABSENT_TARGET;
|
|
93
|
+
return history.deleted === true
|
|
94
|
+
? { kind: 'deleted', ...at, revision: last }
|
|
95
|
+
: { kind: 'document', ...at };
|
|
96
|
+
}
|
|
97
|
+
async function declaredAction({ store }, name) {
|
|
98
|
+
for (const capability of (await (await store.open()).facts()).capabilities) {
|
|
99
|
+
for (const action of capability.actions ?? []) {
|
|
100
|
+
if (action.name === name)
|
|
101
|
+
return action;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
async function calledRooms(runtime, name, input) {
|
|
107
|
+
const member = (await declaredAction(runtime, name))?.room;
|
|
108
|
+
if (member === undefined || input === null || typeof input !== 'object')
|
|
109
|
+
return [];
|
|
110
|
+
const named = input[member];
|
|
111
|
+
return (Array.isArray(named) ? named : [named]).filter((room) => typeof room === 'string');
|
|
112
|
+
}
|
|
113
|
+
export async function invokeAction(runtime, name, input, dispatching) {
|
|
114
|
+
const { store, socket, journal } = runtime;
|
|
115
|
+
const { session } = socket;
|
|
116
|
+
await socket.ready;
|
|
117
|
+
if (socket.closed() || session.now().refusal !== null)
|
|
118
|
+
return UNCERTAIN;
|
|
119
|
+
if ((await declaredAction(runtime, name)) === undefined)
|
|
120
|
+
return undeclared(name);
|
|
121
|
+
try {
|
|
122
|
+
await socket.authorize();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return UNCERTAIN;
|
|
126
|
+
}
|
|
127
|
+
const { closed, authorization, refusal } = session.now();
|
|
128
|
+
if (closed || authorization === undefined || refusal !== null)
|
|
129
|
+
return UNCERTAIN;
|
|
130
|
+
await dispatching?.();
|
|
131
|
+
journal.record(`transfer action ${name}`);
|
|
132
|
+
try {
|
|
133
|
+
const result = await socket.action(authorization, { name, input });
|
|
134
|
+
if (result.kind === 'scoped-refusal') {
|
|
135
|
+
const room = await store.record(result.locator);
|
|
136
|
+
if (room !== undefined)
|
|
137
|
+
await scoped(runtime, result, room, await store.open());
|
|
138
|
+
}
|
|
139
|
+
if (result.kind === 'revoked-authorization')
|
|
140
|
+
await refuse(runtime, 'revoked-authorization');
|
|
141
|
+
journal.record(`outcome action ${result.kind}`);
|
|
142
|
+
if (result.kind === 'rejected')
|
|
143
|
+
journal.record(`refusal rejected ${result.code}`);
|
|
144
|
+
return calledResult(result);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
journal.record('outcome action transport-uncertainty');
|
|
148
|
+
return UNCERTAIN;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
export async function readConversationHistory(runtime, request) {
|
|
152
|
+
const { socket, journal } = runtime;
|
|
153
|
+
await socket.ready;
|
|
154
|
+
const stream = socket.conversations();
|
|
155
|
+
if (socket.closed() || socket.session.now().refusal !== null || stream?.history === undefined) {
|
|
156
|
+
return UNCERTAIN;
|
|
157
|
+
}
|
|
158
|
+
journal.record('transfer conversation history');
|
|
159
|
+
try {
|
|
160
|
+
const result = await stream.history(request);
|
|
161
|
+
if (result.kind === 'revoked-authorization')
|
|
162
|
+
await refuse(runtime, 'revoked-authorization');
|
|
163
|
+
journal.record(`outcome conversation history ${result.kind}`);
|
|
164
|
+
return calledResult(result);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
journal.record('outcome conversation history transport-uncertainty');
|
|
168
|
+
return UNCERTAIN;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function unsettled(result) {
|
|
172
|
+
if (result.kind === 'action')
|
|
173
|
+
return false;
|
|
174
|
+
return result.retryable && (result.kind !== 'rejected' || result.reset === undefined);
|
|
175
|
+
}
|
|
176
|
+
async function recoveredAction(runtime, name, input) {
|
|
177
|
+
const { store, socket, recovery } = runtime;
|
|
178
|
+
const { lanes } = socket;
|
|
179
|
+
const operation = operationOf(input);
|
|
180
|
+
if (operation === null)
|
|
181
|
+
return invokeAction(runtime, name, input);
|
|
182
|
+
const kept = async () => (await store.open()).keepCall({ operation, name, input });
|
|
183
|
+
lanes.call(operation);
|
|
184
|
+
try {
|
|
185
|
+
let result = await invokeAction(runtime, name, input, kept);
|
|
186
|
+
if (unsettled(result)) {
|
|
187
|
+
await recovery.attempt(`action ${operation}`, async () => {
|
|
188
|
+
if (socket.closed() || socket.session.now().refusal !== null)
|
|
189
|
+
return 'done';
|
|
190
|
+
if (!socket.isOpen())
|
|
191
|
+
return 'again';
|
|
192
|
+
result = await invokeAction(runtime, name, input, kept);
|
|
193
|
+
return unsettled(result) ? 'again' : 'done';
|
|
194
|
+
}, { again: true });
|
|
195
|
+
}
|
|
196
|
+
if (!unsettled(result))
|
|
197
|
+
await (await store.open()).dropCall(operation);
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
lanes.called(operation);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export async function called(runtime, name, input) {
|
|
205
|
+
await runtime.socket.ready;
|
|
206
|
+
const lockedNow = await lockedRooms(runtime);
|
|
207
|
+
const room = (await calledRooms(runtime, name, input)).find((one) => lockedNow.includes(one));
|
|
208
|
+
return room === undefined ? recoveredAction(runtime, name, input) : lockedRoom(room);
|
|
209
|
+
}
|
|
210
|
+
export async function resendCalls(runtime, signal) {
|
|
211
|
+
const { store, socket } = runtime;
|
|
212
|
+
const { lanes } = socket;
|
|
213
|
+
if (!socket.isOpen() || socket.closed() || socket.stopping())
|
|
214
|
+
return 'done';
|
|
215
|
+
const local = await store.open();
|
|
216
|
+
for (const held of await local.calls()) {
|
|
217
|
+
if (lanes.calling(held.operation))
|
|
218
|
+
continue;
|
|
219
|
+
if (socket.closed() || signal.aborted)
|
|
220
|
+
return 'done';
|
|
221
|
+
lanes.call(held.operation);
|
|
222
|
+
try {
|
|
223
|
+
if (unsettled(await invokeAction(runtime, held.name, held.input)))
|
|
224
|
+
return 'again';
|
|
225
|
+
await local.dropCall(held.operation);
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
lanes.called(held.operation);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return 'done';
|
|
232
|
+
}
|
|
233
|
+
async function resendPass({ socket, conversations }, signal) {
|
|
234
|
+
if (!socket.continuing() || !socket.isOpen() || socket.stopping())
|
|
235
|
+
return 'done';
|
|
236
|
+
const reading = { complete: true, reachable: true };
|
|
237
|
+
try {
|
|
238
|
+
await resendConversations(conversations, reading);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
reading.reachable = false;
|
|
242
|
+
}
|
|
243
|
+
if (signal.aborted)
|
|
244
|
+
return 'done';
|
|
245
|
+
return reading.reachable && reading.complete ? 'done' : 'again';
|
|
246
|
+
}
|
|
247
|
+
export function resendLater(runtime) {
|
|
248
|
+
if (!runtime.socket.isOpen())
|
|
249
|
+
return;
|
|
250
|
+
void runtime.recovery.attempt('resend', (signal) => resendPass(runtime, signal), { again: true });
|
|
251
|
+
}
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { SavedFacts, TypedPath } from '@agentshouse/mdmodel';
|
|
1
2
|
import type { ModelResult } from './model.js';
|
|
3
|
+
export type { SavedFacts, TypedPath };
|
|
2
4
|
import type { Open } from './open.js';
|
|
3
5
|
import type { ChangeBatch } from './change.js';
|
|
4
6
|
export type Authorization = object;
|
|
@@ -10,14 +12,13 @@ export type TypedSelection = {
|
|
|
10
12
|
roots: readonly string[];
|
|
11
13
|
};
|
|
12
14
|
export type OperationScopes = {
|
|
13
|
-
read: readonly string[];
|
|
14
|
-
sync: readonly string[];
|
|
15
15
|
write: readonly string[];
|
|
16
|
-
|
|
16
|
+
erase: readonly string[];
|
|
17
17
|
};
|
|
18
18
|
export type ReplicaAdmission = {
|
|
19
19
|
selection: string;
|
|
20
20
|
admission: Open<'admitted' | 'unavailable'>;
|
|
21
|
+
offline: Open<'locked' | 'open'>;
|
|
21
22
|
};
|
|
22
23
|
export type DiscoveredRoom = {
|
|
23
24
|
name: string;
|
|
@@ -33,24 +34,21 @@ export type Capability = {
|
|
|
33
34
|
name: string;
|
|
34
35
|
limits?: readonly ProviderLimit[];
|
|
35
36
|
actions?: readonly ActionDeclaration[];
|
|
36
|
-
conversationAgents?: ConversationAgents;
|
|
37
|
-
};
|
|
38
|
-
export type ConversationAgents = {
|
|
39
|
-
locator: string;
|
|
40
|
-
type: string;
|
|
41
|
-
identity: string;
|
|
42
|
-
name: string;
|
|
43
|
-
retired?: string;
|
|
44
37
|
};
|
|
45
38
|
export type ListedConversation = {
|
|
46
39
|
conversation: string;
|
|
47
40
|
agent: string;
|
|
41
|
+
agentName: string;
|
|
42
|
+
agentRetired: boolean;
|
|
48
43
|
name: string;
|
|
49
44
|
created: string;
|
|
50
45
|
finished: string | null;
|
|
51
46
|
outcome: string | null;
|
|
47
|
+
waiting: boolean;
|
|
48
|
+
newest: string | null;
|
|
49
|
+
processEnded: string | null;
|
|
52
50
|
};
|
|
53
|
-
export type ConversationAction = '
|
|
51
|
+
export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete';
|
|
54
52
|
export type ConversationMessage = {
|
|
55
53
|
identity: string;
|
|
56
54
|
turn: string;
|
|
@@ -141,6 +139,10 @@ export type SessionOption = (SessionOptionNaming & {
|
|
|
141
139
|
type: 'boolean';
|
|
142
140
|
currentValue: boolean;
|
|
143
141
|
});
|
|
142
|
+
export type RunningSubagent = {
|
|
143
|
+
description: string;
|
|
144
|
+
activity: string | null;
|
|
145
|
+
};
|
|
144
146
|
export type ConversationEvent = {
|
|
145
147
|
kind: 'turn';
|
|
146
148
|
conversation: string;
|
|
@@ -162,6 +164,22 @@ export type ConversationEvent = {
|
|
|
162
164
|
kind: 'options';
|
|
163
165
|
conversation: string;
|
|
164
166
|
options: readonly SessionOption[];
|
|
167
|
+
} | {
|
|
168
|
+
kind: 'starting';
|
|
169
|
+
conversation: string;
|
|
170
|
+
step: string | null;
|
|
171
|
+
} | {
|
|
172
|
+
kind: 'subagents';
|
|
173
|
+
conversation: string;
|
|
174
|
+
subagents: readonly RunningSubagent[];
|
|
175
|
+
} | {
|
|
176
|
+
kind: 'link';
|
|
177
|
+
conversation: string;
|
|
178
|
+
connected: boolean;
|
|
179
|
+
} | {
|
|
180
|
+
kind: 'deliveries';
|
|
181
|
+
conversation: string;
|
|
182
|
+
unknown: readonly string[];
|
|
165
183
|
} | {
|
|
166
184
|
kind: 'accepted-message';
|
|
167
185
|
conversation: string;
|
|
@@ -172,6 +190,9 @@ export type ConversationEvent = {
|
|
|
172
190
|
} | {
|
|
173
191
|
kind: 'list';
|
|
174
192
|
entries: readonly ListedConversation[];
|
|
193
|
+
whole: boolean;
|
|
194
|
+
more: boolean;
|
|
195
|
+
cursor: string | null;
|
|
175
196
|
} | {
|
|
176
197
|
kind: 'listed';
|
|
177
198
|
entry: ListedConversation;
|
|
@@ -179,14 +200,23 @@ export type ConversationEvent = {
|
|
|
179
200
|
kind: 'unlisted';
|
|
180
201
|
conversation: string;
|
|
181
202
|
};
|
|
203
|
+
export type ListedAgent = {
|
|
204
|
+
agent: string;
|
|
205
|
+
name: string;
|
|
206
|
+
retired: boolean;
|
|
207
|
+
};
|
|
182
208
|
export type ConversationStream = {
|
|
183
209
|
replicate(conversations: readonly string[]): void;
|
|
210
|
+
hold(cursor: string | null): void;
|
|
184
211
|
observe(notify: (event: ConversationEvent) => void): () => void;
|
|
212
|
+
agents?(): Promise<readonly ListedAgent[] | null>;
|
|
213
|
+
history?(request: ConversationHistoryRequest): Promise<ActionResult>;
|
|
185
214
|
};
|
|
186
215
|
export type ActionDeclaration = {
|
|
187
216
|
name: string;
|
|
188
217
|
inputShape: unknown;
|
|
189
218
|
resultKind: unknown;
|
|
219
|
+
room?: string;
|
|
190
220
|
};
|
|
191
221
|
export type ProviderLimit = {
|
|
192
222
|
name: string;
|
|
@@ -200,7 +230,6 @@ export type HistoryRetention = {
|
|
|
200
230
|
};
|
|
201
231
|
export type Retention = {
|
|
202
232
|
history: HistoryRetention;
|
|
203
|
-
outcome: number;
|
|
204
233
|
refreshHorizon: number;
|
|
205
234
|
};
|
|
206
235
|
export type Discovery = {
|
|
@@ -229,7 +258,7 @@ export type ProviderRefusal = {
|
|
|
229
258
|
export type ScopedRefusal = ProviderRefusal & {
|
|
230
259
|
kind: 'scoped-refusal';
|
|
231
260
|
locator: string;
|
|
232
|
-
scope: Open<'content' | '
|
|
261
|
+
scope: Open<'content' | 'model' | 'operation' | 'undisclosed'>;
|
|
233
262
|
};
|
|
234
263
|
export type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization | ScopedRefusal;
|
|
235
264
|
export type ContractUnavailable = ProviderRefusal & {
|
|
@@ -238,7 +267,7 @@ export type ContractUnavailable = ProviderRefusal & {
|
|
|
238
267
|
export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
|
|
239
268
|
export type PageToken = string;
|
|
240
269
|
export type ChangeAuthor = {
|
|
241
|
-
kind: Open<'user' | 'site'>;
|
|
270
|
+
kind: Open<'user' | 'site' | 'inbox' | 'app'>;
|
|
242
271
|
id: string;
|
|
243
272
|
name: string;
|
|
244
273
|
};
|
|
@@ -252,38 +281,49 @@ export type HeadChange = {
|
|
|
252
281
|
time: string;
|
|
253
282
|
};
|
|
254
283
|
export type BinaryFile = {
|
|
255
|
-
fileRef: string;
|
|
256
284
|
byteLength: number;
|
|
257
285
|
mediaType: string;
|
|
258
286
|
sha256: string;
|
|
259
287
|
};
|
|
260
|
-
export type HeldContent = {
|
|
261
|
-
documents: Readonly<Record<string, string>>;
|
|
262
|
-
revisions: Readonly<Record<string, string>>;
|
|
263
|
-
};
|
|
264
288
|
export type BootstrapRequest = {
|
|
265
289
|
locator: string;
|
|
266
290
|
selection: string;
|
|
267
291
|
pageToken?: PageToken;
|
|
268
|
-
|
|
292
|
+
arriving?: (bytes: number) => void;
|
|
293
|
+
signal?: AbortSignal;
|
|
294
|
+
};
|
|
295
|
+
export type BootstrapPart = {
|
|
296
|
+
readonly id: string;
|
|
297
|
+
readonly bytes: number;
|
|
298
|
+
};
|
|
299
|
+
export type BootstrapInventory = {
|
|
300
|
+
readonly bytes: number;
|
|
269
301
|
};
|
|
270
302
|
export type RoomModels = {
|
|
271
303
|
collection?: ModelResult;
|
|
272
|
-
selection?: ModelResult;
|
|
273
304
|
};
|
|
274
305
|
export type BootstrapPage = {
|
|
275
306
|
kind: 'bootstrap';
|
|
276
307
|
roomVersion: string;
|
|
277
308
|
models?: RoomModels;
|
|
278
309
|
documents: Readonly<Record<string, string>>;
|
|
310
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
279
311
|
revisions: Readonly<Record<string, string>>;
|
|
312
|
+
fileIds?: Readonly<Record<string, string>>;
|
|
313
|
+
created?: Readonly<Record<string, string>>;
|
|
280
314
|
changes: Readonly<Record<string, HeadChange>>;
|
|
281
315
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
316
|
+
folders?: readonly string[];
|
|
282
317
|
pageToken?: PageToken;
|
|
318
|
+
parts?: readonly BootstrapPart[];
|
|
319
|
+
bytes?: number;
|
|
320
|
+
};
|
|
321
|
+
export type NotReady = {
|
|
322
|
+
kind: 'not-ready';
|
|
283
323
|
};
|
|
284
324
|
export type BootstrapResult = BootstrapPage | {
|
|
285
325
|
kind: 'beyond-horizon';
|
|
286
|
-
} | AdapterFailure;
|
|
326
|
+
} | NotReady | AdapterFailure;
|
|
287
327
|
export type RefreshRequest = {
|
|
288
328
|
locator: string;
|
|
289
329
|
selection: string;
|
|
@@ -295,10 +335,15 @@ export type RefreshPage = {
|
|
|
295
335
|
roomVersion: string;
|
|
296
336
|
models?: RoomModels;
|
|
297
337
|
documents: Readonly<Record<string, string>>;
|
|
338
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
298
339
|
revisions: Readonly<Record<string, string>>;
|
|
340
|
+
fileIds?: Readonly<Record<string, string>>;
|
|
341
|
+
created?: Readonly<Record<string, string>>;
|
|
299
342
|
changes: Readonly<Record<string, HeadChange>>;
|
|
300
343
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
301
344
|
removals: readonly string[];
|
|
345
|
+
folders?: readonly string[];
|
|
346
|
+
folderRemovals?: readonly string[];
|
|
302
347
|
pageToken?: PageToken;
|
|
303
348
|
};
|
|
304
349
|
export type RefreshResult = {
|
|
@@ -309,6 +354,7 @@ export type RefreshResult = {
|
|
|
309
354
|
export type MutationRequest = {
|
|
310
355
|
locator: string;
|
|
311
356
|
changeBatch: ChangeBatch;
|
|
357
|
+
file(localId: string): Promise<Blob>;
|
|
312
358
|
upload?: unknown;
|
|
313
359
|
};
|
|
314
360
|
export type RetryableRefusal = ProviderRefusal & {
|
|
@@ -319,17 +365,21 @@ export type ServiceMode = Open<'open' | 'write-halted'>;
|
|
|
319
365
|
export type ServiceModeSignal = {
|
|
320
366
|
observe(notify: (mode: ServiceMode) => void): () => void;
|
|
321
367
|
};
|
|
322
|
-
export type
|
|
323
|
-
kind: 'accepted';
|
|
368
|
+
export type AcceptedRoom = {
|
|
324
369
|
roomVersion: string;
|
|
325
370
|
documents: Readonly<Record<string, string>>;
|
|
326
371
|
revisions: Readonly<Record<string, string>>;
|
|
372
|
+
fileIds?: Readonly<Record<string, string>>;
|
|
327
373
|
changes: Readonly<Record<string, HeadChange>>;
|
|
328
374
|
removals: readonly string[];
|
|
329
375
|
binaryFiles?: Readonly<Record<string, BinaryFile>>;
|
|
376
|
+
};
|
|
377
|
+
export type MutationResult = (AcceptedRoom & {
|
|
378
|
+
kind: 'accepted';
|
|
330
379
|
author?: string;
|
|
331
380
|
time?: string;
|
|
332
|
-
|
|
381
|
+
destination?: AcceptedRoom;
|
|
382
|
+
}) | (ProviderRefusal & {
|
|
333
383
|
kind: 'conflicted';
|
|
334
384
|
roomVersion?: string;
|
|
335
385
|
affected: Readonly<Record<string, string>>;
|
|
@@ -338,15 +388,9 @@ export type MutationResult = {
|
|
|
338
388
|
affected: Readonly<Record<string, string>>;
|
|
339
389
|
}) | RetryableRefusal | {
|
|
340
390
|
kind: 'write-halted';
|
|
341
|
-
} | {
|
|
342
|
-
kind: 'expired';
|
|
343
|
-
restored?: true;
|
|
344
391
|
} | AdapterFailure;
|
|
345
392
|
export type HistoryAuthor = {
|
|
346
|
-
kind: 'user';
|
|
347
|
-
id: string;
|
|
348
|
-
} | {
|
|
349
|
-
kind: 'site';
|
|
393
|
+
kind: 'user' | 'site' | 'inbox' | 'app';
|
|
350
394
|
id: string;
|
|
351
395
|
name: string;
|
|
352
396
|
};
|
|
@@ -378,22 +422,35 @@ export type BinaryRequest = {
|
|
|
378
422
|
locator: string;
|
|
379
423
|
path: string;
|
|
380
424
|
revision: string;
|
|
381
|
-
fileRef?: string;
|
|
382
|
-
} | {
|
|
383
|
-
kind: 'reference';
|
|
384
|
-
fileRef: string;
|
|
385
|
-
referrer: unknown;
|
|
386
|
-
};
|
|
387
|
-
export type ReferrerScope = {
|
|
388
|
-
kind: 'room';
|
|
389
|
-
locator: string;
|
|
390
|
-
path?: string;
|
|
391
|
-
} | {
|
|
392
|
-
kind: 'conversations';
|
|
393
425
|
};
|
|
394
426
|
export type BinaryResult = {
|
|
395
427
|
kind: 'binary';
|
|
428
|
+
body: ReadableStream<Uint8Array>;
|
|
429
|
+
mediaType: string;
|
|
430
|
+
sha256?: string;
|
|
431
|
+
} | (ProviderRefusal & {
|
|
432
|
+
kind: 'rejected';
|
|
433
|
+
}) | AdapterFailure;
|
|
434
|
+
export type BinaryLinkResult = {
|
|
435
|
+
kind: 'link';
|
|
436
|
+
url: string;
|
|
437
|
+
name: string;
|
|
438
|
+
mediaType?: string;
|
|
439
|
+
} | (ProviderRefusal & {
|
|
440
|
+
kind: 'rejected';
|
|
441
|
+
}) | AdapterFailure;
|
|
442
|
+
export type AttachRequest = {
|
|
443
|
+
locator: string;
|
|
444
|
+
name: string;
|
|
445
|
+
mediaType: string;
|
|
446
|
+
byteLength: number;
|
|
447
|
+
sha256: string;
|
|
396
448
|
blob: Blob;
|
|
449
|
+
};
|
|
450
|
+
export type AttachResult = {
|
|
451
|
+
kind: 'attached';
|
|
452
|
+
path: string;
|
|
453
|
+
revision: string;
|
|
397
454
|
} | (ProviderRefusal & {
|
|
398
455
|
kind: 'rejected';
|
|
399
456
|
}) | AdapterFailure;
|
|
@@ -409,68 +466,85 @@ export type ActionResult = {
|
|
|
409
466
|
kind: 'action';
|
|
410
467
|
result: unknown;
|
|
411
468
|
at?: RoomVersionAt;
|
|
469
|
+
} | (ProviderRefusal & {
|
|
470
|
+
kind: 'rejected';
|
|
471
|
+
reset?: string;
|
|
472
|
+
}) | AdapterFailure;
|
|
473
|
+
export type SearchHit = {
|
|
474
|
+
room: string;
|
|
475
|
+
path: string;
|
|
476
|
+
line?: number;
|
|
477
|
+
snippet?: string;
|
|
478
|
+
};
|
|
479
|
+
export type SearchAsk = {
|
|
480
|
+
text: string;
|
|
481
|
+
rooms: readonly string[] | null;
|
|
482
|
+
};
|
|
483
|
+
export type SearchAnswer = {
|
|
484
|
+
kind: 'found';
|
|
485
|
+
documents: readonly SearchHit[];
|
|
412
486
|
} | (ProviderRefusal & {
|
|
413
487
|
kind: 'rejected';
|
|
414
488
|
}) | AdapterFailure;
|
|
415
489
|
export type HeldRoom = {
|
|
416
490
|
locator: string;
|
|
491
|
+
roomVersion: string | null;
|
|
492
|
+
};
|
|
493
|
+
export type RoomChange = {
|
|
494
|
+
kind: 'room-change';
|
|
495
|
+
locator: string;
|
|
496
|
+
from: string | null;
|
|
417
497
|
roomVersion: string;
|
|
418
|
-
|
|
419
|
-
|
|
498
|
+
read(): Promise<RefreshPage>;
|
|
499
|
+
};
|
|
500
|
+
export type AuthorityChange = {
|
|
501
|
+
kind: 'authority-changed';
|
|
502
|
+
rooms: readonly DiscoveredRoom[];
|
|
503
|
+
left: readonly string[];
|
|
504
|
+
member?: Member;
|
|
420
505
|
};
|
|
421
506
|
export type RoomStreamEvent = {
|
|
422
507
|
kind: 'opened';
|
|
508
|
+
} | {
|
|
509
|
+
kind: 'discovered';
|
|
510
|
+
discovery: Discovery;
|
|
423
511
|
} | {
|
|
424
512
|
kind: 'closed';
|
|
425
513
|
revoked: boolean;
|
|
514
|
+
lost: boolean;
|
|
515
|
+
authorityChanged: boolean;
|
|
426
516
|
} | {
|
|
427
|
-
kind: '
|
|
517
|
+
kind: 'caught-up';
|
|
428
518
|
expired: readonly string[];
|
|
429
|
-
} |
|
|
430
|
-
kind: 'room-version';
|
|
431
|
-
locator: string;
|
|
432
|
-
roomVersion: string;
|
|
433
|
-
};
|
|
434
|
-
export type KeptReceipt = {
|
|
435
|
-
key: string;
|
|
436
|
-
head: unknown;
|
|
437
|
-
};
|
|
438
|
-
export type StreamReceipts = {
|
|
439
|
-
heads(): Promise<readonly KeptReceipt[]>;
|
|
440
|
-
parts(key: string, count: number): Promise<readonly unknown[]>;
|
|
441
|
-
keep(key: string, head: unknown, part?: {
|
|
442
|
-
index: number;
|
|
443
|
-
value: unknown;
|
|
444
|
-
}): Promise<void>;
|
|
445
|
-
drop(keys: readonly string[]): Promise<void>;
|
|
446
|
-
};
|
|
447
|
-
export type AcquiredDemand = {
|
|
448
|
-
rooms: readonly string[];
|
|
449
|
-
conversations: boolean;
|
|
450
|
-
};
|
|
519
|
+
} | AuthorityChange | RoomChange;
|
|
451
520
|
export type RoomStream = {
|
|
452
|
-
hold(rooms: readonly HeldRoom[]
|
|
453
|
-
|
|
454
|
-
published(locator: string, roomVersion: string): void;
|
|
455
|
-
observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts): () => void;
|
|
521
|
+
hold(rooms: readonly HeldRoom[]): void;
|
|
522
|
+
observe(notify: (event: RoomStreamEvent) => void): () => void;
|
|
456
523
|
};
|
|
524
|
+
export type PathRule = (path: string) => boolean;
|
|
457
525
|
export type Adapter = {
|
|
458
526
|
readonly localSaves?: true;
|
|
459
|
-
readonly
|
|
527
|
+
readonly roomTypes?: string;
|
|
528
|
+
readonly nameableRoomTypes?: readonly string[];
|
|
529
|
+
readonly typedPaths?: readonly TypedPath[];
|
|
530
|
+
readonly pathRule?: PathRule;
|
|
531
|
+
readonly unkeptReads?: readonly string[];
|
|
532
|
+
readonly leadingReads?: readonly string[];
|
|
460
533
|
authorize(): Promise<Authorization>;
|
|
461
|
-
discover(authorization: Authorization): Promise<DiscoverResult>;
|
|
534
|
+
discover?(authorization: Authorization): Promise<DiscoverResult>;
|
|
462
535
|
bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
|
|
463
|
-
refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
|
|
536
|
+
refresh?(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
|
|
464
537
|
mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
|
|
465
538
|
history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
|
|
466
539
|
binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
|
|
467
|
-
|
|
540
|
+
link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
|
|
541
|
+
attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
|
|
468
542
|
action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
|
|
543
|
+
search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
|
|
469
544
|
reached(locator: string, roomVersion: string, target: string): boolean;
|
|
470
545
|
follows(locator: string, roomVersion: string, next: string): boolean;
|
|
471
546
|
roomStream?: RoomStream;
|
|
472
547
|
conversations?: ConversationStream;
|
|
473
548
|
serviceMode?: ServiceModeSignal;
|
|
474
549
|
};
|
|
475
|
-
export {};
|
|
476
550
|
//# sourceMappingURL=adapter.d.ts.map
|