@agentshouse/mdruntime 0.1.0-cf24798931067 → 0.1.0-cf281e8224a5d
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 +22 -10
- package/dist/acceptance.d.ts +6 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +385 -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 +177 -54
- 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 +18 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +8 -0
- package/dist/bootstrap.d.ts +31 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +324 -92
- 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 -62
- package/dist/change.d.ts +42 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +36 -0
- 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 +50 -15
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +110 -9
- 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 +711 -0
- package/dist/connection.d.ts +8 -111
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +104 -2219
- 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 +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/expectation.d.ts +4 -2
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +33 -11
- 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 +132 -18
- package/dist/identity.d.ts +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +3 -0
- package/dist/index.d.ts +35 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/install.d.ts +56 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +554 -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 +163 -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 +21 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +271 -91
- package/dist/messages.d.ts +52 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +162 -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 +127 -26
- 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 +56 -5
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +49 -0
- package/dist/overlay.d.ts +16 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +140 -177
- package/dist/{chat/parts.d.ts → parts.d.ts} +12 -9
- package/dist/parts.d.ts.map +1 -0
- package/dist/{chat/parts.js → parts.js} +53 -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 +51 -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} +13 -2
- package/dist/reach.d.ts +21 -5
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +291 -69
- package/dist/react.d.ts +20 -6
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +17 -18
- 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 -56
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +59 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +342 -158
- package/dist/room-draft.d.ts +54 -8
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +268 -63
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +217 -0
- package/dist/rows.d.ts +30 -35
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -124
- 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 +74 -3
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +812 -153
- package/dist/saves.d.ts +70 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +1005 -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 +145 -0
- package/dist/shared.d.ts +10 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +339 -0
- package/dist/shown.d.ts +31 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +292 -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 +38 -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 +82 -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 +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +106 -117
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +137 -496
- 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 +416 -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 -31
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +62 -29
- package/package.json +26 -15
- package/AGENTS.md +0 -290
- package/dist/attachment.d.ts +0 -3
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -8
- 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/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- 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 -57
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -637
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat.d.ts +0 -7
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -2
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -433
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
|
-
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
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 }];
|
|
7
|
+
}
|
|
8
|
+
export function sameBinary(left, right) {
|
|
9
|
+
if (left === undefined || right === undefined)
|
|
10
|
+
return left === right;
|
|
11
|
+
return (left.state === right.state &&
|
|
12
|
+
left.byteLength === right.byteLength &&
|
|
13
|
+
left.mediaType === right.mediaType &&
|
|
14
|
+
left.sha256 === right.sha256 &&
|
|
15
|
+
(left.state === 'accepted'
|
|
16
|
+
? right.state === 'accepted'
|
|
17
|
+
: right.state === 'pending' && left.localId === right.localId));
|
|
18
|
+
}
|
|
2
19
|
export function sameChange(left, right) {
|
|
3
20
|
if (left === undefined || right === undefined)
|
|
4
21
|
return left === right;
|
|
@@ -8,10 +25,13 @@ export function sameChange(left, right) {
|
|
|
8
25
|
left.author?.name === right.author?.name);
|
|
9
26
|
}
|
|
10
27
|
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
28
|
+
function isPart(change) {
|
|
29
|
+
return change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble';
|
|
30
|
+
}
|
|
11
31
|
function at(path, name) {
|
|
12
32
|
return `${path} ${name}`;
|
|
13
33
|
}
|
|
14
|
-
function priorsOf(preconditions) {
|
|
34
|
+
function* priorsOf(preconditions) {
|
|
15
35
|
const fields = new Map();
|
|
16
36
|
const sections = new Map();
|
|
17
37
|
const preambles = new Map();
|
|
@@ -25,6 +45,7 @@ function priorsOf(preconditions) {
|
|
|
25
45
|
if (precondition.kind === 'preamble') {
|
|
26
46
|
preambles.set(precondition.path, precondition.value);
|
|
27
47
|
}
|
|
48
|
+
yield ROW_WEIGHT;
|
|
28
49
|
}
|
|
29
50
|
return {
|
|
30
51
|
field: (path, name) => fields.get(at(path, name)),
|
|
@@ -40,51 +61,50 @@ function compose(fields, sections) {
|
|
|
40
61
|
const opened = parse(skeleton);
|
|
41
62
|
if (!opened.ok)
|
|
42
63
|
return skeleton;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const next = apply(document, { kind: 'field', name, value, prior: undefined });
|
|
46
|
-
if (next.outcome === 'applied')
|
|
47
|
-
document = next.document;
|
|
48
|
-
}
|
|
49
|
-
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);
|
|
50
66
|
}
|
|
51
|
-
function edited(
|
|
52
|
-
if (change.kind === 'field')
|
|
53
|
-
return
|
|
67
|
+
function edited(change, priors) {
|
|
68
|
+
if (change.kind === 'field')
|
|
69
|
+
return {
|
|
54
70
|
kind: 'field',
|
|
55
71
|
name: change.name,
|
|
56
72
|
value: change.value,
|
|
57
73
|
prior: priors.field(change.path, change.name),
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
kind: 'preamble',
|
|
63
|
-
value: change.value,
|
|
64
|
-
prior: priors.preamble(change.path),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
if (change.kind !== 'section')
|
|
68
|
-
return null;
|
|
69
|
-
return apply(document, {
|
|
74
|
+
};
|
|
75
|
+
if (change.kind === 'preamble')
|
|
76
|
+
return { kind: 'preamble', value: change.value, prior: priors.preamble(change.path) };
|
|
77
|
+
return {
|
|
70
78
|
kind: 'section',
|
|
71
79
|
name: change.name,
|
|
72
80
|
value: change.value,
|
|
73
81
|
prior: priors.section(change.path, change.name),
|
|
74
|
-
}
|
|
82
|
+
};
|
|
75
83
|
}
|
|
76
|
-
function edit(staged,
|
|
77
|
-
const
|
|
84
|
+
function edit(staged, changes, priors) {
|
|
85
|
+
const path = changes[0].path;
|
|
86
|
+
delete staged.revisions[path];
|
|
87
|
+
const text = staged.documents[path];
|
|
78
88
|
if (text === undefined)
|
|
79
|
-
return
|
|
80
|
-
const parsed = parse(text,
|
|
89
|
+
return changes.length;
|
|
90
|
+
const parsed = parse(text, path);
|
|
81
91
|
if (!parsed.ok)
|
|
82
|
-
return
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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;
|
|
88
108
|
}
|
|
89
109
|
function relocate(staged, from, to) {
|
|
90
110
|
const text = staged.documents[from];
|
|
@@ -92,8 +112,9 @@ function relocate(staged, from, to) {
|
|
|
92
112
|
delete staged.documents[from];
|
|
93
113
|
staged.documents[to] = text;
|
|
94
114
|
}
|
|
95
|
-
else if (staged.
|
|
96
|
-
staged.
|
|
115
|
+
else if (staged.binaries[from] !== undefined) {
|
|
116
|
+
staged.binaries[to] = staged.binaries[from];
|
|
117
|
+
delete staged.binaries[from];
|
|
97
118
|
}
|
|
98
119
|
else {
|
|
99
120
|
return false;
|
|
@@ -103,185 +124,127 @@ function relocate(staged, from, to) {
|
|
|
103
124
|
}
|
|
104
125
|
function moveHead(heads, from, to) {
|
|
105
126
|
const revision = heads.revisions[from];
|
|
127
|
+
const fileId = heads.fileIds[from];
|
|
128
|
+
const created = heads.created[from];
|
|
106
129
|
const change = heads.changes[from];
|
|
107
130
|
delete heads.revisions[from];
|
|
131
|
+
delete heads.fileIds[from];
|
|
132
|
+
delete heads.created[from];
|
|
108
133
|
delete heads.changes[from];
|
|
134
|
+
delete heads.fileIds[to];
|
|
135
|
+
delete heads.created[to];
|
|
109
136
|
delete heads.changes[to];
|
|
110
137
|
if (revision !== undefined)
|
|
111
138
|
heads.revisions[to] = revision;
|
|
139
|
+
if (fileId !== undefined)
|
|
140
|
+
heads.fileIds[to] = fileId;
|
|
141
|
+
if (created !== undefined)
|
|
142
|
+
heads.created[to] = created;
|
|
112
143
|
if (change !== undefined)
|
|
113
144
|
heads.changes[to] = change;
|
|
114
145
|
}
|
|
115
146
|
function erase(staged, path) {
|
|
116
147
|
delete staged.documents[path];
|
|
117
148
|
delete staged.revisions[path];
|
|
149
|
+
delete staged.fileIds[path];
|
|
150
|
+
delete staged.created[path];
|
|
118
151
|
delete staged.changes[path];
|
|
119
|
-
staged.
|
|
152
|
+
delete staged.binaries[path];
|
|
120
153
|
}
|
|
121
|
-
function stage(staged, change
|
|
122
|
-
if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
|
|
123
|
-
return edit(staged, change, priors);
|
|
124
|
-
}
|
|
154
|
+
function stage(staged, change) {
|
|
125
155
|
if (change.kind === 'create') {
|
|
126
156
|
staged.documents[change.path] =
|
|
127
157
|
'content' in change ? change.content : compose(change.fields, change.sections);
|
|
158
|
+
delete staged.fileIds[change.path];
|
|
159
|
+
delete staged.created[change.path];
|
|
128
160
|
delete staged.changes[change.path];
|
|
129
161
|
return true;
|
|
130
162
|
}
|
|
131
163
|
if (change.kind === 'replace') {
|
|
164
|
+
delete staged.revisions[change.path];
|
|
132
165
|
if (staged.documents[change.path] === undefined)
|
|
133
166
|
return false;
|
|
134
167
|
staged.documents[change.path] = change.content;
|
|
135
168
|
return true;
|
|
136
169
|
}
|
|
170
|
+
if (change.kind === 'binary') {
|
|
171
|
+
if (staged.documents[change.path] !== undefined)
|
|
172
|
+
return false;
|
|
173
|
+
staged.binaries[change.path] = {
|
|
174
|
+
state: 'pending',
|
|
175
|
+
localId: change.localId,
|
|
176
|
+
byteLength: change.byteLength,
|
|
177
|
+
mediaType: change.mediaType,
|
|
178
|
+
sha256: change.sha256,
|
|
179
|
+
};
|
|
180
|
+
delete staged.revisions[change.path];
|
|
181
|
+
delete staged.changes[change.path];
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
137
184
|
if (change.kind === 'move') {
|
|
138
185
|
return relocate(staged, change.path, change.to);
|
|
139
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
|
+
}
|
|
140
196
|
erase(staged, change.path);
|
|
141
197
|
return true;
|
|
142
198
|
}
|
|
143
|
-
|
|
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) {
|
|
144
210
|
const staged = {
|
|
145
|
-
documents:
|
|
146
|
-
|
|
147
|
-
revisions:
|
|
148
|
-
|
|
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),
|
|
149
217
|
};
|
|
150
218
|
for (const batch of queue) {
|
|
151
|
-
const priors = priorsOf(batch.preconditions);
|
|
152
|
-
for (
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
documents: staged.documents,
|
|
159
|
-
binaryTargets: [...staged.binaryTargets].sort(),
|
|
160
|
-
revisions: staged.revisions,
|
|
161
|
-
changes: staged.changes,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
function pathsOf(batch) {
|
|
165
|
-
return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
|
|
166
|
-
}
|
|
167
|
-
export function sameLayerText(left, right) {
|
|
168
|
-
const paths = Object.keys(left.documents);
|
|
169
|
-
return (paths.length === Object.keys(right.documents).length &&
|
|
170
|
-
paths.every((path) => left.documents[path] === right.documents[path]) &&
|
|
171
|
-
left.binaryTargets.length === right.binaryTargets.length &&
|
|
172
|
-
left.binaryTargets.every((path) => right.binaryTargets.includes(path)));
|
|
173
|
-
}
|
|
174
|
-
function replayHeads(base, queue) {
|
|
175
|
-
const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
|
|
176
|
-
for (const batch of queue) {
|
|
177
|
-
for (const change of batch.changes) {
|
|
178
|
-
if (change.kind === 'remove') {
|
|
179
|
-
delete heads.revisions[change.path];
|
|
180
|
-
delete heads.changes[change.path];
|
|
181
|
-
}
|
|
182
|
-
else if (change.kind === 'create') {
|
|
183
|
-
delete heads.changes[change.path];
|
|
184
|
-
}
|
|
185
|
-
else if (change.kind === 'move') {
|
|
186
|
-
moveHead(heads, change.path, change.to);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return heads;
|
|
191
|
-
}
|
|
192
|
-
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
193
|
-
const before = previousQueue.map((batch) => JSON.stringify(batch));
|
|
194
|
-
const after = queue.map((batch) => JSON.stringify(batch));
|
|
195
|
-
if (before.length === after.length &&
|
|
196
|
-
before.every((id, index) => id === after[index]) &&
|
|
197
|
-
sameLayerText(base, previousBase)) {
|
|
198
|
-
return {
|
|
199
|
-
documents: previousVisible.documents,
|
|
200
|
-
binaryTargets: previousVisible.binaryTargets,
|
|
201
|
-
...replayHeads(base, queue),
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
const affected = new Set();
|
|
205
|
-
const paths = new Set([
|
|
206
|
-
...Object.keys(base.documents),
|
|
207
|
-
...Object.keys(previousBase.documents),
|
|
208
|
-
...Object.keys(base.revisions),
|
|
209
|
-
...Object.keys(previousBase.revisions),
|
|
210
|
-
...Object.keys(base.changes),
|
|
211
|
-
...Object.keys(previousBase.changes),
|
|
212
|
-
...base.binaryTargets,
|
|
213
|
-
...previousBase.binaryTargets,
|
|
214
|
-
]);
|
|
215
|
-
for (const path of paths) {
|
|
216
|
-
if (base.documents[path] !== previousBase.documents[path] ||
|
|
217
|
-
base.revisions[path] !== previousBase.revisions[path] ||
|
|
218
|
-
!sameChange(base.changes[path], previousBase.changes[path]) ||
|
|
219
|
-
base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path))
|
|
220
|
-
affected.add(path);
|
|
221
|
-
}
|
|
222
|
-
const oldIds = new Set(before);
|
|
223
|
-
const newIds = new Set(after);
|
|
224
|
-
for (const batch of previousQueue) {
|
|
225
|
-
if (!newIds.has(JSON.stringify(batch)))
|
|
226
|
-
for (const path of pathsOf(batch))
|
|
227
|
-
affected.add(path);
|
|
228
|
-
}
|
|
229
|
-
for (const batch of queue) {
|
|
230
|
-
if (!oldIds.has(JSON.stringify(batch)))
|
|
231
|
-
for (const path of pathsOf(batch))
|
|
232
|
-
affected.add(path);
|
|
233
|
-
}
|
|
234
|
-
let expanded = true;
|
|
235
|
-
while (expanded) {
|
|
236
|
-
expanded = false;
|
|
237
|
-
for (const batch of queue) {
|
|
238
|
-
const touched = pathsOf(batch);
|
|
239
|
-
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;
|
|
240
226
|
continue;
|
|
241
|
-
for (const path of touched) {
|
|
242
|
-
if (affected.has(path))
|
|
243
|
-
continue;
|
|
244
|
-
affected.add(path);
|
|
245
|
-
expanded = true;
|
|
246
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;
|
|
247
240
|
}
|
|
248
241
|
}
|
|
249
|
-
const documents = {};
|
|
250
|
-
const revisions = {};
|
|
251
|
-
const changes = {};
|
|
252
|
-
for (const path of affected) {
|
|
253
|
-
if (base.documents[path] !== undefined)
|
|
254
|
-
documents[path] = base.documents[path];
|
|
255
|
-
if (base.revisions[path] !== undefined)
|
|
256
|
-
revisions[path] = base.revisions[path];
|
|
257
|
-
if (base.changes[path] !== undefined)
|
|
258
|
-
changes[path] = base.changes[path];
|
|
259
|
-
}
|
|
260
|
-
const staged = overlay({
|
|
261
|
-
documents,
|
|
262
|
-
revisions,
|
|
263
|
-
changes,
|
|
264
|
-
binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),
|
|
265
|
-
}, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
266
|
-
const mergedDocuments = { ...previousVisible.documents };
|
|
267
|
-
const mergedRevisions = { ...previousVisible.revisions };
|
|
268
|
-
const mergedChanges = { ...previousVisible.changes };
|
|
269
|
-
const mergedTargets = new Set(previousVisible.binaryTargets);
|
|
270
|
-
for (const path of affected) {
|
|
271
|
-
delete mergedDocuments[path];
|
|
272
|
-
delete mergedRevisions[path];
|
|
273
|
-
delete mergedChanges[path];
|
|
274
|
-
mergedTargets.delete(path);
|
|
275
|
-
}
|
|
276
|
-
Object.assign(mergedDocuments, staged.documents);
|
|
277
|
-
Object.assign(mergedRevisions, staged.revisions);
|
|
278
|
-
Object.assign(mergedChanges, staged.changes);
|
|
279
|
-
for (const path of staged.binaryTargets)
|
|
280
|
-
mergedTargets.add(path);
|
|
281
242
|
return {
|
|
282
|
-
documents:
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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),
|
|
286
249
|
};
|
|
287
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
|
} | {
|
|
@@ -36,6 +38,7 @@ export type Part = {
|
|
|
36
38
|
};
|
|
37
39
|
export declare function partsOf(raw: readonly unknown[]): readonly Part[];
|
|
38
40
|
export declare function contextIn(raw: unknown): TurnContext | null;
|
|
41
|
+
export declare function tokensIn(raw: unknown): number | null;
|
|
39
42
|
export type Turn = {
|
|
40
43
|
readonly turn: string;
|
|
41
44
|
readonly parts: readonly Part[];
|
|
@@ -45,13 +48,13 @@ export type ChatWork = {
|
|
|
45
48
|
readonly kind: 'job' | 'schedule' | 'subagent';
|
|
46
49
|
readonly title: string;
|
|
47
50
|
readonly next: string | null;
|
|
51
|
+
readonly activity: string | null;
|
|
48
52
|
};
|
|
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[]>;
|
|
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[]>;
|
|
57
60
|
//# 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;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMpD;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"}
|
|
@@ -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,70 @@ export function contextIn(raw) {
|
|
|
55
57
|
? { used: held.used, window: held.window }
|
|
56
58
|
: null;
|
|
57
59
|
}
|
|
58
|
-
const
|
|
59
|
-
export function
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
|
|
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);
|
|
70
78
|
}
|
|
71
|
-
export function
|
|
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) {
|
|
72
86
|
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
87
|
for (const { turn, parts, ended } of turns) {
|
|
79
88
|
for (const part of parts) {
|
|
80
89
|
if (part.type === 'subagent') {
|
|
81
90
|
const key = `subagent\u0000${part.description}`;
|
|
82
91
|
if (part.done)
|
|
83
|
-
|
|
92
|
+
closeLast(open, key);
|
|
84
93
|
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
94
|
open.push({
|
|
98
95
|
turn,
|
|
99
|
-
key
|
|
100
|
-
work: { kind: '
|
|
96
|
+
key,
|
|
97
|
+
work: { kind: 'subagent', title: part.description, next: null, activity: null },
|
|
101
98
|
});
|
|
102
99
|
}
|
|
100
|
+
continue;
|
|
103
101
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
+
},
|
|
107
114
|
}
|
|
108
|
-
|
|
109
|
-
else {
|
|
110
|
-
close(started);
|
|
111
|
-
close(schedule);
|
|
112
|
-
}
|
|
115
|
+
: null);
|
|
113
116
|
}
|
|
114
117
|
}
|
|
118
|
+
const doing = [...subagents];
|
|
115
119
|
const under = new Map();
|
|
116
|
-
for (const
|
|
117
|
-
|
|
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
|
+
}
|
|
118
125
|
return under;
|
|
119
126
|
}
|
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"}
|