@agentshouse/mdruntime 0.1.0-cd0f0e6405606 → 0.1.0-cd26b960b7262
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 +385 -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 +143 -85
- 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 +30 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +320 -111
- 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 -89
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +14 -3
- 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 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +87 -9
- package/dist/collection.d.ts +11 -22
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +39 -356
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +711 -0
- package/dist/connection.d.ts +7 -137
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +101 -3611
- 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 +48 -44
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +892 -754
- 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 -29
- package/dist/expectation.d.ts +4 -2
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +33 -11
- 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 +4 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +67 -39
- 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 +12 -2
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +554 -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 +176 -0
- package/dist/live.d.ts +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +163 -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 +14 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +239 -106
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +162 -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 +195 -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 +15 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +98 -14
- 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 +44 -9
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +41 -2
- package/dist/overlay.d.ts +3 -6
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +46 -136
- package/dist/{chat/parts.d.ts → parts.d.ts} +12 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +53 -46
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +26 -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 +21 -207
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -493
- 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} +13 -2
- package/dist/reach.d.ts +20 -9
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +278 -103
- package/dist/react.d.ts +14 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +10 -1
- 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 +13 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/reads.d.ts +36 -10
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +157 -84
- 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 +18 -15
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +143 -58
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +56 -38
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +313 -197
- package/dist/room-draft.d.ts +25 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +153 -65
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +217 -0
- package/dist/rows.d.ts +31 -31
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -123
- 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 +56 -15
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +407 -121
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1005 -0
- package/dist/search.d.ts +12 -95
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -266
- package/dist/seed.d.ts +11 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +71 -1
- package/dist/shared.d.ts +5 -9
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +66 -121
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +292 -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 +44 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +38 -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 +82 -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 +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -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 -164
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +136 -752
- 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 +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +532 -0
- package/dist/tables.d.ts +416 -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 +2 -2
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +34 -23
- 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 +1 -16
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -79
- package/dist/wire.d.ts +34 -6
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +12 -2
- package/package.json +18 -19
- package/AGENTS.md +0 -299
- 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/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- 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 -99
- package/dist/chat/markdown.d.ts +0 -21
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -246
- 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 -171
- 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/pieces.d.ts +0 -62
- package/dist/chat/pieces.d.ts.map +0 -1
- package/dist/chat/pieces.js +0 -1110
- 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 -630
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- 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/steady.d.ts +0 -3
- package/dist/chat/steady.d.ts.map +0 -1
- package/dist/chat/steady.js +0 -26
- 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 -27
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -824
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;
|
|
@@ -28,29 +29,27 @@ export type DiscoveredRoom = {
|
|
|
28
29
|
replica: ReplicaAdmission;
|
|
29
30
|
typedSelection?: TypedSelection;
|
|
30
31
|
providerOwnedPaths: readonly string[];
|
|
32
|
+
authoredPaths?: readonly string[];
|
|
31
33
|
};
|
|
32
34
|
export type Capability = {
|
|
33
35
|
name: string;
|
|
34
36
|
limits?: readonly ProviderLimit[];
|
|
35
37
|
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
38
|
};
|
|
45
39
|
export type ListedConversation = {
|
|
46
40
|
conversation: string;
|
|
47
41
|
agent: string;
|
|
42
|
+
agentName: string;
|
|
43
|
+
agentRetired: boolean;
|
|
48
44
|
name: string;
|
|
49
45
|
created: string;
|
|
50
46
|
finished: string | null;
|
|
51
47
|
outcome: string | null;
|
|
48
|
+
waiting: boolean;
|
|
49
|
+
newest: string | null;
|
|
50
|
+
processEnded: string | null;
|
|
52
51
|
};
|
|
53
|
-
export type ConversationAction = '
|
|
52
|
+
export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete';
|
|
54
53
|
export type ConversationMessage = {
|
|
55
54
|
identity: string;
|
|
56
55
|
turn: string;
|
|
@@ -141,6 +140,10 @@ export type SessionOption = (SessionOptionNaming & {
|
|
|
141
140
|
type: 'boolean';
|
|
142
141
|
currentValue: boolean;
|
|
143
142
|
});
|
|
143
|
+
export type RunningSubagent = {
|
|
144
|
+
description: string;
|
|
145
|
+
activity: string | null;
|
|
146
|
+
};
|
|
144
147
|
export type ConversationEvent = {
|
|
145
148
|
kind: 'turn';
|
|
146
149
|
conversation: string;
|
|
@@ -162,6 +165,22 @@ export type ConversationEvent = {
|
|
|
162
165
|
kind: 'options';
|
|
163
166
|
conversation: string;
|
|
164
167
|
options: readonly SessionOption[];
|
|
168
|
+
} | {
|
|
169
|
+
kind: 'starting';
|
|
170
|
+
conversation: string;
|
|
171
|
+
step: string | null;
|
|
172
|
+
} | {
|
|
173
|
+
kind: 'subagents';
|
|
174
|
+
conversation: string;
|
|
175
|
+
subagents: readonly RunningSubagent[];
|
|
176
|
+
} | {
|
|
177
|
+
kind: 'link';
|
|
178
|
+
conversation: string;
|
|
179
|
+
connected: boolean;
|
|
180
|
+
} | {
|
|
181
|
+
kind: 'deliveries';
|
|
182
|
+
conversation: string;
|
|
183
|
+
unknown: readonly string[];
|
|
165
184
|
} | {
|
|
166
185
|
kind: 'accepted-message';
|
|
167
186
|
conversation: string;
|
|
@@ -172,6 +191,9 @@ export type ConversationEvent = {
|
|
|
172
191
|
} | {
|
|
173
192
|
kind: 'list';
|
|
174
193
|
entries: readonly ListedConversation[];
|
|
194
|
+
whole: boolean;
|
|
195
|
+
more: boolean;
|
|
196
|
+
cursor: string | null;
|
|
175
197
|
} | {
|
|
176
198
|
kind: 'listed';
|
|
177
199
|
entry: ListedConversation;
|
|
@@ -179,14 +201,23 @@ export type ConversationEvent = {
|
|
|
179
201
|
kind: 'unlisted';
|
|
180
202
|
conversation: string;
|
|
181
203
|
};
|
|
204
|
+
export type ListedAgent = {
|
|
205
|
+
agent: string;
|
|
206
|
+
name: string;
|
|
207
|
+
retired: boolean;
|
|
208
|
+
};
|
|
182
209
|
export type ConversationStream = {
|
|
183
210
|
replicate(conversations: readonly string[]): void;
|
|
211
|
+
hold(cursor: string | null): void;
|
|
184
212
|
observe(notify: (event: ConversationEvent) => void): () => void;
|
|
213
|
+
agents?(): Promise<readonly ListedAgent[] | null>;
|
|
214
|
+
history?(request: ConversationHistoryRequest): Promise<ActionResult>;
|
|
185
215
|
};
|
|
186
216
|
export type ActionDeclaration = {
|
|
187
217
|
name: string;
|
|
188
218
|
inputShape: unknown;
|
|
189
219
|
resultKind: unknown;
|
|
220
|
+
room?: string;
|
|
190
221
|
};
|
|
191
222
|
export type ProviderLimit = {
|
|
192
223
|
name: string;
|
|
@@ -200,7 +231,6 @@ export type HistoryRetention = {
|
|
|
200
231
|
};
|
|
201
232
|
export type Retention = {
|
|
202
233
|
history: HistoryRetention;
|
|
203
|
-
outcome: number;
|
|
204
234
|
refreshHorizon: number;
|
|
205
235
|
};
|
|
206
236
|
export type Discovery = {
|
|
@@ -210,10 +240,6 @@ export type Discovery = {
|
|
|
210
240
|
providerLimits: readonly ProviderLimit[];
|
|
211
241
|
retention: Retention;
|
|
212
242
|
member?: Member;
|
|
213
|
-
covered?: readonly string[];
|
|
214
|
-
};
|
|
215
|
-
export type DiscoveryScope = {
|
|
216
|
-
readonly authorities: readonly string[];
|
|
217
243
|
};
|
|
218
244
|
export type TransportUncertainty = {
|
|
219
245
|
kind: 'transport-uncertainty';
|
|
@@ -233,7 +259,7 @@ export type ProviderRefusal = {
|
|
|
233
259
|
export type ScopedRefusal = ProviderRefusal & {
|
|
234
260
|
kind: 'scoped-refusal';
|
|
235
261
|
locator: string;
|
|
236
|
-
scope: Open<'content' | '
|
|
262
|
+
scope: Open<'content' | 'model' | 'operation' | 'undisclosed'>;
|
|
237
263
|
};
|
|
238
264
|
export type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization | ScopedRefusal;
|
|
239
265
|
export type ContractUnavailable = ProviderRefusal & {
|
|
@@ -242,7 +268,7 @@ export type ContractUnavailable = ProviderRefusal & {
|
|
|
242
268
|
export type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization | ContractUnavailable;
|
|
243
269
|
export type PageToken = string;
|
|
244
270
|
export type ChangeAuthor = {
|
|
245
|
-
kind: Open<'user' | 'site'>;
|
|
271
|
+
kind: Open<'user' | 'site' | 'inbox' | 'app'>;
|
|
246
272
|
id: string;
|
|
247
273
|
name: string;
|
|
248
274
|
};
|
|
@@ -256,39 +282,49 @@ export type HeadChange = {
|
|
|
256
282
|
time: string;
|
|
257
283
|
};
|
|
258
284
|
export type BinaryFile = {
|
|
259
|
-
fileRef: string;
|
|
260
285
|
byteLength: number;
|
|
261
286
|
mediaType: string;
|
|
262
287
|
sha256: string;
|
|
263
288
|
};
|
|
264
|
-
export type HeldContent = {
|
|
265
|
-
documents: Readonly<Record<string, string>>;
|
|
266
|
-
revisions: Readonly<Record<string, string>>;
|
|
267
|
-
};
|
|
268
289
|
export type BootstrapRequest = {
|
|
269
290
|
locator: string;
|
|
270
291
|
selection: string;
|
|
271
292
|
pageToken?: PageToken;
|
|
272
|
-
|
|
293
|
+
arriving?: (bytes: number) => void;
|
|
294
|
+
signal?: AbortSignal;
|
|
295
|
+
};
|
|
296
|
+
export type BootstrapPart = {
|
|
297
|
+
readonly id: string;
|
|
298
|
+
readonly bytes: number;
|
|
299
|
+
};
|
|
300
|
+
export type BootstrapInventory = {
|
|
301
|
+
readonly bytes: number;
|
|
273
302
|
};
|
|
274
303
|
export type RoomModels = {
|
|
275
304
|
collection?: ModelResult;
|
|
276
|
-
selection?: ModelResult;
|
|
277
305
|
};
|
|
278
306
|
export type BootstrapPage = {
|
|
279
307
|
kind: 'bootstrap';
|
|
280
308
|
roomVersion: string;
|
|
281
309
|
models?: RoomModels;
|
|
282
310
|
documents: Readonly<Record<string, string>>;
|
|
311
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
283
312
|
revisions: Readonly<Record<string, string>>;
|
|
284
313
|
fileIds?: Readonly<Record<string, string>>;
|
|
314
|
+
created?: Readonly<Record<string, string>>;
|
|
285
315
|
changes: Readonly<Record<string, HeadChange>>;
|
|
286
316
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
317
|
+
folders?: readonly string[];
|
|
287
318
|
pageToken?: PageToken;
|
|
319
|
+
parts?: readonly BootstrapPart[];
|
|
320
|
+
bytes?: number;
|
|
321
|
+
};
|
|
322
|
+
export type NotReady = {
|
|
323
|
+
kind: 'not-ready';
|
|
288
324
|
};
|
|
289
325
|
export type BootstrapResult = BootstrapPage | {
|
|
290
326
|
kind: 'beyond-horizon';
|
|
291
|
-
} | AdapterFailure;
|
|
327
|
+
} | NotReady | AdapterFailure;
|
|
292
328
|
export type RefreshRequest = {
|
|
293
329
|
locator: string;
|
|
294
330
|
selection: string;
|
|
@@ -300,11 +336,15 @@ export type RefreshPage = {
|
|
|
300
336
|
roomVersion: string;
|
|
301
337
|
models?: RoomModels;
|
|
302
338
|
documents: Readonly<Record<string, string>>;
|
|
339
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
303
340
|
revisions: Readonly<Record<string, string>>;
|
|
304
341
|
fileIds?: Readonly<Record<string, string>>;
|
|
342
|
+
created?: Readonly<Record<string, string>>;
|
|
305
343
|
changes: Readonly<Record<string, HeadChange>>;
|
|
306
344
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
307
345
|
removals: readonly string[];
|
|
346
|
+
folders?: readonly string[];
|
|
347
|
+
folderRemovals?: readonly string[];
|
|
308
348
|
pageToken?: PageToken;
|
|
309
349
|
};
|
|
310
350
|
export type RefreshResult = {
|
|
@@ -315,6 +355,7 @@ export type RefreshResult = {
|
|
|
315
355
|
export type MutationRequest = {
|
|
316
356
|
locator: string;
|
|
317
357
|
changeBatch: ChangeBatch;
|
|
358
|
+
file(localId: string): Promise<Blob>;
|
|
318
359
|
upload?: unknown;
|
|
319
360
|
};
|
|
320
361
|
export type RetryableRefusal = ProviderRefusal & {
|
|
@@ -325,8 +366,7 @@ export type ServiceMode = Open<'open' | 'write-halted'>;
|
|
|
325
366
|
export type ServiceModeSignal = {
|
|
326
367
|
observe(notify: (mode: ServiceMode) => void): () => void;
|
|
327
368
|
};
|
|
328
|
-
export type
|
|
329
|
-
kind: 'accepted';
|
|
369
|
+
export type AcceptedRoom = {
|
|
330
370
|
roomVersion: string;
|
|
331
371
|
documents: Readonly<Record<string, string>>;
|
|
332
372
|
revisions: Readonly<Record<string, string>>;
|
|
@@ -334,9 +374,13 @@ export type MutationResult = {
|
|
|
334
374
|
changes: Readonly<Record<string, HeadChange>>;
|
|
335
375
|
removals: readonly string[];
|
|
336
376
|
binaryFiles?: Readonly<Record<string, BinaryFile>>;
|
|
377
|
+
};
|
|
378
|
+
export type MutationResult = (AcceptedRoom & {
|
|
379
|
+
kind: 'accepted';
|
|
337
380
|
author?: string;
|
|
338
381
|
time?: string;
|
|
339
|
-
|
|
382
|
+
destination?: AcceptedRoom;
|
|
383
|
+
}) | (ProviderRefusal & {
|
|
340
384
|
kind: 'conflicted';
|
|
341
385
|
roomVersion?: string;
|
|
342
386
|
affected: Readonly<Record<string, string>>;
|
|
@@ -345,15 +389,9 @@ export type MutationResult = {
|
|
|
345
389
|
affected: Readonly<Record<string, string>>;
|
|
346
390
|
}) | RetryableRefusal | {
|
|
347
391
|
kind: 'write-halted';
|
|
348
|
-
} | {
|
|
349
|
-
kind: 'expired';
|
|
350
|
-
restored?: true;
|
|
351
392
|
} | AdapterFailure;
|
|
352
393
|
export type HistoryAuthor = {
|
|
353
|
-
kind: 'user';
|
|
354
|
-
id: string;
|
|
355
|
-
} | {
|
|
356
|
-
kind: 'site';
|
|
394
|
+
kind: 'user' | 'site' | 'inbox' | 'app';
|
|
357
395
|
id: string;
|
|
358
396
|
name: string;
|
|
359
397
|
};
|
|
@@ -385,22 +423,12 @@ export type BinaryRequest = {
|
|
|
385
423
|
locator: string;
|
|
386
424
|
path: string;
|
|
387
425
|
revision: string;
|
|
388
|
-
fileRef?: string;
|
|
389
|
-
} | {
|
|
390
|
-
kind: 'reference';
|
|
391
|
-
fileRef: string;
|
|
392
|
-
referrer: unknown;
|
|
393
|
-
};
|
|
394
|
-
export type ReferrerScope = {
|
|
395
|
-
kind: 'room';
|
|
396
|
-
locator: string;
|
|
397
|
-
path?: string;
|
|
398
|
-
} | {
|
|
399
|
-
kind: 'conversations';
|
|
400
426
|
};
|
|
401
427
|
export type BinaryResult = {
|
|
402
428
|
kind: 'binary';
|
|
403
|
-
|
|
429
|
+
body: ReadableStream<Uint8Array>;
|
|
430
|
+
mediaType: string;
|
|
431
|
+
sha256?: string;
|
|
404
432
|
} | (ProviderRefusal & {
|
|
405
433
|
kind: 'rejected';
|
|
406
434
|
}) | AdapterFailure;
|
|
@@ -408,6 +436,22 @@ export type BinaryLinkResult = {
|
|
|
408
436
|
kind: 'link';
|
|
409
437
|
url: string;
|
|
410
438
|
name: string;
|
|
439
|
+
mediaType?: string;
|
|
440
|
+
} | (ProviderRefusal & {
|
|
441
|
+
kind: 'rejected';
|
|
442
|
+
}) | AdapterFailure;
|
|
443
|
+
export type AttachRequest = {
|
|
444
|
+
locator: string;
|
|
445
|
+
name: string;
|
|
446
|
+
mediaType: string;
|
|
447
|
+
byteLength: number;
|
|
448
|
+
sha256: string;
|
|
449
|
+
blob: Blob;
|
|
450
|
+
};
|
|
451
|
+
export type AttachResult = {
|
|
452
|
+
kind: 'attached';
|
|
453
|
+
path: string;
|
|
454
|
+
revision: string;
|
|
411
455
|
} | (ProviderRefusal & {
|
|
412
456
|
kind: 'rejected';
|
|
413
457
|
}) | AdapterFailure;
|
|
@@ -423,71 +467,85 @@ export type ActionResult = {
|
|
|
423
467
|
kind: 'action';
|
|
424
468
|
result: unknown;
|
|
425
469
|
at?: RoomVersionAt;
|
|
470
|
+
} | (ProviderRefusal & {
|
|
471
|
+
kind: 'rejected';
|
|
472
|
+
reset?: string;
|
|
473
|
+
}) | AdapterFailure;
|
|
474
|
+
export type SearchHit = {
|
|
475
|
+
room: string;
|
|
476
|
+
path: string;
|
|
477
|
+
line?: number;
|
|
478
|
+
snippet?: string;
|
|
479
|
+
};
|
|
480
|
+
export type SearchAsk = {
|
|
481
|
+
text: string;
|
|
482
|
+
rooms: readonly string[] | null;
|
|
483
|
+
};
|
|
484
|
+
export type SearchAnswer = {
|
|
485
|
+
kind: 'found';
|
|
486
|
+
documents: readonly SearchHit[];
|
|
426
487
|
} | (ProviderRefusal & {
|
|
427
488
|
kind: 'rejected';
|
|
428
489
|
}) | AdapterFailure;
|
|
429
490
|
export type HeldRoom = {
|
|
430
491
|
locator: string;
|
|
492
|
+
roomVersion: string | null;
|
|
493
|
+
};
|
|
494
|
+
export type RoomChange = {
|
|
495
|
+
kind: 'room-change';
|
|
496
|
+
locator: string;
|
|
497
|
+
from: string | null;
|
|
431
498
|
roomVersion: string;
|
|
432
|
-
|
|
433
|
-
|
|
499
|
+
read(): Promise<RefreshPage>;
|
|
500
|
+
};
|
|
501
|
+
export type AuthorityChange = {
|
|
502
|
+
kind: 'authority-changed';
|
|
503
|
+
rooms: readonly DiscoveredRoom[];
|
|
504
|
+
left: readonly string[];
|
|
505
|
+
member?: Member;
|
|
434
506
|
};
|
|
435
507
|
export type RoomStreamEvent = {
|
|
436
508
|
kind: 'opened';
|
|
509
|
+
} | {
|
|
510
|
+
kind: 'discovered';
|
|
511
|
+
discovery: Discovery;
|
|
437
512
|
} | {
|
|
438
513
|
kind: 'closed';
|
|
439
514
|
revoked: boolean;
|
|
440
515
|
lost: boolean;
|
|
516
|
+
authorityChanged: boolean;
|
|
441
517
|
} | {
|
|
442
|
-
kind: '
|
|
518
|
+
kind: 'caught-up';
|
|
443
519
|
expired: readonly string[];
|
|
444
|
-
} |
|
|
445
|
-
kind: 'authority-changed';
|
|
446
|
-
scope?: DiscoveryScope;
|
|
447
|
-
} | {
|
|
448
|
-
kind: 'room-version';
|
|
449
|
-
locator: string;
|
|
450
|
-
roomVersion: string;
|
|
451
|
-
};
|
|
452
|
-
export type KeptReceipt = {
|
|
453
|
-
key: string;
|
|
454
|
-
head: unknown;
|
|
455
|
-
};
|
|
456
|
-
export type StreamReceipts = {
|
|
457
|
-
heads(): Promise<readonly KeptReceipt[]>;
|
|
458
|
-
parts(key: string, count: number): Promise<readonly unknown[]>;
|
|
459
|
-
keep(key: string, head: unknown, part?: {
|
|
460
|
-
index: number;
|
|
461
|
-
value: unknown;
|
|
462
|
-
}): Promise<void>;
|
|
463
|
-
drop(keys: readonly string[]): Promise<void>;
|
|
464
|
-
};
|
|
520
|
+
} | AuthorityChange | RoomChange;
|
|
465
521
|
export type RoomStream = {
|
|
466
522
|
hold(rooms: readonly HeldRoom[]): void;
|
|
467
|
-
|
|
468
|
-
published(locator: string, roomVersion: string): void;
|
|
469
|
-
observe(notify: (event: RoomStreamEvent) => void, receipts: StreamReceipts): () => void;
|
|
523
|
+
observe(notify: (event: RoomStreamEvent) => void): () => void;
|
|
470
524
|
};
|
|
525
|
+
export type PathRule = (path: string) => boolean;
|
|
471
526
|
export type Adapter = {
|
|
472
527
|
readonly localSaves?: true;
|
|
473
|
-
readonly
|
|
528
|
+
readonly roomTypes?: string;
|
|
529
|
+
readonly nameableRoomTypes?: readonly string[];
|
|
530
|
+
readonly typedPaths?: readonly TypedPath[];
|
|
531
|
+
readonly pathRule?: PathRule;
|
|
532
|
+
readonly unkeptReads?: readonly string[];
|
|
533
|
+
readonly leadingReads?: readonly string[];
|
|
474
534
|
authorize(): Promise<Authorization>;
|
|
475
|
-
discover(authorization: Authorization
|
|
535
|
+
discover?(authorization: Authorization): Promise<DiscoverResult>;
|
|
476
536
|
bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
|
|
477
|
-
refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
|
|
537
|
+
refresh?(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;
|
|
478
538
|
mutate(authorization: Authorization, request: MutationRequest, keep: (upload: unknown) => Promise<void>): Promise<MutationResult>;
|
|
479
539
|
history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;
|
|
480
540
|
binary(authorization: Authorization, request: BinaryRequest): Promise<BinaryResult>;
|
|
481
|
-
link(authorization: Authorization, request:
|
|
482
|
-
|
|
483
|
-
}>): Promise<BinaryLinkResult>;
|
|
484
|
-
referrerScope(referrer: unknown): ReferrerScope | null;
|
|
541
|
+
link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
|
|
542
|
+
attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
|
|
485
543
|
action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
|
|
544
|
+
search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
|
|
486
545
|
reached(locator: string, roomVersion: string, target: string): boolean;
|
|
487
546
|
follows(locator: string, roomVersion: string, next: string): boolean;
|
|
488
547
|
roomStream?: RoomStream;
|
|
489
548
|
conversations?: ConversationStream;
|
|
490
549
|
serviceMode?: ServiceModeSignal;
|
|
491
550
|
};
|
|
492
|
-
export {};
|
|
493
551
|
//# sourceMappingURL=adapter.d.ts.map
|