@agentshouse/mdruntime 0.1.0-cd26b960b7262 → 0.1.0-cd30853a1b15e
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 +0 -3
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +72 -158
- 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 +8 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +118 -67
- package/dist/adapter.d.ts +81 -56
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +0 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +0 -5
- package/dist/authored.d.ts +88 -0
- package/dist/authored.d.ts.map +1 -0
- package/dist/authored.js +345 -0
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -19
- 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 +4 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +3 -0
- package/dist/chat-types.d.ts +0 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +0 -2
- package/dist/client.d.ts +10 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -18
- package/dist/collection.d.ts +25 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +19 -2
- package/dist/column.d.ts +5 -0
- package/dist/column.d.ts.map +1 -0
- package/dist/column.js +9 -0
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +17 -5
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +31 -24
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -1
- package/dist/conversation-live.d.ts +26 -12
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +23 -12
- package/dist/conversation-row.d.ts +8 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +20 -7
- package/dist/conversation.d.ts +32 -10
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +317 -232
- 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.map +1 -1
- package/dist/discovery.js +19 -44
- package/dist/durability.d.ts +4 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.js +1 -1
- package/dist/expectation.d.ts +25 -14
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +51 -20
- 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.map +1 -1
- package/dist/figures.js +4 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/host.d.ts +18 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +55 -15
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -7
- package/dist/install.d.ts +10 -6
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +92 -109
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +54 -40
- package/dist/listing.d.ts +11 -12
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +48 -72
- package/dist/live.d.ts +5 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +74 -31
- 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 +2 -4
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +10 -39
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +11 -23
- package/dist/media.d.ts +5 -0
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +65 -14
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +56 -26
- package/dist/messages.d.ts +12 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +25 -27
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -5
- package/dist/models.d.ts +4 -8
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +97 -139
- package/dist/observation.d.ts +27 -12
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +173 -69
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +2 -2
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +5 -9
- package/dist/outcome.d.ts +7 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +23 -2
- package/dist/overlay.d.ts +6 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +37 -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 +3 -59
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +10 -123
- package/dist/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +154 -66
- 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 +2 -2
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +66 -30
- package/dist/questions.d.ts +1 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +1 -7
- 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 +2 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +83 -25
- package/dist/react.d.ts +8 -5
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +28 -5
- package/dist/readiness.d.ts +9 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +4 -2
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +11 -4
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -7
- package/dist/refresh.js +2 -2
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +5 -5
- package/dist/replica.d.ts +5 -11
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +14 -16
- 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 +30 -5
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +270 -63
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +8 -5
- package/dist/room-list.d.ts +10 -0
- package/dist/room-list.d.ts.map +1 -0
- package/dist/room-list.js +45 -0
- package/dist/rows.d.ts +2 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +9 -10
- package/dist/runtime.d.ts +9 -18
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +42 -90
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +314 -223
- package/dist/saves.d.ts +2 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +124 -703
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +4 -4
- package/dist/shown.d.ts +7 -5
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +75 -58
- package/dist/socket/lanes.d.ts +12 -4
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +34 -8
- package/dist/socket.d.ts +3 -6
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +3 -14
- package/dist/source.d.ts +5 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +13 -2
- package/dist/store/installs.d.ts +2 -2
- package/dist/store/installs.d.ts.map +1 -1
- package/dist/store/installs.js +10 -4
- package/dist/store/readiness.d.ts +5 -4
- package/dist/store/readiness.d.ts.map +1 -1
- package/dist/store/readiness.js +28 -12
- package/dist/store/records.d.ts +17 -6
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +56 -22
- 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.d.ts +23 -14
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +46 -17
- package/dist/stored.d.ts +24 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +80 -29
- package/dist/surface.d.ts +5 -3
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +23 -21
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +89 -85
- package/dist/tables.d.ts +16 -56
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +86 -327
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +1 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +4 -10
- package/dist/wire.d.ts +45 -7
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +15 -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/job.d.ts +0 -33
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -54
- package/dist/log.d.ts +0 -6
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/socket/rooms.d.ts +0 -44
- package/dist/socket/rooms.d.ts.map +0 -1
- package/dist/socket/rooms.js +0 -90
- package/dist/store/fences.d.ts +0 -16
- package/dist/store/fences.d.ts.map +0 -1
- package/dist/store/fences.js +0 -26
package/dist/lost.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { changeSet, mergeChangeSets } from './change-set.js';
|
|
2
|
-
import { ERASE_BATCH
|
|
3
|
-
import {
|
|
2
|
+
import { ERASE_BATCH } from './install.js';
|
|
3
|
+
import { unpair } from './queue.js';
|
|
4
|
+
import { recoverReads } from './shown.js';
|
|
4
5
|
import { yielded } from './turn.js';
|
|
5
|
-
function forget({ store, socket }, locator) {
|
|
6
|
-
forgetInstall(store, locator);
|
|
7
|
-
socket.rooms.forget(locator);
|
|
8
|
-
store.forget(locator);
|
|
9
|
-
}
|
|
10
6
|
export async function eraseFenced({ store }, locators) {
|
|
11
7
|
for (const locator of locators) {
|
|
12
8
|
while (await store.durably((local) => local.erase(locator, ERASE_BATCH)))
|
|
@@ -14,24 +10,17 @@ export async function eraseFenced({ store }, locators) {
|
|
|
14
10
|
}
|
|
15
11
|
}
|
|
16
12
|
export function fenceLive(runtime, locators) {
|
|
17
|
-
const { store, socket,
|
|
13
|
+
const { store, socket, presence } = runtime;
|
|
18
14
|
for (const locator of new Set(locators)) {
|
|
19
|
-
if (!
|
|
15
|
+
if (!presence.lose(locator, socket.session.now().discoveries))
|
|
20
16
|
continue;
|
|
21
|
-
forget(
|
|
22
|
-
journal.record(`room lost ${locator}`);
|
|
17
|
+
store.forget(locator);
|
|
23
18
|
}
|
|
24
19
|
}
|
|
25
20
|
export async function loseRooms(runtime, locators) {
|
|
26
|
-
const { store } = runtime;
|
|
21
|
+
const { store, presence } = runtime;
|
|
27
22
|
fenceLive(runtime, locators);
|
|
28
|
-
const fresh = [...new Set(locators)].filter((locator) =>
|
|
29
|
-
const fence = store.fences.of(locator);
|
|
30
|
-
if (fence === undefined || fence.written)
|
|
31
|
-
return false;
|
|
32
|
-
store.fences.mark(locator, true);
|
|
33
|
-
return true;
|
|
34
|
-
});
|
|
23
|
+
const fresh = [...new Set(locators)].filter((locator) => presence.writing(locator));
|
|
35
24
|
if (fresh.length === 0)
|
|
36
25
|
return;
|
|
37
26
|
let held = [];
|
|
@@ -43,7 +32,7 @@ export async function loseRooms(runtime, locators) {
|
|
|
43
32
|
}
|
|
44
33
|
catch (error) {
|
|
45
34
|
for (const locator of fresh)
|
|
46
|
-
|
|
35
|
+
presence.unwritten(locator);
|
|
47
36
|
throw error;
|
|
48
37
|
}
|
|
49
38
|
finally {
|
|
@@ -53,9 +42,8 @@ export async function loseRooms(runtime, locators) {
|
|
|
53
42
|
queue: true,
|
|
54
43
|
drafts: held.filter((draft) => draft.locator === locator).map(({ path }) => path),
|
|
55
44
|
}))));
|
|
56
|
-
recoverReads(runtime);
|
|
57
|
-
statusShown(runtime);
|
|
45
|
+
recoverReads(runtime, fresh);
|
|
58
46
|
}
|
|
59
|
-
await
|
|
47
|
+
await unpair(runtime);
|
|
60
48
|
await eraseFenced(runtime, fresh);
|
|
61
49
|
}
|
package/dist/media.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { MdRuntimeClient } from './client.js';
|
|
2
2
|
import { type ShownAnswer } from './outcome.js';
|
|
3
3
|
export declare const ROOM_MEDIA = "room-media";
|
|
4
|
+
export declare const DIAGRAM = "md-diagram";
|
|
5
|
+
export declare const VIEWING = "ahc-viewer";
|
|
4
6
|
type Show = (room: string, path: string, revision?: string) => Promise<ShownAnswer>;
|
|
5
7
|
export declare function shownBy(show: Show, client: MdRuntimeClient): MdRuntimeClient;
|
|
8
|
+
export declare function rendered(element: Element): boolean;
|
|
9
|
+
export declare function viewable(element: Element): boolean;
|
|
10
|
+
export declare function viewFile(client: MdRuntimeClient, media: Element): void;
|
|
6
11
|
export declare function defineRoomMedia(client: Promise<MdRuntimeClient> | MdRuntimeClient): void;
|
|
7
12
|
export {};
|
|
8
13
|
//# sourceMappingURL=media.d.ts.map
|
package/dist/media.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEnE,eAAO,MAAM,UAAU,eAAe,CAAC;AAMvC,eAAO,MAAM,OAAO,eAAe,CAAC;AAEpC,eAAO,MAAM,OAAO,eAAe,CAAC;AA8BpC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAIpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAG5E;AAsBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAElD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAMlD;AA4BD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAEtE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,IAAI,CAkMxF"}
|
package/dist/media.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isAudioType, isImageType, isVideoType } from '@agentshouse/mdmodel';
|
|
2
|
+
import { loaded } from './loaded.js';
|
|
3
|
+
import { blobOf, UNCERTAIN } from './outcome.js';
|
|
2
4
|
export const ROOM_MEDIA = 'room-media';
|
|
5
|
+
const VIEWER = 'viewer';
|
|
6
|
+
const RENDERED = '.ahc, .ahc-markdown';
|
|
7
|
+
export const DIAGRAM = 'md-diagram';
|
|
8
|
+
export const VIEWING = 'ahc-viewer';
|
|
9
|
+
const PRESSED_ELSEWHERE = 'a[href], button, input, select, textarea, summary, label, [role="button"], [role="link"]';
|
|
3
10
|
const ATTRIBUTES = ['room', 'path', 'revision', 'width', 'height', 'alt'];
|
|
4
11
|
const LOADING = new Set(['room', 'path', 'revision']);
|
|
5
12
|
const NEARING = '600px 0px';
|
|
@@ -10,7 +17,10 @@ const SHAPE = '16 / 9';
|
|
|
10
17
|
const STYLE = `:host{display:block}
|
|
11
18
|
[part=box]{position:relative;overflow:hidden}
|
|
12
19
|
[part=box]>img,[part=box]>video,[part=box]>audio{display:block;width:100%;height:100%;object-fit:contain}
|
|
13
|
-
[part=box]>
|
|
20
|
+
[part=box]>video:not([controls]){cursor:pointer}
|
|
21
|
+
[part=box]>slot{display:flex;align-items:center;justify-content:center;width:100%;height:100%;text-align:center}
|
|
22
|
+
[part=play]{position:absolute;top:50%;left:50%;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:rgb(0 0 0/.6);pointer-events:none}
|
|
23
|
+
[part=play]::before{content:"";position:absolute;top:18px;left:22px;border-style:solid;border-width:10px 0 10px 16px;border-color:transparent transparent transparent #fff}`;
|
|
14
24
|
const shows = new WeakMap();
|
|
15
25
|
export function shownBy(show, client) {
|
|
16
26
|
shows.set(client, show);
|
|
@@ -29,23 +39,62 @@ function refusedForGood(shown) {
|
|
|
29
39
|
return (shown.kind === 'rejected' || shown.kind === 'scoped-refusal') && !shown.retryable;
|
|
30
40
|
}
|
|
31
41
|
function drawnFor(mediaType) {
|
|
32
|
-
if (mediaType
|
|
42
|
+
if (isImageType(mediaType))
|
|
33
43
|
return 'img';
|
|
34
|
-
if (mediaType
|
|
44
|
+
if (isVideoType(mediaType))
|
|
35
45
|
return 'video';
|
|
36
|
-
if (mediaType
|
|
46
|
+
if (isAudioType(mediaType))
|
|
37
47
|
return 'audio';
|
|
38
48
|
return null;
|
|
39
49
|
}
|
|
50
|
+
export function rendered(element) {
|
|
51
|
+
return element.closest(RENDERED) !== null;
|
|
52
|
+
}
|
|
53
|
+
export function viewable(element) {
|
|
54
|
+
if (element.localName === 'figure')
|
|
55
|
+
return element.classList.contains(DIAGRAM);
|
|
56
|
+
if (element.localName !== ROOM_MEDIA || element.closest(`.${VIEWING}`) !== null)
|
|
57
|
+
return false;
|
|
58
|
+
return (rendered(element) || (element.shadowRoot?.querySelector('[part=box] > video') ?? null) !== null);
|
|
59
|
+
}
|
|
60
|
+
function viewed(client, opener, alone) {
|
|
61
|
+
void loaded(client.buildFile, VIEWER).then((file) => file?.openViewer({
|
|
62
|
+
opener,
|
|
63
|
+
alone,
|
|
64
|
+
download: (room, path, revision) => void client.binaryFile.download(room, path, revision),
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
function pressed(client) {
|
|
68
|
+
return (event) => {
|
|
69
|
+
if (event.defaultPrevented || event.detail > 1)
|
|
70
|
+
return;
|
|
71
|
+
for (const node of event.composedPath()) {
|
|
72
|
+
if (!(node instanceof Element))
|
|
73
|
+
continue;
|
|
74
|
+
if (viewable(node)) {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
void client.then((one) => viewed(one, node, !rendered(node)));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (node.matches(PRESSED_ELSEWHERE))
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function viewFile(client, media) {
|
|
85
|
+
viewed(client, media, true);
|
|
86
|
+
}
|
|
40
87
|
export function defineRoomMedia(client) {
|
|
41
88
|
if (customElements.get(ROOM_MEDIA) !== undefined)
|
|
42
89
|
return;
|
|
43
90
|
const connected = Promise.resolve(client);
|
|
91
|
+
document.addEventListener('click', pressed(connected));
|
|
44
92
|
class RoomMedia extends HTMLElement {
|
|
45
93
|
static observedAttributes = ATTRIBUTES;
|
|
46
94
|
#root = this.attachShadow({ mode: 'open' });
|
|
47
95
|
#box = document.createElement('div');
|
|
48
96
|
#fallback = document.createElement('slot');
|
|
97
|
+
#play = document.createElement('span');
|
|
49
98
|
#watching = null;
|
|
50
99
|
#near = false;
|
|
51
100
|
#asked = 0;
|
|
@@ -56,6 +105,7 @@ export function defineRoomMedia(client) {
|
|
|
56
105
|
constructor() {
|
|
57
106
|
super();
|
|
58
107
|
this.#box.setAttribute('part', 'box');
|
|
108
|
+
this.#play.setAttribute('part', 'play');
|
|
59
109
|
this.#root.append(Object.assign(document.createElement('style'), { textContent: STYLE }), this.#box);
|
|
60
110
|
this.#shape();
|
|
61
111
|
}
|
|
@@ -129,11 +179,7 @@ export function defineRoomMedia(client) {
|
|
|
129
179
|
this.#unshown(asked);
|
|
130
180
|
return;
|
|
131
181
|
}
|
|
132
|
-
const copy = await
|
|
133
|
-
headers: { 'content-type': shown.mediaType },
|
|
134
|
-
})
|
|
135
|
-
.blob()
|
|
136
|
-
.catch(() => null);
|
|
182
|
+
const copy = await blobOf(shown).catch(() => null);
|
|
137
183
|
if (asked !== this.#asked)
|
|
138
184
|
return;
|
|
139
185
|
if (copy === null)
|
|
@@ -157,7 +203,9 @@ export function defineRoomMedia(client) {
|
|
|
157
203
|
if (content === null)
|
|
158
204
|
this.#box.replaceChildren();
|
|
159
205
|
else if (content.parentNode !== this.#box)
|
|
160
|
-
this.#box.replaceChildren(content
|
|
206
|
+
this.#box.replaceChildren(...(content instanceof HTMLVideoElement && !content.controls
|
|
207
|
+
? [content, this.#play]
|
|
208
|
+
: [content]));
|
|
161
209
|
this.#label();
|
|
162
210
|
}
|
|
163
211
|
#unreadable() {
|
|
@@ -174,13 +222,16 @@ export function defineRoomMedia(client) {
|
|
|
174
222
|
const kept = this.#drawn?.localName === tag ? this.#drawn : null;
|
|
175
223
|
const drawn = kept ?? document.createElement(tag);
|
|
176
224
|
if (kept === null) {
|
|
225
|
+
const plays = !(drawn instanceof HTMLVideoElement) || this.closest(`.${VIEWING}`) !== null;
|
|
177
226
|
if (drawn instanceof HTMLImageElement)
|
|
178
227
|
drawn.decoding = 'async';
|
|
179
228
|
if (drawn instanceof HTMLMediaElement) {
|
|
180
|
-
drawn.controls = true;
|
|
181
229
|
drawn.preload = 'metadata';
|
|
182
|
-
|
|
183
|
-
|
|
230
|
+
drawn.controls = plays;
|
|
231
|
+
}
|
|
232
|
+
if (drawn instanceof HTMLVideoElement && plays) {
|
|
233
|
+
drawn.autoplay = true;
|
|
234
|
+
drawn.setAttribute('playsinline', '');
|
|
184
235
|
}
|
|
185
236
|
drawn.addEventListener(drawn instanceof HTMLImageElement ? 'load' : 'loadedmetadata', () => {
|
|
186
237
|
if (drawn !== this.#drawn)
|
package/dist/memory.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { type VerifiedModel } from '@agentshouse/mdmodel';
|
|
1
2
|
import type { ModelResult } from './model.js';
|
|
2
|
-
import { type AcceptedMessage, type ActionResult, type Adapter, type BinaryFile, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type SavedFacts, type HeadChange, type ListedAgent, type ListedConversation, type Member, type ProviderLimit, type Retention, type ServiceMode, type TypedPath } from './adapter.js';
|
|
3
|
-
export type MemoryRoom = DiscoveredRoom & {
|
|
3
|
+
import { type AcceptedMessage, type ActionResult, type Adapter, type BinaryFile, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type SavedFacts, type HeadChange, type ListedAgent, type ListedConversation, type Member, type ProviderLimit, type Retention, type ServiceMode, type TypedPath, type TypedSelection } from './adapter.js';
|
|
4
|
+
export type MemoryRoom = Omit<DiscoveredRoom, 'typedSelection' | 'authoredPaths'> & {
|
|
5
|
+
typedSelection?: TypedSelection | null;
|
|
6
|
+
authoredPaths?: readonly string[];
|
|
4
7
|
model?: ModelResult;
|
|
5
8
|
documents?: Readonly<Record<string, string>>;
|
|
6
9
|
facts?: Readonly<Record<string, SavedFacts>>;
|
|
@@ -29,7 +32,7 @@ export type MemoryAdapterOptions = {
|
|
|
29
32
|
retention?: Retention;
|
|
30
33
|
member?: Member;
|
|
31
34
|
unopened?: boolean;
|
|
32
|
-
roomTypes?:
|
|
35
|
+
roomTypes?: VerifiedModel;
|
|
33
36
|
typedPaths?: readonly TypedPath[];
|
|
34
37
|
};
|
|
35
38
|
export type MemoryAdapter = Adapter & {
|
|
@@ -37,6 +40,7 @@ export type MemoryAdapter = Adapter & {
|
|
|
37
40
|
refresh: NonNullable<Adapter['refresh']>;
|
|
38
41
|
setRooms(rooms: readonly MemoryRoom[]): void;
|
|
39
42
|
setConversations(conversations: readonly MemoryConversation[]): void;
|
|
43
|
+
setAgents(agents: readonly ListedAgent[]): void;
|
|
40
44
|
script(operation: keyof Adapter, answer: unknown): void;
|
|
41
45
|
open(): void;
|
|
42
46
|
close(closing?: {
|
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { documentFacts, parse } from '@agentshouse/mdmodel';
|
|
1
|
+
import { definitionAt, documentFacts, parse } from '@agentshouse/mdmodel';
|
|
2
2
|
import { NO_ROOM_TYPES, schemaTypes } from './attached-model.js';
|
|
3
|
+
import { selected } from './collection.js';
|
|
4
|
+
import { declaredType } from './outcome.js';
|
|
3
5
|
import { sameChange } from './overlay.js';
|
|
4
6
|
const ATTACHMENTS = 'attachments';
|
|
5
7
|
function lastName(path) {
|
|
@@ -53,7 +55,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
53
55
|
const listeners = new Set();
|
|
54
56
|
const modeObservers = new Set();
|
|
55
57
|
const scripted = new Map();
|
|
56
|
-
const
|
|
58
|
+
const repeats = new Map();
|
|
57
59
|
const historyPageSize = options.historyPageSize;
|
|
58
60
|
const attached = new Map();
|
|
59
61
|
const linked = new WeakMap();
|
|
@@ -63,6 +65,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
63
65
|
const declaredRooms = new Set();
|
|
64
66
|
let replicated = [];
|
|
65
67
|
let heldCursor = null;
|
|
68
|
+
let agents = structuredClone(options.agents ?? []);
|
|
66
69
|
let issued = 0;
|
|
67
70
|
function scriptConversations(entries) {
|
|
68
71
|
scripted.clear();
|
|
@@ -104,8 +107,11 @@ export function createMemoryAdapter(options = {}) {
|
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
109
|
const saved = new WeakMap();
|
|
110
|
+
const roomTypes = options.roomTypes ?? NO_ROOM_TYPES;
|
|
107
111
|
function factsAt(room, path, content) {
|
|
108
|
-
const types =
|
|
112
|
+
const types = selected({ selection: room.typedSelection ?? null }, path)
|
|
113
|
+
? roomTypes.types
|
|
114
|
+
: schemaTypes(room.model?.kind === 'model' ? room.model.snapshot.schema : null, roomTypes);
|
|
109
115
|
let held = saved.get(types);
|
|
110
116
|
if (held === undefined) {
|
|
111
117
|
held = new Map();
|
|
@@ -113,7 +119,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
113
119
|
}
|
|
114
120
|
const key = `${path}\u0000${content}`;
|
|
115
121
|
if (!held.has(key)) {
|
|
116
|
-
const facts = documentFacts(path, parse(content, path
|
|
122
|
+
const facts = documentFacts(path, parse(content, path, definitionAt({ types }, path, options.typedPaths)), {
|
|
123
|
+
types,
|
|
124
|
+
});
|
|
117
125
|
held.set(key, facts === null ? null : JSON.parse(JSON.stringify(facts)));
|
|
118
126
|
}
|
|
119
127
|
return held.get(key);
|
|
@@ -147,9 +155,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
147
155
|
roomVersion: room.roomVersion,
|
|
148
156
|
operations: room.operations,
|
|
149
157
|
replica: room.replica,
|
|
150
|
-
|
|
158
|
+
typedSelection: room.typedSelection ?? null,
|
|
151
159
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
152
|
-
authoredPaths: room.authoredPaths,
|
|
160
|
+
authoredPaths: room.authoredPaths ?? ['**'],
|
|
153
161
|
};
|
|
154
162
|
}
|
|
155
163
|
function page(room, after) {
|
|
@@ -259,16 +267,14 @@ export function createMemoryAdapter(options = {}) {
|
|
|
259
267
|
}
|
|
260
268
|
function pageOf(conversation, after) {
|
|
261
269
|
const messages = conversation.messages ?? [];
|
|
262
|
-
const first = typeof after === 'string' ? messages.findIndex((message) => message.
|
|
270
|
+
const first = typeof after === 'string' ? messages.findIndex((message) => message.change > after) : 0;
|
|
263
271
|
const from = first === -1 ? messages.length : first;
|
|
264
272
|
const page = messages.slice(from, from + (historyPageSize ?? messages.length));
|
|
265
273
|
const last = page.at(-1);
|
|
266
274
|
return {
|
|
267
275
|
conversation: conversation.conversation,
|
|
268
276
|
messages: page,
|
|
269
|
-
...(last !== undefined && from + page.length < messages.length
|
|
270
|
-
? { next: last.position }
|
|
271
|
-
: {}),
|
|
277
|
+
...(last !== undefined && from + page.length < messages.length ? { next: last.change } : {}),
|
|
272
278
|
};
|
|
273
279
|
}
|
|
274
280
|
function historiesOf(request) {
|
|
@@ -288,11 +294,20 @@ export function createMemoryAdapter(options = {}) {
|
|
|
288
294
|
function conversationAction(request) {
|
|
289
295
|
const name = request.name;
|
|
290
296
|
const input = (request.input ?? {});
|
|
297
|
+
const operation = typeof input.operation_id === 'string' ? `${name}\u0000${input.operation_id}` : null;
|
|
298
|
+
const first = (answer) => {
|
|
299
|
+
if (operation !== null)
|
|
300
|
+
repeats.set(operation, answer);
|
|
301
|
+
return answer;
|
|
302
|
+
};
|
|
303
|
+
const repeated = operation === null ? undefined : repeats.get(operation);
|
|
291
304
|
if (name === 'conversations/create') {
|
|
305
|
+
if (repeated !== undefined)
|
|
306
|
+
return repeated;
|
|
292
307
|
issued += 1;
|
|
293
308
|
const conversation = `conversation-${issued}`;
|
|
294
309
|
scripted.set(conversation, { conversation });
|
|
295
|
-
return { kind: 'action', result: { conversation_id: conversation } };
|
|
310
|
+
return first({ kind: 'action', result: { conversation_id: conversation } });
|
|
296
311
|
}
|
|
297
312
|
const named = typeof input.conversation_id === 'string' ? input.conversation_id : '';
|
|
298
313
|
const conversation = scripted.get(named);
|
|
@@ -308,26 +323,39 @@ export function createMemoryAdapter(options = {}) {
|
|
|
308
323
|
if (outcome !== undefined)
|
|
309
324
|
return outcome;
|
|
310
325
|
if (name === 'conversations/send') {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
if (answered !== undefined)
|
|
314
|
-
return { kind: 'action', result: { message_id: answered } };
|
|
326
|
+
if (repeated !== undefined)
|
|
327
|
+
return repeated;
|
|
315
328
|
issued += 1;
|
|
316
|
-
|
|
317
|
-
if (operation !== null)
|
|
318
|
-
sentTurns.set(operation, turn);
|
|
319
|
-
return { kind: 'action', result: { message_id: turn } };
|
|
329
|
+
return first({ kind: 'action', result: { message_id: `turn-${issued}` } });
|
|
320
330
|
}
|
|
321
331
|
if (name === 'conversations/delete')
|
|
322
332
|
scripted.delete(named);
|
|
323
333
|
return { kind: 'action', result: { conversation_id: named } };
|
|
324
334
|
}
|
|
335
|
+
function decided(request) {
|
|
336
|
+
const { request: asked, message, decision, } = (request.input ?? {});
|
|
337
|
+
return {
|
|
338
|
+
kind: 'action',
|
|
339
|
+
result: {
|
|
340
|
+
request: asked,
|
|
341
|
+
...(message === undefined ? {} : { message }),
|
|
342
|
+
state: decision === 'approve' ? 'started' : 'declined',
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
}
|
|
325
346
|
function announceList() {
|
|
326
347
|
const entries = [...scripted.values()].flatMap(({ conversation, listed, messages = [] }) => listed === undefined
|
|
327
348
|
? []
|
|
328
|
-
: [{ conversation, ...listed, newest: messages.at(-1)?.
|
|
349
|
+
: [{ conversation, ...listed, newest: messages.at(-1)?.change ?? null }]);
|
|
329
350
|
for (const listener of listeners) {
|
|
330
|
-
listener({
|
|
351
|
+
listener({
|
|
352
|
+
kind: 'list',
|
|
353
|
+
agents: structuredClone(agents),
|
|
354
|
+
entries,
|
|
355
|
+
whole: true,
|
|
356
|
+
more: false,
|
|
357
|
+
cursor: null,
|
|
358
|
+
});
|
|
331
359
|
}
|
|
332
360
|
}
|
|
333
361
|
function discovery() {
|
|
@@ -383,6 +411,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
383
411
|
setConversations(next) {
|
|
384
412
|
scriptConversations(next);
|
|
385
413
|
},
|
|
414
|
+
setAgents(next) {
|
|
415
|
+
agents = structuredClone(next);
|
|
416
|
+
},
|
|
386
417
|
open() {
|
|
387
418
|
carried.clear();
|
|
388
419
|
announceList();
|
|
@@ -445,9 +476,6 @@ export function createMemoryAdapter(options = {}) {
|
|
|
445
476
|
};
|
|
446
477
|
},
|
|
447
478
|
history: (request) => Promise.resolve(historiesOf(request)),
|
|
448
|
-
...(options.agents === undefined
|
|
449
|
-
? {}
|
|
450
|
-
: { agents: () => Promise.resolve(structuredClone(options.agents)) }),
|
|
451
479
|
},
|
|
452
480
|
serviceMode: {
|
|
453
481
|
observe(notify) {
|
|
@@ -600,7 +628,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
600
628
|
const blob = heldBlob(room, request.path);
|
|
601
629
|
return blob === undefined
|
|
602
630
|
? { kind: 'rejected', code: 'not_found', fields: {}, retryable: false }
|
|
603
|
-
: { kind: 'binary', body: blob.stream(), mediaType: blob
|
|
631
|
+
: { kind: 'binary', body: blob.stream(), mediaType: declaredType(blob) };
|
|
604
632
|
}, request);
|
|
605
633
|
},
|
|
606
634
|
async link(_authorization, request) {
|
|
@@ -614,7 +642,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
614
642
|
}
|
|
615
643
|
const url = linked.get(blob) ?? URL.createObjectURL(blob);
|
|
616
644
|
linked.set(blob, url);
|
|
617
|
-
return { kind: 'link', url, name: lastName(request.path), mediaType: blob
|
|
645
|
+
return { kind: 'link', url, name: lastName(request.path), mediaType: declaredType(blob) };
|
|
618
646
|
}, request);
|
|
619
647
|
},
|
|
620
648
|
async attach(_authorization, request) {
|
|
@@ -631,6 +659,8 @@ export function createMemoryAdapter(options = {}) {
|
|
|
631
659
|
return resolveScript(scripts.action, () => {
|
|
632
660
|
if (request.name.startsWith('conversations/'))
|
|
633
661
|
return conversationAction(request);
|
|
662
|
+
if (request.name === 'agent-functions/decide')
|
|
663
|
+
return decided(request);
|
|
634
664
|
return { kind: 'rejected', code: 'unscripted-action', fields: {}, retryable: false };
|
|
635
665
|
}, request).then((answer) => {
|
|
636
666
|
if (answer.kind === 'action' && answer.at !== undefined)
|
package/dist/messages.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { AcceptedMessage } from './adapter.js';
|
|
2
|
-
import type { JobMarker } from './job.js';
|
|
3
2
|
import type { Connection } from './tables.js';
|
|
4
3
|
export declare const MESSAGE_TABLES: readonly string[];
|
|
5
|
-
export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n asking.text AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
|
|
6
|
-
export declare const JOB_MARKERS = "SELECT json_extract(part.value, '$.text') AS said,\n json_extract(message, '$.accepted_at') AS at\n FROM conversation_messages, json_each(message, '$.parts') AS part\n WHERE conversation = ? AND instr(message, '\"marker\":\"job\"') > 0\n AND json_extract(part.value, '$.type') = 'marker'\n AND json_extract(part.value, '$.marker') = 'job'\n ORDER BY position, identity, part.key";
|
|
4
|
+
export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n answer.turn AS answered,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n (SELECT value FROM conversation_facts WHERE conversation = chosen.conversation AND name = 'openedTurn') AS opened_turn,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n asking.text AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
|
|
7
5
|
export type HeldConversation = {
|
|
8
6
|
readonly conversation: string;
|
|
9
7
|
readonly read: string | null | undefined;
|
|
@@ -24,6 +22,8 @@ export type HeldRow = {
|
|
|
24
22
|
readonly role: string | null;
|
|
25
23
|
readonly at: string | null;
|
|
26
24
|
} | null;
|
|
25
|
+
readonly answered: string | null;
|
|
26
|
+
readonly openedTurn: string | null;
|
|
27
27
|
readonly failure: string | null;
|
|
28
28
|
readonly opened: HeldSource | null;
|
|
29
29
|
readonly asking: (HeldSource & {
|
|
@@ -32,6 +32,12 @@ export type HeldRow = {
|
|
|
32
32
|
readonly at: string | null;
|
|
33
33
|
}) | null;
|
|
34
34
|
};
|
|
35
|
+
export type ConversationFact = 'openedTurn' | 'dismissedSuggestion';
|
|
36
|
+
export type HeldFact = {
|
|
37
|
+
readonly conversation: string;
|
|
38
|
+
readonly name: ConversationFact;
|
|
39
|
+
readonly value: string;
|
|
40
|
+
};
|
|
35
41
|
export type ConversationWrite = {
|
|
36
42
|
readonly conversation: string;
|
|
37
43
|
readonly messages: readonly AcceptedMessage[];
|
|
@@ -45,8 +51,8 @@ export declare function keptMessages(connection: Connection, { conversation, mes
|
|
|
45
51
|
export declare function messageWindow(connection: Connection, conversation: string, limit: number, before: readonly [string, string] | null, phrase: string | null): MessageWindow;
|
|
46
52
|
export declare function messageCount(connection: Connection, conversation: string, phrase: string | null): number;
|
|
47
53
|
export declare function conversationRows(connection: Connection, conversations: readonly string[]): HeldRow[];
|
|
48
|
-
export declare function jobMarkers(connection: Connection, conversation: string): JobMarker[];
|
|
49
54
|
export declare function turnArrived(connection: Connection, conversation: string, turn: string): boolean;
|
|
50
|
-
export declare function
|
|
51
|
-
export declare function
|
|
55
|
+
export declare function conversationFacts(connection: Connection): HeldFact[];
|
|
56
|
+
export declare function keptFact(connection: Connection, { conversation, name, value }: HeldFact): null;
|
|
57
|
+
export declare function forgottenConversations(connection: Connection): void;
|
|
52
58
|
//# sourceMappingURL=messages.d.ts.map
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|