@agentshouse/mdruntime 0.1.0-cd9e28a590f84 → 0.1.0-cdded6c080913
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 +1 -1
- package/dist/acceptance.d.ts +6 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +389 -0
- package/dist/actions.d.ts +20 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +250 -0
- package/dist/adapter.d.ts +23 -25
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +3 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +21 -56
- package/dist/bootstrap.d.ts +8 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +209 -78
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +2 -1
- package/dist/chain.d.ts.map +1 -1
- package/dist/change.d.ts +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/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 +17 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -0
- package/dist/collection.d.ts +2 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/compile.d.ts +7 -7
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +229 -301
- package/dist/connection.d.ts +5 -141
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +98 -5279
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -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 +16 -6
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +366 -216
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +175 -0
- package/dist/durability.d.ts +15 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +2 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -8
- package/dist/figures.d.ts +48 -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 +2 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +22 -15
- 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 +19 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +560 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +267 -0
- package/dist/listing.d.ts +53 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +175 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +62 -20
- package/dist/locks.d.ts +9 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +61 -0
- package/dist/log.d.ts +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +61 -0
- package/dist/memory.d.ts +4 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +43 -4
- package/dist/messages.d.ts +25 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +84 -5
- package/dist/model.d.ts +2 -9
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -9
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +193 -0
- package/dist/observation.d.ts +2 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +7 -2
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +56 -0
- package/dist/outcome.d.ts +4 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/parts.d.ts +59 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +118 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +226 -0
- package/dist/queries.d.ts +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +272 -0
- package/dist/query.d.ts +13 -212
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -524
- package/dist/questions.d.ts +34 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +122 -0
- package/dist/reach.d.ts +12 -10
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +165 -109
- package/dist/react.d.ts +9 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/reads.d.ts +36 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +150 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +9 -1
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +8 -20
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +56 -0
- package/dist/replica.d.ts +8 -8
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +50 -18
- package/dist/room-draft.d.ts +2 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +216 -0
- package/dist/rows.d.ts +14 -22
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +48 -189
- package/dist/runtime.d.ts +42 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +11 -8
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1004 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +1 -1
- package/dist/seed.d.ts +11 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +71 -0
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +294 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +20 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +77 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/rooms.d.ts +43 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +39 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +70 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +175 -0
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +81 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/fences.d.ts +16 -0
- package/dist/store/fences.d.ts.map +1 -0
- package/dist/store/fences.js +26 -0
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +34 -0
- package/dist/store/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +408 -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 +43 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +57 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +107 -153
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +143 -396
- package/dist/stored.d.ts +58 -64
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +244 -156
- package/dist/surface.d.ts +88 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +222 -0
- package/dist/sync.d.ts +20 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +531 -0
- package/dist/tables.d.ts +110 -48
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +209 -54
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +7 -4
- package/dist/windows.d.ts +1 -12
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -75
- package/dist/wire.d.ts +16 -1
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +6 -0
- package/package.json +2 -2
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/phrase.d.ts +0 -3
- package/dist/phrase.d.ts.map +0 -1
- package/dist/phrase.js +0 -8
package/dist/models.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { changeSet } from './change-set.js';
|
|
2
|
+
import { composedOf } from './collection.js';
|
|
3
|
+
import { admitted, declarationOf, list, listedLocators } from './listing.js';
|
|
4
|
+
import { loseRooms } from './lost.js';
|
|
5
|
+
import { NO_MODEL } from './model.js';
|
|
6
|
+
import { storedRecord } from './replica.js';
|
|
7
|
+
import { overlayDiff, preparedAfter, replayed, sliceAt } from './saves.js';
|
|
8
|
+
import { emitRooms } from './shown.js';
|
|
9
|
+
export function declaredAsHeld(held, room) {
|
|
10
|
+
return (held === undefined ||
|
|
11
|
+
(JSON.stringify(held.operations) === JSON.stringify(room.operations) &&
|
|
12
|
+
JSON.stringify(held.replica) === JSON.stringify(room.replica) &&
|
|
13
|
+
JSON.stringify(held.providerOwnedPaths) === JSON.stringify(room.providerOwnedPaths) &&
|
|
14
|
+
JSON.stringify(held.typedSelection) === JSON.stringify(room.typedSelection ?? null)));
|
|
15
|
+
}
|
|
16
|
+
export function revoked(model) {
|
|
17
|
+
return model?.status === 'unavailable' && model.reason === 'revoked';
|
|
18
|
+
}
|
|
19
|
+
function unheldModelOf({ socket }, locator) {
|
|
20
|
+
return socket.rooms.standing(locator).unheldModel ?? NO_MODEL;
|
|
21
|
+
}
|
|
22
|
+
export async function keepNaming(runtime, local, room) {
|
|
23
|
+
const { store, socket } = runtime;
|
|
24
|
+
const held = await store.record(room.locator);
|
|
25
|
+
if (held === undefined || (held.name === room.name && held.handle === room.handle))
|
|
26
|
+
return;
|
|
27
|
+
await store.exclusive(async () => {
|
|
28
|
+
if (!socket.continuing())
|
|
29
|
+
return;
|
|
30
|
+
const current = await store.record(room.locator);
|
|
31
|
+
if (current === undefined)
|
|
32
|
+
return;
|
|
33
|
+
const record = { ...current, name: room.name, handle: room.handle };
|
|
34
|
+
await local.commit({
|
|
35
|
+
rooms: [
|
|
36
|
+
{
|
|
37
|
+
locator: room.locator,
|
|
38
|
+
key: record.key,
|
|
39
|
+
record: storedRecord(record),
|
|
40
|
+
composed: composedOf(store.composed(record)),
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
emitRooms(runtime);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async function modelNow(runtime, locator) {
|
|
48
|
+
return (await runtime.store.record(locator))?.model ?? unheldModelOf(runtime, locator);
|
|
49
|
+
}
|
|
50
|
+
export async function retainModel(runtime, local, room, given) {
|
|
51
|
+
const { store, socket } = runtime;
|
|
52
|
+
const held = await store.record(room.locator);
|
|
53
|
+
const previous = held?.model ?? unheldModelOf(runtime, room.locator);
|
|
54
|
+
const next = given ?? previous;
|
|
55
|
+
if (JSON.stringify(previous) === JSON.stringify(next) && declaredAsHeld(held, room))
|
|
56
|
+
return;
|
|
57
|
+
await store.exclusive(async () => {
|
|
58
|
+
if (!socket.continuing())
|
|
59
|
+
return;
|
|
60
|
+
const work = await store.work(room.locator);
|
|
61
|
+
const current = work.replica;
|
|
62
|
+
let changed = null;
|
|
63
|
+
if (current !== undefined) {
|
|
64
|
+
const record = {
|
|
65
|
+
...current.record,
|
|
66
|
+
name: room.name,
|
|
67
|
+
handle: room.handle,
|
|
68
|
+
operations: room.operations,
|
|
69
|
+
replica: room.replica,
|
|
70
|
+
providerOwnedPaths: room.providerOwnedPaths,
|
|
71
|
+
typedSelection: room.typedSelection ?? null,
|
|
72
|
+
model: next,
|
|
73
|
+
};
|
|
74
|
+
const confirmedLayer = await sliceAt(store, record, 'confirmed', current.queue, current.overlaid);
|
|
75
|
+
const replayedLayer = await replayed(store, record, confirmedLayer, current.queue);
|
|
76
|
+
const diff = await overlayDiff(record, current, replayedLayer.visible, replayedLayer.touched);
|
|
77
|
+
const answer = await local.commit({
|
|
78
|
+
rooms: [
|
|
79
|
+
{
|
|
80
|
+
locator: room.locator,
|
|
81
|
+
key: record.key,
|
|
82
|
+
record: storedRecord(record),
|
|
83
|
+
roots: record.typedSelection?.roots ?? [],
|
|
84
|
+
composed: composedOf(store.composed(record)),
|
|
85
|
+
overlay: diff.overlay,
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
preparedAfter(runtime, room.locator, answer);
|
|
90
|
+
changed = changeSet(room.locator, {
|
|
91
|
+
documents: answer.changed[room.locator] ?? [],
|
|
92
|
+
room: true,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else
|
|
96
|
+
socket.rooms.stand(room.locator, { unheldModel: next });
|
|
97
|
+
list(runtime, room, admitted(runtime, room));
|
|
98
|
+
if (changed === null)
|
|
99
|
+
emitRooms(runtime);
|
|
100
|
+
else
|
|
101
|
+
store.changed(changed);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
export async function scoped(runtime, result, room, local) {
|
|
105
|
+
const { socket, journal } = runtime;
|
|
106
|
+
if (result.scope === 'content' && !result.retryable) {
|
|
107
|
+
journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);
|
|
108
|
+
await loseRooms(runtime, [room.locator]);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
socket.rooms.stand(room.locator, {
|
|
112
|
+
refusal: { code: result.code, fields: result.fields, retryable: result.retryable },
|
|
113
|
+
});
|
|
114
|
+
let scopedAway = room;
|
|
115
|
+
if (result.scope === 'model')
|
|
116
|
+
await retainModel(runtime, local, room, {
|
|
117
|
+
status: 'unavailable',
|
|
118
|
+
reason: 'not-readable',
|
|
119
|
+
});
|
|
120
|
+
else if (result.scope !== 'operation') {
|
|
121
|
+
socket.rooms.stand(room.locator, { unreadable: true });
|
|
122
|
+
scopedAway = { ...room, replica: { ...room.replica, admission: 'unavailable' } };
|
|
123
|
+
await retainModel(runtime, local, scopedAway, null);
|
|
124
|
+
}
|
|
125
|
+
if (!socket.continuing())
|
|
126
|
+
return;
|
|
127
|
+
list(runtime, scopedAway, admitted(runtime, scopedAway));
|
|
128
|
+
emitRooms(runtime);
|
|
129
|
+
journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);
|
|
130
|
+
}
|
|
131
|
+
export async function settleModels(runtime, held, status, local) {
|
|
132
|
+
const { store, socket, journal } = runtime;
|
|
133
|
+
const owed = (model) => model.status !== 'unavailable' && model.status !== status;
|
|
134
|
+
const declaredAnew = await store.exclusive(async () => {
|
|
135
|
+
if (!socket.continuing())
|
|
136
|
+
return [];
|
|
137
|
+
const stored = await store.rooms(held.map(({ locator }) => locator));
|
|
138
|
+
const unchanged = held.filter((room) => {
|
|
139
|
+
const record = stored.get(room.locator)?.record;
|
|
140
|
+
return (owed(record?.model ?? unheldModelOf(runtime, room.locator)) && declaredAsHeld(record, room));
|
|
141
|
+
});
|
|
142
|
+
const records = unchanged.flatMap((room) => {
|
|
143
|
+
const record = stored.get(room.locator)?.record;
|
|
144
|
+
return record === undefined
|
|
145
|
+
? []
|
|
146
|
+
: [{ ...record, model: { ...record.model, status } }];
|
|
147
|
+
});
|
|
148
|
+
if (records.length > 0) {
|
|
149
|
+
try {
|
|
150
|
+
await local.commit({
|
|
151
|
+
rooms: records.map((record) => ({
|
|
152
|
+
locator: record.locator,
|
|
153
|
+
key: record.key,
|
|
154
|
+
record: storedRecord(record),
|
|
155
|
+
composed: composedOf(store.composed(record)),
|
|
156
|
+
})),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
journal.record(`model ${status} persistence failed`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
for (const room of unchanged) {
|
|
164
|
+
const { unheldModel } = socket.rooms.standing(room.locator);
|
|
165
|
+
if (!stored.has(room.locator) && unheldModel !== null) {
|
|
166
|
+
socket.rooms.stand(room.locator, {
|
|
167
|
+
unheldModel: { ...unheldModel, status },
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
list(runtime, room, admitted(runtime, room));
|
|
171
|
+
}
|
|
172
|
+
if (unchanged.length > 0)
|
|
173
|
+
emitRooms(runtime);
|
|
174
|
+
return held.filter((room) => {
|
|
175
|
+
const record = stored.get(room.locator)?.record;
|
|
176
|
+
return (!unchanged.includes(room) && owed(record?.model ?? unheldModelOf(runtime, room.locator)));
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
for (const room of declaredAnew) {
|
|
180
|
+
const model = await modelNow(runtime, room.locator);
|
|
181
|
+
if (owed(model))
|
|
182
|
+
await retainModel(runtime, local, room, { ...model, status });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export async function cachedModels(runtime, local) {
|
|
186
|
+
const { store, socket } = runtime;
|
|
187
|
+
const held = await store.rooms();
|
|
188
|
+
await settleModels(runtime, listedLocators(runtime, held).flatMap((locator) => {
|
|
189
|
+
const room = socket.rooms.discovered(locator) ??
|
|
190
|
+
declarationOf(runtime, locator, held.get(locator))?.room;
|
|
191
|
+
return room === undefined ? [] : [room];
|
|
192
|
+
}), 'cached', local);
|
|
193
|
+
}
|
package/dist/observation.d.ts
CHANGED
|
@@ -27,8 +27,8 @@ export declare function rowsOf(result: QueryResult): readonly (QueryDocument | Q
|
|
|
27
27
|
export declare function whole(message: QueryMessage): message is KeyedResult;
|
|
28
28
|
export declare function applied(keyed: KeyedResult, message: QueryMessage): KeyedResult;
|
|
29
29
|
export declare function observed(first: unknown, stop: () => void, keyed: boolean): Observed;
|
|
30
|
-
export declare function opened(watch: (deliver: (message: unknown) => void) => () => void, keyed: boolean): Promise<Observation<unknown>>;
|
|
31
|
-
export declare function observing<Topic extends string>(watch: (topic: Topic, input: readonly unknown[], deliver: (message: unknown) => void) => () => void): (topic: Topic, ...input: unknown[]) => Promise<Observation<unknown>>;
|
|
30
|
+
export declare function opened(watch: (deliver: (message: unknown) => void, fail: (error: unknown) => void) => () => void, keyed: boolean): Promise<Observation<unknown>>;
|
|
31
|
+
export declare function observing<Topic extends string>(watch: (topic: Topic, input: readonly unknown[], deliver: (message: unknown) => void, fail: (error: unknown) => void) => () => void): (topic: Topic, ...input: unknown[]) => Promise<Observation<unknown>>;
|
|
32
32
|
export type Digest = {
|
|
33
33
|
readonly pending: string;
|
|
34
34
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,IAAI,CAAC,CAAC;IACb,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACpD,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,GAAG,IAAI,IAAI,CAAC;CACb,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,CAGnF;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,WAAW,CAEnE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAwB9E;AAiBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAkCnF;AAED,wBAAgB,MAAM,CACpB,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,IAAI,CAAC,CAAC;IACb,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACpD,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,GAAG,IAAI,IAAI,CAAC;CACb,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,CAGnF;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,WAAW,CAEnE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAwB9E;AAiBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAkCnF;AAED,wBAAgB,MAAM,CACpB,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,EAC1F,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAwB/B;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,EAC5C,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACnC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAC3B,MAAM,IAAI,WAEA,KAAK,YAAY,OAAO,EAAE,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAa1E;AAED,MAAM,MAAM,MAAM,GACd;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEN,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa3C;AAMD,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,WAAW,GAAG,MAAM,CAU9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAY3E;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,GAAG,IAAI,CA+BjF"}
|
package/dist/observation.js
CHANGED
|
@@ -98,6 +98,11 @@ export function opened(watch, keyed) {
|
|
|
98
98
|
}
|
|
99
99
|
handle = observed(message, () => stop(), keyed);
|
|
100
100
|
resolve(handle.observation);
|
|
101
|
+
}, (error) => {
|
|
102
|
+
if (handle !== undefined)
|
|
103
|
+
return;
|
|
104
|
+
stop();
|
|
105
|
+
reject(error);
|
|
101
106
|
});
|
|
102
107
|
}
|
|
103
108
|
catch (error) {
|
|
@@ -106,9 +111,9 @@ export function opened(watch, keyed) {
|
|
|
106
111
|
});
|
|
107
112
|
}
|
|
108
113
|
export function observing(watch) {
|
|
109
|
-
return (topic, ...input) => opened((deliver) => watch(topic, input, (message) => {
|
|
114
|
+
return (topic, ...input) => opened((deliver, fail) => watch(topic, input, (message) => {
|
|
110
115
|
deliver(structuredClone(message));
|
|
111
|
-
}), topic === 'query');
|
|
116
|
+
}, fail), topic === 'query');
|
|
112
117
|
}
|
|
113
118
|
export function hashed(text) {
|
|
114
119
|
let first = 0xdeadbeef;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening.d.ts","sourceRoot":"","sources":["../src/opening.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA2CxF"}
|
package/dist/opening.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { detectStorageLoss, nextGeneration, refusedForSpace } from './durability.js';
|
|
2
|
+
import { sweep } from './install.js';
|
|
3
|
+
import { eraseFenced } from './lost.js';
|
|
4
|
+
import { prepare } from './preparation.js';
|
|
5
|
+
import { emitRooms, emitStorageLoss, statusShown } from './shown.js';
|
|
6
|
+
export async function open(runtime, opened) {
|
|
7
|
+
const { store, socket, journal, shell, conversations, build, usableWhenHeld } = runtime;
|
|
8
|
+
if (socket.closed())
|
|
9
|
+
throw new Error('runtime closed');
|
|
10
|
+
const interrupted = await opened.fences();
|
|
11
|
+
const kept = shell.generation;
|
|
12
|
+
const storedGeneration = await opened.generation();
|
|
13
|
+
const loss = detectStorageLoss(storedGeneration, kept);
|
|
14
|
+
const generation = nextGeneration(storedGeneration, kept);
|
|
15
|
+
if (generation !== storedGeneration)
|
|
16
|
+
await opened.rememberGeneration(generation);
|
|
17
|
+
if (generation !== kept)
|
|
18
|
+
await shell.keepGeneration(generation);
|
|
19
|
+
if (loss !== null) {
|
|
20
|
+
store.device.set({ storageLoss: loss });
|
|
21
|
+
emitStorageLoss(runtime);
|
|
22
|
+
}
|
|
23
|
+
const held = await opened.opened();
|
|
24
|
+
store.device.set({
|
|
25
|
+
heldWhenOpened: usableWhenHeld.length > 0 && (await opened.covering()).rooms.size > 0,
|
|
26
|
+
});
|
|
27
|
+
try {
|
|
28
|
+
await opened.demote();
|
|
29
|
+
await store.ask({ kind: 'read.builds', build });
|
|
30
|
+
for (const key of held.orphans)
|
|
31
|
+
await opened.release(key);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (!refusedForSpace(error))
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
if (held.erasing || held.orphans.length > 0)
|
|
38
|
+
queueMicrotask(() => sweep(runtime));
|
|
39
|
+
await conversations.opened(opened);
|
|
40
|
+
if (interrupted.length > 0) {
|
|
41
|
+
queueMicrotask(() => {
|
|
42
|
+
void eraseFenced(runtime, interrupted).catch(() => {
|
|
43
|
+
journal.record('erasure failed');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
statusShown(runtime);
|
|
48
|
+
prepare(runtime);
|
|
49
|
+
emitRooms(runtime);
|
|
50
|
+
void store
|
|
51
|
+
.exclusive(() => runtime.unpair(opened))
|
|
52
|
+
.catch(() => {
|
|
53
|
+
journal.record('unpair failed');
|
|
54
|
+
});
|
|
55
|
+
return opened;
|
|
56
|
+
}
|
package/dist/outcome.d.ts
CHANGED
|
@@ -13,7 +13,9 @@ export type CallResult = {
|
|
|
13
13
|
kind: 'action';
|
|
14
14
|
result: unknown;
|
|
15
15
|
at?: RoomVersionAt;
|
|
16
|
-
} | Refused<'rejected'>
|
|
16
|
+
} | (Refused<'rejected'> & {
|
|
17
|
+
reset?: string;
|
|
18
|
+
}) | Refused<'undeclared'> | Failure;
|
|
17
19
|
export type HistoryAnswer = Exclude<HistoryResult, {
|
|
18
20
|
kind: Failure['kind'];
|
|
19
21
|
}> | Failure;
|
|
@@ -65,6 +67,7 @@ export type Offline = {
|
|
|
65
67
|
readonly kind: 'offline';
|
|
66
68
|
};
|
|
67
69
|
export declare const OFFLINE: Offline;
|
|
70
|
+
export declare function answeredResult(value: unknown): boolean;
|
|
68
71
|
export declare const UNCERTAIN: Failure;
|
|
69
72
|
export declare function undeclared(name: string): CallResult;
|
|
70
73
|
export declare function failure(result: AdapterFailure): Failure;
|
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
|
@@ -3,6 +3,7 @@ import type { ChangeBatch } from './change.js';
|
|
|
3
3
|
export type Heads = {
|
|
4
4
|
revisions: Readonly<Record<string, string>>;
|
|
5
5
|
fileIds: Readonly<Record<string, string>>;
|
|
6
|
+
created: Readonly<Record<string, string>>;
|
|
6
7
|
changes: Readonly<Record<string, HeadChange>>;
|
|
7
8
|
};
|
|
8
9
|
export type HeldBinary = ({
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,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,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;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,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;AA6MD,wBAAiB,UAAU,CACzB,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAsChC"}
|
package/dist/overlay.js
CHANGED
|
@@ -125,16 +125,21 @@ function relocate(staged, from, to) {
|
|
|
125
125
|
function moveHead(heads, from, to) {
|
|
126
126
|
const revision = heads.revisions[from];
|
|
127
127
|
const fileId = heads.fileIds[from];
|
|
128
|
+
const created = heads.created[from];
|
|
128
129
|
const change = heads.changes[from];
|
|
129
130
|
delete heads.revisions[from];
|
|
130
131
|
delete heads.fileIds[from];
|
|
132
|
+
delete heads.created[from];
|
|
131
133
|
delete heads.changes[from];
|
|
132
134
|
delete heads.fileIds[to];
|
|
135
|
+
delete heads.created[to];
|
|
133
136
|
delete heads.changes[to];
|
|
134
137
|
if (revision !== undefined)
|
|
135
138
|
heads.revisions[to] = revision;
|
|
136
139
|
if (fileId !== undefined)
|
|
137
140
|
heads.fileIds[to] = fileId;
|
|
141
|
+
if (created !== undefined)
|
|
142
|
+
heads.created[to] = created;
|
|
138
143
|
if (change !== undefined)
|
|
139
144
|
heads.changes[to] = change;
|
|
140
145
|
}
|
|
@@ -142,6 +147,7 @@ function erase(staged, path) {
|
|
|
142
147
|
delete staged.documents[path];
|
|
143
148
|
delete staged.revisions[path];
|
|
144
149
|
delete staged.fileIds[path];
|
|
150
|
+
delete staged.created[path];
|
|
145
151
|
delete staged.changes[path];
|
|
146
152
|
delete staged.binaries[path];
|
|
147
153
|
}
|
|
@@ -150,6 +156,7 @@ function stage(staged, change) {
|
|
|
150
156
|
staged.documents[change.path] =
|
|
151
157
|
'content' in change ? change.content : compose(change.fields, change.sections);
|
|
152
158
|
delete staged.fileIds[change.path];
|
|
159
|
+
delete staged.created[change.path];
|
|
153
160
|
delete staged.changes[change.path];
|
|
154
161
|
return true;
|
|
155
162
|
}
|
|
@@ -194,6 +201,8 @@ function arrive(heads, change) {
|
|
|
194
201
|
heads.revisions[change.path] = change.revision;
|
|
195
202
|
if (change.fileId !== undefined)
|
|
196
203
|
heads.fileIds[change.path] = change.fileId;
|
|
204
|
+
if (change.created !== undefined)
|
|
205
|
+
heads.created[change.path] = change.created;
|
|
197
206
|
if (change.change !== undefined)
|
|
198
207
|
heads.changes[change.path] = change.change;
|
|
199
208
|
}
|
|
@@ -203,6 +212,7 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
203
212
|
binaries: drafted(base.binaries),
|
|
204
213
|
revisions: drafted(base.revisions),
|
|
205
214
|
fileIds: drafted(base.fileIds),
|
|
215
|
+
created: drafted(base.created),
|
|
206
216
|
changes: drafted(base.changes),
|
|
207
217
|
};
|
|
208
218
|
for (const batch of queue) {
|
|
@@ -234,6 +244,7 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
234
244
|
binaries: yield* settling(staged.binaries),
|
|
235
245
|
revisions: yield* settling(staged.revisions),
|
|
236
246
|
fileIds: yield* settling(staged.fileIds),
|
|
247
|
+
created: yield* settling(staged.created),
|
|
237
248
|
changes: yield* settling(staged.changes),
|
|
238
249
|
};
|
|
239
250
|
}
|
package/dist/parts.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { RunningSubagent, TurnContext } from './adapter.js';
|
|
2
|
+
import { type JobMarker, type OpenJob } from './job.js';
|
|
3
|
+
export type PlanStep = {
|
|
4
|
+
readonly content: string;
|
|
5
|
+
readonly status: string;
|
|
6
|
+
};
|
|
7
|
+
export type Marker = 'mode' | 'compaction' | 'retry' | 'model' | 'job';
|
|
8
|
+
export type Part = {
|
|
9
|
+
readonly type: 'text';
|
|
10
|
+
readonly text: string;
|
|
11
|
+
} | {
|
|
12
|
+
readonly type: 'reasoning';
|
|
13
|
+
readonly text: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly type: 'commands';
|
|
16
|
+
readonly count: number;
|
|
17
|
+
} | {
|
|
18
|
+
readonly type: 'subagent';
|
|
19
|
+
readonly description: string;
|
|
20
|
+
readonly done: boolean;
|
|
21
|
+
readonly result: string | null;
|
|
22
|
+
} | {
|
|
23
|
+
readonly type: 'message';
|
|
24
|
+
readonly command: string;
|
|
25
|
+
readonly target: string | null;
|
|
26
|
+
} | {
|
|
27
|
+
readonly type: 'image';
|
|
28
|
+
readonly path: string;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly mediaType: string;
|
|
31
|
+
} | {
|
|
32
|
+
readonly type: 'marker';
|
|
33
|
+
readonly marker: Marker;
|
|
34
|
+
readonly text: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly type: 'plan';
|
|
37
|
+
readonly steps: readonly PlanStep[];
|
|
38
|
+
};
|
|
39
|
+
export declare function partsOf(raw: readonly unknown[]): readonly Part[];
|
|
40
|
+
export declare function contextIn(raw: unknown): TurnContext | null;
|
|
41
|
+
export type Turn = {
|
|
42
|
+
readonly turn: string;
|
|
43
|
+
readonly parts: readonly Part[];
|
|
44
|
+
readonly ended: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type ChatWork = {
|
|
47
|
+
readonly kind: 'job' | 'schedule' | 'subagent';
|
|
48
|
+
readonly title: string;
|
|
49
|
+
readonly next: string | null;
|
|
50
|
+
readonly activity: string | null;
|
|
51
|
+
};
|
|
52
|
+
export declare function counted(count: number): string;
|
|
53
|
+
export declare function runningLine(raw: readonly unknown[]): string | null;
|
|
54
|
+
export declare function jobsOf(markers: readonly JobMarker[], turn: {
|
|
55
|
+
readonly started: string | null;
|
|
56
|
+
readonly parts: readonly unknown[];
|
|
57
|
+
} | null): readonly OpenJob[];
|
|
58
|
+
export declare function stillRunning(turns: readonly Turn[], subagents: readonly RunningSubagent[]): ReadonlyMap<string, readonly ChatWork[]>;
|
|
59
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAoC,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAG1F,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAEvE,MAAM,MAAM,IAAI,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACtF;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,CAAC;AAoDnE,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,IAAI,EAAE,CAEhE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAK1D;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,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,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CASlE;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,IAAI,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAAG,IAAI,GACnF,SAAS,OAAO,EAAE,CAOpB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC,CA0C1C"}
|
package/dist/parts.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { closeLast, markerMoved, openJobs } from './job.js';
|
|
2
|
+
import { excerpt, list, record, text } from './read.js';
|
|
3
|
+
const MARKERS = ['mode', 'compaction', 'retry', 'model', 'job'];
|
|
4
|
+
function partOf(raw) {
|
|
5
|
+
const part = record(raw);
|
|
6
|
+
switch (text(part, 'type')) {
|
|
7
|
+
case 'text':
|
|
8
|
+
case 'reasoning': {
|
|
9
|
+
const said = text(part, 'text');
|
|
10
|
+
return said === null ? null : { type: part.type, text: said };
|
|
11
|
+
}
|
|
12
|
+
case 'commands':
|
|
13
|
+
return typeof part.count === 'number' ? { type: 'commands', count: part.count } : null;
|
|
14
|
+
case 'subagent':
|
|
15
|
+
return {
|
|
16
|
+
type: 'subagent',
|
|
17
|
+
description: text(part, 'description') ?? '',
|
|
18
|
+
done: part.status === 'done',
|
|
19
|
+
result: text(part, 'result'),
|
|
20
|
+
};
|
|
21
|
+
case 'message': {
|
|
22
|
+
const command = text(part, 'command');
|
|
23
|
+
return command === null ? null : { type: 'message', command, target: text(part, 'target') };
|
|
24
|
+
}
|
|
25
|
+
case 'image': {
|
|
26
|
+
const path = text(part, 'file');
|
|
27
|
+
const name = text(part, 'name');
|
|
28
|
+
return path === null || name === null
|
|
29
|
+
? null
|
|
30
|
+
: { type: 'image', path, name, mediaType: text(part, 'media_type') ?? '' };
|
|
31
|
+
}
|
|
32
|
+
case 'marker': {
|
|
33
|
+
const marker = text(part, 'marker');
|
|
34
|
+
return marker === null || !MARKERS.includes(marker)
|
|
35
|
+
? null
|
|
36
|
+
: { type: 'marker', marker: marker, text: text(part, 'text') ?? '' };
|
|
37
|
+
}
|
|
38
|
+
case 'plan':
|
|
39
|
+
return {
|
|
40
|
+
type: 'plan',
|
|
41
|
+
steps: list(part, 'entries').flatMap((entry) => {
|
|
42
|
+
const step = record(entry);
|
|
43
|
+
const content = text(step, 'content');
|
|
44
|
+
return content === null ? [] : [{ content, status: text(step, 'status') ?? '' }];
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
default:
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function partsOf(raw) {
|
|
52
|
+
return raw.flatMap((one) => partOf(one) ?? []);
|
|
53
|
+
}
|
|
54
|
+
export function contextIn(raw) {
|
|
55
|
+
const held = record(raw);
|
|
56
|
+
return typeof held.used === 'number' && typeof held.window === 'number' && held.window > 0
|
|
57
|
+
? { used: held.used, window: held.window }
|
|
58
|
+
: null;
|
|
59
|
+
}
|
|
60
|
+
export function counted(count) {
|
|
61
|
+
return count === 1 ? '1 command' : `${count} commands`;
|
|
62
|
+
}
|
|
63
|
+
export function runningLine(raw) {
|
|
64
|
+
const parts = partsOf(raw);
|
|
65
|
+
const note = [...parts].reverse().find((part) => part.type === 'text' && part.text.trim() !== '');
|
|
66
|
+
if (note?.type === 'text')
|
|
67
|
+
return excerpt(note.text);
|
|
68
|
+
const commands = parts.reduce((sum, part) => (part.type === 'commands' ? sum + part.count : sum), 0);
|
|
69
|
+
return commands === 0 ? null : counted(commands);
|
|
70
|
+
}
|
|
71
|
+
export function jobsOf(markers, turn) {
|
|
72
|
+
const running = (turn === null ? [] : partsOf(turn.parts)).flatMap((part) => part.type === 'marker' && part.marker === 'job'
|
|
73
|
+
? [{ said: part.text, at: turn?.started ?? null }]
|
|
74
|
+
: []);
|
|
75
|
+
return openJobs([...markers, ...running]);
|
|
76
|
+
}
|
|
77
|
+
export function stillRunning(turns, subagents) {
|
|
78
|
+
const open = [];
|
|
79
|
+
for (const { turn, parts, ended } of turns) {
|
|
80
|
+
for (const part of parts) {
|
|
81
|
+
if (part.type === 'subagent') {
|
|
82
|
+
const key = `subagent\u0000${part.description}`;
|
|
83
|
+
if (part.done)
|
|
84
|
+
closeLast(open, key);
|
|
85
|
+
else if (ended) {
|
|
86
|
+
open.push({
|
|
87
|
+
turn,
|
|
88
|
+
key,
|
|
89
|
+
work: { kind: 'subagent', title: part.description, next: null, activity: null },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (part.type !== 'marker' || part.marker !== 'job')
|
|
95
|
+
continue;
|
|
96
|
+
markerMoved(open, part.text, (job, key) => ended
|
|
97
|
+
? {
|
|
98
|
+
turn,
|
|
99
|
+
key,
|
|
100
|
+
work: {
|
|
101
|
+
kind: job.kind === 'started' ? 'job' : 'schedule',
|
|
102
|
+
title: job.label,
|
|
103
|
+
next: job.next,
|
|
104
|
+
activity: null,
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
: null);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const doing = [...subagents];
|
|
111
|
+
const under = new Map();
|
|
112
|
+
for (const { turn, work } of open) {
|
|
113
|
+
const at = work.kind === 'subagent' ? doing.findIndex((one) => one.description === work.title) : -1;
|
|
114
|
+
const shown = at === -1 ? work : { ...work, activity: doing.splice(at, 1)[0].activity };
|
|
115
|
+
under.set(turn, [...(under.get(turn) ?? []), shown]);
|
|
116
|
+
}
|
|
117
|
+
return under;
|
|
118
|
+
}
|
|
@@ -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":"AAGA,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;AAuCF,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,QA8BzE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAElE;AAmDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAMrF;AAkFD,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"}
|