@tonycasey/lisa 2.12.0 → 2.25.2

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 (245) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/application/handlers/PromptSubmitHandler.js +2 -2
  3. package/dist/lib/application/handlers/PromptSubmitHandler.js.map +1 -1
  4. package/dist/lib/application/handlers/SessionStopHandler.d.ts.map +1 -1
  5. package/dist/lib/application/handlers/SessionStopHandler.js +12 -2
  6. package/dist/lib/application/handlers/SessionStopHandler.js.map +1 -1
  7. package/dist/lib/commands/init.js +3 -3
  8. package/dist/lib/commands/init.js.map +1 -1
  9. package/dist/lib/commands/knowledge.d.ts.map +1 -1
  10. package/dist/lib/commands/knowledge.js +449 -1
  11. package/dist/lib/commands/knowledge.js.map +1 -1
  12. package/dist/lib/domain/errors/LlmErrors.d.ts +41 -0
  13. package/dist/lib/domain/errors/LlmErrors.d.ts.map +1 -0
  14. package/dist/lib/domain/errors/LlmErrors.js +64 -0
  15. package/dist/lib/domain/errors/LlmErrors.js.map +1 -0
  16. package/dist/lib/domain/interfaces/IConsolidationService.d.ts +65 -0
  17. package/dist/lib/domain/interfaces/IConsolidationService.d.ts.map +1 -0
  18. package/dist/lib/domain/interfaces/IConsolidationService.js +21 -0
  19. package/dist/lib/domain/interfaces/IConsolidationService.js.map +1 -0
  20. package/dist/lib/domain/interfaces/ICurationService.d.ts +81 -0
  21. package/dist/lib/domain/interfaces/ICurationService.d.ts.map +1 -0
  22. package/dist/lib/domain/interfaces/ICurationService.js +65 -0
  23. package/dist/lib/domain/interfaces/ICurationService.js.map +1 -0
  24. package/dist/lib/domain/interfaces/IDeduplicationService.d.ts +67 -0
  25. package/dist/lib/domain/interfaces/IDeduplicationService.d.ts.map +1 -0
  26. package/dist/lib/domain/interfaces/IDeduplicationService.js +9 -0
  27. package/dist/lib/domain/interfaces/IDeduplicationService.js.map +1 -0
  28. package/dist/lib/domain/interfaces/ILlmConfigService.d.ts +36 -0
  29. package/dist/lib/domain/interfaces/ILlmConfigService.d.ts.map +1 -0
  30. package/dist/lib/domain/interfaces/ILlmConfigService.js +11 -0
  31. package/dist/lib/domain/interfaces/ILlmConfigService.js.map +1 -0
  32. package/dist/lib/domain/interfaces/ILlmGuard.d.ts +35 -0
  33. package/dist/lib/domain/interfaces/ILlmGuard.d.ts.map +1 -0
  34. package/dist/lib/domain/interfaces/ILlmGuard.js +12 -0
  35. package/dist/lib/domain/interfaces/ILlmGuard.js.map +1 -0
  36. package/dist/lib/domain/interfaces/ILlmService.d.ts +87 -0
  37. package/dist/lib/domain/interfaces/ILlmService.d.ts.map +1 -0
  38. package/dist/lib/domain/interfaces/ILlmService.js +40 -0
  39. package/dist/lib/domain/interfaces/ILlmService.js.map +1 -0
  40. package/dist/lib/domain/interfaces/ILlmUsageTracker.d.ts +60 -0
  41. package/dist/lib/domain/interfaces/ILlmUsageTracker.d.ts.map +1 -0
  42. package/dist/lib/domain/interfaces/ILlmUsageTracker.js +29 -0
  43. package/dist/lib/domain/interfaces/ILlmUsageTracker.js.map +1 -0
  44. package/dist/lib/domain/interfaces/IMemoryService.d.ts +90 -0
  45. package/dist/lib/domain/interfaces/IMemoryService.d.ts.map +1 -1
  46. package/dist/lib/domain/interfaces/INlCurationService.d.ts +75 -0
  47. package/dist/lib/domain/interfaces/INlCurationService.d.ts.map +1 -0
  48. package/dist/lib/domain/interfaces/INlCurationService.js +31 -0
  49. package/dist/lib/domain/interfaces/INlCurationService.js.map +1 -0
  50. package/dist/lib/domain/interfaces/IPreferenceStore.d.ts +46 -0
  51. package/dist/lib/domain/interfaces/IPreferenceStore.d.ts.map +1 -0
  52. package/dist/lib/domain/interfaces/IPreferenceStore.js +11 -0
  53. package/dist/lib/domain/interfaces/IPreferenceStore.js.map +1 -0
  54. package/dist/lib/domain/interfaces/IRecursionService.d.ts +10 -6
  55. package/dist/lib/domain/interfaces/IRecursionService.d.ts.map +1 -1
  56. package/dist/lib/domain/interfaces/ISummarizationService.d.ts +52 -0
  57. package/dist/lib/domain/interfaces/ISummarizationService.d.ts.map +1 -0
  58. package/dist/lib/domain/interfaces/ISummarizationService.js +11 -0
  59. package/dist/lib/domain/interfaces/ISummarizationService.js.map +1 -0
  60. package/dist/lib/domain/interfaces/ITaskTypeDetector.d.ts +34 -0
  61. package/dist/lib/domain/interfaces/ITaskTypeDetector.d.ts.map +1 -0
  62. package/dist/lib/domain/interfaces/ITaskTypeDetector.js +9 -0
  63. package/dist/lib/domain/interfaces/ITaskTypeDetector.js.map +1 -0
  64. package/dist/lib/domain/interfaces/ITranscriptEnricher.d.ts +68 -0
  65. package/dist/lib/domain/interfaces/ITranscriptEnricher.d.ts.map +1 -0
  66. package/dist/lib/domain/interfaces/ITranscriptEnricher.js +32 -0
  67. package/dist/lib/domain/interfaces/ITranscriptEnricher.js.map +1 -0
  68. package/dist/lib/domain/interfaces/IWorkSummary.d.ts +64 -0
  69. package/dist/lib/domain/interfaces/IWorkSummary.d.ts.map +1 -0
  70. package/dist/lib/domain/interfaces/IWorkSummary.js +13 -0
  71. package/dist/lib/domain/interfaces/IWorkSummary.js.map +1 -0
  72. package/dist/lib/domain/interfaces/dal/IMemoryRelationshipRepository.d.ts +46 -0
  73. package/dist/lib/domain/interfaces/dal/IMemoryRelationshipRepository.d.ts.map +1 -0
  74. package/dist/lib/domain/interfaces/dal/IMemoryRelationshipRepository.js +9 -0
  75. package/dist/lib/domain/interfaces/dal/IMemoryRelationshipRepository.js.map +1 -0
  76. package/dist/lib/domain/interfaces/dal/IMemoryRepository.d.ts +62 -1
  77. package/dist/lib/domain/interfaces/dal/IMemoryRepository.d.ts.map +1 -1
  78. package/dist/lib/domain/interfaces/dal/index.d.ts +3 -2
  79. package/dist/lib/domain/interfaces/dal/index.d.ts.map +1 -1
  80. package/dist/lib/domain/interfaces/dal/index.js.map +1 -1
  81. package/dist/lib/domain/interfaces/dal/types.d.ts +37 -0
  82. package/dist/lib/domain/interfaces/dal/types.d.ts.map +1 -1
  83. package/dist/lib/domain/interfaces/dal/types.js.map +1 -1
  84. package/dist/lib/domain/interfaces/index.d.ts +15 -1
  85. package/dist/lib/domain/interfaces/index.d.ts.map +1 -1
  86. package/dist/lib/domain/interfaces/index.js +21 -1
  87. package/dist/lib/domain/interfaces/index.js.map +1 -1
  88. package/dist/lib/domain/interfaces/types/ICapturedWork.d.ts +3 -0
  89. package/dist/lib/domain/interfaces/types/ICapturedWork.d.ts.map +1 -1
  90. package/dist/lib/domain/interfaces/types/ICapturedWork.js.map +1 -1
  91. package/dist/lib/domain/interfaces/types/IMemoryLifecycle.d.ts +56 -0
  92. package/dist/lib/domain/interfaces/types/IMemoryLifecycle.d.ts.map +1 -0
  93. package/dist/lib/domain/interfaces/types/IMemoryLifecycle.js +94 -0
  94. package/dist/lib/domain/interfaces/types/IMemoryLifecycle.js.map +1 -0
  95. package/dist/lib/domain/interfaces/types/IMemoryQuality.d.ts +113 -0
  96. package/dist/lib/domain/interfaces/types/IMemoryQuality.d.ts.map +1 -0
  97. package/dist/lib/domain/interfaces/types/IMemoryQuality.js +195 -0
  98. package/dist/lib/domain/interfaces/types/IMemoryQuality.js.map +1 -0
  99. package/dist/lib/domain/interfaces/types/IMemoryRelationship.d.ts +49 -0
  100. package/dist/lib/domain/interfaces/types/IMemoryRelationship.d.ts.map +1 -0
  101. package/dist/lib/domain/interfaces/types/IMemoryRelationship.js +62 -0
  102. package/dist/lib/domain/interfaces/types/IMemoryRelationship.js.map +1 -0
  103. package/dist/lib/domain/interfaces/types/ITaskType.d.ts +59 -0
  104. package/dist/lib/domain/interfaces/types/ITaskType.d.ts.map +1 -0
  105. package/dist/lib/domain/interfaces/types/ITaskType.js +104 -0
  106. package/dist/lib/domain/interfaces/types/ITaskType.js.map +1 -0
  107. package/dist/lib/domain/interfaces/types/index.d.ts +4 -0
  108. package/dist/lib/domain/interfaces/types/index.d.ts.map +1 -1
  109. package/dist/lib/domain/interfaces/types/index.js +33 -1
  110. package/dist/lib/domain/interfaces/types/index.js.map +1 -1
  111. package/dist/lib/domain/utils/deduplication.d.ts +38 -0
  112. package/dist/lib/domain/utils/deduplication.d.ts.map +1 -0
  113. package/dist/lib/domain/utils/deduplication.js +225 -0
  114. package/dist/lib/domain/utils/deduplication.js.map +1 -0
  115. package/dist/lib/domain/utils/index.d.ts +1 -0
  116. package/dist/lib/domain/utils/index.d.ts.map +1 -1
  117. package/dist/lib/domain/utils/index.js +6 -1
  118. package/dist/lib/domain/utils/index.js.map +1 -1
  119. package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.d.ts +12 -2
  120. package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.d.ts.map +1 -1
  121. package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.js +14 -0
  122. package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.js.map +1 -1
  123. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.d.ts +25 -3
  124. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.d.ts.map +1 -1
  125. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.js +156 -1
  126. package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.js.map +1 -1
  127. package/dist/lib/infrastructure/di/bootstrap.d.ts.map +1 -1
  128. package/dist/lib/infrastructure/di/bootstrap.js +92 -2
  129. package/dist/lib/infrastructure/di/bootstrap.js.map +1 -1
  130. package/dist/lib/infrastructure/di/tokens.d.ts +24 -0
  131. package/dist/lib/infrastructure/di/tokens.d.ts.map +1 -1
  132. package/dist/lib/infrastructure/di/tokens.js +12 -0
  133. package/dist/lib/infrastructure/di/tokens.js.map +1 -1
  134. package/dist/lib/infrastructure/services/ConsolidationService.d.ts +21 -0
  135. package/dist/lib/infrastructure/services/ConsolidationService.d.ts.map +1 -0
  136. package/dist/lib/infrastructure/services/ConsolidationService.js +134 -0
  137. package/dist/lib/infrastructure/services/ConsolidationService.js.map +1 -0
  138. package/dist/lib/infrastructure/services/CurationService.d.ts +28 -0
  139. package/dist/lib/infrastructure/services/CurationService.d.ts.map +1 -0
  140. package/dist/lib/infrastructure/services/CurationService.js +112 -0
  141. package/dist/lib/infrastructure/services/CurationService.js.map +1 -0
  142. package/dist/lib/infrastructure/services/DeduplicationService.d.ts +21 -0
  143. package/dist/lib/infrastructure/services/DeduplicationService.d.ts.map +1 -0
  144. package/dist/lib/infrastructure/services/DeduplicationService.js +111 -0
  145. package/dist/lib/infrastructure/services/DeduplicationService.js.map +1 -0
  146. package/dist/lib/infrastructure/services/LlmConfigService.d.ts +19 -0
  147. package/dist/lib/infrastructure/services/LlmConfigService.d.ts.map +1 -0
  148. package/dist/lib/infrastructure/services/LlmConfigService.js +161 -0
  149. package/dist/lib/infrastructure/services/LlmConfigService.js.map +1 -0
  150. package/dist/lib/infrastructure/services/LlmDeduplicationEnhancer.d.ts +47 -0
  151. package/dist/lib/infrastructure/services/LlmDeduplicationEnhancer.d.ts.map +1 -0
  152. package/dist/lib/infrastructure/services/LlmDeduplicationEnhancer.js +176 -0
  153. package/dist/lib/infrastructure/services/LlmDeduplicationEnhancer.js.map +1 -0
  154. package/dist/lib/infrastructure/services/LlmGuard.d.ts +29 -0
  155. package/dist/lib/infrastructure/services/LlmGuard.d.ts.map +1 -0
  156. package/dist/lib/infrastructure/services/LlmGuard.js +92 -0
  157. package/dist/lib/infrastructure/services/LlmGuard.js.map +1 -0
  158. package/dist/lib/infrastructure/services/LlmService.d.ts +19 -0
  159. package/dist/lib/infrastructure/services/LlmService.d.ts.map +1 -0
  160. package/dist/lib/infrastructure/services/LlmService.js +253 -0
  161. package/dist/lib/infrastructure/services/LlmService.js.map +1 -0
  162. package/dist/lib/infrastructure/services/LlmUsageTracker.d.ts +25 -0
  163. package/dist/lib/infrastructure/services/LlmUsageTracker.d.ts.map +1 -0
  164. package/dist/lib/infrastructure/services/LlmUsageTracker.js +130 -0
  165. package/dist/lib/infrastructure/services/LlmUsageTracker.js.map +1 -0
  166. package/dist/lib/infrastructure/services/MemoryService.d.ts +29 -2
  167. package/dist/lib/infrastructure/services/MemoryService.d.ts.map +1 -1
  168. package/dist/lib/infrastructure/services/MemoryService.js +93 -0
  169. package/dist/lib/infrastructure/services/MemoryService.js.map +1 -1
  170. package/dist/lib/infrastructure/services/NlCurationService.d.ts +29 -0
  171. package/dist/lib/infrastructure/services/NlCurationService.d.ts.map +1 -0
  172. package/dist/lib/infrastructure/services/NlCurationService.js +276 -0
  173. package/dist/lib/infrastructure/services/NlCurationService.js.map +1 -0
  174. package/dist/lib/infrastructure/services/PreferenceStore.d.ts +19 -0
  175. package/dist/lib/infrastructure/services/PreferenceStore.d.ts.map +1 -0
  176. package/dist/lib/infrastructure/services/PreferenceStore.js +109 -0
  177. package/dist/lib/infrastructure/services/PreferenceStore.js.map +1 -0
  178. package/dist/lib/infrastructure/services/SessionCaptureService.d.ts +60 -19
  179. package/dist/lib/infrastructure/services/SessionCaptureService.d.ts.map +1 -1
  180. package/dist/lib/infrastructure/services/SessionCaptureService.js +474 -51
  181. package/dist/lib/infrastructure/services/SessionCaptureService.js.map +1 -1
  182. package/dist/lib/infrastructure/services/SummarizationService.d.ts +21 -0
  183. package/dist/lib/infrastructure/services/SummarizationService.d.ts.map +1 -0
  184. package/dist/lib/infrastructure/services/SummarizationService.js +132 -0
  185. package/dist/lib/infrastructure/services/SummarizationService.js.map +1 -0
  186. package/dist/lib/infrastructure/services/TranscriptEnricher.d.ts +23 -0
  187. package/dist/lib/infrastructure/services/TranscriptEnricher.d.ts.map +1 -0
  188. package/dist/lib/infrastructure/services/TranscriptEnricher.js +170 -0
  189. package/dist/lib/infrastructure/services/TranscriptEnricher.js.map +1 -0
  190. package/dist/lib/infrastructure/services/index.d.ts +12 -0
  191. package/dist/lib/infrastructure/services/index.d.ts.map +1 -1
  192. package/dist/lib/infrastructure/services/index.js +31 -1
  193. package/dist/lib/infrastructure/services/index.js.map +1 -1
  194. package/dist/lib/infrastructure/services/prompts/curation.d.ts +22 -0
  195. package/dist/lib/infrastructure/services/prompts/curation.d.ts.map +1 -0
  196. package/dist/lib/infrastructure/services/prompts/curation.js +73 -0
  197. package/dist/lib/infrastructure/services/prompts/curation.js.map +1 -0
  198. package/dist/lib/infrastructure/services/prompts/deduplication.d.ts +31 -0
  199. package/dist/lib/infrastructure/services/prompts/deduplication.d.ts.map +1 -0
  200. package/dist/lib/infrastructure/services/prompts/deduplication.js +52 -0
  201. package/dist/lib/infrastructure/services/prompts/deduplication.js.map +1 -0
  202. package/dist/lib/infrastructure/services/prompts/extraction.d.ts +27 -0
  203. package/dist/lib/infrastructure/services/prompts/extraction.d.ts.map +1 -0
  204. package/dist/lib/infrastructure/services/prompts/extraction.js +94 -0
  205. package/dist/lib/infrastructure/services/prompts/extraction.js.map +1 -0
  206. package/dist/lib/infrastructure/services/prompts/summarization.d.ts +25 -0
  207. package/dist/lib/infrastructure/services/prompts/summarization.d.ts.map +1 -0
  208. package/dist/lib/infrastructure/services/prompts/summarization.js +60 -0
  209. package/dist/lib/infrastructure/services/prompts/summarization.js.map +1 -0
  210. package/dist/lib/skills/common/type-mappings.d.ts.map +1 -1
  211. package/dist/lib/skills/common/type-mappings.js +5 -0
  212. package/dist/lib/skills/common/type-mappings.js.map +1 -1
  213. package/dist/lib/skills/memory/memory.d.ts +8 -2
  214. package/dist/lib/skills/memory/memory.d.ts.map +1 -1
  215. package/dist/lib/skills/memory/memory.js +27 -3
  216. package/dist/lib/skills/memory/memory.js.map +1 -1
  217. package/dist/lib/skills/shared/clients/Neo4jClient.d.ts.map +1 -1
  218. package/dist/lib/skills/shared/clients/Neo4jClient.js +75 -30
  219. package/dist/lib/skills/shared/clients/Neo4jClient.js.map +1 -1
  220. package/dist/lib/skills/shared/clients/interfaces/INeo4jClient.d.ts +16 -0
  221. package/dist/lib/skills/shared/clients/interfaces/INeo4jClient.d.ts.map +1 -1
  222. package/dist/lib/skills/shared/services/MemoryCliService.d.ts +28 -2
  223. package/dist/lib/skills/shared/services/MemoryCliService.d.ts.map +1 -1
  224. package/dist/lib/skills/shared/services/MemoryCliService.js +112 -5
  225. package/dist/lib/skills/shared/services/MemoryCliService.js.map +1 -1
  226. package/dist/lib/skills/shared/services/MemoryService.d.ts.map +1 -1
  227. package/dist/lib/skills/shared/services/MemoryService.js +410 -1
  228. package/dist/lib/skills/shared/services/MemoryService.js.map +1 -1
  229. package/dist/lib/skills/shared/services/index.d.ts +1 -1
  230. package/dist/lib/skills/shared/services/index.d.ts.map +1 -1
  231. package/dist/lib/skills/shared/services/index.js +2 -1
  232. package/dist/lib/skills/shared/services/index.js.map +1 -1
  233. package/dist/lib/skills/shared/services/interfaces/IMemoryService.d.ts +148 -0
  234. package/dist/lib/skills/shared/services/interfaces/IMemoryService.d.ts.map +1 -1
  235. package/dist/lib/skills/shared/services/interfaces/IMemoryService.js +0 -4
  236. package/dist/lib/skills/shared/services/interfaces/IMemoryService.js.map +1 -1
  237. package/dist/opencode/lisa.js +3904 -507
  238. package/dist/package.json +16 -16
  239. package/dist/project/.lisa/skills/git/SKILL.md +4 -13
  240. package/dist/project/.lisa/skills/init-review/SKILL.md +1 -1
  241. package/dist/project/.lisa/skills/jira/SKILL.md +1 -1
  242. package/dist/project/.lisa/skills/lisa/SKILL.md +1 -1
  243. package/dist/project/.lisa/skills/memory/SKILL.md +1 -2
  244. package/dist/project/.lisa/skills/tasks/SKILL.md +3 -4
  245. package/package.json +1 -1
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ /**
3
+ * Natural Language Curation Service.
4
+ *
5
+ * Translates natural language memory management commands into
6
+ * structured operations via LLM intent classification.
7
+ * Supports plan-then-execute workflow with confirmation for
8
+ * destructive actions.
9
+ *
10
+ * Part of Phase 6E: Natural Language Curation.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.createNlCurationService = createNlCurationService;
14
+ const ICurationService_1 = require("../../domain/interfaces/ICurationService");
15
+ const INlCurationService_1 = require("../../domain/interfaces/INlCurationService");
16
+ const curation_1 = require("./prompts/curation");
17
+ /**
18
+ * Create a Natural Language Curation Service.
19
+ *
20
+ * @param llmGuard - LLM guard for policy-enforced completions
21
+ * @param memoryService - Memory service for search and expire operations
22
+ * @param curationService - Curation service for mark operations
23
+ * @param consolidationService - Consolidation service for merge operations
24
+ * @param summarizationService - Summarization service for summary operations
25
+ * @param logger - Optional logger
26
+ */
27
+ function createNlCurationService(llmGuard, memoryService, curationService, consolidationService, summarizationService, logger) {
28
+ return {
29
+ async plan(input, _groupId) {
30
+ const prompt = (0, curation_1.buildCurationPrompt)(input);
31
+ const response = await llmGuard.complete(prompt.user, 'curation', {
32
+ systemPrompt: prompt.system,
33
+ temperature: 0.2,
34
+ maxTokens: 1024,
35
+ });
36
+ const parsed = parsePlanResponse(response.text, logger);
37
+ return {
38
+ intent: parsed.intent,
39
+ description: parsed.description,
40
+ isDestructive: parsed.isDestructive,
41
+ operations: parsed.operations,
42
+ usage: response.usage,
43
+ };
44
+ },
45
+ async execute(plan, groupId) {
46
+ const outputParts = [];
47
+ for (const operation of plan.operations) {
48
+ try {
49
+ const result = await executeOperation(operation, groupId, memoryService, curationService, consolidationService, summarizationService, logger);
50
+ outputParts.push(result);
51
+ }
52
+ catch (error) {
53
+ const msg = error instanceof Error ? error.message : String(error);
54
+ logger?.warn('NL curation operation failed', {
55
+ type: operation.type,
56
+ error: msg,
57
+ });
58
+ outputParts.push(`Failed: ${operation.description} — ${msg}`);
59
+ }
60
+ }
61
+ return {
62
+ plan,
63
+ executed: true,
64
+ output: outputParts.join('\n\n'),
65
+ usage: plan.usage,
66
+ };
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Parse the LLM plan response into a structured plan.
72
+ */
73
+ function parsePlanResponse(responseText, logger) {
74
+ const jsonText = extractJson(responseText);
75
+ if (!jsonText) {
76
+ logger?.debug('Failed to extract JSON from NL curation response');
77
+ return fallbackPlan();
78
+ }
79
+ let parsed;
80
+ try {
81
+ parsed = JSON.parse(jsonText);
82
+ }
83
+ catch {
84
+ logger?.debug('Failed to parse NL curation response as JSON');
85
+ return fallbackPlan();
86
+ }
87
+ if (typeof parsed !== 'object' || parsed === null)
88
+ return fallbackPlan();
89
+ const obj = parsed;
90
+ // Validate intent
91
+ const rawIntent = typeof obj.intent === 'string' ? obj.intent : '';
92
+ const intent = (0, INlCurationService_1.isValidNlCurationIntent)(rawIntent) ? rawIntent : 'query';
93
+ // Extract description
94
+ const description = typeof obj.description === 'string' && obj.description.trim().length > 0
95
+ ? obj.description.trim()
96
+ : 'Execute memory operation';
97
+ // Extract operations
98
+ const rawOps = Array.isArray(obj.operations) ? obj.operations : [];
99
+ const operations = [];
100
+ for (const raw of rawOps) {
101
+ if (typeof raw !== 'object' || raw === null)
102
+ continue;
103
+ const opObj = raw;
104
+ const type = typeof opObj.type === 'string' ? opObj.type : '';
105
+ if (!['search', 'mark', 'expire', 'summarize', 'consolidate'].includes(type))
106
+ continue;
107
+ const params = typeof opObj.params === 'object' && opObj.params !== null
108
+ ? opObj.params
109
+ : {};
110
+ const opDesc = typeof opObj.description === 'string'
111
+ ? opObj.description
112
+ : `Perform ${type} operation`;
113
+ operations.push({
114
+ type: type,
115
+ params,
116
+ description: opDesc,
117
+ });
118
+ }
119
+ // Ensure at least one operation
120
+ if (operations.length === 0) {
121
+ operations.push({
122
+ type: 'search',
123
+ params: { query: description, limit: 10 },
124
+ description: `Search for relevant facts`,
125
+ });
126
+ }
127
+ // Compute isDestructive: OR the LLM flag with intent and operation types.
128
+ // Destructive intents (expire, consolidate) must always be flagged,
129
+ // even if the LLM incorrectly returns isDestructive: false.
130
+ const hasDestructiveOp = operations.some((op) => op.type === 'expire' || op.type === 'consolidate');
131
+ const llmFlag = typeof obj.isDestructive === 'boolean' ? obj.isDestructive : false;
132
+ const isDestructive = llmFlag
133
+ || intent === 'expire' || intent === 'consolidate'
134
+ || hasDestructiveOp;
135
+ return { intent, description, isDestructive, operations };
136
+ }
137
+ /**
138
+ * Fallback plan when LLM response is unparseable.
139
+ */
140
+ function fallbackPlan() {
141
+ return {
142
+ intent: 'query',
143
+ description: 'Search for relevant memories',
144
+ isDestructive: false,
145
+ operations: [{
146
+ type: 'search',
147
+ params: { query: '', limit: 10 },
148
+ description: 'Search for recent facts',
149
+ }],
150
+ };
151
+ }
152
+ /**
153
+ * Execute a single operation within a curation plan.
154
+ */
155
+ async function executeOperation(operation, groupId, memoryService, curationService, consolidationService, summarizationService, logger) {
156
+ switch (operation.type) {
157
+ case 'search': {
158
+ const query = typeof operation.params.query === 'string'
159
+ ? operation.params.query
160
+ : '';
161
+ const limit = typeof operation.params.limit === 'number'
162
+ ? operation.params.limit
163
+ : 10;
164
+ const facts = await memoryService.searchFacts([groupId], query, limit);
165
+ if (facts.length === 0) {
166
+ return `No facts found matching "${query}".`;
167
+ }
168
+ const lines = facts.map((f, i) => `${i + 1}. [${f.uuid ?? 'no-uuid'}] ${f.fact ?? '(no text)'}`);
169
+ return `Found ${facts.length} fact(s):\n${lines.join('\n')}`;
170
+ }
171
+ case 'mark': {
172
+ const query = typeof operation.params.query === 'string'
173
+ ? operation.params.query
174
+ : '';
175
+ const mark = typeof operation.params.mark === 'string'
176
+ ? operation.params.mark
177
+ : '';
178
+ if (!(0, ICurationService_1.isValidCurationMark)(mark)) {
179
+ return `Invalid curation mark: "${mark}". Valid marks: authoritative, draft, deprecated, needs-review.`;
180
+ }
181
+ const facts = await memoryService.searchFacts([groupId], query, 5);
182
+ if (facts.length === 0) {
183
+ return `No facts found matching "${query}" to mark as ${mark}.`;
184
+ }
185
+ let marked = 0;
186
+ for (const fact of facts) {
187
+ if (!fact.uuid)
188
+ continue;
189
+ try {
190
+ await curationService.markFact(groupId, fact.uuid, mark);
191
+ marked++;
192
+ }
193
+ catch (error) {
194
+ logger?.debug('Failed to mark fact', {
195
+ uuid: fact.uuid,
196
+ error: error instanceof Error ? error.message : String(error),
197
+ });
198
+ }
199
+ }
200
+ return `Marked ${marked} fact(s) as ${mark}.`;
201
+ }
202
+ case 'expire': {
203
+ const query = typeof operation.params.query === 'string'
204
+ ? operation.params.query
205
+ : '';
206
+ const facts = await memoryService.searchFacts([groupId], query, 20);
207
+ if (facts.length === 0) {
208
+ return `No facts found matching "${query}" to expire.`;
209
+ }
210
+ let expired = 0;
211
+ for (const fact of facts) {
212
+ if (!fact.uuid)
213
+ continue;
214
+ try {
215
+ await memoryService.expireFact(groupId, fact.uuid);
216
+ expired++;
217
+ }
218
+ catch (error) {
219
+ logger?.debug('Failed to expire fact', {
220
+ uuid: fact.uuid,
221
+ error: error instanceof Error ? error.message : String(error),
222
+ });
223
+ }
224
+ }
225
+ return `Expired ${expired} fact(s) matching "${query}".`;
226
+ }
227
+ case 'summarize': {
228
+ const topic = typeof operation.params.topic === 'string'
229
+ ? operation.params.topic
230
+ : undefined;
231
+ const style = operation.params.style === 'detailed' ? 'detailed' : 'concise';
232
+ const result = await summarizationService.summarize(groupId, {
233
+ topic,
234
+ style,
235
+ });
236
+ return result.summary;
237
+ }
238
+ case 'consolidate': {
239
+ const query = typeof operation.params.query === 'string'
240
+ ? operation.params.query
241
+ : '';
242
+ const facts = await memoryService.searchFacts([groupId], query, 10);
243
+ const uuids = facts.filter(f => f.uuid).map(f => f.uuid);
244
+ if (uuids.length < 2) {
245
+ return `Not enough facts found matching "${query}" to consolidate (need at least 2).`;
246
+ }
247
+ const result = await consolidationService.consolidate(groupId, uuids, 'archive-duplicates');
248
+ return `Consolidated ${uuids.length} facts: retained ${result.retainedUuid}, archived ${result.archivedUuids.length}.`;
249
+ }
250
+ default:
251
+ return `Unknown operation type: ${operation.type}`;
252
+ }
253
+ }
254
+ /**
255
+ * Extract JSON from LLM response text.
256
+ * Uses progressive try-parse from each '{' position.
257
+ */
258
+ function extractJson(text) {
259
+ const trimmed = text.trim();
260
+ let start = trimmed.indexOf('{');
261
+ while (start !== -1) {
262
+ for (let end = trimmed.lastIndexOf('}'); end > start; end = trimmed.lastIndexOf('}', end - 1)) {
263
+ const candidate = trimmed.slice(start, end + 1);
264
+ try {
265
+ JSON.parse(candidate);
266
+ return candidate;
267
+ }
268
+ catch {
269
+ // Try shorter substring
270
+ }
271
+ }
272
+ start = trimmed.indexOf('{', start + 1);
273
+ }
274
+ return null;
275
+ }
276
+ //# sourceMappingURL=NlCurationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NlCurationService.js","sourceRoot":"","sources":["../../../../src/lib/infrastructure/services/NlCurationService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Preference Store Implementation.
3
+ *
4
+ * File-based JSON storage of user preferences in `.lisa/preferences.json`.
5
+ * Reads the full file on every operation (no in-memory cache — simple, correct).
6
+ *
7
+ * Part of Phase 5D: Preference Key-Value Store.
8
+ */
9
+ import type { IPreferenceStore } from '../../domain/interfaces/IPreferenceStore';
10
+ /**
11
+ * Create a file-based PreferenceStore.
12
+ *
13
+ * @param projectRoot - Project root directory (location of `.lisa/`)
14
+ * @param logger - Optional logger for warnings (invalid JSON, etc.)
15
+ */
16
+ export declare function createPreferenceStore(projectRoot: string, logger?: {
17
+ warn: (msg: string, ctx?: Record<string, unknown>) => void;
18
+ }): IPreferenceStore;
19
+ //# sourceMappingURL=PreferenceStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreferenceStore.d.ts","sourceRoot":"","sources":["../../../../src/lib/infrastructure/services/PreferenceStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,0CAA0C,CAAC;AAc9F;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,GACtE,gBAAgB,CAqFlB"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Preference Store Implementation.
4
+ *
5
+ * File-based JSON storage of user preferences in `.lisa/preferences.json`.
6
+ * Reads the full file on every operation (no in-memory cache — simple, correct).
7
+ *
8
+ * Part of Phase 5D: Preference Key-Value Store.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.createPreferenceStore = createPreferenceStore;
15
+ const node_fs_1 = __importDefault(require("node:fs"));
16
+ const promises_1 = __importDefault(require("node:fs/promises"));
17
+ const node_path_1 = __importDefault(require("node:path"));
18
+ const PREFERENCES_FILE = '.lisa/preferences.json';
19
+ /**
20
+ * Create a file-based PreferenceStore.
21
+ *
22
+ * @param projectRoot - Project root directory (location of `.lisa/`)
23
+ * @param logger - Optional logger for warnings (invalid JSON, etc.)
24
+ */
25
+ function createPreferenceStore(projectRoot, logger) {
26
+ const filePath = node_path_1.default.join(projectRoot, PREFERENCES_FILE);
27
+ /**
28
+ * Read the preferences file. Returns empty object on missing/invalid file.
29
+ */
30
+ async function readStore() {
31
+ try {
32
+ const content = await promises_1.default.readFile(filePath, 'utf-8');
33
+ const parsed = JSON.parse(content);
34
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
35
+ logger?.warn('Invalid preferences.json structure, resetting to empty store', { filePath });
36
+ await writeStore({});
37
+ return {};
38
+ }
39
+ return parsed;
40
+ }
41
+ catch (err) {
42
+ if (err instanceof SyntaxError) {
43
+ logger?.warn('Invalid JSON in preferences.json, resetting to empty store', { filePath });
44
+ await writeStore({});
45
+ return {};
46
+ }
47
+ // ENOENT (file not found) — empty store, no error
48
+ if (err.code === 'ENOENT') {
49
+ return {};
50
+ }
51
+ // Other I/O errors (permissions, etc.) — surface them
52
+ throw err;
53
+ }
54
+ }
55
+ /**
56
+ * Write the preferences file. Creates `.lisa/` directory if needed.
57
+ */
58
+ async function writeStore(data) {
59
+ const dir = node_path_1.default.dirname(filePath);
60
+ if (!node_fs_1.default.existsSync(dir)) {
61
+ await promises_1.default.mkdir(dir, { recursive: true });
62
+ }
63
+ await promises_1.default.writeFile(filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
64
+ }
65
+ return {
66
+ async get(key) {
67
+ const data = await readStore();
68
+ const entry = data[key];
69
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
70
+ return null;
71
+ const value = entry.value;
72
+ return typeof value === 'string' ? value : null;
73
+ },
74
+ async set(key, value) {
75
+ const data = await readStore();
76
+ data[key] = {
77
+ value,
78
+ updatedAt: new Date().toISOString(),
79
+ };
80
+ await writeStore(data);
81
+ },
82
+ async delete(key) {
83
+ const data = await readStore();
84
+ if (!(key in data))
85
+ return false;
86
+ delete data[key];
87
+ await writeStore(data);
88
+ return true;
89
+ },
90
+ async list() {
91
+ const data = await readStore();
92
+ return Object.entries(data).flatMap(([key, raw]) => {
93
+ const entry = raw;
94
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
95
+ return [];
96
+ const value = entry.value;
97
+ const updatedAt = entry.updatedAt;
98
+ if (typeof value !== 'string' || typeof updatedAt !== 'string')
99
+ return [];
100
+ return [{ key, value, updatedAt }];
101
+ });
102
+ },
103
+ async has(key) {
104
+ const data = await readStore();
105
+ return key in data;
106
+ },
107
+ };
108
+ }
109
+ //# sourceMappingURL=PreferenceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreferenceStore.js","sourceRoot":"","sources":["../../../../src/lib/infrastructure/services/PreferenceStore.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,7 @@
1
1
  import type { ISessionCaptureService, ICapturedWork, ILogger } from '../../domain';
2
- /**
3
- * Parsed work summary from transcript.
4
- */
5
- export interface IWorkSummary {
6
- messageCount: number;
7
- userPrompts: number;
8
- assistantResponses: number;
9
- toolCalls: number;
10
- filesCreated: string[];
11
- filesModified: string[];
12
- duration: number;
13
- summary: string;
14
- }
2
+ import type { ITranscriptEnricher } from '../../domain/interfaces/ITranscriptEnricher';
3
+ import type { IWorkSummary } from '../../domain/interfaces/IWorkSummary';
4
+ export type { IWorkSummary } from '../../domain/interfaces/IWorkSummary';
15
5
  /**
16
6
  * Service for capturing session work from Claude Code transcripts.
17
7
  *
@@ -20,7 +10,8 @@ export interface IWorkSummary {
20
10
  */
21
11
  export declare class SessionCaptureService implements ISessionCaptureService {
22
12
  private readonly logger?;
23
- constructor(logger?: ILogger);
13
+ private readonly transcriptEnricher?;
14
+ constructor(logger?: ILogger, transcriptEnricher?: ITranscriptEnricher);
24
15
  /**
25
16
  * Capture work from the current session.
26
17
  *
@@ -50,15 +41,17 @@ export declare class SessionCaptureService implements ISessionCaptureService {
50
41
  /**
51
42
  * Find all transcript candidates from standard Claude Code locations.
52
43
  *
53
- * Searches:
54
- * - ~/.claude/projects/<project>/transcript.jsonl
55
- * - ~/.claude/transcript.jsonl
44
+ * Claude Code stores session transcripts as UUID-named JSONL files:
45
+ * ~/.claude/projects/<project-folder>/<session-uuid>.jsonl
46
+ *
47
+ * The project folder is derived from the working directory path with
48
+ * path separators replaced by dashes (e.g. C:\dev\lisa → C--dev-lisa).
56
49
  *
57
50
  * @returns Array of candidates with path and modification time
58
51
  */
59
52
  private findTranscriptCandidates;
60
53
  /**
61
- * Parse transcript file to extract work summary.
54
+ * Parse transcript file to extract work summary including heuristic detections.
62
55
  */
63
56
  parseTranscript(transcriptPath: string): IWorkSummary;
64
57
  /**
@@ -66,13 +59,61 @@ export declare class SessionCaptureService implements ISessionCaptureService {
66
59
  */
67
60
  hasSignificantWork(work: IWorkSummary): boolean;
68
61
  /**
69
- * Build facts from work summary.
62
+ * Build facts from work summary including heuristic-detected facts.
70
63
  */
71
64
  buildFacts(work: IWorkSummary, sessionId?: string): string[];
72
65
  /**
73
66
  * Rate the complexity of work performed.
74
67
  */
75
68
  rateComplexity(work: IWorkSummary): ICapturedWork['complexity'];
69
+ /**
70
+ * Detect user decisions from confirmation patterns.
71
+ *
72
+ * Scans for user messages matching confirmation patterns (yes, ok, sounds good, etc.)
73
+ * preceded by assistant messages that present options or recommendations.
74
+ */
75
+ private detectDecisions;
76
+ /**
77
+ * Detect errors from stack traces, error types, tool failures, and retry patterns.
78
+ */
79
+ private detectErrors;
80
+ /**
81
+ * Correlate file changes with preceding user prompts.
82
+ *
83
+ * For each changed file, find preceding user prompt (within 3-message window)
84
+ * whose text mentions the file name or related keywords.
85
+ */
86
+ private correlateFilePrompts;
87
+ /**
88
+ * Detect the dominant task type from user prompts using DETECTION_SIGNALS.
89
+ */
90
+ private detectTaskType;
91
+ /**
92
+ * Extract text content from a transcript message.
93
+ */
94
+ private extractMessageText;
95
+ /**
96
+ * Extract tool name from a transcript message.
97
+ */
98
+ private extractToolName;
99
+ /**
100
+ * Check if a tool_result message indicates an error.
101
+ */
102
+ private extractToolError;
103
+ /**
104
+ * Extract the first Error: line from text containing a stack trace.
105
+ */
106
+ private extractErrorLine;
107
+ /**
108
+ * Extract a decision topic from an assistant's message.
109
+ * Takes the first sentence or first 120 characters.
110
+ */
111
+ private extractDecisionTopic;
112
+ /**
113
+ * Extract a snippet of conversation text from the transcript for LLM analysis.
114
+ * Concatenates user and assistant text content, truncated to a reasonable length.
115
+ */
116
+ private getTranscriptSnippet;
76
117
  /**
77
118
  * Detect repository name from git.
78
119
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionCaptureService.d.ts","sourceRoot":"","sources":["../../../../src/lib/infrastructure/services/SessionCaptureService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAenF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;gBAEtB,MAAM,CAAC,EAAE,OAAO;IAI5B;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmC7F;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2CpD;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAqDhC;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY;IA+DrD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAyB/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAsC5D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IAgB/D;;OAEG;IACH,UAAU,IAAI,MAAM;IAapB;;OAEG;IACH,OAAO,CAAC,cAAc;CAcvB"}
1
+ {"version":3,"file":"SessionCaptureService.d.ts","sourceRoot":"","sources":["../../../../src/lib/infrastructure/services/SessionCaptureService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAA6D,MAAM,sCAAsC,CAAC;AAKpI,YAAY,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AA4DzE;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAsB;gBAE9C,MAAM,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,mBAAmB;IAKtE;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkE7F;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2CpD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,wBAAwB;IA+EhC;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY;IAuFrD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAyB/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IA2D5D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IAoB/D;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAyEpB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAyD5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,UAAU,IAAI,MAAM;IAapB;;OAEG;IACH,OAAO,CAAC,cAAc;CAcvB"}