@agentshouse/mdruntime 0.1.0-c5f333dfa0583 → 0.1.0-c5fe3b2cddda7
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 -8
- package/dist/adapter.d.ts +39 -40
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +2 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +28 -4
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +16 -8
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +142 -94
- package/dist/change-set.d.ts +1 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +1 -4
- package/dist/client.d.ts +6 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +54 -7
- package/dist/collection.d.ts +5 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +24 -19
- package/dist/compile.d.ts +6 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +94 -33
- package/dist/connection.d.ts +8 -7
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1160 -1151
- package/dist/conversation.d.ts +7 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +171 -55
- package/dist/durability.d.ts +1 -5
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +1 -0
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +1 -1
- package/dist/file.d.ts +2 -11
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +6 -4
- package/dist/fulltext.d.ts +27 -0
- package/dist/fulltext.d.ts.map +1 -0
- package/dist/fulltext.js +370 -0
- package/dist/host.d.ts +3 -4
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +42 -18
- 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 +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +2 -1
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +3 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +93 -38
- package/dist/messages.d.ts +28 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +90 -0
- package/dist/model.d.ts +6 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -10
- package/dist/observation.d.ts +1 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +1 -1
- package/dist/outcome.d.ts +13 -6
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +16 -5
- package/dist/overlay.js +1 -1
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/query.d.ts +10 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +12 -1
- package/dist/reach.d.ts +8 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +69 -46
- package/dist/readiness.d.ts +14 -15
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +2 -8
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +26 -0
- package/dist/refresh.d.ts +9 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +64 -30
- package/dist/replica.d.ts +5 -5
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +4 -7
- package/dist/room-draft.d.ts +18 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +73 -6
- package/dist/rows.d.ts +15 -6
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +102 -74
- package/dist/save.d.ts +2 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +13 -7
- package/dist/search.d.ts +11 -43
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +0 -296
- package/dist/shared.d.ts +0 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +0 -10
- package/dist/status.d.ts +4 -3
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -1
- package/dist/store.d.ts +23 -58
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +37 -272
- package/dist/stored.d.ts +10 -23
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +217 -218
- package/dist/tables.d.ts +51 -46
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +94 -53
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/validation.d.ts +3 -4
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +35 -96
- package/dist/wire.d.ts +5 -5
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +2 -2
- package/dist/words.d.ts +19 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +156 -0
- package/package.json +11 -19
- package/AGENTS.md +0 -312
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/context.js +0 -10
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/house.d.ts +0 -25
- package/dist/chat/house.d.ts.map +0 -1
- package/dist/chat/house.js +0 -38
- package/dist/chat/input.d.ts +0 -11
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -92
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -28
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -103
- package/dist/chat/markdown.d.ts +0 -21
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -246
- package/dist/chat/message.d.ts +0 -7
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -254
- package/dist/chat/messages.d.ts +0 -35
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -210
- package/dist/chat/name.d.ts +0 -7
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -12
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -19
- package/dist/chat/overlay.d.ts +0 -32
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -103
- package/dist/chat/parts.d.ts +0 -58
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -120
- package/dist/chat/pieces.d.ts +0 -62
- package/dist/chat/pieces.d.ts.map +0 -1
- package/dist/chat/pieces.js +0 -1110
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -70
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -635
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- package/dist/chat/questions.d.ts +0 -31
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/questions.js +0 -111
- package/dist/chat/read.d.ts +0 -5
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/read.js +0 -13
- package/dist/chat/ready.d.ts +0 -37
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -93
- package/dist/chat/room-file.d.ts +0 -8
- package/dist/chat/room-file.d.ts.map +0 -1
- package/dist/chat/room-file.js +0 -72
- package/dist/chat/steady.d.ts +0 -3
- package/dist/chat/steady.d.ts.map +0 -1
- package/dist/chat/steady.js +0 -26
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -307
- package/dist/chat.d.ts +0 -15
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/reads.d.ts +0 -11
- package/dist/reads.d.ts.map +0 -1
- package/dist/reads.js +0 -98
package/dist/search.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ProviderRefusal } from './adapter.js';
|
|
2
|
-
import type { ChangeSet } from './change-set.js';
|
|
3
2
|
import { type CoveredRoom, type Filter, type PendingRoom } from './query.js';
|
|
4
3
|
import type { Open } from './open.js';
|
|
5
4
|
export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
|
|
@@ -12,29 +11,32 @@ export type SearchRequest = {
|
|
|
12
11
|
after?: string;
|
|
13
12
|
total?: true;
|
|
14
13
|
};
|
|
14
|
+
export type MessagePart = Open<'text'>;
|
|
15
|
+
export type Snippet<Part extends string> = {
|
|
16
|
+
part: Part;
|
|
17
|
+
text: string;
|
|
18
|
+
at: readonly [number, number];
|
|
19
|
+
};
|
|
15
20
|
export type DocumentHit = {
|
|
16
21
|
room: string;
|
|
17
22
|
path: string;
|
|
18
23
|
type: string;
|
|
19
24
|
score: number;
|
|
20
25
|
matches: Readonly<Record<string, readonly DocumentPart[]>>;
|
|
26
|
+
snippet?: Snippet<DocumentPart>;
|
|
21
27
|
};
|
|
22
28
|
export type MessageHit = {
|
|
23
29
|
conversation: string;
|
|
24
30
|
identity: string;
|
|
25
31
|
score: number;
|
|
26
|
-
matches: Readonly<Record<string, readonly
|
|
32
|
+
matches: Readonly<Record<string, readonly MessagePart[]>>;
|
|
33
|
+
snippet?: Snippet<MessagePart>;
|
|
27
34
|
};
|
|
28
35
|
export type SearchCoverage = {
|
|
29
36
|
rooms: readonly CoveredRoom[];
|
|
30
37
|
conversations: readonly string[];
|
|
31
|
-
index: string;
|
|
32
38
|
overlay: readonly string[];
|
|
33
39
|
};
|
|
34
|
-
export type PendingConversation = {
|
|
35
|
-
conversation: string;
|
|
36
|
-
awaits: Open<'index'>;
|
|
37
|
-
};
|
|
38
40
|
export type SearchHits = {
|
|
39
41
|
documents: readonly DocumentHit[];
|
|
40
42
|
messages: readonly MessageHit[];
|
|
@@ -47,7 +49,7 @@ export type SearchWindow = SearchHits & {
|
|
|
47
49
|
};
|
|
48
50
|
};
|
|
49
51
|
export type SearchPending = SearchHits & {
|
|
50
|
-
pending: readonly
|
|
52
|
+
pending: readonly PendingRoom[];
|
|
51
53
|
coverage: SearchCoverage;
|
|
52
54
|
};
|
|
53
55
|
export type SearchUndeclared = ProviderRefusal & {
|
|
@@ -57,24 +59,7 @@ export type SearchResult = (SearchWindow & {
|
|
|
57
59
|
coverage: SearchCoverage;
|
|
58
60
|
}) | SearchPending | SearchUndeclared;
|
|
59
61
|
export declare function undeclaredSearch(): SearchUndeclared;
|
|
60
|
-
export type
|
|
61
|
-
room: string;
|
|
62
|
-
path: string;
|
|
63
|
-
type: string;
|
|
64
|
-
fields: Readonly<Record<string, unknown>>;
|
|
65
|
-
preamble: string;
|
|
66
|
-
sections: Readonly<Record<string, string>>;
|
|
67
|
-
};
|
|
68
|
-
export type SearchedMessage = {
|
|
69
|
-
conversation: string;
|
|
70
|
-
identity: string;
|
|
71
|
-
text: string;
|
|
72
|
-
};
|
|
73
|
-
export type SearchSource = {
|
|
74
|
-
room(room: string): AsyncIterable<readonly SearchedDocument[]>;
|
|
75
|
-
documents(room: string, paths: readonly string[]): Promise<readonly SearchedDocument[]>;
|
|
76
|
-
};
|
|
77
|
-
type HitCursor = readonly [number, string, string] | readonly [] | null;
|
|
62
|
+
export type HitCursor = readonly [number, string, string] | readonly [] | null;
|
|
78
63
|
export type SearchPlan = {
|
|
79
64
|
text: string;
|
|
80
65
|
documents: unknown;
|
|
@@ -84,22 +69,5 @@ export type SearchPlan = {
|
|
|
84
69
|
after: readonly [HitCursor, HitCursor] | null;
|
|
85
70
|
total: boolean;
|
|
86
71
|
};
|
|
87
|
-
export type SearchIndex = {
|
|
88
|
-
generation(): string;
|
|
89
|
-
rooms(): ReadonlySet<string>;
|
|
90
|
-
conversations(): ReadonlySet<string>;
|
|
91
|
-
indexRoom(room: string): Promise<void>;
|
|
92
|
-
indexMessages(conversation: string, messages: readonly SearchedMessage[], whole: boolean): void;
|
|
93
|
-
forget(rooms: readonly string[]): void;
|
|
94
|
-
changed(set: ChangeSet): void;
|
|
95
|
-
changes(): number;
|
|
96
|
-
caughtUp(): Promise<void>;
|
|
97
|
-
search(plan: SearchPlan, documents: readonly {
|
|
98
|
-
room: string;
|
|
99
|
-
path: string;
|
|
100
|
-
}[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null, selections: ReadonlyMap<string, readonly string[]> | null): SearchWindow;
|
|
101
|
-
};
|
|
102
72
|
export declare function searchPlanOf(input: unknown): SearchPlan;
|
|
103
|
-
export declare function createSearchIndex(source: SearchSource): SearchIndex;
|
|
104
|
-
export {};
|
|
105
73
|
//# sourceMappingURL=search.d.ts.map
|
package/dist/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/search.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import MiniSearch from 'minisearch';
|
|
2
|
-
import { indexGeneration } from './identity.js';
|
|
3
1
|
import { flag, invalid, known, limitOf, plain, } from './query.js';
|
|
4
|
-
import { beneath } from './paths.js';
|
|
5
|
-
import { inUnits, ROW_WEIGHT, yielded } from './turn.js';
|
|
6
2
|
import { decodedCursor } from './windows.js';
|
|
7
3
|
export function undeclaredSearch() {
|
|
8
4
|
return {
|
|
@@ -12,24 +8,6 @@ export function undeclaredSearch() {
|
|
|
12
8
|
retryable: false,
|
|
13
9
|
};
|
|
14
10
|
}
|
|
15
|
-
const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
|
|
16
|
-
const VACUUM_CONDITIONS = { minDirtCount: 20, minDirtFactor: 0.1 };
|
|
17
|
-
const CHANGED_BATCH = 256;
|
|
18
|
-
function documentId(room, path) {
|
|
19
|
-
return JSON.stringify(['document', room, path]);
|
|
20
|
-
}
|
|
21
|
-
function messageId(conversation, identity) {
|
|
22
|
-
return JSON.stringify(['message', conversation, identity]);
|
|
23
|
-
}
|
|
24
|
-
function scalars(value) {
|
|
25
|
-
if (value === null || value === undefined)
|
|
26
|
-
return [];
|
|
27
|
-
if (Array.isArray(value))
|
|
28
|
-
return value.flatMap(scalars);
|
|
29
|
-
if (typeof value === 'object')
|
|
30
|
-
return Object.values(value).flatMap(scalars);
|
|
31
|
-
return [String(value)];
|
|
32
|
-
}
|
|
33
11
|
function hitCursor(input) {
|
|
34
12
|
if (input === null)
|
|
35
13
|
return null;
|
|
@@ -77,277 +55,3 @@ export function searchPlanOf(input) {
|
|
|
77
55
|
total: flag(input.total, 'total'),
|
|
78
56
|
};
|
|
79
57
|
}
|
|
80
|
-
function pair(left, right) {
|
|
81
|
-
if (left[0] !== right[0])
|
|
82
|
-
return left[0] < right[0] ? -1 : 1;
|
|
83
|
-
if (left[1] !== right[1])
|
|
84
|
-
return left[1] < right[1] ? -1 : 1;
|
|
85
|
-
return 0;
|
|
86
|
-
}
|
|
87
|
-
function hitWindow(found, cursor, limit, tie) {
|
|
88
|
-
if (cursor === null)
|
|
89
|
-
return { kept: [], cursor: null };
|
|
90
|
-
const start = cursor.length === 0
|
|
91
|
-
? 0
|
|
92
|
-
: found.findIndex((hit) => hit.score < cursor[0] ||
|
|
93
|
-
(hit.score === cursor[0] && pair(tie(hit), [cursor[1], cursor[2]]) > 0));
|
|
94
|
-
const following = start === -1 ? [] : found.slice(start);
|
|
95
|
-
if (limit === null || following.length <= limit)
|
|
96
|
-
return { kept: following, cursor: null };
|
|
97
|
-
const kept = following.slice(0, limit);
|
|
98
|
-
const last = kept[kept.length - 1];
|
|
99
|
-
return { kept, cursor: last === undefined ? cursor : [last.score, ...tie(last)] };
|
|
100
|
-
}
|
|
101
|
-
export function createSearchIndex(source) {
|
|
102
|
-
const generation = indexGeneration();
|
|
103
|
-
const index = new MiniSearch({ fields: FIELDS, autoVacuum: false });
|
|
104
|
-
const documents = new Map();
|
|
105
|
-
const messages = new Map();
|
|
106
|
-
const rooms = new Set();
|
|
107
|
-
const filling = new Set();
|
|
108
|
-
const conversations = new Set();
|
|
109
|
-
const acquiring = new Set();
|
|
110
|
-
const changedDocuments = new Map();
|
|
111
|
-
const refilling = new Set();
|
|
112
|
-
const arrived = new Map();
|
|
113
|
-
let vacuuming = null;
|
|
114
|
-
let changes = 0;
|
|
115
|
-
function added(entry) {
|
|
116
|
-
if (vacuuming === null)
|
|
117
|
-
index.add(entry);
|
|
118
|
-
else
|
|
119
|
-
arrived.set(entry.id, entry);
|
|
120
|
-
}
|
|
121
|
-
function addDocument(document) {
|
|
122
|
-
const id = documentId(document.room, document.path);
|
|
123
|
-
discard(id, documents);
|
|
124
|
-
added({
|
|
125
|
-
id,
|
|
126
|
-
fields: scalars(document.fields).join('\n'),
|
|
127
|
-
sections: Object.entries(document.sections)
|
|
128
|
-
.map(([heading, text]) => `${heading}\n${text}`)
|
|
129
|
-
.join('\n'),
|
|
130
|
-
preamble: document.preamble,
|
|
131
|
-
path: document.path,
|
|
132
|
-
});
|
|
133
|
-
documents.set(id, { room: document.room, path: document.path, type: document.type });
|
|
134
|
-
}
|
|
135
|
-
function addMessage(message) {
|
|
136
|
-
const id = messageId(message.conversation, message.identity);
|
|
137
|
-
discard(id, messages);
|
|
138
|
-
added({ id, text: message.text });
|
|
139
|
-
messages.set(id, { conversation: message.conversation, identity: message.identity });
|
|
140
|
-
}
|
|
141
|
-
function discard(id, entries) {
|
|
142
|
-
if (!entries.delete(id) || arrived.delete(id))
|
|
143
|
-
return;
|
|
144
|
-
index.discard(id);
|
|
145
|
-
vacuum();
|
|
146
|
-
}
|
|
147
|
-
function vacuum() {
|
|
148
|
-
if (vacuuming !== null ||
|
|
149
|
-
index.dirtCount < VACUUM_CONDITIONS.minDirtCount ||
|
|
150
|
-
index.dirtFactor < VACUUM_CONDITIONS.minDirtFactor) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
changes += 1;
|
|
154
|
-
vacuuming = index
|
|
155
|
-
.vacuum()
|
|
156
|
-
.then(() => inUnits(arrivals(), (id) => {
|
|
157
|
-
const entry = arrived.get(id);
|
|
158
|
-
if (entry === undefined)
|
|
159
|
-
return ROW_WEIGHT;
|
|
160
|
-
arrived.delete(id);
|
|
161
|
-
index.add(entry);
|
|
162
|
-
return Object.values(entry).reduce((total, value) => total + value.length, ROW_WEIGHT);
|
|
163
|
-
}))
|
|
164
|
-
.finally(() => {
|
|
165
|
-
vacuuming = null;
|
|
166
|
-
vacuum();
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
function* arrivals() {
|
|
170
|
-
for (;;) {
|
|
171
|
-
const next = arrived.keys().next();
|
|
172
|
-
if (next.done === true)
|
|
173
|
-
return;
|
|
174
|
-
yield next.value;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async function vacuumed() {
|
|
178
|
-
while (vacuuming !== null)
|
|
179
|
-
await vacuuming;
|
|
180
|
-
}
|
|
181
|
-
async function paused() {
|
|
182
|
-
await yielded();
|
|
183
|
-
await vacuumed();
|
|
184
|
-
}
|
|
185
|
-
let catching = null;
|
|
186
|
-
async function refill(room) {
|
|
187
|
-
for (const [id, entry] of documents)
|
|
188
|
-
if (entry.room === room)
|
|
189
|
-
discard(id, documents);
|
|
190
|
-
for await (const batch of source.room(room)) {
|
|
191
|
-
if (!rooms.has(room) && !filling.has(room))
|
|
192
|
-
return;
|
|
193
|
-
for (const document of batch)
|
|
194
|
-
addDocument(document);
|
|
195
|
-
await paused();
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
async function catchUp() {
|
|
199
|
-
for (const room of refilling) {
|
|
200
|
-
refilling.delete(room);
|
|
201
|
-
await refill(room);
|
|
202
|
-
}
|
|
203
|
-
while (changedDocuments.size > 0) {
|
|
204
|
-
await paused();
|
|
205
|
-
const batch = new Map();
|
|
206
|
-
for (const [id, { room, path }] of changedDocuments) {
|
|
207
|
-
changedDocuments.delete(id);
|
|
208
|
-
const held = batch.get(room) ?? new Map();
|
|
209
|
-
held.set(path, id);
|
|
210
|
-
batch.set(room, held);
|
|
211
|
-
if (held.size >= CHANGED_BATCH)
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
for (const [room, held] of batch) {
|
|
215
|
-
for (const id of held.values())
|
|
216
|
-
discard(id, documents);
|
|
217
|
-
for (const document of await source.documents(room, [...held.keys()])) {
|
|
218
|
-
if (rooms.has(room) || filling.has(room))
|
|
219
|
-
addDocument(document);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
await vacuumed();
|
|
224
|
-
}
|
|
225
|
-
function caughtUp() {
|
|
226
|
-
if (catching !== null)
|
|
227
|
-
return catching;
|
|
228
|
-
if (changedDocuments.size === 0 && refilling.size === 0 && vacuuming === null) {
|
|
229
|
-
return Promise.resolve();
|
|
230
|
-
}
|
|
231
|
-
catching = catchUp().finally(() => {
|
|
232
|
-
catching = null;
|
|
233
|
-
});
|
|
234
|
-
return catching;
|
|
235
|
-
}
|
|
236
|
-
function ranked(text, entries, keep, tie) {
|
|
237
|
-
const found = index.search(text, {
|
|
238
|
-
filter: ({ id }) => {
|
|
239
|
-
const entry = entries.get(id);
|
|
240
|
-
return entry !== undefined && keep(entry, id);
|
|
241
|
-
},
|
|
242
|
-
});
|
|
243
|
-
found.sort((left, right) => right.score - left.score ||
|
|
244
|
-
pair(tie(entries.get(left.id)), tie(entries.get(right.id))));
|
|
245
|
-
return found.map(({ id, score, match }) => ({
|
|
246
|
-
...entries.get(id),
|
|
247
|
-
score,
|
|
248
|
-
match,
|
|
249
|
-
}));
|
|
250
|
-
}
|
|
251
|
-
return {
|
|
252
|
-
generation: () => generation,
|
|
253
|
-
rooms: () => rooms,
|
|
254
|
-
conversations: () => conversations,
|
|
255
|
-
async indexRoom(room) {
|
|
256
|
-
if (rooms.has(room) || filling.has(room))
|
|
257
|
-
return;
|
|
258
|
-
filling.add(room);
|
|
259
|
-
try {
|
|
260
|
-
for await (const batch of source.room(room)) {
|
|
261
|
-
if (!filling.has(room))
|
|
262
|
-
return;
|
|
263
|
-
for (const document of batch)
|
|
264
|
-
addDocument(document);
|
|
265
|
-
await paused();
|
|
266
|
-
}
|
|
267
|
-
if (filling.has(room))
|
|
268
|
-
rooms.add(room);
|
|
269
|
-
}
|
|
270
|
-
finally {
|
|
271
|
-
filling.delete(room);
|
|
272
|
-
}
|
|
273
|
-
},
|
|
274
|
-
indexMessages(conversation, arriving, whole) {
|
|
275
|
-
for (const message of arriving)
|
|
276
|
-
addMessage(message);
|
|
277
|
-
if (!whole) {
|
|
278
|
-
acquiring.add(conversation);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
acquiring.delete(conversation);
|
|
282
|
-
conversations.add(conversation);
|
|
283
|
-
},
|
|
284
|
-
forget(leaving) {
|
|
285
|
-
const gone = new Set(leaving);
|
|
286
|
-
for (const [id, entry] of documents)
|
|
287
|
-
if (gone.has(entry.room))
|
|
288
|
-
discard(id, documents);
|
|
289
|
-
for (const room of leaving) {
|
|
290
|
-
rooms.delete(room);
|
|
291
|
-
filling.delete(room);
|
|
292
|
-
refilling.delete(room);
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
changed(set) {
|
|
296
|
-
changes += 1;
|
|
297
|
-
for (const { locator, path } of set.documents) {
|
|
298
|
-
if (!rooms.has(locator) && !filling.has(locator))
|
|
299
|
-
continue;
|
|
300
|
-
if (path === null) {
|
|
301
|
-
for (const [id, entry] of changedDocuments) {
|
|
302
|
-
if (entry.room === locator)
|
|
303
|
-
changedDocuments.delete(id);
|
|
304
|
-
}
|
|
305
|
-
refilling.add(locator);
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
changedDocuments.set(documentId(locator, path), { room: locator, path });
|
|
309
|
-
}
|
|
310
|
-
for (const { conversation, identity, text } of set.messages) {
|
|
311
|
-
if (!conversations.has(conversation) && !acquiring.has(conversation))
|
|
312
|
-
continue;
|
|
313
|
-
const id = messageId(conversation, identity);
|
|
314
|
-
if (text === null)
|
|
315
|
-
discard(id, messages);
|
|
316
|
-
else
|
|
317
|
-
addMessage({ conversation, identity, text });
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
changes: () => changes,
|
|
321
|
-
caughtUp,
|
|
322
|
-
search({ text, limit, after, total }, selected, named, within, selections) {
|
|
323
|
-
const chosen = selected === null
|
|
324
|
-
? null
|
|
325
|
-
: new Set(selected.map(({ room, path }) => documentId(room, path)));
|
|
326
|
-
const asked = new Set(named);
|
|
327
|
-
const documentTie = ({ room, path }) => [room, path];
|
|
328
|
-
const messageTie = ({ conversation, identity }) => [conversation, identity];
|
|
329
|
-
const foundDocuments = ranked(text, documents, ({ room, path }, id) => (chosen === null || chosen.has(id)) &&
|
|
330
|
-
(within === null || within.has(room)) &&
|
|
331
|
-
!(selections?.get(room) ?? []).some((root) => beneath(root, path)), documentTie);
|
|
332
|
-
const foundMessages = ranked(text, messages, ({ conversation }) => asked.has(conversation), messageTie);
|
|
333
|
-
const [documentsAfter, messagesAfter] = after ?? [[], []];
|
|
334
|
-
const documentWindow = hitWindow(foundDocuments, documentsAfter, limit, documentTie);
|
|
335
|
-
const messageWindow = hitWindow(foundMessages, messagesAfter, limit, messageTie);
|
|
336
|
-
const more = documentWindow.cursor !== null || messageWindow.cursor !== null;
|
|
337
|
-
return {
|
|
338
|
-
documents: documentWindow.kept.map(({ match, ...hit }) => ({
|
|
339
|
-
...hit,
|
|
340
|
-
matches: match,
|
|
341
|
-
})),
|
|
342
|
-
messages: messageWindow.kept.map(({ match, ...hit }) => ({
|
|
343
|
-
...hit,
|
|
344
|
-
matches: match,
|
|
345
|
-
})),
|
|
346
|
-
...(more ? { next: JSON.stringify([documentWindow.cursor, messageWindow.cursor]) } : {}),
|
|
347
|
-
...(total
|
|
348
|
-
? { total: { documents: foundDocuments.length, messages: foundMessages.length } }
|
|
349
|
-
: {}),
|
|
350
|
-
};
|
|
351
|
-
},
|
|
352
|
-
};
|
|
353
|
-
}
|
package/dist/shared.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export type Paths<V> = Readonly<Record<string, V>>;
|
|
2
2
|
export declare function entriesIn<V>(map: Paths<V>): Generator<readonly [string, V]>;
|
|
3
|
-
export declare function keysIn(...maps: readonly Paths<unknown>[]): Generator<number, Set<string>, void>;
|
|
4
3
|
export declare function sortedKeys(map: Paths<unknown>): Generator<number, readonly string[], void>;
|
|
5
4
|
export declare function sorting(keys: Iterable<string>): Generator<number, readonly string[], void>;
|
|
6
5
|
export declare function sharing<V>(map: Paths<V>): Generator<number, Paths<V>, void>;
|
package/dist/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AA+LnD,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAO5E;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AA+LnD,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAO5E;AAuCD,wBAAiB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAE3F;AAED,wBAAiB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAoB3F;AAED,wBAAiB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAE5E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAM,GAC7B,KAAK,CAAC,CAAC,CAAC,CAEV;AAED,wBAAiB,QAAQ,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAM,GAC7B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAoBnC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/C;AA8CD,wBAAiB,WAAW,CAAC,CAAC,EAC5B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,GAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAmB,GAC/C,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAkB9C;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,GAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAmB,GAC/C,WAAW,CAAC,MAAM,CAAC,CAErB;AAMD,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAiD5D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE7D;AAED,wBAAiB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAUxF"}
|
package/dist/shared.js
CHANGED
|
@@ -202,16 +202,6 @@ function* rooted(map) {
|
|
|
202
202
|
}
|
|
203
203
|
return { node, size };
|
|
204
204
|
}
|
|
205
|
-
export function* keysIn(...maps) {
|
|
206
|
-
const keys = new Set();
|
|
207
|
-
for (const map of maps) {
|
|
208
|
-
for (const [key] of entriesIn(map)) {
|
|
209
|
-
keys.add(key);
|
|
210
|
-
yield ROW_WEIGHT;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return keys;
|
|
214
|
-
}
|
|
215
205
|
const RUN = 1 << 10;
|
|
216
206
|
function* merged(left, right) {
|
|
217
207
|
const into = [];
|
package/dist/status.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import type { Open } from './open.js';
|
|
2
|
-
import type { ProviderRefusal } from './adapter.js';
|
|
3
2
|
import type { ReturnReason } from './room-draft.js';
|
|
4
3
|
export type AttentionEntry = {
|
|
5
4
|
room: string;
|
|
6
5
|
path: string;
|
|
7
6
|
returned: ReturnReason;
|
|
8
|
-
}
|
|
7
|
+
};
|
|
8
|
+
export type UnsentChange = {
|
|
9
9
|
room: string;
|
|
10
|
-
|
|
10
|
+
path: string;
|
|
11
11
|
};
|
|
12
12
|
export type SyncStatus = {
|
|
13
13
|
state: Open<'pending' | 'syncing' | 'synced'>;
|
|
14
14
|
lastCompleted: string | null;
|
|
15
15
|
providerUnreachable: boolean;
|
|
16
16
|
attentionRequired: readonly AttentionEntry[];
|
|
17
|
+
unsent: readonly UnsentChange[];
|
|
17
18
|
reset: string | null;
|
|
18
19
|
};
|
|
19
20
|
export type CycleProgress = {
|
package/dist/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAOtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAShE"}
|
package/dist/status.js
CHANGED
|
@@ -3,6 +3,7 @@ export const STARTING = {
|
|
|
3
3
|
lastCompleted: null,
|
|
4
4
|
providerUnreachable: false,
|
|
5
5
|
attentionRequired: [],
|
|
6
|
+
unsent: [],
|
|
6
7
|
reset: null,
|
|
7
8
|
};
|
|
8
9
|
export function transferring(status) {
|
|
@@ -16,5 +17,6 @@ export function same(one, other) {
|
|
|
16
17
|
one.lastCompleted === other.lastCompleted &&
|
|
17
18
|
one.providerUnreachable === other.providerUnreachable &&
|
|
18
19
|
one.reset === other.reset &&
|
|
19
|
-
JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired)
|
|
20
|
+
JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired) &&
|
|
21
|
+
JSON.stringify(one.unsent) === JSON.stringify(other.unsent));
|
|
20
22
|
}
|