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,114 @@
1
+ export class UserProfileValidator {
2
+ static validate(data) {
3
+ const errors = [];
4
+ if (!data || typeof data !== "object") {
5
+ return { valid: false, errors: ["Response is not an object"] };
6
+ }
7
+ if (Array.isArray(data)) {
8
+ return { valid: false, errors: ["Response cannot be an array"] };
9
+ }
10
+ const keys = Object.keys(data);
11
+ if (keys.length === 0) {
12
+ return { valid: false, errors: ["Response object is empty"] };
13
+ }
14
+ for (const key of keys) {
15
+ if (data[key] === undefined || data[key] === null) {
16
+ errors.push(`Field '${key}' is null or undefined`);
17
+ }
18
+ }
19
+ if (errors.length > 0) {
20
+ return { valid: false, errors };
21
+ }
22
+ if (data.preferences) {
23
+ const prefErrors = this.validatePreferences(data.preferences);
24
+ errors.push(...prefErrors);
25
+ }
26
+ if (data.patterns) {
27
+ const patternErrors = this.validatePatterns(data.patterns);
28
+ errors.push(...patternErrors);
29
+ }
30
+ if (data.workflows) {
31
+ const workflowErrors = this.validateWorkflows(data.workflows);
32
+ errors.push(...workflowErrors);
33
+ }
34
+ if (errors.length > 0) {
35
+ return { valid: false, errors };
36
+ }
37
+ return { valid: true, errors: [], data: data };
38
+ }
39
+ static validatePreferences(preferences) {
40
+ const errors = [];
41
+ if (!Array.isArray(preferences)) {
42
+ return ["preferences must be an array"];
43
+ }
44
+ for (let i = 0; i < preferences.length; i++) {
45
+ const pref = preferences[i];
46
+ if (!pref || typeof pref !== "object") {
47
+ errors.push(`preferences[${i}] is not an object`);
48
+ continue;
49
+ }
50
+ if (!pref.category || typeof pref.category !== "string") {
51
+ errors.push(`preferences[${i}].category is missing or invalid`);
52
+ }
53
+ if (!pref.description || typeof pref.description !== "string") {
54
+ errors.push(`preferences[${i}].description is missing or invalid`);
55
+ }
56
+ if (typeof pref.confidence !== "number" ||
57
+ !Number.isFinite(pref.confidence) ||
58
+ pref.confidence < 0 ||
59
+ pref.confidence > 1) {
60
+ errors.push(`preferences[${i}].confidence must be a finite number between 0 and 1`);
61
+ }
62
+ if (!Array.isArray(pref.evidence)) {
63
+ errors.push(`preferences[${i}].evidence must be an array`);
64
+ }
65
+ else if (pref.evidence.length === 0) {
66
+ errors.push(`preferences[${i}].evidence cannot be empty`);
67
+ }
68
+ }
69
+ return errors;
70
+ }
71
+ static validatePatterns(patterns) {
72
+ const errors = [];
73
+ if (!Array.isArray(patterns)) {
74
+ return ["patterns must be an array"];
75
+ }
76
+ for (let i = 0; i < patterns.length; i++) {
77
+ const pattern = patterns[i];
78
+ if (!pattern || typeof pattern !== "object") {
79
+ errors.push(`patterns[${i}] is not an object`);
80
+ continue;
81
+ }
82
+ if (!pattern.category || typeof pattern.category !== "string") {
83
+ errors.push(`patterns[${i}].category is missing or invalid`);
84
+ }
85
+ if (!pattern.description || typeof pattern.description !== "string") {
86
+ errors.push(`patterns[${i}].description is missing or invalid`);
87
+ }
88
+ }
89
+ return errors;
90
+ }
91
+ static validateWorkflows(workflows) {
92
+ const errors = [];
93
+ if (!Array.isArray(workflows)) {
94
+ return ["workflows must be an array"];
95
+ }
96
+ for (let i = 0; i < workflows.length; i++) {
97
+ const workflow = workflows[i];
98
+ if (!workflow || typeof workflow !== "object") {
99
+ errors.push(`workflows[${i}] is not an object`);
100
+ continue;
101
+ }
102
+ if (!workflow.description || typeof workflow.description !== "string") {
103
+ errors.push(`workflows[${i}].description is missing or invalid`);
104
+ }
105
+ if (!Array.isArray(workflow.steps)) {
106
+ errors.push(`workflows[${i}].steps must be an array`);
107
+ }
108
+ else if (workflow.steps.length === 0) {
109
+ errors.push(`workflows[${i}].steps cannot be empty`);
110
+ }
111
+ }
112
+ return errors;
113
+ }
114
+ }
@@ -0,0 +1,186 @@
1
+ import type { MemoryType } from "../types/index.js";
2
+ import type { UserProfileData } from "./user-profile/types.js";
3
+ interface ApiResponse<T = any> {
4
+ success: boolean;
5
+ data?: T;
6
+ error?: string;
7
+ }
8
+ interface Memory {
9
+ id: string;
10
+ content: string;
11
+ type?: string;
12
+ tags?: string[];
13
+ createdAt: string;
14
+ updatedAt?: string;
15
+ metadata?: Record<string, unknown>;
16
+ displayName?: string;
17
+ userName?: string;
18
+ userEmail?: string;
19
+ projectPath?: string;
20
+ projectName?: string;
21
+ gitRepoUrl?: string;
22
+ isPinned?: boolean;
23
+ }
24
+ interface TagInfo {
25
+ tag: string;
26
+ tags?: string[];
27
+ displayName?: string;
28
+ userName?: string;
29
+ userEmail?: string;
30
+ projectPath?: string;
31
+ projectName?: string;
32
+ gitRepoUrl?: string;
33
+ }
34
+ interface PaginatedResponse<T> {
35
+ items: T[];
36
+ total: number;
37
+ page: number;
38
+ pageSize: number;
39
+ totalPages: number;
40
+ }
41
+ export declare function handleListTags(): Promise<ApiResponse<{
42
+ project: TagInfo[];
43
+ }>>;
44
+ export declare function handleListMemories(tag?: string, page?: number, pageSize?: number, includePrompts?: boolean): Promise<ApiResponse<PaginatedResponse<Memory | any>>>;
45
+ export declare function handleAddMemory(data: {
46
+ content: string;
47
+ containerTag: string;
48
+ type?: MemoryType;
49
+ tags?: string[];
50
+ displayName?: string;
51
+ userName?: string;
52
+ userEmail?: string;
53
+ projectPath?: string;
54
+ projectName?: string;
55
+ gitRepoUrl?: string;
56
+ }): Promise<ApiResponse<{
57
+ id: string;
58
+ }>>;
59
+ export declare function handleDeleteMemory(id: string, cascade?: boolean): Promise<ApiResponse<{
60
+ deletedPrompt: boolean;
61
+ }>>;
62
+ export declare function handleBulkDelete(ids: string[], cascade?: boolean): Promise<ApiResponse<{
63
+ deleted: number;
64
+ }>>;
65
+ export declare function handleUpdateMemory(id: string, data: {
66
+ content?: string;
67
+ type?: MemoryType;
68
+ tags?: string[];
69
+ }): Promise<ApiResponse<void>>;
70
+ interface FormattedPrompt {
71
+ type: "prompt";
72
+ id: string;
73
+ sessionId: string;
74
+ content: string;
75
+ createdAt: string;
76
+ projectPath: string | null;
77
+ linkedMemoryId: string | null;
78
+ similarity?: number;
79
+ isContext?: boolean;
80
+ }
81
+ interface FormattedMemory {
82
+ type: "memory";
83
+ id: string;
84
+ content: string;
85
+ memoryType?: string;
86
+ tags?: string[];
87
+ createdAt: string;
88
+ updatedAt?: string;
89
+ similarity?: number;
90
+ metadata?: Record<string, unknown>;
91
+ displayName?: string;
92
+ userName?: string;
93
+ userEmail?: string;
94
+ projectPath?: string;
95
+ projectName?: string;
96
+ gitRepoUrl?: string;
97
+ isPinned?: boolean;
98
+ linkedPromptId?: string;
99
+ isContext?: boolean;
100
+ }
101
+ type SearchResultItem = FormattedPrompt | FormattedMemory;
102
+ export declare function handleSearch(query: string, tag?: string, page?: number, pageSize?: number): Promise<ApiResponse<PaginatedResponse<SearchResultItem>>>;
103
+ export declare function handleStats(): Promise<ApiResponse<{
104
+ total: number;
105
+ byScope: {
106
+ user: number;
107
+ project: number;
108
+ };
109
+ byType: Record<string, number>;
110
+ }>>;
111
+ export declare function handlePinMemory(id: string): Promise<ApiResponse<void>>;
112
+ export declare function handleUnpinMemory(id: string): Promise<ApiResponse<void>>;
113
+ export declare function handleRunCleanup(): Promise<ApiResponse<{
114
+ deletedCount: number;
115
+ userCount: number;
116
+ projectCount: number;
117
+ }>>;
118
+ export declare function handleRunDeduplication(): Promise<ApiResponse<{
119
+ exactDuplicatesDeleted: number;
120
+ nearDuplicateGroups: any[];
121
+ }>>;
122
+ export declare function handleDetectMigration(): Promise<ApiResponse<{
123
+ needsMigration: boolean;
124
+ configDimensions: number;
125
+ configModel: string;
126
+ shardMismatches: any[];
127
+ }>>;
128
+ export declare function handleRunMigration(strategy: "fresh-start" | "re-embed"): Promise<ApiResponse<{
129
+ success: boolean;
130
+ strategy: string;
131
+ deletedShards: number;
132
+ reEmbeddedMemories: number;
133
+ duration: number;
134
+ error?: string;
135
+ }>>;
136
+ export declare function handleDeletePrompt(id: string, cascade?: boolean): Promise<ApiResponse<{
137
+ deletedMemory: boolean;
138
+ }>>;
139
+ export declare function handleBulkDeletePrompts(ids: string[], cascade?: boolean): Promise<ApiResponse<{
140
+ deleted: number;
141
+ }>>;
142
+ export declare function handleGetUserProfile(userId?: string): Promise<ApiResponse<any>>;
143
+ export declare function handleGetProfileChangelog(profileId: string, limit?: number): Promise<ApiResponse<any[]>>;
144
+ export declare function handleGetProfileSnapshot(changelogId: string): Promise<ApiResponse<any>>;
145
+ export declare function handleRefreshProfile(userId?: string): Promise<ApiResponse<any>>;
146
+ export declare function handleAICleanup(userId?: string, includeIds?: string[], profileVersion?: number): Promise<ApiResponse<any>>;
147
+ /**
148
+ * Merge an AI-cleanup result into a full profile.
149
+ * When includeIds is set, only scoped items are mutated; everything else is preserved.
150
+ */
151
+ export declare function mergeCleanupIntoProfile(args: {
152
+ currentProfile: UserProfileData;
153
+ oldProfileData: UserProfileData;
154
+ cleanedData: UserProfileData;
155
+ includeIds?: string[];
156
+ acceptedMerged?: string[][];
157
+ acceptedRemoved?: string[];
158
+ allMerged?: Array<{
159
+ ids: string[];
160
+ result: string;
161
+ }>;
162
+ allRemovedIds?: string[];
163
+ /** True when the client sent acceptance arrays (even if empty = reject all). */
164
+ explicitAcceptance?: boolean;
165
+ }): UserProfileData;
166
+ export declare function handleApplyCleanup(userId?: string, body?: any): Promise<ApiResponse<any>>;
167
+ export declare function handleUpdateProfileItem(body?: any): Promise<ApiResponse<any>>;
168
+ export declare function handleDetectTagMigration(): Promise<ApiResponse<{
169
+ needsMigration: boolean;
170
+ count: number;
171
+ }>>;
172
+ interface MigrationProgress {
173
+ processed: number;
174
+ total: number;
175
+ currentBatch: number;
176
+ totalBatches: number;
177
+ isComplete: boolean;
178
+ errors: string[];
179
+ }
180
+ export declare function handleGetTagMigrationProgress(): Promise<ApiResponse<MigrationProgress>>;
181
+ export declare function handleRunTagMigrationBatch(batchSize?: number): Promise<ApiResponse<{
182
+ processed: number;
183
+ total: number;
184
+ hasMore: boolean;
185
+ }>>;
186
+ export {};