@roackb2/heddle 1.6.0 → 1.8.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 (193) hide show
  1. package/README.md +5 -0
  2. package/dist/examples/repo-investigator.js +2 -2
  3. package/dist/examples/repo-investigator.js.map +1 -1
  4. package/dist/src/cli/ask.d.ts.map +1 -1
  5. package/dist/src/cli/ask.js +4 -4
  6. package/dist/src/cli/ask.js.map +1 -1
  7. package/dist/src/cli/chat/commands/debug-snapshot-command.js +2 -2
  8. package/dist/src/cli/chat/commands/debug-snapshot-command.js.map +1 -1
  9. package/dist/src/cli/chat/state/local-commands.js +6 -6
  10. package/dist/src/cli/chat/state/local-commands.js.map +1 -1
  11. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  12. package/dist/src/cli/chat/utils/runtime.js +3 -3
  13. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  14. package/dist/src/cli/main.js +22 -20
  15. package/dist/src/cli/main.js.map +1 -1
  16. package/dist/src/cli/remote/control-plane-client.d.ts +1 -1
  17. package/dist/src/core/agent/budget/index.d.ts +2 -0
  18. package/dist/src/core/agent/budget/index.d.ts.map +1 -0
  19. package/dist/src/core/agent/budget/index.js +2 -0
  20. package/dist/src/core/agent/budget/index.js.map +1 -0
  21. package/dist/src/core/agent/budget/step-budget.d.ts +12 -0
  22. package/dist/src/core/agent/budget/step-budget.d.ts.map +1 -0
  23. package/dist/src/core/agent/budget/step-budget.js +21 -0
  24. package/dist/src/core/agent/budget/step-budget.js.map +1 -0
  25. package/dist/src/core/agent/context/run-context-builder.js +6 -6
  26. package/dist/src/core/agent/context/run-context-builder.js.map +1 -1
  27. package/dist/src/core/agent/tools/tool-dispatcher.d.ts +3 -4
  28. package/dist/src/core/agent/tools/tool-dispatcher.d.ts.map +1 -1
  29. package/dist/src/core/agent/tools/tool-dispatcher.js +2 -2
  30. package/dist/src/core/agent/tools/tool-dispatcher.js.map +1 -1
  31. package/dist/src/core/agent/types.d.ts +5 -5
  32. package/dist/src/core/agent/types.d.ts.map +1 -1
  33. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts.map +1 -1
  34. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js +9 -5
  35. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js.map +1 -1
  36. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -1
  37. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +2 -3
  38. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -1
  39. package/dist/src/core/commands/slash/autocomplete.d.ts +9 -4
  40. package/dist/src/core/commands/slash/autocomplete.d.ts.map +1 -1
  41. package/dist/src/core/commands/slash/autocomplete.js +53 -48
  42. package/dist/src/core/commands/slash/autocomplete.js.map +1 -1
  43. package/dist/src/core/commands/slash/modules/auth/auth-commands.js +4 -4
  44. package/dist/src/core/commands/slash/modules/auth/auth-commands.js.map +1 -1
  45. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js +2 -2
  46. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js.map +1 -1
  47. package/dist/src/core/commands/slash/modules/drift/drift-commands.js +4 -4
  48. package/dist/src/core/commands/slash/modules/drift/drift-commands.js.map +1 -1
  49. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js +3 -3
  50. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js.map +1 -1
  51. package/dist/src/core/commands/slash/modules/model/model-commands.js +8 -8
  52. package/dist/src/core/commands/slash/modules/model/model-commands.js.map +1 -1
  53. package/dist/src/core/commands/slash/modules/session/session-commands.js +6 -6
  54. package/dist/src/core/commands/slash/modules/session/session-commands.js.map +1 -1
  55. package/dist/src/core/commands/slash/parser.d.ts +10 -5
  56. package/dist/src/core/commands/slash/parser.d.ts.map +1 -1
  57. package/dist/src/core/commands/slash/parser.js +42 -37
  58. package/dist/src/core/commands/slash/parser.js.map +1 -1
  59. package/dist/src/core/commands/slash/registry.d.ts +12 -3
  60. package/dist/src/core/commands/slash/registry.d.ts.map +1 -1
  61. package/dist/src/core/commands/slash/registry.js +50 -45
  62. package/dist/src/core/commands/slash/registry.js.map +1 -1
  63. package/dist/src/core/heartbeat/wake/service.d.ts.map +1 -1
  64. package/dist/src/core/heartbeat/wake/service.js +2 -3
  65. package/dist/src/core/heartbeat/wake/service.js.map +1 -1
  66. package/dist/src/core/memory/catalog.d.ts +22 -40
  67. package/dist/src/core/memory/catalog.d.ts.map +1 -1
  68. package/dist/src/core/memory/catalog.js +166 -155
  69. package/dist/src/core/memory/catalog.js.map +1 -1
  70. package/dist/src/core/memory/index.d.ts +14 -0
  71. package/dist/src/core/memory/index.d.ts.map +1 -0
  72. package/dist/src/core/memory/index.js +13 -0
  73. package/dist/src/core/memory/index.js.map +1 -0
  74. package/dist/src/core/memory/maintainer-prompt.d.ts +14 -0
  75. package/dist/src/core/memory/maintainer-prompt.d.ts.map +1 -0
  76. package/dist/src/core/memory/maintainer-prompt.js +58 -0
  77. package/dist/src/core/memory/maintainer-prompt.js.map +1 -0
  78. package/dist/src/core/memory/maintainer.d.ts +20 -44
  79. package/dist/src/core/memory/maintainer.d.ts.map +1 -1
  80. package/dist/src/core/memory/maintainer.js +124 -184
  81. package/dist/src/core/memory/maintainer.js.map +1 -1
  82. package/dist/src/core/memory/maintenance-integration.d.ts +22 -19
  83. package/dist/src/core/memory/maintenance-integration.d.ts.map +1 -1
  84. package/dist/src/core/memory/maintenance-integration.js +158 -163
  85. package/dist/src/core/memory/maintenance-integration.js.map +1 -1
  86. package/dist/src/core/memory/maintenance-repository.d.ts +27 -0
  87. package/dist/src/core/memory/maintenance-repository.d.ts.map +1 -0
  88. package/dist/src/core/memory/maintenance-repository.js +134 -0
  89. package/dist/src/core/memory/maintenance-repository.js.map +1 -0
  90. package/dist/src/core/memory/note-service.d.ts +23 -0
  91. package/dist/src/core/memory/note-service.d.ts.map +1 -0
  92. package/dist/src/core/memory/note-service.js +165 -0
  93. package/dist/src/core/memory/note-service.js.map +1 -0
  94. package/dist/src/core/memory/path-utils.d.ts +15 -0
  95. package/dist/src/core/memory/path-utils.d.ts.map +1 -0
  96. package/dist/src/core/memory/path-utils.js +31 -0
  97. package/dist/src/core/memory/path-utils.js.map +1 -0
  98. package/dist/src/core/memory/schemas.d.ts +116 -0
  99. package/dist/src/core/memory/schemas.d.ts.map +1 -0
  100. package/dist/src/core/memory/schemas.js +53 -0
  101. package/dist/src/core/memory/schemas.js.map +1 -0
  102. package/dist/src/core/memory/types.d.ts +149 -0
  103. package/dist/src/core/memory/types.d.ts.map +1 -0
  104. package/dist/src/core/memory/types.js +2 -0
  105. package/dist/src/core/memory/types.js.map +1 -0
  106. package/dist/src/core/memory/validation.d.ts +20 -38
  107. package/dist/src/core/memory/validation.d.ts.map +1 -1
  108. package/dist/src/core/memory/validation.js +98 -83
  109. package/dist/src/core/memory/validation.js.map +1 -1
  110. package/dist/src/core/memory/visibility.d.ts +19 -41
  111. package/dist/src/core/memory/visibility.d.ts.map +1 -1
  112. package/dist/src/core/memory/visibility.js +53 -153
  113. package/dist/src/core/memory/visibility.js.map +1 -1
  114. package/dist/src/core/review/index.d.ts +3 -0
  115. package/dist/src/core/review/index.d.ts.map +1 -0
  116. package/dist/src/core/review/index.js +2 -0
  117. package/dist/src/core/review/index.js.map +1 -0
  118. package/dist/src/core/review/service.d.ts +22 -0
  119. package/dist/src/core/review/service.d.ts.map +1 -0
  120. package/dist/src/core/review/service.js +143 -0
  121. package/dist/src/core/review/service.js.map +1 -0
  122. package/dist/src/core/review/{diff-domain.d.ts → types.d.ts} +1 -3
  123. package/dist/src/core/review/types.d.ts.map +1 -0
  124. package/dist/src/core/review/types.js +2 -0
  125. package/dist/src/core/review/types.js.map +1 -0
  126. package/dist/src/core/runtime/tools/service.js +2 -2
  127. package/dist/src/core/runtime/tools/service.js.map +1 -1
  128. package/dist/src/core/tools/execute-tool.d.ts +5 -4
  129. package/dist/src/core/tools/execute-tool.d.ts.map +1 -1
  130. package/dist/src/core/tools/execute-tool.js +23 -25
  131. package/dist/src/core/tools/execute-tool.js.map +1 -1
  132. package/dist/src/core/tools/index.d.ts +5 -0
  133. package/dist/src/core/tools/index.d.ts.map +1 -0
  134. package/dist/src/core/tools/index.js +4 -0
  135. package/dist/src/core/tools/index.js.map +1 -0
  136. package/dist/src/core/tools/registry.d.ts +8 -7
  137. package/dist/src/core/tools/registry.d.ts.map +1 -1
  138. package/dist/src/core/tools/registry.js +18 -21
  139. package/dist/src/core/tools/registry.js.map +1 -1
  140. package/dist/src/core/tools/toolkit.d.ts +9 -4
  141. package/dist/src/core/tools/toolkit.d.ts.map +1 -1
  142. package/dist/src/core/tools/toolkit.js +21 -16
  143. package/dist/src/core/tools/toolkit.js.map +1 -1
  144. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts +1 -1
  145. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts.map +1 -1
  146. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js +48 -238
  147. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js.map +1 -1
  148. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.d.ts.map +1 -1
  149. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js +75 -105
  150. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js.map +1 -1
  151. package/dist/src/core/trace/format.d.ts +9 -3
  152. package/dist/src/core/trace/format.d.ts.map +1 -1
  153. package/dist/src/core/trace/format.js +106 -107
  154. package/dist/src/core/trace/format.js.map +1 -1
  155. package/dist/src/core/trace/index.d.ts +4 -0
  156. package/dist/src/core/trace/index.d.ts.map +1 -0
  157. package/dist/src/core/trace/index.js +3 -0
  158. package/dist/src/core/trace/index.js.map +1 -0
  159. package/dist/src/core/trace/recorder.d.ts +10 -7
  160. package/dist/src/core/trace/recorder.d.ts.map +1 -1
  161. package/dist/src/core/trace/recorder.js +15 -17
  162. package/dist/src/core/trace/recorder.js.map +1 -1
  163. package/dist/src/core/trace/types.d.ts +7 -0
  164. package/dist/src/core/trace/types.d.ts.map +1 -0
  165. package/dist/src/core/trace/types.js +2 -0
  166. package/dist/src/core/trace/types.js.map +1 -0
  167. package/dist/src/index.d.ts +15 -14
  168. package/dist/src/index.d.ts.map +1 -1
  169. package/dist/src/index.js +11 -8
  170. package/dist/src/index.js.map +1 -1
  171. package/dist/src/server/features/control-plane/controllers/ask.d.ts.map +1 -1
  172. package/dist/src/server/features/control-plane/controllers/ask.js +6 -7
  173. package/dist/src/server/features/control-plane/controllers/ask.js.map +1 -1
  174. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js +3 -3
  175. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js.map +1 -1
  176. package/dist/src/server/features/control-plane/controllers/memory.d.ts +2 -1
  177. package/dist/src/server/features/control-plane/controllers/memory.d.ts.map +1 -1
  178. package/dist/src/server/features/control-plane/controllers/memory.js +8 -7
  179. package/dist/src/server/features/control-plane/controllers/memory.js.map +1 -1
  180. package/dist/src/server/features/control-plane/controllers/workspace-diff.js +2 -2
  181. package/dist/src/server/features/control-plane/controllers/workspace-diff.js.map +1 -1
  182. package/dist/src/server/features/control-plane/router.d.ts +1 -1
  183. package/dist/src/server/features/control-plane/types.d.ts +2 -2
  184. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  185. package/dist/src/server/router.d.ts +1 -1
  186. package/package.json +11 -4
  187. package/dist/src/core/review/diff-domain.d.ts.map +0 -1
  188. package/dist/src/core/review/diff-domain.js +0 -134
  189. package/dist/src/core/review/diff-domain.js.map +0 -1
  190. package/dist/src/core/utils/budget.d.ts +0 -13
  191. package/dist/src/core/utils/budget.d.ts.map +0 -1
  192. package/dist/src/core/utils/budget.js +0 -22
  193. package/dist/src/core/utils/budget.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { spawn } from 'node:child_process';
3
+ import { resolve } from 'node:path';
4
+ import { executeScopedEdit } from '../../core/tools/toolkits/coding-files/file-edit-core.js';
5
+ import { MemoryPathUtils } from './path-utils.js';
6
+ const DEFAULT_MAX_SEARCH_RESULTS = 100;
7
+ /**
8
+ * Owns note-level memory reads, search, listing, and scoped note edits.
9
+ */
10
+ export class MemoryNoteService {
11
+ memoryRoot;
12
+ constructor(memoryRoot) {
13
+ this.memoryRoot = memoryRoot;
14
+ }
15
+ async list(input = {}) {
16
+ const targetPath = this.resolvePath(input.path ?? '.');
17
+ if (!await MemoryPathUtils.pathExists(targetPath)) {
18
+ return [];
19
+ }
20
+ const info = await stat(targetPath);
21
+ if (info.isFile()) {
22
+ return [MemoryPathUtils.toMemoryRelativePath(this.resolveRoot(), targetPath)];
23
+ }
24
+ const notes = await this.listMarkdownNotes(targetPath);
25
+ return notes.map((path) => MemoryPathUtils.toMemoryRelativePath(this.resolveRoot(), path)).sort();
26
+ }
27
+ async read(input) {
28
+ const targetPath = this.resolvePath(input.path);
29
+ try {
30
+ return MemoryNoteService.pageText(await readFile(targetPath, 'utf8'), input.offset, input.maxLines);
31
+ }
32
+ catch (error) {
33
+ if (MemoryPathUtils.isErrorWithCode(error, 'EISDIR')) {
34
+ throw new Error(`Failed to read ${targetPath}: path is a directory, not a file. Use list_memory_notes to inspect memory directories.`, { cause: error });
35
+ }
36
+ throw new Error(`Failed to read ${targetPath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
37
+ }
38
+ }
39
+ async search(input) {
40
+ const targetPath = this.resolvePath(input.path ?? '.');
41
+ if (!await MemoryPathUtils.pathExists(targetPath)) {
42
+ return 'No matches found.';
43
+ }
44
+ return await this.searchWithCli(targetPath, input.query, MemoryNoteService.sanitizeMaxResults(input.maxResults));
45
+ }
46
+ async edit(raw) {
47
+ return await executeScopedEdit(raw, {
48
+ toolName: 'edit_memory_note',
49
+ rootPath: this.resolveRoot(),
50
+ rootLabel: 'memory root',
51
+ subjectLabel: 'memory note',
52
+ creationHint: 'Set createIfMissing to true if you want edit_memory_note to create it.',
53
+ enforceRoot: true,
54
+ });
55
+ }
56
+ resolvePath(path) {
57
+ const result = MemoryPathUtils.resolveMemoryPath(this.resolveRoot(), path);
58
+ if (!result.ok) {
59
+ throw new Error(result.error);
60
+ }
61
+ return result.path;
62
+ }
63
+ async listMarkdownNotes(root) {
64
+ const results = [];
65
+ const entries = await readdir(root, { withFileTypes: true });
66
+ for (const entry of entries) {
67
+ if (entry.name === '_maintenance') {
68
+ continue;
69
+ }
70
+ const nextPath = resolve(root, entry.name);
71
+ if (entry.isDirectory()) {
72
+ results.push(...await this.listMarkdownNotes(nextPath));
73
+ continue;
74
+ }
75
+ if (entry.isFile() && MemoryNoteService.isMarkdownPath(nextPath)) {
76
+ results.push(nextPath);
77
+ }
78
+ }
79
+ return results.sort();
80
+ }
81
+ async searchWithCli(targetPath, query, maxResults) {
82
+ const memoryRoot = this.resolveRoot();
83
+ const relativeTarget = MemoryPathUtils.toMemoryRelativePath(memoryRoot, targetPath);
84
+ const normalizedTarget = relativeTarget === '.' ? '.' : relativeTarget;
85
+ const rgResult = await MemoryNoteService.runSearchCommand('rg', ['-n', '--no-heading', '--glob', '*.md', query, normalizedTarget], memoryRoot);
86
+ if (rgResult.kind === 'ok') {
87
+ return MemoryNoteService.trimSearchOutput(rgResult.stdout, maxResults);
88
+ }
89
+ if (rgResult.kind === 'nonzero_no_match') {
90
+ return 'No matches found.';
91
+ }
92
+ if (rgResult.kind !== 'missing_binary') {
93
+ throw new Error(`Failed to search memory notes in ${targetPath}: ${rgResult.error}`);
94
+ }
95
+ const grepResult = await MemoryNoteService.runSearchCommand('grep', ['-R', '-n', '--include=*.md', query, normalizedTarget], memoryRoot);
96
+ if (grepResult.kind === 'ok') {
97
+ return MemoryNoteService.trimSearchOutput(grepResult.stdout, maxResults);
98
+ }
99
+ if (grepResult.kind === 'nonzero_no_match') {
100
+ return 'No matches found.';
101
+ }
102
+ throw new Error(`Failed to search memory notes in ${targetPath}: ${grepResult.error}`);
103
+ }
104
+ resolveRoot() {
105
+ return resolve(this.memoryRoot);
106
+ }
107
+ static pageText(content, offset, maxLines) {
108
+ const lines = content.split('\n');
109
+ const start = offset && offset > 0 ? Math.floor(offset) : 0;
110
+ const end = maxLines && maxLines > 0 ? start + Math.floor(maxLines) : undefined;
111
+ return start > 0 || end !== undefined ? lines.slice(start, end).join('\n') : content;
112
+ }
113
+ static sanitizeMaxResults(value) {
114
+ if (!value || !Number.isFinite(value) || value <= 0) {
115
+ return DEFAULT_MAX_SEARCH_RESULTS;
116
+ }
117
+ return Math.min(Math.floor(value), DEFAULT_MAX_SEARCH_RESULTS);
118
+ }
119
+ static isMarkdownPath(path) {
120
+ return /\.md$/i.test(path);
121
+ }
122
+ static trimSearchOutput(stdout, maxResults) {
123
+ const lines = stdout
124
+ .split('\n')
125
+ .map((line) => line.trimEnd().replace(/^\.\//, ''))
126
+ .filter((line) => line.length > 0)
127
+ .slice(0, maxResults);
128
+ return lines.length > 0 ? lines.join('\n') : 'No matches found.';
129
+ }
130
+ static async runSearchCommand(binary, args, cwd) {
131
+ return await new Promise((resolvePromise) => {
132
+ const child = spawn(binary, args, {
133
+ cwd,
134
+ stdio: ['ignore', 'pipe', 'pipe'],
135
+ });
136
+ let stdout = '';
137
+ let stderr = '';
138
+ child.stdout.on('data', (chunk) => {
139
+ stdout += chunk.toString();
140
+ });
141
+ child.stderr.on('data', (chunk) => {
142
+ stderr += chunk.toString();
143
+ });
144
+ child.on('error', (error) => {
145
+ if ('code' in error && error.code === 'ENOENT') {
146
+ resolvePromise({ kind: 'missing_binary', error: `${binary} is not available in the environment.` });
147
+ return;
148
+ }
149
+ resolvePromise({ kind: 'error', error: error.message });
150
+ });
151
+ child.on('close', (code) => {
152
+ if (code === 0) {
153
+ resolvePromise({ kind: 'ok', stdout });
154
+ return;
155
+ }
156
+ if (code === 1) {
157
+ resolvePromise({ kind: 'nonzero_no_match', error: stderr.trim() || `${binary} returned exit code 1` });
158
+ return;
159
+ }
160
+ resolvePromise({ kind: 'error', error: stderr.trim() || `${binary} returned exit code ${code ?? 'unknown'}` });
161
+ });
162
+ });
163
+ }
164
+ }
165
+ //# sourceMappingURL=note-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"note-service.js","sourceRoot":"","sources":["../../../../src/core/memory/note-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare class MemoryPathUtils {
2
+ static resolveMemoryPath(memoryRoot: string, requestedPath: string): {
3
+ ok: true;
4
+ path: string;
5
+ } | {
6
+ ok: false;
7
+ error: string;
8
+ };
9
+ static toMemoryRelativePath(memoryRoot: string, filePath: string): string;
10
+ static pathExists(path: string): Promise<boolean>;
11
+ static isErrorWithCode(error: unknown, code: string): error is Error & {
12
+ code: string;
13
+ };
14
+ }
15
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/path-utils.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAe;IAC1B,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAc9H,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;WAI5D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;CAGxF"}
@@ -0,0 +1,31 @@
1
+ import { access } from 'node:fs/promises';
2
+ import { isAbsolute, relative, resolve } from 'node:path';
3
+ export class MemoryPathUtils {
4
+ static resolveMemoryPath(memoryRoot, requestedPath) {
5
+ if (!requestedPath.trim()) {
6
+ return { ok: false, error: `Memory note paths must be non-empty and stay inside ${memoryRoot}.` };
7
+ }
8
+ const targetPath = resolve(memoryRoot, requestedPath);
9
+ const rel = relative(memoryRoot, targetPath);
10
+ if (rel.startsWith('..') || isAbsolute(rel)) {
11
+ return { ok: false, error: `Memory note paths must stay inside ${memoryRoot}. Refusing to access ${targetPath}.` };
12
+ }
13
+ return { ok: true, path: targetPath };
14
+ }
15
+ static toMemoryRelativePath(memoryRoot, filePath) {
16
+ return relative(memoryRoot, filePath) || '.';
17
+ }
18
+ static async pathExists(path) {
19
+ try {
20
+ await access(path);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ static isErrorWithCode(error, code) {
28
+ return error instanceof Error && 'code' in error && error.code === code;
29
+ }
30
+ }
31
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../../../src/core/memory/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,iBAAiB,CAAC,UAAkB,EAAE,aAAqB;QAChE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uDAAuD,UAAU,GAAG,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,UAAU,wBAAwB,UAAU,GAAG,EAAE,CAAC;QACrH,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,UAAkB,EAAE,QAAgB;QAC9D,OAAO,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAY;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAc,EAAE,IAAY;QACjD,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;IAC1E,CAAC;CACF"}
@@ -0,0 +1,116 @@
1
+ import { z } from 'zod';
2
+ export declare class MemorySchemas {
3
+ static readonly candidate: z.ZodObject<{
4
+ id: z.ZodString;
5
+ recordedAt: z.ZodString;
6
+ status: z.ZodLiteral<"pending">;
7
+ summary: z.ZodString;
8
+ evidence: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ categoryHint: z.ZodOptional<z.ZodString>;
10
+ importance: z.ZodOptional<z.ZodEnum<{
11
+ low: "low";
12
+ medium: "medium";
13
+ high: "high";
14
+ }>>;
15
+ confidence: z.ZodOptional<z.ZodEnum<{
16
+ "user-stated": "user-stated";
17
+ "tool-verified": "tool-verified";
18
+ inferred: "inferred";
19
+ historical: "historical";
20
+ }>>;
21
+ sourceRefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ }, z.core.$strip>;
23
+ static readonly candidateStatus: z.ZodObject<{
24
+ kind: z.ZodLiteral<"candidate_status">;
25
+ candidateId: z.ZodString;
26
+ status: z.ZodLiteral<"processed">;
27
+ runId: z.ZodString;
28
+ recordedAt: z.ZodString;
29
+ }, z.core.$strip>;
30
+ static readonly candidateLogEntry: z.ZodUnion<readonly [z.ZodObject<{
31
+ id: z.ZodString;
32
+ recordedAt: z.ZodString;
33
+ status: z.ZodLiteral<"pending">;
34
+ summary: z.ZodString;
35
+ evidence: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
+ categoryHint: z.ZodOptional<z.ZodString>;
37
+ importance: z.ZodOptional<z.ZodEnum<{
38
+ low: "low";
39
+ medium: "medium";
40
+ high: "high";
41
+ }>>;
42
+ confidence: z.ZodOptional<z.ZodEnum<{
43
+ "user-stated": "user-stated";
44
+ "tool-verified": "tool-verified";
45
+ inferred: "inferred";
46
+ historical: "historical";
47
+ }>>;
48
+ sourceRefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ }, z.core.$strip>, z.ZodObject<{
50
+ kind: z.ZodLiteral<"candidate_status">;
51
+ candidateId: z.ZodString;
52
+ status: z.ZodLiteral<"processed">;
53
+ runId: z.ZodString;
54
+ recordedAt: z.ZodString;
55
+ }, z.core.$strip>]>;
56
+ static readonly maintenanceRun: z.ZodObject<{
57
+ id: z.ZodString;
58
+ startedAt: z.ZodString;
59
+ finishedAt: z.ZodString;
60
+ source: z.ZodString;
61
+ outcome: z.ZodEnum<{
62
+ error: "error";
63
+ done: "done";
64
+ max_steps: "max_steps";
65
+ interrupted: "interrupted";
66
+ skipped: "skipped";
67
+ }>;
68
+ summary: z.ZodString;
69
+ candidateIds: z.ZodArray<z.ZodString>;
70
+ processedCandidateIds: z.ZodArray<z.ZodString>;
71
+ failedCandidateIds: z.ZodArray<z.ZodString>;
72
+ catalogValid: z.ZodBoolean;
73
+ catalogMissing: z.ZodArray<z.ZodString>;
74
+ }, z.core.$strip>;
75
+ static readonly maintenanceLock: z.ZodObject<{
76
+ id: z.ZodString;
77
+ pid: z.ZodOptional<z.ZodNumber>;
78
+ acquiredAt: z.ZodString;
79
+ }, z.core.$strip>;
80
+ static parseCandidateLogEntry(value: unknown): z.ZodSafeParseResult<{
81
+ id: string;
82
+ recordedAt: string;
83
+ status: "pending";
84
+ summary: string;
85
+ evidence?: string[] | undefined;
86
+ categoryHint?: string | undefined;
87
+ importance?: "low" | "medium" | "high" | undefined;
88
+ confidence?: "user-stated" | "tool-verified" | "inferred" | "historical" | undefined;
89
+ sourceRefs?: string[] | undefined;
90
+ } | {
91
+ kind: "candidate_status";
92
+ candidateId: string;
93
+ status: "processed";
94
+ runId: string;
95
+ recordedAt: string;
96
+ }>;
97
+ static parseMaintenanceRun(value: unknown): z.ZodSafeParseResult<{
98
+ id: string;
99
+ startedAt: string;
100
+ finishedAt: string;
101
+ source: string;
102
+ outcome: "error" | "done" | "max_steps" | "interrupted" | "skipped";
103
+ summary: string;
104
+ candidateIds: string[];
105
+ processedCandidateIds: string[];
106
+ failedCandidateIds: string[];
107
+ catalogValid: boolean;
108
+ catalogMissing: string[];
109
+ }>;
110
+ static parseMaintenanceLock(value: unknown): z.ZodSafeParseResult<{
111
+ id: string;
112
+ acquiredAt: string;
113
+ pid?: number | undefined;
114
+ }>;
115
+ }
116
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,SAAS;;;;;;;;;;;;;;;;;;;sBAUtB;IAEH,MAAM,CAAC,QAAQ,CAAC,eAAe;;;;;;sBAM5B;IAEH,MAAM,CAAC,QAAQ,CAAC,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;wBAG9B;IAEH,MAAM,CAAC,QAAQ,CAAC,cAAc;;;;;;;;;;;;;;;;;;sBAY3B;IAEH,MAAM,CAAC,QAAQ,CAAC,eAAe;;;;sBAI5B;IAEH,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;IAI5C,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO;;;;;;;;;;;;;IAIzC,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO;;;;;CAG3C"}
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ export class MemorySchemas {
3
+ static candidate = z.object({
4
+ id: z.string().describe('Stable id for a pending durable knowledge candidate.'),
5
+ recordedAt: z.string().describe('ISO timestamp when the candidate was recorded.'),
6
+ status: z.literal('pending').describe('Candidates in the JSONL log are pending until a status event marks them processed.'),
7
+ summary: z.string().describe('Concise durable fact or preference to preserve.'),
8
+ evidence: z.array(z.string()).optional().describe('Short supporting observations.'),
9
+ categoryHint: z.string().optional().describe('Suggested memory category.'),
10
+ importance: z.enum(['low', 'medium', 'high']).optional().describe('Expected future value.'),
11
+ confidence: z.enum(['user-stated', 'tool-verified', 'inferred', 'historical']).optional().describe('Why the candidate should be trusted.'),
12
+ sourceRefs: z.array(z.string()).optional().describe('Workspace-relative paths, commands, trace ids, or note references.'),
13
+ });
14
+ static candidateStatus = z.object({
15
+ kind: z.literal('candidate_status').describe('Discriminator for candidate status events in the candidate JSONL log.'),
16
+ candidateId: z.string().describe('Candidate id whose status changed.'),
17
+ status: z.literal('processed').describe('Processed candidates are hidden from pending reads.'),
18
+ runId: z.string().describe('Maintenance run that processed the candidate.'),
19
+ recordedAt: z.string().describe('ISO timestamp when the status event was recorded.'),
20
+ });
21
+ static candidateLogEntry = z.union([
22
+ MemorySchemas.candidate,
23
+ MemorySchemas.candidateStatus,
24
+ ]);
25
+ static maintenanceRun = z.object({
26
+ id: z.string().describe('Stable id for a memory maintenance run.'),
27
+ startedAt: z.string().describe('ISO timestamp when the run started.'),
28
+ finishedAt: z.string().describe('ISO timestamp when the run finished.'),
29
+ source: z.string().describe('Caller or workflow that triggered the run.'),
30
+ outcome: z.enum(['done', 'max_steps', 'error', 'interrupted', 'skipped']).describe('Agent-loop or maintenance outcome.'),
31
+ summary: z.string().describe('Human-readable run result summary.'),
32
+ candidateIds: z.array(z.string()).describe('All candidate ids considered by the run.'),
33
+ processedCandidateIds: z.array(z.string()).describe('Candidate ids successfully processed.'),
34
+ failedCandidateIds: z.array(z.string()).describe('Candidate ids skipped or not processed.'),
35
+ catalogValid: z.boolean().describe('Whether required memory catalogs existed after the run.'),
36
+ catalogMissing: z.array(z.string()).describe('Missing required catalog paths.'),
37
+ });
38
+ static maintenanceLock = z.object({
39
+ id: z.string().describe('Opaque lock owner id.'),
40
+ pid: z.number().optional().describe('Process id that acquired the lock.'),
41
+ acquiredAt: z.string().describe('ISO timestamp when the lock was acquired.'),
42
+ });
43
+ static parseCandidateLogEntry(value) {
44
+ return MemorySchemas.candidateLogEntry.safeParse(value);
45
+ }
46
+ static parseMaintenanceRun(value) {
47
+ return MemorySchemas.maintenanceRun.safeParse(value);
48
+ }
49
+ static parseMaintenanceLock(value) {
50
+ return MemorySchemas.maintenanceLock.safeParse(value);
51
+ }
52
+ }
53
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/core/memory/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import type { LlmAdapter } from '../../core/llm/types.js';
2
+ import type { RunResult, TraceEvent } from '../../core/types.js';
3
+ export type MemoryCategory = {
4
+ path: string;
5
+ title: string;
6
+ purpose: string;
7
+ readWhen: string;
8
+ };
9
+ export type BootstrapMemoryWorkspaceResult = {
10
+ memoryRoot: string;
11
+ createdPaths: string[];
12
+ };
13
+ export type MemoryCatalogLoadResult = {
14
+ memoryRoot: string;
15
+ catalogPath: string;
16
+ exists: boolean;
17
+ content: string;
18
+ truncated: boolean;
19
+ originalBytes: number;
20
+ maxBytes: number;
21
+ };
22
+ export type MemoryCatalogShapeValidation = {
23
+ ok: boolean;
24
+ memoryRoot: string;
25
+ missing: string[];
26
+ };
27
+ export type KnowledgeCandidate = {
28
+ id: string;
29
+ recordedAt: string;
30
+ status: 'pending';
31
+ summary: string;
32
+ evidence?: string[];
33
+ categoryHint?: string;
34
+ importance?: 'low' | 'medium' | 'high';
35
+ confidence?: 'user-stated' | 'tool-verified' | 'inferred' | 'historical';
36
+ sourceRefs?: string[];
37
+ };
38
+ export type KnowledgeCandidateStatusRecord = {
39
+ kind: 'candidate_status';
40
+ candidateId: string;
41
+ status: 'processed';
42
+ runId: string;
43
+ recordedAt: string;
44
+ };
45
+ export type KnowledgeMaintenanceRunRecord = {
46
+ id: string;
47
+ startedAt: string;
48
+ finishedAt: string;
49
+ source: string;
50
+ outcome: RunResult['outcome'] | 'skipped';
51
+ summary: string;
52
+ candidateIds: string[];
53
+ processedCandidateIds: string[];
54
+ failedCandidateIds: string[];
55
+ catalogValid: boolean;
56
+ catalogMissing: string[];
57
+ };
58
+ export type RunKnowledgeMaintenanceOptions = {
59
+ memoryRoot: string;
60
+ observations: KnowledgeCandidate[];
61
+ llm: LlmAdapter;
62
+ source: string;
63
+ maxSteps?: number;
64
+ now?: () => Date;
65
+ nextRunId?: () => string;
66
+ };
67
+ export type RunKnowledgeMaintenanceResult = {
68
+ run: KnowledgeMaintenanceRunRecord;
69
+ result?: RunResult;
70
+ };
71
+ export type RunMaintenanceForRecordedCandidatesOptions = {
72
+ memoryRoot: string;
73
+ llm: LlmAdapter;
74
+ source: string;
75
+ trace: TraceEvent[];
76
+ maxSteps?: number;
77
+ lockTimeoutMs?: number;
78
+ lockStaleAfterMs?: number;
79
+ onTraceEvent?: (event: TraceEvent) => void;
80
+ };
81
+ export type RunMaintenanceForRecordedCandidatesResult = {
82
+ candidateIds: string[];
83
+ maintenance?: RunKnowledgeMaintenanceResult;
84
+ events: TraceEvent[];
85
+ };
86
+ export type MemoryStatusView = {
87
+ memoryRoot: string;
88
+ catalog: {
89
+ ok: boolean;
90
+ missing: string[];
91
+ };
92
+ notes: {
93
+ count: number;
94
+ };
95
+ candidates: {
96
+ pending: number;
97
+ };
98
+ runs: {
99
+ latest: KnowledgeMaintenanceRunRecord[];
100
+ };
101
+ };
102
+ export type MemoryValidationIssue = {
103
+ type: 'missing_catalog';
104
+ severity: 'error';
105
+ path: string;
106
+ message: string;
107
+ } | {
108
+ type: 'oversized_catalog';
109
+ severity: 'warning';
110
+ path: string;
111
+ sizeBytes: number;
112
+ maxBytes: number;
113
+ message: string;
114
+ } | {
115
+ type: 'orphan_note';
116
+ severity: 'warning';
117
+ path: string;
118
+ message: string;
119
+ } | {
120
+ type: 'pending_candidates';
121
+ severity: 'info';
122
+ count: number;
123
+ message: string;
124
+ };
125
+ export type MemoryValidationResult = {
126
+ memoryRoot: string;
127
+ ok: boolean;
128
+ issueCount: number;
129
+ issues: MemoryValidationIssue[];
130
+ };
131
+ export type ListMemoryNotesInput = {
132
+ path?: string;
133
+ };
134
+ export type ReadMemoryNoteInput = {
135
+ path: string;
136
+ maxLines?: number;
137
+ offset?: number;
138
+ };
139
+ export type SearchMemoryNotesInput = {
140
+ query: string;
141
+ path?: string;
142
+ maxResults?: number;
143
+ };
144
+ export type MemoryMaintenanceLockRecord = {
145
+ id: string;
146
+ pid?: number;
147
+ acquiredAt: string;
148
+ };
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/memory/types.ts"],"names":[],"mappings":""}
@@ -1,39 +1,21 @@
1
- export type MemoryValidationIssue = {
2
- type: 'missing_catalog';
3
- severity: 'error';
4
- path: string;
5
- message: string;
6
- } | {
7
- type: 'oversized_catalog';
8
- severity: 'warning';
9
- path: string;
10
- sizeBytes: number;
11
- maxBytes: number;
12
- message: string;
13
- } | {
14
- type: 'orphan_note';
15
- severity: 'warning';
16
- path: string;
17
- message: string;
18
- } | {
19
- type: 'pending_candidates';
20
- severity: 'info';
21
- count: number;
22
- message: string;
23
- };
24
- export type MemoryValidationResult = {
25
- memoryRoot: string;
26
- ok: boolean;
27
- issueCount: number;
28
- issues: MemoryValidationIssue[];
29
- };
30
- export declare function validateMemoryWorkspace(options: {
31
- memoryRoot: string;
32
- }): Promise<MemoryValidationResult>;
33
- export declare function repairMissingMemoryCatalogs(options: {
34
- memoryRoot: string;
35
- }): Promise<{
36
- memoryRoot: string;
37
- createdPaths: string[];
38
- }>;
1
+ import { MemoryCatalogService } from './catalog.js';
2
+ import { MemoryMaintenanceRepository } from './maintenance-repository.js';
3
+ import { MemoryVisibilityService } from './visibility.js';
4
+ import type { MemoryValidationResult } from './types.js';
5
+ /**
6
+ * Owns memory workspace health checks and lightweight repair actions.
7
+ */
8
+ export declare class MemoryValidationService {
9
+ private readonly memoryRoot;
10
+ private readonly catalog;
11
+ private readonly visibility;
12
+ private readonly maintenance;
13
+ constructor(memoryRoot: string, catalog?: MemoryCatalogService, visibility?: MemoryVisibilityService, maintenance?: MemoryMaintenanceRepository);
14
+ validate(): Promise<MemoryValidationResult>;
15
+ repairMissingCatalogs(): import("./types.js").BootstrapMemoryWorkspaceResult;
16
+ private appendOversizedCatalogIssues;
17
+ private appendOrphanNoteIssues;
18
+ private static catalogPathForNote;
19
+ private static orphanNoteMessage;
20
+ }
39
21
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/validation.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,qBAAqB,GAC7B;IACA,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,GACC;IACA,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GACC;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,GACC;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEJ,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAiC9G;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAE1I"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,oBAAoB,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAyB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,UAAU,EAAE,MAAM,EAClB,OAAO,uBAAuC,EAC9C,UAAU,0BAA0C,EACpD,WAAW,8BAA8C;IAGtE,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAmCjD,qBAAqB;YAIP,4BAA4B;YAoB5B,sBAAsB;IA+BpC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAKjC,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAKjC"}