dsh-mnemon-source-memory-spaces 0.5.20 → 0.5.22

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.
@@ -0,0 +1,20 @@
1
+ import type { MemoryComponentHost } from 'dsh-mnemon/client';
2
+ import type { MemoryProviderServiceCatalog, MemoryProviderServiceView, MnemonEmbeddingFill, MnemonEmbeddingStatus, UpdateMemoryProviderServiceRequest } from '../contracts.ts';
3
+ /**
4
+ * What these settings ask of the Host, through the operations dsh-mnemon
5
+ * serves Memory Spaces on its configuration page.
6
+ */
7
+ export interface MemorySpacesSettingsClient {
8
+ /** Whether the Host finds the Mnemon CLI that Mnemon Native runs. */
9
+ statusSummary(): Promise<{
10
+ commandFound: boolean;
11
+ }>;
12
+ providerServices(): Promise<MemoryProviderServiceCatalog>;
13
+ updateProviderService(request: UpdateMemoryProviderServiceRequest): Promise<MemoryProviderServiceView>;
14
+ embeddingStatus(): Promise<MnemonEmbeddingStatus>;
15
+ /** Fill in the vectors a Mnemon Native space lacks (#392). */
16
+ fillEmbeddings(memoryBodyId: string): Promise<MnemonEmbeddingFill>;
17
+ }
18
+ type Operations = NonNullable<MemoryComponentHost['operations']>;
19
+ export declare function memorySpacesSettingsClient(operations: Operations): MemorySpacesSettingsClient;
20
+ export {};
@@ -0,0 +1,26 @@
1
+ import { type DshLocale } from './presentation.ts';
2
+ import { type ReactNode } from 'react';
3
+ import { type MemoryComponentSettingsProps, type MemoryComponentUIContext } from 'dsh-mnemon/client';
4
+ /**
5
+ * Whether dsh-mnemon yields the settings it keeps for Memory Spaces to these.
6
+ * One that exports the priority it keeps them at promises both that they do
7
+ * not collide with these and that it lends these `host`. dsh-mnemon 0.5.31 and
8
+ * earlier draw them itself and lend nothing, so registering them there would
9
+ * show a second, unworkable copy.
10
+ */
11
+ export declare function yieldsComponentSettings(client: {
12
+ readonly MNEMON_COMPONENT_FALLBACK_PRIORITY?: unknown;
13
+ }): boolean;
14
+ /** Memory Spaces' own settings on its page under Plugins: its Providers and the embedding Mnemon Native reads. */
15
+ export declare function installMemorySpacesSettings(ctx: MemoryComponentUIContext & {
16
+ locale?: DshLocale | undefined;
17
+ }): () => void;
18
+ /**
19
+ * Memory Spaces' own settings: the Providers that store its spaces, Mnemon
20
+ * Native first with the embedding runtime only Native reads. They need what
21
+ * dsh-mnemon lends them; without it they show nothing. With DSH's language
22
+ * service they translate as dsh-mnemon drew them, through its language chain.
23
+ */
24
+ export declare function MemorySpacesSettings(props: MemoryComponentSettingsProps & {
25
+ locale?: DshLocale | undefined;
26
+ }): ReactNode;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import { installMemorySourceUI, type MemorySourcePageProps, type MnemonSourceManagementClient, type MnemonTranslate } from 'dsh-mnemon/client';
2
+ import { installMemorySourceUI, type MemoryComponentUIContext, type MemorySourcePageProps, type MnemonSourceManagementClient, type MnemonTranslate } from 'dsh-mnemon/client';
3
3
  import type { MemorySpacesStatus } from '../contracts.ts';
4
4
  import type { MemorySpacesPageClient } from './api.ts';
5
5
  /** The adapter never gets a transport or chooses another Source instance. */
@@ -13,5 +13,5 @@ export declare function MemorySpacesSourcePage(props: MemorySourcePageProps & {
13
13
  }): ReactNode;
14
14
  export declare function installMemorySpacesUI(ctx: Parameters<typeof installMemorySourceUI>[0], t?: MnemonTranslate): () => void;
15
15
  export declare const inject: string[];
16
- export declare function apply(ctx: Parameters<typeof installMemorySourceUI>[0]): void;
16
+ export declare function apply(ctx: Parameters<typeof installMemorySourceUI>[0] & MemoryComponentUIContext): void;
17
17
  export {};
@@ -0,0 +1,44 @@
1
+ import type { JSX } from 'react';
2
+ import type { Insight, MemorySpaceProvider, MemorySpaceView, MemoryProviderConnection, MemoryProviderDescriptor, MemoryProviderId, MemoryReadSource } from '../contracts.ts';
3
+ import { type MnemonTranslate } from 'dsh-mnemon/client';
4
+ export type ProviderDrafts = Partial<Record<MemoryProviderId, MemoryProviderConnection>>;
5
+ export declare function mergeProviderDefaults(providers: readonly MemoryProviderDescriptor[], current: ProviderDrafts): ProviderDrafts;
6
+ export declare function providerDraftComplete(provider: MemoryProviderDescriptor | undefined, connection: MemoryProviderConnection | undefined): boolean;
7
+ /** Keep a ready provider; otherwise Mnemon Native while its CLI is available, then the first other ready one. */
8
+ export declare function readyProviderId(providers: readonly MemoryProviderDescriptor[], current?: MemoryProviderId): MemoryProviderId | undefined;
9
+ /** Ready Providers first, in catalog order, so the choices that work lead the list. */
10
+ export declare function readyFirst(providers: readonly MemoryProviderDescriptor[]): MemoryProviderDescriptor[];
11
+ /** Why a provider cannot be chosen: Mnemon Native needs its CLI, the others a service configured on the dsh-mnemon page under Plugins. */
12
+ export declare function providerUnavailableKey(provider: MemoryProviderDescriptor): 'overview.nativeCliRequired' | 'overview.providerServiceRequired';
13
+ export declare function nativeSpaceProvider(provider: MemorySpaceProvider): boolean;
14
+ /** Shared memory-level Provider form used by manual creation, editing, and distillation policy. */
15
+ export declare function ProviderMemoryFields(props: {
16
+ provider: MemoryProviderDescriptor;
17
+ connection: MemoryProviderConnection;
18
+ onChange: (key: string, value: string | number | boolean) => void;
19
+ body?: MemorySpaceView;
20
+ clearSecrets?: string[];
21
+ onClearSecretsChange?: (keys: string[]) => void;
22
+ }): JSX.Element;
23
+ export declare function categoryLabel(t: MnemonTranslate, category: string): string;
24
+ export declare function insightKey(insight: Insight): string;
25
+ export declare function MemoryProviderBadge(props: {
26
+ providerId: MemoryProviderId;
27
+ label: string;
28
+ }): JSX.Element;
29
+ export declare function ReadSourcePanel(props: {
30
+ title: string;
31
+ hint?: string;
32
+ sources: readonly MemoryReadSource[];
33
+ selectedBodyId?: string | undefined;
34
+ onSelect?: (memoryBodyId: string | undefined) => void;
35
+ }): JSX.Element | null;
36
+ export declare function InsightCard(props: {
37
+ insight: Insight;
38
+ writeEnabled: boolean;
39
+ onForget: (insight: Insight) => Promise<void>;
40
+ onRelated?: (insight: Insight) => void;
41
+ onClone?: (insight: Insight) => void;
42
+ }): JSX.Element;
43
+ /** @deprecated Use nativeSpaceProvider. */
44
+ export declare const nativeBodyProvider: typeof nativeSpaceProvider;
@@ -1,3 +1,6 @@
1
1
  export * from './client/pages.tsx';
2
2
  export type * from './client/api.ts';
3
3
  export * from './client/ui.tsx';
4
+ export { MemorySpacesSettings } from './client/settings.tsx';
5
+ export { ProviderIcon, type ProviderIconProps } from './client/ProviderIcon.tsx';
6
+ export { NATIVE_PROVIDER_ID } from './contracts.ts';
@@ -7,6 +7,17 @@
7
7
  export type { MemoryJsonValue as JsonValue } from 'dsh-mnemon/contracts';
8
8
  import type { MemoryReadGrant } from 'dsh-mnemon/contracts';
9
9
  export type MemoryProviderId = string;
10
+ /**
11
+ * The Mnemon Native Provider's id. Its package names its descriptor and driver
12
+ * with it, the Starter installs it under it, and a stored space that names no
13
+ * Provider belongs to it.
14
+ */
15
+ export declare const NATIVE_PROVIDER_ID = "mnemon-native";
16
+ /** Whether a Provider is Mnemon Native: by its implementation type, else by its id. */
17
+ export declare function isNativeProvider(provider: {
18
+ readonly id: MemoryProviderId;
19
+ readonly typeId?: string | undefined;
20
+ }): boolean;
10
21
  export type MemoryProviderConnectionValue = string | number | boolean;
11
22
  export type MemoryProviderConnection = Record<string, MemoryProviderConnectionValue>;
12
23
  export interface MemoryProviderIcon {
@@ -44,7 +55,9 @@ export interface MemoryProviderConfigField {
44
55
  discoveryDefaultFrom?: string;
45
56
  options?: MemoryProviderConfigOption[];
46
57
  }
47
- export type MemoryPlacementCapability = 'graph' | 'entities' | 'related' | 'exact-write' | 'link' | 'forget';
58
+ /** What a persistence strategy's rules can require of a Provider; the Starter's settings schema takes the same list. */
59
+ export declare const MEMORY_PLACEMENT_CAPABILITIES: readonly ["graph", "entities", "related", "exact-write", "link", "forget"];
60
+ export type MemoryPlacementCapability = (typeof MEMORY_PLACEMENT_CAPABILITIES)[number];
48
61
  export type MemoryPlacementPreference = 'balanced' | 'local-first' | 'shared-first';
49
62
  export interface MemoryPlacementRules {
50
63
  allowedProviderIds?: MemoryProviderId[];
@@ -573,6 +586,11 @@ export interface MemorySpacesStatus {
573
586
  timeoutMs: number;
574
587
  defaultRecallLimit: number;
575
588
  recallQuality: ResolvedRecallQualityConfig;
589
+ /**
590
+ * Whether DSH manages Mnemon Native's embedding settings (`embedding.enabled`). While it does
591
+ * not, Mnemon keeps the Host environment and its own defaults. Memory Spaces 0.5.21 and earlier omit it.
592
+ */
593
+ embeddingManaged?: boolean;
576
594
  memoryBodyDirectory: string;
577
595
  memoryBodies: MemorySpaceView[];
578
596
  providerServices?: MemoryProviderRuntimeStatus[];
@@ -615,6 +633,64 @@ export interface EntityRelatedView {
615
633
  items: Insight[];
616
634
  sources: MemoryReadSource[];
617
635
  }
636
+ /** The directory under a storage root that holds Mnemon's stores, one per Native space, and their registry. */
637
+ export declare const MEMORY_SPACES_DIRECTORY = "data";
638
+ /** The registry of Native spaces. The published v1 name and its `bodies` key stay for existing stores and Packs. */
639
+ export declare const MEMORY_SPACE_REGISTRY_FILE = ".dsh-memory-bodies.json";
640
+ /** A Native space's Mnemon store, in the directory its space id names. */
641
+ export declare const MEMORY_SPACE_DATABASE_FILE = "mnemon.db";
642
+ /** A space id, which also names its store's directory. */
643
+ export declare const MEMORY_SPACE_ID_PATTERN: RegExp;
644
+ /** The most characters a space's name holds. */
645
+ export declare const MEMORY_SPACE_NAME_MAX_LENGTH = 100;
646
+ /** The most characters a space's routing description holds. */
647
+ export declare const MEMORY_SPACE_DESCRIPTION_MAX_LENGTH = 1000;
648
+ /** Mnemon's own record of its default store, one space id, at the storage root. */
649
+ export declare const MNEMON_ACTIVE_STORE_FILE = "active";
650
+ /** Third-party Provider services and the spaces they serve, in the storage root's `state` directory. No Pack carries it. */
651
+ export declare const MEMORY_PROVIDER_REGISTRY_FILE = "memory-providers.json";
652
+ /** One Native space as a copy of the registry, such as a Mnemon Pack, carries it. */
653
+ export interface MemorySpaceRegistryEntry {
654
+ id: string;
655
+ name: string;
656
+ description: string;
657
+ active: boolean;
658
+ createdAt: string;
659
+ updatedAt: string;
660
+ }
661
+ export interface MemorySpaceRegistryFile {
662
+ version: 1;
663
+ bodies: MemorySpaceRegistryEntry[];
664
+ }
665
+ /**
666
+ * Read a registry as a copy of it carries it: each id unique and usable as a directory name,
667
+ * every name, description and time present, or the whole registry is refused. Only the fields of
668
+ * the entry above are kept, so a copy holds nothing else, and a registry written back from one
669
+ * no longer holds what else an entry recorded, such as a Native space's `placement` decision or
670
+ * `metadataSource`.
671
+ */
672
+ export declare function parseMemorySpaceRegistry(value: unknown): MemorySpaceRegistryFile;
673
+ /** What a stored registry holds, counted without judging each space. */
674
+ export interface MemorySpaceRegistrySummary {
675
+ /** Whether it is the version 1 registry this Source writes; a legacy version 2 file, migrated when the Source next loads it, is not. */
676
+ valid: boolean;
677
+ /** Every listed space that is an object, whichever version lists it. */
678
+ spaces: number;
679
+ active: number;
680
+ }
681
+ /** Count the spaces of a parsed registry for a read-only inventory. It never throws. */
682
+ export declare function summarizeMemorySpaceRegistry(value: unknown): MemorySpaceRegistrySummary;
683
+ /** What a stored Provider registry holds, counted without judging each entry. */
684
+ export interface MemoryProviderRegistrySummary {
685
+ /** Whether the file is an object at all. Without one, every count is 0. */
686
+ valid: boolean;
687
+ /** Provider services with saved settings, enabled or not. */
688
+ services: number;
689
+ /** Spaces a third-party Provider serves: every entry of the list, well-formed or not. */
690
+ connections: number;
691
+ }
692
+ /** Count a parsed Provider registry for a read-only inventory. It never throws. */
693
+ export declare function summarizeMemoryProviderRegistry(value: unknown): MemoryProviderRegistrySummary;
618
694
  /** @deprecated Use CreateMemorySpaceRequest. The wire shape is unchanged. */
619
695
  export type CreateMemoryBodyRequest = CreateMemorySpaceRequest;
620
696
  /** @deprecated Use UpdateMemorySpaceRequest. The wire shape is unchanged. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon-source-memory-spaces",
3
- "version": "0.5.20",
3
+ "version": "0.5.22",
4
4
  "description": "Memory Spaces Source and its private Provider SDK.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,6 +36,10 @@
36
36
  "./native-cli": {
37
37
  "types": "./lib/native-cli.d.ts",
38
38
  "default": "./lib/native-cli.js"
39
+ },
40
+ "./space-identity": {
41
+ "types": "./lib/space-identity.d.ts",
42
+ "default": "./lib/space-identity.js"
39
43
  }
40
44
  },
41
45
  "files": [
@@ -55,17 +59,16 @@
55
59
  },
56
60
  "peerDependencies": {
57
61
  "@deepseek-ai/cordis": "^4.0.1",
58
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.2 || ^0.2.0-rc.1",
59
62
  "dsh-mnemon": "^0.5.19",
60
63
  "react": "^18.2.0"
61
64
  },
62
65
  "devDependencies": {
63
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
66
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
64
67
  "@testing-library/react": "^16.3.0",
65
68
  "@types/node": "^22.0.0",
66
69
  "@types/react": "^18.3.0",
67
70
  "@types/react-dom": "^18.3.0",
68
- "dsh-mnemon": "^0.5.30",
71
+ "dsh-mnemon": "^0.5.32",
69
72
  "dsh-mnemon-provider-byterover": "^0.5.5",
70
73
  "dsh-mnemon-provider-hindsight": "^0.5.6",
71
74
  "dsh-mnemon-provider-holographic": "^0.5.6",
@@ -98,9 +101,9 @@
98
101
  "micromark-util-sanitize-uri": "^2.0.1",
99
102
  "micromark-util-symbol": "^2.0.1",
100
103
  "shiki": "^4.3.1",
101
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
102
- "@deepseek-ai/dsh-util-code-language": "0.1.7-rc.2",
103
- "@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
104
+ "@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
105
+ "@deepseek-ai/dsh-util-code-language": "0.2.1-rc.2",
106
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.2",
104
107
  "diff": "^9.0.0",
105
108
  "immer": "^10.1.1",
106
109
  "simple-icons": "16.31.0",
@@ -365,7 +365,129 @@
365
365
  "overview.rediscoveryFailed": "{provider} 无法完成发现:{error}",
366
366
  "overview.rediscoveryTimedOut": "{provider} 没有按时响应,稍后可以再次发现。",
367
367
  "overview.rediscoveryDismiss": "知道了",
368
- "overview.newSpace": "新发现"
368
+ "overview.newSpace": "新发现",
369
+ "common.copyId": "复制 ID",
370
+ "common.readOnly": "只读模式",
371
+ "common.activationOnly": "仅可切换激活状态",
372
+ "common.active": "已激活",
373
+ "common.category": "分类",
374
+ "common.importanceLabel": "重要性",
375
+ "common.importance": "重要性 {value}",
376
+ "common.hops": "{count} 跳",
377
+ "common.allCategories": "全部分类",
378
+ "common.memories": "{count} 条记忆",
379
+ "common.edges": "{count} 条连接",
380
+ "card.confirmText": "软删除这条记忆?",
381
+ "card.processing": "处理中…",
382
+ "card.confirmForget": "确认忘记",
383
+ "card.related": "查看关联",
384
+ "card.clone": "基于此新建",
385
+ "card.forget": "忘记",
386
+ "readSources.all": "全部 Provider",
387
+ "readSources.mode.search": "原生检索",
388
+ "readSources.mode.graph": "真实关系图",
389
+ "readSources.mode.projection": "内容投影",
390
+ "readSources.mode.enumerable": "可枚举内容",
391
+ "readSources.mode.query-only": "仅查询",
392
+ "readSources.mode.entities": "实体索引",
393
+ "readSources.mode.unsupported": "不支持",
394
+ "readSources.status.ready": "{count} 条可观察",
395
+ "readSources.status.empty": "已连接 · 暂无内容",
396
+ "readSources.status.query-required": "输入查询后读取",
397
+ "readSources.status.unsupported": "当前表面不可用",
398
+ "readSources.status.unavailable": "连接不可用",
399
+ "readSources.edges": "{count} 条真实关系",
400
+ "readSources.model.mnemon-native": "事实、实体与类型关系",
401
+ "readSources.model.openviking": "目录与分层内容",
402
+ "readSources.model.honcho": "Peer 结论与画像",
403
+ "readSources.model.mem0": "提炼后的语义记忆",
404
+ "readSources.model.hindsight": "记忆单元与知识图",
405
+ "readSources.model.holographic": "可信事实与实体",
406
+ "readSources.model.retaindb": "画像与类型化事实",
407
+ "readSources.model.byterover": "知识树查询",
408
+ "readSources.model.supermemory": "记忆与摄取文档",
409
+ "common.inactive": "未激活",
410
+ "config.providerSecretShow": "显示凭证",
411
+ "config.providerSecretHide": "隐藏凭证",
412
+ "config.providerSecretStoredValue": "已保存凭证",
413
+ "config.providersSpacesOffTitle": "“记忆空间”已关闭",
414
+ "config.providersSpacesOffDetail": "已保存的连接会保留",
415
+ "config.providersSpacesOn": "开启“记忆空间”",
416
+ "config.providersReadOnlyTitle": "dsh-mnemon 当前为只读",
417
+ "config.providersReadOnlyDetail": "writeEnabled 为 false 时,不能启用或停用 Provider。",
418
+ "spaces.offNote": "开启后可配置 Provider 与嵌入",
419
+ "config.providersTitle": "记忆 Provider",
420
+ "config.providersDescription": "Provider 为记忆空间提供存储。启用或保存会同步其中已有的记忆空间;关闭只移除本地映射,不会删除第三方数据。",
421
+ "config.nativeSummary": "官方原生长期记忆与完整关系图",
422
+ "config.officialNative": "官方原生",
423
+ "config.nativeCliMissing": "未安装 CLI(可选)",
424
+ "config.embeddingTitle": "本地向量嵌入",
425
+ "config.embeddingDescription": "让 DSH Host 为每次 Mnemon CLI 调用注入嵌入 Endpoint 与模型;Endpoint 以 /v1 结尾时 Mnemon 自动使用 OpenAI 兼容协议(/v1/embeddings + Bearer 认证),否则使用 Ollama 协议;不以 /v1 结尾的兼容端点可在“协议”下拉中显式指定。",
426
+ "config.embeddingManaged": "由 DSH 管理嵌入配置",
427
+ "config.embeddingManagedHint": "开启后以这里保存的值覆盖 Mnemon 子进程环境;关闭后继续沿用 Host 环境与 Mnemon 默认值。",
428
+ "config.embeddingEndpoint": "嵌入 Endpoint",
429
+ "config.embeddingModel": "嵌入模型",
430
+ "config.embeddingApiKey": "API Key(可选,OpenAI 兼容服务)",
431
+ "config.embeddingApiKeyInvalid": "API Key 不能包含控制字符,且长度不超过 2048。",
432
+ "config.embeddingProtocol": "协议",
433
+ "config.embeddingProtocolAuto": "自动(按 /v1 探测)",
434
+ "config.embeddingProtocolOllama": "Ollama",
435
+ "config.embeddingProtocolOpenai": "OpenAI 兼容",
436
+ "config.embeddingProtocolInvalid": "协议必须是 自动 / Ollama / OpenAI 兼容 之一。",
437
+ "config.embeddingEndpointInvalid": "嵌入 Endpoint 必须是不含凭据、查询参数或片段的 HTTP(S) 绝对 URL。",
438
+ "config.embeddingModelInvalid": "嵌入模型必须包含 1–200 个字符,且不能包含控制字符。",
439
+ "config.embeddingSecurity": "Mnemon 会把记忆与查询正文发送到该 Endpoint;API Key 与其他设置一样保存在 DSH 设置文件中。远程 HTTP 会明文传输,请仅使用受信任的本地地址,或为远程服务配置 HTTPS。",
440
+ "config.embeddingTest": "测试状态",
441
+ "config.embeddingNotTested": "尚未检查嵌入服务的连接与各 Mnemon Native 空间的覆盖率。",
442
+ "config.embeddingTesting": "正在通过 Mnemon 检查嵌入服务与覆盖率…",
443
+ "config.embeddingSaveBeforeTest": "请先保存嵌入配置,再测试实际运行值。",
444
+ "config.embeddingTestUnavailable": "当前 DSH Host 不提供嵌入状态检查。",
445
+ "config.embeddingCliMissing": "测试需要 Mnemon CLI;向量设置只作用于 Mnemon Native。",
446
+ "config.embeddingStatusAvailable": "嵌入服务可用 · {model} · 已嵌入 {embedded}/{total}({coverage})",
447
+ "config.embeddingStatusAvailableWithProtocol": "嵌入服务可用 · {model} · 协议 {protocol} · 已嵌入 {embedded}/{total}({coverage})",
448
+ "config.embeddingStatusUnavailable": "嵌入服务不可达 · {model} · 已嵌入 {embedded}/{total}({coverage})",
449
+ "config.embeddingStatusUnavailableWithProtocol": "嵌入服务不可达 · {model} · 协议 {protocol} · 已嵌入 {embedded}/{total}({coverage})",
450
+ "config.embeddingStatusFailed": "嵌入状态检查失败:{error}",
451
+ "config.embeddingSpaces": "各 Mnemon Native 空间",
452
+ "config.embeddingSpaceCounts": "已嵌入 {embedded}/{total}({coverage})",
453
+ "config.embeddingSpaceFailed": "无法读取:{error}",
454
+ "config.embeddingMissing": "没有向量的记忆不参与语义匹配。",
455
+ "config.embeddingMissingFill": "没有向量的记忆不参与语义匹配;点空间旁的「补齐」即可生成缺少的向量。",
456
+ "config.embeddingMissingOffline": "没有向量的记忆不参与语义匹配;嵌入服务可用后,可以在这里补齐。",
457
+ "config.embeddingSpacesUnread": "无法读取的空间没有计入合计。",
458
+ "config.embeddingFill": "补齐",
459
+ "config.embeddingFilling": "补齐中…",
460
+ "config.embeddingFillLabel": "补齐「{name}」的向量",
461
+ "config.embeddingFillingLabel": "正在补齐「{name}」的向量",
462
+ "config.embeddingFillDone": "已为「{name}」补齐 {filled} 条向量。",
463
+ "config.embeddingFillMore": "已为「{name}」补齐 {filled} 条向量,还缺 {remaining} 条,再点「补齐」继续。",
464
+ "config.embeddingFillPartly": "已为「{name}」补齐 {filled} 条向量;其余 {remaining} 条嵌入服务没有返回向量,可以稍后再点「补齐」。",
465
+ "config.embeddingFillRefused": "嵌入服务没有为「{name}」返回向量,请确认它在运行并提供模型 {model}。",
466
+ "config.embeddingFillFailed": "「{name}」的向量没有补齐:{error}",
467
+ "config.providerGlobalLocation": "全局数据位置",
468
+ "config.providerGlobalLocationHint": "{provider} 默认使用全局范围目录,也可以指定一个自定义位置。",
469
+ "config.providerGlobalLocationWorkspaceHint": "当前使用工作区默认位置;切换到全局范围后可指定自定义位置。",
470
+ "config.providerDefaultLocation": "默认(跟随范围)",
471
+ "config.providerSaveFailed": "配置保存失败:{error}",
472
+ "config.providerServiceTitle": "服务配置",
473
+ "config.providerServiceHint": "供该 Provider 的所有记忆空间复用;启用或保存时会刷新记忆空间目录中的映射与元信息。",
474
+ "config.providerEnableHint": "填写服务配置并保存后,Provider 会启用并同步所有可见记忆空间。",
475
+ "config.providerEnabled": "已启用",
476
+ "config.providerDisabled": "未启用",
477
+ "config.providerDisabledConfigured": "已关闭 · 配置已保留",
478
+ "config.providerNeedsConfiguration": "需要完成配置",
479
+ "config.providerToggleAria": "启用 {provider}",
480
+ "config.providerToggleFailed": "切换失败:{error}",
481
+ "config.enableProvider": "保存并启用",
482
+ "config.providerServiceSaved": "服务配置已保存,记忆空间目录已同步",
483
+ "config.saveProviderService": "保存服务配置",
484
+ "config.providerUnavailable": "当前 DSH 主机不支持 Provider 服务配置。",
485
+ "config.saveScopeBeforeProviders": "存储范围有未保存修改。请先保存范围,再配置对应目录中的 Provider。",
486
+ "config.providerTargetWorkspace": "当前工作区:{workspace};标记“工作区”的 Provider 配置与记忆空间使用此范围。",
487
+ "config.loadingProviders": "正在读取 Provider 配置…",
488
+ "config.providerLoadFailed": "读取 Provider 配置失败:{error}",
489
+ "config.retryProviders": "重试",
490
+ "config.saving": "保存中…"
369
491
  },
370
492
  "en": {
371
493
  "term.space": "Memory Space",
@@ -733,6 +855,128 @@
733
855
  "overview.rediscoveryFailed": "{provider} could not finish discovery: {error}",
734
856
  "overview.rediscoveryTimedOut": "{provider} did not answer in time; try Rediscover later.",
735
857
  "overview.rediscoveryDismiss": "Dismiss",
736
- "overview.newSpace": "New"
858
+ "overview.newSpace": "New",
859
+ "common.copyId": "Copy ID",
860
+ "common.readOnly": "Read only",
861
+ "common.activationOnly": "Activation control only",
862
+ "common.active": "Active",
863
+ "common.category": "Category",
864
+ "common.importanceLabel": "Importance",
865
+ "common.importance": "Importance {value}",
866
+ "common.hops": "{count} hops",
867
+ "common.allCategories": "All categories",
868
+ "common.memories": "{count} memories",
869
+ "common.edges": "{count} edges",
870
+ "card.confirmText": "Soft-delete this memory?",
871
+ "card.processing": "Processing…",
872
+ "card.confirmForget": "Confirm forget",
873
+ "card.related": "View related",
874
+ "card.clone": "Create from this",
875
+ "card.forget": "Forget",
876
+ "readSources.all": "All providers",
877
+ "readSources.mode.search": "Native search",
878
+ "readSources.mode.graph": "True relation graph",
879
+ "readSources.mode.projection": "Content projection",
880
+ "readSources.mode.enumerable": "Enumerable content",
881
+ "readSources.mode.query-only": "Query only",
882
+ "readSources.mode.entities": "Entity index",
883
+ "readSources.mode.unsupported": "Unsupported",
884
+ "readSources.status.ready": "{count} observable",
885
+ "readSources.status.empty": "Connected · no content",
886
+ "readSources.status.query-required": "Read after a query",
887
+ "readSources.status.unsupported": "Unavailable on this surface",
888
+ "readSources.status.unavailable": "Connection unavailable",
889
+ "readSources.edges": "{count} true relations",
890
+ "readSources.model.mnemon-native": "Facts, entities, and typed relations",
891
+ "readSources.model.openviking": "Hierarchy and tiered content",
892
+ "readSources.model.honcho": "Peer conclusions and profiles",
893
+ "readSources.model.mem0": "Extracted semantic memories",
894
+ "readSources.model.hindsight": "Memory units and knowledge graph",
895
+ "readSources.model.holographic": "Trusted facts and entities",
896
+ "readSources.model.retaindb": "Profiles and typed facts",
897
+ "readSources.model.byterover": "Knowledge-tree queries",
898
+ "readSources.model.supermemory": "Memories and ingested documents",
899
+ "common.inactive": "Inactive",
900
+ "config.providerSecretShow": "Show credential",
901
+ "config.providerSecretHide": "Hide credential",
902
+ "config.providerSecretStoredValue": "Saved credential",
903
+ "config.providersSpacesOffTitle": "Memory Spaces is off",
904
+ "config.providersSpacesOffDetail": "Saved connections are kept",
905
+ "config.providersSpacesOn": "Turn on “Memory Spaces”",
906
+ "config.providersReadOnlyTitle": "dsh-mnemon is read-only",
907
+ "config.providersReadOnlyDetail": "With writeEnabled false, Providers cannot be switched on or off.",
908
+ "spaces.offNote": "Turn it on to configure Providers and embedding",
909
+ "config.providersTitle": "Memory providers",
910
+ "config.providersDescription": "Providers store memory spaces. Enabling or saving one synchronizes its existing spaces; turning it off removes only the local mapping, never third-party data.",
911
+ "config.nativeSummary": "Official native long-term memory with a complete relation graph",
912
+ "config.officialNative": "Official native",
913
+ "config.nativeCliMissing": "CLI not installed (optional)",
914
+ "config.embeddingTitle": "Local vector embeddings",
915
+ "config.embeddingDescription": "Have the DSH Host inject the embedding endpoint and model into every Mnemon CLI call; an endpoint ending in /v1 automatically uses the OpenAI-compatible protocol (/v1/embeddings with Bearer auth), otherwise the Ollama protocol. Compatible endpoints that do not end in /v1 can set the protocol explicitly.",
916
+ "config.embeddingManaged": "Manage embedding settings in DSH",
917
+ "config.embeddingManagedHint": "When enabled, saved values override the Mnemon child-process environment. When off, Mnemon keeps the Host environment and its built-in defaults.",
918
+ "config.embeddingEndpoint": "Embedding endpoint",
919
+ "config.embeddingModel": "Embedding model",
920
+ "config.embeddingApiKey": "API key (optional, OpenAI-compatible servers)",
921
+ "config.embeddingApiKeyInvalid": "The API key must contain no control characters and at most 2048 characters.",
922
+ "config.embeddingProtocol": "Protocol",
923
+ "config.embeddingProtocolAuto": "Auto (detect via /v1)",
924
+ "config.embeddingProtocolOllama": "Ollama",
925
+ "config.embeddingProtocolOpenai": "OpenAI-compatible",
926
+ "config.embeddingProtocolInvalid": "The protocol must be one of Auto / Ollama / OpenAI-compatible.",
927
+ "config.embeddingEndpointInvalid": "The embedding endpoint must be an absolute HTTP(S) URL without credentials, a query, or a fragment.",
928
+ "config.embeddingModelInvalid": "The embedding model must contain 1–200 characters and no control characters.",
929
+ "config.embeddingSecurity": "Mnemon sends memory and query text to this endpoint; the API key is stored in the DSH settings file like other settings. Remote HTTP is unencrypted; use a trusted local address or HTTPS for a remote service.",
930
+ "config.embeddingTest": "Test status",
931
+ "config.embeddingNotTested": "The embedding connection and the coverage of each Mnemon Native space have not been checked.",
932
+ "config.embeddingTesting": "Checking the embedding server and coverage through Mnemon…",
933
+ "config.embeddingSaveBeforeTest": "Save the embedding settings before testing their effective runtime values.",
934
+ "config.embeddingTestUnavailable": "This DSH Host does not provide embedding status checks.",
935
+ "config.embeddingCliMissing": "Testing needs the Mnemon CLI; these embedding settings only apply to Mnemon Native.",
936
+ "config.embeddingStatusAvailable": "Embedding server available · {model} · {embedded}/{total} embedded ({coverage})",
937
+ "config.embeddingStatusAvailableWithProtocol": "Embedding server available · {model} · protocol {protocol} · {embedded}/{total} embedded ({coverage})",
938
+ "config.embeddingStatusUnavailable": "Embedding server unreachable · {model} · {embedded}/{total} embedded ({coverage})",
939
+ "config.embeddingStatusUnavailableWithProtocol": "Embedding server unreachable · {model} · protocol {protocol} · {embedded}/{total} embedded ({coverage})",
940
+ "config.embeddingStatusFailed": "Embedding status check failed: {error}",
941
+ "config.embeddingSpaces": "Each Mnemon Native space",
942
+ "config.embeddingSpaceCounts": "{embedded}/{total} embedded ({coverage})",
943
+ "config.embeddingSpaceFailed": "Could not read: {error}",
944
+ "config.embeddingMissing": "Memories without a vector are left out of semantic matching.",
945
+ "config.embeddingMissingFill": "Memories without a vector are left out of semantic matching; Fill in beside a space creates its missing vectors.",
946
+ "config.embeddingMissingOffline": "Memories without a vector are left out of semantic matching; once the embedding service answers, their vectors can be filled in here.",
947
+ "config.embeddingSpacesUnread": "Spaces that could not be read are left out of the total.",
948
+ "config.embeddingFill": "Fill in",
949
+ "config.embeddingFilling": "Filling in…",
950
+ "config.embeddingFillLabel": "Fill in the vectors of {name}",
951
+ "config.embeddingFillingLabel": "Filling in the vectors of {name}",
952
+ "config.embeddingFillDone": "Filled in {filled} vectors for {name}.",
953
+ "config.embeddingFillMore": "Filled in {filled} vectors for {name}; {remaining} are still missing. Press Fill in to go on.",
954
+ "config.embeddingFillPartly": "Filled in {filled} vectors for {name}; the embedding service returned none for the other {remaining}. Press Fill in later to try again.",
955
+ "config.embeddingFillRefused": "The embedding service returned no vectors for {name}. Check that it is running and serves the model {model}.",
956
+ "config.embeddingFillFailed": "The vectors of {name} were not filled in: {error}",
957
+ "config.providerGlobalLocation": "Global data location",
958
+ "config.providerGlobalLocationHint": "{provider} uses the global scope directory by default, or you can choose a custom location.",
959
+ "config.providerGlobalLocationWorkspaceHint": "The workspace default is active. Switch to Global to choose a custom location.",
960
+ "config.providerDefaultLocation": "Default (follows scope)",
961
+ "config.providerSaveFailed": "Could not save configuration: {error}",
962
+ "config.providerServiceTitle": "Service configuration",
963
+ "config.providerServiceHint": "Shared by this provider’s Memory Spaces; enabling or saving refreshes their directory mappings and metadata.",
964
+ "config.providerEnableHint": "Complete and save the service configuration to enable the provider and synchronize every visible namespace.",
965
+ "config.providerEnabled": "Enabled",
966
+ "config.providerDisabled": "Not enabled",
967
+ "config.providerDisabledConfigured": "Off · configuration kept",
968
+ "config.providerNeedsConfiguration": "Configuration required",
969
+ "config.providerToggleAria": "Enable {provider}",
970
+ "config.providerToggleFailed": "Could not change provider state: {error}",
971
+ "config.enableProvider": "Save and enable",
972
+ "config.providerServiceSaved": "Service configuration saved and Memory Spaces synchronized",
973
+ "config.saveProviderService": "Save service configuration",
974
+ "config.providerUnavailable": "This DSH host does not support provider service configuration.",
975
+ "config.saveScopeBeforeProviders": "The storage scope has unsaved changes. Save the scope before configuring providers in that directory.",
976
+ "config.providerTargetWorkspace": "Current workspace: {workspace}. Providers tagged Workspace use this scope for configuration and Memory Spaces.",
977
+ "config.loadingProviders": "Loading provider configurations…",
978
+ "config.providerLoadFailed": "Could not load provider configurations: {error}",
979
+ "config.retryProviders": "Retry",
980
+ "config.saving": "Saving…"
737
981
  }
738
982
  }