@agentshouse/mdruntime 0.1.0-ce296e553e84b → 0.1.0-ce2a9e406a539
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 +21 -19
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +299 -0
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +302 -0
- package/dist/adapter.d.ts +88 -79
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -11
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +20 -60
- package/dist/bootstrap.d.ts +9 -5
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +204 -85
- 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 +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change-set.d.ts +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -0
- package/dist/change.d.ts +5 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +7 -2
- package/dist/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +11 -0
- package/dist/client.d.ts +29 -22
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +37 -20
- package/dist/collection.d.ts +26 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +19 -2
- package/dist/compile.d.ts +9 -7
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +257 -321
- package/dist/connection.d.ts +5 -142
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +111 -5228
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-live.d.ts +150 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +259 -0
- package/dist/conversation-row.d.ts +35 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +55 -0
- package/dist/conversation.d.ts +63 -45
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +1001 -910
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +150 -0
- package/dist/durability.d.ts +19 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -9
- package/dist/expectation.d.ts +26 -13
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +72 -19
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +199 -0
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- 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 +21 -6
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +77 -36
- package/dist/identity.d.ts +0 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -3
- package/dist/index.d.ts +35 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/install.d.ts +60 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +537 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +278 -0
- package/dist/listing.d.ts +52 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +152 -0
- package/dist/live.d.ts +9 -6
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +118 -35
- package/dist/loaded.d.ts +5 -0
- package/dist/loaded.d.ts.map +1 -0
- package/dist/loaded.js +40 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +32 -0
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +49 -0
- package/dist/media.d.ts +6 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +68 -17
- package/dist/memory.d.ts +11 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +102 -32
- package/dist/messages.d.ts +35 -5
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +108 -36
- package/dist/model.d.ts +2 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -14
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +153 -0
- package/dist/observation.d.ts +28 -13
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +185 -81
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +5 -5
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +53 -0
- package/dist/outcome.d.ts +11 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +26 -2
- package/dist/overlay.d.ts +7 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +48 -24
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +4 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +13 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts +41 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +314 -0
- package/dist/presence.d.ts +58 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +231 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +308 -0
- package/dist/query.d.ts +13 -211
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -508
- package/dist/questions.d.ts +29 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +115 -0
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +480 -0
- package/dist/reach.d.ts +15 -14
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +232 -124
- package/dist/react.d.ts +16 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/readiness.d.ts +9 -6
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +39 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +178 -0
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +38 -8
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +10 -22
- 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 +11 -16
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +66 -35
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +33 -9
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +276 -69
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +220 -0
- package/dist/rows.d.ts +16 -23
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +49 -191
- package/dist/runtime.d.ts +34 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +42 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +332 -228
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +426 -0
- package/dist/search.d.ts +12 -63
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -52
- 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 +1 -6
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +13 -95
- package/dist/shown.d.ts +33 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +309 -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 +28 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +103 -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/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 +67 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +164 -0
- package/dist/source.d.ts +54 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +82 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +40 -0
- package/dist/store/readiness.d.ts +11 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +68 -0
- package/dist/store/records.d.ts +217 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +464 -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/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -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 +115 -154
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +171 -398
- package/dist/stored.d.ts +72 -68
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +340 -253
- package/dist/surface.d.ts +89 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +222 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +535 -0
- package/dist/tables.d.ts +124 -56
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +242 -74
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +128 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +9 -12
- package/dist/windows.d.ts +1 -12
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -75
- package/dist/wire.d.ts +59 -7
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +20 -4
- package/package.json +3 -2
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/fulltext.d.ts +0 -27
- package/dist/fulltext.d.ts.map +0 -1
- package/dist/fulltext.js +0 -370
- package/dist/log.d.ts +0 -5
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/actions.js
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { roomTarget, target } from '@agentshouse/mdmodel';
|
|
2
|
+
import { CATCHING_UP, holdsSubmission, 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, failure, historyAnswer, LOCKED_UNREADABLE, lockedRoom, handedOutcome, UNANSWERED, 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, presence } = 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 = presence.losses();
|
|
30
|
+
try {
|
|
31
|
+
const result = await socket.history(authorization, {
|
|
32
|
+
locator,
|
|
33
|
+
path,
|
|
34
|
+
...(query.revision === undefined ? {} : { revision: query.revision }),
|
|
35
|
+
...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),
|
|
36
|
+
});
|
|
37
|
+
if (presence.lostSince(locator, since))
|
|
38
|
+
return failure({ kind: 'room-not-readable', locator });
|
|
39
|
+
if (result.kind === 'scoped-refusal') {
|
|
40
|
+
const room = await store.record(result.locator);
|
|
41
|
+
if (room !== undefined)
|
|
42
|
+
await scoped(runtime, result, room.locator, room.declaration);
|
|
43
|
+
}
|
|
44
|
+
if (result.kind === 'revoked-authorization')
|
|
45
|
+
await refuse(runtime, 'revoked-authorization');
|
|
46
|
+
return historyAnswer(result);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return UNCERTAIN;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function located(runtime, room, path, destination) {
|
|
53
|
+
const crossing = roomTarget(destination);
|
|
54
|
+
const listing = await listingNow(runtime);
|
|
55
|
+
if (crossing === null) {
|
|
56
|
+
const named = target(path, destination);
|
|
57
|
+
return named === null || !listing.has(room) ? null : { room, path: named };
|
|
58
|
+
}
|
|
59
|
+
const held = [...listing.values()].find((listed) => listed.handle === crossing.handle);
|
|
60
|
+
return held === undefined ? null : { room: held.locator, path: crossing.path };
|
|
61
|
+
}
|
|
62
|
+
export async function resolveReference(runtime, room, path, destination) {
|
|
63
|
+
const { store } = runtime;
|
|
64
|
+
if (roomTarget(destination) === null && target(path, destination) === null) {
|
|
65
|
+
return ABSENT_TARGET;
|
|
66
|
+
}
|
|
67
|
+
const at = await located(runtime, room, path, destination);
|
|
68
|
+
if (at === null)
|
|
69
|
+
return UNREADABLE;
|
|
70
|
+
if (await locked(runtime, at.room))
|
|
71
|
+
return LOCKED_UNREADABLE;
|
|
72
|
+
const held = await store.record(at.room);
|
|
73
|
+
if (held !== undefined &&
|
|
74
|
+
(await (await store.open()).entries(held.key, 'visible', [at.path])).length > 0) {
|
|
75
|
+
return { kind: 'document', ...at };
|
|
76
|
+
}
|
|
77
|
+
const history = await readHistory(runtime, at.room, at.path);
|
|
78
|
+
if (history.kind === 'no-history' || history.kind === 'revision')
|
|
79
|
+
return ABSENT_TARGET;
|
|
80
|
+
if (history.kind !== 'history')
|
|
81
|
+
return history;
|
|
82
|
+
const [last] = history.revisions;
|
|
83
|
+
if (last === undefined)
|
|
84
|
+
return ABSENT_TARGET;
|
|
85
|
+
return history.deleted === true
|
|
86
|
+
? { kind: 'deleted', ...at, revision: last }
|
|
87
|
+
: { kind: 'document', ...at };
|
|
88
|
+
}
|
|
89
|
+
async function declaredAction({ store }, name) {
|
|
90
|
+
for (const capability of (await (await store.open()).facts()).capabilities) {
|
|
91
|
+
for (const action of capability.actions ?? []) {
|
|
92
|
+
if (action.name === name)
|
|
93
|
+
return action;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
async function calledRooms(runtime, name, input) {
|
|
99
|
+
const member = (await declaredAction(runtime, name))?.room;
|
|
100
|
+
if (member === undefined || input === null || typeof input !== 'object')
|
|
101
|
+
return [];
|
|
102
|
+
const named = input[member];
|
|
103
|
+
return (Array.isArray(named) ? named : [named]).filter((room) => typeof room === 'string');
|
|
104
|
+
}
|
|
105
|
+
export async function invokeAction(runtime, name, input, { dispatching, attempt } = {}) {
|
|
106
|
+
const { store, socket, retries } = runtime;
|
|
107
|
+
const { session } = socket;
|
|
108
|
+
await socket.ready;
|
|
109
|
+
if (socket.closed() || session.now().refusal !== null) {
|
|
110
|
+
return handedOutcome(retries, attempt, UNANSWERED);
|
|
111
|
+
}
|
|
112
|
+
if ((await declaredAction(runtime, name)) === undefined)
|
|
113
|
+
return undeclared(name);
|
|
114
|
+
try {
|
|
115
|
+
await socket.authorize();
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return handedOutcome(retries, attempt, UNANSWERED);
|
|
119
|
+
}
|
|
120
|
+
const { closed, authorization, refusal } = session.now();
|
|
121
|
+
if (closed || authorization === undefined || refusal !== null) {
|
|
122
|
+
return handedOutcome(retries, attempt, UNANSWERED);
|
|
123
|
+
}
|
|
124
|
+
await dispatching?.();
|
|
125
|
+
try {
|
|
126
|
+
const result = await socket.action(authorization, { name, input });
|
|
127
|
+
if (result.kind === 'scoped-refusal') {
|
|
128
|
+
const room = await store.record(result.locator);
|
|
129
|
+
if (room !== undefined)
|
|
130
|
+
await scoped(runtime, result, room.locator, room.declaration);
|
|
131
|
+
}
|
|
132
|
+
if (result.kind === 'revoked-authorization')
|
|
133
|
+
await refuse(runtime, 'revoked-authorization');
|
|
134
|
+
return handedOutcome(retries, attempt, result);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
return handedOutcome(retries, attempt, { kind: 'transport-uncertainty', failure: error });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export async function readConversationHistory(runtime, request) {
|
|
141
|
+
const { socket, retries } = runtime;
|
|
142
|
+
const caught = { step: 'conversations', instance: CATCHING_UP };
|
|
143
|
+
await socket.ready;
|
|
144
|
+
const stream = socket.conversations();
|
|
145
|
+
if (socket.closed() || socket.session.now().refusal !== null || stream?.history === undefined) {
|
|
146
|
+
return handedOutcome(retries, caught, UNANSWERED);
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const result = await stream.history(request);
|
|
150
|
+
if (result.kind === 'revoked-authorization')
|
|
151
|
+
await refuse(runtime, 'revoked-authorization');
|
|
152
|
+
return handedOutcome(retries, caught, result);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return handedOutcome(retries, caught, { kind: 'transport-uncertainty', failure: error });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function unsettled(result) {
|
|
159
|
+
if (result.kind === 'action')
|
|
160
|
+
return false;
|
|
161
|
+
return result.retryable && (result.kind !== 'rejected' || result.reset === undefined);
|
|
162
|
+
}
|
|
163
|
+
function numberedCall(runtime, name, input, operation, dispatching) {
|
|
164
|
+
return invokeAction(runtime, name, input, {
|
|
165
|
+
dispatching,
|
|
166
|
+
attempt: { step: 'sending', instance: `action ${operation}` },
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function keptSender(runtime, name, input, operation, resent = false) {
|
|
170
|
+
const { store, socket } = runtime;
|
|
171
|
+
const { lanes } = socket;
|
|
172
|
+
const dispatching = async () => (await store.open()).keepCall({ operation, name, input });
|
|
173
|
+
let waiting = [];
|
|
174
|
+
let last = UNCERTAIN;
|
|
175
|
+
let lost = resent;
|
|
176
|
+
const tell = (result) => {
|
|
177
|
+
last = result;
|
|
178
|
+
const told = waiting;
|
|
179
|
+
waiting = [];
|
|
180
|
+
for (const answer of told)
|
|
181
|
+
answer(result);
|
|
182
|
+
};
|
|
183
|
+
const sender = {
|
|
184
|
+
next: () => new Promise((answer) => waiting.push(answer)),
|
|
185
|
+
async send() {
|
|
186
|
+
let result;
|
|
187
|
+
try {
|
|
188
|
+
result = await numberedCall(runtime, name, input, operation, dispatching);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
tell(last);
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
if (unsettled(result))
|
|
195
|
+
lost = true;
|
|
196
|
+
else {
|
|
197
|
+
await (await store.open()).dropCall(operation);
|
|
198
|
+
lanes.settle(operation, lost);
|
|
199
|
+
}
|
|
200
|
+
tell(result);
|
|
201
|
+
return result;
|
|
202
|
+
},
|
|
203
|
+
release() {
|
|
204
|
+
lanes.sent(operation, sender);
|
|
205
|
+
tell(last);
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
lanes.sending(operation, sender);
|
|
209
|
+
return sender;
|
|
210
|
+
}
|
|
211
|
+
async function recoveredAction(runtime, name, input, attempt) {
|
|
212
|
+
const { socket, recovery } = runtime;
|
|
213
|
+
const operation = operationOf(input);
|
|
214
|
+
if (operation === null)
|
|
215
|
+
return invokeAction(runtime, name, input, { attempt });
|
|
216
|
+
const held = socket.lanes.sender(operation);
|
|
217
|
+
if (held !== undefined)
|
|
218
|
+
return held.next();
|
|
219
|
+
const sender = keptSender(runtime, name, input, operation);
|
|
220
|
+
let first;
|
|
221
|
+
try {
|
|
222
|
+
first = await sender.send();
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
sender.release();
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
if (!unsettled(first)) {
|
|
229
|
+
sender.release();
|
|
230
|
+
return first;
|
|
231
|
+
}
|
|
232
|
+
void recovery
|
|
233
|
+
.attempt(`action ${operation}`, async () => {
|
|
234
|
+
if (socket.closed() || socket.session.now().refusal !== null)
|
|
235
|
+
return 'done';
|
|
236
|
+
if (!socket.isOpen())
|
|
237
|
+
return 'again';
|
|
238
|
+
return unsettled(await sender.send()) ? 'again' : 'done';
|
|
239
|
+
}, { again: true })
|
|
240
|
+
.finally(() => sender.release());
|
|
241
|
+
return first;
|
|
242
|
+
}
|
|
243
|
+
export async function called(runtime, name, input, attempt) {
|
|
244
|
+
await runtime.socket.ready;
|
|
245
|
+
const lockedNow = await lockedRooms(runtime);
|
|
246
|
+
const room = (await calledRooms(runtime, name, input)).find((one) => lockedNow.includes(one));
|
|
247
|
+
return room === undefined ? recoveredAction(runtime, name, input, attempt) : lockedRoom(room);
|
|
248
|
+
}
|
|
249
|
+
export async function answeredCall(runtime, operation) {
|
|
250
|
+
const { store, socket } = runtime;
|
|
251
|
+
const { lanes } = socket;
|
|
252
|
+
const held = () => lanes.sender(operation) !== undefined || lanes.unclaimed(operation);
|
|
253
|
+
if (!held()) {
|
|
254
|
+
const calls = await (await store.open()).calls();
|
|
255
|
+
const kept = calls.some((one) => one.operation === operation) ||
|
|
256
|
+
(await holdsSubmission(runtime.conversations, operation));
|
|
257
|
+
if (!held() && !kept)
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
await lanes.settled(operation);
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
export async function resendCalls(runtime, signal) {
|
|
264
|
+
const { store, socket } = runtime;
|
|
265
|
+
if (!socket.isOpen() || socket.closed() || socket.stopping())
|
|
266
|
+
return 'done';
|
|
267
|
+
const local = await store.open();
|
|
268
|
+
for (const held of await local.calls()) {
|
|
269
|
+
if (socket.lanes.sender(held.operation) !== undefined)
|
|
270
|
+
continue;
|
|
271
|
+
if (socket.closed() || signal.aborted)
|
|
272
|
+
return 'done';
|
|
273
|
+
const sender = keptSender(runtime, held.name, held.input, held.operation, true);
|
|
274
|
+
try {
|
|
275
|
+
if (unsettled(await sender.send()))
|
|
276
|
+
return 'again';
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
sender.release();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return 'done';
|
|
283
|
+
}
|
|
284
|
+
async function resendPass({ socket, conversations }, signal) {
|
|
285
|
+
if (!socket.continuing() || !socket.isOpen() || socket.stopping())
|
|
286
|
+
return 'done';
|
|
287
|
+
const reading = { complete: true, reachable: true };
|
|
288
|
+
try {
|
|
289
|
+
await resendConversations(conversations, reading);
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
reading.reachable = false;
|
|
293
|
+
}
|
|
294
|
+
if (signal.aborted)
|
|
295
|
+
return 'done';
|
|
296
|
+
return reading.reachable && reading.complete ? 'done' : 'again';
|
|
297
|
+
}
|
|
298
|
+
export function resendLater(runtime) {
|
|
299
|
+
if (!runtime.socket.isOpen())
|
|
300
|
+
return;
|
|
301
|
+
void runtime.recovery.attempt('resend', (signal) => resendPass(runtime, signal), { again: true });
|
|
302
|
+
}
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SavedFacts, TypedPath, VerifiedModel } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { Operation, SessionState } from '@agentshouse/session-content';
|
|
2
3
|
import type { ModelResult } from './model.js';
|
|
3
|
-
export type {
|
|
4
|
+
export type { SavedFacts, TypedPath };
|
|
4
5
|
import type { Open } from './open.js';
|
|
5
6
|
import type { ChangeBatch } from './change.js';
|
|
6
7
|
export type Authorization = object;
|
|
@@ -13,22 +14,25 @@ export type TypedSelection = {
|
|
|
13
14
|
};
|
|
14
15
|
export type OperationScopes = {
|
|
15
16
|
write: readonly string[];
|
|
16
|
-
|
|
17
|
+
erase: readonly string[];
|
|
17
18
|
};
|
|
18
19
|
export type ReplicaAdmission = {
|
|
19
20
|
selection: string;
|
|
20
21
|
admission: Open<'admitted' | 'unavailable'>;
|
|
21
22
|
offline: Open<'locked' | 'open'>;
|
|
22
23
|
};
|
|
23
|
-
export type
|
|
24
|
-
name: string;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
export type RoomDeclaration = {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly handle: string;
|
|
27
|
+
readonly operations: OperationScopes;
|
|
28
|
+
readonly replica: ReplicaAdmission;
|
|
29
|
+
readonly typedSelection: TypedSelection | null;
|
|
30
|
+
readonly providerOwnedPaths: readonly string[];
|
|
31
|
+
readonly authoredPaths: readonly string[];
|
|
32
|
+
};
|
|
33
|
+
export type DiscoveredRoom = RoomDeclaration & {
|
|
34
|
+
readonly locator: string;
|
|
35
|
+
readonly roomVersion: string;
|
|
32
36
|
};
|
|
33
37
|
export type Capability = {
|
|
34
38
|
name: string;
|
|
@@ -38,16 +42,16 @@ export type Capability = {
|
|
|
38
42
|
export type ListedConversation = {
|
|
39
43
|
conversation: string;
|
|
40
44
|
agent: string;
|
|
41
|
-
agentName: string;
|
|
42
|
-
agentRetired: boolean;
|
|
43
45
|
name: string;
|
|
44
46
|
created: string;
|
|
45
47
|
finished: string | null;
|
|
46
48
|
outcome: string | null;
|
|
47
49
|
waiting: boolean;
|
|
48
50
|
newest: string | null;
|
|
51
|
+
processEnded: string | null;
|
|
52
|
+
subject: string | null;
|
|
49
53
|
};
|
|
50
|
-
export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete';
|
|
54
|
+
export type ConversationAction = 'conversations/create' | 'conversations/send' | 'conversations/interaction/answer' | 'conversations/interrupt' | 'conversations/kill' | 'conversations/delete' | 'conversations/take-out' | 'conversations/rename' | 'conversations/option/set' | 'conversations/retry' | 'agent-functions/decide';
|
|
51
55
|
export type ConversationMessage = {
|
|
52
56
|
identity: string;
|
|
53
57
|
turn: string;
|
|
@@ -56,6 +60,7 @@ export type ConversationMessage = {
|
|
|
56
60
|
};
|
|
57
61
|
export type AcceptedMessage = ConversationMessage & {
|
|
58
62
|
position: string;
|
|
63
|
+
change: string;
|
|
59
64
|
};
|
|
60
65
|
export type ConversationHistoryRequest = {
|
|
61
66
|
conversations: readonly {
|
|
@@ -71,37 +76,10 @@ export type ConversationHistoryPage = {
|
|
|
71
76
|
export type ConversationHistories = {
|
|
72
77
|
histories: readonly ConversationHistoryPage[];
|
|
73
78
|
};
|
|
74
|
-
export type TurnContext = {
|
|
75
|
-
used: number;
|
|
76
|
-
window: number;
|
|
77
|
-
};
|
|
78
79
|
export type TurnOperation = {
|
|
79
80
|
op: 'begin';
|
|
80
81
|
at: string;
|
|
81
|
-
} |
|
|
82
|
-
op: 'start';
|
|
83
|
-
index: number;
|
|
84
|
-
part: unknown;
|
|
85
|
-
} | {
|
|
86
|
-
op: 'append';
|
|
87
|
-
index: number;
|
|
88
|
-
text: string;
|
|
89
|
-
} | {
|
|
90
|
-
op: 'status';
|
|
91
|
-
index: number;
|
|
92
|
-
status: string;
|
|
93
|
-
result: unknown;
|
|
94
|
-
} | {
|
|
95
|
-
op: 'count';
|
|
96
|
-
index: number;
|
|
97
|
-
count: number;
|
|
98
|
-
} | {
|
|
99
|
-
op: 'plan';
|
|
100
|
-
index: number;
|
|
101
|
-
entries: readonly unknown[];
|
|
102
|
-
} | ({
|
|
103
|
-
op: 'context';
|
|
104
|
-
} & TurnContext);
|
|
82
|
+
} | Operation;
|
|
105
83
|
export type ProcessCommand = {
|
|
106
84
|
[field: string]: unknown;
|
|
107
85
|
name: string;
|
|
@@ -138,10 +116,6 @@ export type SessionOption = (SessionOptionNaming & {
|
|
|
138
116
|
type: 'boolean';
|
|
139
117
|
currentValue: boolean;
|
|
140
118
|
});
|
|
141
|
-
export type RunningSubagent = {
|
|
142
|
-
description: string;
|
|
143
|
-
activity: string | null;
|
|
144
|
-
};
|
|
145
119
|
export type ConversationEvent = {
|
|
146
120
|
kind: 'turn';
|
|
147
121
|
conversation: string;
|
|
@@ -168,9 +142,9 @@ export type ConversationEvent = {
|
|
|
168
142
|
conversation: string;
|
|
169
143
|
step: string | null;
|
|
170
144
|
} | {
|
|
171
|
-
kind: '
|
|
145
|
+
kind: 'state';
|
|
172
146
|
conversation: string;
|
|
173
|
-
|
|
147
|
+
state: SessionState | null;
|
|
174
148
|
} | {
|
|
175
149
|
kind: 'link';
|
|
176
150
|
conversation: string;
|
|
@@ -178,6 +152,7 @@ export type ConversationEvent = {
|
|
|
178
152
|
} | {
|
|
179
153
|
kind: 'deliveries';
|
|
180
154
|
conversation: string;
|
|
155
|
+
waiting: readonly string[];
|
|
181
156
|
unknown: readonly string[];
|
|
182
157
|
} | {
|
|
183
158
|
kind: 'accepted-message';
|
|
@@ -188,6 +163,7 @@ export type ConversationEvent = {
|
|
|
188
163
|
conversation: string;
|
|
189
164
|
} | {
|
|
190
165
|
kind: 'list';
|
|
166
|
+
agents: readonly ListedAgent[];
|
|
191
167
|
entries: readonly ListedConversation[];
|
|
192
168
|
whole: boolean;
|
|
193
169
|
more: boolean;
|
|
@@ -195,20 +171,39 @@ export type ConversationEvent = {
|
|
|
195
171
|
} | {
|
|
196
172
|
kind: 'listed';
|
|
197
173
|
entry: ListedConversation;
|
|
174
|
+
} | {
|
|
175
|
+
kind: 'agent';
|
|
176
|
+
agent: ListedAgent;
|
|
198
177
|
} | {
|
|
199
178
|
kind: 'unlisted';
|
|
200
179
|
conversation: string;
|
|
201
180
|
};
|
|
181
|
+
export type AgentEnvironment = {
|
|
182
|
+
identity: string;
|
|
183
|
+
name: string;
|
|
184
|
+
state: 'online' | 'offline';
|
|
185
|
+
};
|
|
202
186
|
export type ListedAgent = {
|
|
203
|
-
|
|
187
|
+
id: string;
|
|
204
188
|
name: string;
|
|
205
|
-
|
|
189
|
+
revision: number;
|
|
190
|
+
environment: string;
|
|
191
|
+
environment_name: string;
|
|
192
|
+
environment_connected: boolean;
|
|
193
|
+
launch_directory: string;
|
|
194
|
+
cli: string;
|
|
195
|
+
model: string | null;
|
|
196
|
+
effort: string | null;
|
|
197
|
+
mode: string | null;
|
|
198
|
+
base_instructions: string;
|
|
199
|
+
in_telegram: boolean;
|
|
200
|
+
created: string;
|
|
201
|
+
retired_at: string | null;
|
|
206
202
|
};
|
|
207
203
|
export type ConversationStream = {
|
|
208
204
|
replicate(conversations: readonly string[]): void;
|
|
209
205
|
hold(cursor: string | null): void;
|
|
210
206
|
observe(notify: (event: ConversationEvent) => void): () => void;
|
|
211
|
-
agents?(): Promise<readonly ListedAgent[] | null>;
|
|
212
207
|
history?(request: ConversationHistoryRequest): Promise<ActionResult>;
|
|
213
208
|
};
|
|
214
209
|
export type ActionDeclaration = {
|
|
@@ -229,7 +224,6 @@ export type HistoryRetention = {
|
|
|
229
224
|
};
|
|
230
225
|
export type Retention = {
|
|
231
226
|
history: HistoryRetention;
|
|
232
|
-
outcome: number;
|
|
233
227
|
refreshHorizon: number;
|
|
234
228
|
};
|
|
235
229
|
export type Discovery = {
|
|
@@ -242,6 +236,7 @@ export type Discovery = {
|
|
|
242
236
|
};
|
|
243
237
|
export type TransportUncertainty = {
|
|
244
238
|
kind: 'transport-uncertainty';
|
|
239
|
+
failure?: unknown;
|
|
245
240
|
};
|
|
246
241
|
export type RoomNotReadable = {
|
|
247
242
|
kind: 'room-not-readable';
|
|
@@ -285,26 +280,17 @@ export type BinaryFile = {
|
|
|
285
280
|
mediaType: string;
|
|
286
281
|
sha256: string;
|
|
287
282
|
};
|
|
288
|
-
export type HeldFile = {
|
|
289
|
-
readonly path: string;
|
|
290
|
-
readonly revision: string;
|
|
291
|
-
};
|
|
292
|
-
export type HeldContent = {
|
|
293
|
-
files(after: string | null, limit: number): Promise<readonly HeldFile[]>;
|
|
294
|
-
contents(paths: readonly string[]): Promise<ReadonlyMap<string, {
|
|
295
|
-
readonly content: string;
|
|
296
|
-
readonly revision: string;
|
|
297
|
-
}>>;
|
|
298
|
-
};
|
|
299
283
|
export type BootstrapRequest = {
|
|
300
284
|
locator: string;
|
|
301
285
|
selection: string;
|
|
302
|
-
path?: string;
|
|
303
286
|
pageToken?: PageToken;
|
|
304
|
-
held?: HeldContent;
|
|
305
287
|
arriving?: (bytes: number) => void;
|
|
306
288
|
signal?: AbortSignal;
|
|
307
289
|
};
|
|
290
|
+
export type BootstrapPart = {
|
|
291
|
+
readonly id: string;
|
|
292
|
+
readonly bytes: number;
|
|
293
|
+
};
|
|
308
294
|
export type BootstrapInventory = {
|
|
309
295
|
readonly bytes: number;
|
|
310
296
|
};
|
|
@@ -316,18 +302,23 @@ export type BootstrapPage = {
|
|
|
316
302
|
roomVersion: string;
|
|
317
303
|
models?: RoomModels;
|
|
318
304
|
documents: Readonly<Record<string, string>>;
|
|
319
|
-
|
|
305
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
320
306
|
revisions: Readonly<Record<string, string>>;
|
|
321
307
|
fileIds?: Readonly<Record<string, string>>;
|
|
308
|
+
created?: Readonly<Record<string, string>>;
|
|
322
309
|
changes: Readonly<Record<string, HeadChange>>;
|
|
323
310
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
324
311
|
folders?: readonly string[];
|
|
325
312
|
pageToken?: PageToken;
|
|
313
|
+
parts?: readonly BootstrapPart[];
|
|
326
314
|
bytes?: number;
|
|
327
315
|
};
|
|
316
|
+
export type NotReady = {
|
|
317
|
+
kind: 'not-ready';
|
|
318
|
+
};
|
|
328
319
|
export type BootstrapResult = BootstrapPage | {
|
|
329
320
|
kind: 'beyond-horizon';
|
|
330
|
-
} | AdapterFailure;
|
|
321
|
+
} | NotReady | AdapterFailure;
|
|
331
322
|
export type RefreshRequest = {
|
|
332
323
|
locator: string;
|
|
333
324
|
selection: string;
|
|
@@ -339,9 +330,10 @@ export type RefreshPage = {
|
|
|
339
330
|
roomVersion: string;
|
|
340
331
|
models?: RoomModels;
|
|
341
332
|
documents: Readonly<Record<string, string>>;
|
|
342
|
-
|
|
333
|
+
facts: Readonly<Record<string, SavedFacts>>;
|
|
343
334
|
revisions: Readonly<Record<string, string>>;
|
|
344
335
|
fileIds?: Readonly<Record<string, string>>;
|
|
336
|
+
created?: Readonly<Record<string, string>>;
|
|
345
337
|
changes: Readonly<Record<string, HeadChange>>;
|
|
346
338
|
binaryFiles: Readonly<Record<string, BinaryFile>>;
|
|
347
339
|
removals: readonly string[];
|
|
@@ -379,21 +371,15 @@ export type AcceptedRoom = {
|
|
|
379
371
|
};
|
|
380
372
|
export type MutationResult = (AcceptedRoom & {
|
|
381
373
|
kind: 'accepted';
|
|
382
|
-
author?: string;
|
|
383
|
-
time?: string;
|
|
384
374
|
destination?: AcceptedRoom;
|
|
385
375
|
}) | (ProviderRefusal & {
|
|
386
376
|
kind: 'conflicted';
|
|
387
|
-
roomVersion?: string;
|
|
388
377
|
affected: Readonly<Record<string, string>>;
|
|
389
378
|
}) | (ProviderRefusal & {
|
|
390
379
|
kind: 'rejected';
|
|
391
380
|
affected: Readonly<Record<string, string>>;
|
|
392
381
|
}) | RetryableRefusal | {
|
|
393
382
|
kind: 'write-halted';
|
|
394
|
-
} | {
|
|
395
|
-
kind: 'expired';
|
|
396
|
-
restored?: true;
|
|
397
383
|
} | AdapterFailure;
|
|
398
384
|
export type HistoryAuthor = {
|
|
399
385
|
kind: 'user' | 'site' | 'inbox' | 'app';
|
|
@@ -472,17 +458,34 @@ export type ActionResult = {
|
|
|
472
458
|
kind: 'action';
|
|
473
459
|
result: unknown;
|
|
474
460
|
at?: RoomVersionAt;
|
|
461
|
+
} | (ProviderRefusal & {
|
|
462
|
+
kind: 'rejected';
|
|
463
|
+
reset?: string;
|
|
464
|
+
}) | AdapterFailure;
|
|
465
|
+
export type SearchHit = {
|
|
466
|
+
room: string;
|
|
467
|
+
path: string;
|
|
468
|
+
line?: number;
|
|
469
|
+
snippet?: string;
|
|
470
|
+
};
|
|
471
|
+
export type SearchAsk = {
|
|
472
|
+
text: string;
|
|
473
|
+
rooms: readonly string[] | null;
|
|
474
|
+
};
|
|
475
|
+
export type SearchAnswer = {
|
|
476
|
+
kind: 'found';
|
|
477
|
+
documents: readonly SearchHit[];
|
|
475
478
|
} | (ProviderRefusal & {
|
|
476
479
|
kind: 'rejected';
|
|
477
480
|
}) | AdapterFailure;
|
|
478
481
|
export type HeldRoom = {
|
|
479
482
|
locator: string;
|
|
480
|
-
roomVersion: string;
|
|
483
|
+
roomVersion: string | null;
|
|
481
484
|
};
|
|
482
485
|
export type RoomChange = {
|
|
483
486
|
kind: 'room-change';
|
|
484
487
|
locator: string;
|
|
485
|
-
from: string;
|
|
488
|
+
from: string | null;
|
|
486
489
|
roomVersion: string;
|
|
487
490
|
read(): Promise<RefreshPage>;
|
|
488
491
|
};
|
|
@@ -501,6 +504,7 @@ export type RoomStreamEvent = {
|
|
|
501
504
|
kind: 'closed';
|
|
502
505
|
revoked: boolean;
|
|
503
506
|
lost: boolean;
|
|
507
|
+
authorityChanged: boolean;
|
|
504
508
|
} | {
|
|
505
509
|
kind: 'caught-up';
|
|
506
510
|
expired: readonly string[];
|
|
@@ -509,10 +513,14 @@ export type RoomStream = {
|
|
|
509
513
|
hold(rooms: readonly HeldRoom[]): void;
|
|
510
514
|
observe(notify: (event: RoomStreamEvent) => void): () => void;
|
|
511
515
|
};
|
|
516
|
+
export type PathRule = (path: string) => boolean;
|
|
512
517
|
export type Adapter = {
|
|
513
518
|
readonly localSaves?: true;
|
|
514
|
-
readonly roomTypes?:
|
|
515
|
-
readonly
|
|
519
|
+
readonly roomTypes?: VerifiedModel;
|
|
520
|
+
readonly typedPaths?: readonly TypedPath[];
|
|
521
|
+
readonly pathRule?: PathRule;
|
|
522
|
+
readonly unkeptReads?: readonly string[];
|
|
523
|
+
readonly leadingReads?: readonly string[];
|
|
516
524
|
authorize(): Promise<Authorization>;
|
|
517
525
|
discover?(authorization: Authorization): Promise<DiscoverResult>;
|
|
518
526
|
bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;
|
|
@@ -523,6 +531,7 @@ export type Adapter = {
|
|
|
523
531
|
link(authorization: Authorization, request: BinaryRequest): Promise<BinaryLinkResult>;
|
|
524
532
|
attach(authorization: Authorization, request: AttachRequest): Promise<AttachResult>;
|
|
525
533
|
action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;
|
|
534
|
+
search?(authorization: Authorization, request: SearchAsk): Promise<SearchAnswer>;
|
|
526
535
|
reached(locator: string, roomVersion: string, target: string): boolean;
|
|
527
536
|
follows(locator: string, roomVersion: string, next: string): boolean;
|
|
528
537
|
roomStream?: RoomStream;
|