@x12i/memorix-retrieval 1.1.0 → 1.2.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.
Files changed (50) hide show
  1. package/dist/client/catalox-adapter.d.ts +9 -0
  2. package/dist/client/catalox-adapter.d.ts.map +1 -0
  3. package/dist/client/catalox-adapter.js +42 -0
  4. package/dist/client/catalox-adapter.js.map +1 -0
  5. package/dist/client/catalox-like.d.ts +16 -0
  6. package/dist/client/catalox-like.d.ts.map +1 -1
  7. package/dist/client/create-stack-from-env.d.ts +21 -0
  8. package/dist/client/create-stack-from-env.d.ts.map +1 -0
  9. package/dist/client/create-stack-from-env.js +34 -0
  10. package/dist/client/create-stack-from-env.js.map +1 -0
  11. package/dist/client/types.d.ts +1 -1
  12. package/dist/client/types.d.ts.map +1 -1
  13. package/dist/data/record-id.d.ts +6 -0
  14. package/dist/data/record-id.d.ts.map +1 -0
  15. package/dist/data/record-id.js +49 -0
  16. package/dist/data/record-id.js.map +1 -0
  17. package/dist/descriptors/content-type-labels.d.ts +7 -0
  18. package/dist/descriptors/content-type-labels.d.ts.map +1 -0
  19. package/dist/descriptors/content-type-labels.js +26 -0
  20. package/dist/descriptors/content-type-labels.js.map +1 -0
  21. package/dist/descriptors/discover-entities.d.ts +26 -0
  22. package/dist/descriptors/discover-entities.d.ts.map +1 -0
  23. package/dist/descriptors/discover-entities.js +123 -0
  24. package/dist/descriptors/discover-entities.js.map +1 -0
  25. package/dist/explorer/entity-graph.d.ts +59 -0
  26. package/dist/explorer/entity-graph.d.ts.map +1 -0
  27. package/dist/explorer/entity-graph.js +151 -0
  28. package/dist/explorer/entity-graph.js.map +1 -0
  29. package/dist/explorer/health.d.ts +14 -0
  30. package/dist/explorer/health.d.ts.map +1 -0
  31. package/dist/explorer/health.js +70 -0
  32. package/dist/explorer/health.js.map +1 -0
  33. package/dist/explorer/raw-reads.d.ts +25 -0
  34. package/dist/explorer/raw-reads.d.ts.map +1 -0
  35. package/dist/explorer/raw-reads.js +78 -0
  36. package/dist/explorer/raw-reads.js.map +1 -0
  37. package/dist/explorer/scoped-workspace.d.ts +24 -0
  38. package/dist/explorer/scoped-workspace.d.ts.map +1 -0
  39. package/dist/explorer/scoped-workspace.js +217 -0
  40. package/dist/explorer/scoped-workspace.js.map +1 -0
  41. package/dist/index.d.ts +12 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/mongo/read-collection.d.ts +1 -0
  46. package/dist/mongo/read-collection.d.ts.map +1 -1
  47. package/dist/mongo/read-collection.js +6 -0
  48. package/dist/mongo/read-collection.js.map +1 -1
  49. package/docs/EXPLORER-HOST-APIS.md +48 -0
  50. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import type { CataloxBound } from "@x12i/catalox";
2
+ import type { CataloxLike } from "./catalox-like.js";
3
+ /**
4
+ * Wrap a {@link CataloxBound} (context already applied) as {@link CataloxLike}
5
+ * for {@link createMemorixRetrieval}. Ignores the per-call `context.appId` —
6
+ * use the bound's fixed app context when creating the bound.
7
+ */
8
+ export declare function createCataloxAdapterFromBound(bound: CataloxBound): CataloxLike;
9
+ //# sourceMappingURL=catalox-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalox-adapter.d.ts","sourceRoot":"","sources":["../../src/client/catalox-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAc3B;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAmC9E"}
@@ -0,0 +1,42 @@
1
+ function mapGetItemResult(result) {
2
+ if (result.outcome === "found") {
3
+ return { outcome: "found", item: { data: result.item.data ?? {} } };
4
+ }
5
+ if (result.outcome === "not_found") {
6
+ return { outcome: "not_found" };
7
+ }
8
+ return { outcome: "mapping_blocked" };
9
+ }
10
+ /**
11
+ * Wrap a {@link CataloxBound} (context already applied) as {@link CataloxLike}
12
+ * for {@link createMemorixRetrieval}. Ignores the per-call `context.appId` —
13
+ * use the bound's fixed app context when creating the bound.
14
+ */
15
+ export function createCataloxAdapterFromBound(bound) {
16
+ return {
17
+ async getCatalogItem(_context, catalogId, itemId) {
18
+ const result = await bound.getCatalogItem(catalogId, itemId);
19
+ return mapGetItemResult(result);
20
+ },
21
+ async listCatalogItems(_context, catalogId, options) {
22
+ const limit = Math.max(1, options?.limit ?? 200);
23
+ const list = await bound.listCatalogItems(catalogId, {
24
+ limit,
25
+ offset: options?.offset,
26
+ });
27
+ if (list.listOutcome === "mapping_blocked") {
28
+ return { items: [], hasMore: false };
29
+ }
30
+ const items = list.items.map((item) => ({
31
+ id: String(item.itemId),
32
+ data: item.data ?? {},
33
+ title: item.title,
34
+ }));
35
+ return {
36
+ items,
37
+ hasMore: Boolean(list.nextCursor) || items.length >= limit,
38
+ };
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=catalox-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalox-adapter.js","sourceRoot":"","sources":["../../src/client/catalox-adapter.ts"],"names":[],"mappings":"AAOA,SAAS,gBAAgB,CACvB,MAA2D;IAE3D,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAmB;IAC/D,OAAO;QACL,KAAK,CAAC,cAAc,CAClB,QAAQ,EACR,SAAS,EACT,MAAM;YAEN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,gBAAgB,CACpB,QAAQ,EACR,SAAS,EACT,OAAO;YAEP,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE;gBACnD,KAAK;gBACL,MAAM,EAAE,OAAO,EAAE,MAAM;aACxB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC,CAAC;YACJ,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;aAC3D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -8,9 +8,25 @@ export type CataloxCatalogItemResult = {
8
8
  } | {
9
9
  outcome: "mapping_blocked";
10
10
  };
11
+ export type CataloxCatalogListItem = {
12
+ id: string;
13
+ data: Record<string, unknown>;
14
+ title?: string;
15
+ };
16
+ export type CataloxCatalogListResult = {
17
+ items: CataloxCatalogListItem[];
18
+ hasMore: boolean;
19
+ };
11
20
  export type CataloxLike = {
12
21
  getCatalogItem(context: {
13
22
  appId?: string;
14
23
  }, catalogId: string, itemId: string): Promise<CataloxCatalogItemResult>;
24
+ listCatalogItems?(context: {
25
+ appId?: string;
26
+ }, catalogId: string, options?: {
27
+ limit?: number;
28
+ offset?: number;
29
+ cursor?: string;
30
+ }): Promise<CataloxCatalogListResult>;
15
31
  };
16
32
  //# sourceMappingURL=catalox-like.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalox-like.d.ts","sourceRoot":"","sources":["../../src/client/catalox-like.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,GAC7D;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEnC,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CACZ,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACtC,CAAC"}
1
+ {"version":3,"file":"catalox-like.d.ts","sourceRoot":"","sources":["../../src/client/catalox-like.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,GAC7D;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEnC,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CACZ,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACrC,gBAAgB,CAAC,CACf,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { CataloxBound, CataloxContext } from "@x12i/catalox";
2
+ import type { CataloxLike, MemorixRetrievalClient } from "./types.js";
3
+ export type MemorixRetrievalStack = {
4
+ appId: string;
5
+ cataloxBound: CataloxBound;
6
+ catalox: CataloxLike;
7
+ client: MemorixRetrievalClient;
8
+ };
9
+ export type CreateMemorixRetrievalStackFromEnvOptions = {
10
+ appId?: string;
11
+ cataloxContext?: Omit<CataloxContext, "appId"> & {
12
+ appId?: string;
13
+ };
14
+ processEnv?: NodeJS.ProcessEnv;
15
+ };
16
+ /**
17
+ * One-shot wiring: Catalox from env → bound context → adapter → retrieval client.
18
+ * Use this in host apps (e.g. memorix-explorer API) to avoid duplicating Catalox setup.
19
+ */
20
+ export declare function createMemorixRetrievalStackFromEnv(options?: CreateMemorixRetrievalStackFromEnvOptions): Promise<MemorixRetrievalStack>;
21
+ //# sourceMappingURL=create-stack-from-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-stack-from-env.d.ts","sourceRoot":"","sources":["../../src/client/create-stack-from-env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIlE,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kCAAkC,CACtD,OAAO,GAAE,yCAA8C,GACtD,OAAO,CAAC,qBAAqB,CAAC,CA2BhC"}
@@ -0,0 +1,34 @@
1
+ import { createCataloxFromEnv } from "@x12i/catalox";
2
+ import { MEMORIX_APP_ID } from "../descriptors/catalog-ids.js";
3
+ import { createCataloxAdapterFromBound } from "./catalox-adapter.js";
4
+ import { createMemorixRetrievalFromEnv } from "./create-from-env.js";
5
+ /**
6
+ * One-shot wiring: Catalox from env → bound context → adapter → retrieval client.
7
+ * Use this in host apps (e.g. memorix-explorer API) to avoid duplicating Catalox setup.
8
+ */
9
+ export async function createMemorixRetrievalStackFromEnv(options = {}) {
10
+ const processEnv = options.processEnv ?? process.env;
11
+ const appId = options.appId?.trim() ||
12
+ options.cataloxContext?.appId?.trim() ||
13
+ processEnv.CATALOX_APP_ID?.trim() ||
14
+ processEnv.MEMORIX_APP_ID?.trim() ||
15
+ MEMORIX_APP_ID;
16
+ const { catalox } = createCataloxFromEnv();
17
+ const ctx = {
18
+ ...(options.cataloxContext ?? {}),
19
+ appId,
20
+ actor: options.cataloxContext?.actor ?? {
21
+ type: "service",
22
+ id: "memorix-retrieval",
23
+ },
24
+ };
25
+ const cataloxBound = catalox.withContext(ctx);
26
+ const cataloxAdapter = createCataloxAdapterFromBound(cataloxBound);
27
+ const client = await createMemorixRetrievalFromEnv({
28
+ appId,
29
+ catalox: cataloxAdapter,
30
+ processEnv,
31
+ });
32
+ return { appId, cataloxBound, catalox: cataloxAdapter, client };
33
+ }
34
+ //# sourceMappingURL=create-stack-from-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-stack-from-env.js","sourceRoot":"","sources":["../../src/client/create-stack-from-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAgBrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,UAAqD,EAAE;IAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IACrD,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;QACrB,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;QACrC,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE;QACjC,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE;QACjC,cAAc,CAAC;IAEjB,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAmB;QAC1B,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACjC,KAAK;QACL,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI;YACtC,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,mBAAmB;SACxB;KACF,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC;QACjD,KAAK;QACL,OAAO,EAAE,cAAc;QACvB,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC"}
@@ -4,7 +4,7 @@ import type { createS3Client } from "@x12i/helpers/s3";
4
4
  import type { CataloxLike } from "./catalox-like.js";
5
5
  import type { XronoxLike } from "./xronox-like.js";
6
6
  import type { MemorixTarget } from "../mongo/types.js";
7
- export type { CataloxLike } from "./catalox-like.js";
7
+ export type { CataloxLike, CataloxCatalogListItem, CataloxCatalogListResult } from "./catalox-like.js";
8
8
  export type { XronoxLike, XronoxReadParams } from "./xronox-like.js";
9
9
  export type ContentReaders = {
10
10
  gcs?: ReturnType<typeof createGcsClient>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function resolveMemorixRecordIdFilter(recordId: string): Record<string, unknown>;
2
+ export declare function serializeMemorixDocumentForJson(doc: Record<string, unknown>): Record<string, unknown>;
3
+ export declare function escapeMongoRegex(value: string): string;
4
+ export declare function memorixLabelSearchFilter(searchText: string | undefined, fields?: readonly string[]): Record<string, unknown> | undefined;
5
+ export declare function mergeMemorixMongoFilters(...filters: Array<Record<string, unknown> | undefined>): Record<string, unknown>;
6
+ //# sourceMappingURL=record-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-id.d.ts","sourceRoot":"","sources":["../../src/data/record-id.ts"],"names":[],"mappings":"AAEA,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAiBD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,MAAM,GAAE,SAAS,MAAM,EAAuC,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMrC;AAED,wBAAgB,wBAAwB,CACtC,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GACrD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB"}
@@ -0,0 +1,49 @@
1
+ import { ObjectId } from "mongodb";
2
+ export function resolveMemorixRecordIdFilter(recordId) {
3
+ const trimmed = recordId.trim();
4
+ if (/^[a-fA-F0-9]{24}$/.test(trimmed)) {
5
+ return { _id: new ObjectId(trimmed) };
6
+ }
7
+ return { _id: trimmed };
8
+ }
9
+ function serializeValue(value) {
10
+ if (value == null)
11
+ return value;
12
+ if (value instanceof ObjectId)
13
+ return value.toHexString();
14
+ if (value instanceof Date)
15
+ return value.toISOString();
16
+ if (Array.isArray(value))
17
+ return value.map(serializeValue);
18
+ if (typeof value === "object") {
19
+ const out = {};
20
+ for (const [k, v] of Object.entries(value)) {
21
+ out[k] = serializeValue(v);
22
+ }
23
+ return out;
24
+ }
25
+ return value;
26
+ }
27
+ export function serializeMemorixDocumentForJson(doc) {
28
+ return serializeValue(doc);
29
+ }
30
+ export function escapeMongoRegex(value) {
31
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
32
+ }
33
+ export function memorixLabelSearchFilter(searchText, fields = ["name", "title", "label", "slug"]) {
34
+ const trimmed = searchText?.trim();
35
+ if (!trimmed)
36
+ return undefined;
37
+ const rx = escapeMongoRegex(trimmed);
38
+ const or = fields.map((field) => ({ [field]: { $regex: rx, $options: "i" } }));
39
+ return or.length === 1 ? or[0] : { $or: or };
40
+ }
41
+ export function mergeMemorixMongoFilters(...filters) {
42
+ const parts = filters.filter((f) => Boolean(f) && Object.keys(f).length > 0);
43
+ if (parts.length === 0)
44
+ return {};
45
+ if (parts.length === 1)
46
+ return parts[0];
47
+ return { $and: parts };
48
+ }
49
+ //# sourceMappingURL=record-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-id.js","sourceRoot":"","sources":["../../src/data/record-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,4BAA4B,CAC1C,QAAgB;IAEhB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC1D,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,GAA4B;IAE5B,OAAO,cAAc,CAAC,GAAG,CAA4B,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,UAA8B,EAC9B,SAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAE9D,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAG,OAAmD;IAEtD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAgC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAC9E,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Human-readable titles for common Memorix content-type keys. */
2
+ export declare const MEMORIX_CONTENT_TYPE_LABELS: Record<string, string>;
3
+ export declare function memorixContentTypeLabel(contentType: string): string;
4
+ export declare function listEntityContentTypeKeys(entity: import("./descriptor-types.js").MemorixEntityDescriptor): string[];
5
+ /** Primary badge count slice: scoped when defined, otherwise canonical. */
6
+ export declare function primaryEntityContentType(entity: import("./descriptor-types.js").MemorixEntityDescriptor): string;
7
+ //# sourceMappingURL=content-type-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-type-labels.d.ts","sourceRoot":"","sources":["../../src/descriptors/content-type-labels.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW9D,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,uBAAuB,EAAE,uBAAuB,GAC9D,MAAM,EAAE,CAEV;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,uBAAuB,EAAE,uBAAuB,GAC9D,MAAM,CAGR"}
@@ -0,0 +1,26 @@
1
+ /** Human-readable titles for common Memorix content-type keys. */
2
+ export const MEMORIX_CONTENT_TYPE_LABELS = {
3
+ scoped: "Scoped records",
4
+ snapshots: "Snapshots",
5
+ narratives: "Narratives",
6
+ web: "Web",
7
+ "web-scoped": "Web (scoped)",
8
+ raw: "Raw",
9
+ inference: "Inference",
10
+ analytics: "Analytics",
11
+ foresights: "Foresights",
12
+ analysis: "Analysis",
13
+ };
14
+ export function memorixContentTypeLabel(contentType) {
15
+ return MEMORIX_CONTENT_TYPE_LABELS[contentType] ?? contentType;
16
+ }
17
+ export function listEntityContentTypeKeys(entity) {
18
+ return Object.keys(entity.contentTypes);
19
+ }
20
+ /** Primary badge count slice: scoped when defined, otherwise canonical. */
21
+ export function primaryEntityContentType(entity) {
22
+ if (entity.contentTypes.scoped)
23
+ return "scoped";
24
+ return entity.defaults.canonicalContentType;
25
+ }
26
+ //# sourceMappingURL=content-type-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-type-labels.js","sourceRoot":"","sources":["../../src/descriptors/content-type-labels.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,GAAG,EAAE,KAAK;IACV,YAAY,EAAE,cAAc;IAC5B,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,OAAO,2BAA2B,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAA+D;IAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CACtC,MAA+D;IAE/D,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { MemorixRetrievalClient } from "../client/types.js";
2
+ import type { MemorixEntityDescriptor } from "./descriptor-types.js";
3
+ import { validateMemorixEntityDescriptor } from "./validate-descriptor.js";
4
+ export type MemorixEntityDescriptorSummary = {
5
+ id: string;
6
+ entityName: string;
7
+ label: string;
8
+ target?: "entity" | "event";
9
+ };
10
+ export type DiscoverMemorixEntitiesResult = {
11
+ summaries: MemorixEntityDescriptorSummary[];
12
+ source: "catalox" | "env" | "none";
13
+ catalogId: string;
14
+ hint?: string;
15
+ };
16
+ export declare function discoverMemorixEntities(client: MemorixRetrievalClient): Promise<DiscoverMemorixEntitiesResult>;
17
+ export declare function loadMemorixEntityDescriptorByName(client: MemorixRetrievalClient, entityName: string): Promise<MemorixEntityDescriptor>;
18
+ export declare function entityDescriptorConnections(entity: MemorixEntityDescriptor): Array<{
19
+ id: string;
20
+ targetEntityName: string;
21
+ relationType: string;
22
+ sourceProperty: string;
23
+ targetProperty: string;
24
+ }>;
25
+ export { validateMemorixEntityDescriptor };
26
+ //# sourceMappingURL=discover-entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-entities.d.ts","sourceRoot":"","sources":["../../src/descriptors/discover-entities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAIjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAEL,+BAA+B,EAChC,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,8BAA8B,GAAG;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,8BAA8B,EAAE,CAAC;IAC5C,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA2CF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,6BAA6B,CAAC,CA8DxC;AAED,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,CAAC,CAQlC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,GAC9B,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAkBD;AAED,OAAO,EAAE,+BAA+B,EAAE,CAAC"}
@@ -0,0 +1,123 @@
1
+ import { MEMORIX_ENTITY_DESCRIPTORS_CATALOG, } from "./catalog-ids.js";
2
+ import { parseDescriptorData, validateMemorixEntityDescriptor, } from "./validate-descriptor.js";
3
+ const ENV_MEMORIX_ENTITY_NAMES = "MEMORIX_ENTITY_NAMES";
4
+ function entityLabel(entityName, title) {
5
+ if (title?.trim())
6
+ return title.trim();
7
+ if (!entityName)
8
+ return entityName;
9
+ return entityName[0].toUpperCase() + entityName.slice(1).replace(/-/g, " ");
10
+ }
11
+ function parseEnvEntityNames(env) {
12
+ const raw = env[ENV_MEMORIX_ENTITY_NAMES]?.trim();
13
+ if (!raw)
14
+ return [];
15
+ return raw
16
+ .split(/[,;\s]+/)
17
+ .map((s) => s.trim())
18
+ .filter(Boolean);
19
+ }
20
+ async function listAllCatalogItems(client, catalogId) {
21
+ const listFn = client.catalox.listCatalogItems;
22
+ if (!listFn) {
23
+ return [];
24
+ }
25
+ const out = [];
26
+ let offset = 0;
27
+ const pageSize = 200;
28
+ for (;;) {
29
+ const page = await listFn({ appId: client.appId }, catalogId, {
30
+ limit: pageSize,
31
+ offset,
32
+ });
33
+ out.push(...page.items);
34
+ if (!page.hasMore || page.items.length === 0)
35
+ break;
36
+ offset += page.items.length;
37
+ if (offset > 10_000)
38
+ break;
39
+ }
40
+ return out;
41
+ }
42
+ export async function discoverMemorixEntities(client) {
43
+ const catalogId = MEMORIX_ENTITY_DESCRIPTORS_CATALOG;
44
+ const envNames = parseEnvEntityNames(client.processEnv);
45
+ if (envNames.length) {
46
+ return {
47
+ source: "env",
48
+ catalogId,
49
+ summaries: envNames.map((entityName) => ({
50
+ id: entityName,
51
+ entityName,
52
+ label: entityLabel(entityName),
53
+ })),
54
+ };
55
+ }
56
+ if (!client.catalox.listCatalogItems) {
57
+ return {
58
+ source: "none",
59
+ catalogId,
60
+ summaries: [],
61
+ hint: "Catalox adapter does not support listCatalogItems — use createCataloxAdapterFromBound or set MEMORIX_ENTITY_NAMES.",
62
+ };
63
+ }
64
+ try {
65
+ const items = await listAllCatalogItems(client, catalogId);
66
+ const summaries = [];
67
+ for (const item of items) {
68
+ const data = parseDescriptorData(item.data);
69
+ const entityName = typeof data.entityName === "string" && data.entityName.trim()
70
+ ? data.entityName.trim()
71
+ : item.id;
72
+ summaries.push({
73
+ id: item.id,
74
+ entityName,
75
+ label: entityLabel(entityName, item.title),
76
+ target: data.target === "entity" || data.target === "event"
77
+ ? data.target
78
+ : undefined,
79
+ });
80
+ }
81
+ if (summaries.length === 0) {
82
+ return {
83
+ source: "catalox",
84
+ catalogId,
85
+ summaries: [],
86
+ hint: `No entity descriptors in Catalox catalog "${catalogId}" for app ${client.appId}. Seed memorix-retrieval descriptors or set MEMORIX_ENTITY_NAMES.`,
87
+ };
88
+ }
89
+ return { source: "catalox", catalogId, summaries };
90
+ }
91
+ catch (e) {
92
+ const msg = e instanceof Error ? e.message : String(e);
93
+ return {
94
+ source: "none",
95
+ catalogId,
96
+ summaries: [],
97
+ hint: `Catalox entity discovery failed: ${msg}`,
98
+ };
99
+ }
100
+ }
101
+ export async function loadMemorixEntityDescriptorByName(client, entityName) {
102
+ const discovery = await discoverMemorixEntities(client);
103
+ const match = discovery.summaries.find((s) => s.entityName === entityName) ??
104
+ discovery.summaries.find((s) => s.id === entityName);
105
+ const descriptorId = match?.id ?? entityName;
106
+ const { loadMemorixEntityDescriptor } = await import("./load-entity-descriptor.js");
107
+ return loadMemorixEntityDescriptor(client, descriptorId);
108
+ }
109
+ export function entityDescriptorConnections(entity) {
110
+ const connections = [];
111
+ for (const [relationKey, rel] of Object.entries(entity.relations ?? {})) {
112
+ connections.push({
113
+ id: `${entity.entityName}-${relationKey}`,
114
+ targetEntityName: rel.targetEntity,
115
+ relationType: rel.type,
116
+ sourceProperty: rel.source.path,
117
+ targetProperty: rel.target.path,
118
+ });
119
+ }
120
+ return connections;
121
+ }
122
+ export { validateMemorixEntityDescriptor };
123
+ //# sourceMappingURL=discover-entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-entities.js","sourceRoot":"","sources":["../../src/descriptors/discover-entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { MemorixRetrievalClient } from "../client/types.js";
2
+ export type MemorixEntityGraphConnection = {
3
+ id: string;
4
+ targetEntityName: string;
5
+ relationType: string;
6
+ sourceProperty: string;
7
+ targetProperty: string;
8
+ };
9
+ export type MemorixEntityGraphEntity = {
10
+ entityName: string;
11
+ label: string;
12
+ count: number;
13
+ narratives: Array<{
14
+ id: string;
15
+ title: string;
16
+ }>;
17
+ connections: MemorixEntityGraphConnection[];
18
+ connectedEntityTypes: number;
19
+ contentTypesWithData: number;
20
+ drillable: boolean;
21
+ countErrors?: {
22
+ scoped?: string;
23
+ narratives?: string;
24
+ contentTypes?: string;
25
+ };
26
+ };
27
+ export type MemorixEntityGraphDiscovery = {
28
+ source: "env" | "catalox" | "none";
29
+ memorixDb: string;
30
+ scopedNamespace: string | null;
31
+ entitiesCatalogId: string;
32
+ cataloxAppId: string;
33
+ cataloxClient: boolean;
34
+ hint?: string;
35
+ };
36
+ export type MemorixEntityGraphResult = {
37
+ memorixDb: string;
38
+ entities: MemorixEntityGraphEntity[];
39
+ discovery: MemorixEntityGraphDiscovery;
40
+ };
41
+ export type BuildMemorixEntityGraphOptions = {
42
+ scopedNamespace?: string | null;
43
+ };
44
+ export declare function buildMemorixEntityGraph(client: MemorixRetrievalClient, options?: BuildMemorixEntityGraphOptions): Promise<MemorixEntityGraphResult>;
45
+ export type MemorixEntitySlicesResult = {
46
+ entityName: string;
47
+ slices: Array<{
48
+ contentType: string;
49
+ label: string;
50
+ count: number;
51
+ step: number;
52
+ }>;
53
+ sliceCountFailures?: Array<{
54
+ contentType: string;
55
+ error: string;
56
+ }>;
57
+ };
58
+ export declare function buildMemorixEntitySlices(client: MemorixRetrievalClient, entityName: string): Promise<MemorixEntitySlicesResult>;
59
+ //# sourceMappingURL=entity-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-graph.d.ts","sourceRoot":"","sources":["../../src/explorer/entity-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAcjE,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,SAAS,EAAE,2BAA2B,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAoBF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,wBAAwB,CAAC,CA+GnC;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,yBAAyB,CAAC,CA+BpC"}