@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,60 @@
1
+ /**
2
+ * LLM Usage Tracker Interface.
3
+ *
4
+ * Tracks token usage and estimated cost per LLM operation.
5
+ * Supports monthly budget enforcement and per-feature tracking.
6
+ *
7
+ * Part of Phase 6B: Cost/Privacy Controls.
8
+ */
9
+ import type { LlmProvider } from './ILlmService';
10
+ /**
11
+ * LLM feature identifiers for per-feature tracking and toggles.
12
+ */
13
+ export type LlmFeature = 'summarization' | 'extraction' | 'deduplication' | 'curation' | 'test';
14
+ /**
15
+ * All valid LLM feature values.
16
+ */
17
+ export declare const LLM_FEATURE_VALUES: readonly LlmFeature[];
18
+ /**
19
+ * Type guard for LlmFeature.
20
+ */
21
+ export declare function isValidLlmFeature(value: string): value is LlmFeature;
22
+ /**
23
+ * A single LLM usage record.
24
+ */
25
+ export interface ILlmUsageRecord {
26
+ readonly timestamp: string;
27
+ readonly provider: LlmProvider;
28
+ readonly model: string;
29
+ readonly feature: LlmFeature;
30
+ readonly inputTokens: number;
31
+ readonly outputTokens: number;
32
+ readonly estimatedCostUsd: number;
33
+ }
34
+ /**
35
+ * LLM usage tracker.
36
+ * Append-only log of usage records with cost aggregation and budget checks.
37
+ */
38
+ export interface ILlmUsageTracker {
39
+ /**
40
+ * Record a usage event.
41
+ */
42
+ record(usage: Omit<ILlmUsageRecord, 'timestamp'>): Promise<void>;
43
+ /**
44
+ * Get usage records, optionally filtered by date.
45
+ * @param since - Only return records after this date
46
+ */
47
+ getUsage(since?: Date): Promise<readonly ILlmUsageRecord[]>;
48
+ /**
49
+ * Get total estimated cost, optionally filtered by date.
50
+ * Defaults to current calendar month if no date provided.
51
+ * @param since - Only sum costs after this date
52
+ */
53
+ getTotalCost(since?: Date): Promise<number>;
54
+ /**
55
+ * Check if usage is within the configured monthly budget.
56
+ * Returns true if no budget limit is configured.
57
+ */
58
+ isWithinBudget(): Promise<boolean>;
59
+ }
60
+ //# sourceMappingURL=ILlmUsageTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILlmUsageTracker.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ILlmUsageTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhG;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,UAAU,EAM1C,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAEpE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;IAE5D;;;;OAIG;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * LLM Usage Tracker Interface.
4
+ *
5
+ * Tracks token usage and estimated cost per LLM operation.
6
+ * Supports monthly budget enforcement and per-feature tracking.
7
+ *
8
+ * Part of Phase 6B: Cost/Privacy Controls.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.LLM_FEATURE_VALUES = void 0;
12
+ exports.isValidLlmFeature = isValidLlmFeature;
13
+ /**
14
+ * All valid LLM feature values.
15
+ */
16
+ exports.LLM_FEATURE_VALUES = [
17
+ 'summarization',
18
+ 'extraction',
19
+ 'deduplication',
20
+ 'curation',
21
+ 'test',
22
+ ];
23
+ /**
24
+ * Type guard for LlmFeature.
25
+ */
26
+ function isValidLlmFeature(value) {
27
+ return exports.LLM_FEATURE_VALUES.includes(value);
28
+ }
29
+ //# sourceMappingURL=ILlmUsageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILlmUsageTracker.js","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ILlmUsageTracker.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAuBH,8CAEC;AAhBD;;GAEG;AACU,QAAA,kBAAkB,GAA0B;IACvD,eAAe;IACf,YAAY;IACZ,eAAe;IACf,UAAU;IACV,MAAM;CACE,CAAC;AAEX;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO,0BAAkB,CAAC,QAAQ,CAAC,KAAmB,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import type { IMemoryResult, IMemoryItem } from './types';
2
+ import type { IMemorySaveOptions } from './dal/IMemoryRepository';
3
+ import type { IMemoryRelationship, MemoryRelationType } from './types/IMemoryRelationship';
4
+ import type { ConfidenceLevel } from './types/IMemoryQuality';
5
+ import type { IQueryOptions, IConflictGroup } from './dal/types';
2
6
  /**
3
7
  * Options for date-filtered memory queries.
4
8
  */
@@ -56,6 +60,59 @@ export interface IMemoryWriter {
56
60
  * @param tags - Optional tags for the fact
57
61
  */
58
62
  addFact(groupId: string, fact: string, tags?: readonly string[]): Promise<void>;
63
+ /**
64
+ * Add a fact with lifecycle metadata.
65
+ * Enriches tags with lifecycle:<tier> tag and delegates to addFact.
66
+ * @param groupId - Group ID to save to
67
+ * @param fact - Fact to add
68
+ * @param options - Save options including lifecycle and TTL
69
+ */
70
+ addFactWithLifecycle(groupId: string, fact: string, options: IMemorySaveOptions): Promise<void>;
71
+ /**
72
+ * Expire a single fact by UUID.
73
+ * Routes to Neo4j repository for direct Cypher expiration.
74
+ * @param groupId - Group ID the fact belongs to
75
+ * @param uuid - UUID of the fact to expire
76
+ */
77
+ expireFact(groupId: string, uuid: string): Promise<void>;
78
+ /**
79
+ * Clean up expired facts based on lifecycle TTL defaults.
80
+ * Expires session facts older than 24h and ephemeral facts older than 1h.
81
+ * @param groupId - Group ID to clean up
82
+ * @returns Number of facts expired
83
+ */
84
+ cleanupExpired(groupId: string): Promise<number>;
85
+ }
86
+ /**
87
+ * Relationship operations for memory facts.
88
+ * Separated for Interface Segregation Principle.
89
+ * Optional — only available when a relationship-capable backend (e.g., Neo4j) is present.
90
+ */
91
+ export interface IMemoryRelationshipWriter {
92
+ /**
93
+ * Create a typed relationship between two facts.
94
+ * @param groupId - Group ID for scoping
95
+ * @param sourceUuid - UUID of the source fact
96
+ * @param targetUuid - UUID of the target fact
97
+ * @param relationType - Type of relationship
98
+ * @param metadata - Optional annotation for the relationship
99
+ */
100
+ linkFacts(groupId: string, sourceUuid: string, targetUuid: string, relationType: MemoryRelationType, metadata?: string): Promise<void>;
101
+ /**
102
+ * Remove a typed relationship between two facts.
103
+ * @param groupId - Group ID for scoping
104
+ * @param sourceUuid - UUID of the source fact
105
+ * @param targetUuid - UUID of the target fact
106
+ * @param relationType - Type of relationship to remove
107
+ */
108
+ unlinkFacts(groupId: string, sourceUuid: string, targetUuid: string, relationType: MemoryRelationType): Promise<void>;
109
+ /**
110
+ * Get all relationships for a fact.
111
+ * @param groupId - Group ID for scoping
112
+ * @param uuid - UUID of the fact
113
+ * @param relationType - Optional filter by relation type
114
+ */
115
+ getRelatedFacts(groupId: string, uuid: string, relationType?: MemoryRelationType): Promise<IMemoryRelationship[]>;
59
116
  }
60
117
  /**
61
118
  * Full memory service interface.
@@ -63,4 +120,37 @@ export interface IMemoryWriter {
63
120
  */
64
121
  export interface IMemoryService extends IMemoryReader, IMemoryWriter {
65
122
  }
123
+ /**
124
+ * Extended memory service with relationship support.
125
+ * Consumers that need relationship operations can check/cast to this interface.
126
+ */
127
+ export interface IMemoryServiceWithRelationships extends IMemoryService, IMemoryRelationshipWriter {
128
+ }
129
+ /**
130
+ * Quality read operations for memory.
131
+ * Provides confidence filtering and conflict detection.
132
+ * Separated for Interface Segregation Principle.
133
+ */
134
+ export interface IMemoryQualityReader {
135
+ /**
136
+ * Find facts at or above a minimum confidence level.
137
+ * @param groupIds - Group IDs to search
138
+ * @param minLevel - Minimum confidence level (inclusive)
139
+ * @param options - Additional query options
140
+ */
141
+ findByMinConfidence(groupIds: readonly string[], minLevel: ConfidenceLevel, options?: IQueryOptions): Promise<IMemoryItem[]>;
142
+ /**
143
+ * Find groups of potentially conflicting facts.
144
+ * Detects facts sharing topic tags but with differing content.
145
+ * @param groupIds - Group IDs to search
146
+ * @param topic - Optional topic to filter conflicts by
147
+ */
148
+ findConflicts(groupIds: readonly string[], topic?: string): Promise<readonly IConflictGroup[]>;
149
+ }
150
+ /**
151
+ * Extended memory service with quality query support.
152
+ * Consumers that need quality operations can check/cast to this interface.
153
+ */
154
+ export interface IMemoryServiceWithQuality extends IMemoryService, IMemoryQualityReader {
155
+ }
66
156
  //# sourceMappingURL=IMemoryService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IMemoryService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IMemoryService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,UAAU,CACR,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;OAMG;IACH,oBAAoB,CAClB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B;;;;;;OAMG;IACH,WAAW,CACT,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa,EAAE,aAAa;CAAG"}
1
+ {"version":3,"file":"IMemoryService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IMemoryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Natural Language Curation Service Interface.
3
+ *
4
+ * Defines the contract for translating natural language memory
5
+ * management commands into structured operations. Supports intent
6
+ * classification (query, mark, expire, summarize, consolidate)
7
+ * with plan-then-execute workflow for destructive actions.
8
+ *
9
+ * Part of Phase 6E: Natural Language Curation.
10
+ */
11
+ import type { ILlmUsage } from './ILlmService';
12
+ /**
13
+ * Recognized curation intents.
14
+ */
15
+ export type NlCurationIntent = 'query' | 'mark' | 'expire' | 'summarize' | 'consolidate';
16
+ /**
17
+ * All valid NL curation intents.
18
+ */
19
+ export declare const NL_CURATION_INTENT_VALUES: readonly NlCurationIntent[];
20
+ /**
21
+ * Check if a string is a valid NlCurationIntent.
22
+ */
23
+ export declare function isValidNlCurationIntent(value: string): value is NlCurationIntent;
24
+ /**
25
+ * A single operation within a curation plan.
26
+ */
27
+ export interface INlOperation {
28
+ readonly type: 'search' | 'mark' | 'expire' | 'summarize' | 'consolidate';
29
+ readonly params: Readonly<Record<string, unknown>>;
30
+ readonly description: string;
31
+ }
32
+ /**
33
+ * A plan generated from natural language input.
34
+ * Presented to the user before execution.
35
+ */
36
+ export interface INlCurationPlan {
37
+ readonly intent: NlCurationIntent;
38
+ readonly description: string;
39
+ readonly isDestructive: boolean;
40
+ readonly operations: readonly INlOperation[];
41
+ readonly usage: ILlmUsage;
42
+ }
43
+ /**
44
+ * Result of executing a curation plan.
45
+ */
46
+ export interface INlCurationResult {
47
+ readonly plan: INlCurationPlan;
48
+ readonly executed: boolean;
49
+ readonly output: string;
50
+ readonly usage: ILlmUsage;
51
+ }
52
+ /**
53
+ * Natural language curation service.
54
+ * Translates natural language into structured memory operations.
55
+ */
56
+ export interface INlCurationService {
57
+ /**
58
+ * Plan operations from natural language input.
59
+ * Does NOT execute — returns a plan for user review.
60
+ *
61
+ * @param input - Natural language command
62
+ * @param groupId - Memory group to operate on
63
+ * @throws LlmDisabledError if LLM is disabled
64
+ * @throws LlmFeatureDisabledError if curation feature is disabled
65
+ */
66
+ plan(input: string, groupId: string): Promise<INlCurationPlan>;
67
+ /**
68
+ * Execute a previously generated plan.
69
+ *
70
+ * @param plan - The plan to execute
71
+ * @param groupId - Memory group to operate on
72
+ */
73
+ execute(plan: INlCurationPlan, groupId: string): Promise<INlCurationResult>;
74
+ }
75
+ //# sourceMappingURL=INlCurationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"INlCurationService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/INlCurationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,gBAAgB,EAMvD,CAAC;AAEX;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAEhF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IAC1E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC7E"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Natural Language Curation Service Interface.
4
+ *
5
+ * Defines the contract for translating natural language memory
6
+ * management commands into structured operations. Supports intent
7
+ * classification (query, mark, expire, summarize, consolidate)
8
+ * with plan-then-execute workflow for destructive actions.
9
+ *
10
+ * Part of Phase 6E: Natural Language Curation.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.NL_CURATION_INTENT_VALUES = void 0;
14
+ exports.isValidNlCurationIntent = isValidNlCurationIntent;
15
+ /**
16
+ * All valid NL curation intents.
17
+ */
18
+ exports.NL_CURATION_INTENT_VALUES = [
19
+ 'query',
20
+ 'mark',
21
+ 'expire',
22
+ 'summarize',
23
+ 'consolidate',
24
+ ];
25
+ /**
26
+ * Check if a string is a valid NlCurationIntent.
27
+ */
28
+ function isValidNlCurationIntent(value) {
29
+ return exports.NL_CURATION_INTENT_VALUES.includes(value);
30
+ }
31
+ //# sourceMappingURL=INlCurationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"INlCurationService.js","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/INlCurationService.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAuBH,0DAEC;AAhBD;;GAEG;AACU,QAAA,yBAAyB,GAAgC;IACpE,OAAO;IACP,MAAM;IACN,QAAQ;IACR,WAAW;IACX,aAAa;CACL,CAAC;AAEX;;GAEG;AACH,SAAgB,uBAAuB,CAAC,KAAa;IACnD,OAAO,iCAAyB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Preference Store Interface.
3
+ *
4
+ * Defines a key-value store for user preferences.
5
+ * Fast lookups by key, permanent lifecycle, separate from the knowledge graph.
6
+ *
7
+ * Part of Phase 5D: Preference Key-Value Store.
8
+ */
9
+ /**
10
+ * A stored preference entry.
11
+ */
12
+ export interface IPreference {
13
+ readonly key: string;
14
+ readonly value: string;
15
+ readonly updatedAt: string;
16
+ }
17
+ /**
18
+ * Preference store contract.
19
+ * Simple key-value semantics with list/has helpers.
20
+ */
21
+ export interface IPreferenceStore {
22
+ /**
23
+ * Get a preference value by key.
24
+ * @returns The stored value, or null if not found.
25
+ */
26
+ get(key: string): Promise<string | null>;
27
+ /**
28
+ * Set a preference value.
29
+ * Creates the key if it doesn't exist, overwrites if it does.
30
+ */
31
+ set(key: string, value: string): Promise<void>;
32
+ /**
33
+ * Delete a preference by key.
34
+ * @returns true if the key existed and was deleted, false otherwise.
35
+ */
36
+ delete(key: string): Promise<boolean>;
37
+ /**
38
+ * List all stored preferences.
39
+ */
40
+ list(): Promise<readonly IPreference[]>;
41
+ /**
42
+ * Check whether a key exists.
43
+ */
44
+ has(key: string): Promise<boolean>;
45
+ }
46
+ //# sourceMappingURL=IPreferenceStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPreferenceStore.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IPreferenceStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAExC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Preference Store Interface.
4
+ *
5
+ * Defines a key-value store for user preferences.
6
+ * Fast lookups by key, permanent lifecycle, separate from the knowledge graph.
7
+ *
8
+ * Part of Phase 5D: Preference Key-Value Store.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=IPreferenceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPreferenceStore.js","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IPreferenceStore.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}
@@ -1,3 +1,4 @@
1
+ import type { TaskType } from './types/ITaskType';
1
2
  /**
2
3
  * Result of memory recursion for plan mode prompts.
3
4
  */
@@ -25,28 +26,31 @@ export interface IRecursionConfig {
25
26
  readonly queryTimeoutMs: number;
26
27
  }
27
28
  /**
28
- * Service for searching memory when planning.
29
+ * Service for searching memory based on task context.
29
30
  *
30
- * When a user submits a prompt in plan mode, this service searches
31
- * memory for relevant context: previous decisions, learnings, and tasks.
31
+ * When a user submits a prompt, this service searches memory for
32
+ * relevant context: previous decisions, learnings, and tasks.
33
+ * The search strategy adapts based on the detected task type.
32
34
  */
33
35
  export interface IRecursionService {
34
36
  /**
35
- * Run memory recursion for a plan mode prompt.
37
+ * Run memory recursion for a prompt.
36
38
  * Searches for relevant decisions, learnings, and tasks.
37
39
  *
38
40
  * @param prompt - The user's prompt text
39
41
  * @param groupIds - Hierarchical group IDs to search
42
+ * @param taskType - Optional task type to adjust search strategy
40
43
  * @returns Recursion result with found context
41
44
  */
42
- run(prompt: string, groupIds: readonly string[]): Promise<IRecursionResult>;
45
+ run(prompt: string, groupIds: readonly string[], taskType?: TaskType): Promise<IRecursionResult>;
43
46
  /**
44
47
  * Check if recursion should run for a given prompt.
45
48
  *
46
49
  * @param prompt - The user's prompt text
47
50
  * @param permissionMode - The current permission mode
51
+ * @param taskType - Optional task type (debugging/exploration always trigger)
48
52
  * @returns True if recursion should run
49
53
  */
50
- shouldRun(prompt: string, permissionMode: string): boolean;
54
+ shouldRun(prompt: string, permissionMode: string, taskType?: TaskType): boolean;
51
55
  }
52
56
  //# sourceMappingURL=IRecursionService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IRecursionService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IRecursionService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mCAAmC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5E;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5D"}
1
+ {"version":3,"file":"IRecursionService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/IRecursionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mCAAmC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjG;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACjF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Summarization Service Interface.
3
+ *
4
+ * Produces LLM-generated summaries of accumulated memory facts.
5
+ * Supports date filtering, topic filtering, and style options.
6
+ *
7
+ * Part of Phase 6B: AI-Powered Memory Summarization.
8
+ */
9
+ import type { ILlmUsage } from './ILlmService';
10
+ /**
11
+ * Result of a summarization operation.
12
+ */
13
+ export interface ISummarizationResult {
14
+ readonly summary: string;
15
+ readonly factCount: number;
16
+ readonly timeRange: {
17
+ readonly from: string;
18
+ readonly to: string;
19
+ };
20
+ readonly topics: readonly string[];
21
+ readonly usage: ILlmUsage;
22
+ }
23
+ /**
24
+ * Options for summarization.
25
+ */
26
+ export interface ISummarizationOptions {
27
+ /** Only include facts created after this date. */
28
+ readonly since?: Date;
29
+ /** Filter facts by topic tag. */
30
+ readonly topic?: string;
31
+ /** Maximum number of facts to send to the LLM (default: 50). */
32
+ readonly maxFacts?: number;
33
+ /** Summary style: concise (2-3 paragraphs) or detailed (4-6 paragraphs). */
34
+ readonly style?: 'concise' | 'detailed';
35
+ }
36
+ /**
37
+ * Summarization service.
38
+ * Produces LLM-generated digests of project memory facts.
39
+ */
40
+ export interface ISummarizationService {
41
+ /**
42
+ * Summarize memory facts for a group.
43
+ *
44
+ * @param groupId - Group ID to summarize facts from
45
+ * @param options - Optional filters and style settings
46
+ * @throws LlmDisabledError if LLM is disabled
47
+ * @throws LlmFeatureDisabledError if summarization feature is disabled
48
+ * @throws LlmBudgetExceededError if monthly budget limit is exceeded
49
+ */
50
+ summarize(groupId: string, options?: ISummarizationOptions): Promise<ISummarizationResult>;
51
+ }
52
+ //# sourceMappingURL=ISummarizationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISummarizationService.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ISummarizationService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;OAQG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Summarization Service Interface.
4
+ *
5
+ * Produces LLM-generated summaries of accumulated memory facts.
6
+ * Supports date filtering, topic filtering, and style options.
7
+ *
8
+ * Part of Phase 6B: AI-Powered Memory Summarization.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=ISummarizationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISummarizationService.js","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ISummarizationService.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Task Type Detector Interface
3
+ *
4
+ * Contract for detecting the task type from user prompts.
5
+ * Used by PromptSubmitHandler to determine retrieval strategy.
6
+ */
7
+ import type { TaskType } from './types/ITaskType';
8
+ /**
9
+ * Result of task type detection.
10
+ */
11
+ export interface ITaskTypeResult {
12
+ /** The detected task type */
13
+ readonly taskType: TaskType;
14
+ /** Confidence score (0.0 - 1.0) */
15
+ readonly confidence: number;
16
+ /** Signal keywords that contributed to detection */
17
+ readonly signals: readonly string[];
18
+ }
19
+ /**
20
+ * Service for detecting task type from user prompts.
21
+ *
22
+ * Uses signal-based scoring (keywords + phrases) for fast,
23
+ * deterministic classification without LLM calls.
24
+ */
25
+ export interface ITaskTypeDetector {
26
+ /**
27
+ * Detect the task type from a user prompt.
28
+ *
29
+ * @param prompt - The user's prompt text
30
+ * @returns Detection result with task type, confidence, and signals
31
+ */
32
+ detect(prompt: string): ITaskTypeResult;
33
+ }
34
+ //# sourceMappingURL=ITaskTypeDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITaskTypeDetector.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ITaskTypeDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CACzC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Task Type Detector Interface
4
+ *
5
+ * Contract for detecting the task type from user prompts.
6
+ * Used by PromptSubmitHandler to determine retrieval strategy.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=ITaskTypeDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITaskTypeDetector.js","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ITaskTypeDetector.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Transcript Enricher Interface.
3
+ *
4
+ * Defines the contract for LLM-powered extraction of structured facts
5
+ * from session transcripts. Extracts decisions, learnings, blockers,
6
+ * tasks, preferences, conventions, and gotchas with confidence levels.
7
+ *
8
+ * Part of Phase 6C: Enhanced Session Transcript Extraction.
9
+ */
10
+ import type { ILlmUsage } from './ILlmService';
11
+ import type { ConfidenceLevel } from './types/IMemoryQuality';
12
+ import type { IWorkSummary } from './IWorkSummary';
13
+ /**
14
+ * Fact type extracted from a session transcript.
15
+ */
16
+ export type ExtractedFactType = 'decision' | 'learning' | 'blocker' | 'task' | 'preference' | 'convention' | 'gotcha';
17
+ /**
18
+ * All valid extracted fact types.
19
+ */
20
+ export declare const EXTRACTED_FACT_TYPE_VALUES: readonly ExtractedFactType[];
21
+ /**
22
+ * Type guard for ExtractedFactType.
23
+ */
24
+ export declare function isValidExtractedFactType(value: string): value is ExtractedFactType;
25
+ /**
26
+ * A structured fact extracted by the LLM from a transcript.
27
+ */
28
+ export interface IExtractedFact {
29
+ readonly text: string;
30
+ readonly type: ExtractedFactType;
31
+ readonly confidence: ConfidenceLevel;
32
+ readonly tags: readonly string[];
33
+ readonly rationale?: string;
34
+ }
35
+ /**
36
+ * Result of enriching a session transcript with LLM extraction.
37
+ */
38
+ export interface IEnrichmentResult {
39
+ readonly facts: readonly IExtractedFact[];
40
+ readonly summary: string;
41
+ readonly usage: ILlmUsage;
42
+ }
43
+ /**
44
+ * Options for transcript enrichment.
45
+ */
46
+ export interface IEnrichmentOptions {
47
+ /** Extraction depth: 'fast' extracts top 5 facts, 'thorough' up to 15. Default: 'fast'. */
48
+ readonly depth?: 'fast' | 'thorough';
49
+ /** Restrict extraction to specific fact types. Default: all types. */
50
+ readonly extractTypes?: readonly ExtractedFactType[];
51
+ /** Maximum transcript length sent to LLM (chars). Default: 4000. */
52
+ readonly maxSnippetLength?: number;
53
+ }
54
+ /**
55
+ * Service for enriching session transcripts with LLM-extracted facts.
56
+ */
57
+ export interface ITranscriptEnricher {
58
+ /**
59
+ * Enrich a session transcript with structured facts via LLM analysis.
60
+ *
61
+ * @param workSummary - Parsed work summary from the session
62
+ * @param transcriptSnippet - Raw transcript text snippet
63
+ * @param options - Enrichment options
64
+ * @returns Extracted facts, summary, and usage stats
65
+ */
66
+ enrich(workSummary: IWorkSummary, transcriptSnippet: string, options?: IEnrichmentOptions): Promise<IEnrichmentResult>;
67
+ }
68
+ //# sourceMappingURL=ITranscriptEnricher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITranscriptEnricher.d.ts","sourceRoot":"","sources":["../../../../src/lib/domain/interfaces/ITranscriptEnricher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,UAAU,GACV,SAAS,GACT,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,QAAQ,CAAC;AAEb;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,iBAAiB,EAQzD,CAAC;AAEX;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAElF;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACrC,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrD,oEAAoE;IACpE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,MAAM,CACJ,WAAW,EAAE,YAAY,EACzB,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B"}