opencode-memory-plugin 0.1.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 (102) hide show
  1. package/README.md +73 -0
  2. package/dist/compression/compressor.d.ts +86 -0
  3. package/dist/compression/compressor.d.ts.map +1 -0
  4. package/dist/compression/compressor.js +142 -0
  5. package/dist/compression/compressor.js.map +1 -0
  6. package/dist/compression/parser.d.ts +73 -0
  7. package/dist/compression/parser.d.ts.map +1 -0
  8. package/dist/compression/parser.js +139 -0
  9. package/dist/compression/parser.js.map +1 -0
  10. package/dist/compression/pipeline.d.ts +73 -0
  11. package/dist/compression/pipeline.d.ts.map +1 -0
  12. package/dist/compression/pipeline.js +205 -0
  13. package/dist/compression/pipeline.js.map +1 -0
  14. package/dist/compression/privacy.d.ts +8 -0
  15. package/dist/compression/privacy.d.ts.map +1 -0
  16. package/dist/compression/privacy.js +30 -0
  17. package/dist/compression/privacy.js.map +1 -0
  18. package/dist/compression/prompts.d.ts +24 -0
  19. package/dist/compression/prompts.d.ts.map +1 -0
  20. package/dist/compression/prompts.js +106 -0
  21. package/dist/compression/prompts.js.map +1 -0
  22. package/dist/compression/quality.d.ts +48 -0
  23. package/dist/compression/quality.d.ts.map +1 -0
  24. package/dist/compression/quality.js +159 -0
  25. package/dist/compression/quality.js.map +1 -0
  26. package/dist/config.d.ts +114 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +265 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/context/generator.d.ts +28 -0
  31. package/dist/context/generator.d.ts.map +1 -0
  32. package/dist/context/generator.js +80 -0
  33. package/dist/context/generator.js.map +1 -0
  34. package/dist/hooks/chat-message.d.ts +14 -0
  35. package/dist/hooks/chat-message.d.ts.map +1 -0
  36. package/dist/hooks/chat-message.js +35 -0
  37. package/dist/hooks/chat-message.js.map +1 -0
  38. package/dist/hooks/compaction.d.ts +13 -0
  39. package/dist/hooks/compaction.d.ts.map +1 -0
  40. package/dist/hooks/compaction.js +22 -0
  41. package/dist/hooks/compaction.js.map +1 -0
  42. package/dist/hooks/events.d.ts +52 -0
  43. package/dist/hooks/events.d.ts.map +1 -0
  44. package/dist/hooks/events.js +138 -0
  45. package/dist/hooks/events.js.map +1 -0
  46. package/dist/hooks/system-transform.d.ts +14 -0
  47. package/dist/hooks/system-transform.d.ts.map +1 -0
  48. package/dist/hooks/system-transform.js +26 -0
  49. package/dist/hooks/system-transform.js.map +1 -0
  50. package/dist/hooks/tool-after.d.ts +26 -0
  51. package/dist/hooks/tool-after.d.ts.map +1 -0
  52. package/dist/hooks/tool-after.js +88 -0
  53. package/dist/hooks/tool-after.js.map +1 -0
  54. package/dist/index.d.ts +11 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +79 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/logger.d.ts +60 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +91 -0
  61. package/dist/logger.js.map +1 -0
  62. package/dist/storage/db.d.ts +22 -0
  63. package/dist/storage/db.d.ts.map +1 -0
  64. package/dist/storage/db.js +198 -0
  65. package/dist/storage/db.js.map +1 -0
  66. package/dist/storage/schema.d.ts +2473 -0
  67. package/dist/storage/schema.d.ts.map +1 -0
  68. package/dist/storage/schema.js +100 -0
  69. package/dist/storage/schema.js.map +1 -0
  70. package/dist/storage/store.d.ts +376 -0
  71. package/dist/storage/store.d.ts.map +1 -0
  72. package/dist/storage/store.js +1025 -0
  73. package/dist/storage/store.js.map +1 -0
  74. package/dist/tools/memory-forget.d.ts +11 -0
  75. package/dist/tools/memory-forget.d.ts.map +1 -0
  76. package/dist/tools/memory-forget.js +249 -0
  77. package/dist/tools/memory-forget.js.map +1 -0
  78. package/dist/tools/memory-get.d.ts +10 -0
  79. package/dist/tools/memory-get.d.ts.map +1 -0
  80. package/dist/tools/memory-get.js +50 -0
  81. package/dist/tools/memory-get.js.map +1 -0
  82. package/dist/tools/memory-search.d.ts +11 -0
  83. package/dist/tools/memory-search.d.ts.map +1 -0
  84. package/dist/tools/memory-search.js +38 -0
  85. package/dist/tools/memory-search.js.map +1 -0
  86. package/dist/tools/memory-stats.d.ts +39 -0
  87. package/dist/tools/memory-stats.d.ts.map +1 -0
  88. package/dist/tools/memory-stats.js +121 -0
  89. package/dist/tools/memory-stats.js.map +1 -0
  90. package/dist/tools/memory-timeline.d.ts +10 -0
  91. package/dist/tools/memory-timeline.d.ts.map +1 -0
  92. package/dist/tools/memory-timeline.js +49 -0
  93. package/dist/tools/memory-timeline.js.map +1 -0
  94. package/dist/types.d.ts +178 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +4 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils.d.ts +130 -0
  99. package/dist/utils.d.ts.map +1 -0
  100. package/dist/utils.js +308 -0
  101. package/dist/utils.js.map +1 -0
  102. package/package.json +36 -0
@@ -0,0 +1,10 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ import { MemoryStore } from "../storage/store";
3
+ /**
4
+ * Creates the chronological memory timeline tool.
5
+ *
6
+ * @param store - Memory store.
7
+ * @returns Tool definition.
8
+ */
9
+ export declare function createMemoryTimelineTool(store: MemoryStore): ToolDefinition;
10
+ //# sourceMappingURL=memory-timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-timeline.d.ts","sourceRoot":"","sources":["../../src/tools/memory-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CA+C3E"}
@@ -0,0 +1,49 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { MemoryStore } from "../storage/store";
3
+ import { formatTimestamp } from "../utils";
4
+ /**
5
+ * Creates the chronological memory timeline tool.
6
+ *
7
+ * @param store - Memory store.
8
+ * @returns Tool definition.
9
+ */
10
+ export function createMemoryTimelineTool(store) {
11
+ return tool({
12
+ description: "Browse persistent project memory chronologically. Useful for understanding the sequence of prior work and narrowing by time range.",
13
+ args: {
14
+ limit: tool.schema.number().int().min(1).max(100).optional(),
15
+ before: tool.schema.string().datetime().optional(),
16
+ after: tool.schema.string().datetime().optional(),
17
+ sessionId: tool.schema.string().optional(),
18
+ },
19
+ async execute(args, context) {
20
+ await store.incrementToolUsage(context.sessionID, "memory_timeline");
21
+ const before = args.before ? Date.parse(args.before) : undefined;
22
+ const after = args.after ? Date.parse(args.after) : undefined;
23
+ if ((args.before && Number.isNaN(before)) || (args.after && Number.isNaN(after))) {
24
+ return "Invalid ISO datetime provided to memory_timeline.";
25
+ }
26
+ const page = await store.getTimeline({
27
+ limit: args.limit ?? 20,
28
+ before,
29
+ after,
30
+ sessionId: args.sessionId,
31
+ });
32
+ if (!page.observations.length) {
33
+ return "No memories found for the requested timeline filters.";
34
+ }
35
+ const sections = new Map();
36
+ for (const observation of page.observations) {
37
+ const date = new Date(observation.createdAt).toISOString().slice(0, 10);
38
+ const lines = sections.get(date) ?? [];
39
+ lines.push(`[${observation.id}] ${formatTimestamp(observation.createdAt)} — ${observation.title} (${observation.type}) — ${observation.subtitle ?? "No subtitle"}`);
40
+ sections.set(date, lines);
41
+ }
42
+ const body = [...sections.entries()]
43
+ .map(([date, lines]) => `=== ${date} ===\n${lines.join("\n")}`)
44
+ .join("\n\n");
45
+ return page.nextCursor ? `${body}\n\nNext cursor: ${page.nextCursor}` : body;
46
+ },
47
+ });
48
+ }
49
+ //# sourceMappingURL=memory-timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-timeline.js","sourceRoot":"","sources":["../../src/tools/memory-timeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import type { OpencodeClient } from "@opencode-ai/sdk";
2
+ import type { LanguageModel } from "ai";
3
+ export declare const OBSERVATION_TYPES: readonly ["tool_output", "file_change", "error", "decision"];
4
+ export declare const PENDING_STATUSES: readonly ["pending", "processing", "processed", "failed"];
5
+ export declare const OBSERVATION_QUALITIES: readonly ["high", "medium", "low"];
6
+ export type ObservationType = (typeof OBSERVATION_TYPES)[number];
7
+ export type PendingStatus = (typeof PENDING_STATUSES)[number];
8
+ export type ObservationQuality = (typeof OBSERVATION_QUALITIES)[number];
9
+ export type DeletionInitiator = "user" | "retention_cleanup";
10
+ export type LogLevel = "debug" | "info" | "warn" | "error";
11
+ export interface ProjectScope {
12
+ projectId: string;
13
+ projectRoot: string;
14
+ directory: string;
15
+ }
16
+ export interface PluginConfig {
17
+ dbPath: string;
18
+ indexSize: number;
19
+ sampleSize: number;
20
+ maxPendingRetries: number;
21
+ compressionModel: string | null;
22
+ maxRawContentSize: number;
23
+ enableSemanticSearch: boolean;
24
+ privacyStrip: boolean;
25
+ minContentLength: number;
26
+ compressionBatchSize: number;
27
+ retentionDays: number;
28
+ contextMaxTokens: number;
29
+ summaryLookback: number;
30
+ orphanThresholdMs: number;
31
+ queuePollIntervalMs: number;
32
+ sessionSummaryDebounceMs: number;
33
+ logLevel: LogLevel;
34
+ configPaths: string[];
35
+ }
36
+ export interface ModelSelection {
37
+ raw: string;
38
+ providerID: string;
39
+ modelID: string;
40
+ }
41
+ export interface Observation {
42
+ id: string;
43
+ projectId: string;
44
+ projectRoot: string;
45
+ sessionId: string;
46
+ type: ObservationType;
47
+ title: string;
48
+ subtitle: string | null;
49
+ narrative: string;
50
+ facts: string[];
51
+ concepts: string[];
52
+ filesInvolved: string[];
53
+ rawTokenCount: number;
54
+ compressedTokenCount: number;
55
+ toolName: string | null;
56
+ modelUsed: string | null;
57
+ quality: ObservationQuality;
58
+ rawFallback: string | null;
59
+ createdAt: number;
60
+ }
61
+ export interface QualityResult {
62
+ quality: ObservationQuality;
63
+ flags: string[];
64
+ }
65
+ export interface PendingMessage {
66
+ id: string;
67
+ projectId: string;
68
+ projectRoot: string;
69
+ sessionId: string;
70
+ toolName: string;
71
+ title: string | null;
72
+ rawContent: string;
73
+ rawMetadata: Record<string, unknown> | null;
74
+ status: PendingStatus;
75
+ retryCount: number;
76
+ errorMessage: string | null;
77
+ createdAt: number;
78
+ processedAt: number | null;
79
+ }
80
+ export interface SessionSummary {
81
+ id: string;
82
+ projectId: string;
83
+ projectRoot: string;
84
+ sessionId: string;
85
+ requested: string | null;
86
+ investigated: string | null;
87
+ learned: string | null;
88
+ completed: string | null;
89
+ nextSteps: string | null;
90
+ observationCount: number;
91
+ modelUsed: string | null;
92
+ createdAt: number;
93
+ }
94
+ export interface UserPromptRecord {
95
+ id: string;
96
+ projectId: string;
97
+ projectRoot: string;
98
+ sessionId: string;
99
+ messageId: string;
100
+ content: string;
101
+ createdAt: number;
102
+ }
103
+ export interface DeletionLogEntry {
104
+ id: string;
105
+ projectId: string;
106
+ projectRoot: string;
107
+ timestamp: number;
108
+ criteria: string;
109
+ count: number;
110
+ initiator: DeletionInitiator;
111
+ }
112
+ export interface ToolUsageStat {
113
+ id: string;
114
+ projectId: string;
115
+ projectRoot: string;
116
+ sessionId: string;
117
+ toolName: string;
118
+ callCount: number;
119
+ createdAt: number;
120
+ }
121
+ export interface MemorySearchResult {
122
+ id: string;
123
+ title: string;
124
+ subtitle: string | null;
125
+ type: ObservationType;
126
+ createdAt: number;
127
+ toolName: string | null;
128
+ quality: ObservationQuality;
129
+ }
130
+ export interface TimelineQuery {
131
+ limit: number;
132
+ before?: number;
133
+ after?: number;
134
+ sessionId?: string;
135
+ }
136
+ export interface TimelinePage {
137
+ observations: Observation[];
138
+ nextCursor: string | null;
139
+ }
140
+ export interface CompressionResult {
141
+ text: string;
142
+ modelUsed: string | null;
143
+ }
144
+ export interface ObservationCompressor {
145
+ compressObservation(input: {
146
+ pendingMessage: PendingMessage;
147
+ prompt: string;
148
+ model: ModelSelection | null;
149
+ abortSignal?: AbortSignal;
150
+ }): Promise<CompressionResult>;
151
+ summarizeSession(input: {
152
+ sessionId: string;
153
+ prompt: string;
154
+ model: ModelSelection | null;
155
+ abortSignal?: AbortSignal;
156
+ }): Promise<CompressionResult>;
157
+ }
158
+ export interface MemoryPluginOptions {
159
+ compressor?: ObservationCompressor;
160
+ languageModel?: LanguageModel;
161
+ now?: () => number;
162
+ }
163
+ export interface RuntimeState {
164
+ internalSessionIds: Set<string>;
165
+ injectedSessionIds: Set<string>;
166
+ knownSessionIds: Set<string>;
167
+ summaryTimers: Map<string, ReturnType<typeof setTimeout>>;
168
+ shutdownRegistered: boolean;
169
+ disposed: boolean;
170
+ }
171
+ export interface PluginBootstrapContext {
172
+ client: OpencodeClient;
173
+ directory: string;
174
+ worktree: string;
175
+ projectId: string;
176
+ now: () => number;
177
+ }
178
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ export const OBSERVATION_TYPES = ["tool_output", "file_change", "error", "decision"];
2
+ export const PENDING_STATUSES = ["pending", "processing", "processed", "failed"];
3
+ export const OBSERVATION_QUALITIES = ["high", "medium", "low"];
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAU,CAAA;AAE7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAA;AAEzF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAA"}
@@ -0,0 +1,130 @@
1
+ import type { ModelSelection } from "./types";
2
+ /**
3
+ * Creates a sortable identifier using the current timestamp and a UUID.
4
+ *
5
+ * @param now - Function that returns the current epoch time in milliseconds.
6
+ * @returns A lexicographically sortable identifier.
7
+ */
8
+ export declare function createSortableId(now: () => number): string;
9
+ /**
10
+ * Estimates token usage using a simple character-based heuristic.
11
+ *
12
+ * @param value - Text that should be converted into an estimated token count.
13
+ * @returns The estimated token count.
14
+ */
15
+ export declare function estimateTokenCount(value: string): number;
16
+ /**
17
+ * Resolves a path that may start with `~` into an absolute filesystem path.
18
+ *
19
+ * @param value - Path to resolve.
20
+ * @returns The resolved absolute or original path.
21
+ */
22
+ export declare function resolveHomePath(value: string): string;
23
+ /**
24
+ * Returns the default OpenCode config directory using XDG semantics.
25
+ *
26
+ * @returns The resolved OpenCode config directory.
27
+ */
28
+ export declare function getOpenCodeConfigDirectory(): string;
29
+ /**
30
+ * Ensures that the parent directory of a file path exists.
31
+ *
32
+ * @param filePath - File path whose parent should be created.
33
+ * @returns A promise that resolves after the directory exists.
34
+ */
35
+ export declare function ensureParentDirectory(filePath: string): Promise<void>;
36
+ /**
37
+ * Parses a JSON or JSONC file into a typed object.
38
+ *
39
+ * @param filePath - File path to read.
40
+ * @returns The parsed object.
41
+ */
42
+ export declare function readJsonFile<T>(filePath: string): Promise<T>;
43
+ /**
44
+ * Removes JSONC line and block comments while preserving string contents.
45
+ *
46
+ * @param value - Raw JSONC string.
47
+ * @returns A JSON string without comments.
48
+ */
49
+ export declare function stripJsonComments(value: string): string;
50
+ /**
51
+ * Parses a JSON value with a typed fallback.
52
+ *
53
+ * @param value - JSON text or nullish value.
54
+ * @param fallback - Fallback value when parsing fails.
55
+ * @returns The parsed value or the fallback.
56
+ */
57
+ export declare function parseJsonValue<T>(value: string | null | undefined, fallback: T): T;
58
+ /**
59
+ * Serializes any JSON-compatible value.
60
+ *
61
+ * @param value - Value to serialize.
62
+ * @returns A JSON string.
63
+ */
64
+ export declare function serializeJson(value: unknown): string;
65
+ /**
66
+ * Strips markdown code fences from an LLM response.
67
+ *
68
+ * @param value - Raw model output.
69
+ * @returns The unfenced content.
70
+ */
71
+ export declare function stripMarkdownFences(value: string): string;
72
+ /**
73
+ * Collapses repeated whitespace for more compact storage and prompts.
74
+ *
75
+ * @param value - Raw string.
76
+ * @returns Normalized text.
77
+ */
78
+ export declare function normalizeWhitespace(value: string): string;
79
+ /**
80
+ * Delays execution for a fixed number of milliseconds.
81
+ *
82
+ * @param milliseconds - Delay duration.
83
+ * @returns A promise that resolves after the delay.
84
+ */
85
+ export declare function delay(milliseconds: number): Promise<void>;
86
+ /**
87
+ * Formats a relative time label from a timestamp.
88
+ *
89
+ * @param value - Epoch time in milliseconds.
90
+ * @param now - Reference clock.
91
+ * @returns A relative time label.
92
+ */
93
+ export declare function formatRelativeTime(value: number, now: () => number): string;
94
+ /**
95
+ * Formats a timestamp as a local ISO-like date time string.
96
+ *
97
+ * @param value - Epoch time in milliseconds.
98
+ * @returns A formatted date time string.
99
+ */
100
+ export declare function formatTimestamp(value: number): string;
101
+ /**
102
+ * Builds a safe FTS5 MATCH query from arbitrary user text.
103
+ *
104
+ * @param value - Raw user query.
105
+ * @returns A sanitized FTS5 query string.
106
+ */
107
+ export declare function sanitizeFtsQuery(value: string): string;
108
+ /**
109
+ * Parses a `provider/model` string into the model object expected by the SDK.
110
+ *
111
+ * @param value - Model string from configuration.
112
+ * @returns A parsed model selection or null when invalid.
113
+ */
114
+ export declare function parseModelString(value: string | null | undefined): ModelSelection | null;
115
+ /**
116
+ * Converts an absolute path into a worktree-relative path when possible.
117
+ *
118
+ * @param value - Path to normalize.
119
+ * @param worktree - Project root.
120
+ * @returns A relative or original path.
121
+ */
122
+ export declare function normalizeProjectPath(value: string, worktree: string): string;
123
+ /**
124
+ * Checks whether a string likely contains binary-like output.
125
+ *
126
+ * @param value - Output text to inspect.
127
+ * @returns True when the content should be skipped.
128
+ */
129
+ export declare function isProbablyBinary(value: string): boolean;
130
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAOnD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAUlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAmB3E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAexF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc5E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBvD"}