om-memory-system 3.0.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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +587 -0
  3. package/dist/adapters/opencode/auto-capture-host.d.ts +3 -0
  4. package/dist/adapters/opencode/auto-capture-host.js +29 -0
  5. package/dist/adapters/opencode/auto-capture-summary.d.ts +4 -0
  6. package/dist/adapters/opencode/auto-capture-summary.js +147 -0
  7. package/dist/adapters/opencode/conversation.d.ts +2 -0
  8. package/dist/adapters/opencode/conversation.js +50 -0
  9. package/dist/adapters/opencode/user-prompt.d.ts +9 -0
  10. package/dist/adapters/opencode/user-prompt.js +26 -0
  11. package/dist/adapters/pi/capture.d.ts +41 -0
  12. package/dist/adapters/pi/capture.js +91 -0
  13. package/dist/adapters/pi/conversation.d.ts +38 -0
  14. package/dist/adapters/pi/conversation.js +118 -0
  15. package/dist/adapters/pi/extension.d.ts +18 -0
  16. package/dist/adapters/pi/extension.js +234 -0
  17. package/dist/adapters/pi/import-command.d.ts +29 -0
  18. package/dist/adapters/pi/import-command.js +232 -0
  19. package/dist/adapters/pi/profile.d.ts +39 -0
  20. package/dist/adapters/pi/profile.js +148 -0
  21. package/dist/adapters/pi/provider.d.ts +50 -0
  22. package/dist/adapters/pi/provider.js +77 -0
  23. package/dist/config.d.ts +290 -0
  24. package/dist/config.js +742 -0
  25. package/dist/core/capture-context.d.ts +4 -0
  26. package/dist/core/capture-context.js +132 -0
  27. package/dist/core/capture.d.ts +15 -0
  28. package/dist/core/capture.js +68 -0
  29. package/dist/core/extraction.d.ts +80 -0
  30. package/dist/core/extraction.js +140 -0
  31. package/dist/core/host.d.ts +52 -0
  32. package/dist/core/host.js +1 -0
  33. package/dist/core/memory-operations.d.ts +27 -0
  34. package/dist/core/memory-operations.js +247 -0
  35. package/dist/core/retrieval.d.ts +12 -0
  36. package/dist/core/retrieval.js +72 -0
  37. package/dist/importer/discovery.d.ts +31 -0
  38. package/dist/importer/discovery.js +88 -0
  39. package/dist/importer/importer.d.ts +87 -0
  40. package/dist/importer/importer.js +260 -0
  41. package/dist/importer/ledger.d.ts +44 -0
  42. package/dist/importer/ledger.js +137 -0
  43. package/dist/importer/session-loader.d.ts +19 -0
  44. package/dist/importer/session-loader.js +12 -0
  45. package/dist/index.d.ts +24 -0
  46. package/dist/index.js +601 -0
  47. package/dist/plugin.d.ts +9 -0
  48. package/dist/plugin.js +11 -0
  49. package/dist/services/ai/ai-provider-factory.d.ts +7 -0
  50. package/dist/services/ai/ai-provider-factory.js +41 -0
  51. package/dist/services/ai/api-key-placeholder.d.ts +1 -0
  52. package/dist/services/ai/api-key-placeholder.js +14 -0
  53. package/dist/services/ai/internal-capture-sessions.d.ts +6 -0
  54. package/dist/services/ai/internal-capture-sessions.js +33 -0
  55. package/dist/services/ai/opencode-diagnostics.d.ts +7 -0
  56. package/dist/services/ai/opencode-diagnostics.js +36 -0
  57. package/dist/services/ai/opencode-host-config.d.ts +10 -0
  58. package/dist/services/ai/opencode-host-config.js +51 -0
  59. package/dist/services/ai/opencode-provider-loader.d.ts +3 -0
  60. package/dist/services/ai/opencode-provider-loader.js +4 -0
  61. package/dist/services/ai/opencode-provider.d.ts +92 -0
  62. package/dist/services/ai/opencode-provider.js +419 -0
  63. package/dist/services/ai/opencode-sdk-client.d.ts +6 -0
  64. package/dist/services/ai/opencode-sdk-client.js +38 -0
  65. package/dist/services/ai/profile-llm-client.d.ts +2 -0
  66. package/dist/services/ai/profile-llm-client.js +27 -0
  67. package/dist/services/ai/provider-config.d.ts +17 -0
  68. package/dist/services/ai/provider-config.js +30 -0
  69. package/dist/services/ai/providers/anthropic-messages.d.ts +34 -0
  70. package/dist/services/ai/providers/anthropic-messages.js +220 -0
  71. package/dist/services/ai/providers/base-provider.d.ts +24 -0
  72. package/dist/services/ai/providers/base-provider.js +24 -0
  73. package/dist/services/ai/providers/google-gemini.d.ts +15 -0
  74. package/dist/services/ai/providers/google-gemini.js +228 -0
  75. package/dist/services/ai/providers/minimax.d.ts +35 -0
  76. package/dist/services/ai/providers/minimax.js +55 -0
  77. package/dist/services/ai/providers/openai-chat-completion.d.ts +22 -0
  78. package/dist/services/ai/providers/openai-chat-completion.js +387 -0
  79. package/dist/services/ai/providers/openai-responses.d.ts +13 -0
  80. package/dist/services/ai/providers/openai-responses.js +182 -0
  81. package/dist/services/ai/providers/orcarouter.d.ts +51 -0
  82. package/dist/services/ai/providers/orcarouter.js +66 -0
  83. package/dist/services/ai/session/ai-session-manager.d.ts +24 -0
  84. package/dist/services/ai/session/ai-session-manager.js +211 -0
  85. package/dist/services/ai/session/session-types.d.ts +42 -0
  86. package/dist/services/ai/session/session-types.js +1 -0
  87. package/dist/services/ai/tools/tool-schema.d.ts +40 -0
  88. package/dist/services/ai/tools/tool-schema.js +24 -0
  89. package/dist/services/ai/validators/user-profile-validator.d.ts +12 -0
  90. package/dist/services/ai/validators/user-profile-validator.js +114 -0
  91. package/dist/services/api-handlers.d.ts +186 -0
  92. package/dist/services/api-handlers.js +1284 -0
  93. package/dist/services/auth-token.d.ts +14 -0
  94. package/dist/services/auth-token.js +59 -0
  95. package/dist/services/auto-capture.d.ts +3 -0
  96. package/dist/services/auto-capture.js +127 -0
  97. package/dist/services/cleanup-service.d.ts +22 -0
  98. package/dist/services/cleanup-service.js +109 -0
  99. package/dist/services/client.d.ts +134 -0
  100. package/dist/services/client.js +327 -0
  101. package/dist/services/context.d.ts +10 -0
  102. package/dist/services/context.js +27 -0
  103. package/dist/services/cors.d.ts +12 -0
  104. package/dist/services/cors.js +52 -0
  105. package/dist/services/deduplication-service.d.ts +28 -0
  106. package/dist/services/deduplication-service.js +111 -0
  107. package/dist/services/embedding.d.ts +36 -0
  108. package/dist/services/embedding.js +200 -0
  109. package/dist/services/jsonc.d.ts +6 -0
  110. package/dist/services/jsonc.js +76 -0
  111. package/dist/services/language-detector.d.ts +2 -0
  112. package/dist/services/language-detector.js +33 -0
  113. package/dist/services/legacy-migration.d.ts +77 -0
  114. package/dist/services/legacy-migration.js +343 -0
  115. package/dist/services/logger.d.ts +1 -0
  116. package/dist/services/logger.js +119 -0
  117. package/dist/services/memory-portability-service.d.ts +37 -0
  118. package/dist/services/memory-portability-service.js +340 -0
  119. package/dist/services/memory-scope.d.ts +16 -0
  120. package/dist/services/memory-scope.js +43 -0
  121. package/dist/services/migration-service.d.ts +42 -0
  122. package/dist/services/migration-service.js +307 -0
  123. package/dist/services/onnxruntime-resolve.d.ts +24 -0
  124. package/dist/services/onnxruntime-resolve.js +174 -0
  125. package/dist/services/privacy.d.ts +26 -0
  126. package/dist/services/privacy.js +69 -0
  127. package/dist/services/request-timeouts.d.ts +9 -0
  128. package/dist/services/request-timeouts.js +11 -0
  129. package/dist/services/runtime-require.d.ts +17 -0
  130. package/dist/services/runtime-require.js +75 -0
  131. package/dist/services/secret-resolver.d.ts +1 -0
  132. package/dist/services/secret-resolver.js +65 -0
  133. package/dist/services/shard-inventory-service.d.ts +69 -0
  134. package/dist/services/shard-inventory-service.js +315 -0
  135. package/dist/services/shard-path-migration-service.d.ts +31 -0
  136. package/dist/services/shard-path-migration-service.js +367 -0
  137. package/dist/services/tag-prefix-migration.d.ts +60 -0
  138. package/dist/services/tag-prefix-migration.js +439 -0
  139. package/dist/services/tag-prefix-scan.d.ts +26 -0
  140. package/dist/services/tag-prefix-scan.js +91 -0
  141. package/dist/services/tags.d.ts +29 -0
  142. package/dist/services/tags.js +251 -0
  143. package/dist/services/turso/connection-manager.d.ts +15 -0
  144. package/dist/services/turso/connection-manager.js +163 -0
  145. package/dist/services/turso/cross-process-write-lock.d.ts +1 -0
  146. package/dist/services/turso/cross-process-write-lock.js +89 -0
  147. package/dist/services/turso/legacy-migrator.d.ts +1 -0
  148. package/dist/services/turso/legacy-migrator.js +540 -0
  149. package/dist/services/turso/lifecycle.d.ts +1 -0
  150. package/dist/services/turso/lifecycle.js +14 -0
  151. package/dist/services/turso/operation-lock.d.ts +2 -0
  152. package/dist/services/turso/operation-lock.js +61 -0
  153. package/dist/services/turso/ready.d.ts +2 -0
  154. package/dist/services/turso/ready.js +36 -0
  155. package/dist/services/turso/shard-manager.d.ts +38 -0
  156. package/dist/services/turso/shard-manager.js +496 -0
  157. package/dist/services/turso/sqlite-handle-release.d.ts +16 -0
  158. package/dist/services/turso/sqlite-handle-release.js +56 -0
  159. package/dist/services/turso/turso-db.d.ts +18 -0
  160. package/dist/services/turso/turso-db.js +53 -0
  161. package/dist/services/turso/types.d.ts +42 -0
  162. package/dist/services/turso/types.js +1 -0
  163. package/dist/services/turso/vector-search.d.ts +41 -0
  164. package/dist/services/turso/vector-search.js +384 -0
  165. package/dist/services/turso/vector-utils.d.ts +7 -0
  166. package/dist/services/turso/vector-utils.js +67 -0
  167. package/dist/services/user-memory-learning.d.ts +97 -0
  168. package/dist/services/user-memory-learning.js +673 -0
  169. package/dist/services/user-profile/ai-cleanup.d.ts +58 -0
  170. package/dist/services/user-profile/ai-cleanup.js +486 -0
  171. package/dist/services/user-profile/profile-context.d.ts +1 -0
  172. package/dist/services/user-profile/profile-context.js +105 -0
  173. package/dist/services/user-profile/profile-utils.d.ts +2 -0
  174. package/dist/services/user-profile/profile-utils.js +45 -0
  175. package/dist/services/user-profile/types.d.ts +92 -0
  176. package/dist/services/user-profile/types.js +1 -0
  177. package/dist/services/user-profile/user-profile-manager.d.ts +65 -0
  178. package/dist/services/user-profile/user-profile-manager.js +1660 -0
  179. package/dist/services/user-prompt/user-prompt-manager.d.ts +53 -0
  180. package/dist/services/user-prompt/user-prompt-manager.js +303 -0
  181. package/dist/services/web-api-auth.d.ts +3 -0
  182. package/dist/services/web-api-auth.js +25 -0
  183. package/dist/services/web-auth.d.ts +46 -0
  184. package/dist/services/web-auth.js +105 -0
  185. package/dist/services/web-server.d.ts +57 -0
  186. package/dist/services/web-server.js +659 -0
  187. package/dist/shared/api/index.d.ts +4 -0
  188. package/dist/shared/api/index.js +2 -0
  189. package/dist/shared/api/portability-schemas.d.ts +56 -0
  190. package/dist/shared/api/portability-schemas.js +39 -0
  191. package/dist/shared/api/schemas.d.ts +295 -0
  192. package/dist/shared/api/schemas.js +134 -0
  193. package/dist/shared/api/types.d.ts +28 -0
  194. package/dist/shared/api/types.js +1 -0
  195. package/dist/types/index.d.ts +27 -0
  196. package/dist/types/index.js +1 -0
  197. package/dist/utils/context-limit.d.ts +10 -0
  198. package/dist/utils/context-limit.js +43 -0
  199. package/dist/utils/math.d.ts +7 -0
  200. package/dist/utils/math.js +48 -0
  201. package/dist/utils/profile.d.ts +2 -0
  202. package/dist/utils/profile.js +15 -0
  203. package/dist/v2/adapter.d.ts +5 -0
  204. package/dist/v2/adapter.js +218 -0
  205. package/dist/v2/legacy-client.d.ts +15 -0
  206. package/dist/v2/legacy-client.js +257 -0
  207. package/dist/v2/memory-bridge.d.ts +18 -0
  208. package/dist/v2/memory-bridge.js +29 -0
  209. package/dist/v2/plugin.d.ts +3 -0
  210. package/dist/v2/plugin.js +24 -0
  211. package/dist/web/assets/index-DPjEpD1h.css +2 -0
  212. package/dist/web/assets/index-do26c4JJ.js +122 -0
  213. package/dist/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  214. package/dist/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  215. package/dist/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  216. package/dist/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  217. package/dist/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  218. package/dist/web/favicon.ico +0 -0
  219. package/dist/web/index.html +14 -0
  220. package/dist/web/omms-icon.png +0 -0
  221. package/package.json +138 -0
@@ -0,0 +1,50 @@
1
+ import type { CaptureSummary, CaptureSummaryRequest } from "../../core/host.js";
2
+ /**
3
+ * Structural view of a Pi ExtensionContext's model surfaces, so the resolver
4
+ * stays testable without importing Pi runtime types.
5
+ */
6
+ export interface PiModelContext {
7
+ modelRegistry: any;
8
+ model: any;
9
+ }
10
+ /**
11
+ * Active-model-first resolution: the explicit `piProvider`/`piModel`
12
+ * configuration when both are set, otherwise the active `ctx.model`.
13
+ */
14
+ export declare function resolveModelFromContext(ctx: PiModelContext): PiModelHandle | null;
15
+ /**
16
+ * Structural view of the pieces we use from Pi's ModelRegistry/Model so the
17
+ * bridge stays testable without importing Pi runtime types.
18
+ */
19
+ export interface PiModelCallContext {
20
+ systemPrompt?: string;
21
+ messages: Array<{
22
+ role: "user";
23
+ content: string;
24
+ timestamp: number;
25
+ }>;
26
+ }
27
+ export interface PiModelHandle {
28
+ provider: string;
29
+ modelId: string;
30
+ complete(context: PiModelCallContext): Promise<PiAssistantReply>;
31
+ }
32
+ export interface PiAssistantReply {
33
+ content: Array<{
34
+ type: string;
35
+ text?: string;
36
+ }>;
37
+ stopReason?: string;
38
+ errorMessage?: string;
39
+ }
40
+ /**
41
+ * Bridge the shared structured-extraction port onto Pi's provider-aware model
42
+ * runtime (`ctx.modelRegistry.complete()`). The Pi adapter resolves the model
43
+ * (active `ctx.model`, or explicit `piProvider`/`piModel` configuration) and
44
+ * supplies it through `resolveModel`; failures surface as exceptions so the
45
+ * capture pipeline can defer or skip the work unit while manual memory
46
+ * operations stay available.
47
+ */
48
+ export declare function createPiCaptureProvider(resolveModel: () => PiModelHandle | null): {
49
+ summarize(request: CaptureSummaryRequest): Promise<CaptureSummary | null>;
50
+ };
@@ -0,0 +1,77 @@
1
+ import { CONFIG } from "../../config.js";
2
+ import { buildBoundedSummaryPrompt } from "../../core/capture-context.js";
3
+ import { buildCaptureSystemPrompt, captureSummaryToolSchema, parseCaptureSummary, } from "../../core/extraction.js";
4
+ import { detectLanguage, getLanguageName } from "../../services/language-detector.js";
5
+ import { log } from "../../services/logger.js";
6
+ /**
7
+ * Active-model-first resolution: the explicit `piProvider`/`piModel`
8
+ * configuration when both are set, otherwise the active `ctx.model`.
9
+ */
10
+ export function resolveModelFromContext(ctx) {
11
+ const registry = ctx?.modelRegistry;
12
+ if (!registry)
13
+ return null;
14
+ let model = null;
15
+ if (CONFIG.piProvider && CONFIG.piModel) {
16
+ model = registry.find(CONFIG.piProvider, CONFIG.piModel) ?? null;
17
+ }
18
+ if (!model)
19
+ model = ctx?.model ?? null;
20
+ if (!model)
21
+ return null;
22
+ return {
23
+ provider: typeof model.provider === "string" ? model.provider : "unknown",
24
+ modelId: typeof model.id === "string"
25
+ ? model.id
26
+ : typeof model.modelId === "string"
27
+ ? model.modelId
28
+ : "unknown",
29
+ complete: (context) => registry.complete(model, context),
30
+ };
31
+ }
32
+ function replyText(reply) {
33
+ return reply.content
34
+ .filter((block) => block.type === "text" && typeof block.text === "string")
35
+ .map((block) => block.text)
36
+ .join("\n")
37
+ .trim();
38
+ }
39
+ /**
40
+ * Bridge the shared structured-extraction port onto Pi's provider-aware model
41
+ * runtime (`ctx.modelRegistry.complete()`). The Pi adapter resolves the model
42
+ * (active `ctx.model`, or explicit `piProvider`/`piModel` configuration) and
43
+ * supplies it through `resolveModel`; failures surface as exceptions so the
44
+ * capture pipeline can defer or skip the work unit while manual memory
45
+ * operations stay available.
46
+ */
47
+ export function createPiCaptureProvider(resolveModel) {
48
+ return {
49
+ async summarize(request) {
50
+ const model = resolveModel();
51
+ if (!model) {
52
+ throw new Error("omms: no Pi model available for auto-capture");
53
+ }
54
+ const targetLang = CONFIG.autoCaptureLanguage === "auto" || !CONFIG.autoCaptureLanguage
55
+ ? detectLanguage(request.userPrompt)
56
+ : CONFIG.autoCaptureLanguage;
57
+ const systemPrompt = buildCaptureSystemPrompt(getLanguageName(targetLang));
58
+ const userPrompt = buildBoundedSummaryPrompt(request.context, systemPrompt, captureSummaryToolSchema);
59
+ const reply = await model.complete({
60
+ systemPrompt,
61
+ messages: [{ role: "user", content: userPrompt, timestamp: Date.now() }],
62
+ });
63
+ if (reply.stopReason === "error") {
64
+ throw new Error(`omms: Pi extraction call failed: ${reply.errorMessage || "unknown error"}`);
65
+ }
66
+ const summary = parseCaptureSummary(replyText(reply));
67
+ if (!summary) {
68
+ log("Pi capture: model reply was not a valid capture summary", {
69
+ provider: model.provider,
70
+ modelId: model.modelId,
71
+ });
72
+ throw new Error("omms: Pi extraction returned an invalid summary payload");
73
+ }
74
+ return summary;
75
+ },
76
+ };
77
+ }
@@ -0,0 +1,290 @@
1
+ import { isPlaceholderApiKey } from "./services/ai/api-key-placeholder.js";
2
+ interface OmmsConfig {
3
+ storagePath?: string;
4
+ userEmailOverride?: string;
5
+ userNameOverride?: string;
6
+ memory?: {
7
+ defaultScope?: "project" | "all-projects";
8
+ };
9
+ embeddingModel?: string;
10
+ embeddingDimensions?: number;
11
+ embeddingApiUrl?: string;
12
+ embeddingApiKey?: string;
13
+ /** Opt-in Nomic task prefixes (`search_document:` / `search_query:`). Default false. */
14
+ embeddingUseTaskPrefixes?: boolean;
15
+ similarityThreshold?: number;
16
+ maxMemories?: number;
17
+ maxProfileItems?: number;
18
+ injectProfile?: boolean;
19
+ containerTagPrefix?: string;
20
+ autoCaptureEnabled?: boolean;
21
+ autoCaptureMaxIterations?: number;
22
+ autoCaptureIterationTimeout?: number;
23
+ autoCaptureMaxRetries?: number;
24
+ autoCaptureMaxContextBytes?: number;
25
+ autoCaptureLanguage?: string;
26
+ memoryProvider?: "openai-chat" | "openai-responses" | "anthropic" | "minimax" | "orcarouter";
27
+ memoryModel?: string;
28
+ memoryApiUrl?: string;
29
+ memoryApiKey?: string;
30
+ memoryTemperature?: number | false;
31
+ memoryExtraParams?: Record<string, unknown>;
32
+ opencodeProvider?: string;
33
+ opencodeModel?: string;
34
+ /** Pi adapter: explicit provider/model for capture extraction. Default: inherit active Pi model. */
35
+ piProvider?: string;
36
+ piModel?: string;
37
+ aiSessionRetentionDays?: number;
38
+ webServerEnabled?: boolean;
39
+ webServerPort?: number;
40
+ webServerHost?: string;
41
+ webServerAuthPassword?: string;
42
+ webServerAuthUsername?: string;
43
+ webServerApiToken?: string;
44
+ maxVectorsPerShard?: number;
45
+ autoCleanupEnabled?: boolean;
46
+ autoCleanupRetentionDays?: number;
47
+ deduplicationEnabled?: boolean;
48
+ deduplicationSimilarityThreshold?: number;
49
+ userProfileAnalysisInterval?: number;
50
+ userProfileMaxContextBytes?: number;
51
+ userProfileDisplayPreferences?: number;
52
+ userProfileDisplayPatterns?: number;
53
+ userProfileDisplayWorkflows?: number;
54
+ userProfileStaleDays?: number;
55
+ userProfileInjectPreferences?: number;
56
+ userProfileInjectPatterns?: number;
57
+ userProfileInjectWorkflows?: number;
58
+ userProfileConfidenceDecayDays?: number;
59
+ userProfileChangelogRetentionCount?: number;
60
+ userProfileEmbeddingThresholdSameCat?: number;
61
+ userProfileEmbeddingThresholdSameCatWeak?: number;
62
+ userProfileEmbeddingThresholdCrossCat?: number;
63
+ userProfileEmbeddingThresholdCrossCatWeak?: number;
64
+ userProfileCentroidDriftThreshold?: number;
65
+ userProfileEmbeddingMinDescriptionLength?: number;
66
+ userProfileMinEvidenceForRetention?: number;
67
+ userProfileAutoCleanupEnabled?: boolean;
68
+ userProfileAutoCleanupInterval?: number;
69
+ userProfileValidationEnabled?: boolean;
70
+ showAutoCaptureToasts?: boolean;
71
+ showUserProfileToasts?: boolean;
72
+ showErrorToasts?: boolean;
73
+ compaction?: {
74
+ enabled?: boolean;
75
+ memoryLimit?: number;
76
+ };
77
+ chatMessage?: {
78
+ enabled?: boolean;
79
+ maxMemories?: number;
80
+ excludeCurrentSession?: boolean;
81
+ maxAgeDays?: number;
82
+ injectOn?: "first" | "always";
83
+ };
84
+ }
85
+ export declare function normalizeAutoCaptureMaxContextBytes(value: number): number;
86
+ export declare function normalizeAutoCleanupRetentionDays(value: number): number;
87
+ declare function buildConfig(fileConfig: OmmsConfig): {
88
+ storagePath: string;
89
+ userEmailOverride: string | undefined;
90
+ userNameOverride: string | undefined;
91
+ embeddingModel: string;
92
+ embeddingDimensions: number;
93
+ embeddingUseTaskPrefixes: boolean;
94
+ embeddingApiUrl: string | undefined;
95
+ embeddingApiKey: string | undefined;
96
+ similarityThreshold: number;
97
+ maxMemories: number;
98
+ maxProfileItems: number;
99
+ injectProfile: boolean;
100
+ containerTagPrefix: string;
101
+ autoCaptureEnabled: boolean;
102
+ autoCaptureMaxIterations: number;
103
+ autoCaptureIterationTimeout: number;
104
+ autoCaptureMaxRetries: number;
105
+ autoCaptureMaxContextBytes: number;
106
+ autoCaptureLanguage: string | undefined;
107
+ memoryProvider: "openai-chat" | "openai-responses" | "anthropic" | "minimax" | "orcarouter";
108
+ memoryModel: string | undefined;
109
+ memoryApiUrl: string | undefined;
110
+ memoryApiKey: string | undefined;
111
+ memoryTemperature: number | false | undefined;
112
+ memoryExtraParams: Record<string, unknown> | undefined;
113
+ opencodeProvider: string | undefined;
114
+ opencodeModel: string | undefined;
115
+ piProvider: string | undefined;
116
+ piModel: string | undefined;
117
+ autoCaptureProviderStatus: AutoCaptureProviderStatus;
118
+ aiSessionRetentionDays: number;
119
+ webServerEnabled: boolean;
120
+ webServerPort: number;
121
+ webServerHost: string;
122
+ webServerAuthPassword: string | undefined;
123
+ webServerAuthUsername: string | undefined;
124
+ webServerApiToken: string | undefined;
125
+ maxVectorsPerShard: number;
126
+ autoCleanupEnabled: boolean;
127
+ autoCleanupRetentionDays: number;
128
+ deduplicationEnabled: boolean;
129
+ deduplicationSimilarityThreshold: number;
130
+ userProfileAnalysisInterval: number;
131
+ userProfileMaxContextBytes: number;
132
+ userProfileDisplayPreferences: number;
133
+ userProfileDisplayPatterns: number;
134
+ userProfileDisplayWorkflows: number;
135
+ userProfileInjectPreferences: number;
136
+ userProfileInjectPatterns: number;
137
+ userProfileInjectWorkflows: number;
138
+ userProfileConfidenceDecayDays: number;
139
+ userProfileChangelogRetentionCount: number;
140
+ userProfileEmbeddingThresholdSameCat: number;
141
+ userProfileEmbeddingThresholdSameCatWeak: number;
142
+ userProfileEmbeddingThresholdCrossCat: number;
143
+ userProfileEmbeddingThresholdCrossCatWeak: number;
144
+ userProfileCentroidDriftThreshold: number;
145
+ userProfileEmbeddingMinDescriptionLength: number;
146
+ userProfileMinEvidenceForRetention: number;
147
+ userProfileAutoCleanupEnabled: boolean;
148
+ userProfileAutoCleanupInterval: number;
149
+ userProfileValidationEnabled: boolean;
150
+ userProfileStaleDays: number;
151
+ showAutoCaptureToasts: boolean;
152
+ showUserProfileToasts: boolean;
153
+ showErrorToasts: boolean;
154
+ memory: {
155
+ defaultScope: "project" | "all-projects" | undefined;
156
+ };
157
+ compaction: {
158
+ enabled: boolean | undefined;
159
+ memoryLimit: number | undefined;
160
+ };
161
+ chatMessage: {
162
+ enabled: boolean | undefined;
163
+ maxMemories: number | undefined;
164
+ excludeCurrentSession: boolean | undefined;
165
+ maxAgeDays: number | undefined;
166
+ injectOn: "first" | "always";
167
+ };
168
+ };
169
+ export declare let CONFIG: {
170
+ storagePath: string;
171
+ userEmailOverride: string | undefined;
172
+ userNameOverride: string | undefined;
173
+ embeddingModel: string;
174
+ embeddingDimensions: number;
175
+ embeddingUseTaskPrefixes: boolean;
176
+ embeddingApiUrl: string | undefined;
177
+ embeddingApiKey: string | undefined;
178
+ similarityThreshold: number;
179
+ maxMemories: number;
180
+ maxProfileItems: number;
181
+ injectProfile: boolean;
182
+ containerTagPrefix: string;
183
+ autoCaptureEnabled: boolean;
184
+ autoCaptureMaxIterations: number;
185
+ autoCaptureIterationTimeout: number;
186
+ autoCaptureMaxRetries: number;
187
+ autoCaptureMaxContextBytes: number;
188
+ autoCaptureLanguage: string | undefined;
189
+ memoryProvider: "openai-chat" | "openai-responses" | "anthropic" | "minimax" | "orcarouter";
190
+ memoryModel: string | undefined;
191
+ memoryApiUrl: string | undefined;
192
+ memoryApiKey: string | undefined;
193
+ memoryTemperature: number | false | undefined;
194
+ memoryExtraParams: Record<string, unknown> | undefined;
195
+ opencodeProvider: string | undefined;
196
+ opencodeModel: string | undefined;
197
+ piProvider: string | undefined;
198
+ piModel: string | undefined;
199
+ autoCaptureProviderStatus: AutoCaptureProviderStatus;
200
+ aiSessionRetentionDays: number;
201
+ webServerEnabled: boolean;
202
+ webServerPort: number;
203
+ webServerHost: string;
204
+ webServerAuthPassword: string | undefined;
205
+ webServerAuthUsername: string | undefined;
206
+ webServerApiToken: string | undefined;
207
+ maxVectorsPerShard: number;
208
+ autoCleanupEnabled: boolean;
209
+ autoCleanupRetentionDays: number;
210
+ deduplicationEnabled: boolean;
211
+ deduplicationSimilarityThreshold: number;
212
+ userProfileAnalysisInterval: number;
213
+ userProfileMaxContextBytes: number;
214
+ userProfileDisplayPreferences: number;
215
+ userProfileDisplayPatterns: number;
216
+ userProfileDisplayWorkflows: number;
217
+ userProfileInjectPreferences: number;
218
+ userProfileInjectPatterns: number;
219
+ userProfileInjectWorkflows: number;
220
+ userProfileConfidenceDecayDays: number;
221
+ userProfileChangelogRetentionCount: number;
222
+ userProfileEmbeddingThresholdSameCat: number;
223
+ userProfileEmbeddingThresholdSameCatWeak: number;
224
+ userProfileEmbeddingThresholdCrossCat: number;
225
+ userProfileEmbeddingThresholdCrossCatWeak: number;
226
+ userProfileCentroidDriftThreshold: number;
227
+ userProfileEmbeddingMinDescriptionLength: number;
228
+ userProfileMinEvidenceForRetention: number;
229
+ userProfileAutoCleanupEnabled: boolean;
230
+ userProfileAutoCleanupInterval: number;
231
+ userProfileValidationEnabled: boolean;
232
+ userProfileStaleDays: number;
233
+ showAutoCaptureToasts: boolean;
234
+ showUserProfileToasts: boolean;
235
+ showErrorToasts: boolean;
236
+ memory: {
237
+ defaultScope: "project" | "all-projects" | undefined;
238
+ };
239
+ compaction: {
240
+ enabled: boolean | undefined;
241
+ memoryLimit: number | undefined;
242
+ };
243
+ chatMessage: {
244
+ enabled: boolean | undefined;
245
+ maxMemories: number | undefined;
246
+ excludeCurrentSession: boolean | undefined;
247
+ maxAgeDays: number | undefined;
248
+ injectOn: "first" | "always";
249
+ };
250
+ };
251
+ type RuntimeConfig = ReturnType<typeof buildConfig>;
252
+ interface AutoCaptureProviderRuntimeConfig {
253
+ opencodeProvider?: string;
254
+ opencodeModel?: string;
255
+ memoryProvider?: string;
256
+ memoryModel?: string;
257
+ memoryApiUrl?: string;
258
+ memoryApiKey?: string;
259
+ }
260
+ export type AutoCaptureProviderStatus = {
261
+ ready: true;
262
+ mode: "opencode" | "manual";
263
+ issues: [];
264
+ } | {
265
+ ready: false;
266
+ issues: string[];
267
+ };
268
+ export { isPlaceholderApiKey };
269
+ export declare function getAutoCaptureProviderStatus(config: AutoCaptureProviderRuntimeConfig): AutoCaptureProviderStatus;
270
+ export declare function hasAutoCaptureProviderConfig(config?: RuntimeConfig): boolean;
271
+ export declare function initConfig(directory: string): void;
272
+ /**
273
+ * initConfig plus the one-time legacy store migration (decision D13).
274
+ *
275
+ * The migration only applies while the resolved store sits on a DEFAULT
276
+ * layout (legacy ~/.opencode-mem/data or omms ~/.omms/data). The legacy
277
+ * config template pinned "storagePath": "~/.opencode-mem/data" explicitly,
278
+ * so key-presence cannot be the skip signal; a genuinely custom store path
279
+ * (the user pointing storage elsewhere) skips migration entirely.
280
+ * OMMS_SKIP_LEGACY_MIGRATION=1 (set by the test preload) disables the
281
+ * automatic run without affecting resolution.
282
+ */
283
+ export declare function initConfigWithLegacyMigration(directory: string): void;
284
+ export declare function isConfigured(): boolean;
285
+ /**
286
+ * The containerTagPrefix explicitly set in the merged config files, or
287
+ * undefined when only the default applies. The tag prefix migration warns
288
+ * when this is "opencode" after migration (the override matches no rows).
289
+ */
290
+ export declare function getExplicitContainerTagPrefix(): string | undefined;