@agentshouse/mdruntime 0.1.0-cba6f2439bb25 → 0.1.0-cbbae1fff01c6
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 +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +308 -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 +95 -103
- 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 +12 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +213 -89
- 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 +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 +24 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -5
- package/dist/collection.d.ts +23 -7
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +13 -19
- package/dist/compile.d.ts +6 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +272 -332
- package/dist/connection.d.ts +5 -143
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +105 -5253
- 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 +135 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +247 -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 +41 -47
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +874 -911
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +148 -0
- package/dist/durability.d.ts +15 -1
- 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 +20 -8
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +44 -34
- 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 +28 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/install.d.ts +54 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +538 -0
- package/dist/job.d.ts +5 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +7 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +272 -0
- package/dist/listing.d.ts +48 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +139 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +64 -23
- package/dist/locks.d.ts +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +33 -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 +50 -0
- package/dist/media.d.ts +2 -2
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +22 -12
- package/dist/memory.d.ts +14 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +177 -85
- package/dist/messages.d.ts +24 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +89 -31
- package/dist/model.d.ts +2 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -23
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +156 -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.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 +59 -0
- package/dist/outcome.d.ts +4 -4
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +3 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +43 -21
- package/dist/parts.d.ts +11 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +21 -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/presence.d.ts +52 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +220 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +270 -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 +34 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +122 -0
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +455 -0
- package/dist/reach.d.ts +15 -13
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +187 -140
- package/dist/react.d.ts +14 -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 +2 -16
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +4 -10
- package/dist/reads.d.ts +36 -10
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +160 -77
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +35 -1
- package/dist/refresh.d.ts +7 -5
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +35 -7
- 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 +11 -17
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +64 -34
- package/dist/room-draft.d.ts +7 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +100 -103
- 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 +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 +41 -86
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +239 -116
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +413 -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 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +13 -105
- package/dist/shown.d.ts +32 -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/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 +170 -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 -6
- 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 +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 +210 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +428 -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 +110 -157
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +162 -394
- package/dist/stored.d.ts +59 -38
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +287 -206
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +223 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +521 -0
- package/dist/tables.d.ts +116 -56
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +214 -98
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- 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 +42 -100
- 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 +21 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +10 -4
- package/package.json +3 -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/outcome.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"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"}
|
package/dist/outcome.js
CHANGED
|
@@ -44,6 +44,9 @@ export function lockedRoom(locator) {
|
|
|
44
44
|
return { kind: ROOM_LOCKED, locator, code: ROOM_LOCKED, fields: {}, retryable: true };
|
|
45
45
|
}
|
|
46
46
|
export const OFFLINE = { kind: 'offline' };
|
|
47
|
+
export function answeredResult(value) {
|
|
48
|
+
return typeof value === 'object' && value !== null && !('pending' in value);
|
|
49
|
+
}
|
|
47
50
|
export const UNCERTAIN = {
|
|
48
51
|
kind: 'transport-uncertainty',
|
|
49
52
|
code: 'transport-uncertainty',
|
package/dist/overlay.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { BinaryFile, HeadChange } from './adapter.js';
|
|
2
|
+
import { type Composition } from './collection.js';
|
|
2
3
|
import type { ChangeBatch } from './change.js';
|
|
3
4
|
export type Heads = {
|
|
4
5
|
revisions: Readonly<Record<string, string>>;
|
|
5
6
|
fileIds: Readonly<Record<string, string>>;
|
|
7
|
+
created: Readonly<Record<string, string>>;
|
|
6
8
|
changes: Readonly<Record<string, HeadChange>>;
|
|
7
9
|
};
|
|
8
10
|
export type HeldBinary = ({
|
|
@@ -21,5 +23,5 @@ export type Layer = Heads & {
|
|
|
21
23
|
export declare function acceptedBinaries(files: Readonly<Record<string, BinaryFile>>): Generator<readonly [string, HeldBinary]>;
|
|
22
24
|
export declare function sameBinary(left: HeldBinary | undefined, right: HeldBinary | undefined): boolean;
|
|
23
25
|
export declare function sameChange(left: HeadChange | undefined, right: HeadChange | undefined): boolean;
|
|
24
|
-
export declare function overlaying(base: Layer, queue: readonly ChangeBatch[], unapplied?: () => void): Generator<number, Layer, void>;
|
|
26
|
+
export declare function overlaying(base: Layer, queue: readonly ChangeBatch[], composition: Composition, unapplied?: () => void): Generator<number, Layer, void>;
|
|
25
27
|
//# sourceMappingURL=overlay.d.ts.map
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAIrE,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG,UAAU,CAAC,GAC7C;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAiB,gBAAgB,CAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAC1C,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAE1C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAW/F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAQ/F;AA+ND,wBAAiB,UAAU,CACzB,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,WAAW,EAAE,WAAW,EACxB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAsChC"}
|
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { apply, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
|
|
1
|
+
import { apply, create, frontmatterValue, parse, serialize, TYPE_FIELD, } from '@agentshouse/mdmodel';
|
|
2
|
+
import { definitionsAt } from './collection.js';
|
|
2
3
|
import { drafted, entriesIn, settling } from './shared.js';
|
|
3
4
|
import { ROW_WEIGHT } from './turn.js';
|
|
4
5
|
export function* acceptedBinaries(files) {
|
|
@@ -24,7 +25,6 @@ export function sameChange(left, right) {
|
|
|
24
25
|
left.author?.id === right.author?.id &&
|
|
25
26
|
left.author?.name === right.author?.name);
|
|
26
27
|
}
|
|
27
|
-
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
28
28
|
function isPart(change) {
|
|
29
29
|
return change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble';
|
|
30
30
|
}
|
|
@@ -53,16 +53,23 @@ function* priorsOf(preconditions) {
|
|
|
53
53
|
preamble: (path) => preambles.get(path) ?? '',
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
-
function compose(fields, sections) {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
function compose(path, fields, sections, composition) {
|
|
57
|
+
const declared = fields[TYPE_FIELD];
|
|
58
|
+
const type = typeof declared === 'string' && declared !== '' ? declared : undefined;
|
|
59
|
+
const definition = definitionsAt(composition, path)(type);
|
|
60
|
+
const created = create(type, definition);
|
|
61
|
+
const next = apply(created, [
|
|
62
|
+
...Object.entries(fields).flatMap(([name, value]) => (name !== TYPE_FIELD || type === undefined) && frontmatterValue(value)
|
|
63
|
+
? [{ kind: 'field', name, value, prior: undefined }]
|
|
64
|
+
: []),
|
|
65
|
+
...Object.entries(sections).map(([name, value]) => ({
|
|
66
|
+
kind: 'section',
|
|
67
|
+
name,
|
|
68
|
+
value,
|
|
69
|
+
prior: undefined,
|
|
70
|
+
})),
|
|
71
|
+
], definition);
|
|
72
|
+
return serialize(next.outcome === 'applied' ? next.document : created);
|
|
66
73
|
}
|
|
67
74
|
function edited(change, priors) {
|
|
68
75
|
if (change.kind === 'field')
|
|
@@ -81,17 +88,19 @@ function edited(change, priors) {
|
|
|
81
88
|
prior: priors.section(change.path, change.name),
|
|
82
89
|
};
|
|
83
90
|
}
|
|
84
|
-
function edit(staged, changes, priors) {
|
|
91
|
+
function edit(staged, changes, priors, composition) {
|
|
85
92
|
const path = changes[0].path;
|
|
86
93
|
delete staged.revisions[path];
|
|
87
94
|
const text = staged.documents[path];
|
|
88
95
|
if (text === undefined)
|
|
89
96
|
return changes.length;
|
|
90
|
-
const
|
|
97
|
+
const definitions = definitionsAt(composition, path);
|
|
98
|
+
const parsed = parse(text, path, definitions);
|
|
91
99
|
if (!parsed.ok)
|
|
92
100
|
return changes.length;
|
|
101
|
+
const definition = definitions(parsed.document.type);
|
|
93
102
|
const wanted = changes.map((change) => edited(change, priors));
|
|
94
|
-
const first = apply(parsed.document, wanted);
|
|
103
|
+
const first = apply(parsed.document, wanted, definition);
|
|
95
104
|
if (first.outcome === 'refuse')
|
|
96
105
|
return changes.length;
|
|
97
106
|
if (first.outcome === 'applied') {
|
|
@@ -100,7 +109,7 @@ function edit(staged, changes, priors) {
|
|
|
100
109
|
}
|
|
101
110
|
const stale = new Set(first.stale);
|
|
102
111
|
const kept = wanted.filter((_, at) => !stale.has(at));
|
|
103
|
-
const rest = apply(parsed.document, kept);
|
|
112
|
+
const rest = apply(parsed.document, kept, definition);
|
|
104
113
|
if (rest.outcome !== 'applied')
|
|
105
114
|
return changes.length;
|
|
106
115
|
staged.documents[path] = serialize(rest.document);
|
|
@@ -125,16 +134,21 @@ function relocate(staged, from, to) {
|
|
|
125
134
|
function moveHead(heads, from, to) {
|
|
126
135
|
const revision = heads.revisions[from];
|
|
127
136
|
const fileId = heads.fileIds[from];
|
|
137
|
+
const created = heads.created[from];
|
|
128
138
|
const change = heads.changes[from];
|
|
129
139
|
delete heads.revisions[from];
|
|
130
140
|
delete heads.fileIds[from];
|
|
141
|
+
delete heads.created[from];
|
|
131
142
|
delete heads.changes[from];
|
|
132
143
|
delete heads.fileIds[to];
|
|
144
|
+
delete heads.created[to];
|
|
133
145
|
delete heads.changes[to];
|
|
134
146
|
if (revision !== undefined)
|
|
135
147
|
heads.revisions[to] = revision;
|
|
136
148
|
if (fileId !== undefined)
|
|
137
149
|
heads.fileIds[to] = fileId;
|
|
150
|
+
if (created !== undefined)
|
|
151
|
+
heads.created[to] = created;
|
|
138
152
|
if (change !== undefined)
|
|
139
153
|
heads.changes[to] = change;
|
|
140
154
|
}
|
|
@@ -142,14 +156,18 @@ function erase(staged, path) {
|
|
|
142
156
|
delete staged.documents[path];
|
|
143
157
|
delete staged.revisions[path];
|
|
144
158
|
delete staged.fileIds[path];
|
|
159
|
+
delete staged.created[path];
|
|
145
160
|
delete staged.changes[path];
|
|
146
161
|
delete staged.binaries[path];
|
|
147
162
|
}
|
|
148
|
-
function stage(staged, change) {
|
|
163
|
+
function stage(staged, change, composition) {
|
|
149
164
|
if (change.kind === 'create') {
|
|
150
165
|
staged.documents[change.path] =
|
|
151
|
-
'content' in change
|
|
166
|
+
'content' in change
|
|
167
|
+
? change.content
|
|
168
|
+
: compose(change.path, change.fields, change.sections, composition);
|
|
152
169
|
delete staged.fileIds[change.path];
|
|
170
|
+
delete staged.created[change.path];
|
|
153
171
|
delete staged.changes[change.path];
|
|
154
172
|
return true;
|
|
155
173
|
}
|
|
@@ -194,15 +212,18 @@ function arrive(heads, change) {
|
|
|
194
212
|
heads.revisions[change.path] = change.revision;
|
|
195
213
|
if (change.fileId !== undefined)
|
|
196
214
|
heads.fileIds[change.path] = change.fileId;
|
|
215
|
+
if (change.created !== undefined)
|
|
216
|
+
heads.created[change.path] = change.created;
|
|
197
217
|
if (change.change !== undefined)
|
|
198
218
|
heads.changes[change.path] = change.change;
|
|
199
219
|
}
|
|
200
|
-
export function* overlaying(base, queue, unapplied) {
|
|
220
|
+
export function* overlaying(base, queue, composition, unapplied) {
|
|
201
221
|
const staged = {
|
|
202
222
|
documents: drafted(base.documents),
|
|
203
223
|
binaries: drafted(base.binaries),
|
|
204
224
|
revisions: drafted(base.revisions),
|
|
205
225
|
fileIds: drafted(base.fileIds),
|
|
226
|
+
created: drafted(base.created),
|
|
206
227
|
changes: drafted(base.changes),
|
|
207
228
|
};
|
|
208
229
|
for (const batch of queue) {
|
|
@@ -210,7 +231,7 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
210
231
|
for (let index = 0; index < batch.changes.length; index += 1) {
|
|
211
232
|
const change = batch.changes[index];
|
|
212
233
|
if (!isPart(change)) {
|
|
213
|
-
if (!stage(staged, change))
|
|
234
|
+
if (!stage(staged, change, composition))
|
|
214
235
|
unapplied?.();
|
|
215
236
|
yield ROW_WEIGHT;
|
|
216
237
|
continue;
|
|
@@ -224,7 +245,7 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
224
245
|
index += 1;
|
|
225
246
|
}
|
|
226
247
|
const text = staged.documents[change.path] ?? '';
|
|
227
|
-
for (let left = edit(staged, run, priors); left > 0; left -= 1)
|
|
248
|
+
for (let left = edit(staged, run, priors, composition); left > 0; left -= 1)
|
|
228
249
|
unapplied?.();
|
|
229
250
|
yield ROW_WEIGHT + text.length;
|
|
230
251
|
}
|
|
@@ -234,6 +255,7 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
234
255
|
binaries: yield* settling(staged.binaries),
|
|
235
256
|
revisions: yield* settling(staged.revisions),
|
|
236
257
|
fileIds: yield* settling(staged.fileIds),
|
|
258
|
+
created: yield* settling(staged.created),
|
|
237
259
|
changes: yield* settling(staged.changes),
|
|
238
260
|
};
|
|
239
261
|
}
|
package/dist/parts.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Part, type SessionState } from '@agentshouse/session-content';
|
|
2
|
+
export type ChatWork = {
|
|
3
|
+
readonly kind: 'job' | 'schedule' | 'subagent';
|
|
4
|
+
readonly title: string;
|
|
5
|
+
readonly next: string | null;
|
|
6
|
+
readonly activity: string | null;
|
|
7
|
+
};
|
|
8
|
+
export declare function counted(count: number): string;
|
|
9
|
+
export declare function runningLine(parts: readonly Part[]): string | null;
|
|
10
|
+
export declare function workOf(state: SessionState | null): readonly ChatWork[];
|
|
11
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGnF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAMjE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,QAAQ,EAAE,CAOtE"}
|
package/dist/parts.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isOwn } from '@agentshouse/session-content';
|
|
2
|
+
import { excerpt } from './read.js';
|
|
3
|
+
export function counted(count) {
|
|
4
|
+
return count === 1 ? '1 command' : `${count} commands`;
|
|
5
|
+
}
|
|
6
|
+
export function runningLine(parts) {
|
|
7
|
+
const newest = parts.filter(isOwn).reverse();
|
|
8
|
+
const note = newest.find((part) => part.type === 'text' && part.text.trim() !== '');
|
|
9
|
+
if (note?.type === 'text')
|
|
10
|
+
return excerpt(note.text);
|
|
11
|
+
const call = newest.find((part) => part.type === 'call');
|
|
12
|
+
return call?.type === 'call' && call.line !== '' ? call.line : null;
|
|
13
|
+
}
|
|
14
|
+
export function workOf(state) {
|
|
15
|
+
return (state?.running ?? []).map(({ kind, label, progress, next }) => ({
|
|
16
|
+
kind: kind === 'subagent' || kind === 'schedule' ? kind : 'job',
|
|
17
|
+
title: label,
|
|
18
|
+
next,
|
|
19
|
+
activity: progress,
|
|
20
|
+
}));
|
|
21
|
+
}
|
package/dist/paths.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare function normalize(path: string): string | null;
|
|
2
2
|
export declare function beneath(prefix: string, path: string): boolean;
|
|
3
3
|
export declare function covered(prefixes: readonly string[], path: string): boolean;
|
|
4
|
+
export declare function authoredAt(patterns: readonly string[], path: string): boolean;
|
|
4
5
|
export declare function ancestors(path: string): readonly string[];
|
|
5
6
|
//# sourceMappingURL=paths.d.ts.map
|
package/dist/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E;AAwBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAGzD"}
|
package/dist/paths.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDocumentPath } from '@agentshouse/mdmodel';
|
|
1
2
|
export function normalize(path) {
|
|
2
3
|
const parts = [];
|
|
3
4
|
for (const part of path.split('/')) {
|
|
@@ -22,6 +23,27 @@ export function covered(prefixes, path) {
|
|
|
22
23
|
return normalized !== null && (normalized === '' || beneath(normalized, path));
|
|
23
24
|
});
|
|
24
25
|
}
|
|
26
|
+
function named(pattern, name) {
|
|
27
|
+
const star = pattern.indexOf('*');
|
|
28
|
+
if (star === -1)
|
|
29
|
+
return pattern === name;
|
|
30
|
+
const before = pattern.slice(0, star);
|
|
31
|
+
const after = pattern.slice(star + 1);
|
|
32
|
+
return (name.length > before.length + after.length && name.startsWith(before) && name.endsWith(after));
|
|
33
|
+
}
|
|
34
|
+
function matched(pattern, path) {
|
|
35
|
+
if (pattern === '/')
|
|
36
|
+
return isDocumentPath(path);
|
|
37
|
+
const wanted = pattern.split('/');
|
|
38
|
+
const names = path.split('/');
|
|
39
|
+
const open = wanted.at(-1) === '**';
|
|
40
|
+
const fixed = open ? wanted.slice(0, -1) : wanted;
|
|
41
|
+
return ((open ? names.length > fixed.length : names.length === fixed.length) &&
|
|
42
|
+
fixed.every((one, at) => named(one, names[at])));
|
|
43
|
+
}
|
|
44
|
+
export function authoredAt(patterns, path) {
|
|
45
|
+
return patterns.some((pattern) => matched(pattern, path));
|
|
46
|
+
}
|
|
25
47
|
export function ancestors(path) {
|
|
26
48
|
const parts = path.split('/');
|
|
27
49
|
return parts.slice(1).map((_, at) => parts.slice(0, at + 1).join('/'));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PlanReach } from './query.js';
|
|
2
|
+
import { type PortReach } from './reach.js';
|
|
3
|
+
import { type CodeAvailability, type ConnectionAvailability, type Readiness } from './readiness.js';
|
|
4
|
+
import type { Runtime } from './runtime.js';
|
|
5
|
+
export type ReadinessPort = {
|
|
6
|
+
readonly target: string;
|
|
7
|
+
readonly code: CodeAvailability;
|
|
8
|
+
};
|
|
9
|
+
export type ReadinessWatch = {
|
|
10
|
+
readonly port: ReadinessPort;
|
|
11
|
+
readonly reach: PortReach | null;
|
|
12
|
+
readonly deliver: (readiness: Readiness) => void;
|
|
13
|
+
};
|
|
14
|
+
export declare function prepare(runtime: Runtime, locators?: readonly string[]): void;
|
|
15
|
+
export declare function roomsOfReach(reach: PlanReach): ReadonlySet<string>;
|
|
16
|
+
export declare function connectionNow(runtime: Runtime): Promise<ConnectionAvailability>;
|
|
17
|
+
export declare function deliverOwedReadiness(runtime: Runtime, owed: readonly ReadinessWatch[]): Promise<void>;
|
|
18
|
+
export declare function watchReadiness({ store }: Runtime, port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
|
|
19
|
+
export declare function filled(runtime: Runtime): void;
|
|
20
|
+
//# sourceMappingURL=preparation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preparation.d.ts","sourceRoot":"","sources":["../src/preparation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE3B,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAClD,CAAC;AAwCF,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,QA+BzE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAElE;AAgDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAMrF;AAoFD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,iBAI3F;AAED,wBAAgB,cAAc,CAC5B,EAAE,KAAK,EAAE,EAAE,OAAO,EAClB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACtC,MAAM,IAAI,CAQZ;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,QAMtC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { changeSet } from './change-set.js';
|
|
2
|
+
import { uncaught } from './failure.js';
|
|
3
|
+
import { installationOf } from './install.js';
|
|
4
|
+
import { listedLocators } from './listing.js';
|
|
5
|
+
import { planReach } from './reach.js';
|
|
6
|
+
import { readinessOf, } from './readiness.js';
|
|
7
|
+
import { roomOfKey } from './rows.js';
|
|
8
|
+
import { recoverReads } from './shown.js';
|
|
9
|
+
import { yielded } from './turn.js';
|
|
10
|
+
async function prepareReplica(runtime, locator) {
|
|
11
|
+
const { store, socket } = runtime;
|
|
12
|
+
for (;;) {
|
|
13
|
+
const held = (await store.rooms([locator])).get(locator);
|
|
14
|
+
if (held === undefined || socket.closed() || held.indexed)
|
|
15
|
+
return;
|
|
16
|
+
const key = held.record.key;
|
|
17
|
+
const done = await store.exclusive(async () => {
|
|
18
|
+
const local = await store.open();
|
|
19
|
+
return store.rederive(local, key, store.composed(held.record));
|
|
20
|
+
});
|
|
21
|
+
if (!done.done)
|
|
22
|
+
continue;
|
|
23
|
+
if ((await store.rooms([locator])).get(locator)?.record.key !== key)
|
|
24
|
+
continue;
|
|
25
|
+
store.changed(changeSet(locator, { documents: null }));
|
|
26
|
+
recoverReads(runtime);
|
|
27
|
+
store.readiness.queue();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function unprepared({ store }) {
|
|
32
|
+
const held = (await store.covering()).rooms;
|
|
33
|
+
const { unpreparedDemand, unpreparable } = store.device.now();
|
|
34
|
+
return [...unpreparedDemand, ...held.keys()].find((locator) => !(held.get(locator)?.indexed ?? false) && !unpreparable.has(locator));
|
|
35
|
+
}
|
|
36
|
+
function unpreparedBy({ store, journal }, locator, error) {
|
|
37
|
+
const { unpreparable } = store.device.now();
|
|
38
|
+
store.device.set({ unpreparable: new Set([...unpreparable, locator]) });
|
|
39
|
+
journal.record(`preparation failed ${locator} ${error instanceof Error ? error.name : 'unknown'}`);
|
|
40
|
+
store.readiness.queue();
|
|
41
|
+
}
|
|
42
|
+
export function prepare(runtime, locators = []) {
|
|
43
|
+
const { store, socket, journal } = runtime;
|
|
44
|
+
const { device } = store;
|
|
45
|
+
if (locators.length > 0) {
|
|
46
|
+
device.set({ unpreparedDemand: new Set([...device.now().unpreparedDemand, ...locators]) });
|
|
47
|
+
}
|
|
48
|
+
if (device.now().preparing)
|
|
49
|
+
return;
|
|
50
|
+
device.set({ preparing: true });
|
|
51
|
+
void (async () => {
|
|
52
|
+
try {
|
|
53
|
+
for (let waiting = await unprepared(runtime); waiting !== undefined; waiting = await unprepared(runtime)) {
|
|
54
|
+
await yielded();
|
|
55
|
+
if (socket.closed())
|
|
56
|
+
return;
|
|
57
|
+
const demand = new Set(device.now().unpreparedDemand);
|
|
58
|
+
demand.delete(waiting);
|
|
59
|
+
device.set({ unpreparedDemand: demand });
|
|
60
|
+
await prepareReplica(runtime, waiting).catch((error) => unpreparedBy(runtime, waiting, error));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
journal.record('preparation failed');
|
|
65
|
+
uncaught(error);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
device.set({ preparing: false });
|
|
69
|
+
}
|
|
70
|
+
})();
|
|
71
|
+
}
|
|
72
|
+
export function roomsOfReach(reach) {
|
|
73
|
+
return new Set([...reach.rooms, ...reach.documents.map(roomOfKey)]);
|
|
74
|
+
}
|
|
75
|
+
function requiredRooms(runtime, given, held) {
|
|
76
|
+
const { roomsListed } = runtime.socket.session.now();
|
|
77
|
+
const reach = planReach(given);
|
|
78
|
+
const listed = new Set(listedLocators(runtime, held));
|
|
79
|
+
if (reach === null)
|
|
80
|
+
return { listed: roomsListed, rooms: [...listed].sort() };
|
|
81
|
+
const named = [...roomsOfReach(reach)].sort();
|
|
82
|
+
if (roomsListed)
|
|
83
|
+
return { listed: true, rooms: named.filter((room) => listed.has(room)) };
|
|
84
|
+
return { listed: named.every((room) => held.has(room)), rooms: named };
|
|
85
|
+
}
|
|
86
|
+
function roomState({ socket, presence }, locator, held) {
|
|
87
|
+
if (socket.session.now().roomsListed &&
|
|
88
|
+
(presence.room(locator) === undefined || !presence.available(locator)))
|
|
89
|
+
return 'unadmitted';
|
|
90
|
+
const stored = held.get(locator);
|
|
91
|
+
if (stored === undefined)
|
|
92
|
+
return 'acquiring';
|
|
93
|
+
if (!stored.indexed)
|
|
94
|
+
return 'preparing';
|
|
95
|
+
return 'complete';
|
|
96
|
+
}
|
|
97
|
+
function conversationCoverage({ socket, conversations }, reach) {
|
|
98
|
+
const declaredConversations = reach === null || reach.conversations;
|
|
99
|
+
if (!declaredConversations || socket.conversations() === undefined)
|
|
100
|
+
return 'undeclared';
|
|
101
|
+
if (!conversations.known() || !conversations.current())
|
|
102
|
+
return 'acquiring';
|
|
103
|
+
return 'complete';
|
|
104
|
+
}
|
|
105
|
+
function connectionOf({ socket }, lastCompleted) {
|
|
106
|
+
if (socket.isOpen())
|
|
107
|
+
return 'connected';
|
|
108
|
+
if (socket.session.now().moving.providerUnreachable)
|
|
109
|
+
return 'unreachable';
|
|
110
|
+
return !socket.streamed && lastCompleted !== null ? 'connected' : 'connecting';
|
|
111
|
+
}
|
|
112
|
+
export async function connectionNow(runtime) {
|
|
113
|
+
const { store, socket } = runtime;
|
|
114
|
+
if (socket.isOpen() || socket.session.now().moving.providerUnreachable || socket.streamed) {
|
|
115
|
+
return connectionOf(runtime, null);
|
|
116
|
+
}
|
|
117
|
+
return connectionOf(runtime, (await (await store.open()).facts()).lastCompleted);
|
|
118
|
+
}
|
|
119
|
+
async function readinessHeld({ store }) {
|
|
120
|
+
const local = await store.open();
|
|
121
|
+
const [held, facts] = await Promise.all([store.covering(), local.facts()]);
|
|
122
|
+
return { held: held.rooms, facts };
|
|
123
|
+
}
|
|
124
|
+
function readinessFor(runtime, port, reach, { held, facts }) {
|
|
125
|
+
const { store, socket, usableWhenHeld } = runtime;
|
|
126
|
+
const required = requiredRooms(runtime, reach, held);
|
|
127
|
+
const coverage = required.rooms.map((room) => ({ room, state: roomState(runtime, room, held) }));
|
|
128
|
+
const { unpreparable } = store.device.now();
|
|
129
|
+
const preparing = coverage
|
|
130
|
+
.filter((room) => room.state === 'preparing' && !unpreparable.has(room.room))
|
|
131
|
+
.map(({ room }) => room);
|
|
132
|
+
if (preparing.length > 0)
|
|
133
|
+
prepare(runtime, preparing);
|
|
134
|
+
const { persistence, storageLoss, heldWhenOpened } = store.device.now();
|
|
135
|
+
return readinessOf({
|
|
136
|
+
code: port.code,
|
|
137
|
+
coverage: {
|
|
138
|
+
listed: required.listed,
|
|
139
|
+
rooms: coverage,
|
|
140
|
+
conversations: conversationCoverage(runtime, reach),
|
|
141
|
+
},
|
|
142
|
+
persistence,
|
|
143
|
+
connection: connectionOf(runtime, facts.lastCompleted),
|
|
144
|
+
house: socket.session.now().refusal !== null
|
|
145
|
+
? 'refused'
|
|
146
|
+
: socket.writesHeld()
|
|
147
|
+
? 'write-halted'
|
|
148
|
+
: 'open',
|
|
149
|
+
space: store.space.full() ? 'full' : null,
|
|
150
|
+
installation: installationOf(store, coverage, held),
|
|
151
|
+
lost: storageLoss !== null,
|
|
152
|
+
established: facts.targets[port.target]?.established === true ||
|
|
153
|
+
(heldWhenOpened && usableWhenHeld.includes(port.target)),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function establish(runtime, name) {
|
|
157
|
+
const { store, journal } = runtime;
|
|
158
|
+
const { device } = store;
|
|
159
|
+
if (device.now().establishing.has(name))
|
|
160
|
+
return;
|
|
161
|
+
device.set({ establishing: new Set([...device.now().establishing, name]) });
|
|
162
|
+
void store
|
|
163
|
+
.durably(async (local) => {
|
|
164
|
+
const { targets } = await local.facts();
|
|
165
|
+
await local.fact('targets', { ...targets, [name]: { established: true } });
|
|
166
|
+
})
|
|
167
|
+
.then(() => {
|
|
168
|
+
store.readiness.queue();
|
|
169
|
+
void probeEachMinute(runtime);
|
|
170
|
+
}, (error) => {
|
|
171
|
+
journal.record(`target record failed ${name}`);
|
|
172
|
+
uncaught(error);
|
|
173
|
+
})
|
|
174
|
+
.finally(() => {
|
|
175
|
+
const establishing = new Set(device.now().establishing);
|
|
176
|
+
establishing.delete(name);
|
|
177
|
+
device.set({ establishing });
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function deliverReadiness(runtime, watch, held) {
|
|
181
|
+
if (!runtime.store.readiness.held(watch))
|
|
182
|
+
return;
|
|
183
|
+
const readiness = readinessFor(runtime, watch.port, watch.reach, held);
|
|
184
|
+
if (readiness.ready && held.facts.targets[watch.port.target]?.established !== true) {
|
|
185
|
+
establish(runtime, watch.port.target);
|
|
186
|
+
}
|
|
187
|
+
if (!runtime.store.readiness.changed(watch, JSON.stringify(readiness)))
|
|
188
|
+
return;
|
|
189
|
+
watch.deliver(structuredClone(readiness));
|
|
190
|
+
}
|
|
191
|
+
export async function deliverOwedReadiness(runtime, owed) {
|
|
192
|
+
const held = await readinessHeld(runtime);
|
|
193
|
+
if (runtime.socket.closed())
|
|
194
|
+
return;
|
|
195
|
+
for (const watch of owed)
|
|
196
|
+
deliverReadiness(runtime, watch, held);
|
|
197
|
+
}
|
|
198
|
+
export function watchReadiness({ store }, port, reach, deliver) {
|
|
199
|
+
const watch = { port, reach, deliver };
|
|
200
|
+
const stop = store.readiness.add(watch);
|
|
201
|
+
void store.open().then(() => store.readiness.owe([watch]), () => store.readiness.owe([watch]));
|
|
202
|
+
return stop;
|
|
203
|
+
}
|
|
204
|
+
export function filled(runtime) {
|
|
205
|
+
const { store, socket, journal } = runtime;
|
|
206
|
+
if (socket.closed() || !store.space.fill())
|
|
207
|
+
return;
|
|
208
|
+
journal.record('space full');
|
|
209
|
+
store.readiness.queue();
|
|
210
|
+
void probeEachMinute(runtime);
|
|
211
|
+
}
|
|
212
|
+
async function installedTarget({ store }) {
|
|
213
|
+
if (store.device.now().heldWhenOpened)
|
|
214
|
+
return true;
|
|
215
|
+
const { targets } = await (await store.open()).facts();
|
|
216
|
+
return Object.values(targets).some((target) => target.established);
|
|
217
|
+
}
|
|
218
|
+
async function probeEachMinute(runtime) {
|
|
219
|
+
const { store, socket } = runtime;
|
|
220
|
+
const { space } = store;
|
|
221
|
+
const idle = () => !space.full() || space.probing() || socket.closed();
|
|
222
|
+
if (idle())
|
|
223
|
+
return;
|
|
224
|
+
const installed = await installedTarget(runtime).catch((error) => {
|
|
225
|
+
uncaught(error);
|
|
226
|
+
return false;
|
|
227
|
+
});
|
|
228
|
+
if (!installed)
|
|
229
|
+
return;
|
|
230
|
+
if (idle())
|
|
231
|
+
return;
|
|
232
|
+
space.probeEachMinute();
|
|
233
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { DiscoveredRoom, ProviderRefusal, ScopedRefusal } from './adapter.js';
|
|
2
|
+
import type { ModelState } from './model.js';
|
|
3
|
+
type Repairable = {
|
|
4
|
+
readonly reset: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
type Standing = {
|
|
7
|
+
readonly stale: boolean;
|
|
8
|
+
readonly repairable: Repairable | null;
|
|
9
|
+
readonly repairing: boolean;
|
|
10
|
+
readonly reloadDue: boolean;
|
|
11
|
+
};
|
|
12
|
+
type Listing = {
|
|
13
|
+
readonly whole: boolean;
|
|
14
|
+
readonly live: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type Presence = {
|
|
17
|
+
list(found: readonly DiscoveredRoom[], how: Listing): readonly DiscoveredRoom[];
|
|
18
|
+
room(locator: string): DiscoveredRoom | undefined;
|
|
19
|
+
rooms(): readonly DiscoveredRoom[];
|
|
20
|
+
available(locator: string, selection?: string): boolean;
|
|
21
|
+
refusal(locator: string): ProviderRefusal | null;
|
|
22
|
+
unheldModel(locator: string): ModelState | null;
|
|
23
|
+
refused(locator: string, refusal: ScopedRefusal | null): void;
|
|
24
|
+
readable(locator: string): boolean;
|
|
25
|
+
modelled(locator: string, model: ModelState | null): void;
|
|
26
|
+
installed(locator: string, bootstrapped: boolean): void;
|
|
27
|
+
locked(locator: string, stored: () => Promise<string | null>): Promise<boolean>;
|
|
28
|
+
lockedAmong(stored: ReadonlyMap<string, string>): readonly string[];
|
|
29
|
+
connectionLost(lapsed: () => void): void;
|
|
30
|
+
connectionLive(): void;
|
|
31
|
+
lapse(): void;
|
|
32
|
+
stood(locator: string, stale: boolean, repairable?: Repairable | null): void;
|
|
33
|
+
repairing(locator: string, running: boolean): void;
|
|
34
|
+
reload(locator: string, due: boolean): void;
|
|
35
|
+
standing(locator: string): Standing;
|
|
36
|
+
settled(): boolean;
|
|
37
|
+
repairsOwed(): readonly string[];
|
|
38
|
+
askAgain(locator: string, ask: () => void): void;
|
|
39
|
+
stopAsking(locator?: string): void;
|
|
40
|
+
lose(locator: string, during: number): boolean;
|
|
41
|
+
writing(locator: string): boolean;
|
|
42
|
+
unwritten(locator: string): void;
|
|
43
|
+
lost(locator: string): boolean;
|
|
44
|
+
losses(): number;
|
|
45
|
+
lostSince(locator: string, losses: number): boolean;
|
|
46
|
+
liftable(locator: string, discovery: number): boolean;
|
|
47
|
+
lift(locator: string, discovery: number, unfenced: boolean): void;
|
|
48
|
+
close(): void;
|
|
49
|
+
};
|
|
50
|
+
export declare function createPresence(): Presence;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=presence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"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"}
|