openclaw-cortex-memory 0.1.0-Alpha.30 → 0.1.0-Alpha.32

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -12
  3. package/SIGNATURE.md +7 -0
  4. package/SKILL.md +18 -3
  5. package/dist/index.d.ts +8 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +148 -6
  8. package/dist/index.js.map +1 -1
  9. package/dist/openclaw.plugin.json +120 -4
  10. package/dist/src/engine/memory_engine.d.ts +5 -1
  11. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  12. package/dist/src/engine/ts_engine.d.ts +116 -0
  13. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  14. package/dist/src/engine/ts_engine.js +417 -102
  15. package/dist/src/engine/ts_engine.js.map +1 -1
  16. package/dist/src/engine/types.d.ts +17 -0
  17. package/dist/src/engine/types.d.ts.map +1 -1
  18. package/dist/src/graph/ontology.d.ts +23 -1
  19. package/dist/src/graph/ontology.d.ts.map +1 -1
  20. package/dist/src/graph/ontology.js +743 -70
  21. package/dist/src/graph/ontology.js.map +1 -1
  22. package/dist/src/quality/llm_output_validator.d.ts +20 -2
  23. package/dist/src/quality/llm_output_validator.d.ts.map +1 -1
  24. package/dist/src/quality/llm_output_validator.js +296 -41
  25. package/dist/src/quality/llm_output_validator.js.map +1 -1
  26. package/dist/src/store/archive_store.d.ts +8 -0
  27. package/dist/src/store/archive_store.d.ts.map +1 -1
  28. package/dist/src/store/archive_store.js +244 -84
  29. package/dist/src/store/archive_store.js.map +1 -1
  30. package/dist/src/store/graph_memory_store.d.ts +72 -2
  31. package/dist/src/store/graph_memory_store.d.ts.map +1 -1
  32. package/dist/src/store/graph_memory_store.js +723 -50
  33. package/dist/src/store/graph_memory_store.js.map +1 -1
  34. package/dist/src/store/read_store.d.ts +3 -0
  35. package/dist/src/store/read_store.d.ts.map +1 -1
  36. package/dist/src/store/read_store.js +1004 -209
  37. package/dist/src/store/read_store.js.map +1 -1
  38. package/dist/src/store/vector_store.d.ts +1 -0
  39. package/dist/src/store/vector_store.d.ts.map +1 -1
  40. package/dist/src/store/vector_store.js +1 -0
  41. package/dist/src/store/vector_store.js.map +1 -1
  42. package/dist/src/store/write_store.d.ts +2 -0
  43. package/dist/src/store/write_store.d.ts.map +1 -1
  44. package/dist/src/store/write_store.js +45 -3
  45. package/dist/src/store/write_store.js.map +1 -1
  46. package/dist/src/sync/session_sync.d.ts +20 -1
  47. package/dist/src/sync/session_sync.d.ts.map +1 -1
  48. package/dist/src/sync/session_sync.js +1810 -161
  49. package/dist/src/sync/session_sync.js.map +1 -1
  50. package/dist/src/wiki/wiki_linter.d.ts +25 -0
  51. package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
  52. package/dist/src/wiki/wiki_linter.js +268 -0
  53. package/dist/src/wiki/wiki_linter.js.map +1 -0
  54. package/dist/src/wiki/wiki_logger.d.ts +10 -0
  55. package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
  56. package/dist/src/wiki/wiki_logger.js +78 -0
  57. package/dist/src/wiki/wiki_logger.js.map +1 -0
  58. package/dist/src/wiki/wiki_maintainer.d.ts +36 -0
  59. package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
  60. package/dist/src/wiki/wiki_maintainer.js +38 -0
  61. package/dist/src/wiki/wiki_maintainer.js.map +1 -0
  62. package/dist/src/wiki/wiki_projector.d.ts +33 -0
  63. package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
  64. package/dist/src/wiki/wiki_projector.js +633 -0
  65. package/dist/src/wiki/wiki_projector.js.map +1 -0
  66. package/dist/src/wiki/wiki_queue.d.ts +29 -0
  67. package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
  68. package/dist/src/wiki/wiki_queue.js +137 -0
  69. package/dist/src/wiki/wiki_queue.js.map +1 -0
  70. package/openclaw.plugin.json +120 -4
  71. package/package.json +8 -4
  72. package/schema/graph.schema.yaml +188 -33
  73. package/skills/cortex-memory/SKILL.md +49 -0
  74. package/skills/cortex-memory/references/agent-manual.md +115 -0
  75. package/skills/cortex-memory/references/configuration.md +92 -0
  76. package/skills/cortex-memory/references/publish-checklist.md +46 -0
  77. package/skills/cortex-memory/references/system-prompt-template.md +27 -0
  78. package/skills/cortex-memory/references/tools.md +181 -0
  79. package/skills/cortex-memory/scripts/smoke-check.ps1 +56 -0
@@ -0,0 +1,10 @@
1
+ interface WikiLogEntry {
2
+ memoryRoot: string;
3
+ type: "graph_append" | "conflict_pending" | "conflict_accepted" | "conflict_rejected";
4
+ source_event_id?: string;
5
+ conflict_id?: string;
6
+ message: string;
7
+ }
8
+ export declare function appendWikiLog(entry: WikiLogEntry): void;
9
+ export {};
10
+ //# sourceMappingURL=wiki_logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_logger.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_logger.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AA0BD,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAiBvD"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.appendWikiLog = appendWikiLog;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function logPath(memoryRoot) {
40
+ return path.join(memoryRoot, "wiki", "log.md");
41
+ }
42
+ function ensureParent(filePath) {
43
+ const dirPath = path.dirname(filePath);
44
+ if (!fs.existsSync(dirPath)) {
45
+ fs.mkdirSync(dirPath, { recursive: true });
46
+ }
47
+ }
48
+ function ensureLogHeader(filePath) {
49
+ if (fs.existsSync(filePath) && fs.statSync(filePath).size > 0) {
50
+ return;
51
+ }
52
+ const header = [
53
+ "# Memory Wiki Log",
54
+ "",
55
+ "Auto-generated maintenance log for graph->wiki projection events.",
56
+ "",
57
+ ].join("\n");
58
+ fs.writeFileSync(filePath, `${header}\n`, "utf-8");
59
+ }
60
+ function appendWikiLog(entry) {
61
+ const filePath = logPath(entry.memoryRoot);
62
+ ensureParent(filePath);
63
+ ensureLogHeader(filePath);
64
+ const now = new Date().toISOString();
65
+ const parts = [
66
+ `- [${now}]`,
67
+ entry.type,
68
+ entry.message,
69
+ ];
70
+ if (entry.source_event_id) {
71
+ parts.push(`source_event_id=${entry.source_event_id}`);
72
+ }
73
+ if (entry.conflict_id) {
74
+ parts.push(`conflict_id=${entry.conflict_id}`);
75
+ }
76
+ fs.appendFileSync(filePath, `${parts.join(" | ")}\n`, "utf-8");
77
+ }
78
+ //# sourceMappingURL=wiki_logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_logger.js","sourceRoot":"","sources":["../../../src/wiki/wiki_logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,sCAiBC;AApDD,uCAAyB;AACzB,2CAA6B;AAU7B,SAAS,OAAO,CAAC,UAAkB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG;QACb,mBAAmB;QACnB,EAAE;QACF,mEAAmE;QACnE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,aAAa,CAAC,KAAmB;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG;QACZ,MAAM,GAAG,GAAG;QACZ,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,OAAO;KACd,CAAC;IACF,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { GraphViewData } from "../store/graph_memory_store";
2
+ interface LoggerLike {
3
+ info: (message: string, ...args: unknown[]) => void;
4
+ warn: (message: string, ...args: unknown[]) => void;
5
+ }
6
+ interface MaintainWikiProjectionArgs {
7
+ memoryRoot: string;
8
+ graphView: GraphViewData;
9
+ maxBatch?: number;
10
+ logger?: LoggerLike;
11
+ }
12
+ interface MaintainWikiProjectionResult {
13
+ processed: number;
14
+ remaining: number;
15
+ snapshot: {
16
+ view_path: string;
17
+ timeline_path: string;
18
+ snapshot_id: string;
19
+ } | null;
20
+ projected: {
21
+ updated_at: string;
22
+ entities_count: number;
23
+ topics_count: number;
24
+ timelines_count: number;
25
+ files: {
26
+ index: string;
27
+ projection_index: string;
28
+ entities_dir: string;
29
+ topics_dir: string;
30
+ timelines_dir: string;
31
+ };
32
+ } | null;
33
+ }
34
+ export declare function maintainWikiProjection(args: MaintainWikiProjectionArgs): MaintainWikiProjectionResult;
35
+ export type { MaintainWikiProjectionResult };
36
+ //# sourceMappingURL=wiki_maintainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_maintainer.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_maintainer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,UAAU,UAAU;IAClB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrD;AAED,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC;IACT,SAAS,EACL;QACA,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC;YACd,gBAAgB,EAAE,MAAM,CAAC;YACzB,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,GACC,IAAI,CAAC;CACV;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,4BAA4B,CAiCrG;AAED,YAAY,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maintainWikiProjection = maintainWikiProjection;
4
+ const wiki_queue_1 = require("./wiki_queue");
5
+ const wiki_projector_1 = require("./wiki_projector");
6
+ function maintainWikiProjection(args) {
7
+ const drain = (0, wiki_queue_1.drainWikiRebuildQueue)({
8
+ memoryRoot: args.memoryRoot,
9
+ maxBatch: args.maxBatch,
10
+ });
11
+ if (drain.drained.length === 0) {
12
+ return {
13
+ processed: 0,
14
+ remaining: 0,
15
+ snapshot: null,
16
+ projected: null,
17
+ };
18
+ }
19
+ const snapshot = (0, wiki_projector_1.writeGraphViewProjection)({
20
+ memoryRoot: args.memoryRoot,
21
+ view: args.graphView,
22
+ });
23
+ const projected = (0, wiki_projector_1.projectWikiKnowledge)({
24
+ memoryRoot: args.memoryRoot,
25
+ graphView: args.graphView,
26
+ queueEvents: drain.drained,
27
+ });
28
+ if (args.logger) {
29
+ args.logger.info(`wiki_projection_maintained processed=${drain.drained.length} remaining=${drain.remaining} entities=${projected.entities_count} topics=${projected.topics_count} timelines=${projected.timelines_count}`);
30
+ }
31
+ return {
32
+ processed: drain.drained.length,
33
+ remaining: drain.remaining,
34
+ snapshot,
35
+ projected,
36
+ };
37
+ }
38
+ //# sourceMappingURL=wiki_maintainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_maintainer.js","sourceRoot":"","sources":["../../../src/wiki/wiki_maintainer.ts"],"names":[],"mappings":";;AAyCA,wDAiCC;AA1ED,6CAAqD;AACrD,qDAAkF;AAwClF,SAAgB,sBAAsB,CAAC,IAAgC;IACrE,MAAM,KAAK,GAAG,IAAA,kCAAqB,EAAC;QAClC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAA,yCAAwB,EAAC;QACxC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,IAAI,CAAC,SAAS;KACrB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAA,qCAAoB,EAAC;QACrC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,KAAK,CAAC,OAAO;KAC3B,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,wCAAwC,KAAK,CAAC,OAAO,CAAC,MAAM,cAAc,KAAK,CAAC,SAAS,aAAa,SAAS,CAAC,cAAc,WAAW,SAAS,CAAC,YAAY,cAAc,SAAS,CAAC,eAAe,EAAE,CACzM,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { GraphViewData } from "../store/graph_memory_store";
2
+ import type { WikiRebuildEvent } from "./wiki_queue";
3
+ interface WriteGraphViewProjectionArgs {
4
+ memoryRoot: string;
5
+ view: GraphViewData;
6
+ }
7
+ interface WriteGraphViewProjectionResult {
8
+ view_path: string;
9
+ timeline_path: string;
10
+ snapshot_id: string;
11
+ }
12
+ interface ProjectWikiKnowledgeArgs {
13
+ memoryRoot: string;
14
+ graphView: GraphViewData;
15
+ queueEvents: WikiRebuildEvent[];
16
+ }
17
+ interface ProjectWikiKnowledgeResult {
18
+ updated_at: string;
19
+ entities_count: number;
20
+ topics_count: number;
21
+ timelines_count: number;
22
+ files: {
23
+ index: string;
24
+ projection_index: string;
25
+ entities_dir: string;
26
+ topics_dir: string;
27
+ timelines_dir: string;
28
+ };
29
+ }
30
+ export declare function writeGraphViewProjection(args: WriteGraphViewProjectionArgs): WriteGraphViewProjectionResult;
31
+ export declare function projectWikiKnowledge(args: ProjectWikiKnowledgeArgs): ProjectWikiKnowledgeResult;
32
+ export type { WriteGraphViewProjectionResult, ProjectWikiKnowledgeResult };
33
+ //# sourceMappingURL=wiki_projector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_projector.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_projector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,UAAU,4BAA4B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,UAAU,8BAA8B;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,wBAAwB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AA0KD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,8BAA8B,CA8B3G;AAiVD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,0BAA0B,CAmL/F;AAED,YAAY,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,CAAC"}