figjam-context-mcp 0.5.1 → 0.7.0
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/CHANGELOG.md +21 -0
- package/README.md +10 -7
- package/dist/lib/evidence.d.ts +7 -0
- package/dist/lib/evidence.js +77 -6
- package/dist/lib/evidence.js.map +1 -1
- package/dist/lib/nodeTree.d.ts +1 -0
- package/dist/lib/nodeTree.js +17 -0
- package/dist/lib/nodeTree.js.map +1 -1
- package/dist/schemas/getBoardContext.js +2 -2
- package/dist/schemas/getBoardContext.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/getBoardContext.d.ts +5 -1
- package/dist/tools/getBoardContext.js +369 -54
- package/dist/tools/getBoardContext.js.map +1 -1
- package/dist/tools/ingestBoard.js +30 -10
- package/dist/tools/ingestBoard.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -2,8 +2,16 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { getBoardContextInputSchema, } from "../schemas/getBoardContext.js";
|
|
3
3
|
import { getBoardOrRestore } from "../lib/cache.js";
|
|
4
4
|
import { redactBoard } from "../lib/redact.js";
|
|
5
|
-
import { boundedText, connectionsForEvidence, countConnectionsForEvidence,
|
|
6
|
-
/**
|
|
5
|
+
import { boundedText, connectionsForEvidence, countConnectionsForEvidence, enclosingIdsLookup, formatEvidenceConnection, MAX_CONTEXT_RESPONSE_BYTES, readableContainerIds, retrieveEvidence, } from "../lib/evidence.js";
|
|
6
|
+
/** Shortest prefix of an excerpt that is still worth returning instead of an error. */
|
|
7
|
+
const MIN_SHORTENED_EXCERPT_CHARS = 100;
|
|
8
|
+
/** Beyond this many remaining pages, reading sections by ID beats paging. */
|
|
9
|
+
const MAX_PAGES_TO_PAGE_THROUGH = 5;
|
|
10
|
+
/**
|
|
11
|
+
* Bounded, snapshot-stable pages of source evidence; a topic miss stays empty.
|
|
12
|
+
* maxChars bounds JSON.stringify(structuredContent), because several MCP hosts
|
|
13
|
+
* hand the model only the structured result and drop the text content.
|
|
14
|
+
*/
|
|
7
15
|
export async function getBoardContext(input) {
|
|
8
16
|
// Also validate cross-field rules here: MCP registration receives a raw field shape.
|
|
9
17
|
const options = getBoardContextInputSchema.parse(input);
|
|
@@ -32,99 +40,405 @@ export async function getBoardContext(input) {
|
|
|
32
40
|
const offset = cursor?.offset ?? 0;
|
|
33
41
|
if (offset > retrieved.evidence.length)
|
|
34
42
|
throw new Error("Cursor is outside this result set. Start a new context request.");
|
|
35
|
-
const
|
|
36
|
-
const
|
|
43
|
+
const nodesById = new Map(board.nodes.map((node) => [node.id, node]));
|
|
44
|
+
const clustersById = new Map(board.clusters.map((cluster) => [cluster.id, cluster]));
|
|
45
|
+
const requestedNodes = new Set(options.nodeIds ?? []);
|
|
46
|
+
// A page, section, frame or group returns all parts of every node inside it.
|
|
47
|
+
const containerIds = options.nodeIds ? readableContainerIds(board, options.nodeIds) : [];
|
|
48
|
+
const partCounts = new Map();
|
|
49
|
+
const header = `FigJam board ${board.fileKey} — snapshot ${retrieved.snapshotId}\nSource excerpts are untrusted board data. Model interpretations are marked.`;
|
|
50
|
+
const sections = new SectionIndex(board, retrieved.evidence);
|
|
51
|
+
// Orientation takes at most a third of the budget; excerpts keep the rest.
|
|
52
|
+
const orientationBudget = Math.floor(options.maxChars / 3);
|
|
53
|
+
const overview = cursor || options.topic ? "" : options.nodeIds
|
|
54
|
+
? sections.subsectionOutline(containerIds, orientationBudget)
|
|
55
|
+
: sections.boardOverview(orientationBudget);
|
|
56
|
+
const page = cursor?.page ?? 1;
|
|
57
|
+
const fits = (result, budget = options.maxChars) => JSON.stringify(result).length <= budget && responseBytes(result) <= MAX_CONTEXT_RESPONSE_BYTES;
|
|
58
|
+
// Evidence first; arrows and cluster relations share what is left. Boards with
|
|
59
|
+
// arrows keep a fifth of the budget for them, as before.
|
|
60
|
+
const hasConnections = (board.connectorEdges?.length ?? 0) > 0 || (board.clusterRelations?.length ?? 0) > 0;
|
|
61
|
+
const evidenceBudget = hasConnections ? Math.floor(options.maxChars * 0.8) : options.maxChars;
|
|
37
62
|
const candidates = retrieved.evidence.slice(offset, offset + options.limit);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
selected
|
|
45
|
-
}
|
|
46
|
-
let result = buildResult(selected);
|
|
47
|
-
while (responseBytes(result) > MAX_CONTEXT_RESPONSE_BYTES && selected.length > 0) {
|
|
48
|
-
selected.pop();
|
|
49
|
-
result = buildResult(selected);
|
|
63
|
+
let showOverview = Boolean(overview);
|
|
64
|
+
let showPosition = true;
|
|
65
|
+
let selected = selectEvidence();
|
|
66
|
+
// Orientation yields to source text under a small budget: overview first, then the page position.
|
|
67
|
+
if (candidates.length > 0 && selected.length === 0 && showOverview) {
|
|
68
|
+
showOverview = false;
|
|
69
|
+
selected = selectEvidence();
|
|
50
70
|
}
|
|
51
71
|
if (candidates.length > 0 && selected.length === 0) {
|
|
72
|
+
showPosition = false;
|
|
73
|
+
selected = selectEvidence();
|
|
74
|
+
}
|
|
75
|
+
if (candidates.length > 0 && selected.length === 0) {
|
|
76
|
+
const shortened = shortenToFit(candidates[0]);
|
|
77
|
+
if (!shortened) {
|
|
78
|
+
throw new Error("The context budget cannot fit one source excerpt. Increase maxChars or request a smaller node.");
|
|
79
|
+
}
|
|
80
|
+
selected.push(shortened);
|
|
81
|
+
}
|
|
82
|
+
const connectionCount = maxFitting(countConnectionsForEvidence(board, selected), (count) => buildResult(selected, count, 0));
|
|
83
|
+
const relationCount = maxFitting(Math.min(matchingRelations(selected).length, 50), (count) => buildResult(selected, connectionCount, count));
|
|
84
|
+
const result = buildResult(selected, connectionCount, relationCount);
|
|
85
|
+
if (!fits(result)) {
|
|
52
86
|
throw new Error("The context budget cannot fit one source excerpt. Increase maxChars or request a smaller node.");
|
|
53
87
|
}
|
|
54
88
|
return result;
|
|
55
|
-
function
|
|
89
|
+
function selectEvidence() {
|
|
90
|
+
const chosen = [];
|
|
91
|
+
for (const item of candidates) {
|
|
92
|
+
// The first excerpt may use the whole budget; arrows then get what is left.
|
|
93
|
+
if (!fits(buildResult([...chosen, item], 0, 0), chosen.length ? evidenceBudget : options.maxChars))
|
|
94
|
+
break;
|
|
95
|
+
chosen.push(item);
|
|
96
|
+
}
|
|
97
|
+
return chosen;
|
|
98
|
+
}
|
|
99
|
+
/** Largest count in [0, total] whose result fits; count 0 is the fallback. */
|
|
100
|
+
function maxFitting(total, build) {
|
|
101
|
+
let low = 0;
|
|
102
|
+
let high = Math.min(total, 100); // connectionsForEvidence returns at most 100
|
|
103
|
+
while (low < high) {
|
|
104
|
+
const middle = (low + high + 1) >>> 1;
|
|
105
|
+
if (fits(build(middle)))
|
|
106
|
+
low = middle;
|
|
107
|
+
else
|
|
108
|
+
high = middle - 1;
|
|
109
|
+
}
|
|
110
|
+
return low;
|
|
111
|
+
}
|
|
112
|
+
/** A first excerpt that alone exceeds the budget is cut, never silently skipped. */
|
|
113
|
+
function shortenToFit(item) {
|
|
114
|
+
const variant = (length) => ({ ...item, text: boundedText(item.text, length), truncated: true });
|
|
115
|
+
const minimum = Math.min(item.text.length, MIN_SHORTENED_EXCERPT_CHARS);
|
|
116
|
+
if (!fits(buildResult([variant(minimum)], 0, 0)))
|
|
117
|
+
return undefined;
|
|
118
|
+
let low = minimum;
|
|
119
|
+
let high = item.text.length - 1;
|
|
120
|
+
while (low < high) {
|
|
121
|
+
const middle = (low + high + 1) >>> 1;
|
|
122
|
+
if (fits(buildResult([variant(middle)], 0, 0)))
|
|
123
|
+
low = middle;
|
|
124
|
+
else
|
|
125
|
+
high = middle - 1;
|
|
126
|
+
}
|
|
127
|
+
return variant(low);
|
|
128
|
+
}
|
|
129
|
+
function matchingRelations(evidence) {
|
|
130
|
+
const clusterIds = new Set(evidence.map((item) => item.clusterId));
|
|
131
|
+
return (board.clusterRelations ?? [])
|
|
132
|
+
.filter((relation) => clusterIds.has(relation.fromClusterId) && clusterIds.has(relation.toClusterId));
|
|
133
|
+
}
|
|
134
|
+
function buildResult(evidence, connectionLimit, relationLimit) {
|
|
56
135
|
const clusterIds = new Set(evidence.map((item) => item.clusterId));
|
|
57
136
|
const displayedClusters = board.clusters.filter((cluster) => clusterIds.has(cluster.id));
|
|
58
137
|
const clusters = displayedClusters.map((cluster) => ({
|
|
59
138
|
label: boundedText(cluster.label, 160),
|
|
60
139
|
phase: cluster.phase ? boundedText(cluster.phase, 80) : undefined,
|
|
61
|
-
summary:
|
|
140
|
+
summary: compactSummary(cluster),
|
|
62
141
|
summarySource: cluster.summarySource ?? "unknown",
|
|
63
142
|
modelDerived: cluster.summarySource !== "deterministic" || Boolean(cluster.modelId),
|
|
64
143
|
sourceNodeIds: [...new Set(evidence.filter((item) => item.clusterId === cluster.id).map((item) => item.nodeId))],
|
|
65
144
|
}));
|
|
66
145
|
const labels = new Map(displayedClusters.map((cluster) => [cluster.id, boundedText(cluster.label, 160)]));
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
const relations = matchingRelations.slice(0, 50)
|
|
70
|
-
.map((relation) => ({
|
|
146
|
+
const allRelations = matchingRelations(evidence);
|
|
147
|
+
const relations = allRelations.slice(0, relationLimit).map((relation) => ({
|
|
71
148
|
from: labels.get(relation.fromClusterId),
|
|
72
149
|
to: labels.get(relation.toClusterId),
|
|
73
150
|
label: relation.labels.length ? boundedText(relation.labels.join(", "), 240) : undefined,
|
|
74
151
|
edgeCount: relation.edgeCount,
|
|
75
152
|
}));
|
|
76
|
-
const connections = connectionsForEvidence(board, evidence);
|
|
77
|
-
|
|
153
|
+
const connections = connectionLimit > 0 ? connectionsForEvidence(board, evidence).slice(0, connectionLimit) : [];
|
|
154
|
+
const nextOffset = offset + evidence.length;
|
|
155
|
+
const remaining = retrieved.evidence.length - nextOffset;
|
|
156
|
+
const parts = [header];
|
|
157
|
+
if (evidence.length > 0 && showPosition)
|
|
158
|
+
parts.push(pagePosition(evidence.length, remaining));
|
|
159
|
+
if (showOverview)
|
|
160
|
+
parts.push(overview);
|
|
78
161
|
if (evidence.length === 0)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (contextText.length + line.length > options.maxChars)
|
|
84
|
-
break;
|
|
85
|
-
contextText += line;
|
|
86
|
-
shownConnections++;
|
|
162
|
+
parts.push("No source evidence matched this request.");
|
|
163
|
+
parts.push(...renderGroups(evidence));
|
|
164
|
+
if (connections.length > 0) {
|
|
165
|
+
parts.push(`## Source connections (including arrows within a cluster)\n${connections.map((connection) => `- ${formatEvidenceConnection(connection)}`).join("\n")}`);
|
|
87
166
|
}
|
|
88
|
-
let shownRelations = 0;
|
|
89
167
|
if (relations.length > 0) {
|
|
90
|
-
|
|
91
|
-
const line = `${shownRelations === 0 ? "\n\n## Connections between clusters\n" : "\n"}- "${relation.from}" → "${relation.to}"${relation.label ? ` — "${relation.label}"` : ""}`;
|
|
92
|
-
if (contextText.length + line.length > options.maxChars)
|
|
93
|
-
break;
|
|
94
|
-
contextText += line;
|
|
95
|
-
shownRelations++;
|
|
96
|
-
}
|
|
168
|
+
parts.push(`## Connections between clusters\n${relations.map((relation) => `- "${relation.from}" → "${relation.to}"${relation.label ? ` — "${relation.label}"` : ""}`).join("\n")}`);
|
|
97
169
|
}
|
|
98
|
-
const nextOffset = offset + evidence.length;
|
|
99
170
|
const totalConnections = countConnectionsForEvidence(board, evidence);
|
|
100
171
|
const truncation = {
|
|
101
|
-
remainingEvidence:
|
|
172
|
+
remainingEvidence: remaining,
|
|
102
173
|
omittedConnections: totalConnections - connections.length,
|
|
103
|
-
omittedRelations:
|
|
104
|
-
omittedTextConnections: totalConnections -
|
|
105
|
-
omittedTextRelations:
|
|
174
|
+
omittedRelations: allRelations.length - relations.length,
|
|
175
|
+
omittedTextConnections: totalConnections - connections.length,
|
|
176
|
+
omittedTextRelations: allRelations.length - relations.length,
|
|
106
177
|
};
|
|
107
178
|
return {
|
|
108
|
-
contextText: boundedText(
|
|
179
|
+
contextText: boundedText(parts.join("\n\n"), options.maxChars),
|
|
109
180
|
clusters,
|
|
110
181
|
relations: relations.length ? relations : undefined,
|
|
111
182
|
snapshotId: retrieved.snapshotId,
|
|
112
|
-
evidence,
|
|
183
|
+
evidence: evidence.map(compactEvidence),
|
|
113
184
|
connections,
|
|
114
185
|
totalMatched: retrieved.evidence.length,
|
|
115
186
|
truncated: Object.values(truncation).some((count) => count > 0) || evidence.some((item) => item.truncated),
|
|
116
187
|
truncation,
|
|
117
|
-
nextCursor:
|
|
118
|
-
? encodeCursor({ v: 1, snapshot: retrieved.snapshotId, query, result: resultFingerprint, offset: nextOffset })
|
|
188
|
+
nextCursor: remaining > 0 && evidence.length > 0
|
|
189
|
+
? encodeCursor({ v: 1, snapshot: retrieved.snapshotId, query, result: resultFingerprint, offset: nextOffset, page: page + 1 })
|
|
119
190
|
: undefined,
|
|
120
191
|
};
|
|
121
192
|
}
|
|
193
|
+
function pagePosition(shown, remaining) {
|
|
194
|
+
if (remaining <= 0)
|
|
195
|
+
return `Page ${page} of ${page}; no excerpts remaining.`;
|
|
196
|
+
const remainingPages = Math.ceil(remaining / shown);
|
|
197
|
+
const position = `Page ${page} of about ${page + remainingPages}; ${remaining} excerpt${remaining === 1 ? "" : "s"} remaining; pass nextCursor to continue.`;
|
|
198
|
+
return !options.topic && !options.nodeIds && remainingPages > MAX_PAGES_TO_PAGE_THROUGH && sections.count > 0
|
|
199
|
+
? `${position} With more than ${MAX_PAGES_TO_PAGE_THROUGH} pages left, read sections by ID instead: pass a section ID from the first page as nodeIds.`
|
|
200
|
+
: position;
|
|
201
|
+
}
|
|
202
|
+
/** Excerpts grouped by cluster in order of first appearance; shared location printed once. */
|
|
203
|
+
function renderGroups(evidence) {
|
|
204
|
+
const groups = new Map();
|
|
205
|
+
for (const item of evidence) {
|
|
206
|
+
const key = item.clusterId ?? "";
|
|
207
|
+
groups.set(key, [...(groups.get(key) ?? []), item]);
|
|
208
|
+
}
|
|
209
|
+
return [...groups].map(([clusterId, items]) => {
|
|
210
|
+
const cluster = clustersById.get(clusterId);
|
|
211
|
+
const locations = new Set(items.map(location));
|
|
212
|
+
const sharedLocation = locations.size === 1 ? [...locations][0] : "";
|
|
213
|
+
const heading = cluster ? `## Cluster: ${boundedText(cluster.label, 160)}` : "## Outside clusters";
|
|
214
|
+
return [sharedLocation ? `${heading}\n${sharedLocation}` : heading,
|
|
215
|
+
...items.map((item) => renderEntry(item, locations.size === 1))].join("\n\n");
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function renderEntry(item, locationShown) {
|
|
219
|
+
const provenance = item.modelDerived ? "MODEL INTERPRETATION — verify against original" :
|
|
220
|
+
item.sourceType === "board_metadata" ? "original metadata" : "original";
|
|
221
|
+
const metadata = [
|
|
222
|
+
item.nodeName && !nameRepeatsText(item) ? `Node name: ${item.nodeName}` : undefined,
|
|
223
|
+
locationShown ? undefined : location(item) || undefined,
|
|
224
|
+
item.sourceType === "table_cell" && item.renderNodeId ? `Table node: ${item.renderNodeId}` : undefined,
|
|
225
|
+
item.row !== undefined ? `Row index: ${item.row}` : undefined,
|
|
226
|
+
item.column !== undefined ? `Column index: ${item.column}` : undefined,
|
|
227
|
+
].filter(Boolean).join("; ");
|
|
228
|
+
const lines = [`[${item.evidenceId}] ${provenance} · node ${item.nodeId} · ${item.url}`];
|
|
229
|
+
if (metadata)
|
|
230
|
+
lines.push(metadata);
|
|
231
|
+
lines.push(item.text);
|
|
232
|
+
if (item.truncated)
|
|
233
|
+
lines.push(partHint(item));
|
|
234
|
+
return lines.join("\n");
|
|
235
|
+
}
|
|
236
|
+
function partHint(item) {
|
|
237
|
+
const total = partCount(item);
|
|
238
|
+
const shortened = item.text !== candidates.find((entry) => entry.evidenceId === item.evidenceId)?.text;
|
|
239
|
+
const prefix = shortened ? "Shortened to fit maxChars. " : "";
|
|
240
|
+
const position = `Part ${item.chunkIndex + 1} of ${total}`;
|
|
241
|
+
if ((requestedNodes.has(item.nodeId) || containerIds.length > 0) && !shortened)
|
|
242
|
+
return `[${position}.]`;
|
|
243
|
+
return `[${prefix}${position} — request get_board_context with nodeIds: ${JSON.stringify([item.nodeId])} for all parts.]`;
|
|
244
|
+
}
|
|
245
|
+
/** Parts are the chunks a nodeIds request returns for the same source. */
|
|
246
|
+
function partCount(item) {
|
|
247
|
+
const key = `${item.sourceType}\0${item.nodeId}\0${item.clusterId ?? ""}`;
|
|
248
|
+
let count = partCounts.get(key);
|
|
249
|
+
if (count === undefined) {
|
|
250
|
+
count = retrieveEvidence(board, { nodeIds: [item.nodeId] }).evidence.filter((entry) => entry.nodeId === item.nodeId && entry.sourceType === item.sourceType && entry.clusterId === item.clusterId).length;
|
|
251
|
+
partCounts.set(key, Math.max(count, item.chunkIndex + 1));
|
|
252
|
+
}
|
|
253
|
+
return partCounts.get(key);
|
|
254
|
+
}
|
|
255
|
+
/** Figma names stickies and text after their content; repeating the name adds nothing. */
|
|
256
|
+
function nameRepeatsText(item) {
|
|
257
|
+
if (!item.nodeName)
|
|
258
|
+
return true;
|
|
259
|
+
if (item.sourceType === "board_metadata")
|
|
260
|
+
return true;
|
|
261
|
+
const name = normalize(item.nodeName.replace(/…$/, ""));
|
|
262
|
+
const fullText = item.sourceType === "table_cell" ? undefined : nodesById.get(item.nodeId)?.text;
|
|
263
|
+
return Boolean(name) && [item.text, fullText].some((text) => text !== undefined && normalize(text).startsWith(name));
|
|
264
|
+
}
|
|
265
|
+
/** Optional fields that repeat information elsewhere in the same response are left out. */
|
|
266
|
+
function compactEvidence(item) {
|
|
267
|
+
const { nodeName, pageId: _pageId, sectionIds: _sectionIds, clusterId: _clusterId, clusterLabel: _clusterLabel, renderNodeId, sectionNames, ...rest } = item;
|
|
268
|
+
return {
|
|
269
|
+
...rest,
|
|
270
|
+
...(nodeName && !nameRepeatsText(item) ? { nodeName } : {}),
|
|
271
|
+
...(sectionNames?.length ? { sectionNames } : {}),
|
|
272
|
+
...(item.sourceType === "table_cell" && renderNodeId ? { renderNodeId } : {}),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function location(item) {
|
|
277
|
+
return [
|
|
278
|
+
item.pageName ? `Page: ${item.pageName}` : undefined,
|
|
279
|
+
item.sectionNames?.length ? `Sections: ${item.sectionNames.join(" / ")}` : undefined,
|
|
280
|
+
].filter(Boolean).join("; ");
|
|
281
|
+
}
|
|
282
|
+
/** Deterministic summaries repeat text highlights that the excerpts already contain. */
|
|
283
|
+
function compactSummary(cluster) {
|
|
284
|
+
const modelDerived = cluster.summarySource !== "deterministic" || Boolean(cluster.modelId);
|
|
285
|
+
if (modelDerived)
|
|
286
|
+
return boundedText(cluster.summary, 600);
|
|
287
|
+
const firstSentence = /^[\s\S]*?[.!?](?=\s|$)/.exec(cluster.summary.trim())?.[0] ?? cluster.summary;
|
|
288
|
+
return boundedText(firstSentence.trim(), 240);
|
|
289
|
+
}
|
|
290
|
+
/** Sections, their pages and excerpt counts for first-page orientation. */
|
|
291
|
+
class SectionIndex {
|
|
292
|
+
board;
|
|
293
|
+
evidence;
|
|
294
|
+
count;
|
|
295
|
+
sections;
|
|
296
|
+
pages;
|
|
297
|
+
enclosing;
|
|
298
|
+
excerpts = new Map();
|
|
299
|
+
pendingImageClusters = new Map();
|
|
300
|
+
children = new Map();
|
|
301
|
+
nodesById;
|
|
302
|
+
outsideSections = 0;
|
|
303
|
+
constructor(board, evidence) {
|
|
304
|
+
this.board = board;
|
|
305
|
+
this.evidence = evidence;
|
|
306
|
+
this.nodesById = new Map(board.nodes.map((node) => [node.id, node]));
|
|
307
|
+
this.enclosing = enclosingIdsLookup(board);
|
|
308
|
+
const order = new Map(board.nodes.map((node, position) => [node.id, position]));
|
|
309
|
+
const readingOrder = (a, b) => a.y - b.y || a.x - b.x || order.get(a.id) - order.get(b.id);
|
|
310
|
+
this.sections = board.nodes.filter((node) => node.type === "SECTION").sort(readingOrder);
|
|
311
|
+
this.pages = board.nodes.filter((node) => node.type === "CANVAS" || node.type === "PAGE");
|
|
312
|
+
this.count = this.sections.length;
|
|
313
|
+
for (const section of this.sections) {
|
|
314
|
+
// The nearest enclosing section, else the page, is the parent in the tree.
|
|
315
|
+
const parent = section.sectionIds?.filter((id) => id !== section.id).at(-1) ??
|
|
316
|
+
(section.pageId && this.pages.some((page) => page.id === section.pageId) ? section.pageId : "");
|
|
317
|
+
this.children.set(parent, [...(this.children.get(parent) ?? []), section]);
|
|
318
|
+
}
|
|
319
|
+
for (const item of evidence) {
|
|
320
|
+
const enclosing = this.enclosing(item.renderNodeId ?? item.nodeId);
|
|
321
|
+
let inSection = false;
|
|
322
|
+
for (const id of enclosing) {
|
|
323
|
+
this.excerpts.set(id, (this.excerpts.get(id) ?? 0) + 1);
|
|
324
|
+
inSection ||= this.nodesById.get(id)?.type === "SECTION";
|
|
325
|
+
}
|
|
326
|
+
if (!inSection)
|
|
327
|
+
this.outsideSections++;
|
|
328
|
+
}
|
|
329
|
+
for (const cluster of board.clusters) {
|
|
330
|
+
if (!cluster.incomplete || !cluster.nodeIds[0])
|
|
331
|
+
continue;
|
|
332
|
+
for (const id of this.enclosing(cluster.nodeIds[0])) {
|
|
333
|
+
this.pendingImageClusters.set(id, (this.pendingImageClusters.get(id) ?? 0) + 1);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/** First page of an unfocused request: every section as a tree in reading order, with IDs. */
|
|
338
|
+
boardOverview(budget) {
|
|
339
|
+
const { board, evidence } = this;
|
|
340
|
+
const size = `${board.clusters.length} cluster${plural(board.clusters.length)}, ${evidence.length} excerpt${plural(evidence.length)}.`;
|
|
341
|
+
const pages = this.pages.filter((page) => this.excerpts.has(page.id) || this.children.has(page.id));
|
|
342
|
+
if (!this.sections.length && pages.length < 2) {
|
|
343
|
+
return fitOutline(["## Board overview", size, "Pass topic or nodeIds for smaller, more precise answers."], [], [], budget, 0);
|
|
344
|
+
}
|
|
345
|
+
const lines = [];
|
|
346
|
+
const addSections = (parentId, depth) => {
|
|
347
|
+
for (const section of this.children.get(parentId) ?? []) {
|
|
348
|
+
const pending = this.pendingImageClusters.get(section.id) ?? 0;
|
|
349
|
+
lines.push({ depth, section: true, text: `${" ".repeat(depth)}- ${section.id} ${this.name(section)} — ` +
|
|
350
|
+
`${this.excerptCount(section.id)}${pending ? `, ${pending} image cluster${plural(pending)} not yet interpreted` : ""}` });
|
|
351
|
+
addSections(section.id, depth + 1);
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
if (pages.length > 1) {
|
|
355
|
+
for (const page of pages) {
|
|
356
|
+
lines.push({ depth: 0, section: false, text: `- Page ${page.id} ${this.name(page)} — ${this.excerptCount(page.id)}` });
|
|
357
|
+
addSections(page.id, 1);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
addSections(pages[0]?.id ?? "", 0);
|
|
362
|
+
}
|
|
363
|
+
const footer = [
|
|
364
|
+
...(this.sections.length ? [`${this.outsideSections} excerpt${plural(this.outsideSections)} outside sections.`] : []),
|
|
365
|
+
`Read a ${this.sections.length ? "section" : "page"} with nodeIds: ["<ID>"]; use topic for word search.`,
|
|
366
|
+
];
|
|
367
|
+
return fitOutline(["## Board overview", size,
|
|
368
|
+
`${pages.length > 1 ? "Pages and sections" : "Sections"} in reading order (ID, name, excerpts including nested sections):`], lines, footer, budget, pages.length > 1 ? 1 : 0);
|
|
369
|
+
}
|
|
370
|
+
/** First page of a nodeIds request: the direct subsections of each requested container. */
|
|
371
|
+
subsectionOutline(containerIds, budget) {
|
|
372
|
+
const lines = [];
|
|
373
|
+
for (const containerId of containerIds) {
|
|
374
|
+
const direct = this.sections.filter((section) => {
|
|
375
|
+
const enclosing = this.enclosing(section.id);
|
|
376
|
+
if (!enclosing.has(containerId))
|
|
377
|
+
return false;
|
|
378
|
+
const parent = section.sectionIds?.filter((id) => id !== section.id).at(-1);
|
|
379
|
+
// A section in a frame of another section is still a direct subsection of that frame.
|
|
380
|
+
return !parent || parent === containerId || !this.enclosing(parent).has(containerId);
|
|
381
|
+
});
|
|
382
|
+
if (!direct.length)
|
|
383
|
+
continue;
|
|
384
|
+
const container = this.nodesById.get(containerId);
|
|
385
|
+
lines.push({ depth: 0, section: false, text: `- In ${containerId} ${this.name(container)}:` });
|
|
386
|
+
for (const section of direct) {
|
|
387
|
+
lines.push({ depth: 1, section: true, text: ` - ${section.id} ${this.name(section)} — ${this.excerptCount(section.id)}` });
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (!lines.length)
|
|
391
|
+
return "";
|
|
392
|
+
return fitOutline(["## Sections inside (ID, name, excerpts)"], lines, ["Read one with nodeIds: [\"<ID>\"]."], budget, 1);
|
|
393
|
+
}
|
|
394
|
+
excerptCount(id) {
|
|
395
|
+
const count = this.excerpts.get(id) ?? 0;
|
|
396
|
+
return `${count} excerpt${plural(count)}`;
|
|
397
|
+
}
|
|
398
|
+
name(node) {
|
|
399
|
+
const name = node.name.replace(/\s+/g, " ").trim();
|
|
400
|
+
if (name)
|
|
401
|
+
return boundedText(name, 80);
|
|
402
|
+
return node.type === "SECTION" ? "(unnamed section)" : `(unnamed ${node.type === "CANVAS" || node.type === "PAGE" ? "page" : node.type.toLowerCase()})`;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Lines that do not fit the budget are summarized in one line: deeper levels
|
|
407
|
+
* go first, then the last lines down to minDepth. Returns "" if nothing fits.
|
|
408
|
+
*/
|
|
409
|
+
function fitOutline(header, lines, footer, budget, minDepth) {
|
|
410
|
+
const sectionCount = lines.filter((line) => line.section).length;
|
|
411
|
+
const render = (shown) => {
|
|
412
|
+
const omitted = sectionCount - shown.filter((line) => line.section).length;
|
|
413
|
+
const summary = omitted > 0
|
|
414
|
+
? [`${omitted} more section${plural(omitted)} not listed; read a listed page or section by ID to see the sections inside it.`] : [];
|
|
415
|
+
return [...header, ...shown.map((line) => line.text), ...summary, ...footer].join("\n");
|
|
416
|
+
};
|
|
417
|
+
const fits = (text) => JSON.stringify(text).length - 2 <= budget;
|
|
418
|
+
const deepest = Math.max(minDepth, ...lines.map((line) => line.depth));
|
|
419
|
+
for (let depth = deepest; depth >= minDepth; depth--) {
|
|
420
|
+
const text = render(lines.filter((line) => line.depth <= depth));
|
|
421
|
+
if (fits(text))
|
|
422
|
+
return text;
|
|
423
|
+
}
|
|
424
|
+
const shallow = lines.filter((line) => line.depth <= minDepth);
|
|
425
|
+
let low = 0;
|
|
426
|
+
let high = shallow.length - 1;
|
|
427
|
+
while (low < high) {
|
|
428
|
+
const middle = (low + high + 1) >>> 1;
|
|
429
|
+
if (fits(render(shallow.slice(0, middle))))
|
|
430
|
+
low = middle;
|
|
431
|
+
else
|
|
432
|
+
high = middle - 1;
|
|
433
|
+
}
|
|
434
|
+
const text = render(shallow.slice(0, low));
|
|
435
|
+
return fits(text) ? text : "";
|
|
122
436
|
}
|
|
123
|
-
function
|
|
124
|
-
return
|
|
437
|
+
function plural(count) {
|
|
438
|
+
return count === 1 ? "" : "s";
|
|
125
439
|
}
|
|
126
|
-
function
|
|
127
|
-
return
|
|
440
|
+
function normalize(value) {
|
|
441
|
+
return value.normalize("NFKC").toLowerCase().replace(/\s+/g, " ").trim();
|
|
128
442
|
}
|
|
129
443
|
function querySignature(input) {
|
|
130
444
|
return createHash("sha256").update(JSON.stringify({
|
|
@@ -146,7 +460,8 @@ function decodeCursor(value) {
|
|
|
146
460
|
if (parsed.v !== 1 || typeof parsed.snapshot !== "string" || !/^[A-Za-z0-9_-]{1,128}$/.test(parsed.snapshot) ||
|
|
147
461
|
typeof parsed.query !== "string" || !/^[a-f0-9]{64}$/.test(parsed.query) ||
|
|
148
462
|
typeof parsed.result !== "string" || !/^[a-f0-9]{64}$/.test(parsed.result) ||
|
|
149
|
-
!Number.isSafeInteger(parsed.offset) || parsed.offset < 0
|
|
463
|
+
!Number.isSafeInteger(parsed.offset) || parsed.offset < 0 ||
|
|
464
|
+
(parsed.page !== undefined && (!Number.isSafeInteger(parsed.page) || parsed.page < 1)))
|
|
150
465
|
throw new Error("invalid fields");
|
|
151
466
|
return parsed;
|
|
152
467
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBoardContext.js","sourceRoot":"","sources":["../../src/tools/getBoardContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,0BAA0B,GAG3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,WAAW,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,cAAc,EAChF,wBAAwB,EAAE,0BAA0B,EACpD,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAU5B,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAC/D,qFAAqF;IACrF,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChG,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,OAAO,uCAAuC,CAAC,CAAC;IAC/F,mEAAmE;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;QAC9C,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;KAC3D,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC3C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtF,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAE3H,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,gBAAgB,KAAK,CAAC,OAAO,eAAe,SAAS,CAAC,UAAU,iFAAiF,CAAC;IACjK,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,oFAAoF;QACpF,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5G,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC9F,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,cAAc;YAAE,MAAM;QAC9E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,0BAA0B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjF,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,MAAM,CAAC;IAEd,SAAS,WAAW,CAAC,QAAoB;QACvC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnE,MAAM,iBAAiB,GAAG,KAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnD,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;YAC1C,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,SAAkB;YAC1D,YAAY,EAAE,OAAO,CAAC,aAAa,KAAK,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACnF,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACjH,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,MAAM,iBAAiB,GAAG,CAAC,KAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;aACtD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAE;YACzC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAE;YACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YACxF,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC,CAAC;QACN,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,WAAW,IAAI,4CAA4C,CAAC;QACvF,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7J,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ;gBAAE,MAAM;YAC/D,WAAW,IAAI,IAAI,CAAC;YACpB,gBAAgB,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChL,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ;oBAAE,MAAM;gBAC/D,WAAW,IAAI,IAAI,CAAC;gBACpB,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC5C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,KAAM,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG;YACjB,iBAAiB,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU;YACzD,kBAAkB,EAAE,gBAAgB,GAAG,WAAW,CAAC,MAAM;YACzD,gBAAgB,EAAE,iBAAiB,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;YAC7D,sBAAsB,EAAE,gBAAgB,GAAG,gBAAgB;YAC3D,oBAAoB,EAAE,iBAAiB,CAAC,MAAM,GAAG,cAAc;SAChE,CAAC;QACF,OAAO;YACL,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC;YACvD,QAAQ;YACR,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnD,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,QAAQ;YACR,WAAW;YACX,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;YACvC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1G,UAAU;YACV,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACvE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBAC9G,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAc;IACjC,OAAO,UAAU,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,GAAG,CAAC;AACzM,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,QAAoB;IACzD,OAAO,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAA2B;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QAClE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;KAClC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAoB,CAAC;QAC/F,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC1G,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACxE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1E,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAO,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChG,OAAO,MAAgB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACjI,CAAC"}
|
|
1
|
+
{"version":3,"file":"getBoardContext.js","sourceRoot":"","sources":["../../src/tools/getBoardContext.ts"],"names":[],"mappings":"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"}
|