dsh-mnemon 0.5.39 → 0.5.40

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
@@ -111,7 +111,7 @@ npx @deepseek-ai/dsh web
111
111
  4. For Memory Spaces, install the Mnemon CLI for Mnemon Native with `npm install --global @mnemon-dev/mnemon`, or enable another Provider on the Memory Spaces page.
112
112
  5. Choose the main strategy and enhancements under **Plugins → dsh-mnemon**.
113
113
 
114
- dsh-mnemon supports DSH `0.2.1-rc.2` (npm `latest` and `next`) and `0.2.0-rc.2`. The same package serves the desktop app's Plugins page, `dsh plugin --profile web add dsh-mnemon` on the command line, and Headless with `dsh plugin --profile headless add dsh-mnemon`; older hosts keep the release [compatibility and upgrades](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/reference/compatibility.md) names for them. [Getting started](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/guides/getting-started.md) continues from here, and [compatibility and upgrades](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/reference/compatibility.md) covers existing installations.
114
+ dsh-mnemon supports published DSH `0.2.2-rc.1` and retains support for the `0.2.1` RC line and `0.2.0-rc.2`. RC1 requires Node.js >=24.9.0; older Hosts follow their own Node.js requirements. The same package serves the desktop app's Plugins page, `dsh plugin --profile web add dsh-mnemon` on the command line, and Headless with `dsh plugin --profile headless add dsh-mnemon`; older hosts keep the release [compatibility and upgrades](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/reference/compatibility.md) names for them. [Getting started](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/guides/getting-started.md) continues from here, and [compatibility and upgrades](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/en/reference/compatibility.md) covers existing installations.
115
115
 
116
116
  ## How it works
117
117
 
package/README.zh-CN.md CHANGED
@@ -112,7 +112,7 @@ npx @deepseek-ai/dsh web
112
112
  4. 使用记忆空间时,可用 `npm install --global @mnemon-dev/mnemon` 安装 Mnemon Native 所需的 CLI,或在记忆空间页面启用其他 Provider。
113
113
  5. 在**插件 → 可组合记忆**中选择主策略与增强。
114
114
 
115
- dsh-mnemon 支持 DSH `0.2.1-rc.2`(npm `latest` 与 `next`)与 `0.2.0-rc.2`。同一个包也用于桌面版的插件页、命令行 `dsh plugin --profile web add dsh-mnemon`,以及 Headless:`dsh plugin --profile headless add dsh-mnemon`;更早的宿主请继续使用[兼容性与升级](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/reference/compatibility.md)为其列出的版本。接下来可以看[入门指南](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/guides/getting-started.md),已有安装的升级见[兼容性与升级](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/reference/compatibility.md)。
115
+ dsh-mnemon 支持已发布的 DSH `0.2.2-rc.1`,同时保留对 `0.2.1` RC 系列和 `0.2.0-rc.2` 的支持。RC1 要求 Node.js >=24.9.0;旧版宿主遵循其各自的 Node.js 要求。同一个包也用于桌面版的插件页、命令行 `dsh plugin --profile web add dsh-mnemon`,以及 Headless:`dsh plugin --profile headless add dsh-mnemon`;更早的宿主请继续使用[兼容性与升级](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/reference/compatibility.md)为其列出的版本。接下来可以看[入门指南](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/guides/getting-started.md),已有安装的升级见[兼容性与升级](https://github.com/omdsh-dev/dsh-mnemon/blob/main/docs/zh-CN/reference/compatibility.md)。
116
116
 
117
117
  ## 工作原理
118
118
 
package/lib/bundle.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as prepareStarterResolution } from "./starter-resolution-C3yJawlA.js";
1
+ import { t as prepareStarterResolution } from "./starter-resolution-C5nNk-cs.js";
2
2
  //#region src/bundle.ts
3
3
  const groupKey = Symbol.for("cordis.group");
4
4
  const init = Symbol.for("cordis.init");
package/lib/client.js CHANGED
@@ -2481,6 +2481,10 @@ window.__ModuleLoader__.load({
2481
2481
  "status.title": "系统状态",
2482
2482
  "status.description": "dsh-mnemon、记忆 Provider 与各层存储的运行状态。",
2483
2483
  "status.nominal": "系统正常",
2484
+ "status.workflowUnavailable": "后台维护未运行",
2485
+ "status.workflowIdleReview": "空闲审查",
2486
+ "status.workflowRuntimeCapacity": "运行时容量维护",
2487
+ "status.workflowUnsupported": "当前策略不驱动:{workflows}。仅开启审查设置不会启动这些维护任务。可在记忆系统中选择支持相应能力的策略(如分层策略)。手动操作仍可使用。",
2484
2488
  "status.reviewFailed": "空闲审查失败",
2485
2489
  "status.reviewFailedDetail": "本轮记忆检查未完成,不会自动重放。后续审查受冷却时间和会话次数限制。",
2486
2490
  "status.reviewPartial": "已有写入提交;请按下列回执核对,未回滚。",
@@ -2773,7 +2777,8 @@ window.__ModuleLoader__.load({
2773
2777
  "details.currentMain": "当前主策略",
2774
2778
  "details.useMain": "设为主策略",
2775
2779
  "details.back": "返回“{component}”",
2776
- "threeTier.offNote": "开启后这些后台任务才会运行",
2780
+ "config.strategyWorkflowNote": "空闲审查与运行时容量维护仅在当前策略支持相应能力时运行。General 策略不驱动这两项维护;设置会保留,可在记忆系统切换回分层策略后使用。",
2781
+ "threeTier.offNote": "当前插件未启用。后台任务还需主策略支持相应能力。",
2777
2782
  "board.otherEnhancements": "适用于其他主策略的增强({count})",
2778
2783
  "board.more": "更多组件可在插件列表中添加",
2779
2784
  "board.relationNeeds": "需要“{component}”",
@@ -3296,6 +3301,10 @@ window.__ModuleLoader__.load({
3296
3301
  "status.title": "System Status",
3297
3302
  "status.description": "How dsh-mnemon, memory Providers and each storage layer are running.",
3298
3303
  "status.nominal": "System nominal",
3304
+ "status.workflowUnavailable": "Background maintenance unavailable",
3305
+ "status.workflowIdleReview": "Idle review",
3306
+ "status.workflowRuntimeCapacity": "Runtime capacity maintenance",
3307
+ "status.workflowUnsupported": "The current Strategy does not drive: {workflows}. Enabling review settings alone does not start these tasks. Select a Strategy that supports them, such as the Layered Strategy, in Memory System. Manual actions remain available.",
3299
3308
  "status.reviewFailed": "Idle review failed",
3300
3309
  "status.reviewFailedDetail": "This checkpoint did not complete and will not be replayed automatically. Later reviews respect the cooldown and session limit.",
3301
3310
  "status.reviewPartial": "Some writes committed. Reconcile the receipts below; they were not rolled back.",
@@ -3588,7 +3597,8 @@ window.__ModuleLoader__.load({
3588
3597
  "details.currentMain": "Current main strategy",
3589
3598
  "details.useMain": "Use as main strategy",
3590
3599
  "details.back": "Back to “{component}”",
3591
- "threeTier.offNote": "These background tasks run once it is on",
3600
+ "config.strategyWorkflowNote": "Idle review and runtime capacity maintenance run only when the current Strategy supports them. The General Strategy drives neither. Settings are retained for use after switching back to the Layered Strategy in Memory System.",
3601
+ "threeTier.offNote": "This plugin is disabled. Background tasks also require a supporting main Strategy.",
3592
3602
  "board.otherEnhancements": "Enhancements for other main strategies ({count})",
3593
3603
  "board.more": "Add more components from the Plugins list",
3594
3604
  "board.relationNeeds": "Needs “{component}”",
@@ -12777,6 +12787,10 @@ window.__ModuleLoader__.load({
12777
12787
  })
12778
12788
  ]
12779
12789
  }),
12790
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12791
+ className: MnemonSettingsCard_module_css_default.panelNote,
12792
+ children: t("config.strategyWorkflowNote")
12793
+ }),
12780
12794
  !page.component.enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
12781
12795
  className: MnemonSettingsCard_module_css_default.panelNote,
12782
12796
  children: t("threeTier.offNote")
@@ -15118,6 +15132,18 @@ window.__ModuleLoader__.load({
15118
15132
  })]
15119
15133
  });
15120
15134
  }
15135
+ function BackgroundWorkflowNotice(props) {
15136
+ const t = useT();
15137
+ if (props.workflows === void 0) return null;
15138
+ const missing = [!props.workflows.idleReview ? t("status.workflowIdleReview") : void 0, !props.workflows.runtimeCapacity ? t("status.workflowRuntimeCapacity") : void 0].filter((label) => label !== void 0);
15139
+ if (missing.length === 0) return null;
15140
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15141
+ className: MnemonView_module_css_default.alert,
15142
+ role: "status",
15143
+ "aria-label": t("status.workflowUnavailable"),
15144
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("status.workflowUnavailable") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("status.workflowUnsupported", { workflows: missing.join(" / ") }) })]
15145
+ });
15146
+ }
15121
15147
  function SourceDisabledPage(props) {
15122
15148
  const t = useT();
15123
15149
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -15756,6 +15782,7 @@ window.__ModuleLoader__.load({
15756
15782
  remoteReadOnly,
15757
15783
  reviewPaused: focused ? void 0 : status?.lifecycle?.current?.idleReviewBlocked
15758
15784
  }),
15785
+ !focused && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BackgroundWorkflowNotice, { workflows: status?.memorySystem?.workflows }),
15759
15786
  !focused && status?.lifecycle?.current?.idleReviewWatermark !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15760
15787
  className: MnemonView_module_css_default.alert,
15761
15788
  role: status.lifecycle.current.idleReviewWatermark.state === "error" ? "alert" : "status",
package/lib/core.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as provideMemoryRuntime } from "./runtime-0u6dOiF9.js";
1
+ import { t as provideMemoryRuntime } from "./runtime-DmL0It3P.js";
2
2
  //#region src/core/plugin.ts
3
3
  const name = "dsh-mnemon-core";
4
4
  const provide = ["mnemonMemory"];
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { d as truncate, f as canonicalWorkspacePath, m as withMemoryStorageLock, n as memoryStrategyConfigurationValues, p as workspaceStorageId, r as readMemoryStrategyConfiguration, s as receipt } from "./strategy-configuration-CKP2kRss.js";
2
- import { a as validateMemoryPluginGraph, i as captureMemoryContributionSnapshot, n as isMemoryCompositionUnavailable, o as prepareMemoryContributions, r as MemoryCompositionGeneration, t as provideMemoryRuntime } from "./runtime-0u6dOiF9.js";
2
+ import { a as validateMemoryPluginGraph, i as captureMemoryContributionSnapshot, n as isMemoryCompositionUnavailable, o as prepareMemoryContributions, r as MemoryCompositionGeneration, t as provideMemoryRuntime } from "./runtime-DmL0It3P.js";
3
3
  import { DEFAULT_MEMORY_VIEW_BUDGET, MEMORY_CAPABILITIES } from "./contracts.js";
4
4
  import { r as defineMemoryPlugin, t as canonicalMemoryJson } from "./definitions-DU7MLBhu.js";
5
5
  import { Context } from "@deepseek-ai/cordis";
@@ -7100,7 +7100,7 @@ var ComposableMemoryTurnManager = class {
7100
7100
  const stored = this.requireTurn(turnId);
7101
7101
  const operation = this.generations.acquire(stored.lease.id);
7102
7102
  try {
7103
- return await operation.generation.executeAction(stored.context.view, offerId, input, authorize, signal);
7103
+ return await operation.generation.executeAction(stored.context.view, offerId, input, authorize, signal, stored.context);
7104
7104
  } finally {
7105
7105
  operation.release();
7106
7106
  }
@@ -15030,10 +15030,16 @@ async function catalog(runtime, lifecycle) {
15030
15030
  }
15031
15031
  async function compositionStatus(runtime) {
15032
15032
  const composition = runtime.graph.memoryComposition.inspect();
15033
- const strategyTypeId = runtime.graph.memoryComposition.current()?.strategy.definition.manifest.typeId;
15033
+ const strategy = runtime.graph.memoryComposition.current()?.strategy.definition.manifest;
15034
15034
  return {
15035
15035
  serving: composition.servingGenerationId !== void 0,
15036
- ...strategyTypeId === void 0 ? {} : { strategyTypeId },
15036
+ ...strategy === void 0 ? {} : {
15037
+ strategyTypeId: strategy.typeId,
15038
+ workflows: {
15039
+ idleReview: strategy.typeId === mainStrategyTypeId(runtime.graph.config) && strategyDrives(strategy, "idle-review"),
15040
+ runtimeCapacity: strategyDrives(strategy, "runtime-capacity")
15041
+ }
15042
+ },
15037
15043
  evaluation: composition.evaluation,
15038
15044
  sources: (await catalog(runtime)).sources,
15039
15045
  configuration: runtime.graph.config.memoryTopology
@@ -325,11 +325,29 @@ function normalizeViewSpec(value, strategy, facts, budget) {
325
325
  ]) if (input.reminders[key] !== void 0) guidance.reminders[key] = requiredText(input.reminders[key], "Strategy reminder " + key, 16384);
326
326
  }
327
327
  }
328
+ const diagnostics = value.diagnostics === void 0 ? void 0 : normalizeSpecDiagnostics(value.diagnostics);
328
329
  return deepFreeze({
329
330
  strategyTypeId: value.strategyTypeId,
330
331
  sources: normalizedSources,
331
332
  explanation: requiredText(value.explanation, "memory ViewSpec explanation", 4e3),
332
- ...guidance === void 0 ? {} : { guidance }
333
+ ...guidance === void 0 ? {} : { guidance },
334
+ ...diagnostics === void 0 ? {} : { diagnostics }
335
+ });
336
+ }
337
+ const MAX_SPEC_DIAGNOSTICS = 32;
338
+ function normalizeSpecDiagnostics(value) {
339
+ if (!Array.isArray(value)) throw new Error("memory ViewSpec diagnostics must be an array");
340
+ if (value.length > MAX_SPEC_DIAGNOSTICS) throw new Error(`memory ViewSpec diagnostics must be at most ${MAX_SPEC_DIAGNOSTICS} entries`);
341
+ return value.map((diagnostic) => {
342
+ const input = jsonClone(diagnostic, "memory ViewSpec diagnostic");
343
+ if (input === null || typeof input !== "object" || Array.isArray(input)) throw new Error("memory ViewSpec diagnostic must be an object");
344
+ const entry = input;
345
+ const contributionInstanceKey = entry.contributionInstanceKey === void 0 ? void 0 : requiredText(entry.contributionInstanceKey, "memory ViewSpec diagnostic contributionInstanceKey", 300);
346
+ return deepFreeze({
347
+ code: id(entry.code, "memory ViewSpec diagnostic code"),
348
+ message: requiredText(entry.message, "memory ViewSpec diagnostic message", 1e3),
349
+ ...contributionInstanceKey === void 0 ? {} : { contributionInstanceKey }
350
+ });
333
351
  });
334
352
  }
335
353
  function normalizeContribution(source, spec, facts, value) {
@@ -483,6 +501,7 @@ var MemoryCompositionGeneration = class {
483
501
  now;
484
502
  routeCalls = /* @__PURE__ */ new WeakMap();
485
503
  strategyTurns = /* @__PURE__ */ new WeakMap();
504
+ sourceContexts = /* @__PURE__ */ new WeakMap();
486
505
  sourceTimeoutMs;
487
506
  disposed = false;
488
507
  constructor(snapshotValue, options = {}) {
@@ -702,6 +721,7 @@ var MemoryCompositionGeneration = class {
702
721
  mode: modes.size === 1 ? [...modes][0] : "mixed",
703
722
  sourceRevisions
704
723
  };
724
+ const allDiagnostics = [...diagnostics, ...spec.diagnostics ?? []];
705
725
  const body = {
706
726
  runtimeGeneration: this.id,
707
727
  strategyInstanceKey: this.strategy.instanceKey,
@@ -719,7 +739,7 @@ var MemoryCompositionGeneration = class {
719
739
  consistency,
720
740
  explanation: spec.explanation,
721
741
  ...spec.guidance === void 0 ? {} : { guidance: spec.guidance },
722
- ...diagnostics.length === 0 ? {} : { diagnostics: diagnostics.sort((a, b) => (a.contributionInstanceKey ?? "").localeCompare(b.contributionInstanceKey ?? "") || a.code.localeCompare(b.code)) }
742
+ ...allDiagnostics.length === 0 ? {} : { diagnostics: allDiagnostics.sort((a, b) => (a.contributionInstanceKey ?? "").localeCompare(b.contributionInstanceKey ?? "") || a.code.localeCompare(b.code)) }
723
743
  };
724
744
  const viewDigest = digest(body);
725
745
  return deepFreeze({
@@ -873,10 +893,7 @@ var MemoryCompositionGeneration = class {
873
893
  if (calls >= route.maxCalls) throw new Error(`memory View Route call budget is exhausted: ${route.id}`);
874
894
  ledger.set(counter, calls + 1);
875
895
  return normalizeEvidence(await source.runtime.query({
876
- view: deepFreeze({
877
- id: view.id,
878
- scope: view.scope
879
- }),
896
+ view: this.sourceView(view, route.sourceInstanceKey, execution),
880
897
  route: selectedRoute,
881
898
  grant,
882
899
  input: jsonClone(selectedInput, "memory Route input"),
@@ -901,7 +918,24 @@ var MemoryCompositionGeneration = class {
901
918
  active = false;
902
919
  }
903
920
  }
904
- async executeAction(view, offerId, input, authorize, signal) {
921
+ sourceView(view, sourceInstanceKey, execution) {
922
+ let contexts = this.sourceContexts.get(execution);
923
+ if (contexts === void 0) {
924
+ contexts = /* @__PURE__ */ new Map();
925
+ this.sourceContexts.set(execution, contexts);
926
+ }
927
+ const key = `${view.id}\u0000${sourceInstanceKey}`;
928
+ let context = contexts.get(key);
929
+ if (context === void 0) {
930
+ context = deepFreeze({
931
+ id: view.id,
932
+ scope: view.scope
933
+ });
934
+ contexts.set(key, context);
935
+ }
936
+ return context;
937
+ }
938
+ async executeAction(view, offerId, input, authorize, signal, execution = view) {
905
939
  this.assertOpen();
906
940
  if (view.runtimeGeneration !== this.id) throw new Error("memory View belongs to a different runtime generation");
907
941
  const offer = view.actionOffers.find((candidate) => candidate.id === offerId);
@@ -913,10 +947,7 @@ var MemoryCompositionGeneration = class {
913
947
  signal?.throwIfAborted();
914
948
  const grant = view.readGrants.find((candidate) => candidate.sourceInstanceKey === offer.sourceInstanceKey);
915
949
  const receipt = await source.runtime.mutate({
916
- view: deepFreeze({
917
- id: view.id,
918
- scope: view.scope
919
- }),
950
+ view: this.sourceView(view, offer.sourceInstanceKey, execution),
920
951
  offer,
921
952
  ...grant === void 0 ? {} : { grant },
922
953
  input: jsonClone(input, "memory Action input"),
@@ -951,6 +982,7 @@ var MemoryCompositionGeneration = class {
951
982
  this.disposed = true;
952
983
  this.routeCalls = /* @__PURE__ */ new WeakMap();
953
984
  this.strategyTurns = /* @__PURE__ */ new WeakMap();
985
+ this.sourceContexts = /* @__PURE__ */ new WeakMap();
954
986
  const failures = [];
955
987
  for (const source of [...this.sources.values()].reverse()) try {
956
988
  await source.runtime.dispose?.();
@@ -14,12 +14,12 @@ var dependencies = {
14
14
  "dsh-mnemon-provider-openviking": "0.5.10",
15
15
  "dsh-mnemon-provider-retaindb": "0.5.6",
16
16
  "dsh-mnemon-provider-supermemory": "0.5.5",
17
- "dsh-mnemon-source-documents": "0.5.12",
17
+ "dsh-mnemon-source-documents": "0.5.13",
18
18
  "dsh-mnemon-source-memory-spaces": "0.5.25",
19
19
  "dsh-mnemon-source-runtime": "0.5.17",
20
- "dsh-mnemon-source-skills": "0.5.6",
20
+ "dsh-mnemon-source-skills": "0.5.7",
21
21
  "dsh-mnemon-strategy-auto-capture": "0.5.5",
22
- "dsh-mnemon-strategy-default-three-tier": "0.5.11",
22
+ "dsh-mnemon-strategy-default-three-tier": "0.5.12",
23
23
  "dsh-mnemon-strategy-general": "0.5.1",
24
24
  "dsh-mnemon-strategy-light-context": "0.5.6",
25
25
  "dsh-mnemon-strategy-scoped": "0.5.5",
package/lib/starter.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as prepareStarterResolution } from "./starter-resolution-C3yJawlA.js";
1
+ import { t as prepareStarterResolution } from "./starter-resolution-C5nNk-cs.js";
2
2
  //#region src/starter.ts
3
3
  const name = "dsh-mnemon-starter";
4
4
  const provide = ["mnemonStarterReady"];
package/lib/testing.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as provideMemoryRuntime } from "./runtime-0u6dOiF9.js";
1
+ import { t as provideMemoryRuntime } from "./runtime-DmL0It3P.js";
2
2
  import { DEFAULT_MEMORY_VIEW_BUDGET } from "./contracts.js";
3
3
  import { c as jsonClone } from "./definitions-DU7MLBhu.js";
4
4
  import { Context } from "@deepseek-ai/cordis";
@@ -129,6 +129,10 @@ export declare const zh: {
129
129
  'status.title': string;
130
130
  'status.description': string;
131
131
  'status.nominal': string;
132
+ 'status.workflowUnavailable': string;
133
+ 'status.workflowIdleReview': string;
134
+ 'status.workflowRuntimeCapacity': string;
135
+ 'status.workflowUnsupported': string;
132
136
  'status.reviewFailed': string;
133
137
  'status.reviewFailedDetail': string;
134
138
  'status.reviewPartial': string;
@@ -421,6 +425,7 @@ export declare const zh: {
421
425
  'details.currentMain': string;
422
426
  'details.useMain': string;
423
427
  'details.back': string;
428
+ 'config.strategyWorkflowNote': string;
424
429
  'threeTier.offNote': string;
425
430
  'board.otherEnhancements': string;
426
431
  'board.more': string;
@@ -230,6 +230,12 @@ export interface MemoryViewSpec {
230
230
  explanation: string;
231
231
  /** Trusted Strategy instructions, separate from quoted Source data. */
232
232
  guidance?: MemoryViewGuidance;
233
+ /**
234
+ * Why this composition deliberately left an installed Source out (#504).
235
+ * The Host validates each entry and merges it into `view.diagnostics`; a
236
+ * diagnostic explains an absence, never grants a Source projection or routes.
237
+ */
238
+ diagnostics?: MemoryCompositionDiagnostic[];
233
239
  }
234
240
  export interface MemoryViewGuidance {
235
241
  system?: string;
@@ -388,7 +394,12 @@ export interface MemorySourceRuntimeContext {
388
394
  /** Immutable, JSON-only Host/scope defaults; never business objects or clients. */
389
395
  configuration?: Readonly<Record<string, MemoryJsonValue>>;
390
396
  }
391
- /** Operation identity only; never the complete View or another Source's data. */
397
+ /**
398
+ * Operation identity only; never the complete View or another Source's data.
399
+ * The object is stable for this Source within one execution, and can key weak
400
+ * execution-local state. Independent executions never share it, even when they
401
+ * pin the exact same immutable View. Requires dsh-mnemon 0.5.40 or later.
402
+ */
392
403
  export interface MemorySourceViewContext {
393
404
  id: string;
394
405
  scope: MemoryOperationScope;
@@ -16,6 +16,11 @@ export interface MemoryCompositionStatus {
16
16
  serving: boolean;
17
17
  /** The main Strategy composing the serving composition, which a fallback can make differ from the selected one. */
18
18
  strategyTypeId?: string;
19
+ /** Strategy support only; session policy and review settings can still prevent a run. */
20
+ workflows?: {
21
+ idleReview: boolean;
22
+ runtimeCapacity: boolean;
23
+ };
19
24
  evaluation: import('../core/contracts/index.ts').MemoryCompositionEvaluationReport;
20
25
  sources: MemorySourceManagementInstance[];
21
26
  configuration: ResolvedMemoryTopologyConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon",
3
- "version": "0.5.39",
3
+ "version": "0.5.40",
4
4
  "description": "Composable, view-based context for DeepSeek Harness. Pluggable sources and strategies, with layered memory and self-evolving skills out of the box.",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -164,12 +164,12 @@
164
164
  "dsh-mnemon-provider-openviking": "0.5.10",
165
165
  "dsh-mnemon-provider-retaindb": "0.5.6",
166
166
  "dsh-mnemon-provider-supermemory": "0.5.5",
167
- "dsh-mnemon-source-documents": "0.5.12",
167
+ "dsh-mnemon-source-documents": "0.5.13",
168
168
  "dsh-mnemon-source-memory-spaces": "0.5.25",
169
169
  "dsh-mnemon-source-runtime": "0.5.17",
170
- "dsh-mnemon-source-skills": "0.5.6",
170
+ "dsh-mnemon-source-skills": "0.5.7",
171
171
  "dsh-mnemon-strategy-auto-capture": "0.5.5",
172
- "dsh-mnemon-strategy-default-three-tier": "0.5.11",
172
+ "dsh-mnemon-strategy-default-three-tier": "0.5.12",
173
173
  "dsh-mnemon-strategy-general": "0.5.1",
174
174
  "dsh-mnemon-strategy-light-context": "0.5.6",
175
175
  "dsh-mnemon-strategy-scoped": "0.5.5",