@slopus/happy-agent-client 0.0.121 → 0.0.123

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.
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Applies operations to the sidebar document. This is the function the daemon applies every batch
3
+ * with, so a client that applies its own unconfirmed batches with it draws exactly what the daemon
4
+ * will commit, and a client replaying `space.sidebar.changed` reaches exactly the announced version.
5
+ */
6
+ import { Value } from "@sinclair/typebox/value";
7
+ import { formatSpaceSidebar, SPACE_SIDEBAR_LIMITS, SPACE_SIDEBAR_RESERVED_IDS, SpaceSidebarError, utf8Length, widgetCheck, } from "./spaceSidebarDocument.js";
8
+ import { spaceSidebarOperationSchema, } from "./protocol/spaces.js";
9
+ /** An operation that cannot apply; `operationIndex` is its zero-based place in the batch. */
10
+ export class SpaceSidebarOperationError extends SpaceSidebarError {
11
+ operationIndex;
12
+ constructor(operationIndex, operation, reason) {
13
+ super(`Operation ${String(operationIndex)} (${describe(operation)}) cannot apply: ${reason}`);
14
+ this.name = "SpaceSidebarOperationError";
15
+ this.operationIndex = operationIndex;
16
+ }
17
+ }
18
+ /**
19
+ * Applies `operations` in order to `document`, which is left unchanged. With `base` — the version
20
+ * the operations were made against — an `after` anchor that is gone falls back to the nearest node
21
+ * that preceded it among its siblings in `base` and still sits under the same parent, or first
22
+ * under that parent. Without `base` a missing anchor cannot apply. Throws
23
+ * `SpaceSidebarOperationError` for the first operation that cannot apply.
24
+ */
25
+ export function applySpaceSidebarOperations(document, operations, options = {}) {
26
+ const working = structuredClone(document);
27
+ const applied = [];
28
+ for (const [index, operation] of operations.entries()) {
29
+ const done = applyOperation(working, operation, options.base, index);
30
+ if (done !== undefined)
31
+ applied.push(done);
32
+ }
33
+ if (utf8Length(formatSpaceSidebar(working)) > SPACE_SIDEBAR_LIMITS.bytes) {
34
+ // Find the first operation that crossed the limit, so the refusal names it.
35
+ const probe = structuredClone(document);
36
+ for (const [index, operation] of operations.entries()) {
37
+ applyOperation(probe, operation, options.base, index);
38
+ if (utf8Length(formatSpaceSidebar(probe)) > SPACE_SIDEBAR_LIMITS.bytes)
39
+ throw new SpaceSidebarOperationError(index, operation, "the sidebar would exceed 128 KiB.");
40
+ }
41
+ }
42
+ return { document: working, operations: applied };
43
+ }
44
+ /**
45
+ * Applies one operation to `document` in place and returns it as applied, or `undefined` when it
46
+ * changed nothing. Shared with the document differ; not part of the public surface.
47
+ */
48
+ export function applyOperation(document, operation, base, index) {
49
+ if (!Value.Check(spaceSidebarOperationSchema, operation))
50
+ throw new SpaceSidebarOperationError(index, operation, "it is not a valid sidebar operation.");
51
+ try {
52
+ switch (operation.type) {
53
+ case "insert":
54
+ return insert(document, operation, base);
55
+ case "move":
56
+ return move(document, operation, base);
57
+ case "remove":
58
+ return remove(document, operation);
59
+ case "set":
60
+ return set(document, operation);
61
+ }
62
+ }
63
+ catch (error) {
64
+ if (error instanceof SpaceSidebarError && !(error instanceof SpaceSidebarOperationError))
65
+ throw new SpaceSidebarOperationError(index, operation, error.message);
66
+ throw error;
67
+ }
68
+ }
69
+ /** Finds a node by ID anywhere in the document. */
70
+ export function locateSpaceSidebarNode(document, id) {
71
+ const search = (siblings, parentId, depth) => {
72
+ for (const node of siblings) {
73
+ if (node.id === id)
74
+ return { node, siblings, parentId, depth };
75
+ if (node.type === "space") {
76
+ const found = search(node.children, node.id, depth + 1);
77
+ if (found !== undefined)
78
+ return found;
79
+ }
80
+ }
81
+ return undefined;
82
+ };
83
+ return search(document.items, "nav", 2);
84
+ }
85
+ /**
86
+ * How many items a move of the item at `index` takes along: a section takes its block, the
87
+ * heading and every item after it up to the next section or separator; anything else only itself.
88
+ */
89
+ export function spaceSidebarRunLength(siblings, index) {
90
+ if (siblings[index]?.type !== "section")
91
+ return 1;
92
+ let end = index + 1;
93
+ while (end < siblings.length &&
94
+ siblings[end].type !== "section" &&
95
+ siblings[end].type !== "separator")
96
+ end++;
97
+ return end - index;
98
+ }
99
+ function insert(document, operation, base) {
100
+ const node = operation.node;
101
+ if (SPACE_SIDEBAR_RESERVED_IDS.includes(node.id))
102
+ throw new SpaceSidebarError(`the ID ${node.id} is reserved.`);
103
+ if (locateSpaceSidebarNode(document, node.id) !== undefined)
104
+ throw new SpaceSidebarError(`${node.id} is already in the sidebar.`);
105
+ if (node.type === "widget")
106
+ widgetCheck(node.html);
107
+ const place = resolve(document, operation.to, base);
108
+ standCheck(node.type, place.parentId);
109
+ if (place.depth > SPACE_SIDEBAR_LIMITS.depth)
110
+ throw new SpaceSidebarError("the sidebar would nest deeper than 16.");
111
+ if (elementCount(document) + 1 > SPACE_SIDEBAR_LIMITS.elements)
112
+ throw new SpaceSidebarError("the sidebar would hold more than 1,000 elements.");
113
+ place.siblings.splice(place.index, 0, nodeOf(node));
114
+ return { type: "insert", node: operation.node, to: place.position };
115
+ }
116
+ function move(document, operation, base) {
117
+ if (operation.id === "nav")
118
+ throw new SpaceSidebarError("the nav root cannot move.");
119
+ const at = locateSpaceSidebarNode(document, operation.id);
120
+ if (at === undefined)
121
+ throw new SpaceSidebarError(`${operation.id} is no longer in the sidebar.`);
122
+ const from = at.siblings.indexOf(at.node);
123
+ const moving = at.siblings.slice(from, from + spaceSidebarRunLength(at.siblings, from));
124
+ const target = "after" in operation.to ? operation.to.after : operation.to.parent;
125
+ if (target !== null && moving.some((node) => contains(node, target)))
126
+ throw new SpaceSidebarError(`${operation.id} cannot move into itself or what it carries.`);
127
+ at.siblings.splice(from, moving.length);
128
+ const place = resolve(document, operation.to, base);
129
+ for (const node of moving) {
130
+ standCheck(node.type, place.parentId);
131
+ if (place.depth + height(node) - 1 > SPACE_SIDEBAR_LIMITS.depth)
132
+ throw new SpaceSidebarError("the sidebar would nest deeper than 16.");
133
+ }
134
+ place.siblings.splice(place.index, 0, ...moving);
135
+ if (place.siblings === at.siblings && place.index === from)
136
+ return undefined;
137
+ return { type: "move", id: operation.id, to: place.position };
138
+ }
139
+ function remove(document, operation) {
140
+ if (SPACE_SIDEBAR_RESERVED_IDS.includes(operation.id))
141
+ throw new SpaceSidebarError(`${operation.id} cannot be removed.`);
142
+ const at = locateSpaceSidebarNode(document, operation.id);
143
+ // Already gone: what the operation asked for is true.
144
+ if (at === undefined)
145
+ return undefined;
146
+ at.siblings.splice(at.siblings.indexOf(at.node), 1);
147
+ return operation;
148
+ }
149
+ function set(document, operation) {
150
+ const { type: _type, id, ...fields } = operation;
151
+ const given = Object.keys(fields);
152
+ if (given.length === 0)
153
+ throw new SpaceSidebarError("it changes nothing.");
154
+ const node = id === "nav"
155
+ ? document
156
+ : locateSpaceSidebarNode(document, id)?.node;
157
+ if (node === undefined)
158
+ throw new SpaceSidebarError(`${id} is no longer in the sidebar.`);
159
+ const kind = id === "nav" ? "nav" : node.type;
160
+ const allowed = {
161
+ nav: ["foldRibbon"],
162
+ section: ["label", "collapsed"],
163
+ space: ["expanded", "foldRibbon"],
164
+ widget: ["html"],
165
+ };
166
+ for (const field of given)
167
+ if (!(allowed[kind] ?? []).includes(field))
168
+ throw new SpaceSidebarError(`${kind === "nav" ? "the nav" : `a ${kind}`} has no ${field}.`);
169
+ if (fields.html !== undefined)
170
+ widgetCheck(fields.html);
171
+ const changed = {};
172
+ for (const field of given) {
173
+ const value = fields[field];
174
+ if (field === "foldRibbon" && value === null) {
175
+ if (node[field] === undefined)
176
+ continue;
177
+ delete node[field];
178
+ }
179
+ else {
180
+ if (node[field] === value)
181
+ continue;
182
+ node[field] = value;
183
+ }
184
+ changed[field] = value;
185
+ }
186
+ if (Object.keys(changed).length === 0)
187
+ return undefined;
188
+ return { type: "set", id, ...changed };
189
+ }
190
+ function resolve(document, to, base) {
191
+ if ("parent" in to)
192
+ return first(document, to.parent);
193
+ if (to.after === "nav")
194
+ throw new SpaceSidebarError("nothing stands after the nav root.");
195
+ const anchor = locateSpaceSidebarNode(document, to.after);
196
+ if (anchor !== undefined)
197
+ return {
198
+ siblings: anchor.siblings,
199
+ index: anchor.siblings.indexOf(anchor.node) + 1,
200
+ parentId: anchor.parentId,
201
+ depth: anchor.depth,
202
+ position: { after: to.after },
203
+ };
204
+ const before = base === undefined ? undefined : locateSpaceSidebarNode(base, to.after);
205
+ if (before === undefined)
206
+ throw new SpaceSidebarError(`${to.after} is not in the sidebar.`);
207
+ // The anchor left: follow the nearest node that preceded it and is still under its parent.
208
+ for (let index = before.siblings.indexOf(before.node) - 1; index >= 0; index--) {
209
+ const candidate = locateSpaceSidebarNode(document, before.siblings[index].id);
210
+ if (candidate !== undefined && candidate.parentId === before.parentId)
211
+ return {
212
+ siblings: candidate.siblings,
213
+ index: candidate.siblings.indexOf(candidate.node) + 1,
214
+ parentId: candidate.parentId,
215
+ depth: candidate.depth,
216
+ position: { after: candidate.node.id },
217
+ };
218
+ }
219
+ return first(document, before.parentId === "nav" ? null : before.parentId);
220
+ }
221
+ function first(document, parent) {
222
+ if (parent === null)
223
+ return {
224
+ siblings: document.items,
225
+ index: 0,
226
+ parentId: "nav",
227
+ depth: 2,
228
+ position: { parent: null },
229
+ };
230
+ const holder = locateSpaceSidebarNode(document, parent);
231
+ if (holder === undefined)
232
+ throw new SpaceSidebarError(`${parent} is no longer in the sidebar.`);
233
+ if (holder.node.type !== "space")
234
+ throw new SpaceSidebarError(`only a row or a session holds sessions, not ${parent}.`);
235
+ return {
236
+ siblings: holder.node.children,
237
+ index: 0,
238
+ parentId: parent,
239
+ depth: holder.depth + 1,
240
+ position: { parent },
241
+ };
242
+ }
243
+ /** Rows and sessions may stand under a row or session; every other kind only in the list. */
244
+ function standCheck(type, parentId) {
245
+ if (parentId !== "nav" && type !== "space")
246
+ throw new SpaceSidebarError(`a ${type} stands only in the top-level list.`);
247
+ }
248
+ function nodeOf(node) {
249
+ switch (node.type) {
250
+ case "space":
251
+ return {
252
+ type: "space",
253
+ id: node.id,
254
+ expanded: node.expanded === true,
255
+ ...(node.foldRibbon === undefined ? {} : { foldRibbon: node.foldRibbon }),
256
+ children: [],
257
+ };
258
+ case "section":
259
+ return {
260
+ type: "section",
261
+ id: node.id,
262
+ label: node.label,
263
+ collapsed: node.collapsed === true,
264
+ };
265
+ case "separator":
266
+ return { type: "separator", id: node.id };
267
+ case "widget":
268
+ return { type: "widget", id: node.id, html: node.html };
269
+ }
270
+ }
271
+ function contains(node, id) {
272
+ return (node.id === id ||
273
+ (node.type === "space" && node.children.some((child) => contains(child, id))));
274
+ }
275
+ function height(node) {
276
+ return node.type === "space" ? 1 + Math.max(0, ...node.children.map(height)) : 1;
277
+ }
278
+ function elementCount(document) {
279
+ const count = (node) => 1 +
280
+ (node.type === "space" ? node.children.reduce((sum, child) => sum + count(child), 0) : 0);
281
+ return 1 + document.items.reduce((sum, item) => sum + count(item), 0);
282
+ }
283
+ function describe(operation) {
284
+ return `${operation.type} ${operation.type === "insert" ? operation.node.id : operation.id}`;
285
+ }
286
+ //# sourceMappingURL=applySpaceSidebarOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applySpaceSidebarOperations.js","sourceRoot":"","sources":["../sources/applySpaceSidebarOperations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Turns a proposed whole document into operations by node ID, so a whole-document write goes
3
+ * through the same rebase and authorship rules as a batch of operations. The daemon converts
4
+ * Prioritizing's HTML and older clients' whole-document writes with it.
5
+ */
6
+ import type { SpaceSidebarDocument, SpaceSidebarOperation } from "./protocol/spaces.js";
7
+ /**
8
+ * The operations that turn `current` into `proposed`. As few items as possible move: the most
9
+ * items stay put at every level, a section whose block travelled whole moves as one block, and
10
+ * only what changed is set. Applying the result to `current` gives `proposed` exactly.
11
+ *
12
+ * With `widgets: false` the proposal comes from a writer that cannot see widgets: it may not
13
+ * contain one, and the current widgets stay where they are.
14
+ */
15
+ export declare function diffSpaceSidebar(current: SpaceSidebarDocument, proposed: SpaceSidebarDocument, options?: {
16
+ readonly widgets?: boolean;
17
+ }): SpaceSidebarOperation[];
18
+ //# sourceMappingURL=diffSpaceSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffSpaceSidebar.d.ts","sourceRoot":"","sources":["../sources/diffSpaceSidebar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EACR,oBAAoB,EAGpB,qBAAqB,EAGxB,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7C,qBAAqB,EAAE,CAmBzB"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Turns a proposed whole document into operations by node ID, so a whole-document write goes
3
+ * through the same rebase and authorship rules as a batch of operations. The daemon converts
4
+ * Prioritizing's HTML and older clients' whole-document writes with it.
5
+ */
6
+ import { applyOperation, applySpaceSidebarOperations, locateSpaceSidebarNode, spaceSidebarRunLength, } from "./applySpaceSidebarOperations.js";
7
+ import { formatSpaceSidebar, SpaceSidebarError } from "./spaceSidebarDocument.js";
8
+ /**
9
+ * The operations that turn `current` into `proposed`. As few items as possible move: the most
10
+ * items stay put at every level, a section whose block travelled whole moves as one block, and
11
+ * only what changed is set. Applying the result to `current` gives `proposed` exactly.
12
+ *
13
+ * With `widgets: false` the proposal comes from a writer that cannot see widgets: it may not
14
+ * contain one, and the current widgets stay where they are.
15
+ */
16
+ export function diffSpaceSidebar(current, proposed, options = {}) {
17
+ const keepWidgets = options.widgets === false;
18
+ if (keepWidgets && proposed.items.some((item) => item.type === "widget"))
19
+ throw new SpaceSidebarError("This write cannot contain widgets.");
20
+ const wanted = formatSpaceSidebar(proposed, { widgets: !keepWidgets });
21
+ // Moving whole blocks keeps a dragged section one move. A proposal that breaks a moved
22
+ // section's block apart is written item by item instead, which is always exact.
23
+ for (const blocks of [true, false]) {
24
+ let operations;
25
+ try {
26
+ operations = plan(current, proposed, keepWidgets, blocks);
27
+ }
28
+ catch (error) {
29
+ if (blocks && error instanceof SpaceSidebarError)
30
+ continue;
31
+ throw error;
32
+ }
33
+ const { document } = applySpaceSidebarOperations(current, operations);
34
+ if (formatSpaceSidebar(document, { widgets: !keepWidgets }) === wanted)
35
+ return operations;
36
+ }
37
+ throw new Error("The sidebar change could not be expressed as operations.");
38
+ }
39
+ function plan(current, proposed, keepWidgets, blocks) {
40
+ const working = structuredClone(current);
41
+ const operations = [];
42
+ const emit = (operation) => {
43
+ if (applyOperation(working, operation, undefined, operations.length) !== undefined)
44
+ operations.push(operation);
45
+ };
46
+ const visible = (items) => keepWidgets ? items.filter((item) => item.type !== "widget") : [...items];
47
+ const exists = (id) => locateSpaceSidebarNode(working, id) !== undefined;
48
+ const place = (id, node, to) => emit(exists(id) ? { type: "move", id, to } : { type: "insert", node: newNode(node), to });
49
+ const target = visible(proposed.items);
50
+ if (blocks) {
51
+ for (const step of topLevelUnits(visible(current.items), target))
52
+ place(step.id, step.node, step.to);
53
+ }
54
+ else {
55
+ // Item by item: each item lands right after the one before it, so the placed items always
56
+ // lead the list and a section carries only items that are placed again after it.
57
+ for (const [index, node] of target.entries()) {
58
+ if (visible(working.items)[index]?.id === node.id)
59
+ continue;
60
+ place(node.id, node, index === 0 ? { parent: null } : { after: target[index - 1].id });
61
+ }
62
+ }
63
+ // Each row's and session's nested sessions, top down.
64
+ const nest = (parent) => {
65
+ const holder = locateSpaceSidebarNode(working, parent.id).node;
66
+ const wanted = parent.children.map((child) => child.id);
67
+ const present = holder.children
68
+ .map((child) => child.id)
69
+ .filter((id) => wanted.includes(id));
70
+ const still = stationary(present, wanted.filter((id) => present.includes(id)));
71
+ for (const [index, child] of parent.children.entries())
72
+ if (!still.has(child.id))
73
+ place(child.id, child, index === 0 ? { parent: parent.id } : { after: parent.children[index - 1].id });
74
+ parent.children.forEach(nest);
75
+ };
76
+ for (const item of target)
77
+ if (item.type === "space")
78
+ nest(item);
79
+ // Switches and text.
80
+ const settle = (node) => {
81
+ const now = locateSpaceSidebarNode(working, node.id).node;
82
+ const fields = changedFields(now, node);
83
+ if (Object.keys(fields).length > 0)
84
+ emit({ type: "set", id: node.id, ...fields });
85
+ if (node.type === "space")
86
+ node.children.forEach(settle);
87
+ };
88
+ target.forEach(settle);
89
+ if ((working.foldRibbon ?? null) !== (proposed.foldRibbon ?? null))
90
+ emit({ type: "set", id: "nav", foldRibbon: proposed.foldRibbon ?? null });
91
+ // Whatever the proposal left out, outermost first; anything it kept was moved out already.
92
+ const kept = new Set();
93
+ const collect = (node) => {
94
+ kept.add(node.id);
95
+ if (node.type === "space")
96
+ node.children.forEach(collect);
97
+ };
98
+ proposed.items.forEach(collect);
99
+ const leaving = [];
100
+ const sweep = (node) => {
101
+ if (keepWidgets && node.type === "widget")
102
+ return;
103
+ if (!kept.has(node.id))
104
+ leaving.push(node.id);
105
+ else if (node.type === "space")
106
+ node.children.forEach(sweep);
107
+ };
108
+ working.items.forEach(sweep);
109
+ for (const id of leaving)
110
+ emit({ type: "remove", id });
111
+ return operations;
112
+ }
113
+ /**
114
+ * The top-level moves and inserts, block by block. A section whose current block is the start of
115
+ * its proposed block travels as one unit; everything else is a unit of its own. The longest run of
116
+ * units already in order stays, and every other unit lands right after the unit before it. A
117
+ * section that moved without its block cannot be one move, so this refuses and the caller writes
118
+ * item by item.
119
+ */
120
+ function topLevelUnits(current, proposed) {
121
+ const runOf = (items, index) => items.slice(index + 1, index + spaceSidebarRunLength(items, index)).map((item) => item.id);
122
+ const currentRuns = new Map(current.flatMap((item, index) => item.type === "section" ? [[item.id, runOf(current, index)]] : []));
123
+ const whole = new Set();
124
+ for (const [index, item] of proposed.entries()) {
125
+ const before = currentRuns.get(item.id);
126
+ const after = runOf(proposed, index);
127
+ if (before !== undefined && before.every((id, at) => after[at] === id))
128
+ whole.add(item.id);
129
+ }
130
+ const units = (items, runs) => {
131
+ const result = [];
132
+ for (let index = 0; index < items.length; index++) {
133
+ const item = items[index];
134
+ const run = whole.has(item.id) ? runs(item.id) : [];
135
+ result.push({ id: item.id, node: item, last: run.at(-1) ?? item.id });
136
+ index += run.length;
137
+ }
138
+ return result;
139
+ };
140
+ const before = units(current, (id) => currentRuns.get(id));
141
+ const after = units(proposed, (id) => currentRuns.get(id));
142
+ const known = new Set(before.map((unit) => unit.id));
143
+ const still = stationary(before.map((unit) => unit.id).filter((id) => after.some((unit) => unit.id === id)), after.map((unit) => unit.id).filter((id) => known.has(id)));
144
+ for (const unit of after)
145
+ if (unit.node.type === "section" &&
146
+ known.has(unit.id) &&
147
+ !still.has(unit.id) &&
148
+ !whole.has(unit.id))
149
+ throw new SpaceSidebarError(`Section ${unit.id} moved without its block.`);
150
+ const steps = [];
151
+ let previous;
152
+ for (const unit of after) {
153
+ if (!still.has(unit.id))
154
+ steps.push({
155
+ id: unit.id,
156
+ node: unit.node,
157
+ to: previous === undefined ? { parent: null } : { after: previous },
158
+ });
159
+ previous = unit.last;
160
+ }
161
+ return steps;
162
+ }
163
+ /**
164
+ * The keys that keep their place: the longest subsequence of `before` that `after` keeps in order.
165
+ * Both hold the same unique keys. Documents hold at most 1,000 elements, bounding this to 1M pairs.
166
+ */
167
+ function stationary(before, after) {
168
+ const positions = new Map(before.map((id, index) => [id, index]));
169
+ const lengths = after.map(() => 1);
170
+ const previous = after.map(() => -1);
171
+ let best = -1;
172
+ for (let index = 0; index < after.length; index++) {
173
+ for (let earlier = 0; earlier < index; earlier++) {
174
+ if (positions.get(after[earlier]) < positions.get(after[index]) &&
175
+ lengths[earlier] + 1 > lengths[index]) {
176
+ lengths[index] = lengths[earlier] + 1;
177
+ previous[index] = earlier;
178
+ }
179
+ }
180
+ if (best === -1 || lengths[index] > lengths[best])
181
+ best = index;
182
+ }
183
+ const kept = new Set();
184
+ for (let index = best; index !== -1; index = previous[index])
185
+ kept.add(after[index]);
186
+ return kept;
187
+ }
188
+ function newNode(node) {
189
+ switch (node.type) {
190
+ case "space":
191
+ return {
192
+ type: "space",
193
+ id: node.id,
194
+ ...(node.expanded ? { expanded: true } : {}),
195
+ ...(node.foldRibbon === undefined ? {} : { foldRibbon: node.foldRibbon }),
196
+ };
197
+ case "section":
198
+ return {
199
+ type: "section",
200
+ id: node.id,
201
+ label: node.label,
202
+ ...(node.collapsed ? { collapsed: true } : {}),
203
+ };
204
+ case "separator":
205
+ return { type: "separator", id: node.id };
206
+ case "widget":
207
+ return { type: "widget", id: node.id, html: node.html };
208
+ case "search":
209
+ case "create":
210
+ throw new SpaceSidebarError(`The sidebar needs exactly one ${node.id}.`);
211
+ }
212
+ }
213
+ function changedFields(now, wanted) {
214
+ if (now.type === "section" && wanted.type === "section")
215
+ return {
216
+ ...(now.label === wanted.label ? {} : { label: wanted.label }),
217
+ ...(now.collapsed === wanted.collapsed ? {} : { collapsed: wanted.collapsed }),
218
+ };
219
+ if (now.type === "space" && wanted.type === "space")
220
+ return {
221
+ ...(now.expanded === wanted.expanded ? {} : { expanded: wanted.expanded }),
222
+ ...(now.foldRibbon === wanted.foldRibbon
223
+ ? {}
224
+ : { foldRibbon: wanted.foldRibbon ?? null }),
225
+ };
226
+ if (now.type === "widget" && wanted.type === "widget" && now.html !== wanted.html)
227
+ return { html: wanted.html };
228
+ return {};
229
+ }
230
+ //# sourceMappingURL=diffSpaceSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffSpaceSidebar.js","sourceRoot":"","sources":["../sources/diffSpaceSidebar.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,9 @@ export * from "./happyFileLinks.js";
20
20
  export * from "./happyReferences.js";
21
21
  export * from "./mediaLayoutBlocks.js";
22
22
  export * from "./mediaLayoutHtml.js";
23
+ export { formatSpaceSidebar, parseSpaceSidebar, SPACE_SIDEBAR_LIMITS, SPACE_SIDEBAR_RESERVED_IDS, SpaceSidebarError, } from "./spaceSidebarDocument.js";
24
+ export { applySpaceSidebarOperations, locateSpaceSidebarNode, spaceSidebarRunLength, SpaceSidebarOperationError, type SpaceSidebarApplication, type SpaceSidebarLocation, } from "./applySpaceSidebarOperations.js";
25
+ export { diffSpaceSidebar } from "./diffSpaceSidebar.js";
23
26
  export { artifactAddressPublic, artifactAddressLoopback, artifactNetworkHost, } from "./artifactNetwork.js";
24
27
  export * from "./protocol/agents.js";
25
28
  export * from "./protocol/artifacts.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EACR,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,6 +12,9 @@ export * from "./happyFileLinks.js";
12
12
  export * from "./happyReferences.js";
13
13
  export * from "./mediaLayoutBlocks.js";
14
14
  export * from "./mediaLayoutHtml.js";
15
+ export { formatSpaceSidebar, parseSpaceSidebar, SPACE_SIDEBAR_LIMITS, SPACE_SIDEBAR_RESERVED_IDS, SpaceSidebarError, } from "./spaceSidebarDocument.js";
16
+ export { applySpaceSidebarOperations, locateSpaceSidebarNode, spaceSidebarRunLength, SpaceSidebarOperationError, } from "./applySpaceSidebarOperations.js";
17
+ export { diffSpaceSidebar } from "./diffSpaceSidebar.js";
15
18
  export { artifactAddressPublic, artifactAddressLoopback, artifactNetworkHost, } from "./artifactNetwork.js";
16
19
  export * from "./protocol/agents.js";
17
20
  export * from "./protocol/artifacts.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GAIzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GAIzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,GAG7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
@@ -74,6 +74,16 @@ export declare const healthResponseSchema: import("@sinclair/typebox").TObject<{
74
74
  surfaceEditing: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
75
75
  /** True when new work accepts client-supplied `taskId`, `workspaceId`, and `agentId`. */
76
76
  stemCellIdentities: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
77
+ /**
78
+ * True when the sidebar document takes operations by node ID, holds widgets, and
79
+ * announces each version with `space.sidebar.changed`.
80
+ */
81
+ sidebarOperations: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
82
+ /**
83
+ * True when a nested sidebar `happy-space` may name one of the person's spaces, an
84
+ * attachment, and conversations may attach to their row with `attach_to_my_row`.
85
+ */
86
+ sidebarAttachments: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
77
87
  }>>;
78
88
  /** Always `true`; a daemon that cannot answer does not answer. */
79
89
  healthy: import("@sinclair/typebox").TBoolean;