@agentshouse/mdruntime 0.1.0-c0ffc146f48dd → 0.1.0-c112fd663ab59
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 +10 -10
- 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 +45 -25
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +21 -56
- package/dist/bootstrap.d.ts +8 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +210 -78
- 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.d.ts +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +4 -2
- 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 +22 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -2
- package/dist/collection.d.ts +2 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/compile.d.ts +6 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +240 -315
- package/dist/connection.d.ts +5 -142
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +103 -5071
- 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 +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 +34 -38
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +861 -850
- 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 +15 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -7
- package/dist/expectation.d.ts +4 -2
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +33 -11
- package/dist/failure.d.ts +1 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +3 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- 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 -5
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +23 -22
- 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 +25 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +556 -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 +270 -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 +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +63 -21
- package/dist/locks.d.ts +9 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +62 -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 +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +3 -3
- package/dist/memory.d.ts +5 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +50 -10
- package/dist/messages.d.ts +27 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +103 -31
- package/dist/model.d.ts +2 -9
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -9
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +197 -0
- package/dist/observation.d.ts +2 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +14 -14
- package/dist/opened.js +3 -3
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +60 -0
- package/dist/outcome.d.ts +4 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/parts.d.ts +60 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +126 -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 +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +233 -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 +13 -209
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/questions.d.ts +34 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +122 -0
- package/dist/reach.d.ts +14 -12
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +167 -114
- package/dist/react.d.ts +13 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +10 -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 +0 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/reads.d.ts +37 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +174 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +9 -1
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +7 -0
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +57 -0
- package/dist/replica.d.ts +9 -8
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +53 -17
- package/dist/room-draft.d.ts +3 -4
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +7 -7
- 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 +14 -21
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +48 -184
- 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 +5 -1
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +34 -21
- 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 -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 +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +290 -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 +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- 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 +107 -145
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +143 -366
- package/dist/stored.d.ts +59 -33
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +278 -189
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +224 -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 +120 -29
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +216 -54
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +7 -4
- 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 +16 -1
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +6 -0
- package/package.json +2 -2
- 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/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/windows.d.ts
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
export declare const MAXIMUM_WINDOW = 1000;
|
|
2
|
-
export declare const FROM_START
|
|
2
|
+
export declare const FROM_START: string;
|
|
3
3
|
export declare function capped(limit: number | null | undefined): number;
|
|
4
|
-
export type Ordering = {
|
|
5
|
-
readonly direction: 'asc' | 'desc';
|
|
6
|
-
readonly nulls: 'first' | 'last';
|
|
7
|
-
readonly stringSort: 'lexical' | 'locale';
|
|
8
|
-
readonly locale: string | undefined;
|
|
9
|
-
readonly localeOptions: Intl.CollatorOptions | undefined;
|
|
10
|
-
};
|
|
11
4
|
interface Placed {
|
|
12
5
|
readonly position: string;
|
|
13
6
|
readonly identity: string;
|
|
14
7
|
}
|
|
15
8
|
export declare function messageOrder(left: Placed, right: Placed): number;
|
|
16
9
|
export declare function precedes(message: Placed, before: readonly [string, string] | null): boolean;
|
|
17
|
-
export declare function byCodePoint(left: string, right: string): number;
|
|
18
|
-
export declare function compared(left: unknown, right: unknown, ordering: Ordering): number;
|
|
19
|
-
export declare function cursorOf(values: readonly unknown[]): string;
|
|
20
|
-
export declare function decodedCursor(text: string): readonly unknown[] | null;
|
|
21
10
|
export {};
|
|
22
11
|
//# sourceMappingURL=windows.d.ts.map
|
package/dist/windows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,UAAU,QAAe,CAAC;AAEvC,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,UAAU,MAAM;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,CAE3F"}
|
package/dist/windows.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { cursorOf } from '@agentshouse/mdmodel';
|
|
1
2
|
export const MAXIMUM_WINDOW = 1000;
|
|
2
|
-
export const FROM_START =
|
|
3
|
+
export const FROM_START = cursorOf([]);
|
|
3
4
|
export function capped(limit) {
|
|
4
5
|
return limit == null ? MAXIMUM_WINDOW : Math.min(limit, MAXIMUM_WINDOW);
|
|
5
6
|
}
|
|
@@ -13,77 +14,3 @@ export function messageOrder(left, right) {
|
|
|
13
14
|
export function precedes(message, before) {
|
|
14
15
|
return before === null || messageOrder(message, { position: before[0], identity: before[1] }) < 0;
|
|
15
16
|
}
|
|
16
|
-
function rank(value) {
|
|
17
|
-
if (typeof value === 'boolean' || typeof value === 'number')
|
|
18
|
-
return 1;
|
|
19
|
-
if (typeof value === 'string')
|
|
20
|
-
return 2;
|
|
21
|
-
return Array.isArray(value) ? 3 : 4;
|
|
22
|
-
}
|
|
23
|
-
function unit(code) {
|
|
24
|
-
if (code >= 0xd800 && code < 0xe000)
|
|
25
|
-
return code + 0x2000;
|
|
26
|
-
return code >= 0xe000 ? code - 0x800 : code;
|
|
27
|
-
}
|
|
28
|
-
export function byCodePoint(left, right) {
|
|
29
|
-
for (let at = 0; at < Math.min(left.length, right.length); at += 1) {
|
|
30
|
-
const ours = left.charCodeAt(at);
|
|
31
|
-
const theirs = right.charCodeAt(at);
|
|
32
|
-
if (ours !== theirs)
|
|
33
|
-
return unit(ours) - unit(theirs);
|
|
34
|
-
}
|
|
35
|
-
return left.length - right.length;
|
|
36
|
-
}
|
|
37
|
-
function ascending(left, right, ordering) {
|
|
38
|
-
if (left == null && right == null)
|
|
39
|
-
return 0;
|
|
40
|
-
if (left == null)
|
|
41
|
-
return ordering.nulls === 'first' ? -1 : 1;
|
|
42
|
-
if (right == null)
|
|
43
|
-
return ordering.nulls === 'first' ? 1 : -1;
|
|
44
|
-
const ranked = rank(left) - rank(right);
|
|
45
|
-
if (ranked !== 0)
|
|
46
|
-
return ranked;
|
|
47
|
-
if (typeof left === 'string' && typeof right === 'string') {
|
|
48
|
-
return ordering.stringSort === 'locale'
|
|
49
|
-
? left.localeCompare(right, ordering.locale, ordering.localeOptions)
|
|
50
|
-
: byCodePoint(left, right);
|
|
51
|
-
}
|
|
52
|
-
if (Array.isArray(left) && Array.isArray(right)) {
|
|
53
|
-
for (let at = 0; at < Math.min(left.length, right.length); at += 1) {
|
|
54
|
-
const result = ascending(left[at], right[at], ordering);
|
|
55
|
-
if (result !== 0)
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
return left.length - right.length;
|
|
59
|
-
}
|
|
60
|
-
if (typeof left === 'object')
|
|
61
|
-
return 0;
|
|
62
|
-
const held = left;
|
|
63
|
-
const other = right;
|
|
64
|
-
if (held < other)
|
|
65
|
-
return -1;
|
|
66
|
-
if (held > other)
|
|
67
|
-
return 1;
|
|
68
|
-
return 0;
|
|
69
|
-
}
|
|
70
|
-
export function compared(left, right, ordering) {
|
|
71
|
-
if (ordering.direction === 'asc')
|
|
72
|
-
return ascending(left, right, ordering);
|
|
73
|
-
return ascending(right, left, {
|
|
74
|
-
...ordering,
|
|
75
|
-
nulls: ordering.nulls === 'first' ? 'last' : 'first',
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
export function cursorOf(values) {
|
|
79
|
-
return JSON.stringify(values);
|
|
80
|
-
}
|
|
81
|
-
export function decodedCursor(text) {
|
|
82
|
-
try {
|
|
83
|
-
const decoded = JSON.parse(text);
|
|
84
|
-
return Array.isArray(decoded) ? decoded : null;
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
}
|
package/dist/wire.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConnectionRefusal } from './
|
|
1
|
+
import type { ConnectionRefusal } from './socket.js';
|
|
2
2
|
import type { Described } from './failure.js';
|
|
3
3
|
export type RuntimePort = {
|
|
4
4
|
postMessage(message: unknown): void;
|
|
@@ -82,6 +82,18 @@ declare const MEMBERS: {
|
|
|
82
82
|
readonly reach: 'whole';
|
|
83
83
|
readonly effect: 'write';
|
|
84
84
|
};
|
|
85
|
+
readonly unsent: {
|
|
86
|
+
readonly reach: 'whole';
|
|
87
|
+
readonly effect: 'read';
|
|
88
|
+
};
|
|
89
|
+
readonly reset: {
|
|
90
|
+
readonly reach: 'whole';
|
|
91
|
+
readonly effect: 'write';
|
|
92
|
+
};
|
|
93
|
+
readonly readAgain: {
|
|
94
|
+
readonly reach: 'whole';
|
|
95
|
+
readonly effect: 'read';
|
|
96
|
+
};
|
|
85
97
|
readonly persistence: {
|
|
86
98
|
readonly reach: 'runtime';
|
|
87
99
|
readonly effect: 'read';
|
|
@@ -184,6 +196,9 @@ declare const TOPICS: {
|
|
|
184
196
|
readonly conversation: 'within';
|
|
185
197
|
readonly conversations: 'within';
|
|
186
198
|
readonly agents: 'within';
|
|
199
|
+
readonly figures: 'whole';
|
|
200
|
+
readonly holdings: 'whole';
|
|
201
|
+
readonly read: 'whole';
|
|
187
202
|
};
|
|
188
203
|
export declare const WIRE: {
|
|
189
204
|
readonly members: Readonly<Record<string, WireCall>>;
|
package/dist/wire.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/wire.js
CHANGED
|
@@ -17,6 +17,9 @@ const MEMBERS = {
|
|
|
17
17
|
reached: { reach: 'within', effect: 'read' },
|
|
18
18
|
log: { reach: 'whole', effect: 'read' },
|
|
19
19
|
cleanUp: { reach: 'whole', effect: 'write' },
|
|
20
|
+
unsent: { reach: 'whole', effect: 'read' },
|
|
21
|
+
reset: { reach: 'whole', effect: 'write' },
|
|
22
|
+
readAgain: { reach: 'whole', effect: 'read' },
|
|
20
23
|
persistence: { reach: 'runtime', effect: 'read' },
|
|
21
24
|
retry: { reach: 'runtime', effect: 'write' },
|
|
22
25
|
reauthorize: { reach: 'runtime', effect: 'write' },
|
|
@@ -56,6 +59,9 @@ const TOPICS = {
|
|
|
56
59
|
conversation: 'within',
|
|
57
60
|
conversations: 'within',
|
|
58
61
|
agents: 'within',
|
|
62
|
+
figures: 'whole',
|
|
63
|
+
holdings: 'whole',
|
|
64
|
+
read: 'whole',
|
|
59
65
|
};
|
|
60
66
|
export const WIRE = { members: MEMBERS, topics: TOPICS };
|
|
61
67
|
export function unanswered(call) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-c112fd663ab59",
|
|
4
4
|
"description": "The headless core of MD App",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"LICENSE"
|
|
55
55
|
],
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@agentshouse/mdmodel": "0.1.0-
|
|
57
|
+
"@agentshouse/mdmodel": "0.1.0-c3c0e116a89f8"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"react": ">=18"
|
package/dist/fence.d.ts
DELETED
package/dist/fence.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../src/fence.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;IAG9C,YAAY,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAG/C;IAEQ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAE5C;CACF"}
|
package/dist/fence.js
DELETED
package/dist/fulltext.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { type QueryRoom } from './compile.js';
|
|
2
|
-
import type { Plan } from './query.js';
|
|
3
|
-
import type { HitCursor, SearchWindow } from './search.js';
|
|
4
|
-
import type { Connection } from './tables.js';
|
|
5
|
-
export declare const SEARCH_TABLES: readonly string[];
|
|
6
|
-
export type SearchAsk = {
|
|
7
|
-
readonly text: string;
|
|
8
|
-
readonly limit: number;
|
|
9
|
-
readonly after: readonly [HitCursor, HitCursor] | null;
|
|
10
|
-
readonly total: boolean;
|
|
11
|
-
readonly documents: {
|
|
12
|
-
readonly plan: Plan;
|
|
13
|
-
readonly rooms: readonly QueryRoom[];
|
|
14
|
-
readonly beneath: readonly {
|
|
15
|
-
readonly key: number;
|
|
16
|
-
readonly roots: readonly string[];
|
|
17
|
-
}[];
|
|
18
|
-
} | null;
|
|
19
|
-
readonly conversations: readonly string[];
|
|
20
|
-
};
|
|
21
|
-
export declare function indexDocument(connection: Connection, id: number, path: string, content: string): void;
|
|
22
|
-
export declare function indexMessage(connection: Connection, id: number, text: string): void;
|
|
23
|
-
export declare function unindexDocuments(connection: Connection, ids: Iterable<number>): void;
|
|
24
|
-
export declare function unindexMessages(connection: Connection, ids: Iterable<number>): void;
|
|
25
|
-
export declare function unindexAll(connection: Connection): void;
|
|
26
|
-
export declare function searched(connection: Connection, ask: SearchAsk): SearchWindow;
|
|
27
|
-
//# sourceMappingURL=fulltext.d.ts.map
|
package/dist/fulltext.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fulltext.d.ts","sourceRoot":"","sources":["../src/fulltext.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAGV,SAAS,EAET,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,aAAa,CAAC;AAoBrD,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAG1C,CAAC;AAsCF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;QACrC,QAAQ,CAAC,OAAO,EAAE,SAAS;YAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,EAAE,CAAC;KAC1F,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,CAAC;AA2CF,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAgBN;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOnF;AAWD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAEpF;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAEnF;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAIvD;AAkTD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,YAAY,CAsB7E"}
|
package/dist/fulltext.js
DELETED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import { parse } from '@agentshouse/mdmodel';
|
|
2
|
-
import { selected } from './compile.js';
|
|
3
|
-
import { markdownPath } from './rows.js';
|
|
4
|
-
import { indexed, matchClauses, matched, matchExpression, queryTerms, snippet, } from './words.js';
|
|
5
|
-
const TOKENIZER = "porter unicode61 remove_diacritics 2 categories 'L* N* Co M* S*' separators '$+<=>^`|~'";
|
|
6
|
-
const CONTENTLESS = `content='', contentless_delete=1, detail=full, tokenize="${TOKENIZER}"`;
|
|
7
|
-
const DOCUMENTS = 'replica_search';
|
|
8
|
-
const MESSAGES = 'conversation_search';
|
|
9
|
-
export const SEARCH_TABLES = [
|
|
10
|
-
`CREATE VIRTUAL TABLE ${DOCUMENTS} USING fts5(path, fields, sections, preamble, ${CONTENTLESS})`,
|
|
11
|
-
`CREATE VIRTUAL TABLE ${MESSAGES} USING fts5(text, ${CONTENTLESS})`,
|
|
12
|
-
];
|
|
13
|
-
const CHUNKS = 4096;
|
|
14
|
-
const CHUNK_CHARACTERS = 32_768;
|
|
15
|
-
const CANDIDATES = 5_000;
|
|
16
|
-
const LEAST_WINDOW = 32;
|
|
17
|
-
const SNIPPET_REACH = 80;
|
|
18
|
-
function scalars(value) {
|
|
19
|
-
if (value === null || value === undefined)
|
|
20
|
-
return [];
|
|
21
|
-
if (Array.isArray(value))
|
|
22
|
-
return value.flatMap(scalars);
|
|
23
|
-
if (typeof value === 'object')
|
|
24
|
-
return Object.values(value).flatMap(scalars);
|
|
25
|
-
return [String(value)];
|
|
26
|
-
}
|
|
27
|
-
function partsOf(path, content) {
|
|
28
|
-
if (!markdownPath(path))
|
|
29
|
-
return null;
|
|
30
|
-
const read = parse(content, path);
|
|
31
|
-
if (!read.ok)
|
|
32
|
-
return null;
|
|
33
|
-
return {
|
|
34
|
-
fields: scalars(read.document.fields).join('\n'),
|
|
35
|
-
sections: Object.entries(read.document.sections)
|
|
36
|
-
.map(([heading, text]) => `${heading}\n${text}`)
|
|
37
|
-
.join('\n'),
|
|
38
|
-
preamble: read.document.preamble,
|
|
39
|
-
path,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function chunked(text) {
|
|
43
|
-
const chunks = [];
|
|
44
|
-
let start = 0;
|
|
45
|
-
do {
|
|
46
|
-
let end = Math.min(text.length, start + CHUNK_CHARACTERS);
|
|
47
|
-
if (end < text.length) {
|
|
48
|
-
const space = text.lastIndexOf(' ', end);
|
|
49
|
-
if (space > start + CHUNK_CHARACTERS / 2)
|
|
50
|
-
end = space;
|
|
51
|
-
else if (/[\ud800-\udbff]/u.test(text[end - 1]))
|
|
52
|
-
end -= 1;
|
|
53
|
-
}
|
|
54
|
-
chunks.push(text.slice(start, end));
|
|
55
|
-
start = end;
|
|
56
|
-
} while (start < text.length && chunks.length < CHUNKS);
|
|
57
|
-
return chunks;
|
|
58
|
-
}
|
|
59
|
-
function rowOf(id, chunk) {
|
|
60
|
-
return id * CHUNKS + chunk;
|
|
61
|
-
}
|
|
62
|
-
export function indexDocument(connection, id, path, content) {
|
|
63
|
-
const parts = partsOf(path, content);
|
|
64
|
-
if (parts === null)
|
|
65
|
-
return;
|
|
66
|
-
chunked(parts.sections).forEach((sections, chunk) => {
|
|
67
|
-
const head = chunk === 0;
|
|
68
|
-
connection.run(`INSERT INTO ${DOCUMENTS} (rowid, path, fields, sections, preamble) VALUES (?, ?, ?, ?, ?)`, [
|
|
69
|
-
rowOf(id, chunk),
|
|
70
|
-
head ? indexed(parts.path) : null,
|
|
71
|
-
head ? indexed(parts.fields) : null,
|
|
72
|
-
indexed(sections),
|
|
73
|
-
head ? indexed(parts.preamble) : null,
|
|
74
|
-
]);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
export function indexMessage(connection, id, text) {
|
|
78
|
-
chunked(text).forEach((chunk, at) => {
|
|
79
|
-
connection.run(`INSERT INTO ${MESSAGES} (rowid, text) VALUES (?, ?)`, [
|
|
80
|
-
rowOf(id, at),
|
|
81
|
-
indexed(chunk),
|
|
82
|
-
]);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
function unindexed(connection, table, ids) {
|
|
86
|
-
for (const id of ids) {
|
|
87
|
-
connection.run(`DELETE FROM ${table} WHERE rowid >= ? AND rowid < ?`, [
|
|
88
|
-
rowOf(id, 0),
|
|
89
|
-
rowOf(id + 1, 0),
|
|
90
|
-
]);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
export function unindexDocuments(connection, ids) {
|
|
94
|
-
unindexed(connection, DOCUMENTS, ids);
|
|
95
|
-
}
|
|
96
|
-
export function unindexMessages(connection, ids) {
|
|
97
|
-
unindexed(connection, MESSAGES, ids);
|
|
98
|
-
}
|
|
99
|
-
export function unindexAll(connection) {
|
|
100
|
-
for (const table of [DOCUMENTS, MESSAGES]) {
|
|
101
|
-
connection.run(`INSERT INTO ${table} (${table}) VALUES ('delete-all')`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function pair(left, right) {
|
|
105
|
-
if (left[0] !== right[0])
|
|
106
|
-
return left[0] < right[0] ? -1 : 1;
|
|
107
|
-
if (left[1] !== right[1])
|
|
108
|
-
return left[1] < right[1] ? -1 : 1;
|
|
109
|
-
return 0;
|
|
110
|
-
}
|
|
111
|
-
function byRank(left, right) {
|
|
112
|
-
return right.score - left.score || pair(left.tie, right.tie);
|
|
113
|
-
}
|
|
114
|
-
function beyond(hit, cursor) {
|
|
115
|
-
if (cursor.length === 0)
|
|
116
|
-
return true;
|
|
117
|
-
return (hit.score < cursor[0] || (hit.score === cursor[0] && pair(hit.tie, [cursor[1], cursor[2]]) > 0));
|
|
118
|
-
}
|
|
119
|
-
function rankedWithin(connection, listed, sources, cursor, needed) {
|
|
120
|
-
const { table } = listed;
|
|
121
|
-
let window = Math.max(needed * 2, LEAST_WINDOW);
|
|
122
|
-
for (;;) {
|
|
123
|
-
const rows = [];
|
|
124
|
-
const boundaries = [];
|
|
125
|
-
for (const source of sources) {
|
|
126
|
-
const found = connection.rows(`SELECT rowid, bm25(${table}) AS score FROM ${table} WHERE ${table} MATCH ? ${source.sql} ORDER BY score, rowid LIMIT ?`, [source.expression, ...source.bind, window]);
|
|
127
|
-
for (const row of found)
|
|
128
|
-
rows.push([Number(row.rowid), Number(row.score)]);
|
|
129
|
-
if (found.length === window)
|
|
130
|
-
boundaries.push(-Number(found.at(-1).score));
|
|
131
|
-
}
|
|
132
|
-
rows.sort((left, right) => left[1] - right[1] || left[0] - right[0]);
|
|
133
|
-
const best = new Map();
|
|
134
|
-
for (const [row, score] of rows) {
|
|
135
|
-
const id = Math.floor(row / CHUNKS);
|
|
136
|
-
if (!best.has(id))
|
|
137
|
-
best.set(id, { chunk: row % CHUNKS, score: -score });
|
|
138
|
-
}
|
|
139
|
-
const ties = listed.ties([...best.keys()]);
|
|
140
|
-
const kept = [...best]
|
|
141
|
-
.flatMap(([id, held]) => {
|
|
142
|
-
const tie = ties.get(id);
|
|
143
|
-
return tie === undefined ? [] : [{ id, ...held, tie }];
|
|
144
|
-
})
|
|
145
|
-
.sort(byRank)
|
|
146
|
-
.filter((hit) => beyond(hit, cursor))
|
|
147
|
-
.slice(0, needed);
|
|
148
|
-
const last = kept.at(-1);
|
|
149
|
-
if (boundaries.length === 0)
|
|
150
|
-
return kept;
|
|
151
|
-
if (kept.length === needed &&
|
|
152
|
-
last !== undefined &&
|
|
153
|
-
boundaries.every((boundary) => boundary < last.score)) {
|
|
154
|
-
return kept;
|
|
155
|
-
}
|
|
156
|
-
window *= 4;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
function reaches(connection, listed, expression, reach) {
|
|
160
|
-
const { table, scope } = listed;
|
|
161
|
-
const [counted] = connection.rows(`SELECT count(*) AS held FROM (SELECT rowid FROM ${table} WHERE ${table} MATCH ? AND ${scope.sql} LIMIT ?)`, [expression, ...scope.bind, reach + 1]);
|
|
162
|
-
return Number(counted?.held ?? 0) > reach;
|
|
163
|
-
}
|
|
164
|
-
function candidates(connection, listed, clauses, cursor, needed) {
|
|
165
|
-
const { table, scope } = listed;
|
|
166
|
-
const expression = matchExpression(clauses);
|
|
167
|
-
const within = { sql: `AND ${scope.sql}`, bind: scope.bind };
|
|
168
|
-
let reach = CANDIDATES;
|
|
169
|
-
for (;;) {
|
|
170
|
-
const [edge] = connection.rows(`SELECT rowid FROM ${table} WHERE ${table} MATCH ? ${within.sql} ORDER BY rowid LIMIT 1 OFFSET ?`, [expression, ...within.bind, reach]);
|
|
171
|
-
const floor = edge === undefined ? null : Number(edge.rowid);
|
|
172
|
-
const sources = [
|
|
173
|
-
floor === null
|
|
174
|
-
? { expression, ...within }
|
|
175
|
-
: { expression, sql: `${within.sql} AND rowid < ?`, bind: [...within.bind, floor] },
|
|
176
|
-
];
|
|
177
|
-
if (floor !== null) {
|
|
178
|
-
const common = new Set();
|
|
179
|
-
const selective = [];
|
|
180
|
-
const frequent = [];
|
|
181
|
-
for (const clause of clauses) {
|
|
182
|
-
if (clause.kind === 'phrase')
|
|
183
|
-
continue;
|
|
184
|
-
if (clause.kind !== 'term' && common.has(clause.term)) {
|
|
185
|
-
frequent.push(clause);
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
if (reaches(connection, listed, clause.text, reach)) {
|
|
189
|
-
if (clause.kind === 'term')
|
|
190
|
-
common.add(clause.term);
|
|
191
|
-
frequent.push(clause);
|
|
192
|
-
}
|
|
193
|
-
else
|
|
194
|
-
selective.push(clause);
|
|
195
|
-
}
|
|
196
|
-
const phrase = clauses.find((clause) => clause.kind === 'phrase');
|
|
197
|
-
if (phrase !== undefined) {
|
|
198
|
-
const rare = !clauses
|
|
199
|
-
.filter((clause) => clause.kind === 'term')
|
|
200
|
-
.every((clause) => common.has(clause.term)) ||
|
|
201
|
-
!reaches(connection, listed, phrase.text, reach);
|
|
202
|
-
(rare ? selective : frequent).push(phrase);
|
|
203
|
-
}
|
|
204
|
-
if (selective.length > 0) {
|
|
205
|
-
const chosen = `(${matchExpression(selective)})`;
|
|
206
|
-
const tail = { sql: `${within.sql} AND rowid >= ?`, bind: [...within.bind, floor] };
|
|
207
|
-
if (frequent.length === 0)
|
|
208
|
-
sources.push({ ...tail, expression: chosen });
|
|
209
|
-
else {
|
|
210
|
-
const rest = `(${matchExpression(frequent)})`;
|
|
211
|
-
sources.push({ ...tail, expression: `${chosen} AND ${rest}` }, { ...tail, expression: `${chosen} NOT ${rest}` });
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
const kept = rankedWithin(connection, listed, sources, cursor, needed);
|
|
216
|
-
if (floor === null || kept.length >= needed)
|
|
217
|
-
return kept;
|
|
218
|
-
reach *= 4;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
function windowOf(connection, listed, clauses, cursor, limit) {
|
|
222
|
-
if (cursor === null || listed === null || clauses === null)
|
|
223
|
-
return { kept: [], cursor: null };
|
|
224
|
-
const found = candidates(connection, listed, clauses, cursor, limit + 1);
|
|
225
|
-
if (found.length <= limit)
|
|
226
|
-
return { kept: found, cursor: null };
|
|
227
|
-
const kept = found.slice(0, limit);
|
|
228
|
-
const last = kept.at(-1);
|
|
229
|
-
return { kept, cursor: last === undefined ? cursor : [last.score, ...last.tie] };
|
|
230
|
-
}
|
|
231
|
-
function totalOf(connection, listed, clauses) {
|
|
232
|
-
if (listed === null || clauses === null)
|
|
233
|
-
return 0;
|
|
234
|
-
const { table, scope } = listed;
|
|
235
|
-
const [counted] = connection.rows(`SELECT count(DISTINCT rowid / ${CHUNKS}) AS held FROM ${table} WHERE ${table} MATCH ? AND ${scope.sql}`, [matchExpression(clauses), ...scope.bind]);
|
|
236
|
-
return Number(counted?.held ?? 0);
|
|
237
|
-
}
|
|
238
|
-
function ids(found) {
|
|
239
|
-
return JSON.stringify(found);
|
|
240
|
-
}
|
|
241
|
-
function documentsListed(connection, documents) {
|
|
242
|
-
if (documents.rooms.length === 0)
|
|
243
|
-
return null;
|
|
244
|
-
const filter = selected(connection, documents.plan, documents.rooms);
|
|
245
|
-
const outside = {
|
|
246
|
-
sql: "NOT EXISTS (SELECT 1 FROM json_each(?) r WHERE d.key = r.value ->> 0 AND (d.path = r.value ->> 1 OR (d.path >= (r.value ->> 1) || '/' AND d.path < (r.value ->> 1) || '0')))",
|
|
247
|
-
bind: [
|
|
248
|
-
JSON.stringify(documents.beneath.flatMap(({ key, roots }) => roots.map((root) => [key, root]))),
|
|
249
|
-
],
|
|
250
|
-
};
|
|
251
|
-
const conditions = [filter, outside];
|
|
252
|
-
const locators = new Map(documents.rooms.map(({ key, locator }) => [key, locator]));
|
|
253
|
-
return {
|
|
254
|
-
table: DOCUMENTS,
|
|
255
|
-
scope: {
|
|
256
|
-
sql: `EXISTS (SELECT 1 FROM replica_entries d WHERE d.id = ${DOCUMENTS}.rowid / ${CHUNKS} AND d.type IS NOT NULL AND ${conditions.map(({ sql }) => `(${sql})`).join(' AND ')})`,
|
|
257
|
-
bind: conditions.flatMap(({ bind }) => bind),
|
|
258
|
-
},
|
|
259
|
-
ties(found) {
|
|
260
|
-
const tied = new Map();
|
|
261
|
-
for (const row of connection.rows('SELECT id, key, path FROM replica_entries WHERE id IN (SELECT value FROM json_each(?))', [ids(found)])) {
|
|
262
|
-
const locator = locators.get(Number(row.key));
|
|
263
|
-
if (locator !== undefined)
|
|
264
|
-
tied.set(Number(row.id), [locator, String(row.path)]);
|
|
265
|
-
}
|
|
266
|
-
return tied;
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
function messagesListed(connection, conversations) {
|
|
271
|
-
if (conversations.length === 0)
|
|
272
|
-
return null;
|
|
273
|
-
return {
|
|
274
|
-
table: MESSAGES,
|
|
275
|
-
scope: {
|
|
276
|
-
sql: `EXISTS (SELECT 1 FROM conversation_messages m WHERE m.id = ${MESSAGES}.rowid / ${CHUNKS} AND m.conversation IN (SELECT value FROM json_each(?)))`,
|
|
277
|
-
bind: [JSON.stringify(conversations)],
|
|
278
|
-
},
|
|
279
|
-
ties(found) {
|
|
280
|
-
return new Map(connection
|
|
281
|
-
.rows('SELECT id, conversation, identity FROM conversation_messages WHERE id IN (SELECT value FROM json_each(?))', [ids(found)])
|
|
282
|
-
.map((row) => [Number(row.id), [String(row.conversation), String(row.identity)]]));
|
|
283
|
-
},
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
function cut(candidates, terms) {
|
|
287
|
-
for (const [part, text] of candidates) {
|
|
288
|
-
const found = snippet(text, terms, SNIPPET_REACH);
|
|
289
|
-
if (found !== null)
|
|
290
|
-
return { snippet: { part, text: found.text, at: [...found.at] } };
|
|
291
|
-
}
|
|
292
|
-
return {};
|
|
293
|
-
}
|
|
294
|
-
function documentHit(connection, hit, terms) {
|
|
295
|
-
const [row] = connection.rows('SELECT type, content FROM replica_entries WHERE id = ?', [hit.id]);
|
|
296
|
-
if (row === undefined)
|
|
297
|
-
return null;
|
|
298
|
-
const [room, path] = hit.tie;
|
|
299
|
-
const parts = typeof row.content === 'string' ? partsOf(path, row.content) : null;
|
|
300
|
-
const whole = parts === null
|
|
301
|
-
? []
|
|
302
|
-
: [
|
|
303
|
-
['fields', parts.fields],
|
|
304
|
-
['sections', parts.sections],
|
|
305
|
-
['preamble', parts.preamble],
|
|
306
|
-
['path', parts.path],
|
|
307
|
-
];
|
|
308
|
-
const matches = {};
|
|
309
|
-
for (const [part, text] of whole) {
|
|
310
|
-
for (const term of matched(text, terms))
|
|
311
|
-
(matches[term] ??= []).push(part);
|
|
312
|
-
}
|
|
313
|
-
const sections = parts === null ? [] : chunked(parts.sections);
|
|
314
|
-
const chunk = parts === null
|
|
315
|
-
? []
|
|
316
|
-
: hit.chunk === 0
|
|
317
|
-
? [
|
|
318
|
-
['fields', parts.fields],
|
|
319
|
-
['sections', sections[0] ?? ''],
|
|
320
|
-
['preamble', parts.preamble],
|
|
321
|
-
['path', parts.path],
|
|
322
|
-
]
|
|
323
|
-
: [['sections', sections[hit.chunk] ?? '']];
|
|
324
|
-
return {
|
|
325
|
-
room,
|
|
326
|
-
path,
|
|
327
|
-
type: String(row.type),
|
|
328
|
-
score: hit.score,
|
|
329
|
-
matches,
|
|
330
|
-
...cut(chunk, terms),
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
function messageHit(connection, hit, terms) {
|
|
334
|
-
const [row] = connection.rows('SELECT text FROM conversation_messages WHERE id = ?', [hit.id]);
|
|
335
|
-
const text = typeof row?.text === 'string' ? row.text : '';
|
|
336
|
-
const matches = {};
|
|
337
|
-
for (const term of matched(text, terms))
|
|
338
|
-
matches[term] = ['text'];
|
|
339
|
-
const [conversation, identity] = hit.tie;
|
|
340
|
-
return {
|
|
341
|
-
conversation,
|
|
342
|
-
identity,
|
|
343
|
-
score: hit.score,
|
|
344
|
-
matches,
|
|
345
|
-
...cut([['text', chunked(text)[hit.chunk] ?? '']], terms),
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
export function searched(connection, ask) {
|
|
349
|
-
const clauses = matchClauses(ask.text);
|
|
350
|
-
const terms = queryTerms(ask.text);
|
|
351
|
-
const documents = ask.documents === null ? null : documentsListed(connection, ask.documents);
|
|
352
|
-
const messages = messagesListed(connection, ask.conversations);
|
|
353
|
-
const [documentsAfter, messagesAfter] = ask.after ?? [[], []];
|
|
354
|
-
const documentWindow = windowOf(connection, documents, clauses, documentsAfter, ask.limit);
|
|
355
|
-
const messageWindow = windowOf(connection, messages, clauses, messagesAfter, ask.limit);
|
|
356
|
-
const more = documentWindow.cursor !== null || messageWindow.cursor !== null;
|
|
357
|
-
return {
|
|
358
|
-
documents: documentWindow.kept.flatMap((hit) => documentHit(connection, hit, terms) ?? []),
|
|
359
|
-
messages: messageWindow.kept.map((hit) => messageHit(connection, hit, terms)),
|
|
360
|
-
...(more ? { next: JSON.stringify([documentWindow.cursor, messageWindow.cursor]) } : {}),
|
|
361
|
-
...(ask.total
|
|
362
|
-
? {
|
|
363
|
-
total: {
|
|
364
|
-
documents: totalOf(connection, documents, clauses),
|
|
365
|
-
messages: totalOf(connection, messages, clauses),
|
|
366
|
-
},
|
|
367
|
-
}
|
|
368
|
-
: {}),
|
|
369
|
-
};
|
|
370
|
-
}
|
package/dist/words.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export type Clause = {
|
|
2
|
-
readonly text: string;
|
|
3
|
-
readonly kind: 'term' | 'stem' | 'prefix' | 'phrase';
|
|
4
|
-
readonly term: string;
|
|
5
|
-
};
|
|
6
|
-
export type Located = {
|
|
7
|
-
readonly start: number;
|
|
8
|
-
readonly end: number;
|
|
9
|
-
};
|
|
10
|
-
export declare function indexed(text: string): string;
|
|
11
|
-
export declare function matchClauses(text: string): Clause[] | null;
|
|
12
|
-
export declare function matchExpression(clauses: readonly Clause[]): string;
|
|
13
|
-
export declare function queryTerms(text: string): string[];
|
|
14
|
-
export declare function snippet(part: string, terms: readonly string[], reach: number): {
|
|
15
|
-
readonly text: string;
|
|
16
|
-
readonly at: readonly [number, number];
|
|
17
|
-
} | null;
|
|
18
|
-
export declare function matched(part: string, terms: readonly string[]): string[];
|
|
19
|
-
//# sourceMappingURL=words.d.ts.map
|
package/dist/words.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../src/words.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAYvE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO5C;AAgBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAiB1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAyDD,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW1E;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE"}
|