dsh-mnemon 0.3.4 → 0.3.5

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/README.md CHANGED
@@ -24,7 +24,7 @@
24
24
  <p align="center">
25
25
  <a href="./docs/en/capabilities.md"><strong>Explore the capability map</strong></a> ·
26
26
  <a href="./docs/en/getting-started.md">Start in five minutes</a> ·
27
- <a href="./docs/en/releases/v0.3.4.md">Read the v0.3.4 notes</a> ·
27
+ <a href="./docs/en/releases/v0.3.5.md">Read the v0.3.5 notes</a> ·
28
28
  <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">Watch the widescreen demo</a>
29
29
  </p>
30
30
 
@@ -108,7 +108,7 @@ Windows users can install the official v0.2.3-or-newer release ZIP. The expected
108
108
 
109
109
  ### 2. Install DSH and the plugin
110
110
 
111
- This release is verified against DSH 0.1.1-rc.2, whose complete profiles require Node.js `^22.19.0 || >=24.0.0`; Node 20 lacks host primitives used by rc.2. The dsh-mnemon package itself retains Node.js 20 compatibility for older compatible DSH hosts. DSH rc.2 is published on npm's `latest` and `next` tags; use the exact version below for a reproducible installation:
111
+ The registry installation remains verified against DSH 0.1.1-rc.2, whose complete profiles require Node.js `^22.19.0 || >=24.0.0`; Node 20 lacks host primitives used by rc.2. Source compatibility is also verified against the source-only DSH 0.1.2-alpha.1 preview; it is not an npm installation target. The dsh-mnemon package itself retains Node.js 20 compatibility for older compatible DSH hosts. Use the exact published version below for a reproducible installation; plugin authors can follow the [alpha source workflow](./docs/en/development.md#dsh-012-alpha1-source-verification).
112
112
 
113
113
  ```sh
114
114
  npm install -g @deepseek-ai/dsh@0.1.1-rc.2
@@ -208,7 +208,7 @@ See [Operations, security, and troubleshooting](./docs/en/operations.md) for bac
208
208
  | Back up, update, or troubleshoot | [Operations](./docs/en/operations.md) |
209
209
  | Integrate tools, commands, or RPC | [Interface reference](./docs/en/interfaces.md) |
210
210
  | Build a Layer, Adapter, Strategy, Guard, or MemorySource extension | [Extension guide](./docs/en/extensions.md) |
211
- | Review the release | [v0.3.4 release notes](./docs/en/releases/v0.3.4.md) |
211
+ | Review the release | [v0.3.5 release notes](./docs/en/releases/v0.3.5.md) |
212
212
 
213
213
  See the [documentation hub](./docs/en/README.md) for the full map.
214
214
 
package/README.zh-CN.md CHANGED
@@ -24,7 +24,7 @@
24
24
  <p align="center">
25
25
  <a href="./docs/zh-CN/capabilities.md"><strong>先看能力地图</strong></a> ·
26
26
  <a href="./docs/zh-CN/getting-started.md">5 分钟开始</a> ·
27
- <a href="./docs/zh-CN/releases/v0.3.4.md">v0.3.4 升级说明</a> ·
27
+ <a href="./docs/zh-CN/releases/v0.3.5.md">v0.3.5 升级说明</a> ·
28
28
  <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">观看宽屏实机演示</a>
29
29
  </p>
30
30
 
@@ -108,7 +108,7 @@ Windows 推荐安装 v0.2.3 或更高版本的官方 ZIP;标准安装目录与
108
108
 
109
109
  ### 2. 安装 DSH 与插件
110
110
 
111
- 本版本已验证 DSH 0.1.1-rc.2;其完整 profile 需要 Node.js `^22.19.0 || >=24.0.0`,Node 20 缺少 rc.2 使用的宿主原语。dsh-mnemon 包本身仍为较旧且兼容的 DSH Host 保留 Node.js 20 支持。DSH rc.2 已发布到 npm 的 `latest` 与 `next` 标签;为了可复现安装,下面显式指定版本:
111
+ Registry 安装仍以 DSH 0.1.1-rc.2 验证;其完整 profile 需要 Node.js `^22.19.0 || >=24.0.0`,Node 20 缺少 rc.2 使用的宿主原语。源码兼容性也已针对仅提供源码的 DSH 0.1.2-alpha.1 预览版验证;它不是 npm 安装目标。dsh-mnemon 包本身仍为较旧且兼容的 DSH Host 保留 Node.js 20 支持。下面显式指定已发布版本以保证可复现安装;插件作者可参照 [alpha 源码验证流程](./docs/zh-CN/development.md#dsh-012-alpha1-源码验证)。
112
112
 
113
113
  ```sh
114
114
  npm install -g @deepseek-ai/dsh@0.1.1-rc.2
@@ -208,7 +208,7 @@ dsh plugin --profile headless add "link:/absolute/path/to/dsh-mnemon"
208
208
  | 备份、更新或排障 | [运维指南](./docs/zh-CN/operations.md) |
209
209
  | 接入工具、命令或 RPC | [接口参考](./docs/zh-CN/interfaces.md) |
210
210
  | 开发 Layer、Adapter、Strategy、Guard 或 MemorySource 扩展 | [扩展开发指南](./docs/zh-CN/extensions.md) |
211
- | 查看本次升级 | [v0.3.4 发布说明](./docs/zh-CN/releases/v0.3.4.md) |
211
+ | 查看本次升级 | [v0.3.5 发布说明](./docs/zh-CN/releases/v0.3.5.md) |
212
212
 
213
213
  完整目录见[文档中心](./docs/zh-CN/README.md)。
214
214
 
package/lib/client.js CHANGED
@@ -6351,7 +6351,8 @@ window.__ModuleLoader__.load({
6351
6351
  return (0, react.useContext)(I18nContext);
6352
6352
  }
6353
6353
  function useLocale() {
6354
- return (0, react.useContext)(LocaleContext) === "en" ? "en-US" : "zh-CN";
6354
+ const locale = (0, react.useContext)(LocaleContext);
6355
+ return locale === "en" ? "en-US" : locale === "zh" ? "zh-CN" : locale;
6355
6356
  }
6356
6357
  function categoryLabel(t, category) {
6357
6358
  return CATEGORY_KEYS[category] === void 0 ? category : t(CATEGORY_KEYS[category]);
@@ -12500,7 +12501,7 @@ window.__ModuleLoader__.load({
12500
12501
  const currentCwd = sessions.current === void 0 ? void 0 : sessions.byId[sessions.current]?.cwd;
12501
12502
  const normalizePath = (value) => value.replace(/[\\/]+$/u, "");
12502
12503
  const effectiveWorkspace = currentCwd === void 0 ? void 0 : workspaces.items.find((workspace) => normalizePath(workspace.path) === normalizePath(currentCwd));
12503
- const fallbackWorkspace = effectiveWorkspace ?? workspaces.items.find((workspace) => String(workspace.workspaceId) === String(workspaces.recentWorkspaceId)) ?? workspaces.items[0];
12504
+ const fallbackWorkspace = effectiveWorkspace ?? workspaces.items[0];
12504
12505
  const resolvedSelectedId = selectedWorkspaceId !== void 0 && workspaces.items.some((workspace) => String(workspace.workspaceId) === selectedWorkspaceId) ? selectedWorkspaceId : fallbackWorkspace === void 0 ? void 0 : String(fallbackWorkspace.workspaceId);
12505
12506
  (0, react.useEffect)(() => {
12506
12507
  if (resolvedSelectedId !== selectedWorkspaceId) setSelectedWorkspaceId(resolvedSelectedId);
@@ -12846,14 +12847,11 @@ window.__ModuleLoader__.load({
12846
12847
  current: void 0,
12847
12848
  byId: {}
12848
12849
  };
12849
- const workspaces = ctx.workspaces?.list?.getSnapshot?.() ?? {
12850
- items: [],
12851
- recentWorkspaceId: void 0
12852
- };
12850
+ const workspaces = ctx.workspaces?.list?.getSnapshot?.() ?? { items: [] };
12853
12851
  const sessionId = sessions.current;
12854
12852
  const cwd = sessionId === void 0 ? void 0 : sessions.byId[sessionId]?.cwd;
12855
12853
  const normalizePath = (value) => value.replace(/[\\/]+$/u, "");
12856
- const workspace = cwd === void 0 ? workspaces.items.find((candidate) => String(candidate.workspaceId) === String(workspaces.recentWorkspaceId)) ?? workspaces.items[0] : workspaces.items.find((candidate) => normalizePath(candidate.path) === normalizePath(cwd));
12854
+ const workspace = cwd === void 0 ? workspaces.items[0] : workspaces.items.find((candidate) => normalizePath(candidate.path) === normalizePath(cwd));
12857
12855
  return {
12858
12856
  scope: settings,
12859
12857
  interactionScope: interactionSettings,
package/lib/index.js CHANGED
@@ -9324,11 +9324,7 @@ const ACTIVATION_PAYLOAD_FIELDS = /* @__PURE__ */ new Set([
9324
9324
  "sessionId",
9325
9325
  "workspaceId"
9326
9326
  ]);
9327
- /**
9328
- * Expose only DSH read-routing activation to trusted Web hosts. Metadata,
9329
- * provider connections, credentials, and durable memory writes stay on the
9330
- * loopback-only write channel.
9331
- */
9327
+ /** Keep activation on a narrow, independently validated control endpoint. */
9332
9328
  function createActivationHandler(input) {
9333
9329
  return async (endpoint, rawPayload) => {
9334
9330
  try {
@@ -9566,7 +9562,7 @@ function createWriteHandler(input, lifecycle, runtimeMemory, versions) {
9566
9562
  }
9567
9563
  };
9568
9564
  }
9569
- /** Backup payloads contain private memory and use the deployment's management authority. */
9565
+ /** Backup payloads contain private memory and stay behind DSH browser authentication. */
9570
9566
  function createPackHandler(input, writeEnabled = true) {
9571
9567
  return async (endpoint, rawPayload) => {
9572
9568
  try {
@@ -9585,7 +9581,11 @@ function createPackHandler(input, writeEnabled = true) {
9585
9581
  }
9586
9582
  };
9587
9583
  }
9588
- /** Reads and activation use trusted hosts; other privileged channels require explicit promotion. */
9584
+ /**
9585
+ * Register one call shape across DSH rc.2 and 0.1.2-alpha.1. The former
9586
+ * enforces channel authority; the latter ignores the trailing options object
9587
+ * after applying its uniform browser-session authentication boundary.
9588
+ */
9589
9589
  function registerRpc(connection, input, lifecycle, runtimeMemory, storage, packs, versions, managementAuthority = "loopback") {
9590
9590
  const versionManager = versions ?? new VersionUpdateManager({ mnemonCliPath: () => findVersionCli(input) });
9591
9591
  connection.rpc.handle(MNEMON_READ_CHANNEL, createReadHandler(input, lifecycle, runtimeMemory, storage, versionManager), { authority: "trusted-host" });
@@ -1,5 +1,4 @@
1
1
  import type { ClientConnectionHandle } from '../shared/contracts.ts';
2
- import type { TurnTailOwnerProps } from '@deepseek-ai/dsh-client-ui-conversation/client';
3
2
  import { type MnemonAnchorPage } from './anchor.ts';
4
3
  import type { MnemonKey } from './locales.ts';
5
4
  export interface MnemonTurnTailProps {
@@ -15,6 +14,8 @@ export interface MnemonTurnTailProps {
15
14
  /** Route a settled tool name to the workbench page that explains its effect. */
16
15
  export declare function memoryPageForTool(name: string): MnemonAnchorPage;
17
16
  /** Whether this entry renders for the owner; chain selectors decline quietly. */
18
- export declare function selectMnemonTurnTail(owner: TurnTailOwnerProps): Record<string, never> | null;
17
+ export declare function selectMnemonTurnTail(owner: {
18
+ turn: unknown;
19
+ }): Record<string, never> | null;
19
20
  /** One-line memory-activity bar under a completed turn; hides when the turn touched no memory. */
20
21
  export declare const MnemonTurnTail: import("react").NamedExoticComponent<MnemonTurnTailProps>;
@@ -9,7 +9,7 @@ export interface MnemonViewProps {
9
9
  workspaceSelection?: MnemonWorkspaceSelection;
10
10
  surface?: MnemonViewSurface;
11
11
  t?: MnemonTranslate;
12
- locale?: 'zh' | 'en';
12
+ locale?: string;
13
13
  onClose?: () => void;
14
14
  }
15
15
  export interface MnemonWorkspaceSelection {
@@ -6,15 +6,46 @@
6
6
  */
7
7
  import type { ConnectionHandle } from '@deepseek-ai/dsh-client-connection/client';
8
8
  import type { LocaleRuntime } from '@deepseek-ai/dsh-client-locale/client';
9
- import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
9
+ import type { Context } from '@deepseek-ai/cordis';
10
10
  import type { MnemonKey } from './locales.ts';
11
11
  declare module '@deepseek-ai/dsh-client-ui-slots' {
12
12
  interface LocaleNamespaceMap {
13
13
  mnemon: MnemonKey;
14
14
  }
15
15
  }
16
- /** DSH 0.1.1-rc.2 client context plus the two injected feature services. */
17
- export type MnemonClientContext = ClientContext & {
16
+ export interface MnemonSessionSummary {
17
+ cwd?: string;
18
+ origin?: string;
19
+ projectionValues?: Readonly<Record<string, unknown>>;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface MnemonSessionListState {
23
+ current?: string;
24
+ byId: Record<string, MnemonSessionSummary>;
25
+ [key: string]: unknown;
26
+ }
27
+ export interface MnemonWorkspaceSummary {
28
+ workspaceId: unknown;
29
+ title: string;
30
+ path: string;
31
+ }
32
+ export interface MnemonWorkspaceListState {
33
+ items: MnemonWorkspaceSummary[];
34
+ [key: string]: unknown;
35
+ }
36
+ interface SnapshotStore<State> {
37
+ getSnapshot(): State;
38
+ subscribe(listener: () => void): () => void;
39
+ }
40
+ /** Context shared by the released client runtime and the 0.1.2 controller split. */
41
+ export type MnemonClientContext = Context & {
18
42
  connection: ConnectionHandle;
19
43
  locale: LocaleRuntime;
44
+ sessions: {
45
+ list: SnapshotStore<MnemonSessionListState>;
46
+ };
47
+ workspaces: {
48
+ list: SnapshotStore<MnemonWorkspaceListState>;
49
+ };
20
50
  };
51
+ export {};
@@ -1,6 +1,5 @@
1
- import type { SessionListState } from '@deepseek-ai/dsh-client-runtime/client';
2
1
  import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
3
- import type { MnemonClientContext } from './dsh-compat.ts';
2
+ import type { MnemonClientContext, MnemonSessionListState } from './dsh-compat.ts';
4
3
  export declare const MNEMON_SUBAGENT_TOKEN_USAGE_KEY = "mnemonSubagentTokenUsage";
5
4
  export interface MnemonTokenUsageProjection {
6
5
  uncachedInputTokens: number;
@@ -13,9 +12,9 @@ export interface MnemonTokenUsageProjection {
13
12
  * released official catalog component. All other consumers continue seeing
14
13
  * DSH's complete-log `tokenUsage` value.
15
14
  */
16
- export declare function scopeSubagentTokenUsage(state: SessionListState): SessionListState;
15
+ export declare function scopeSubagentTokenUsage(state: MnemonSessionListState): MnemonSessionListState;
17
16
  /** Wrap the framework hook while preserving its selector/equality contract. */
18
- export declare function createScopedUseSessions(useSessions: SnapshotSelectorHook<SessionListState>): SnapshotSelectorHook<SessionListState>;
17
+ export declare function createScopedUseSessions(useSessions: SnapshotSelectorHook<MnemonSessionListState>): SnapshotSelectorHook<MnemonSessionListState>;
19
18
  /**
20
19
  * Shadow the released official single-slot entry at a lower priority. The
21
20
  * component and action factory are captured from the public slot ledger, so
@@ -1,12 +1,18 @@
1
1
  import type { RpcResult, SettingsOperation } from './shared/contracts.ts';
2
2
  export type { ClientConnectionHandle, ClientSettingsScope, ClientSettingsSnapshot, JsonPrimitive, JsonValue, RpcError, RpcResult, SettingsOperation, } from './shared/contracts.ts';
3
- export type HostRpcHandler = (endpoint: string, payload: unknown) => Promise<RpcResult<unknown>>;
3
+ export type HostRpcHandler = (endpoint: string, payload: unknown, signal?: AbortSignal) => Promise<RpcResult<unknown>>;
4
4
  export type HostRpcAuthority = 'trusted-host' | 'loopback';
5
+ /**
6
+ * DSH rc.2 requires this registration policy. DSH 0.1.2-alpha.1 accepts only
7
+ * the first two JavaScript arguments and safely ignores this trailing value.
8
+ * Keeping one unconditional call shape avoids runtime version detection.
9
+ */
10
+ export interface HostRpcRegistrationOptions {
11
+ readonly authority: HostRpcAuthority;
12
+ }
5
13
  export interface HostConnectionHandle {
6
14
  rpc: {
7
- handle(channel: string, handler: HostRpcHandler, options: {
8
- authority: HostRpcAuthority;
9
- }): unknown;
15
+ handle(channel: string, handler: HostRpcHandler, options: HostRpcRegistrationOptions): unknown;
10
16
  };
11
17
  }
12
18
  export interface HostSettingsScope<T> {
@@ -9,14 +9,14 @@ import { VersionUpdateManager } from './version-updates.ts';
9
9
  export { MNEMON_ACTIVATION_CHANNEL, MNEMON_PACK_CHANNEL, MNEMON_READ_CHANNEL, MNEMON_WRITE_CHANNEL } from './channels.ts';
10
10
  type RuntimeInput = MnemonService | LiveMnemonRuntime;
11
11
  export declare function createReadHandler(input: RuntimeInput, lifecycle?: MnemonLifecycle, runtimeMemory?: RuntimeMemoryController, storage?: StorageScopeInspector, versions?: VersionUpdateManager): HostRpcHandler;
12
- /**
13
- * Expose only DSH read-routing activation to trusted Web hosts. Metadata,
14
- * provider connections, credentials, and durable memory writes stay on the
15
- * loopback-only write channel.
16
- */
12
+ /** Keep activation on a narrow, independently validated control endpoint. */
17
13
  export declare function createActivationHandler(input: RuntimeInput): HostRpcHandler;
18
14
  export declare function createWriteHandler(input: RuntimeInput, lifecycle?: MnemonLifecycle, runtimeMemory?: RuntimeMemoryController, versions?: VersionUpdateManager): HostRpcHandler;
19
- /** Backup payloads contain private memory and use the deployment's management authority. */
15
+ /** Backup payloads contain private memory and stay behind DSH browser authentication. */
20
16
  export declare function createPackHandler(input: MnemonPackManager | LiveMnemonRuntime, writeEnabled?: boolean | (() => boolean)): HostRpcHandler;
21
- /** Reads and activation use trusted hosts; other privileged channels require explicit promotion. */
17
+ /**
18
+ * Register one call shape across DSH rc.2 and 0.1.2-alpha.1. The former
19
+ * enforces channel authority; the latter ignores the trailing options object
20
+ * after applying its uniform browser-session authentication boundary.
21
+ */
22
22
  export declare function registerRpc(connection: HostConnectionHandle, input: RuntimeInput, lifecycle?: MnemonLifecycle, runtimeMemory?: RuntimeMemoryController, storage?: StorageScopeInspector, packs?: MnemonPackManager, versions?: VersionUpdateManager, managementAuthority?: HostRpcAuthority): void;
@@ -145,7 +145,7 @@ export interface Config {
145
145
  displayMode?: 'sidebar' | 'buildin';
146
146
  tabEnabled?: boolean;
147
147
  writeEnabled?: boolean;
148
- /** Remote Web policy for privileged Mnemon RPC. This boundary is sampled at Host startup. */
148
+ /** DSH rc.2 management-channel authority; ignored by DSH 0.1.2-alpha.1. */
149
149
  remoteAccess?: 'read-only' | 'trusted-host';
150
150
  lifecycleEnabled?: boolean;
151
151
  recallMode?: 'guided' | 'off';
@@ -232,6 +232,7 @@ export interface ResolvedConfig {
232
232
  displayMode: 'sidebar' | 'buildin';
233
233
  tabEnabled: boolean;
234
234
  writeEnabled: boolean;
235
+ /** DSH rc.2 management-channel authority; ignored by DSH 0.1.2-alpha.1. */
235
236
  remoteAccess: 'read-only' | 'trusted-host';
236
237
  lifecycleEnabled: boolean;
237
238
  recallMode: 'guided' | 'off';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "Composable three-tier memory control plane for DeepSeek Harness: persistent runtime context, searchable project documents, pluggable long-term memory, guarded strategies, WebUI, and headless tools.",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -114,9 +114,9 @@
114
114
  },
115
115
  "client": {
116
116
  "inject": [
117
- "@deepseek-ai/dsh-client-runtime",
118
117
  "@deepseek-ai/dsh-client-connection",
119
118
  "@deepseek-ai/dsh-client-ui-conversation",
119
+ "@deepseek-ai/dsh-client-ui-renderer",
120
120
  "@deepseek-ai/dsh-client-ui-settings",
121
121
  "@deepseek-ai/dsh-client-locale"
122
122
  ],
@@ -133,7 +133,9 @@
133
133
  "verify:build": "node scripts/verify-deterministic-build.mjs",
134
134
  "verify:headless": "node scripts/verify-headless-profile.mjs",
135
135
  "verify:package": "node scripts/verify-package-contents.mjs && node scripts/verify-public-entries.mjs && pnpm run lint:package",
136
- "verify": "pnpm run typecheck && pnpm run test && pnpm run verify:build && pnpm run verify:headless && pnpm run verify:package"
136
+ "verify": "pnpm run typecheck && pnpm run test && pnpm run verify:build && pnpm run verify:headless && pnpm run verify:package",
137
+ "dsh:link-source": "node scripts/link-dsh-source.mjs",
138
+ "dsh:restore-registry": "node scripts/link-dsh-source.mjs --restore"
137
139
  },
138
140
  "dependencies": {
139
141
  "fflate": "^0.8.3",
@@ -142,7 +144,7 @@
142
144
  "zod": "^4.4.3"
143
145
  },
144
146
  "peerDependencies": {
145
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6 || ^0.1.1-rc.1",
147
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
146
148
  "react": "^18.2.0",
147
149
  "react-dom": "^18.2.0"
148
150
  },
@@ -152,9 +154,9 @@
152
154
  "@deepseek-ai/dsh": "0.1.1-rc.2",
153
155
  "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2",
154
156
  "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2",
155
- "@deepseek-ai/dsh-client-runtime": "0.1.1-rc.2",
156
157
  "@deepseek-ai/dsh-client-ui-conversation": "0.1.1-rc.2",
157
158
  "@deepseek-ai/dsh-client-ui-primitives": "0.1.1-rc.2",
159
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.1-rc.2",
158
160
  "@deepseek-ai/dsh-client-ui-settings": "0.1.1-rc.2",
159
161
  "@deepseek-ai/dsh-client-ui-slots": "0.1.1-rc.2",
160
162
  "@deepseek-ai/dsh-client-ui-tool": "0.1.1-rc.2",