@agentshouse/mdruntime 0.1.0-c5fe3b2cddda7 → 0.1.0-c6197367d5fad
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -19
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +299 -0
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +302 -0
- package/dist/adapter.d.ts +156 -89
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -11
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +20 -60
- package/dist/authored.d.ts +88 -0
- package/dist/authored.d.ts.map +1 -0
- package/dist/authored.js +345 -0
- package/dist/bootstrap.d.ts +9 -5
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +204 -85
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change-set.d.ts +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -0
- package/dist/change.d.ts +5 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +7 -2
- package/dist/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +11 -0
- package/dist/client.d.ts +33 -23
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +43 -56
- package/dist/collection.d.ts +26 -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 +8 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +286 -336
- package/dist/connection.d.ts +5 -142
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +111 -4993
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-live.d.ts +150 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +259 -0
- package/dist/conversation-row.d.ts +40 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +66 -0
- package/dist/conversation.d.ts +72 -51
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +1001 -926
- 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 +11 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +157 -0
- package/dist/download.d.ts +6 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +42 -0
- package/dist/durability.d.ts +20 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +7 -0
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -8
- package/dist/expectation.d.ts +26 -13
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +72 -19
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +199 -0
- package/dist/file.d.ts +1 -1
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -2
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +21 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +83 -41
- 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 +37 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -5
- package/dist/install.d.ts +60 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +537 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +282 -0
- package/dist/listing.d.ts +52 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +152 -0
- package/dist/live.d.ts +9 -6
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +118 -36
- package/dist/loaded.d.ts +5 -0
- package/dist/loaded.d.ts.map +1 -0
- package/dist/loaded.js +40 -0
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +32 -0
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +49 -0
- package/dist/media.d.ts +19 -2
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +105 -27
- package/dist/memory.d.ts +18 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +214 -91
- package/dist/messages.d.ts +35 -5
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +109 -39
- package/dist/model.d.ts +2 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -14
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +153 -0
- package/dist/observation.d.ts +28 -13
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +185 -81
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +5 -5
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +53 -0
- package/dist/outcome.d.ts +17 -2
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +35 -2
- package/dist/overlay.d.ts +7 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +48 -24
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +4 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +13 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts +41 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +314 -0
- package/dist/presence.d.ts +58 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +231 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +308 -0
- package/dist/query.d.ts +14 -210
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/questions.d.ts +30 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +116 -0
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +480 -0
- package/dist/reach.d.ts +16 -15
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +257 -148
- package/dist/react.d.ts +19 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/readiness.d.ts +9 -6
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +39 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +178 -0
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +38 -8
- package/dist/refresh.d.ts +2 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +31 -3
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +11 -16
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +66 -32
- 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 +34 -10
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +331 -111
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +220 -0
- package/dist/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 +16 -22
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +49 -186
- package/dist/runtime.d.ts +34 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +42 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +332 -228
- package/dist/saves.d.ts +34 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +437 -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 +35 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +313 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +28 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +103 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/session.d.ts +38 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +67 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +164 -0
- package/dist/source.d.ts +59 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +93 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +40 -0
- package/dist/store/readiness.d.ts +11 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +68 -0
- package/dist/store/records.d.ts +224 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +466 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +115 -143
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +171 -364
- package/dist/stored.d.ts +72 -35
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +337 -197
- package/dist/surface.d.ts +92 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +251 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +538 -0
- package/dist/tables.d.ts +118 -67
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +199 -278
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +128 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +9 -12
- package/dist/windows.d.ts +1 -12
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -75
- package/dist/wire.d.ts +72 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +26 -5
- package/package.json +3 -2
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/fulltext.d.ts +0 -27
- package/dist/fulltext.d.ts.map +0 -1
- package/dist/fulltext.js +0 -370
- package/dist/log.d.ts +0 -5
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProviderRefusal } from './adapter.js';
|
|
2
|
+
import type { Runtime } from './runtime.js';
|
|
3
|
+
import type { RefusalReason } from './socket.js';
|
|
4
|
+
export declare function refuse(runtime: Runtime, reason: RefusalReason, provider?: ProviderRefusal | null): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,eAAe,GAAG,IAAW,iBAiDxC"}
|
package/dist/refusal.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { changeSet, mergeChangeSets } from './change-set.js';
|
|
2
|
+
import { composedOf } from './collection.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
4
|
+
import { listedLocators } from './listing.js';
|
|
5
|
+
import { prepare } from './preparation.js';
|
|
6
|
+
import { storedRecord } from './replica.js';
|
|
7
|
+
import { emitRefusal } from './shown.js';
|
|
8
|
+
export async function refuse(runtime, reason, provider = null) {
|
|
9
|
+
const { store, socket, presence } = runtime;
|
|
10
|
+
socket.session.set({ paused: true });
|
|
11
|
+
socket.abortReads();
|
|
12
|
+
try {
|
|
13
|
+
if (reason === 'revoked-authorization') {
|
|
14
|
+
await store.exclusive(async () => {
|
|
15
|
+
const revoked = { status: 'unavailable', reason: 'revoked' };
|
|
16
|
+
let held = new Map();
|
|
17
|
+
try {
|
|
18
|
+
const local = await store.open();
|
|
19
|
+
held = await store.rooms();
|
|
20
|
+
await local.commit({
|
|
21
|
+
rooms: [...held.values()].map(({ record: kept }) => {
|
|
22
|
+
const record = { ...kept, model: revoked };
|
|
23
|
+
return {
|
|
24
|
+
locator: record.locator,
|
|
25
|
+
key: record.key,
|
|
26
|
+
record: storedRecord(record),
|
|
27
|
+
composed: composedOf(store.composed(record)),
|
|
28
|
+
};
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
uncaught(error);
|
|
34
|
+
}
|
|
35
|
+
const listedNow = listedLocators(runtime, held);
|
|
36
|
+
for (const locator of listedNow) {
|
|
37
|
+
if (!held.has(locator))
|
|
38
|
+
presence.modelled(locator, revoked);
|
|
39
|
+
}
|
|
40
|
+
store.changed(mergeChangeSets(listedNow.map((locator) => changeSet(locator, { documents: null, room: true }))));
|
|
41
|
+
prepare(runtime);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
socket.session.set({
|
|
47
|
+
refusal: {
|
|
48
|
+
code: reason,
|
|
49
|
+
reauthorizationOffered: reason === 'revoked-authorization',
|
|
50
|
+
refusal: provider,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
emitRefusal(runtime);
|
|
54
|
+
}
|
|
55
|
+
}
|
package/dist/replica.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type TypedPath } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { BootstrapInventory, SavedFacts, MutationResult, RoomDeclaration, TypedSelection } from './adapter.js';
|
|
2
3
|
import { type ChangeBatch, type Precondition } from './change.js';
|
|
3
4
|
import { type Collection, type Composition } from './collection.js';
|
|
4
5
|
import { type ModelState } from './model.js';
|
|
@@ -6,13 +7,8 @@ import { type Layer } from './overlay.js';
|
|
|
6
7
|
import type { HeldEntry, OverlayEntry, StoredEntry } from './tables.js';
|
|
7
8
|
export type ReplicaRecord = {
|
|
8
9
|
readonly locator: string;
|
|
9
|
-
readonly
|
|
10
|
-
readonly handle: string;
|
|
11
|
-
readonly operations: OperationScopes;
|
|
12
|
-
readonly replica: ReplicaAdmission;
|
|
10
|
+
readonly declaration: RoomDeclaration;
|
|
13
11
|
readonly model: ModelState;
|
|
14
|
-
readonly typedSelection: TypedSelection | null;
|
|
15
|
-
readonly providerOwnedPaths: readonly string[];
|
|
16
12
|
readonly roomVersion: string;
|
|
17
13
|
readonly transfer: string;
|
|
18
14
|
readonly inventory: BootstrapInventory;
|
|
@@ -22,23 +18,22 @@ export type HeldReplica = {
|
|
|
22
18
|
readonly record: ReplicaRecord;
|
|
23
19
|
readonly queue: readonly ChangeBatch[];
|
|
24
20
|
readonly overlaid: ReadonlySet<string>;
|
|
25
|
-
readonly count: number;
|
|
26
|
-
readonly confirmed: number;
|
|
27
|
-
readonly indexed: boolean;
|
|
28
21
|
};
|
|
29
22
|
export type VisibleLayer = Layer & {
|
|
30
23
|
readonly collection: Collection;
|
|
31
24
|
};
|
|
32
25
|
export type Slice = Layer & {
|
|
33
26
|
readonly written: Readonly<Record<string, string>>;
|
|
27
|
+
readonly facts: Readonly<Record<string, SavedFacts>>;
|
|
34
28
|
readonly held: ReadonlySet<string>;
|
|
35
29
|
};
|
|
36
|
-
export declare function compositionOf(
|
|
30
|
+
export declare function compositionOf(model: ModelState, typedSelection: TypedSelection | null, builtIn: ModelState, typedPaths: readonly TypedPath[]): Composition;
|
|
37
31
|
export declare function storedRecord(record: ReplicaRecord): string;
|
|
38
32
|
export declare function slicing(entries: readonly HeldEntry[], paths: Iterable<string>): Generator<number, Slice, void>;
|
|
33
|
+
export type LayerEntry = Omit<StoredEntry, 'facts'>;
|
|
39
34
|
export declare function entryAt(layer: Layer & {
|
|
40
35
|
readonly written?: Readonly<Record<string, string>>;
|
|
41
|
-
}, path: string):
|
|
36
|
+
}, path: string): LayerEntry | null;
|
|
42
37
|
export declare function slicingWith(slice: Slice, set: readonly StoredEntry[], removed: readonly string[]): Generator<number, Slice, void>;
|
|
43
38
|
export declare function touchedBy(queue: readonly ChangeBatch[]): Set<string>;
|
|
44
39
|
export declare function movedBy(queue: readonly ChangeBatch[], locator: string): Set<string>;
|
|
@@ -47,9 +42,9 @@ export type Replayed = {
|
|
|
47
42
|
readonly touched: ReadonlySet<string>;
|
|
48
43
|
};
|
|
49
44
|
export declare function replaying(confirmed: Slice, queue: readonly ChangeBatch[], locator: string, composition: Composition): Generator<number, Replayed, void>;
|
|
50
|
-
export declare function overlayOf(visible:
|
|
51
|
-
export declare function holds(layer: Layer, preconditions: readonly Precondition[]): boolean;
|
|
52
|
-
export declare function landed(batch: ChangeBatch, confirmed: Layer, current?: Readonly<Record<string, string>>): boolean;
|
|
45
|
+
export declare function overlayOf(visible: VisibleLayer, touched: Iterable<string>): Generator<number, OverlayEntry[], void>;
|
|
46
|
+
export declare function holds(layer: Layer, preconditions: readonly Precondition[], composition: Composition): boolean;
|
|
47
|
+
export declare function landed(batch: ChangeBatch, confirmed: Layer, composition: Composition, current?: Readonly<Record<string, string>>): boolean;
|
|
53
48
|
export type Standing = {
|
|
54
49
|
readonly withdrawn: readonly ChangeBatch[];
|
|
55
50
|
readonly kept: readonly ChangeBatch[];
|
|
@@ -63,6 +58,6 @@ export type Returned = {
|
|
|
63
58
|
readonly removed: readonly string[];
|
|
64
59
|
};
|
|
65
60
|
export declare function returnedPaths(submitted: ChangeBatch, accepted: Accepted): Set<string>;
|
|
66
|
-
export declare function returning(confirmed: Slice, submitted: ChangeBatch, accepted: Accepted, writtenAt: string): Generator<number, Returned, void>;
|
|
61
|
+
export declare function returning(confirmed: Slice, submitted: ChangeBatch, accepted: Accepted, writtenAt: string, composition: Composition): Generator<number, Returned, void>;
|
|
67
62
|
export {};
|
|
68
63
|
//# sourceMappingURL=replica.d.ts.map
|
package/dist/replica.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
|
package/dist/replica.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { equalValue, parse } from '@agentshouse/mdmodel';
|
|
2
|
-
import { immutable, landing } from './change.js';
|
|
3
|
-
import { collectionOf } from './collection.js';
|
|
2
|
+
import { immutable, isPart, landing, } from './change.js';
|
|
3
|
+
import { collectionOf, definitionsAt } from './collection.js';
|
|
4
4
|
import { storedModel } from './model.js';
|
|
5
5
|
import { acceptedBinaries, overlaying } from './overlay.js';
|
|
6
|
+
import { writtenFacts } from './rows.js';
|
|
6
7
|
import { effectiveIn, rewriting } from './save.js';
|
|
8
|
+
import { guarding } from './shared.js';
|
|
7
9
|
import { ROW_WEIGHT } from './turn.js';
|
|
8
|
-
export function compositionOf(
|
|
10
|
+
export function compositionOf(model, typedSelection, builtIn, typedPaths) {
|
|
9
11
|
return {
|
|
10
|
-
model
|
|
11
|
-
selection:
|
|
12
|
-
|
|
13
|
-
: { roots: record.typedSelection.roots, model: builtIn },
|
|
12
|
+
model,
|
|
13
|
+
selection: typedSelection === null ? null : { roots: typedSelection.roots, model: builtIn },
|
|
14
|
+
typedPaths,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
export function storedRecord(record) {
|
|
@@ -35,7 +36,7 @@ function strict(values, held) {
|
|
|
35
36
|
throw new UnreadPath(property);
|
|
36
37
|
}
|
|
37
38
|
};
|
|
38
|
-
return
|
|
39
|
+
return guarding(values, {
|
|
39
40
|
get(target, property, receiver) {
|
|
40
41
|
guard(property);
|
|
41
42
|
return Reflect.get(target, property, receiver);
|
|
@@ -58,9 +59,13 @@ export function* slicing(entries, paths) {
|
|
|
58
59
|
const binaries = {};
|
|
59
60
|
const revisions = {};
|
|
60
61
|
const fileIds = {};
|
|
62
|
+
const created = {};
|
|
61
63
|
const changes = {};
|
|
62
64
|
const written = {};
|
|
65
|
+
const facts = {};
|
|
63
66
|
for (const entry of entries) {
|
|
67
|
+
if (entry.facts !== null)
|
|
68
|
+
facts[entry.path] = entry.facts;
|
|
64
69
|
if (entry.binary !== null)
|
|
65
70
|
binaries[entry.path] = entry.binary;
|
|
66
71
|
else if (entry.content !== null)
|
|
@@ -69,6 +74,8 @@ export function* slicing(entries, paths) {
|
|
|
69
74
|
revisions[entry.path] = entry.revision;
|
|
70
75
|
if (entry.fileId !== null)
|
|
71
76
|
fileIds[entry.path] = entry.fileId;
|
|
77
|
+
if (entry.created !== null)
|
|
78
|
+
created[entry.path] = entry.created;
|
|
72
79
|
if (entry.change !== null)
|
|
73
80
|
changes[entry.path] = entry.change;
|
|
74
81
|
if (entry.written !== null)
|
|
@@ -80,8 +87,10 @@ export function* slicing(entries, paths) {
|
|
|
80
87
|
binaries: strict(binaries, held),
|
|
81
88
|
revisions: strict(revisions, held),
|
|
82
89
|
fileIds: strict(fileIds, held),
|
|
90
|
+
created: strict(created, held),
|
|
83
91
|
changes: strict(changes, held),
|
|
84
92
|
written: strict(written, held),
|
|
93
|
+
facts: strict(facts, held),
|
|
85
94
|
held,
|
|
86
95
|
};
|
|
87
96
|
}
|
|
@@ -96,6 +105,7 @@ export function entryAt(layer, path) {
|
|
|
96
105
|
binary: binary ?? null,
|
|
97
106
|
revision: layer.revisions[path] ?? null,
|
|
98
107
|
fileId: layer.fileIds[path] ?? null,
|
|
108
|
+
created: layer.created[path] ?? null,
|
|
99
109
|
change: layer.changes[path] ?? null,
|
|
100
110
|
written: layer.written?.[path] ?? null,
|
|
101
111
|
};
|
|
@@ -104,8 +114,9 @@ export function* slicingWith(slice, set, removed) {
|
|
|
104
114
|
const entries = new Map();
|
|
105
115
|
for (const path of slice.held) {
|
|
106
116
|
const entry = entryAt(slice, path);
|
|
107
|
-
if (entry !== null)
|
|
108
|
-
entries.set(path, { ...entry, type: null });
|
|
117
|
+
if (entry !== null) {
|
|
118
|
+
entries.set(path, { ...entry, type: null, facts: slice.facts[path] ?? null });
|
|
119
|
+
}
|
|
109
120
|
yield ROW_WEIGHT;
|
|
110
121
|
}
|
|
111
122
|
for (const path of removed)
|
|
@@ -158,7 +169,7 @@ export function* replaying(confirmed, queue, locator, composition) {
|
|
|
158
169
|
for (const change of effective.changes)
|
|
159
170
|
for (const path of changePaths(change))
|
|
160
171
|
touched.add(path);
|
|
161
|
-
layer = yield* overlaying(layer, [effective]);
|
|
172
|
+
layer = yield* overlaying(layer, [effective], composition);
|
|
162
173
|
yield ROW_WEIGHT;
|
|
163
174
|
}
|
|
164
175
|
return {
|
|
@@ -169,8 +180,9 @@ export function* replaying(confirmed, queue, locator, composition) {
|
|
|
169
180
|
export function* overlayOf(visible, touched) {
|
|
170
181
|
const rows = [];
|
|
171
182
|
for (const path of touched) {
|
|
172
|
-
yield ROW_WEIGHT;
|
|
173
183
|
const entry = entryAt(visible, path);
|
|
184
|
+
yield ROW_WEIGHT + (entry?.content?.length ?? 0);
|
|
185
|
+
const text = entry?.binary === null ? entry.content : null;
|
|
174
186
|
rows.push(entry === null
|
|
175
187
|
? {
|
|
176
188
|
path,
|
|
@@ -179,22 +191,29 @@ export function* overlayOf(visible, touched) {
|
|
|
179
191
|
binary: null,
|
|
180
192
|
revision: null,
|
|
181
193
|
fileId: null,
|
|
194
|
+
created: null,
|
|
182
195
|
change: null,
|
|
183
196
|
written: null,
|
|
197
|
+
facts: null,
|
|
184
198
|
}
|
|
185
|
-
: {
|
|
199
|
+
: {
|
|
200
|
+
...entry,
|
|
201
|
+
written: null,
|
|
202
|
+
present: true,
|
|
203
|
+
facts: text === null ? null : writtenFacts(path, text, visible.collection.composition),
|
|
204
|
+
});
|
|
186
205
|
}
|
|
187
206
|
return rows;
|
|
188
207
|
}
|
|
189
208
|
function present(layer, path) {
|
|
190
209
|
return layer.documents[path] !== undefined || layer.binaries[path] !== undefined;
|
|
191
210
|
}
|
|
192
|
-
export function holds(layer, preconditions) {
|
|
211
|
+
export function holds(layer, preconditions, composition) {
|
|
193
212
|
const parsed = new Map();
|
|
194
213
|
const documentAt = (path) => {
|
|
195
214
|
if (!parsed.has(path)) {
|
|
196
215
|
const text = layer.documents[path];
|
|
197
|
-
const opened = text === undefined ? null : parse(text, path);
|
|
216
|
+
const opened = text === undefined ? null : parse(text, path, definitionsAt(composition, path));
|
|
198
217
|
parsed.set(path, opened?.ok === true ? opened.document : null);
|
|
199
218
|
}
|
|
200
219
|
return parsed.get(path) ?? null;
|
|
@@ -228,7 +247,7 @@ export function holds(layer, preconditions) {
|
|
|
228
247
|
}
|
|
229
248
|
function effects(change) {
|
|
230
249
|
const path = change.path;
|
|
231
|
-
if (change
|
|
250
|
+
if (isPart(change)) {
|
|
232
251
|
return [change];
|
|
233
252
|
}
|
|
234
253
|
if (change.kind === 'create' && !('content' in change)) {
|
|
@@ -254,11 +273,11 @@ function effects(change) {
|
|
|
254
273
|
{ kind: 'present', path: change.to },
|
|
255
274
|
];
|
|
256
275
|
}
|
|
257
|
-
if (change.kind === '
|
|
276
|
+
if (change.kind === 'arrival')
|
|
258
277
|
return [{ kind: 'present', path }];
|
|
259
278
|
return [{ kind: 'absent', path }];
|
|
260
279
|
}
|
|
261
|
-
export function landed(batch, confirmed, current = {}) {
|
|
280
|
+
export function landed(batch, confirmed, composition, current = {}) {
|
|
262
281
|
const documents = new Proxy(confirmed.documents, {
|
|
263
282
|
get(target, property, receiver) {
|
|
264
283
|
if (typeof property === 'string' && Object.hasOwn(current, property))
|
|
@@ -278,9 +297,9 @@ export function landed(batch, confirmed, current = {}) {
|
|
|
278
297
|
}
|
|
279
298
|
return effects(change).every((effect) => {
|
|
280
299
|
if (effect.kind === 'absent')
|
|
281
|
-
return holds(layer, [effect]);
|
|
300
|
+
return holds(layer, [effect], composition);
|
|
282
301
|
const at = landing(batch.changes, index, effect.path);
|
|
283
|
-
return at === null || holds(layer, [{ ...effect, path: at }]);
|
|
302
|
+
return at === null || holds(layer, [{ ...effect, path: at }], composition);
|
|
284
303
|
});
|
|
285
304
|
});
|
|
286
305
|
}
|
|
@@ -305,7 +324,7 @@ export function* standing(confirmed, queue, withdrawable, local, locator, compos
|
|
|
305
324
|
const withdrawn = [];
|
|
306
325
|
const kept = [];
|
|
307
326
|
for (const batch of queue) {
|
|
308
|
-
if (withdrawable(batch) && !holds(layer, batch.preconditions)) {
|
|
327
|
+
if (withdrawable(batch) && !holds(layer, batch.preconditions, composition)) {
|
|
309
328
|
withdrawn.push(batch);
|
|
310
329
|
continue;
|
|
311
330
|
}
|
|
@@ -316,7 +335,7 @@ export function* standing(confirmed, queue, withdrawable, local, locator, compos
|
|
|
316
335
|
})
|
|
317
336
|
: batch;
|
|
318
337
|
let unapplied = false;
|
|
319
|
-
const next = yield* overlaying(layer, [effective], () => {
|
|
338
|
+
const next = yield* overlaying(layer, [effective], composition, () => {
|
|
320
339
|
unapplied = true;
|
|
321
340
|
});
|
|
322
341
|
if (local && unapplied) {
|
|
@@ -347,17 +366,20 @@ export function returnedPaths(submitted, accepted) {
|
|
|
347
366
|
}
|
|
348
367
|
return paths;
|
|
349
368
|
}
|
|
350
|
-
export function* returning(confirmed, submitted, accepted, writtenAt) {
|
|
369
|
+
export function* returning(confirmed, submitted, accepted, writtenAt, composition) {
|
|
351
370
|
const documents = new Map();
|
|
352
371
|
const binaries = new Map();
|
|
353
372
|
const revisions = new Map();
|
|
354
373
|
const fileIds = new Map();
|
|
374
|
+
const created = new Map();
|
|
355
375
|
const changes = new Map();
|
|
356
376
|
const written = new Map();
|
|
377
|
+
const facts = new Map();
|
|
357
378
|
const read = (changed, held, path) => (changed.has(path) ? changed.get(path) : held[path]);
|
|
358
379
|
for (const [path, content] of Object.entries(accepted.documents)) {
|
|
359
|
-
yield ROW_WEIGHT;
|
|
380
|
+
yield ROW_WEIGHT + content.length;
|
|
360
381
|
documents.set(path, content);
|
|
382
|
+
facts.set(path, writtenFacts(path, content, composition));
|
|
361
383
|
fileIds.set(path, undefined);
|
|
362
384
|
written.set(path, writtenAt);
|
|
363
385
|
}
|
|
@@ -380,48 +402,60 @@ export function* returning(confirmed, submitted, accepted, writtenAt) {
|
|
|
380
402
|
written.set(path, undefined);
|
|
381
403
|
}
|
|
382
404
|
for (const change of submitted.changes) {
|
|
383
|
-
if (change.kind === 'arrival'
|
|
384
|
-
if (accepted.revisions[change.path]
|
|
405
|
+
if (change.kind === 'arrival') {
|
|
406
|
+
if (accepted.revisions[change.path] === undefined)
|
|
407
|
+
continue;
|
|
408
|
+
created.set(change.path, change.created);
|
|
409
|
+
if ('binary' in change)
|
|
385
410
|
binaries.set(change.path, { state: 'accepted', ...change.binary });
|
|
386
|
-
}
|
|
387
411
|
continue;
|
|
388
412
|
}
|
|
389
|
-
if (change.kind !== 'move')
|
|
413
|
+
if (change.kind !== 'move' || accepted.revisions[change.to] === undefined)
|
|
390
414
|
continue;
|
|
415
|
+
created.set(change.to, read(created, confirmed.created, change.path));
|
|
416
|
+
created.set(change.path, undefined);
|
|
391
417
|
const moved = read(binaries, confirmed.binaries, change.path);
|
|
392
|
-
if (moved === undefined
|
|
418
|
+
if (moved === undefined)
|
|
393
419
|
continue;
|
|
394
420
|
binaries.set(change.to, moved);
|
|
395
421
|
binaries.set(change.path, undefined);
|
|
396
422
|
}
|
|
397
423
|
for (const [path, binary] of acceptedBinaries(accepted.binaryFiles ?? {}))
|
|
398
424
|
binaries.set(path, binary);
|
|
399
|
-
for (const path of accepted.removals)
|
|
425
|
+
for (const path of accepted.removals) {
|
|
400
426
|
binaries.set(path, undefined);
|
|
427
|
+
created.set(path, undefined);
|
|
428
|
+
}
|
|
401
429
|
const paths = new Set([
|
|
402
430
|
...documents.keys(),
|
|
403
431
|
...binaries.keys(),
|
|
404
432
|
...revisions.keys(),
|
|
405
433
|
...fileIds.keys(),
|
|
434
|
+
...created.keys(),
|
|
406
435
|
...changes.keys(),
|
|
407
436
|
...written.keys(),
|
|
408
437
|
]);
|
|
409
438
|
const set = [];
|
|
410
439
|
const removed = [];
|
|
411
440
|
for (const path of paths) {
|
|
412
|
-
yield ROW_WEIGHT;
|
|
413
441
|
const content = read(documents, confirmed.documents, path);
|
|
414
442
|
const binary = read(binaries, confirmed.binaries, path);
|
|
443
|
+
yield ROW_WEIGHT;
|
|
415
444
|
if (content === undefined && binary === undefined) {
|
|
416
445
|
removed.push(path);
|
|
417
446
|
continue;
|
|
418
447
|
}
|
|
448
|
+
const text = binary === undefined ? (content ?? null) : null;
|
|
449
|
+
const fresh = confirmed.documents[path] === undefined && confirmed.binaries[path] === undefined;
|
|
419
450
|
set.push({
|
|
420
451
|
path,
|
|
421
|
-
content:
|
|
452
|
+
content: text,
|
|
453
|
+
facts: text === null ? null : (read(facts, confirmed.facts, path) ?? null),
|
|
422
454
|
binary: binary ?? null,
|
|
423
455
|
revision: read(revisions, confirmed.revisions, path) ?? null,
|
|
424
456
|
fileId: read(fileIds, confirmed.fileIds, path) ?? null,
|
|
457
|
+
created: read(created, confirmed.created, path) ??
|
|
458
|
+
(fresh ? (read(changes, confirmed.changes, path)?.time ?? null) : null),
|
|
425
459
|
change: read(changes, confirmed.changes, path) ?? null,
|
|
426
460
|
written: read(written, confirmed.written, path) ?? null,
|
|
427
461
|
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type RuntimeShell } from './durability.js';
|
|
2
|
+
export declare const STEPS: readonly ['database', 'sign_in', 'connection', 'code', 'download', 'conversations', 'sending', 'reading'];
|
|
3
|
+
export type Step = (typeof STEPS)[number];
|
|
4
|
+
export type RetriedFailure = {
|
|
5
|
+
readonly step: Step;
|
|
6
|
+
readonly answered: false;
|
|
7
|
+
} | {
|
|
8
|
+
readonly step: Step;
|
|
9
|
+
readonly answered: true;
|
|
10
|
+
readonly error: unknown;
|
|
11
|
+
};
|
|
12
|
+
export type Uncertain = {
|
|
13
|
+
readonly failure?: unknown;
|
|
14
|
+
};
|
|
15
|
+
export type Attempt = {
|
|
16
|
+
readonly step: Step;
|
|
17
|
+
readonly instance: string;
|
|
18
|
+
};
|
|
19
|
+
export declare class Unanswered extends Error {
|
|
20
|
+
}
|
|
21
|
+
export declare function uncertainError(uncertainty: Uncertain): unknown;
|
|
22
|
+
export type Retries = {
|
|
23
|
+
failed(step: Step, instance: string, error: unknown): void;
|
|
24
|
+
unanswered(step: Step, instance: string): void;
|
|
25
|
+
uncertain(step: Step, instance: string, uncertainty: Uncertain): void;
|
|
26
|
+
succeeded(step: Step, instance: string): void;
|
|
27
|
+
};
|
|
28
|
+
export declare function createRetries(shell: Pick<RuntimeShell, 'retried' | 'succeeded'>): Retries;
|
|
29
|
+
export declare function retrying<T>(retries: Retries, step: Step, instance: string, ask: () => Promise<T>): () => Promise<T>;
|
|
30
|
+
//# sourceMappingURL=retried.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retried.d.ts","sourceRoot":"","sources":["../src/retried.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAErE,eAAO,MAAM,KAAK,YAChB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,CACD,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3D,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IACtE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,GAAG,OAAO,CA2CzF;AAED,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACpB,MAAM,OAAO,CAAC,CAAC,CAAC,CAYlB"}
|
package/dist/retried.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { refusedForSpace } from './durability.js';
|
|
2
|
+
export const STEPS = [
|
|
3
|
+
'database',
|
|
4
|
+
'sign_in',
|
|
5
|
+
'connection',
|
|
6
|
+
'code',
|
|
7
|
+
'download',
|
|
8
|
+
'conversations',
|
|
9
|
+
'sending',
|
|
10
|
+
'reading',
|
|
11
|
+
];
|
|
12
|
+
export class Unanswered extends Error {
|
|
13
|
+
}
|
|
14
|
+
export function uncertainError(uncertainty) {
|
|
15
|
+
return 'failure' in uncertainty ? uncertainty.failure : new Unanswered();
|
|
16
|
+
}
|
|
17
|
+
export function createRetries(shell) {
|
|
18
|
+
const failing = new Map();
|
|
19
|
+
const handedErrors = new WeakSet();
|
|
20
|
+
function failingIn(step, instance) {
|
|
21
|
+
const instances = failing.get(step) ?? new Set();
|
|
22
|
+
instances.add(instance);
|
|
23
|
+
failing.set(step, instances);
|
|
24
|
+
}
|
|
25
|
+
function handed(failure, instance) {
|
|
26
|
+
failingIn(failure.step, instance);
|
|
27
|
+
shell.retried?.(failure);
|
|
28
|
+
}
|
|
29
|
+
const retries = {
|
|
30
|
+
failed(step, instance, error) {
|
|
31
|
+
if (refusedForSpace(error))
|
|
32
|
+
return;
|
|
33
|
+
if (typeof error === 'object' && error !== null) {
|
|
34
|
+
if (handedErrors.has(error)) {
|
|
35
|
+
failingIn(step, instance);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
handedErrors.add(error);
|
|
39
|
+
}
|
|
40
|
+
if (error instanceof Unanswered)
|
|
41
|
+
retries.unanswered(step, instance);
|
|
42
|
+
else
|
|
43
|
+
handed({ step, answered: true, error }, instance);
|
|
44
|
+
},
|
|
45
|
+
unanswered(step, instance) {
|
|
46
|
+
handed({ step, answered: false }, instance);
|
|
47
|
+
},
|
|
48
|
+
uncertain(step, instance, uncertainty) {
|
|
49
|
+
if ('failure' in uncertainty)
|
|
50
|
+
retries.failed(step, instance, uncertainty.failure);
|
|
51
|
+
else
|
|
52
|
+
retries.unanswered(step, instance);
|
|
53
|
+
},
|
|
54
|
+
succeeded(step, instance) {
|
|
55
|
+
const instances = failing.get(step);
|
|
56
|
+
if (instances === undefined || !instances.delete(instance) || instances.size > 0)
|
|
57
|
+
return;
|
|
58
|
+
failing.delete(step);
|
|
59
|
+
shell.succeeded?.(step);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
return retries;
|
|
63
|
+
}
|
|
64
|
+
export function retrying(retries, step, instance, ask) {
|
|
65
|
+
return () => ask().then((answer) => {
|
|
66
|
+
retries.succeeded(step, instance);
|
|
67
|
+
return answer;
|
|
68
|
+
}, (error) => {
|
|
69
|
+
retries.failed(step, instance, error);
|
|
70
|
+
throw error;
|
|
71
|
+
});
|
|
72
|
+
}
|
package/dist/room-draft.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ApplyResult, type Definition, type DefinitionOf, type Document } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { HeadChange, ProviderRefusal } from './adapter.js';
|
|
2
3
|
import type { Open } from './open.js';
|
|
3
|
-
import type { Change, Precondition } from './change.js';
|
|
4
|
+
import type { Change, PartChange, Precondition } from './change.js';
|
|
4
5
|
import type { VisibleLayer } from './replica.js';
|
|
5
6
|
export type FieldValue = {
|
|
6
7
|
readonly value: unknown;
|
|
@@ -90,15 +91,30 @@ type ChangedUnderneath = {
|
|
|
90
91
|
readonly file?: string | null;
|
|
91
92
|
};
|
|
92
93
|
export type ReturnReason = ProviderRefusal & {
|
|
93
|
-
readonly kind: Open<'conflicted' | 'rejected' | '
|
|
94
|
+
readonly kind: Open<'conflicted' | 'rejected' | 'withdrawn'>;
|
|
95
|
+
};
|
|
96
|
+
export declare function returnedBy(): ReturnReason;
|
|
97
|
+
type Mark = {
|
|
98
|
+
readonly change: HeadChange | null;
|
|
99
|
+
};
|
|
100
|
+
export type Marks = {
|
|
101
|
+
readonly fields?: Readonly<Record<string, Mark & {
|
|
102
|
+
readonly current: FieldValue;
|
|
103
|
+
}>>;
|
|
104
|
+
readonly sections?: Readonly<Record<string, Mark>>;
|
|
105
|
+
readonly preamble?: Mark;
|
|
106
|
+
readonly markdown?: Mark;
|
|
107
|
+
readonly file?: Mark & {
|
|
108
|
+
readonly current: string;
|
|
109
|
+
};
|
|
94
110
|
};
|
|
95
|
-
export declare function returnedBy(kind: 'expired' | 'withdrawn'): ReturnReason;
|
|
96
111
|
export type RoomDraft = {
|
|
97
112
|
readonly room: string;
|
|
98
113
|
readonly path: string;
|
|
99
114
|
readonly revision: string;
|
|
100
115
|
readonly parts: HeldParts;
|
|
101
116
|
readonly changedUnderneath: ChangedUnderneath;
|
|
117
|
+
readonly marks: Marks;
|
|
102
118
|
readonly returned: ReturnReason | null;
|
|
103
119
|
};
|
|
104
120
|
export type RoomDraftWrite = {
|
|
@@ -106,8 +122,6 @@ export type RoomDraftWrite = {
|
|
|
106
122
|
readonly roomDraft: RoomDraft | null;
|
|
107
123
|
} | {
|
|
108
124
|
readonly outcome: 'stale';
|
|
109
|
-
readonly code: string;
|
|
110
|
-
readonly retryable: boolean;
|
|
111
125
|
readonly current: RoomDraft | null;
|
|
112
126
|
};
|
|
113
127
|
export declare function staleWrite(current: RoomDraft | null): RoomDraftWrite;
|
|
@@ -121,19 +135,30 @@ export type RoomDraftRecord = {
|
|
|
121
135
|
readonly path: string;
|
|
122
136
|
readonly revision: string;
|
|
123
137
|
readonly parts: HeldParts;
|
|
138
|
+
readonly marks: Marks;
|
|
124
139
|
readonly returned: ReturnReason | null;
|
|
125
140
|
};
|
|
126
141
|
export type SavedDraft = {
|
|
127
142
|
readonly path: string;
|
|
128
143
|
readonly parts: HeldParts;
|
|
129
144
|
};
|
|
130
|
-
export declare function readParts(value: unknown): RoomDraftParts;
|
|
145
|
+
export declare function readParts(value: unknown, path: string): RoomDraftParts;
|
|
131
146
|
export declare function gatheredParts(earlier: unknown, later: unknown): unknown;
|
|
132
147
|
export declare function held(current: HeldParts | undefined, parts: RoomDraftParts, file?: HeldFile): HeldParts;
|
|
133
148
|
export declare function underneath(parts: HeldParts, path: string, visible: VisibleLayer | undefined): ChangedUnderneath;
|
|
134
149
|
export declare function heldFile(blob: Blob, base: string | null): Promise<HeldFile>;
|
|
135
150
|
export declare function binaryBase(visible: VisibleLayer | undefined, path: string): string | null;
|
|
136
151
|
export declare function changedParts(path: string, parts: HeldParts, visible: VisibleLayer | undefined): readonly ChangedPart[];
|
|
152
|
+
export declare function marksOver(kept: Marks, under: Marks): Marks;
|
|
153
|
+
export declare function heldMarks(marks: Marks, parts: HeldParts): Marks;
|
|
154
|
+
export declare function partsBetween(path: string, before: Document, after: Document): PartChange[];
|
|
155
|
+
export declare function applyParts(document: Document, changes: readonly Change[], definition: Definition | undefined): ApplyResult;
|
|
156
|
+
type Joined = {
|
|
157
|
+
readonly parts: HeldParts;
|
|
158
|
+
readonly marks: Marks;
|
|
159
|
+
};
|
|
160
|
+
export declare function joinedOver(parts: HeldParts, marks: Marks, path: string, visible: VisibleLayer): Joined | null;
|
|
161
|
+
export declare function lineEnded(text: string): string;
|
|
137
162
|
export type TextParts = {
|
|
138
163
|
readonly fields?: Readonly<Record<string, {
|
|
139
164
|
readonly value: unknown;
|
|
@@ -145,8 +170,8 @@ export type TextParts = {
|
|
|
145
170
|
readonly value: string;
|
|
146
171
|
};
|
|
147
172
|
};
|
|
148
|
-
export declare function partsAfter(markdown: string, parts: TextParts): string;
|
|
149
|
-
export declare function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts;
|
|
173
|
+
export declare function partsAfter(markdown: string, parts: TextParts, definitions?: DefinitionOf): string | null;
|
|
174
|
+
export declare function returnedInto(existing: HeldParts | undefined, returned: HeldParts, definitions?: DefinitionOf): HeldParts | null;
|
|
150
175
|
export declare function moveTarget(move: {
|
|
151
176
|
readonly to: string;
|
|
152
177
|
}): string;
|
|
@@ -168,7 +193,6 @@ export declare function changesOf(path: string, parts: HeldParts): {
|
|
|
168
193
|
changes: readonly Change[];
|
|
169
194
|
bases: readonly Precondition[];
|
|
170
195
|
};
|
|
171
|
-
export declare function joinedDraft(carried: SavedDraft, saved: readonly SavedDraft[]): SavedDraft;
|
|
172
196
|
export declare function withdrawnDrafts(drafts: readonly SavedDraft[], changes: readonly Change[]): readonly SavedDraft[];
|
|
173
197
|
export {};
|
|
174
198
|
//# sourceMappingURL=room-draft.d.ts.map
|