@agentshouse/mdruntime 0.1.0-cd3ee807e46ae → 0.1.0-cd507e16e5fc0
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 +19 -16
- 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 +157 -57
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +7 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +40 -41
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +31 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +324 -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 +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -14
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -63
- package/dist/change.d.ts +32 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -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 +43 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +101 -12
- package/dist/collection.d.ts +11 -7
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +38 -79
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +717 -0
- package/dist/connection.d.ts +8 -116
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +104 -2410
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +1 -4
- 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 +57 -40
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +992 -543
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- 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 +19 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +20 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +161 -0
- package/dist/figures.d.ts +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +7 -122
- 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 +12 -3
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +130 -20
- package/dist/index.d.ts +34 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- 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 +23 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +165 -0
- 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/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +19 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +254 -94
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +168 -0
- package/dist/model.d.ts +11 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -10
- package/dist/models.d.ts +14 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +195 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +22 -4
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +120 -14
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- 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 +53 -8
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +43 -0
- package/dist/overlay.d.ts +4 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +111 -182
- package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +45 -46
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +26 -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 +50 -183
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -464
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +12 -1
- package/dist/reach.d.ts +21 -7
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +289 -89
- package/dist/react.d.ts +16 -6
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +49 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +27 -0
- package/dist/reads.d.ts +37 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +171 -0
- package/dist/recovery.d.ts +26 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +232 -0
- package/dist/refresh.d.ts +17 -14
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +143 -51
- 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 +56 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +333 -154
- package/dist/room-draft.d.ts +37 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +161 -74
- 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 +30 -37
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -126
- 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 +56 -9
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +548 -174
- 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 +15 -55
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -121
- package/dist/seed.d.ts +25 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +146 -0
- package/dist/shared.d.ts +15 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +425 -0
- 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 +5 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- 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 +106 -117
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +138 -490
- package/dist/stored.d.ts +156 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +649 -0
- 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 +417 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +740 -0
- 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/turn.d.ts +9 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +75 -0
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/windows.d.ts +11 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +16 -0
- package/dist/wire.d.ts +181 -33
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +62 -31
- package/package.json +22 -19
- package/AGENTS.md +0 -318
- package/dist/chat/acts.d.ts +0 -34
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -60
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -20
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -59
- package/dist/chat/markdown.d.ts +0 -19
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -187
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -645
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -33
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -440
package/dist/overlay.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { apply, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
|
|
2
|
+
import { drafted, entriesIn, settling } from './shared.js';
|
|
3
|
+
import { ROW_WEIGHT } from './turn.js';
|
|
4
|
+
export function* acceptedBinaries(files) {
|
|
5
|
+
for (const [path, file] of entriesIn(files))
|
|
6
|
+
yield [path, { state: 'accepted', ...file }];
|
|
4
7
|
}
|
|
5
8
|
export function sameBinary(left, right) {
|
|
6
9
|
if (left === undefined || right === undefined)
|
|
@@ -10,7 +13,7 @@ export function sameBinary(left, right) {
|
|
|
10
13
|
left.mediaType === right.mediaType &&
|
|
11
14
|
left.sha256 === right.sha256 &&
|
|
12
15
|
(left.state === 'accepted'
|
|
13
|
-
? right.state === 'accepted'
|
|
16
|
+
? right.state === 'accepted'
|
|
14
17
|
: right.state === 'pending' && left.localId === right.localId));
|
|
15
18
|
}
|
|
16
19
|
export function sameChange(left, right) {
|
|
@@ -22,10 +25,13 @@ export function sameChange(left, right) {
|
|
|
22
25
|
left.author?.name === right.author?.name);
|
|
23
26
|
}
|
|
24
27
|
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
28
|
+
function isPart(change) {
|
|
29
|
+
return change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble';
|
|
30
|
+
}
|
|
25
31
|
function at(path, name) {
|
|
26
32
|
return `${path} ${name}`;
|
|
27
33
|
}
|
|
28
|
-
function priorsOf(preconditions) {
|
|
34
|
+
function* priorsOf(preconditions) {
|
|
29
35
|
const fields = new Map();
|
|
30
36
|
const sections = new Map();
|
|
31
37
|
const preambles = new Map();
|
|
@@ -39,6 +45,7 @@ function priorsOf(preconditions) {
|
|
|
39
45
|
if (precondition.kind === 'preamble') {
|
|
40
46
|
preambles.set(precondition.path, precondition.value);
|
|
41
47
|
}
|
|
48
|
+
yield ROW_WEIGHT;
|
|
42
49
|
}
|
|
43
50
|
return {
|
|
44
51
|
field: (path, name) => fields.get(at(path, name)),
|
|
@@ -54,51 +61,50 @@ function compose(fields, sections) {
|
|
|
54
61
|
const opened = parse(skeleton);
|
|
55
62
|
if (!opened.ok)
|
|
56
63
|
return skeleton;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const next = apply(document, { kind: 'field', name, value, prior: undefined });
|
|
60
|
-
if (next.outcome === 'applied')
|
|
61
|
-
document = next.document;
|
|
62
|
-
}
|
|
63
|
-
return serialize(document);
|
|
64
|
+
const next = apply(opened.document, Object.entries(fields).flatMap(([name, value]) => frontmatterValue(value) ? [{ kind: 'field', name, value, prior: undefined }] : []));
|
|
65
|
+
return serialize(next.outcome === 'applied' ? next.document : opened.document);
|
|
64
66
|
}
|
|
65
|
-
function edited(
|
|
66
|
-
if (change.kind === 'field')
|
|
67
|
-
return
|
|
67
|
+
function edited(change, priors) {
|
|
68
|
+
if (change.kind === 'field')
|
|
69
|
+
return {
|
|
68
70
|
kind: 'field',
|
|
69
71
|
name: change.name,
|
|
70
72
|
value: change.value,
|
|
71
73
|
prior: priors.field(change.path, change.name),
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
kind: 'preamble',
|
|
77
|
-
value: change.value,
|
|
78
|
-
prior: priors.preamble(change.path),
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (change.kind !== 'section')
|
|
82
|
-
return null;
|
|
83
|
-
return apply(document, {
|
|
74
|
+
};
|
|
75
|
+
if (change.kind === 'preamble')
|
|
76
|
+
return { kind: 'preamble', value: change.value, prior: priors.preamble(change.path) };
|
|
77
|
+
return {
|
|
84
78
|
kind: 'section',
|
|
85
79
|
name: change.name,
|
|
86
80
|
value: change.value,
|
|
87
81
|
prior: priors.section(change.path, change.name),
|
|
88
|
-
}
|
|
82
|
+
};
|
|
89
83
|
}
|
|
90
|
-
function edit(staged,
|
|
91
|
-
const
|
|
84
|
+
function edit(staged, changes, priors) {
|
|
85
|
+
const path = changes[0].path;
|
|
86
|
+
delete staged.revisions[path];
|
|
87
|
+
const text = staged.documents[path];
|
|
92
88
|
if (text === undefined)
|
|
93
|
-
return
|
|
94
|
-
const parsed = parse(text,
|
|
89
|
+
return changes.length;
|
|
90
|
+
const parsed = parse(text, path);
|
|
95
91
|
if (!parsed.ok)
|
|
96
|
-
return
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
return changes.length;
|
|
93
|
+
const wanted = changes.map((change) => edited(change, priors));
|
|
94
|
+
const first = apply(parsed.document, wanted);
|
|
95
|
+
if (first.outcome === 'refuse')
|
|
96
|
+
return changes.length;
|
|
97
|
+
if (first.outcome === 'applied') {
|
|
98
|
+
staged.documents[path] = serialize(first.document);
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
const stale = new Set(first.stale);
|
|
102
|
+
const kept = wanted.filter((_, at) => !stale.has(at));
|
|
103
|
+
const rest = apply(parsed.document, kept);
|
|
104
|
+
if (rest.outcome !== 'applied')
|
|
105
|
+
return changes.length;
|
|
106
|
+
staged.documents[path] = serialize(rest.document);
|
|
107
|
+
return first.stale.length;
|
|
102
108
|
}
|
|
103
109
|
function relocate(staged, from, to) {
|
|
104
110
|
const text = staged.documents[from];
|
|
@@ -118,32 +124,44 @@ function relocate(staged, from, to) {
|
|
|
118
124
|
}
|
|
119
125
|
function moveHead(heads, from, to) {
|
|
120
126
|
const revision = heads.revisions[from];
|
|
127
|
+
const fileId = heads.fileIds[from];
|
|
128
|
+
const created = heads.created[from];
|
|
121
129
|
const change = heads.changes[from];
|
|
122
130
|
delete heads.revisions[from];
|
|
131
|
+
delete heads.fileIds[from];
|
|
132
|
+
delete heads.created[from];
|
|
123
133
|
delete heads.changes[from];
|
|
134
|
+
delete heads.fileIds[to];
|
|
135
|
+
delete heads.created[to];
|
|
124
136
|
delete heads.changes[to];
|
|
125
137
|
if (revision !== undefined)
|
|
126
138
|
heads.revisions[to] = revision;
|
|
139
|
+
if (fileId !== undefined)
|
|
140
|
+
heads.fileIds[to] = fileId;
|
|
141
|
+
if (created !== undefined)
|
|
142
|
+
heads.created[to] = created;
|
|
127
143
|
if (change !== undefined)
|
|
128
144
|
heads.changes[to] = change;
|
|
129
145
|
}
|
|
130
146
|
function erase(staged, path) {
|
|
131
147
|
delete staged.documents[path];
|
|
132
148
|
delete staged.revisions[path];
|
|
149
|
+
delete staged.fileIds[path];
|
|
150
|
+
delete staged.created[path];
|
|
133
151
|
delete staged.changes[path];
|
|
134
152
|
delete staged.binaries[path];
|
|
135
153
|
}
|
|
136
|
-
function stage(staged, change
|
|
137
|
-
if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
|
|
138
|
-
return edit(staged, change, priors);
|
|
139
|
-
}
|
|
154
|
+
function stage(staged, change) {
|
|
140
155
|
if (change.kind === 'create') {
|
|
141
156
|
staged.documents[change.path] =
|
|
142
157
|
'content' in change ? change.content : compose(change.fields, change.sections);
|
|
158
|
+
delete staged.fileIds[change.path];
|
|
159
|
+
delete staged.created[change.path];
|
|
143
160
|
delete staged.changes[change.path];
|
|
144
161
|
return true;
|
|
145
162
|
}
|
|
146
163
|
if (change.kind === 'replace') {
|
|
164
|
+
delete staged.revisions[change.path];
|
|
147
165
|
if (staged.documents[change.path] === undefined)
|
|
148
166
|
return false;
|
|
149
167
|
staged.documents[change.path] = change.content;
|
|
@@ -166,156 +184,67 @@ function stage(staged, change, priors) {
|
|
|
166
184
|
if (change.kind === 'move') {
|
|
167
185
|
return relocate(staged, change.path, change.to);
|
|
168
186
|
}
|
|
187
|
+
if (change.kind === 'arrival') {
|
|
188
|
+
erase(staged, change.path);
|
|
189
|
+
if ('content' in change)
|
|
190
|
+
staged.documents[change.path] = change.content;
|
|
191
|
+
else
|
|
192
|
+
staged.binaries[change.path] = { state: 'accepted', ...change.binary };
|
|
193
|
+
arrive(staged, change);
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
169
196
|
erase(staged, change.path);
|
|
170
197
|
return true;
|
|
171
198
|
}
|
|
172
|
-
|
|
199
|
+
function arrive(heads, change) {
|
|
200
|
+
if (change.revision !== undefined)
|
|
201
|
+
heads.revisions[change.path] = change.revision;
|
|
202
|
+
if (change.fileId !== undefined)
|
|
203
|
+
heads.fileIds[change.path] = change.fileId;
|
|
204
|
+
if (change.created !== undefined)
|
|
205
|
+
heads.created[change.path] = change.created;
|
|
206
|
+
if (change.change !== undefined)
|
|
207
|
+
heads.changes[change.path] = change.change;
|
|
208
|
+
}
|
|
209
|
+
export function* overlaying(base, queue, unapplied) {
|
|
173
210
|
const staged = {
|
|
174
|
-
documents:
|
|
175
|
-
binaries:
|
|
176
|
-
revisions:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const priors = priorsOf(batch.preconditions);
|
|
181
|
-
for (const change of batch.changes) {
|
|
182
|
-
if (!stage(staged, change, priors))
|
|
183
|
-
unapplied?.();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return {
|
|
187
|
-
documents: staged.documents,
|
|
188
|
-
binaries: staged.binaries,
|
|
189
|
-
revisions: staged.revisions,
|
|
190
|
-
changes: staged.changes,
|
|
211
|
+
documents: drafted(base.documents),
|
|
212
|
+
binaries: drafted(base.binaries),
|
|
213
|
+
revisions: drafted(base.revisions),
|
|
214
|
+
fileIds: drafted(base.fileIds),
|
|
215
|
+
created: drafted(base.created),
|
|
216
|
+
changes: drafted(base.changes),
|
|
191
217
|
};
|
|
192
|
-
}
|
|
193
|
-
function pathsOf(batch) {
|
|
194
|
-
return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
|
|
195
|
-
}
|
|
196
|
-
export function sameLayerText(left, right) {
|
|
197
|
-
const paths = Object.keys(left.documents);
|
|
198
|
-
return (paths.length === Object.keys(right.documents).length &&
|
|
199
|
-
paths.every((path) => left.documents[path] === right.documents[path]) &&
|
|
200
|
-
sameBinaries(left.binaries, right.binaries));
|
|
201
|
-
}
|
|
202
|
-
function sameBinaries(left, right) {
|
|
203
|
-
const paths = Object.keys(left);
|
|
204
|
-
return (paths.length === Object.keys(right).length &&
|
|
205
|
-
paths.every((path) => sameBinary(left[path], right[path])));
|
|
206
|
-
}
|
|
207
|
-
function replayHeads(base, queue) {
|
|
208
|
-
const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
|
|
209
218
|
for (const batch of queue) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
else if (change.kind === 'binary') {
|
|
219
|
-
delete heads.revisions[change.path];
|
|
220
|
-
delete heads.changes[change.path];
|
|
221
|
-
}
|
|
222
|
-
else if (change.kind === 'move') {
|
|
223
|
-
moveHead(heads, change.path, change.to);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return heads;
|
|
228
|
-
}
|
|
229
|
-
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
230
|
-
const before = previousQueue.map((batch) => JSON.stringify(batch));
|
|
231
|
-
const after = queue.map((batch) => JSON.stringify(batch));
|
|
232
|
-
if (before.length === after.length &&
|
|
233
|
-
before.every((id, index) => id === after[index]) &&
|
|
234
|
-
sameLayerText(base, previousBase)) {
|
|
235
|
-
return {
|
|
236
|
-
documents: previousVisible.documents,
|
|
237
|
-
binaries: previousVisible.binaries,
|
|
238
|
-
...replayHeads(base, queue),
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
const affected = new Set();
|
|
242
|
-
const paths = new Set([
|
|
243
|
-
...Object.keys(base.documents),
|
|
244
|
-
...Object.keys(previousBase.documents),
|
|
245
|
-
...Object.keys(base.revisions),
|
|
246
|
-
...Object.keys(previousBase.revisions),
|
|
247
|
-
...Object.keys(base.changes),
|
|
248
|
-
...Object.keys(previousBase.changes),
|
|
249
|
-
...Object.keys(base.binaries),
|
|
250
|
-
...Object.keys(previousBase.binaries),
|
|
251
|
-
]);
|
|
252
|
-
for (const path of paths) {
|
|
253
|
-
if (base.documents[path] !== previousBase.documents[path] ||
|
|
254
|
-
base.revisions[path] !== previousBase.revisions[path] ||
|
|
255
|
-
!sameChange(base.changes[path], previousBase.changes[path]) ||
|
|
256
|
-
!sameBinary(base.binaries[path], previousBase.binaries[path]))
|
|
257
|
-
affected.add(path);
|
|
258
|
-
}
|
|
259
|
-
const oldIds = new Set(before);
|
|
260
|
-
const newIds = new Set(after);
|
|
261
|
-
for (const batch of previousQueue) {
|
|
262
|
-
if (!newIds.has(JSON.stringify(batch)))
|
|
263
|
-
for (const path of pathsOf(batch))
|
|
264
|
-
affected.add(path);
|
|
265
|
-
}
|
|
266
|
-
for (const batch of queue) {
|
|
267
|
-
if (!oldIds.has(JSON.stringify(batch)))
|
|
268
|
-
for (const path of pathsOf(batch))
|
|
269
|
-
affected.add(path);
|
|
270
|
-
}
|
|
271
|
-
let expanded = true;
|
|
272
|
-
while (expanded) {
|
|
273
|
-
expanded = false;
|
|
274
|
-
for (const batch of queue) {
|
|
275
|
-
const touched = pathsOf(batch);
|
|
276
|
-
if (!touched.some((path) => affected.has(path)))
|
|
219
|
+
const priors = yield* priorsOf(batch.preconditions);
|
|
220
|
+
for (let index = 0; index < batch.changes.length; index += 1) {
|
|
221
|
+
const change = batch.changes[index];
|
|
222
|
+
if (!isPart(change)) {
|
|
223
|
+
if (!stage(staged, change))
|
|
224
|
+
unapplied?.();
|
|
225
|
+
yield ROW_WEIGHT;
|
|
277
226
|
continue;
|
|
278
|
-
for (const path of touched) {
|
|
279
|
-
if (affected.has(path))
|
|
280
|
-
continue;
|
|
281
|
-
affected.add(path);
|
|
282
|
-
expanded = true;
|
|
283
227
|
}
|
|
228
|
+
const run = [change];
|
|
229
|
+
while (index + 1 < batch.changes.length) {
|
|
230
|
+
const next = batch.changes[index + 1];
|
|
231
|
+
if (!isPart(next) || next.path !== change.path)
|
|
232
|
+
break;
|
|
233
|
+
run.push(next);
|
|
234
|
+
index += 1;
|
|
235
|
+
}
|
|
236
|
+
const text = staged.documents[change.path] ?? '';
|
|
237
|
+
for (let left = edit(staged, run, priors); left > 0; left -= 1)
|
|
238
|
+
unapplied?.();
|
|
239
|
+
yield ROW_WEIGHT + text.length;
|
|
284
240
|
}
|
|
285
241
|
}
|
|
286
|
-
const documents = {};
|
|
287
|
-
const revisions = {};
|
|
288
|
-
const changes = {};
|
|
289
|
-
const binaries = {};
|
|
290
|
-
for (const path of affected) {
|
|
291
|
-
if (base.documents[path] !== undefined)
|
|
292
|
-
documents[path] = base.documents[path];
|
|
293
|
-
if (base.revisions[path] !== undefined)
|
|
294
|
-
revisions[path] = base.revisions[path];
|
|
295
|
-
if (base.changes[path] !== undefined)
|
|
296
|
-
changes[path] = base.changes[path];
|
|
297
|
-
if (base.binaries[path] !== undefined)
|
|
298
|
-
binaries[path] = base.binaries[path];
|
|
299
|
-
}
|
|
300
|
-
const staged = overlay({ documents, revisions, changes, binaries }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
301
|
-
const mergedDocuments = { ...previousVisible.documents };
|
|
302
|
-
const mergedRevisions = { ...previousVisible.revisions };
|
|
303
|
-
const mergedChanges = { ...previousVisible.changes };
|
|
304
|
-
const mergedBinaries = { ...previousVisible.binaries };
|
|
305
|
-
for (const path of affected) {
|
|
306
|
-
delete mergedDocuments[path];
|
|
307
|
-
delete mergedRevisions[path];
|
|
308
|
-
delete mergedChanges[path];
|
|
309
|
-
delete mergedBinaries[path];
|
|
310
|
-
}
|
|
311
|
-
Object.assign(mergedDocuments, staged.documents);
|
|
312
|
-
Object.assign(mergedRevisions, staged.revisions);
|
|
313
|
-
Object.assign(mergedChanges, staged.changes);
|
|
314
|
-
Object.assign(mergedBinaries, staged.binaries);
|
|
315
242
|
return {
|
|
316
|
-
documents:
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
243
|
+
documents: yield* settling(staged.documents),
|
|
244
|
+
binaries: yield* settling(staged.binaries),
|
|
245
|
+
revisions: yield* settling(staged.revisions),
|
|
246
|
+
fileIds: yield* settling(staged.fileIds),
|
|
247
|
+
created: yield* settling(staged.created),
|
|
248
|
+
changes: yield* settling(staged.changes),
|
|
320
249
|
};
|
|
321
250
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { TurnContext } from '
|
|
1
|
+
import type { RunningSubagent, TurnContext } from './adapter.js';
|
|
2
|
+
import { type JobMarker, type OpenJob } from './job.js';
|
|
2
3
|
export type PlanStep = {
|
|
3
4
|
readonly content: string;
|
|
4
5
|
readonly status: string;
|
|
@@ -24,6 +25,7 @@ export type Part = {
|
|
|
24
25
|
readonly target: string | null;
|
|
25
26
|
} | {
|
|
26
27
|
readonly type: 'image';
|
|
28
|
+
readonly path: string;
|
|
27
29
|
readonly name: string;
|
|
28
30
|
readonly mediaType: string;
|
|
29
31
|
} | {
|
|
@@ -45,13 +47,13 @@ export type ChatWork = {
|
|
|
45
47
|
readonly kind: 'job' | 'schedule' | 'subagent';
|
|
46
48
|
readonly title: string;
|
|
47
49
|
readonly next: string | null;
|
|
50
|
+
readonly activity: string | null;
|
|
48
51
|
};
|
|
49
|
-
export
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
readonly
|
|
53
|
-
readonly
|
|
54
|
-
};
|
|
55
|
-
export declare function
|
|
56
|
-
export declare function stillRunning(turns: readonly Turn[]): ReadonlyMap<string, readonly ChatWork[]>;
|
|
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[]>;
|
|
57
59
|
//# 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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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { closeLast, markerMoved, openJobs } from './job.js';
|
|
2
|
+
import { excerpt, list, record, text } from './read.js';
|
|
2
3
|
const MARKERS = ['mode', 'compaction', 'retry', 'model', 'job'];
|
|
3
4
|
function partOf(raw) {
|
|
4
5
|
const part = record(raw);
|
|
@@ -22,10 +23,11 @@ function partOf(raw) {
|
|
|
22
23
|
return command === null ? null : { type: 'message', command, target: text(part, 'target') };
|
|
23
24
|
}
|
|
24
25
|
case 'image': {
|
|
26
|
+
const path = text(part, 'file');
|
|
25
27
|
const name = text(part, 'name');
|
|
26
|
-
return name === null
|
|
28
|
+
return path === null || name === null
|
|
27
29
|
? null
|
|
28
|
-
: { type: 'image', name, mediaType: text(part, 'media_type') ?? '' };
|
|
30
|
+
: { type: 'image', path, name, mediaType: text(part, 'media_type') ?? '' };
|
|
29
31
|
}
|
|
30
32
|
case 'marker': {
|
|
31
33
|
const marker = text(part, 'marker');
|
|
@@ -55,65 +57,62 @@ export function contextIn(raw) {
|
|
|
55
57
|
? { used: held.used, window: held.window }
|
|
56
58
|
: null;
|
|
57
59
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const at = said.lastIndexOf(': ');
|
|
61
|
-
const label = at === -1 ? said : said.slice(0, at);
|
|
62
|
-
const state = at === -1 ? '' : said.slice(at + 2);
|
|
63
|
-
if (state === 'running')
|
|
64
|
-
return { label, kind: 'started', state, next: null };
|
|
65
|
-
if (state === 'scheduled')
|
|
66
|
-
return { label, kind: 'scheduled', state, next: null };
|
|
67
|
-
return state.startsWith(NEXT_RUN)
|
|
68
|
-
? { label, kind: 'scheduled', state, next: state.slice(NEXT_RUN.length) }
|
|
69
|
-
: { label, kind: 'ended', state, next: null };
|
|
60
|
+
export function counted(count) {
|
|
61
|
+
return count === 1 ? '1 command' : `${count} commands`;
|
|
70
62
|
}
|
|
71
|
-
export function
|
|
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) {
|
|
72
78
|
const open = [];
|
|
73
|
-
const close = (key) => {
|
|
74
|
-
const at = open.map((one) => one.key).lastIndexOf(key);
|
|
75
|
-
if (at !== -1)
|
|
76
|
-
open.splice(at, 1);
|
|
77
|
-
};
|
|
78
79
|
for (const { turn, parts, ended } of turns) {
|
|
79
80
|
for (const part of parts) {
|
|
80
81
|
if (part.type === 'subagent') {
|
|
81
82
|
const key = `subagent\u0000${part.description}`;
|
|
82
83
|
if (part.done)
|
|
83
|
-
|
|
84
|
+
closeLast(open, key);
|
|
84
85
|
else if (ended) {
|
|
85
|
-
open.push({ turn, key, work: { kind: 'subagent', title: part.description, next: null } });
|
|
86
|
-
}
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (part.type !== 'marker' || part.marker !== 'job')
|
|
90
|
-
continue;
|
|
91
|
-
const job = jobOf(part.text);
|
|
92
|
-
const started = `job\u0000${job.label}`;
|
|
93
|
-
const schedule = `schedule\u0000${job.label}`;
|
|
94
|
-
if (job.kind === 'scheduled') {
|
|
95
|
-
close(schedule);
|
|
96
|
-
if (ended) {
|
|
97
86
|
open.push({
|
|
98
87
|
turn,
|
|
99
|
-
key
|
|
100
|
-
work: { kind: '
|
|
88
|
+
key,
|
|
89
|
+
work: { kind: 'subagent', title: part.description, next: null, activity: null },
|
|
101
90
|
});
|
|
102
91
|
}
|
|
92
|
+
continue;
|
|
103
93
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
+
},
|
|
107
106
|
}
|
|
108
|
-
|
|
109
|
-
else {
|
|
110
|
-
close(started);
|
|
111
|
-
close(schedule);
|
|
112
|
-
}
|
|
107
|
+
: null);
|
|
113
108
|
}
|
|
114
109
|
}
|
|
110
|
+
const doing = [...subagents];
|
|
115
111
|
const under = new Map();
|
|
116
|
-
for (const
|
|
117
|
-
|
|
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
|
+
}
|
|
118
117
|
return under;
|
|
119
118
|
}
|
package/dist/paths.d.ts
CHANGED
|
@@ -1,4 +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;
|
|
5
|
+
export declare function ancestors(path: string): readonly string[];
|
|
4
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,3 +23,28 @@ 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
|
+
}
|
|
47
|
+
export function ancestors(path) {
|
|
48
|
+
const parts = path.split('/');
|
|
49
|
+
return parts.slice(1).map((_, at) => parts.slice(0, at + 1).join('/'));
|
|
50
|
+
}
|
|
@@ -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"}
|