opencode-flema-engram-sidebar 0.2.0 → 0.3.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.
@@ -0,0 +1,455 @@
1
+ import { collectBlockers, groupByChange } from "../utils/sdd-detector.js";
2
+ import { deriveODDState } from "../utils/odd-detector.js";
3
+ import { EngramUnavailable } from "../utils/errors.js";
4
+ import { scheduleLongTimeout } from "../utils/timeout.js";
5
+ const DEFAULT_STAGE_TIMEOUT_MS = 5_000;
6
+ const SIDEBAR_OBSERVATION_LIMIT = 20;
7
+ const OBSERVATION_FALLBACK_LIMIT = 100;
8
+ const EMPTY_STATE = {
9
+ workflowMode: "odd",
10
+ odd: deriveODDState([]),
11
+ observations: [],
12
+ changes: [],
13
+ blockers: [],
14
+ recentActivity: [],
15
+ health: "loading",
16
+ loading: true,
17
+ terminal: { status: "loading", stage: "mounted", health: "loading", observationCount: 0 },
18
+ };
19
+ function workflowChanges(mode, observations) {
20
+ return mode === "legacy-sdd" ? groupByChange(observations) : [];
21
+ }
22
+ function messageOf(reason) {
23
+ return reason instanceof Error ? reason.message : String(reason);
24
+ }
25
+ export function reduceSidebarRefresh(current, input) {
26
+ const serviceAvailable = input.health?.local.available === true || input.health?.cloud?.available === true;
27
+ const observationsAvailable = input.observations !== undefined;
28
+ const criticalFailure = input.failures?.some((failure) => failure.stage === "project-resolution"
29
+ || failure.stage === "health"
30
+ || failure.stage === "observations"
31
+ || failure.stage === "refresh") === true;
32
+ const coreComplete = serviceAvailable && observationsAvailable && !criticalFailure;
33
+ const partial = input.projects !== undefined || (observationsAvailable && projectNameFor(input) !== undefined);
34
+ const health = coreComplete
35
+ ? "ok"
36
+ : partial || current.lastRefreshAt
37
+ ? "stale"
38
+ : input.health
39
+ ? "error"
40
+ : "offline";
41
+ const projectName = input.resolution
42
+ ? input.resolution.projectName
43
+ : input.projectName ?? current.projectName;
44
+ const sameProject = projectName !== undefined && projectName === current.projectName;
45
+ const observations = input.observations !== undefined
46
+ ? input.observations.filter((observation) => observation.project === projectName)
47
+ : sameProject ? current.observations ?? [] : [];
48
+ const activity = input.observations !== undefined
49
+ ? observations
50
+ : sameProject ? current.recentActivity : [];
51
+ const failure = input.failures?.[0];
52
+ const error = input.errors?.[0];
53
+ const warning = input.warnings?.[0];
54
+ const reduced = {
55
+ projectName,
56
+ resolution: input.resolution ?? current.resolution,
57
+ project: projectForRefresh(current.project, input.projects, observationsAvailable ? observations : undefined, projectName),
58
+ workflowMode: current.workflowMode ?? "odd",
59
+ changes: workflowChanges(current.workflowMode, observations),
60
+ observations,
61
+ odd: input.observations === undefined && sameProject && current.odd
62
+ ? current.odd
63
+ : deriveODDState(observations),
64
+ blockers: input.observations !== undefined
65
+ ? collectBlockers(observations)
66
+ : sameProject ? current.blockers : [],
67
+ recentActivity: [...activity]
68
+ .sort((a, b) => b.updated_at.localeCompare(a.updated_at) || b.id - a.id)
69
+ .slice(0, 5),
70
+ health,
71
+ loading: false,
72
+ lastRefreshAt: coreComplete ? input.now : current.lastRefreshAt,
73
+ targets: input.targets ?? current.targets,
74
+ error: failure
75
+ ? describeFailure(failure, input)
76
+ : error !== undefined
77
+ ? messageOf(error)
78
+ : warning
79
+ ? warning
80
+ : serviceAvailable
81
+ ? coreComplete ? undefined : "Engram observations unavailable"
82
+ : input.health ? "Engram health check failed" : "Engram is offline",
83
+ };
84
+ reduced.terminal = {
85
+ status: outcomeFor(input).status,
86
+ stage: "terminal",
87
+ health: reduced.health,
88
+ observationCount: observations.length,
89
+ };
90
+ return reduced;
91
+ }
92
+ export async function fetchSidebarRefresh(adapter, options = {}) {
93
+ const stageTimeoutMs = options.stageTimeoutMs ?? DEFAULT_STAGE_TIMEOUT_MS;
94
+ let resolution = options.resolution;
95
+ const failures = [];
96
+ const stages = [];
97
+ const transition = (stage) => {
98
+ stages.push(stage);
99
+ options.onTransition?.(stage);
100
+ };
101
+ if (options.resolveProject) {
102
+ transition({ stage: "project-resolution", status: "started", endpoint: defaultEndpoint("project-resolution") });
103
+ try {
104
+ resolution = await withStageTimeout(options.resolveProject(), "project resolution", stageTimeoutMs, defaultEndpoint("project-resolution"));
105
+ if (resolution.validation === "offline") {
106
+ const failure = {
107
+ stage: "project-resolution",
108
+ reason: new Error("Engram project validation was unavailable"),
109
+ };
110
+ failures.push(failure);
111
+ transition({
112
+ stage: "project-resolution",
113
+ status: "failed",
114
+ endpoint: defaultEndpoint("project-resolution"),
115
+ message: messageOf(failure.reason),
116
+ });
117
+ }
118
+ else {
119
+ transition({ stage: "project-resolution", status: "success", endpoint: defaultEndpoint("project-resolution") });
120
+ }
121
+ }
122
+ catch (reason) {
123
+ const failure = failureFor("project-resolution", reason);
124
+ failures.push(failure);
125
+ transition({
126
+ stage: "project-resolution",
127
+ status: "failed",
128
+ endpoint: failure.endpoint,
129
+ message: messageOf(reason),
130
+ });
131
+ }
132
+ }
133
+ else {
134
+ transition({
135
+ stage: "project-resolution",
136
+ status: resolution || options.projectName ? "success" : "skipped",
137
+ endpoint: defaultEndpoint("project-resolution"),
138
+ });
139
+ }
140
+ const projectName = resolution ? resolution.projectName : options.projectName;
141
+ const healthRequest = trackRequest(Promise.resolve().then(() => adapter.health()), "health", stageTimeoutMs, transition);
142
+ const projectsRequest = trackRequest(Promise.resolve().then(() => adapter.listProjects()), "projects", stageTimeoutMs, transition);
143
+ const observationsRequest = fetchCanonicalObservations(adapter, projectName, stageTimeoutMs, transition);
144
+ const [health, projects, canonicalObservations] = await Promise.allSettled([
145
+ healthRequest,
146
+ projectsRequest,
147
+ observationsRequest,
148
+ ]);
149
+ if (health.status === "rejected")
150
+ failures.push(failureFor("health", health.reason));
151
+ if (projects.status === "rejected")
152
+ failures.push(failureFor("projects", projects.reason));
153
+ if (canonicalObservations.status === "rejected") {
154
+ failures.push(failureFor("observations", canonicalObservations.reason));
155
+ }
156
+ return {
157
+ health: health.status === "fulfilled" ? health.value : undefined,
158
+ projects: projects.status === "fulfilled" ? projects.value : undefined,
159
+ observations: canonicalObservations.status === "fulfilled"
160
+ ? canonicalObservations.value.observations
161
+ : undefined,
162
+ projectName,
163
+ resolution,
164
+ targets: adapter.describeTargets?.(),
165
+ errors: [health, projects, canonicalObservations]
166
+ .filter((result) => result.status === "rejected")
167
+ .map((result) => result.reason),
168
+ failures: failures.length ? failures : undefined,
169
+ warnings: canonicalObservations.status === "fulfilled" && canonicalObservations.value.warning
170
+ ? [canonicalObservations.value.warning]
171
+ : undefined,
172
+ stages,
173
+ now: options.now?.() ?? new Date(),
174
+ };
175
+ }
176
+ function projectNameFor(input) {
177
+ return input.resolution ? input.resolution.projectName : input.projectName;
178
+ }
179
+ async function fetchCanonicalObservations(adapter, projectName, timeoutMs, onTransition) {
180
+ const endpoint = defaultEndpoint("observations");
181
+ if (!projectName) {
182
+ onTransition({ stage: "filtered-observations", status: "skipped", endpoint, count: 0 });
183
+ onTransition({ stage: "fallback-observations", status: "skipped", endpoint, count: 0 });
184
+ return { observations: [] };
185
+ }
186
+ const deadline = Date.now() + timeoutMs;
187
+ const run = async (stage, request) => {
188
+ onTransition({ stage, status: "started", endpoint });
189
+ try {
190
+ const observations = await withStageTimeout(Promise.resolve().then(request), stage === "filtered-observations" ? "filtered observations request" : "fallback observations request", Math.max(0, deadline - Date.now()), endpoint);
191
+ onTransition({ stage, status: "success", endpoint, count: observations.length });
192
+ return observations;
193
+ }
194
+ catch (reason) {
195
+ onTransition({ stage, status: "failed", endpoint, message: messageOf(reason) });
196
+ throw reason;
197
+ }
198
+ };
199
+ const filtered = await run("filtered-observations", () => adapter.listObservations({
200
+ project: projectName,
201
+ limit: SIDEBAR_OBSERVATION_LIMIT,
202
+ }));
203
+ if (filtered.length > 0 && filtered.every((observation) => observation.project === projectName)) {
204
+ onTransition({ stage: "fallback-observations", status: "skipped", endpoint });
205
+ return { observations: filtered };
206
+ }
207
+ const unfiltered = await run("fallback-observations", () => adapter.listObservations({ limit: OBSERVATION_FALLBACK_LIMIT }));
208
+ const observations = unfiltered
209
+ .filter((observation) => observation.project === projectName)
210
+ .slice(0, SIDEBAR_OBSERVATION_LIMIT);
211
+ const reason = filtered.length === 0
212
+ ? "Filtered observations returned no records"
213
+ : "Filtered observations returned cross-project records";
214
+ return {
215
+ observations,
216
+ warning: `${reason}; used bounded unfiltered fallback (limit ${OBSERVATION_FALLBACK_LIMIT}) with exact project matching for ${projectName}.`,
217
+ };
218
+ }
219
+ function projectForRefresh(current, projects, observations, projectName) {
220
+ if (!projectName)
221
+ return undefined;
222
+ const refreshed = projects?.find((project) => project.name === projectName);
223
+ const previous = current?.name === projectName ? current : undefined;
224
+ if (observations === undefined)
225
+ return previous ?? refreshed;
226
+ const base = refreshed ?? previous;
227
+ if (!base && observations.length === 0)
228
+ return undefined;
229
+ const latestObservation = observations.reduce((latest, observation) => !latest || observation.updated_at > latest
230
+ ? observation.updated_at
231
+ : latest, undefined);
232
+ const lastActiveAt = base?.lastActiveAt ?? latestObservation;
233
+ if (!lastActiveAt)
234
+ return undefined;
235
+ return {
236
+ name: projectName,
237
+ observationCount: observations.length,
238
+ lastActiveAt,
239
+ scopes: base?.scopes ?? [...new Set(observations.map((observation) => observation.scope))].sort(),
240
+ };
241
+ }
242
+ export function createEngramReadController(adapter, options = {}) {
243
+ let state = {
244
+ ...EMPTY_STATE,
245
+ projectName: options.projectName,
246
+ resolution: options.resolution,
247
+ error: options.initialError,
248
+ loading: options.enabled !== false,
249
+ };
250
+ let generation = 0;
251
+ let disposed = false;
252
+ let initialResolutionPending = hasValidatedProjectName(options.resolution);
253
+ const publish = (update) => {
254
+ if (disposed)
255
+ return;
256
+ state = update(state);
257
+ options.onState?.(state);
258
+ };
259
+ const refresh = async () => {
260
+ if (disposed) {
261
+ return {
262
+ status: "failed",
263
+ summary: "Engram controller is disposed",
264
+ failures: [],
265
+ warnings: [],
266
+ stages: [{ stage: "terminal", status: "failed", message: "Engram controller is disposed" }],
267
+ };
268
+ }
269
+ const currentGeneration = ++generation;
270
+ const useInitialResolution = initialResolutionPending;
271
+ initialResolutionPending = false;
272
+ publish((current) => ({
273
+ ...current,
274
+ loading: true,
275
+ terminal: {
276
+ status: "loading",
277
+ stage: "refresh",
278
+ health: current.health,
279
+ observationCount: current.terminal?.observationCount ?? current.project?.observationCount ?? 0,
280
+ },
281
+ }));
282
+ try {
283
+ const input = await fetchSidebarRefresh(adapter, {
284
+ ...options,
285
+ resolveProject: useInitialResolution ? undefined : options.resolveProject,
286
+ onTransition: (transition) => {
287
+ if (currentGeneration !== generation)
288
+ return;
289
+ publish((current) => ({
290
+ ...current,
291
+ terminal: {
292
+ status: "loading",
293
+ stage: transition.stage,
294
+ health: current.health,
295
+ observationCount: transition.stage.includes("observations") && transition.count !== undefined
296
+ ? transition.count
297
+ : current.terminal?.observationCount ?? 0,
298
+ },
299
+ }));
300
+ },
301
+ });
302
+ if (currentGeneration !== generation)
303
+ return outcomeFor(input);
304
+ input.stages?.push({ stage: "reducing", status: "started" });
305
+ publish((current) => ({
306
+ ...current,
307
+ terminal: {
308
+ status: "loading",
309
+ stage: "reducing",
310
+ health: current.health,
311
+ observationCount: input.observations?.length ?? current.terminal?.observationCount ?? 0,
312
+ },
313
+ }));
314
+ publish((current) => reduceSidebarRefresh(current, input));
315
+ input.stages?.push({ stage: "reducing", status: "success" });
316
+ const outcome = outcomeFor(input);
317
+ outcome.stages.push({ stage: "terminal", status: outcome.status, message: outcome.summary });
318
+ return outcome;
319
+ }
320
+ catch (reason) {
321
+ const failure = { stage: "refresh", reason };
322
+ if (currentGeneration !== generation) {
323
+ return outcomeFor({ failures: [failure], now: options.now?.() ?? new Date() });
324
+ }
325
+ const input = {
326
+ projectName: state.projectName ?? options.projectName,
327
+ resolution: state.resolution ?? options.resolution,
328
+ failures: [failure],
329
+ now: options.now?.() ?? new Date(),
330
+ };
331
+ publish((current) => reduceSidebarRefresh(current, input));
332
+ const outcome = outcomeFor(input);
333
+ outcome.stages.push({ stage: "terminal", status: "failed", message: outcome.summary });
334
+ return outcome;
335
+ }
336
+ };
337
+ return {
338
+ getState: () => state,
339
+ refresh,
340
+ setWorkflowMode(mode) {
341
+ if (disposed || state.workflowMode === mode)
342
+ return;
343
+ publish((current) => ({
344
+ ...current,
345
+ workflowMode: mode,
346
+ changes: workflowChanges(mode, current.observations ?? []),
347
+ }));
348
+ },
349
+ dispose() {
350
+ if (disposed)
351
+ return;
352
+ disposed = true;
353
+ generation += 1;
354
+ },
355
+ };
356
+ }
357
+ function failureFor(stage, reason) {
358
+ return {
359
+ stage,
360
+ endpoint: reason instanceof EngramUnavailable ? reason.endpoint : defaultEndpoint(stage),
361
+ reason,
362
+ };
363
+ }
364
+ function defaultEndpoint(stage) {
365
+ if (stage === "project-resolution")
366
+ return "/observations/recent + /sessions/recent";
367
+ if (stage === "health")
368
+ return "/health";
369
+ if (stage === "projects")
370
+ return "/observations/recent + /sessions/recent";
371
+ if (stage === "observations")
372
+ return "/observations/recent";
373
+ return undefined;
374
+ }
375
+ function hasValidatedProjectName(resolution) {
376
+ return Boolean(resolution?.projectName
377
+ && (resolution.validation === "exact" || resolution.validation === "case-insensitive"));
378
+ }
379
+ export function withStageTimeout(promise, stage, timeoutMs, endpoint) {
380
+ return new Promise((resolve, reject) => {
381
+ let cancelTimeout = () => undefined;
382
+ promise.then((value) => {
383
+ cancelTimeout();
384
+ resolve(value);
385
+ }, (reason) => {
386
+ cancelTimeout();
387
+ reject(reason);
388
+ });
389
+ const onTimeout = () => {
390
+ reject(new EngramUnavailable(`${stage} timed out after ${timeoutMs}ms`, undefined, {
391
+ kind: "timeout",
392
+ endpoint,
393
+ }));
394
+ };
395
+ if (timeoutMs === 0) {
396
+ const timeoutId = setTimeout(onTimeout, 0);
397
+ cancelTimeout = () => clearTimeout(timeoutId);
398
+ }
399
+ else {
400
+ cancelTimeout = scheduleLongTimeout(onTimeout, timeoutMs);
401
+ }
402
+ });
403
+ }
404
+ async function trackRequest(promise, stage, timeoutMs, onTransition) {
405
+ const endpoint = defaultEndpoint(stage);
406
+ onTransition({ stage, status: "started", endpoint });
407
+ try {
408
+ const value = await withStageTimeout(promise, `${stage} request`, timeoutMs, endpoint);
409
+ onTransition({
410
+ stage,
411
+ status: "success",
412
+ endpoint,
413
+ count: Array.isArray(value) ? value.length : undefined,
414
+ });
415
+ return value;
416
+ }
417
+ catch (reason) {
418
+ onTransition({ stage, status: "failed", endpoint, message: messageOf(reason) });
419
+ throw reason;
420
+ }
421
+ }
422
+ export function outcomeFor(input) {
423
+ const failures = input.failures ?? [];
424
+ const warnings = input.warnings ?? [];
425
+ const coreComplete = input.health?.local.available === true
426
+ && input.observations !== undefined
427
+ && !failures.some((failure) => failure.stage !== "projects");
428
+ const hasUsableData = input.health !== undefined
429
+ || input.projects !== undefined
430
+ || input.observations !== undefined;
431
+ const status = coreComplete && failures.length === 0 && warnings.length === 0
432
+ ? "success"
433
+ : hasUsableData
434
+ ? "partial"
435
+ : "failed";
436
+ const firstFailure = failures[0];
437
+ const summary = firstFailure
438
+ ? `${firstFailure.endpoint ? `${firstFailure.stage} ${firstFailure.endpoint}` : firstFailure.stage}: ${messageOf(firstFailure.reason)}`
439
+ : warnings[0]
440
+ ?? (status === "success" ? "Refresh complete" : "required refresh data unavailable");
441
+ return {
442
+ status,
443
+ summary,
444
+ failures,
445
+ warnings,
446
+ stages: [...(input.stages ?? [])],
447
+ };
448
+ }
449
+ function describeFailure(failure, input) {
450
+ const location = failure.endpoint ? `${failure.stage} ${failure.endpoint}` : failure.stage;
451
+ const projects = input.projects === undefined ? "unavailable" : String(input.projects.length);
452
+ const observations = input.observations === undefined ? "unavailable" : String(input.observations.length);
453
+ return `${location}: ${messageOf(failure.reason)} (projects=${projects}, observations=${observations})`;
454
+ }
455
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/viewer/core.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AA8C1D,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,WAAW,GAAqB;IACpC,YAAY,EAAE,KAAK;IACnB,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,EAAE;IAClB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE;CAC1F,CAAC;AAEF,SAAS,eAAe,CAAC,IAAqC,EAAE,YAA2B;IACzF,OAAO,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,SAAS,CAAC,MAAe;IAChC,OAAO,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAwDD,MAAM,UAAU,oBAAoB,CAClC,OAAyB,EACzB,KAA0B;IAE1B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3G,MAAM,qBAAqB,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;IAC/D,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvD,OAAO,CAAC,KAAK,KAAK,oBAAoB;WACnC,OAAO,CAAC,KAAK,KAAK,QAAQ;WAC1B,OAAO,CAAC,KAAK,KAAK,cAAc;WAChC,OAAO,CAAC,KAAK,KAAK,SAAS,CAC/B,KAAK,IAAI,CAAC;IACX,MAAM,YAAY,GAAG,gBAAgB,IAAI,qBAAqB,IAAI,CAAC,eAAe,CAAC;IACnF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,qBAAqB,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAkB,YAAY;QACxC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa;YAChC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,KAAK,CAAC,MAAM;gBACZ,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU;QAClC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW;QAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAC7C,MAAM,WAAW,GAAG,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC;IACrF,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS;QACnD,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC;QACjF,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS;QAC/C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAqB;QAChC,WAAW;QACX,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU;QAClD,OAAO,EAAE,iBAAiB,CACxB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAC/F;QACD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;QAC3C,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC;QAC5D,YAAY;QACZ,GAAG,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,WAAW,IAAI,OAAO,CAAC,GAAG;YACjE,CAAC,CAAC,OAAO,CAAC,GAAG;YACb,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;QAChC,QAAQ,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS;YACxC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACvC,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aACvE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACd,MAAM;QACN,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;QAC/D,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QACzC,KAAK,EAAE,OAAO;YACZ,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;YACjC,CAAC,CAAC,KAAK,KAAK,SAAS;gBACrB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,OAAO;oBACP,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,gBAAgB;wBAChB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iCAAiC;wBAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,mBAAmB;KAC3E,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG;QACjB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM;QAChC,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,gBAAgB,EAAE,YAAY,CAAC,MAAM;KACtC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAsB,EACtB,UAEI,EAAE;IAEN,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAC1E,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,CAAC,KAA6B,EAAQ,EAAE;QACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAChH,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,gBAAgB,CACjC,OAAO,CAAC,cAAc,EAAE,EACxB,oBAAoB,EACpB,cAAc,EACd,eAAe,CAAC,oBAAoB,CAAC,CACtC,CAAC;YACF,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG;oBACd,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,IAAI,KAAK,CAAC,2CAA2C,CAAC;iBAC/B,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,UAAU,CAAC;oBACT,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,eAAe,CAAC,oBAAoB,CAAC;oBAC/C,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,UAAU,CAAC;gBACT,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,CAAC;YACT,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACjE,QAAQ,EAAE,eAAe,CAAC,oBAAoB,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9E,MAAM,aAAa,GAAG,YAAY,CAChC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAC9C,QAAQ,EACR,cAAc,EACd,UAAU,CACX,CAAC;IACF,MAAM,eAAe,GAAG,YAAY,CAClC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EACpD,UAAU,EACV,cAAc,EACd,UAAU,CACX,CAAC;IACF,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACzG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACzE,aAAa;QACb,eAAe;QACf,mBAAmB;KACpB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,IAAI,qBAAqB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAChE,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACtE,YAAY,EAAE,qBAAqB,CAAC,MAAM,KAAK,WAAW;YACxD,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY;YAC1C,CAAC,CAAC,SAAS;QACb,WAAW;QACX,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE;QACpC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC;aAC9C,MAAM,CAAC,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;aACjF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAChD,QAAQ,EAAE,qBAAqB,CAAC,MAAM,KAAK,WAAW,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO;YAC3F,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;YACvC,CAAC,CAAC,SAAS;QACb,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAA0B;IAChD,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAAsB,EACtB,WAA+B,EAC/B,SAAiB,EACjB,YAA0D;IAE1D,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,EAAE,KAAwD,EAAE,OAAqC,EAAE,EAAE;QACpH,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,gBAAgB,CACzC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAC/B,KAAK,KAAK,uBAAuB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,+BAA+B,EACrG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAClC,QAAQ,CACT,CAAC;YACF,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACjF,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,MAAM,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACjF,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,yBAAyB;KACjC,CAAC,CAAC,CAAC;IACJ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC,EAAE,CAAC;QAChG,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAC1B,uBAAuB,EACvB,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CACtE,CAAC;IACF,MAAM,YAAY,GAAG,UAAU;SAC5B,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC;SAC5D,KAAK,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC;QAClC,CAAC,CAAC,2CAA2C;QAC7C,CAAC,CAAC,sDAAsD,CAAC;IAE3D,OAAO;QACL,YAAY;QACZ,OAAO,EAAE,GAAG,MAAM,6CAA6C,0BAA0B,qCAAqC,WAAW,GAAG;KAC7I,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,OAA4B,EAC5B,QAA+B,EAC/B,YAAuC,EACvC,WAA+B;IAE/B,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,QAAQ,IAAI,SAAS,CAAC;IAE7D,MAAM,IAAI,GAAG,SAAS,IAAI,QAAQ,CAAC;IACnC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,GAAG,MAAM;QACjE,CAAC,CAAC,WAAW,CAAC,UAAU;QACxB,CAAC,CAAC,MAAM,EACV,SAAS,CACV,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,iBAAiB,CAAC;IAE7D,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAEpC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,gBAAgB,EAAE,YAAY,CAAC,MAAM;QACrC,YAAY;QACZ,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAClG,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,0BAA0B,CACxC,OAAsB,EACtB,UAAuC,EAAE;IAEzC,IAAI,KAAK,GAAqB;QAC5B,GAAG,WAAW;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,YAAY;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK;KACnC,CAAC;IACF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,wBAAwB,GAAG,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3E,MAAM,OAAO,GAAG,CAAC,MAAuD,EAAQ,EAAE;QAChF,IAAI,QAAQ;YAAE,OAAO;QACrB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,IAAoC,EAAE;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;aAC5F,CAAC;QACJ,CAAC;QACD,MAAM,iBAAiB,GAAG,EAAE,UAAU,CAAC;QACvC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;QACtD,wBAAwB,GAAG,KAAK,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACpB,GAAG,OAAO;YACV,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,gBAAgB,IAAI,CAAC;aAC/F;SACF,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE;gBAC/C,GAAG,OAAO;gBACV,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;gBACzE,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE;oBAC3B,IAAI,iBAAiB,KAAK,UAAU;wBAAE,OAAO;oBAC7C,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBACpB,GAAG,OAAO;wBACV,QAAQ,EAAE;4BACR,MAAM,EAAE,SAAS;4BACjB,KAAK,EAAE,UAAU,CAAC,KAAK;4BACvB,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;gCAC3F,CAAC,CAAC,UAAU,CAAC,KAAK;gCAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,IAAI,CAAC;yBAC5C;qBACF,CAAC,CAAC,CAAC;gBACN,CAAC;aACF,CAAC,CAAC;YACH,IAAI,iBAAiB,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/D,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACpB,GAAG,OAAO;gBACV,QAAQ,EAAE;oBACR,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,gBAAgB,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,gBAAgB,IAAI,CAAC;iBACxF;aACF,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAkC,CAAC;YAC7E,IAAI,iBAAiB,KAAK,UAAU,EAAE,CAAC;gBACrC,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,GAAwB;gBACjC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW;gBACrD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU;gBAClD,QAAQ,EAAE,CAAC,OAAO,CAAC;gBACnB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE;aACnC,CAAC;YACF,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACvF,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,OAAO;QACP,eAAe,CAAC,IAAI;YAClB,IAAI,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;gBAAE,OAAO;YACpD,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACpB,GAAG,OAAO;gBACV,YAAY,EAAE,IAAI;gBAClB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;aAC3D,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAA0B,EAAE,MAAe;IAC7D,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,MAAM,YAAY,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;QACxF,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAA0B;IACjD,IAAI,KAAK,KAAK,oBAAoB;QAAE,OAAO,yCAAyC,CAAC;IACrF,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,yCAAyC,CAAC;IAC3E,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,sBAAsB,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAyC;IACxE,OAAO,OAAO,CACZ,UAAU,EAAE,WAAW;WACpB,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,IAAI,UAAU,CAAC,UAAU,KAAK,kBAAkB,CAAC,CACvF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAmB,EACnB,KAAa,EACb,SAAiB,EACjB,QAAiB;IAEjB,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,aAAa,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;QAChD,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE;YACR,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACT,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,MAAM,CAAC,IAAI,iBAAiB,CAAC,GAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,SAAS,EAAE;gBACjF,IAAI,EAAE,SAAS;gBACf,QAAQ;aACT,CAAC,CAAC,CAAC;QACN,CAAC,CAAC;QACF,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC3C,aAAa,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAAmB,EACnB,KAA4B,EAC5B,SAAiB,EACjB,YAA0D;IAE1D,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,KAAK,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvF,YAAY,CAAC;YACX,KAAK;YACL,MAAM,EAAE,SAAS;YACjB,QAAQ;YACR,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACvD,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAA0B;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI;WACtD,KAAK,CAAC,YAAY,KAAK,SAAS;WAChC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS;WAC3C,KAAK,CAAC,QAAQ,KAAK,SAAS;WAC5B,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;IACtC,MAAM,MAAM,GAAgC,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACxG,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,aAAa;YACb,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,QAAQ,CAAC;IACf,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACvI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;eACR,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;IAEzF,OAAO;QACL,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAA8B,EAAE,KAA0B;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3F,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9F,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1G,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,QAAQ,kBAAkB,YAAY,GAAG,CAAC;AAC1G,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-flema-engram-sidebar",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Local-first OpenCode plugin/sidebar for Engram memory and SDD context, with an optional MCP stdio adapter",
5
5
  "type": "module",
6
6
  "exports": {
@@ -11,8 +11,21 @@
11
11
  "./tui": {
12
12
  "types": "./dist/sidebar/plugin.d.ts",
13
13
  "import": "./dist/sidebar/plugin.js"
14
+ },
15
+ "./core": {
16
+ "types": "./dist/core.d.ts",
17
+ "import": "./dist/core.js"
18
+ },
19
+ "./pi": {
20
+ "types": "./dist/pi.d.ts",
21
+ "import": "./dist/pi.js"
14
22
  }
15
23
  },
24
+ "pi": {
25
+ "extensions": [
26
+ "./dist/pi.js"
27
+ ]
28
+ },
16
29
  "bin": {
17
30
  "flema-engram": "dist/maintenance.js",
18
31
  "mcp-flema-engram": "dist/stdio.js"
@@ -43,7 +56,8 @@
43
56
  "developer-tools",
44
57
  "sdd",
45
58
  "memory",
46
- "mcp"
59
+ "mcp",
60
+ "pi-package"
47
61
  ],
48
62
  "license": "MIT",
49
63
  "repository": {