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.
- package/LICENSE +21 -0
- package/README.md +587 -0
- package/dist/adapters/opencode/auto-capture-host.d.ts +3 -0
- package/dist/adapters/opencode/auto-capture-host.js +29 -0
- package/dist/adapters/opencode/auto-capture-summary.d.ts +4 -0
- package/dist/adapters/opencode/auto-capture-summary.js +147 -0
- package/dist/adapters/opencode/conversation.d.ts +2 -0
- package/dist/adapters/opencode/conversation.js +50 -0
- package/dist/adapters/opencode/user-prompt.d.ts +9 -0
- package/dist/adapters/opencode/user-prompt.js +26 -0
- package/dist/adapters/pi/capture.d.ts +41 -0
- package/dist/adapters/pi/capture.js +91 -0
- package/dist/adapters/pi/conversation.d.ts +38 -0
- package/dist/adapters/pi/conversation.js +118 -0
- package/dist/adapters/pi/extension.d.ts +18 -0
- package/dist/adapters/pi/extension.js +234 -0
- package/dist/adapters/pi/import-command.d.ts +29 -0
- package/dist/adapters/pi/import-command.js +232 -0
- package/dist/adapters/pi/profile.d.ts +39 -0
- package/dist/adapters/pi/profile.js +148 -0
- package/dist/adapters/pi/provider.d.ts +50 -0
- package/dist/adapters/pi/provider.js +77 -0
- package/dist/config.d.ts +290 -0
- package/dist/config.js +742 -0
- package/dist/core/capture-context.d.ts +4 -0
- package/dist/core/capture-context.js +132 -0
- package/dist/core/capture.d.ts +15 -0
- package/dist/core/capture.js +68 -0
- package/dist/core/extraction.d.ts +80 -0
- package/dist/core/extraction.js +140 -0
- package/dist/core/host.d.ts +52 -0
- package/dist/core/host.js +1 -0
- package/dist/core/memory-operations.d.ts +27 -0
- package/dist/core/memory-operations.js +247 -0
- package/dist/core/retrieval.d.ts +12 -0
- package/dist/core/retrieval.js +72 -0
- package/dist/importer/discovery.d.ts +31 -0
- package/dist/importer/discovery.js +88 -0
- package/dist/importer/importer.d.ts +87 -0
- package/dist/importer/importer.js +260 -0
- package/dist/importer/ledger.d.ts +44 -0
- package/dist/importer/ledger.js +137 -0
- package/dist/importer/session-loader.d.ts +19 -0
- package/dist/importer/session-loader.js +12 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +601 -0
- package/dist/plugin.d.ts +9 -0
- package/dist/plugin.js +11 -0
- package/dist/services/ai/ai-provider-factory.d.ts +7 -0
- package/dist/services/ai/ai-provider-factory.js +41 -0
- package/dist/services/ai/api-key-placeholder.d.ts +1 -0
- package/dist/services/ai/api-key-placeholder.js +14 -0
- package/dist/services/ai/internal-capture-sessions.d.ts +6 -0
- package/dist/services/ai/internal-capture-sessions.js +33 -0
- package/dist/services/ai/opencode-diagnostics.d.ts +7 -0
- package/dist/services/ai/opencode-diagnostics.js +36 -0
- package/dist/services/ai/opencode-host-config.d.ts +10 -0
- package/dist/services/ai/opencode-host-config.js +51 -0
- package/dist/services/ai/opencode-provider-loader.d.ts +3 -0
- package/dist/services/ai/opencode-provider-loader.js +4 -0
- package/dist/services/ai/opencode-provider.d.ts +92 -0
- package/dist/services/ai/opencode-provider.js +419 -0
- package/dist/services/ai/opencode-sdk-client.d.ts +6 -0
- package/dist/services/ai/opencode-sdk-client.js +38 -0
- package/dist/services/ai/profile-llm-client.d.ts +2 -0
- package/dist/services/ai/profile-llm-client.js +27 -0
- package/dist/services/ai/provider-config.d.ts +17 -0
- package/dist/services/ai/provider-config.js +30 -0
- package/dist/services/ai/providers/anthropic-messages.d.ts +34 -0
- package/dist/services/ai/providers/anthropic-messages.js +220 -0
- package/dist/services/ai/providers/base-provider.d.ts +24 -0
- package/dist/services/ai/providers/base-provider.js +24 -0
- package/dist/services/ai/providers/google-gemini.d.ts +15 -0
- package/dist/services/ai/providers/google-gemini.js +228 -0
- package/dist/services/ai/providers/minimax.d.ts +35 -0
- package/dist/services/ai/providers/minimax.js +55 -0
- package/dist/services/ai/providers/openai-chat-completion.d.ts +22 -0
- package/dist/services/ai/providers/openai-chat-completion.js +387 -0
- package/dist/services/ai/providers/openai-responses.d.ts +13 -0
- package/dist/services/ai/providers/openai-responses.js +182 -0
- package/dist/services/ai/providers/orcarouter.d.ts +51 -0
- package/dist/services/ai/providers/orcarouter.js +66 -0
- package/dist/services/ai/session/ai-session-manager.d.ts +24 -0
- package/dist/services/ai/session/ai-session-manager.js +211 -0
- package/dist/services/ai/session/session-types.d.ts +42 -0
- package/dist/services/ai/session/session-types.js +1 -0
- package/dist/services/ai/tools/tool-schema.d.ts +40 -0
- package/dist/services/ai/tools/tool-schema.js +24 -0
- package/dist/services/ai/validators/user-profile-validator.d.ts +12 -0
- package/dist/services/ai/validators/user-profile-validator.js +114 -0
- package/dist/services/api-handlers.d.ts +186 -0
- package/dist/services/api-handlers.js +1284 -0
- package/dist/services/auth-token.d.ts +14 -0
- package/dist/services/auth-token.js +59 -0
- package/dist/services/auto-capture.d.ts +3 -0
- package/dist/services/auto-capture.js +127 -0
- package/dist/services/cleanup-service.d.ts +22 -0
- package/dist/services/cleanup-service.js +109 -0
- package/dist/services/client.d.ts +134 -0
- package/dist/services/client.js +327 -0
- package/dist/services/context.d.ts +10 -0
- package/dist/services/context.js +27 -0
- package/dist/services/cors.d.ts +12 -0
- package/dist/services/cors.js +52 -0
- package/dist/services/deduplication-service.d.ts +28 -0
- package/dist/services/deduplication-service.js +111 -0
- package/dist/services/embedding.d.ts +36 -0
- package/dist/services/embedding.js +200 -0
- package/dist/services/jsonc.d.ts +6 -0
- package/dist/services/jsonc.js +76 -0
- package/dist/services/language-detector.d.ts +2 -0
- package/dist/services/language-detector.js +33 -0
- package/dist/services/legacy-migration.d.ts +77 -0
- package/dist/services/legacy-migration.js +343 -0
- package/dist/services/logger.d.ts +1 -0
- package/dist/services/logger.js +119 -0
- package/dist/services/memory-portability-service.d.ts +37 -0
- package/dist/services/memory-portability-service.js +340 -0
- package/dist/services/memory-scope.d.ts +16 -0
- package/dist/services/memory-scope.js +43 -0
- package/dist/services/migration-service.d.ts +42 -0
- package/dist/services/migration-service.js +307 -0
- package/dist/services/onnxruntime-resolve.d.ts +24 -0
- package/dist/services/onnxruntime-resolve.js +174 -0
- package/dist/services/privacy.d.ts +26 -0
- package/dist/services/privacy.js +69 -0
- package/dist/services/request-timeouts.d.ts +9 -0
- package/dist/services/request-timeouts.js +11 -0
- package/dist/services/runtime-require.d.ts +17 -0
- package/dist/services/runtime-require.js +75 -0
- package/dist/services/secret-resolver.d.ts +1 -0
- package/dist/services/secret-resolver.js +65 -0
- package/dist/services/shard-inventory-service.d.ts +69 -0
- package/dist/services/shard-inventory-service.js +315 -0
- package/dist/services/shard-path-migration-service.d.ts +31 -0
- package/dist/services/shard-path-migration-service.js +367 -0
- package/dist/services/tag-prefix-migration.d.ts +60 -0
- package/dist/services/tag-prefix-migration.js +439 -0
- package/dist/services/tag-prefix-scan.d.ts +26 -0
- package/dist/services/tag-prefix-scan.js +91 -0
- package/dist/services/tags.d.ts +29 -0
- package/dist/services/tags.js +251 -0
- package/dist/services/turso/connection-manager.d.ts +15 -0
- package/dist/services/turso/connection-manager.js +163 -0
- package/dist/services/turso/cross-process-write-lock.d.ts +1 -0
- package/dist/services/turso/cross-process-write-lock.js +89 -0
- package/dist/services/turso/legacy-migrator.d.ts +1 -0
- package/dist/services/turso/legacy-migrator.js +540 -0
- package/dist/services/turso/lifecycle.d.ts +1 -0
- package/dist/services/turso/lifecycle.js +14 -0
- package/dist/services/turso/operation-lock.d.ts +2 -0
- package/dist/services/turso/operation-lock.js +61 -0
- package/dist/services/turso/ready.d.ts +2 -0
- package/dist/services/turso/ready.js +36 -0
- package/dist/services/turso/shard-manager.d.ts +38 -0
- package/dist/services/turso/shard-manager.js +496 -0
- package/dist/services/turso/sqlite-handle-release.d.ts +16 -0
- package/dist/services/turso/sqlite-handle-release.js +56 -0
- package/dist/services/turso/turso-db.d.ts +18 -0
- package/dist/services/turso/turso-db.js +53 -0
- package/dist/services/turso/types.d.ts +42 -0
- package/dist/services/turso/types.js +1 -0
- package/dist/services/turso/vector-search.d.ts +41 -0
- package/dist/services/turso/vector-search.js +384 -0
- package/dist/services/turso/vector-utils.d.ts +7 -0
- package/dist/services/turso/vector-utils.js +67 -0
- package/dist/services/user-memory-learning.d.ts +97 -0
- package/dist/services/user-memory-learning.js +673 -0
- package/dist/services/user-profile/ai-cleanup.d.ts +58 -0
- package/dist/services/user-profile/ai-cleanup.js +486 -0
- package/dist/services/user-profile/profile-context.d.ts +1 -0
- package/dist/services/user-profile/profile-context.js +105 -0
- package/dist/services/user-profile/profile-utils.d.ts +2 -0
- package/dist/services/user-profile/profile-utils.js +45 -0
- package/dist/services/user-profile/types.d.ts +92 -0
- package/dist/services/user-profile/types.js +1 -0
- package/dist/services/user-profile/user-profile-manager.d.ts +65 -0
- package/dist/services/user-profile/user-profile-manager.js +1660 -0
- package/dist/services/user-prompt/user-prompt-manager.d.ts +53 -0
- package/dist/services/user-prompt/user-prompt-manager.js +303 -0
- package/dist/services/web-api-auth.d.ts +3 -0
- package/dist/services/web-api-auth.js +25 -0
- package/dist/services/web-auth.d.ts +46 -0
- package/dist/services/web-auth.js +105 -0
- package/dist/services/web-server.d.ts +57 -0
- package/dist/services/web-server.js +659 -0
- package/dist/shared/api/index.d.ts +4 -0
- package/dist/shared/api/index.js +2 -0
- package/dist/shared/api/portability-schemas.d.ts +56 -0
- package/dist/shared/api/portability-schemas.js +39 -0
- package/dist/shared/api/schemas.d.ts +295 -0
- package/dist/shared/api/schemas.js +134 -0
- package/dist/shared/api/types.d.ts +28 -0
- package/dist/shared/api/types.js +1 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/index.js +1 -0
- package/dist/utils/context-limit.d.ts +10 -0
- package/dist/utils/context-limit.js +43 -0
- package/dist/utils/math.d.ts +7 -0
- package/dist/utils/math.js +48 -0
- package/dist/utils/profile.d.ts +2 -0
- package/dist/utils/profile.js +15 -0
- package/dist/v2/adapter.d.ts +5 -0
- package/dist/v2/adapter.js +218 -0
- package/dist/v2/legacy-client.d.ts +15 -0
- package/dist/v2/legacy-client.js +257 -0
- package/dist/v2/memory-bridge.d.ts +18 -0
- package/dist/v2/memory-bridge.js +29 -0
- package/dist/v2/plugin.d.ts +3 -0
- package/dist/v2/plugin.js +24 -0
- package/dist/web/assets/index-DPjEpD1h.css +2 -0
- package/dist/web/assets/index-do26c4JJ.js +122 -0
- package/dist/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/index.html +14 -0
- package/dist/web/omms-icon.png +0 -0
- 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
|
+
}
|
package/dist/config.d.ts
ADDED
|
@@ -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;
|