@agentshouse/mdruntime 0.1.0-cefbc8bb8a1c0 → 0.1.0-cf04ede9fb796
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 +2 -2
- 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 +251 -0
- package/dist/adapter.d.ts +86 -67
- 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 +10 -9
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +211 -81
- 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 +21 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -1
- package/dist/collection.d.ts +2 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +1 -17
- package/dist/compile.d.ts +6 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +263 -319
- package/dist/connection.d.ts +5 -143
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +102 -5311
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/conversation-live.d.ts +136 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +248 -0
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +53 -0
- package/dist/conversation.d.ts +41 -45
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +859 -870
- 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 -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/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +4 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +23 -30
- package/dist/identity.d.ts +0 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -3
- package/dist/index.d.ts +25 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +556 -0
- package/dist/job.d.ts +33 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +54 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +268 -0
- package/dist/listing.d.ts +53 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +176 -0
- package/dist/live.d.ts +5 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +63 -22
- 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 +11 -4
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +172 -82
- package/dist/messages.d.ts +27 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +97 -19
- package/dist/model.d.ts +2 -10
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -18
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +195 -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 +57 -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 +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/parts.d.ts +60 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +126 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +22 -0
- package/dist/preparation.d.ts +20 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +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 +14 -209
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -505
- package/dist/questions.d.ts +34 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +122 -0
- package/dist/reach.d.ts +15 -13
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +183 -137
- package/dist/react.d.ts +10 -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/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 +158 -78
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +9 -1
- package/dist/refresh.d.ts +7 -5
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +33 -5
- 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 +9 -9
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +52 -20
- package/dist/room-draft.d.ts +4 -3
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +65 -52
- 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 -21
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +48 -184
- package/dist/runtime.d.ts +43 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +5 -1
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +19 -13
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1008 -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 -0
- package/dist/shared.d.ts +1 -2
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +9 -15
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +295 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +20 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +77 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/rooms.d.ts +44 -0
- package/dist/socket/rooms.d.ts.map +1 -0
- package/dist/socket/rooms.js +90 -0
- package/dist/socket/session.d.ts +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 -6
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store/fences.d.ts +16 -0
- package/dist/store/fences.d.ts.map +1 -0
- package/dist/store/fences.js +26 -0
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +34 -0
- package/dist/store/readiness.d.ts +10 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +52 -0
- package/dist/store/records.d.ts +212 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +431 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- package/dist/store/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +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 -157
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +143 -395
- package/dist/stored.d.ts +58 -37
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +276 -207
- 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 +532 -0
- package/dist/tables.d.ts +120 -55
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +212 -93
- 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 +17 -5
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +7 -1
- package/package.json +2 -2
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/fulltext.d.ts +0 -27
- package/dist/fulltext.d.ts.map +0 -1
- package/dist/fulltext.js +0 -370
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -156
package/dist/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,60 @@
|
|
|
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 declare function tokensIn(raw: unknown): number | null;
|
|
42
|
+
export type Turn = {
|
|
43
|
+
readonly turn: string;
|
|
44
|
+
readonly parts: readonly Part[];
|
|
45
|
+
readonly ended: boolean;
|
|
46
|
+
};
|
|
47
|
+
export type ChatWork = {
|
|
48
|
+
readonly kind: 'job' | 'schedule' | 'subagent';
|
|
49
|
+
readonly title: string;
|
|
50
|
+
readonly next: string | null;
|
|
51
|
+
readonly activity: string | null;
|
|
52
|
+
};
|
|
53
|
+
export declare function counted(count: number): string;
|
|
54
|
+
export declare function runningLine(raw: readonly unknown[]): string | null;
|
|
55
|
+
export declare function jobsOf(markers: readonly JobMarker[], turn: {
|
|
56
|
+
readonly started: string | null;
|
|
57
|
+
readonly parts: readonly unknown[];
|
|
58
|
+
} | null): readonly OpenJob[];
|
|
59
|
+
export declare function stillRunning(turns: readonly Turn[], subagents: readonly RunningSubagent[]): ReadonlyMap<string, readonly ChatWork[]>;
|
|
60
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"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"}
|
package/dist/parts.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
const TOKEN_KINDS = ['input', 'output', 'cache_read', 'cache_write'];
|
|
61
|
+
export function tokensIn(raw) {
|
|
62
|
+
const held = record(raw);
|
|
63
|
+
const counts = TOKEN_KINDS.map((kind) => held[kind]);
|
|
64
|
+
return counts.every((count) => typeof count === 'number')
|
|
65
|
+
? counts.reduce((sum, count) => sum + count, 0)
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
export function counted(count) {
|
|
69
|
+
return count === 1 ? '1 command' : `${count} commands`;
|
|
70
|
+
}
|
|
71
|
+
export function runningLine(raw) {
|
|
72
|
+
const parts = partsOf(raw);
|
|
73
|
+
const note = [...parts].reverse().find((part) => part.type === 'text' && part.text.trim() !== '');
|
|
74
|
+
if (note?.type === 'text')
|
|
75
|
+
return excerpt(note.text);
|
|
76
|
+
const commands = parts.reduce((sum, part) => (part.type === 'commands' ? sum + part.count : sum), 0);
|
|
77
|
+
return commands === 0 ? null : counted(commands);
|
|
78
|
+
}
|
|
79
|
+
export function jobsOf(markers, turn) {
|
|
80
|
+
const running = (turn === null ? [] : partsOf(turn.parts)).flatMap((part) => part.type === 'marker' && part.marker === 'job'
|
|
81
|
+
? [{ said: part.text, at: turn?.started ?? null }]
|
|
82
|
+
: []);
|
|
83
|
+
return openJobs([...markers, ...running]);
|
|
84
|
+
}
|
|
85
|
+
export function stillRunning(turns, subagents) {
|
|
86
|
+
const open = [];
|
|
87
|
+
for (const { turn, parts, ended } of turns) {
|
|
88
|
+
for (const part of parts) {
|
|
89
|
+
if (part.type === 'subagent') {
|
|
90
|
+
const key = `subagent\u0000${part.description}`;
|
|
91
|
+
if (part.done)
|
|
92
|
+
closeLast(open, key);
|
|
93
|
+
else if (ended) {
|
|
94
|
+
open.push({
|
|
95
|
+
turn,
|
|
96
|
+
key,
|
|
97
|
+
work: { kind: 'subagent', title: part.description, next: null, activity: null },
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (part.type !== 'marker' || part.marker !== 'job')
|
|
103
|
+
continue;
|
|
104
|
+
markerMoved(open, part.text, (job, key) => ended
|
|
105
|
+
? {
|
|
106
|
+
turn,
|
|
107
|
+
key,
|
|
108
|
+
work: {
|
|
109
|
+
kind: job.kind === 'started' ? 'job' : 'schedule',
|
|
110
|
+
title: job.label,
|
|
111
|
+
next: job.next,
|
|
112
|
+
activity: null,
|
|
113
|
+
},
|
|
114
|
+
}
|
|
115
|
+
: null);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const doing = [...subagents];
|
|
119
|
+
const under = new Map();
|
|
120
|
+
for (const { turn, work } of open) {
|
|
121
|
+
const at = work.kind === 'subagent' ? doing.findIndex((one) => one.description === work.title) : -1;
|
|
122
|
+
const shown = at === -1 ? work : { ...work, activity: doing.splice(at, 1)[0].activity };
|
|
123
|
+
under.set(turn, [...(under.get(turn) ?? []), shown]);
|
|
124
|
+
}
|
|
125
|
+
return under;
|
|
126
|
+
}
|
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":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { changeSet } from './change-set.js';
|
|
2
|
+
import { installationOf } from './install.js';
|
|
3
|
+
import { listedLocators } from './listing.js';
|
|
4
|
+
import { planReach } from './reach.js';
|
|
5
|
+
import { readinessOf, } from './readiness.js';
|
|
6
|
+
import { roomOfKey } from './rows.js';
|
|
7
|
+
import { recoverReads } from './shown.js';
|
|
8
|
+
import { yielded } from './turn.js';
|
|
9
|
+
async function prepareReplica(runtime, locator) {
|
|
10
|
+
const { store, socket } = runtime;
|
|
11
|
+
for (;;) {
|
|
12
|
+
const held = (await store.rooms([locator])).get(locator);
|
|
13
|
+
if (held === undefined || socket.closed() || held.indexed)
|
|
14
|
+
return;
|
|
15
|
+
const key = held.record.key;
|
|
16
|
+
const done = await store.exclusive(async () => {
|
|
17
|
+
const local = await store.open();
|
|
18
|
+
return store.rederive(local, key, store.composed(held.record));
|
|
19
|
+
});
|
|
20
|
+
if (!done.done)
|
|
21
|
+
continue;
|
|
22
|
+
if ((await store.rooms([locator])).get(locator)?.record.key !== key)
|
|
23
|
+
continue;
|
|
24
|
+
store.changed(changeSet(locator, { documents: null }));
|
|
25
|
+
recoverReads(runtime);
|
|
26
|
+
store.readiness.queue();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function unprepared({ store, socket }) {
|
|
31
|
+
const held = (await store.covering()).rooms;
|
|
32
|
+
return [...store.device.now().unpreparedDemand, ...held.keys()].find((locator) => !(held.get(locator)?.indexed ?? false) && !socket.rooms.standing(locator).unpreparable);
|
|
33
|
+
}
|
|
34
|
+
function unpreparedBy({ store, socket, journal }, locator, error) {
|
|
35
|
+
socket.rooms.stand(locator, { unpreparable: true });
|
|
36
|
+
journal.record(`preparation failed ${locator} ${error instanceof Error ? error.name : 'unknown'}`);
|
|
37
|
+
store.readiness.queue();
|
|
38
|
+
}
|
|
39
|
+
export function prepare(runtime, locators = []) {
|
|
40
|
+
const { store, socket, journal } = runtime;
|
|
41
|
+
const { device } = store;
|
|
42
|
+
if (locators.length > 0) {
|
|
43
|
+
device.set({ unpreparedDemand: new Set([...device.now().unpreparedDemand, ...locators]) });
|
|
44
|
+
}
|
|
45
|
+
if (device.now().preparing)
|
|
46
|
+
return;
|
|
47
|
+
device.set({ preparing: true });
|
|
48
|
+
void (async () => {
|
|
49
|
+
try {
|
|
50
|
+
for (let waiting = await unprepared(runtime); waiting !== undefined; waiting = await unprepared(runtime)) {
|
|
51
|
+
await yielded();
|
|
52
|
+
if (socket.closed())
|
|
53
|
+
return;
|
|
54
|
+
const demand = new Set(device.now().unpreparedDemand);
|
|
55
|
+
demand.delete(waiting);
|
|
56
|
+
device.set({ unpreparedDemand: demand });
|
|
57
|
+
await prepareReplica(runtime, waiting).catch((error) => unpreparedBy(runtime, waiting, error));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
journal.record('preparation failed');
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
device.set({ preparing: false });
|
|
65
|
+
}
|
|
66
|
+
})();
|
|
67
|
+
}
|
|
68
|
+
export function roomsOfReach(reach) {
|
|
69
|
+
return new Set([...reach.rooms, ...reach.documents.map(roomOfKey)]);
|
|
70
|
+
}
|
|
71
|
+
function requiredRooms(runtime, given, held) {
|
|
72
|
+
const { roomsListed } = runtime.socket.session.now();
|
|
73
|
+
const reach = planReach(given);
|
|
74
|
+
const listed = new Set(listedLocators(runtime, held));
|
|
75
|
+
if (reach === null)
|
|
76
|
+
return { listed: roomsListed, rooms: [...listed].sort() };
|
|
77
|
+
const named = [...roomsOfReach(reach)].sort();
|
|
78
|
+
if (roomsListed)
|
|
79
|
+
return { listed: true, rooms: named.filter((room) => listed.has(room)) };
|
|
80
|
+
return { listed: named.every((room) => held.has(room)), rooms: named };
|
|
81
|
+
}
|
|
82
|
+
function roomState({ socket }, locator, held) {
|
|
83
|
+
const listedRoom = socket.rooms.discovered(locator);
|
|
84
|
+
if (socket.session.now().roomsListed &&
|
|
85
|
+
(listedRoom === undefined ||
|
|
86
|
+
listedRoom.replica.admission !== 'admitted' ||
|
|
87
|
+
socket.rooms.standing(locator).unreadable))
|
|
88
|
+
return 'unadmitted';
|
|
89
|
+
const stored = held.get(locator);
|
|
90
|
+
if (stored === undefined)
|
|
91
|
+
return 'acquiring';
|
|
92
|
+
if (!stored.indexed)
|
|
93
|
+
return 'preparing';
|
|
94
|
+
return 'complete';
|
|
95
|
+
}
|
|
96
|
+
function conversationCoverage({ socket, conversations }, reach) {
|
|
97
|
+
const declaredConversations = reach === null || reach.conversations;
|
|
98
|
+
if (!declaredConversations || socket.conversations() === undefined)
|
|
99
|
+
return 'undeclared';
|
|
100
|
+
if (!conversations.known() || !conversations.current())
|
|
101
|
+
return 'acquiring';
|
|
102
|
+
return 'complete';
|
|
103
|
+
}
|
|
104
|
+
function connectionOf({ socket }, lastCompleted) {
|
|
105
|
+
if (socket.isOpen())
|
|
106
|
+
return 'connected';
|
|
107
|
+
if (socket.session.now().moving.providerUnreachable)
|
|
108
|
+
return 'unreachable';
|
|
109
|
+
return !socket.streamed && lastCompleted !== null ? 'connected' : 'connecting';
|
|
110
|
+
}
|
|
111
|
+
export async function connectionNow(runtime) {
|
|
112
|
+
const { store, socket } = runtime;
|
|
113
|
+
if (socket.isOpen() || socket.session.now().moving.providerUnreachable || socket.streamed) {
|
|
114
|
+
return connectionOf(runtime, null);
|
|
115
|
+
}
|
|
116
|
+
return connectionOf(runtime, (await (await store.open()).facts()).lastCompleted);
|
|
117
|
+
}
|
|
118
|
+
async function readinessHeld({ store }) {
|
|
119
|
+
const local = await store.open();
|
|
120
|
+
const [held, facts] = await Promise.all([store.covering(), local.facts()]);
|
|
121
|
+
return { held: held.rooms, facts };
|
|
122
|
+
}
|
|
123
|
+
function readinessFor(runtime, port, reach, { held, facts }) {
|
|
124
|
+
const { store, socket, usableWhenHeld } = runtime;
|
|
125
|
+
const required = requiredRooms(runtime, reach, held);
|
|
126
|
+
const coverage = required.rooms.map((room) => ({ room, state: roomState(runtime, room, held) }));
|
|
127
|
+
const preparing = coverage
|
|
128
|
+
.filter((room) => room.state === 'preparing' && !socket.rooms.standing(room.room).unpreparable)
|
|
129
|
+
.map(({ room }) => room);
|
|
130
|
+
if (preparing.length > 0)
|
|
131
|
+
prepare(runtime, preparing);
|
|
132
|
+
const { persistence, storageLoss, heldWhenOpened } = store.device.now();
|
|
133
|
+
return readinessOf({
|
|
134
|
+
code: port.code,
|
|
135
|
+
coverage: {
|
|
136
|
+
listed: required.listed,
|
|
137
|
+
rooms: coverage,
|
|
138
|
+
conversations: conversationCoverage(runtime, reach),
|
|
139
|
+
},
|
|
140
|
+
persistence,
|
|
141
|
+
connection: connectionOf(runtime, facts.lastCompleted),
|
|
142
|
+
house: socket.session.now().refusal !== null
|
|
143
|
+
? 'refused'
|
|
144
|
+
: socket.writesHeld()
|
|
145
|
+
? 'write-halted'
|
|
146
|
+
: 'open',
|
|
147
|
+
space: store.space.full() ? 'full' : null,
|
|
148
|
+
installation: installationOf(store, coverage, held),
|
|
149
|
+
lost: storageLoss !== null,
|
|
150
|
+
established: facts.targets[port.target]?.established === true ||
|
|
151
|
+
(heldWhenOpened && usableWhenHeld.includes(port.target)),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function establish(runtime, name) {
|
|
155
|
+
const { store, journal } = runtime;
|
|
156
|
+
const { device } = store;
|
|
157
|
+
if (device.now().establishing.has(name))
|
|
158
|
+
return;
|
|
159
|
+
device.set({ establishing: new Set([...device.now().establishing, name]) });
|
|
160
|
+
void store
|
|
161
|
+
.durably(async (local) => {
|
|
162
|
+
const { targets } = await local.facts();
|
|
163
|
+
await local.fact('targets', { ...targets, [name]: { established: true } });
|
|
164
|
+
})
|
|
165
|
+
.then(() => {
|
|
166
|
+
store.readiness.queue();
|
|
167
|
+
void probeEachMinute(runtime);
|
|
168
|
+
}, () => {
|
|
169
|
+
journal.record(`target record failed ${name}`);
|
|
170
|
+
})
|
|
171
|
+
.finally(() => {
|
|
172
|
+
const establishing = new Set(device.now().establishing);
|
|
173
|
+
establishing.delete(name);
|
|
174
|
+
device.set({ establishing });
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function deliverReadiness(runtime, watch, held) {
|
|
178
|
+
if (!runtime.store.readiness.held(watch))
|
|
179
|
+
return;
|
|
180
|
+
const readiness = readinessFor(runtime, watch.port, watch.reach, held);
|
|
181
|
+
if (readiness.ready && held.facts.targets[watch.port.target]?.established !== true) {
|
|
182
|
+
establish(runtime, watch.port.target);
|
|
183
|
+
}
|
|
184
|
+
if (!runtime.store.readiness.changed(watch, JSON.stringify(readiness)))
|
|
185
|
+
return;
|
|
186
|
+
watch.deliver(structuredClone(readiness));
|
|
187
|
+
}
|
|
188
|
+
export async function deliverOwedReadiness(runtime, owed) {
|
|
189
|
+
const held = await readinessHeld(runtime);
|
|
190
|
+
if (runtime.socket.closed())
|
|
191
|
+
return;
|
|
192
|
+
for (const watch of owed)
|
|
193
|
+
deliverReadiness(runtime, watch, held);
|
|
194
|
+
}
|
|
195
|
+
export function watchReadiness({ store }, port, reach, deliver) {
|
|
196
|
+
const watch = { port, reach, deliver };
|
|
197
|
+
const stop = store.readiness.add(watch);
|
|
198
|
+
void store.open().then(() => store.readiness.owe([watch]), () => store.readiness.owe([watch]));
|
|
199
|
+
return stop;
|
|
200
|
+
}
|
|
201
|
+
export function filled(runtime) {
|
|
202
|
+
const { store, socket, journal } = runtime;
|
|
203
|
+
if (socket.closed() || !store.space.fill())
|
|
204
|
+
return;
|
|
205
|
+
journal.record('space full');
|
|
206
|
+
store.readiness.queue();
|
|
207
|
+
void probeEachMinute(runtime);
|
|
208
|
+
}
|
|
209
|
+
async function installedTarget({ store, usableWhenHeld }) {
|
|
210
|
+
if (store.device.now().heldWhenOpened && usableWhenHeld.length > 0)
|
|
211
|
+
return true;
|
|
212
|
+
const { targets } = await (await store.open()).facts();
|
|
213
|
+
return Object.values(targets).some((target) => target.established);
|
|
214
|
+
}
|
|
215
|
+
async function probeEachMinute(runtime) {
|
|
216
|
+
const { store, socket } = runtime;
|
|
217
|
+
const { space } = store;
|
|
218
|
+
const idle = () => !space.full() || space.probing() || socket.closed();
|
|
219
|
+
if (idle())
|
|
220
|
+
return;
|
|
221
|
+
if (!(await installedTarget(runtime).catch(() => false)))
|
|
222
|
+
return;
|
|
223
|
+
if (idle())
|
|
224
|
+
return;
|
|
225
|
+
space.probeEachMinute();
|
|
226
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type FiguresCover } from './figures.js';
|
|
2
|
+
import type { Cover, Ran } from './live.js';
|
|
3
|
+
import { type Plan, type QueryResult } from './query.js';
|
|
4
|
+
import { type Deliver, type Fail, type PortReach } from './reach.js';
|
|
5
|
+
import type { Runtime } from './runtime.js';
|
|
6
|
+
import { type SearchResult } from './search.js';
|
|
7
|
+
import type { QueryRoom } from './store.js';
|
|
8
|
+
export declare function figuresCover(runtime: Runtime): Promise<FiguresCover>;
|
|
9
|
+
export declare function answeredPlan(runtime: Runtime, plan: Plan, cover: () => Promise<Cover>): Promise<Ran>;
|
|
10
|
+
export declare function rowsQuery(runtime: Runtime, plan: Plan): Promise<QueryResult>;
|
|
11
|
+
export declare function planned(runtime: Runtime, input: unknown, reach: PortReach | null): Promise<Plan>;
|
|
12
|
+
export declare function roomTallies(runtime: Runtime, rooms: readonly QueryRoom[], since: string): Promise<readonly import("./tallies.js").RoomTally[]>;
|
|
13
|
+
export declare function watchPlan(runtime: Runtime, plan: Plan, deliver: Deliver, fail: Fail): () => void;
|
|
14
|
+
export declare function watchPlanned(runtime: Runtime, planning: Promise<Plan>, deliver: Deliver, fail: Fail): () => void;
|
|
15
|
+
export declare function searched(runtime: Runtime, input: unknown, reach: PortReach | null): Promise<SearchResult>;
|
|
16
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAK5C,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAa,SAAS,EAAgB,MAAM,YAAY,CAAC;AAuFrE,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAa1E;AA2ED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,GAAG,CAAC,CAQd;AAQD,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAWlF;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,wDAO7F;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAchG;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,GACT,MAAM,IAAI,CAeZ;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,OAAO,CAAC,YAAY,CAAC,CAqDvB"}
|