dsh-mnemon-source-memory-spaces 0.5.6 → 0.5.7

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
@@ -19,6 +19,8 @@ config:
19
19
 
20
20
  The host must already provide `ctx.mnemonMemory`; a Strategy decides how this Source enters the LLM View. For programmatic composition, import `installMemorySpaces` and pass explicit typed child modules. It returns `Promise<void>`; no private Host or Snapshot escapes. Omitting the child list is an error, not automatic dependency discovery. The default `dsh-mnemon` bundle supplies the existing nine Providers and existing storage settings separately.
21
21
 
22
+ Host archive workflows can read `body-directory` with `{ writeScope: { viewId, grant } }`, using `MemorySpaceWriteScopeRequest` from `./contracts`. The optional catalog `writeScope` returns the View id, exact Source instance and authorized `memoryBodyIds`; it shares `remember` authority for known namespaces and spaces created by that View. Empty scopes remain empty. The Host must bind the input to its initiating View and Source, validate the response identity, and recheck live capabilities before writing. Older Sources that omit the response require a conservative pinned-namespace fallback; read grants must never be interpreted as unlimited authority.
23
+
22
24
  Run `pnpm install && pnpm verify` in this directory. Its own tests mount real Cordis Fibers and exercise Source isolation, scoped management, View actions/routes, persistence and failed-child cleanup. Provider authors use `mountMemorySpaceProvider(module, { instanceId, config })` from the public `/testing` entry to test actual child registration and obtain frozen metadata plus `createAdapter`/`dispose`. `createMemorySpaceProviderFixture` supplies scoped authority and validated connection data for driver tests. Dispose the mounted fixture to release its adapters and Fiber. Neither fixture exposes the private Host, Registry or Snapshot; test the full Source separately for View integration.
23
25
 
24
26
  ## Configuration ownership
@@ -1,4 +1,4 @@
1
- import { MemoryJsonValue as JsonValue } from "dsh-mnemon/contracts";
1
+ import { MemoryJsonValue as JsonValue, MemoryReadGrant } from "dsh-mnemon/contracts";
2
2
  //#region src/contracts.d.ts
3
3
  type MemoryProviderId = string;
4
4
  type MemoryProviderConnectionValue = string | number | boolean;
@@ -298,6 +298,17 @@ interface MemorySpaceView extends MemorySpace {
298
298
  error?: string;
299
299
  stats?: MemorySpaceStats;
300
300
  }
301
+ /** Optional Host-only body-directory input; the Host binds the grant to its initiating View and exact Source. */
302
+ interface MemorySpaceWriteScopeRequest {
303
+ viewId: string;
304
+ grant: MemoryReadGrant;
305
+ }
306
+ /** Source-owned write authority, distinct from the active namespaces pinned for recall. */
307
+ interface MemorySpaceWriteScope {
308
+ viewId: string;
309
+ sourceInstanceKey: string;
310
+ memoryBodyIds: string[];
311
+ }
301
312
  interface MemorySpaceCatalog {
302
313
  items: MemorySpaceView[];
303
314
  providers: MemoryProviderDescriptor[];
@@ -307,6 +318,8 @@ interface MemorySpaceCatalog {
307
318
  activeCount: number;
308
319
  directory: string;
309
320
  generatedAt: string;
321
+ /** Present only when body-directory receives a supported writeScope request. Older Sources omit it. */
322
+ writeScope?: MemorySpaceWriteScope;
310
323
  }
311
324
  interface MemoryGraphNode extends Insight {
312
325
  color: string;
@@ -517,4 +530,4 @@ type MemoryBodyView = MemorySpaceView;
517
530
  /** @deprecated Use OpenVikingSpaceConnection. The wire shape is unchanged. */
518
531
  type OpenVikingBodyConnection = OpenVikingSpaceConnection;
519
532
  //#endregion
520
- export { AutomaticMemoryPlacementRequest, CATEGORIES, Category, CreateMemoryBodyRequest, CreateMemorySpaceRequest, DEFAULT_EMBEDDING_ENDPOINT, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_PROTOCOL, EDGE_TYPES, EMBEDDING_PROTOCOL_AUTO, EMBEDDING_PROTOCOL_OLLAMA, EMBEDDING_PROTOCOL_OPENAI, EdgeType, EntityView, INTENTS, Insight, Intent, type JsonValue, LlmMemoryPlacementSelection, MNEMON_EMBEDDING_PROTOCOLS, MemoryBody, MemoryBodyCatalog, MemoryBodyMetadataMaintenanceResult, MemoryBodyMetadataSample, MemoryBodyMetadataUpdate, MemoryBodyProvider, MemoryBodyStats, MemoryBodyView, MemoryGraphEdge, MemoryGraphNode, MemoryGraphSnapshot, MemoryListRequest, MemoryListView, MemoryPersistenceStrategy, MemoryPlacementCandidate, MemoryPlacementCapability, MemoryPlacementDecision, MemoryPlacementPreference, MemoryPlacementRules, MemoryProviderCapabilities, MemoryProviderConfigField, MemoryProviderConfigOption, MemoryProviderConnection, MemoryProviderConnectionValue, MemoryProviderDescriptor, MemoryProviderIcon, MemoryProviderId, MemoryProviderRuntimeStatus, MemoryProviderServiceCatalog, MemoryProviderServiceView, MemoryReadMode, MemoryReadSource, MemoryReadStatus, MemorySpace, MemorySpaceCatalog, MemorySpaceMetadataMaintenanceResult, MemorySpaceMetadataSample, MemorySpaceMetadataUpdate, MemorySpaceProvider, MemorySpaceStats, MemorySpaceView, MemorySpacesStatus, MnemonEmbeddingConfig, MnemonEmbeddingProtocol, MnemonEmbeddingStatus, OpenVikingBodyConnection, OpenVikingSpaceConnection, PreparedMemoryPlacement, RecallQualityConfig, RecallQualityStats, RecallRelevanceTier, RememberRequest, ResolvedMemoryPersistenceStrategy, ResolvedMnemonEmbeddingConfig, ResolvedRecallQualityConfig, SOURCES, SearchRequest, Source, UpdateMemoryBodyRequest, UpdateMemoryProviderServiceRequest, UpdateMemorySpaceRequest };
533
+ export { AutomaticMemoryPlacementRequest, CATEGORIES, Category, CreateMemoryBodyRequest, CreateMemorySpaceRequest, DEFAULT_EMBEDDING_ENDPOINT, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_PROTOCOL, EDGE_TYPES, EMBEDDING_PROTOCOL_AUTO, EMBEDDING_PROTOCOL_OLLAMA, EMBEDDING_PROTOCOL_OPENAI, EdgeType, EntityView, INTENTS, Insight, Intent, type JsonValue, LlmMemoryPlacementSelection, MNEMON_EMBEDDING_PROTOCOLS, MemoryBody, MemoryBodyCatalog, MemoryBodyMetadataMaintenanceResult, MemoryBodyMetadataSample, MemoryBodyMetadataUpdate, MemoryBodyProvider, MemoryBodyStats, MemoryBodyView, MemoryGraphEdge, MemoryGraphNode, MemoryGraphSnapshot, MemoryListRequest, MemoryListView, MemoryPersistenceStrategy, MemoryPlacementCandidate, MemoryPlacementCapability, MemoryPlacementDecision, MemoryPlacementPreference, MemoryPlacementRules, MemoryProviderCapabilities, MemoryProviderConfigField, MemoryProviderConfigOption, MemoryProviderConnection, MemoryProviderConnectionValue, MemoryProviderDescriptor, MemoryProviderIcon, MemoryProviderId, MemoryProviderRuntimeStatus, MemoryProviderServiceCatalog, MemoryProviderServiceView, MemoryReadMode, MemoryReadSource, MemoryReadStatus, MemorySpace, MemorySpaceCatalog, MemorySpaceMetadataMaintenanceResult, MemorySpaceMetadataSample, MemorySpaceMetadataUpdate, MemorySpaceProvider, MemorySpaceStats, MemorySpaceView, MemorySpaceWriteScope, MemorySpaceWriteScopeRequest, MemorySpacesStatus, MnemonEmbeddingConfig, MnemonEmbeddingProtocol, MnemonEmbeddingStatus, OpenVikingBodyConnection, OpenVikingSpaceConnection, PreparedMemoryPlacement, RecallQualityConfig, RecallQualityStats, RecallRelevanceTier, RememberRequest, ResolvedMemoryPersistenceStrategy, ResolvedMnemonEmbeddingConfig, ResolvedRecallQualityConfig, SOURCES, SearchRequest, Source, UpdateMemoryBodyRequest, UpdateMemoryProviderServiceRequest, UpdateMemorySpaceRequest };
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AutomaticMemoryPlacementRequest, CATEGORIES, Category, CreateMemoryBodyRequest, CreateMemorySpaceRequest, DEFAULT_EMBEDDING_ENDPOINT, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_PROTOCOL, EDGE_TYPES, EMBEDDING_PROTOCOL_AUTO, EMBEDDING_PROTOCOL_OLLAMA, EMBEDDING_PROTOCOL_OPENAI, EdgeType, EntityView, INTENTS, Insight, Intent, JsonValue, LlmMemoryPlacementSelection, MNEMON_EMBEDDING_PROTOCOLS, MemoryBody, MemoryBodyCatalog, MemoryBodyMetadataMaintenanceResult, MemoryBodyMetadataSample, MemoryBodyMetadataUpdate, MemoryBodyProvider, MemoryBodyStats, MemoryBodyView, MemoryGraphEdge, MemoryGraphNode, MemoryGraphSnapshot, MemoryListRequest, MemoryListView, MemoryPersistenceStrategy, MemoryPlacementCandidate, MemoryPlacementCapability, MemoryPlacementDecision, MemoryPlacementPreference, MemoryPlacementRules, MemoryProviderCapabilities, MemoryProviderConfigField, MemoryProviderConfigOption, MemoryProviderConnection, MemoryProviderConnectionValue, MemoryProviderDescriptor, MemoryProviderIcon, MemoryProviderId, MemoryProviderRuntimeStatus, MemoryProviderServiceCatalog, MemoryProviderServiceView, MemoryReadMode, MemoryReadSource, MemoryReadStatus, MemorySpace, MemorySpaceCatalog, MemorySpaceMetadataMaintenanceResult, MemorySpaceMetadataSample, MemorySpaceMetadataUpdate, MemorySpaceProvider, MemorySpaceStats, MemorySpaceView, MemorySpacesStatus, MnemonEmbeddingConfig, MnemonEmbeddingProtocol, MnemonEmbeddingStatus, OpenVikingBodyConnection, OpenVikingSpaceConnection, PreparedMemoryPlacement, RecallQualityConfig, RecallQualityStats, RecallRelevanceTier, RememberRequest, ResolvedMemoryPersistenceStrategy, ResolvedMnemonEmbeddingConfig, ResolvedRecallQualityConfig, SOURCES, SearchRequest, Source, UpdateMemoryBodyRequest, UpdateMemoryProviderServiceRequest, UpdateMemorySpaceRequest } from "./contracts.js";
1
+ import { AutomaticMemoryPlacementRequest, CATEGORIES, Category, CreateMemoryBodyRequest, CreateMemorySpaceRequest, DEFAULT_EMBEDDING_ENDPOINT, DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_PROTOCOL, EDGE_TYPES, EMBEDDING_PROTOCOL_AUTO, EMBEDDING_PROTOCOL_OLLAMA, EMBEDDING_PROTOCOL_OPENAI, EdgeType, EntityView, INTENTS, Insight, Intent, JsonValue, LlmMemoryPlacementSelection, MNEMON_EMBEDDING_PROTOCOLS, MemoryBody, MemoryBodyCatalog, MemoryBodyMetadataMaintenanceResult, MemoryBodyMetadataSample, MemoryBodyMetadataUpdate, MemoryBodyProvider, MemoryBodyStats, MemoryBodyView, MemoryGraphEdge, MemoryGraphNode, MemoryGraphSnapshot, MemoryListRequest, MemoryListView, MemoryPersistenceStrategy, MemoryPlacementCandidate, MemoryPlacementCapability, MemoryPlacementDecision, MemoryPlacementPreference, MemoryPlacementRules, MemoryProviderCapabilities, MemoryProviderConfigField, MemoryProviderConfigOption, MemoryProviderConnection, MemoryProviderConnectionValue, MemoryProviderDescriptor, MemoryProviderIcon, MemoryProviderId, MemoryProviderRuntimeStatus, MemoryProviderServiceCatalog, MemoryProviderServiceView, MemoryReadMode, MemoryReadSource, MemoryReadStatus, MemorySpace, MemorySpaceCatalog, MemorySpaceMetadataMaintenanceResult, MemorySpaceMetadataSample, MemorySpaceMetadataUpdate, MemorySpaceProvider, MemorySpaceStats, MemorySpaceView, MemorySpaceWriteScope, MemorySpaceWriteScopeRequest, MemorySpacesStatus, MnemonEmbeddingConfig, MnemonEmbeddingProtocol, MnemonEmbeddingStatus, OpenVikingBodyConnection, OpenVikingSpaceConnection, PreparedMemoryPlacement, RecallQualityConfig, RecallQualityStats, RecallRelevanceTier, RememberRequest, ResolvedMemoryPersistenceStrategy, ResolvedMnemonEmbeddingConfig, ResolvedRecallQualityConfig, SOURCES, SearchRequest, Source, UpdateMemoryBodyRequest, UpdateMemoryProviderServiceRequest, UpdateMemorySpaceRequest } from "./contracts.js";
2
2
  import { i as MemorySpaceProviderEntry } from "./definitions-C5y84OE6.js";
3
3
  import z from "schemastery";
4
4
  import { Context } from "@deepseek-ai/cordis";
@@ -59,4 +59,4 @@ declare function resolveMemorySpaceProviderEntries(ctx: Context, declarations: r
59
59
  declare function installMemorySpaces(ctx: Context, entries: readonly MemorySpaceProviderEntry[], options?: InstallMemorySpacesOptions): Promise<void>;
60
60
  declare function apply(ctx: Context, config?: Config): Promise<void>;
61
61
  //#endregion
62
- export { type AutomaticMemoryPlacementRequest, type CATEGORIES, type Category, Config, type CreateMemoryBodyRequest, type CreateMemorySpaceRequest, type DEFAULT_EMBEDDING_ENDPOINT, type DEFAULT_EMBEDDING_MODEL, type DEFAULT_EMBEDDING_PROTOCOL, type EDGE_TYPES, type EMBEDDING_PROTOCOL_AUTO, type EMBEDDING_PROTOCOL_OLLAMA, type EMBEDDING_PROTOCOL_OPENAI, type EdgeType, type EntityView, type INTENTS, type Insight, InstallMemorySpacesOptions, type Intent, type JsonValue, type LlmMemoryPlacementSelection, type MNEMON_EMBEDDING_PROTOCOLS, type MemoryBody, type MemoryBodyCatalog, type MemoryBodyMetadataMaintenanceResult, type MemoryBodyMetadataSample, type MemoryBodyMetadataUpdate, type MemoryBodyProvider, type MemoryBodyStats, type MemoryBodyView, type MemoryGraphEdge, type MemoryGraphNode, type MemoryGraphSnapshot, type MemoryListRequest, type MemoryListView, type MemoryPersistenceStrategy, type MemoryPlacementCandidate, type MemoryPlacementCapability, type MemoryPlacementDecision, type MemoryPlacementPreference, type MemoryPlacementRules, type MemoryProviderCapabilities, type MemoryProviderConfigField, type MemoryProviderConfigOption, type MemoryProviderConnection, type MemoryProviderConnectionValue, type MemoryProviderDescriptor, type MemoryProviderIcon, type MemoryProviderId, type MemoryProviderRuntimeStatus, type MemoryProviderServiceCatalog, type MemoryProviderServiceView, type MemoryReadMode, type MemoryReadSource, type MemoryReadStatus, type MemorySpace, type MemorySpaceCatalog, type MemorySpaceMetadataMaintenanceResult, type MemorySpaceMetadataSample, type MemorySpaceMetadataUpdate, type MemorySpaceProvider, MemorySpaceProviderDeclaration, MemorySpaceProviderDeclarationSchema, type MemorySpaceStats, type MemorySpaceView, type MemorySpacesStatus, type MnemonEmbeddingConfig, type MnemonEmbeddingProtocol, type MnemonEmbeddingStatus, type OpenVikingBodyConnection, type OpenVikingSpaceConnection, type PreparedMemoryPlacement, type RecallQualityConfig, type RecallQualityStats, type RecallRelevanceTier, type RememberRequest, type ResolvedMemoryPersistenceStrategy, type ResolvedMnemonEmbeddingConfig, type ResolvedRecallQualityConfig, type SOURCES, type SearchRequest, type Source, type UpdateMemoryBodyRequest, type UpdateMemoryProviderServiceRequest, type UpdateMemorySpaceRequest, apply, inject, installMemorySpaces, memoryPlugin, name, resolveEmbedding, resolveMemorySpaceProviderEntries, resolvePersistenceStrategy, resolveRecallQuality };
62
+ export { type AutomaticMemoryPlacementRequest, type CATEGORIES, type Category, Config, type CreateMemoryBodyRequest, type CreateMemorySpaceRequest, type DEFAULT_EMBEDDING_ENDPOINT, type DEFAULT_EMBEDDING_MODEL, type DEFAULT_EMBEDDING_PROTOCOL, type EDGE_TYPES, type EMBEDDING_PROTOCOL_AUTO, type EMBEDDING_PROTOCOL_OLLAMA, type EMBEDDING_PROTOCOL_OPENAI, type EdgeType, type EntityView, type INTENTS, type Insight, InstallMemorySpacesOptions, type Intent, type JsonValue, type LlmMemoryPlacementSelection, type MNEMON_EMBEDDING_PROTOCOLS, type MemoryBody, type MemoryBodyCatalog, type MemoryBodyMetadataMaintenanceResult, type MemoryBodyMetadataSample, type MemoryBodyMetadataUpdate, type MemoryBodyProvider, type MemoryBodyStats, type MemoryBodyView, type MemoryGraphEdge, type MemoryGraphNode, type MemoryGraphSnapshot, type MemoryListRequest, type MemoryListView, type MemoryPersistenceStrategy, type MemoryPlacementCandidate, type MemoryPlacementCapability, type MemoryPlacementDecision, type MemoryPlacementPreference, type MemoryPlacementRules, type MemoryProviderCapabilities, type MemoryProviderConfigField, type MemoryProviderConfigOption, type MemoryProviderConnection, type MemoryProviderConnectionValue, type MemoryProviderDescriptor, type MemoryProviderIcon, type MemoryProviderId, type MemoryProviderRuntimeStatus, type MemoryProviderServiceCatalog, type MemoryProviderServiceView, type MemoryReadMode, type MemoryReadSource, type MemoryReadStatus, type MemorySpace, type MemorySpaceCatalog, type MemorySpaceMetadataMaintenanceResult, type MemorySpaceMetadataSample, type MemorySpaceMetadataUpdate, type MemorySpaceProvider, MemorySpaceProviderDeclaration, MemorySpaceProviderDeclarationSchema, type MemorySpaceStats, type MemorySpaceView, type MemorySpaceWriteScope, type MemorySpaceWriteScopeRequest, type MemorySpacesStatus, type MnemonEmbeddingConfig, type MnemonEmbeddingProtocol, type MnemonEmbeddingStatus, type OpenVikingBodyConnection, type OpenVikingSpaceConnection, type PreparedMemoryPlacement, type RecallQualityConfig, type RecallQualityStats, type RecallRelevanceTier, type RememberRequest, type ResolvedMemoryPersistenceStrategy, type ResolvedMnemonEmbeddingConfig, type ResolvedRecallQualityConfig, type SOURCES, type SearchRequest, type Source, type UpdateMemoryBodyRequest, type UpdateMemoryProviderServiceRequest, type UpdateMemorySpaceRequest, apply, inject, installMemorySpaces, memoryPlugin, name, resolveEmbedding, resolveMemorySpaceProviderEntries, resolvePersistenceStrategy, resolveRecallQuality };
package/lib/index.js CHANGED
@@ -3042,6 +3042,11 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3042
3042
  };
3043
3043
  const admittedByView = /* @__PURE__ */ new Map();
3044
3044
  const createdByView = /* @__PURE__ */ new Map();
3045
+ const writeBodies = (viewId, grant) => {
3046
+ if (grant.sourceInstanceKey !== context.sourceInstanceKey || grant.schema !== "dsh-mnemon.memory-spaces/v1") throw new Error("Memory Spaces write scope grant does not belong to this Source");
3047
+ const known = memoryInputStringArray(memoryInputRecord(grant.value, "Memory Spaces scope").knownMemoryBodyIds, "knownMemoryBodyIds", 1e4) ?? grantIds(grant);
3048
+ return [.../* @__PURE__ */ new Set([...known, ...createdByView.get(viewId) ?? []])];
3049
+ };
3045
3050
  const admit = (viewId, entries) => {
3046
3051
  const current = admittedByView.get(viewId) ?? /* @__PURE__ */ new Map();
3047
3052
  for (const entry of entries) if (entry.memoryBodyId !== void 0) current.set(entry.memoryBodyId + "/" + entry.id, entry.memoryBodyId);
@@ -3237,9 +3242,8 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3237
3242
  const grant = request.grant;
3238
3243
  if (grant === void 0) throw new Error("Memory Spaces action has no View ReadGrant");
3239
3244
  const allowedBodies = grantIds(grant);
3240
- const knownBodies = memoryInputStringArray(memoryInputRecord(grant.value, "Memory Spaces scope").knownMemoryBodyIds, "knownMemoryBodyIds", 1e4) ?? allowedBodies;
3241
3245
  const created = createdByView.get(request.view.id) ?? /* @__PURE__ */ new Set();
3242
- const writeBodies = [.../* @__PURE__ */ new Set([...knownBodies, ...created])];
3246
+ const writableBodies = writeBodies(request.view.id, grant);
3243
3247
  const admittedOwner = (id) => {
3244
3248
  const requestedSpace = memoryInputText(input.memoryBodyId, "memoryBodyId", 300, false);
3245
3249
  const entries = admittedByView.get(request.view.id);
@@ -3269,7 +3273,7 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3269
3273
  };
3270
3274
  } else if (input.operation === "update") {
3271
3275
  bodyId = memoryInputText(input.memoryBodyId, "memoryBodyId", 300);
3272
- if (!writeBodies.includes(bodyId)) throw new Error("Memory Space update is outside this View scope");
3276
+ if (!writableBodies.includes(bodyId)) throw new Error("Memory Space update is outside this View scope");
3273
3277
  const body = service.updateSpace(bodyId, {
3274
3278
  ...input.name === void 0 ? {} : { name: memoryInputText(input.name, "name", 100) },
3275
3279
  ...input.description === void 0 ? {} : { description: memoryInputText(input.description, "description", 1e3) },
@@ -3285,7 +3289,7 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3285
3289
  } else if (input.operation === "merge") {
3286
3290
  const target = memoryInputText(input.targetMemoryBodyId, "targetMemoryBodyId", 300);
3287
3291
  const sources = memoryInputStringArray(input.sourceMemoryBodyIds, "sourceMemoryBodyIds", 20) ?? [];
3288
- if ([target, ...sources].some((id) => !writeBodies.includes(id))) throw new Error("Memory Space merge is outside this View scope");
3292
+ if ([target, ...sources].some((id) => !writableBodies.includes(id))) throw new Error("Memory Space merge is outside this View scope");
3289
3293
  bodyId = target;
3290
3294
  result = await service.mergeSpaces(target, sources, input.deactivateSources !== false, request.signal);
3291
3295
  } else throw new Error("unsupported Memory Space management action");
@@ -3296,7 +3300,7 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3296
3300
  if (defaults.length !== 1) throw new Error("remember requires an explicit Memory Space in this View scope");
3297
3301
  bodyId = defaults[0];
3298
3302
  }
3299
- if (!writeBodies.includes(bodyId)) throw new Error("remember destination is outside this View scope");
3303
+ if (!writableBodies.includes(bodyId)) throw new Error("remember destination is outside this View scope");
3300
3304
  const category = memoryInputText(input.category, "category", 30, false);
3301
3305
  const source = memoryInputText(input.source, "source", 30, false);
3302
3306
  if (category !== void 0 && !CATEGORIES.has(category)) throw new Error(`unsupported category: ${category}`);
@@ -3333,6 +3337,23 @@ function createMemorySpacesSource(providerSnapshot, config = {}) {
3333
3337
  }, mutationResultCompletion(result));
3334
3338
  },
3335
3339
  manage(request) {
3340
+ if (request.mode === "read" && request.operation === "body-directory" && request.input !== null) {
3341
+ const input = memoryInputRecord(request.input, "Memory Spaces body-directory");
3342
+ if (input.writeScope !== void 0) {
3343
+ if (!service.config.writeEnabled) throw new Error("Memory Spaces is configured read-only");
3344
+ const scope = memoryInputRecord(input.writeScope, "Memory Spaces write scope");
3345
+ const viewId = memoryInputText(scope.viewId, "write scope viewId", 300);
3346
+ const grant = memoryInputRecord(scope.grant ?? null, "Memory Spaces write scope grant");
3347
+ return managementResult(service, {
3348
+ ...service.spaceDirectory(),
3349
+ writeScope: {
3350
+ viewId,
3351
+ sourceInstanceKey: context.sourceInstanceKey,
3352
+ memoryBodyIds: writeBodies(viewId, grant)
3353
+ }
3354
+ });
3355
+ }
3356
+ }
3336
3357
  return manageMemorySpaces(service, request);
3337
3358
  },
3338
3359
  async dispose() {
@@ -5,6 +5,7 @@
5
5
  * and persisted Document/Pack lineage; they all refer to memory spaces.
6
6
  */
7
7
  export type { MemoryJsonValue as JsonValue } from 'dsh-mnemon/contracts';
8
+ import type { MemoryReadGrant } from 'dsh-mnemon/contracts';
8
9
  export type MemoryProviderId = string;
9
10
  export type MemoryProviderConnectionValue = string | number | boolean;
10
11
  export type MemoryProviderConnection = Record<string, MemoryProviderConnectionValue>;
@@ -303,6 +304,17 @@ export interface MemorySpaceView extends MemorySpace {
303
304
  error?: string;
304
305
  stats?: MemorySpaceStats;
305
306
  }
307
+ /** Optional Host-only body-directory input; the Host binds the grant to its initiating View and exact Source. */
308
+ export interface MemorySpaceWriteScopeRequest {
309
+ viewId: string;
310
+ grant: MemoryReadGrant;
311
+ }
312
+ /** Source-owned write authority, distinct from the active namespaces pinned for recall. */
313
+ export interface MemorySpaceWriteScope {
314
+ viewId: string;
315
+ sourceInstanceKey: string;
316
+ memoryBodyIds: string[];
317
+ }
306
318
  export interface MemorySpaceCatalog {
307
319
  items: MemorySpaceView[];
308
320
  providers: MemoryProviderDescriptor[];
@@ -312,6 +324,8 @@ export interface MemorySpaceCatalog {
312
324
  activeCount: number;
313
325
  directory: string;
314
326
  generatedAt: string;
327
+ /** Present only when body-directory receives a supported writeScope request. Older Sources omit it. */
328
+ writeScope?: MemorySpaceWriteScope;
315
329
  }
316
330
  export interface MemoryGraphNode extends Insight {
317
331
  color: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon-source-memory-spaces",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "Memory Spaces Source and its private Provider SDK.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -62,7 +62,7 @@
62
62
  "@types/node": "^22.0.0",
63
63
  "@types/react": "^18.3.0",
64
64
  "@types/react-dom": "^18.3.0",
65
- "dsh-mnemon": "^0.5.7",
65
+ "dsh-mnemon": "^0.5.9",
66
66
  "dsh-mnemon-provider-byterover": "^0.5.4",
67
67
  "dsh-mnemon-provider-hindsight": "^0.5.4",
68
68
  "dsh-mnemon-provider-holographic": "^0.5.4",