@opendatalabs/personal-server-ts-server 1.3.2 → 1.3.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,2CAA2C,CAAC;AAOnD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AA6CD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,GACtB,yBAAyB,CA0E3B"}
1
+ {"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,2CAA2C,CAAC;AAOnD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AA6CD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,GACtB,yBAAyB,CA+E3B"}
package/dist/api-auth.js CHANGED
@@ -76,6 +76,10 @@ export function createServerApiAuth(deps) {
76
76
  result.mechanism === "control-plane-token")) {
77
77
  return { builder: result.auth.signer, grantId: "owner" };
78
78
  }
79
+ // Fail closed: a builder grant read can't be authorized if we can't
80
+ // identify this server's owner to bind the grant to.
81
+ if (!deps.serverOwner)
82
+ throw serverNotConfigured();
79
83
  const selectedEntry = deps.dataStorage?.findEntry({
80
84
  scope: input.scope,
81
85
  fileId: input.fileId,
@@ -85,6 +89,7 @@ export function createServerApiAuth(deps) {
85
89
  grantId: result.auth.payload.grantId ?? input.grantId,
86
90
  requestedScope: input.scope,
87
91
  fileId: input.fileId ?? selectedEntry?.fileId ?? undefined,
92
+ serverOwner: deps.serverOwner,
88
93
  }, {
89
94
  authSessionVerifier: deps.gateway,
90
95
  grantVerifier: deps.gateway,
@@ -1 +1 @@
1
- {"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAGpB,MAAM,4CAA4C,CAAC;AAKpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EACL,aAAa,EACb,aAAa,EACb,wBAAwB,GACzB,MAAM,8CAA8C,CAAC;AAkBtD,SAAS,mBAAmB;IAC1B,OAAO,IAAI,aAAa,CACtB,GAAG,EACH,uBAAuB,EACvB,0FAA0F,CAC3F,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CACd,MAAc,EACd,WAAsC;IAEtC,OAAO,OAAO,CACZ,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAClE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAAgB,EAChB,IAAuB;IAEvB,OAAO,mBAAmB,CAAC;QACzB,OAAO;QACP,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,oBAAoB,EAAE,IAAI,CAAC,UAAU;QACrC,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAsB,EACtB,MAAqB;IAErB,IAAI,qBAAqB,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,MAAM,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAAE,OAAO;QACtD,MAAM,IAAI,wBAAwB,EAAE,CAAC;IACvC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,wBAAwB,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAuB;IAEvB,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,OAAO;YAC1B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,cAAc;gBAAE,OAAO;YAClC,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,MAAM,mBAAmB,EAAE,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,aAAa,CAAC;oBACtB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;oBAC1B,QAAQ,EAAE,IAAI,CAAC,WAAW;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,OAAO;YAChC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjD,IACE,MAAM,CAAC,cAAc;gBACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAC7C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,KAAkC;YAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YACnE,CAAC;YACD,yDAAyD;YACzD,sEAAsE;YACtE,wDAAwD;YACxD,kEAAkE;YAClE,mEAAmE;YACnE,4DAA4D;YAC5D,8BAA8B;YAC9B,wEAAwE;YACxE,uEAAuE;YACvE,qEAAqE;YACrE,yDAAyD;YACzD,sEAAsE;YACtE,sEAAsE;YACtE,oEAAoE;YACpE,iEAAiE;YACjE,oEAAoE;YACpE,IACE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC7C,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa;oBACjC,MAAM,CAAC,SAAS,KAAK,qBAAqB,CAAC,EAC7C,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC3D,CAAC;YAED,oEAAoE;YACpE,qDAAqD;YACrD,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,MAAM,mBAAmB,EAAE,CAAC;YAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;gBAChD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,oBAAoB,CACtC;gBACE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;gBAC1B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;gBACrD,cAAc,EAAE,KAAK,CAAC,KAAK;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,aAAa,EAAE,MAAM,IAAI,SAAS;gBAC1D,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,EACD;gBACE,mBAAmB,EAAE,IAAI,CAAC,OAAO;gBACjC,aAAa,EAAE,IAAI,CAAC,OAAO;gBAC3B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C,CACF,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -14,7 +14,14 @@ export declare function writeBlockManifest(options: HierarchyManagerOptions, sco
14
14
  export declare function readScopeBlocks(options: HierarchyManagerOptions, scope: string, collectedAt: string, readOptions: {
15
15
  cursor?: string;
16
16
  maxBytes: number;
17
+ blockIds?: readonly string[];
17
18
  }): Promise<ReadScopeBlocksResponse>;
19
+ /**
20
+ * Manifest as a table of contents. Unlike the internal reader this returns null
21
+ * for a scope that was stored before block sidecars existed, so callers can
22
+ * degrade instead of failing.
23
+ */
24
+ export declare function readScopeBlockManifest(options: HierarchyManagerOptions, scope: string, collectedAt: string): Promise<DataBlockManifest | null>;
18
25
  export declare function hasScopeBlocks(options: HierarchyManagerOptions, scope: string, collectedAt: string): Promise<boolean>;
19
26
  /** List version filenames for a scope, newest first. Empty array if scope dir doesn't exist. */
20
27
  export declare function listVersions(options: HierarchyManagerOptions, scope: string): Promise<string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/storage/hierarchy.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC7B,MAAM,sDAAsD,CAAC;AAO9D,sDAAsD;AACtD,wBAAsB,aAAa,CACjC,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,iCAAiC;AACjC,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAgB/C;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,uBAAuB,CAAC,CAmElC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,gGAAgG;AAChG,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED;wFACwF;AACxF,wBAAsB,cAAc,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAKf"}
1
+ {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/storage/hierarchy.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC7B,MAAM,sDAAsD,CAAC;AAO9D,sDAAsD;AACtD,wBAAsB,aAAa,CACjC,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,iCAAiC;AACjC,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAgB/C;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GACA,OAAO,CAAC,uBAAuB,CAAC,CAsFlC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,gGAAgG;AAChG,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED;wFACwF;AACxF,wBAAsB,cAAc,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAKf"}
@@ -3,7 +3,7 @@ import { dirname, join, relative } from "node:path";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { DataFileEnvelopeSchema, } from "@opendatalabs/vana-sdk/browser";
5
5
  import { buildDataFilePath, buildScopeDir, filenameToTimestamp, } from "@opendatalabs/personal-server-ts-core/storage/hierarchy";
6
- import { DataBlockStorageError, encodeDataBlockCursor, validateDataBlockCursor, } from "@opendatalabs/personal-server-ts-core/storage/blocks";
6
+ import { DataBlockStorageError, encodeDataBlockCursor, selectScopeBlocksByIds, validateDataBlockCursor, } from "@opendatalabs/personal-server-ts-core/storage/blocks";
7
7
  import { previewJsonEnvelopePrefix } from "@opendatalabs/personal-server-ts-core/storage/preview";
8
8
  const TEXT_PAGE_MEDIA_TYPE = "text/plain; charset=utf-8";
9
9
  const textEncoder = new TextEncoder();
@@ -67,6 +67,17 @@ export async function writeBlockManifest(options, scope, collectedAt, manifest,
67
67
  }
68
68
  export async function readScopeBlocks(options, scope, collectedAt, readOptions) {
69
69
  const manifest = await readBlockManifest(options, scope, collectedAt);
70
+ if (readOptions.blockIds?.length) {
71
+ const selection = await selectScopeBlocksByIds(manifest, readOptions.blockIds, { maxBytes: readOptions.maxBytes }, (blockId) => readBlockPayloadIfPresent(options, scope, collectedAt, blockId));
72
+ return {
73
+ scope: manifest.scope,
74
+ collectedAt: manifest.collectedAt,
75
+ ...(manifest.schemaId ? { schemaId: manifest.schemaId } : {}),
76
+ contentKind: manifest.contentKind,
77
+ blocks: selection.blocks,
78
+ warnings: [...manifest.warnings, ...selection.warnings],
79
+ };
80
+ }
70
81
  const cursor = readOptions.cursor
71
82
  ? validateDataBlockCursor(readOptions.cursor, { scope, collectedAt })
72
83
  : undefined;
@@ -124,6 +135,23 @@ export async function readScopeBlocks(options, scope, collectedAt, readOptions)
124
135
  warnings: manifest.warnings,
125
136
  };
126
137
  }
138
+ /**
139
+ * Manifest as a table of contents. Unlike the internal reader this returns null
140
+ * for a scope that was stored before block sidecars existed, so callers can
141
+ * degrade instead of failing.
142
+ */
143
+ export async function readScopeBlockManifest(options, scope, collectedAt) {
144
+ try {
145
+ return await readBlockManifest(options, scope, collectedAt);
146
+ }
147
+ catch (err) {
148
+ if (err instanceof DataBlockStorageError &&
149
+ err.code === "block_manifest_not_found") {
150
+ return null;
151
+ }
152
+ throw err;
153
+ }
154
+ }
127
155
  export async function hasScopeBlocks(options, scope, collectedAt) {
128
156
  try {
129
157
  await access(buildBlockManifestPath(options.dataDir, scope, collectedAt));
@@ -200,6 +228,19 @@ async function readBlockPayload(options, scope, collectedAt, blockId) {
200
228
  throw err;
201
229
  }
202
230
  }
231
+ /** Payload read for block-addressed selection: a missing id is a warning, not a throw. */
232
+ async function readBlockPayloadIfPresent(options, scope, collectedAt, blockId) {
233
+ try {
234
+ return await readBlockPayload(options, scope, collectedAt, blockId);
235
+ }
236
+ catch (err) {
237
+ if (err instanceof DataBlockStorageError &&
238
+ err.code === "block_payload_not_found") {
239
+ return null;
240
+ }
241
+ throw err;
242
+ }
243
+ }
203
244
  function pageBlock(block, offsetBytes, maxBytes) {
204
245
  const text = typeof block.value === "string" ? block.value : JSON.stringify(block.value);
205
246
  const bytes = textEncoder.encode(text);
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/storage/hierarchy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/storage/hierarchy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-data-storage.d.ts","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,6CAA6C,CAAC;AAGrD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,GACxB,eAAe,CA4GjB"}
1
+ {"version":3,"file":"node-data-storage.d.ts","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,6CAA6C,CAAC;AAGrD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,GACxB,eAAe,CA+GjB"}
@@ -1,4 +1,4 @@
1
- import { deleteAllForScope, deleteDataFile, readDataFile, readDataFilePreview, hasScopeBlocks, readScopeBlocks, writeBlockManifest, writeDataFile, } from "./hierarchy.js";
1
+ import { deleteAllForScope, deleteDataFile, readDataFile, readDataFilePreview, hasScopeBlocks, readScopeBlockManifest, readScopeBlocks, writeBlockManifest, writeDataFile, } from "./hierarchy.js";
2
2
  export function createNodeDataStorage(deps) {
3
3
  return {
4
4
  kind: "node-fs-sqlite",
@@ -41,6 +41,9 @@ export function createNodeDataStorage(deps) {
41
41
  hasScopeBlocks(scope, collectedAt) {
42
42
  return hasScopeBlocks(deps.hierarchyOptions, scope, collectedAt);
43
43
  },
44
+ readBlockManifest(scope, collectedAt) {
45
+ return readScopeBlockManifest(deps.hierarchyOptions, scope, collectedAt);
46
+ },
44
47
  writeEnvelope(envelope) {
45
48
  return writeDataFile(deps.hierarchyOptions, envelope);
46
49
  },
@@ -1 +1 @@
1
- {"version":3,"file":"node-data-storage.js","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-data-storage.js","sourceRoot":"","sources":["../../src/storage/node-data-storage.ts"],"names":[],"mappings":"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"}
@@ -106401,6 +106401,101 @@ function assignBlockIds(blocks) {
106401
106401
  }));
106402
106402
  }
106403
106403
 
106404
+ // ../core/dist/storage/blocks/select.js
106405
+ var MAX_SELECTED_BLOCK_IDS = 50;
106406
+ var WARNING_ID_SAMPLE = 10;
106407
+ var TEXT_PAGE_MEDIA_TYPE = "text/plain; charset=utf-8";
106408
+ var textEncoder2 = new TextEncoder();
106409
+ var textDecoder = new TextDecoder();
106410
+ async function selectScopeBlocksByIds(manifest, blockIds, options, loadBlock) {
106411
+ const maxBytes = Math.max(1, options.maxBytes);
106412
+ const refById = new Map(manifest.blocks.map((ref) => [ref.id, ref]));
106413
+ const requested = [];
106414
+ const seen = /* @__PURE__ */ new Set();
106415
+ let cappedIds = 0;
106416
+ for (const blockId of blockIds) {
106417
+ if (typeof blockId !== "string" || !blockId || seen.has(blockId))
106418
+ continue;
106419
+ seen.add(blockId);
106420
+ if (requested.length >= MAX_SELECTED_BLOCK_IDS) {
106421
+ cappedIds += 1;
106422
+ continue;
106423
+ }
106424
+ requested.push(blockId);
106425
+ }
106426
+ const blocks = [];
106427
+ const missingIds = [];
106428
+ const skippedIds = [];
106429
+ const warnings = [];
106430
+ let bytes2 = 0;
106431
+ for (let index = 0; index < requested.length; index += 1) {
106432
+ const blockId = requested[index];
106433
+ const ref = refById.get(blockId);
106434
+ if (!ref) {
106435
+ missingIds.push(blockId);
106436
+ continue;
106437
+ }
106438
+ if (blocks.length > 0 && bytes2 + ref.sizeBytes > maxBytes) {
106439
+ skippedIds.push(...requested.slice(index));
106440
+ break;
106441
+ }
106442
+ const block = await loadBlock(blockId);
106443
+ if (!block) {
106444
+ missingIds.push(blockId);
106445
+ continue;
106446
+ }
106447
+ const page = pageBlock(block, maxBytes - bytes2);
106448
+ blocks.push(page.block);
106449
+ bytes2 += page.block.sizeBytes;
106450
+ if (page.truncated) {
106451
+ skippedIds.push(...requested.slice(index + 1));
106452
+ break;
106453
+ }
106454
+ }
106455
+ if (cappedIds > 0) {
106456
+ warnings.push({
106457
+ code: "block_selection_capped",
106458
+ message: `${cappedIds} block ids beyond the ${MAX_SELECTED_BLOCK_IDS} id limit were ignored`
106459
+ });
106460
+ }
106461
+ if (missingIds.length > 0) {
106462
+ warnings.push({
106463
+ code: "block_not_found",
106464
+ message: `${missingIds.length} requested block ids are not in this scope: ${summarizeIds(missingIds)}`
106465
+ });
106466
+ }
106467
+ if (skippedIds.length > 0) {
106468
+ warnings.push({
106469
+ code: "block_selection_truncated",
106470
+ message: `maxBytes reached; ${skippedIds.length} requested blocks were not returned: ${summarizeIds(skippedIds)}. Request them in a follow-up read.`
106471
+ });
106472
+ }
106473
+ return { blocks, warnings };
106474
+ }
106475
+ function summarizeIds(ids) {
106476
+ const sample = ids.slice(0, WARNING_ID_SAMPLE).join(", ");
106477
+ return ids.length > WARNING_ID_SAMPLE ? `${sample}, ...(${ids.length - WARNING_ID_SAMPLE} more)` : sample;
106478
+ }
106479
+ function pageBlock(block, maxBytes) {
106480
+ const text = typeof block.value === "string" ? block.value : JSON.stringify(block.value);
106481
+ const bytes2 = textEncoder2.encode(text);
106482
+ if (bytes2.length <= maxBytes) {
106483
+ return { block, truncated: false };
106484
+ }
106485
+ const end = Math.max(1, maxBytes);
106486
+ return {
106487
+ block: {
106488
+ ...block,
106489
+ path: `${block.path}[bytes 0:${end}]`,
106490
+ mediaType: block.mediaType.startsWith("text/") ? block.mediaType : TEXT_PAGE_MEDIA_TYPE,
106491
+ value: textDecoder.decode(bytes2.slice(0, end)),
106492
+ sizeBytes: end,
106493
+ truncated: true
106494
+ },
106495
+ truncated: true
106496
+ };
106497
+ }
106498
+
106404
106499
  // ../core/dist/storage/blocks/errors.js
106405
106500
  var DataBlockStorageError = class extends Error {
106406
106501
  code;
@@ -106413,9 +106508,9 @@ var DataBlockStorageError = class extends Error {
106413
106508
 
106414
106509
  // ../core/dist/storage/preview.js
106415
106510
  var DEFAULT_PREVIEW_NODE_BUDGET = 15e3;
106416
- var textEncoder2 = new TextEncoder();
106511
+ var textEncoder3 = new TextEncoder();
106417
106512
  function utf8Length(text) {
106418
- return textEncoder2.encode(text).byteLength;
106513
+ return textEncoder3.encode(text).byteLength;
106419
106514
  }
106420
106515
  function clipToUtf8Bytes(text, maxBytes) {
106421
106516
  if (maxBytes <= 0)
@@ -106710,9 +106805,9 @@ function summarizeScopes(entries, options) {
106710
106805
  var DEFAULT_INDEXED_DB_NAME = "personal-server-lite-storage";
106711
106806
  var DEFAULT_INDEXED_DB_STORE = "state";
106712
106807
  var DEFAULT_INDEXED_DB_KEY = "data-storage-v1";
106713
- var TEXT_PAGE_MEDIA_TYPE = "text/plain; charset=utf-8";
106714
- var textEncoder3 = new TextEncoder();
106715
- var textDecoder = new TextDecoder();
106808
+ var TEXT_PAGE_MEDIA_TYPE2 = "text/plain; charset=utf-8";
106809
+ var textEncoder4 = new TextEncoder();
106810
+ var textDecoder2 = new TextDecoder();
106716
106811
  function schemaIdFromEnvelope(envelope) {
106717
106812
  const schemaId = envelope.schemaId;
106718
106813
  return typeof schemaId === "string" ? schemaId : void 0;
@@ -107067,6 +107162,17 @@ async function createPersistentPsLiteStorage(adapter, persistence = createIndexe
107067
107162
  }, "Block sidecar cache write failed; serving read from local envelope");
107068
107163
  }
107069
107164
  }
107165
+ if (options.blockIds?.length) {
107166
+ const selection = await selectScopeBlocksByIds(manifest, options.blockIds, { maxBytes: options.maxBytes }, async (blockId) => inMemoryBlocks?.find((candidate) => candidate.id === blockId) ?? await readBlockPayloadFromStores(fileStore, fallbackStore, blockPayloadPath(scope, collectedAt2, blockId)));
107167
+ return {
107168
+ scope: manifest.scope,
107169
+ collectedAt: manifest.collectedAt,
107170
+ ...manifest.schemaId ? { schemaId: manifest.schemaId } : {},
107171
+ contentKind: manifest.contentKind,
107172
+ blocks: selection.blocks,
107173
+ warnings: [...manifest.warnings, ...selection.warnings]
107174
+ };
107175
+ }
107070
107176
  const cursorResult = options.cursor ? validateDataBlockCursor(options.cursor, { scope, collectedAt: collectedAt2 }) : { ok: true, cursor: null };
107071
107177
  if (!cursorResult.ok) {
107072
107178
  throw new DataBlockStorageError("cursor_invalid", cursorResult.error.message);
@@ -107109,7 +107215,7 @@ async function createPersistentPsLiteStorage(adapter, persistence = createIndexe
107109
107215
  blocks.length = 0;
107110
107216
  continue;
107111
107217
  }
107112
- const page = pageBlock(block, offset, maxBytes - bytes2);
107218
+ const page = pageBlock2(block, offset, maxBytes - bytes2);
107113
107219
  blocks.push(page.block);
107114
107220
  bytes2 += page.block.sizeBytes;
107115
107221
  if (page.nextOffset !== void 0) {
@@ -107135,10 +107241,12 @@ async function createPersistentPsLiteStorage(adapter, persistence = createIndexe
107135
107241
  warnings: manifest.warnings
107136
107242
  };
107137
107243
  },
107138
- async hasScopeBlocks(scope, collectedAt2) {
107244
+ async readBlockManifest(scope, collectedAt2) {
107139
107245
  const manifestPath = blockManifestPath(scope, collectedAt2);
107140
- const manifest = await fileStore.readBlockManifest?.(manifestPath) ?? (fileStore === fallbackStore ? null : await fallbackStore.readBlockManifest?.(manifestPath)) ?? null;
107141
- return Boolean(manifest);
107246
+ return await fileStore.readBlockManifest?.(manifestPath) ?? (fileStore === fallbackStore ? null : await fallbackStore.readBlockManifest?.(manifestPath)) ?? null;
107247
+ },
107248
+ async hasScopeBlocks(scope, collectedAt2) {
107249
+ return Boolean(await storagePort.readBlockManifest?.(scope, collectedAt2));
107142
107250
  },
107143
107251
  async canReadScopeBlocks(scope, collectedAt2) {
107144
107252
  if (await storagePort.hasScopeBlocks?.(scope, collectedAt2)) {
@@ -107319,20 +107427,20 @@ async function createPersistentPsLiteStorage(adapter, persistence = createIndexe
107319
107427
  async function readPreviewFromFileStore(store, path, maxBytes) {
107320
107428
  return await store.readEnvelopePreview?.(path, { maxBytes }) ?? null;
107321
107429
  }
107322
- function pageBlock(block, offsetBytes, maxBytes) {
107430
+ function pageBlock2(block, offsetBytes, maxBytes) {
107323
107431
  const text = typeof block.value === "string" ? block.value : JSON.stringify(block.value);
107324
- const bytes2 = textEncoder3.encode(text);
107432
+ const bytes2 = textEncoder4.encode(text);
107325
107433
  if (offsetBytes <= 0 && bytes2.length <= maxBytes) {
107326
107434
  return { block };
107327
107435
  }
107328
107436
  const start = Math.min(Math.max(0, offsetBytes), bytes2.length);
107329
107437
  const end = Math.min(bytes2.length, start + Math.max(1, maxBytes));
107330
- const value = textDecoder.decode(bytes2.slice(start, end));
107438
+ const value = textDecoder2.decode(bytes2.slice(start, end));
107331
107439
  return {
107332
107440
  block: {
107333
107441
  ...block,
107334
107442
  path: `${block.path}[bytes ${start}:${end}]`,
107335
- mediaType: block.mediaType.startsWith("text/") ? block.mediaType : TEXT_PAGE_MEDIA_TYPE,
107443
+ mediaType: block.mediaType.startsWith("text/") ? block.mediaType : TEXT_PAGE_MEDIA_TYPE2,
107336
107444
  value,
107337
107445
  sizeBytes: end - start,
107338
107446
  truncated: end < bytes2.length
@@ -107983,11 +108091,21 @@ var ScopeMismatchError = class extends ProtocolError {
107983
108091
  super(403, "SCOPE_MISMATCH", "Scope not granted", details);
107984
108092
  }
107985
108093
  };
108094
+ var GrantOwnerMismatchError = class extends ProtocolError {
108095
+ constructor(details) {
108096
+ super(403, "GRANT_OWNER_MISMATCH", "Grant was not issued by this server's owner", details);
108097
+ }
108098
+ };
107986
108099
  var PsUnavailableError = class extends ProtocolError {
107987
108100
  constructor(details) {
107988
108101
  super(503, "PS_UNAVAILABLE", "Personal Server runtime unavailable", details);
107989
108102
  }
107990
108103
  };
108104
+ var ServerNotConfiguredError = class extends ProtocolError {
108105
+ constructor(details) {
108106
+ super(500, "SERVER_NOT_CONFIGURED", "Server is not configured", details);
108107
+ }
108108
+ };
107991
108109
 
107992
108110
  // ../core/dist/auth/request.js
107993
108111
  function resolveOrigin(origin) {
@@ -109885,6 +110003,18 @@ async function verifyDataReadPolicy(input, ports) {
109885
110003
  actual: input.signer
109886
110004
  });
109887
110005
  }
110006
+ if (!input.serverOwner) {
110007
+ throw new ServerNotConfiguredError({
110008
+ reason: "serverOwner is required to verify grant ownership"
110009
+ });
110010
+ }
110011
+ if (!grant.grantorAddress || grant.grantorAddress.toLowerCase() !== input.serverOwner.toLowerCase()) {
110012
+ throw new GrantOwnerMismatchError({
110013
+ grantId: grant.id,
110014
+ expected: input.serverOwner,
110015
+ actual: grant.grantorAddress ?? null
110016
+ });
110017
+ }
109888
110018
  return grant;
109889
110019
  }
109890
110020
 
@@ -110092,6 +110222,53 @@ var McpDataReadError = class extends Error {
110092
110222
  };
110093
110223
  function createMcpDataReadClient(options) {
110094
110224
  const basePath = options.basePath ?? "/v1/data";
110225
+ async function authorizeScopeRead(params) {
110226
+ const safeScope = encodeURIComponent(params.scope);
110227
+ const signingUri = `${basePath}/${safeScope}`;
110228
+ const authorization = await signMcpGranteeRequest({
110229
+ account: options.granteeAccount,
110230
+ aud: options.serverOrigin,
110231
+ method: "GET",
110232
+ uri: signingUri,
110233
+ grantId: params.grantId
110234
+ });
110235
+ const url2 = new URL(signingUri, options.serverOrigin).toString();
110236
+ const request2 = new Request(url2, {
110237
+ method: "GET",
110238
+ headers: { Authorization: authorization }
110239
+ });
110240
+ try {
110241
+ const authResult = await options.dataApiDeps.auth.authorizeBuilderRead({
110242
+ request: request2,
110243
+ scope: params.scope,
110244
+ grantId: params.grantId,
110245
+ fileId: params.fileId
110246
+ });
110247
+ return { request: request2, authResult };
110248
+ } catch (err2) {
110249
+ if (err2 instanceof ProtocolError) {
110250
+ throw new McpDataReadError(err2.code, err2.toJSON());
110251
+ }
110252
+ throw err2;
110253
+ }
110254
+ }
110255
+ async function writeReadAccessLog(request2, params) {
110256
+ const logId = options.dataApiDeps.createLogId?.() ?? crypto.randomUUID();
110257
+ const timestamp = (options.dataApiDeps.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
110258
+ const ipAddress = request2.headers.get("x-forwarded-for") ?? request2.headers.get("x-real-ip") ?? "unknown";
110259
+ const userAgent = request2.headers.get("user-agent") ?? "unknown";
110260
+ await options.dataApiDeps.accessLogWriter.write({
110261
+ logId,
110262
+ grantId: params.authResult?.grantId ?? params.grantId,
110263
+ builder: params.authResult?.builder ?? options.granteeAccount.address,
110264
+ action: "read",
110265
+ scope: params.scope,
110266
+ timestamp,
110267
+ ipAddress,
110268
+ userAgent
110269
+ });
110270
+ return { logId, timestamp, ipAddress, userAgent };
110271
+ }
110095
110272
  return {
110096
110273
  async listScopes({ scopePrefix, limit, offset } = {}) {
110097
110274
  const params = new URLSearchParams();
@@ -110135,7 +110312,7 @@ function createMcpDataReadClient(options) {
110135
110312
  hasBlocks
110136
110313
  };
110137
110314
  },
110138
- async readScopeBlocks({ scope, grantId, cursor, maxBytes }) {
110315
+ async readScopeBlocks({ scope, grantId, cursor, maxBytes, blockIds }) {
110139
110316
  const storage = options.dataApiDeps.storage;
110140
110317
  if (!storage.readScopeBlocks) {
110141
110318
  throw new McpDataReadError(503, {
@@ -110155,54 +110332,19 @@ function createMcpDataReadClient(options) {
110155
110332
  message: `No data found for scope "${scope}"`
110156
110333
  });
110157
110334
  }
110158
- const safeScope = encodeURIComponent(scope);
110159
- const signingUri = `${basePath}/${safeScope}`;
110160
- const authorization = await signMcpGranteeRequest({
110161
- account: options.granteeAccount,
110162
- aud: options.serverOrigin,
110163
- method: "GET",
110164
- uri: signingUri,
110165
- grantId
110166
- });
110167
- const url2 = new URL(signingUri, options.serverOrigin).toString();
110168
- const request2 = new Request(url2, {
110169
- method: "GET",
110170
- headers: { Authorization: authorization }
110335
+ const { request: request2, authResult } = await authorizeScopeRead({
110336
+ scope,
110337
+ grantId,
110338
+ fileId: selectedEntry.fileId ?? void 0
110171
110339
  });
110172
- let authResult;
110173
- try {
110174
- authResult = await options.dataApiDeps.auth.authorizeBuilderRead({
110175
- request: request2,
110176
- scope,
110177
- grantId,
110178
- fileId: selectedEntry.fileId ?? void 0
110179
- });
110180
- } catch (err2) {
110181
- if (err2 instanceof ProtocolError) {
110182
- throw new McpDataReadError(err2.code, err2.toJSON());
110183
- }
110184
- throw err2;
110185
- }
110186
110340
  try {
110187
110341
  const result = await storage.readScopeBlocks(scope, selectedEntry.collectedAt, {
110188
110342
  cursor,
110189
- maxBytes: maxBytes ?? 16384
110190
- });
110191
- const logId = options.dataApiDeps.createLogId?.() ?? crypto.randomUUID();
110192
- const timestamp = (options.dataApiDeps.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
110193
- const ipAddress = request2.headers.get("x-forwarded-for") ?? request2.headers.get("x-real-ip") ?? "unknown";
110194
- const userAgent = request2.headers.get("user-agent") ?? "unknown";
110195
- await options.dataApiDeps.accessLogWriter.write({
110196
- logId,
110197
- grantId: authResult?.grantId ?? grantId,
110198
- builder: authResult?.builder ?? options.granteeAccount.address,
110199
- action: "read",
110200
- scope,
110201
- timestamp,
110202
- ipAddress,
110203
- userAgent
110343
+ maxBytes: maxBytes ?? 16384,
110344
+ ...blockIds?.length ? { blockIds } : {}
110204
110345
  });
110205
- if (authResult?.grantId && authResult.builder && !cursor && !result.nextCursor) {
110346
+ const { logId, timestamp, ipAddress, userAgent } = await writeReadAccessLog(request2, { scope, grantId, authResult });
110347
+ if (authResult?.grantId && authResult.builder && !cursor && !blockIds?.length && !result.nextCursor) {
110206
110348
  reportPersonalServerReadFulfillment(options.dataApiDeps, {
110207
110349
  builder: authResult.builder,
110208
110350
  fileId: selectedEntry.fileId ?? void 0,
@@ -110232,6 +110374,26 @@ function createMcpDataReadClient(options) {
110232
110374
  throw err2;
110233
110375
  }
110234
110376
  },
110377
+ async readBlockManifest({ scope, grantId }) {
110378
+ const storage = options.dataApiDeps.storage;
110379
+ if (!storage.readBlockManifest)
110380
+ return null;
110381
+ const selectedEntry = storage.findEntry({ scope });
110382
+ if (!selectedEntry) {
110383
+ throw new McpDataReadError(404, {
110384
+ error: "NOT_FOUND",
110385
+ message: `No data found for scope "${scope}"`
110386
+ });
110387
+ }
110388
+ const { request: request2, authResult } = await authorizeScopeRead({
110389
+ scope,
110390
+ grantId,
110391
+ fileId: selectedEntry.fileId ?? void 0
110392
+ });
110393
+ const manifest = await storage.readBlockManifest(scope, selectedEntry.collectedAt);
110394
+ await writeReadAccessLog(request2, { scope, grantId, authResult });
110395
+ return manifest;
110396
+ },
110235
110397
  async readRawScopeFile({ scope, grantId, at: at3, fileId }) {
110236
110398
  const storage = options.dataApiDeps.storage;
110237
110399
  const selectedEntry = storage.findEntry({
@@ -110914,7 +111076,7 @@ var MiniSearch = class _MiniSearch {
110914
111076
  * @param document The document to be indexed
110915
111077
  */
110916
111078
  add(document2) {
110917
- const { extractField, stringifyField, tokenize, processTerm, fields, idField } = this._options;
111079
+ const { extractField, stringifyField, tokenize, processTerm: processTerm2, fields, idField } = this._options;
110918
111080
  const id2 = extractField(document2, idField);
110919
111081
  if (id2 == null) {
110920
111082
  throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
@@ -110933,7 +111095,7 @@ var MiniSearch = class _MiniSearch {
110933
111095
  const uniqueTerms = new Set(tokens).size;
110934
111096
  this.addFieldLength(shortDocumentId, fieldId, this._documentCount - 1, uniqueTerms);
110935
111097
  for (const term of tokens) {
110936
- const processedTerm = processTerm(term, field);
111098
+ const processedTerm = processTerm2(term, field);
110937
111099
  if (Array.isArray(processedTerm)) {
110938
111100
  for (const t10 of processedTerm) {
110939
111101
  this.addTerm(fieldId, shortDocumentId, t10);
@@ -110995,7 +111157,7 @@ var MiniSearch = class _MiniSearch {
110995
111157
  * @param document The document to be removed
110996
111158
  */
110997
111159
  remove(document2) {
110998
- const { tokenize, processTerm, extractField, stringifyField, fields, idField } = this._options;
111160
+ const { tokenize, processTerm: processTerm2, extractField, stringifyField, fields, idField } = this._options;
110999
111161
  const id2 = extractField(document2, idField);
111000
111162
  if (id2 == null) {
111001
111163
  throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
@@ -111013,7 +111175,7 @@ var MiniSearch = class _MiniSearch {
111013
111175
  const uniqueTerms = new Set(tokens).size;
111014
111176
  this.removeFieldLength(shortId, fieldId, this._documentCount, uniqueTerms);
111015
111177
  for (const term of tokens) {
111016
- const processedTerm = processTerm(term, field);
111178
+ const processedTerm = processTerm2(term, field);
111017
111179
  if (Array.isArray(processedTerm)) {
111018
111180
  for (const t10 of processedTerm) {
111019
111181
  this.removeTerm(fieldId, shortId, t10);
@@ -111750,8 +111912,8 @@ var MiniSearch = class _MiniSearch {
111750
111912
  const results2 = query.queries.map((subquery) => this.executeQuery(subquery, options2));
111751
111913
  return this.combineResults(results2, options2.combineWith);
111752
111914
  }
111753
- const { tokenize, processTerm, searchOptions: globalSearchOptions } = this._options;
111754
- const options = { tokenize, processTerm, ...globalSearchOptions, ...searchOptions };
111915
+ const { tokenize, processTerm: processTerm2, searchOptions: globalSearchOptions } = this._options;
111916
+ const options = { tokenize, processTerm: processTerm2, ...globalSearchOptions, ...searchOptions };
111755
111917
  const { tokenize: searchTokenize, processTerm: searchProcessTerm } = options;
111756
111918
  const terms = searchTokenize(query).flatMap((term) => searchProcessTerm(term)).filter((term) => !!term);
111757
111919
  const queries = terms.map(termToQuerySpec(options));
@@ -112155,16 +112317,86 @@ var SPACE_OR_PUNCTUATION = /[\n\r\p{Z}\p{P}]+/u;
112155
112317
  // ../core/dist/mcp/search/index.js
112156
112318
  var SEARCH_FIELDS = ["title", "text", "preview"];
112157
112319
  var STORE_FIELDS = ["id", "scope", "source", "title", "preview", "blockRef"];
112320
+ var PREFIX_MIN_TERM_CHARS = 4;
112321
+ var MIN_TERM_CHARS = 2;
112322
+ var STOPWORDS = /* @__PURE__ */ new Set([
112323
+ "a",
112324
+ "an",
112325
+ "and",
112326
+ "are",
112327
+ "as",
112328
+ "at",
112329
+ "be",
112330
+ "but",
112331
+ "by",
112332
+ "did",
112333
+ "do",
112334
+ "does",
112335
+ "for",
112336
+ "from",
112337
+ "had",
112338
+ "has",
112339
+ "have",
112340
+ "he",
112341
+ "how",
112342
+ "i",
112343
+ "if",
112344
+ "in",
112345
+ "is",
112346
+ "it",
112347
+ "its",
112348
+ "me",
112349
+ "my",
112350
+ "no",
112351
+ "not",
112352
+ "of",
112353
+ "on",
112354
+ "or",
112355
+ "our",
112356
+ "she",
112357
+ "so",
112358
+ "that",
112359
+ "the",
112360
+ "their",
112361
+ "them",
112362
+ "then",
112363
+ "there",
112364
+ "they",
112365
+ "this",
112366
+ "to",
112367
+ "was",
112368
+ "we",
112369
+ "were",
112370
+ "what",
112371
+ "when",
112372
+ "where",
112373
+ "which",
112374
+ "who",
112375
+ "why",
112376
+ "will",
112377
+ "with",
112378
+ "you",
112379
+ "your"
112380
+ ]);
112381
+ var SCORE_FLOOR_RATIO = 0.25;
112382
+ function processTerm(term) {
112383
+ const normalized = term.toLowerCase();
112384
+ if (normalized.length < MIN_TERM_CHARS)
112385
+ return null;
112386
+ return STOPWORDS.has(normalized) ? null : normalized;
112387
+ }
112388
+ var MINISEARCH_OPTIONS = {
112389
+ idField: "id",
112390
+ fields: SEARCH_FIELDS,
112391
+ storeFields: STORE_FIELDS,
112392
+ processTerm,
112393
+ searchOptions: {
112394
+ boost: { title: 2, preview: 1.2, text: 1 },
112395
+ prefix: (term) => term.length >= PREFIX_MIN_TERM_CHARS
112396
+ }
112397
+ };
112158
112398
  function createMiniSearch() {
112159
- return new MiniSearch({
112160
- idField: "id",
112161
- fields: SEARCH_FIELDS,
112162
- storeFields: STORE_FIELDS,
112163
- searchOptions: {
112164
- boost: { title: 2, preview: 1.2, text: 1 },
112165
- prefix: true
112166
- }
112167
- });
112399
+ return new MiniSearch(MINISEARCH_OPTIONS);
112168
112400
  }
112169
112401
  function toHit(result) {
112170
112402
  return {
@@ -112192,24 +112424,18 @@ var MiniSearchIndex = class _MiniSearchIndex {
112192
112424
  return index;
112193
112425
  }
112194
112426
  static load(serialized) {
112195
- return new _MiniSearchIndex(MiniSearch.loadJSON(serialized, {
112196
- idField: "id",
112197
- fields: SEARCH_FIELDS,
112198
- storeFields: STORE_FIELDS,
112199
- searchOptions: {
112200
- boost: { title: 2, preview: 1.2, text: 1 },
112201
- prefix: true
112202
- }
112203
- }));
112427
+ return new _MiniSearchIndex(MiniSearch.loadJSON(serialized, MINISEARCH_OPTIONS));
112204
112428
  }
112205
112429
  add(documents) {
112206
112430
  this.index.addAll(documents);
112207
112431
  }
112208
112432
  search({ query, scopes, limit = 20 }) {
112209
112433
  const allowedScopes = scopes ? new Set(scopes) : null;
112210
- return this.index.search(query, {
112434
+ const results = this.index.search(query, {
112211
112435
  filter: allowedScopes ? (result) => allowedScopes.has(String(result.scope)) : void 0
112212
- }).slice(0, limit).map(toHit);
112436
+ });
112437
+ const scoreFloor = (results[0]?.score ?? 0) * SCORE_FLOOR_RATIO;
112438
+ return results.filter((result) => result.score >= scoreFloor).slice(0, limit).map(toHit);
112213
112439
  }
112214
112440
  serialize() {
112215
112441
  return JSON.stringify(this.index);
@@ -112324,7 +112550,7 @@ var rawScopeFileInputSchema = {
112324
112550
  var STRUCTURED_CONTENT_TEXT_LIMIT_BYTES = 64 * 1024;
112325
112551
  var resultTextEncoder = new TextEncoder();
112326
112552
  function textResult(value, isError = false) {
112327
- const text = typeof value === "string" ? value : JSON.stringify(value, null, 2);
112553
+ const text = typeof value === "string" ? value : JSON.stringify(value);
112328
112554
  const textBytes = resultTextEncoder.encode(text).byteLength;
112329
112555
  const structuredContent = !isError && textBytes <= STRUCTURED_CONTENT_TEXT_LIMIT_BYTES && typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
112330
112556
  return {
@@ -112363,6 +112589,25 @@ function uniqueSources(connection) {
112363
112589
  }
112364
112590
  return Array.from(set2).sort();
112365
112591
  }
112592
+ function normalizeBlockIdsInput(value) {
112593
+ if (!Array.isArray(value))
112594
+ return [];
112595
+ const blockIds = [];
112596
+ const seen = /* @__PURE__ */ new Set();
112597
+ for (const raw of value) {
112598
+ if (typeof raw !== "string")
112599
+ continue;
112600
+ const blockId = raw.trim();
112601
+ if (!blockId || blockId.length > BLOCK_ID_MAX_CHARS || seen.has(blockId)) {
112602
+ continue;
112603
+ }
112604
+ seen.add(blockId);
112605
+ blockIds.push(blockId);
112606
+ if (blockIds.length >= MAX_SELECTED_BLOCK_IDS)
112607
+ break;
112608
+ }
112609
+ return blockIds;
112610
+ }
112366
112611
  function normalizeScopeListInput(value) {
112367
112612
  if (!Array.isArray(value))
112368
112613
  return [];
@@ -112380,28 +112625,33 @@ function normalizeScopeListInput(value) {
112380
112625
  }
112381
112626
  return scopes;
112382
112627
  }
112628
+ var MAX_MCP_TOOL_TIMEOUT_MS = 9e4;
112383
112629
  var DEFAULT_SEARCH_LIMIT = 5;
112384
112630
  var MAX_SEARCH_LIMIT = 50;
112385
112631
  var MAX_SEARCH_SCOPES = 200;
112386
112632
  var DEFAULT_SEARCH_MAX_SCOPES = MAX_SEARCH_SCOPES;
112387
112633
  var DEFAULT_SEARCH_TIMEOUT_MS = 3e4;
112388
- var MAX_SEARCH_TIMEOUT_MS = 3e5;
112634
+ var MAX_SEARCH_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112389
112635
  var DEFAULT_SEARCH_DISCOVERY_TIMEOUT_MS = 2e3;
112390
- var MAX_SEARCH_TOTAL_TIMEOUT_MS = 3e5;
112636
+ var MAX_SEARCH_TOTAL_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112391
112637
  var DEFAULT_READ_SCOPE_MAX_BYTES = 64 * 1024;
112392
112638
  var MAX_READ_SCOPE_MAX_BYTES = 5 * 1024 * 1024;
112393
112639
  var DEFAULT_READ_SCOPE_TIMEOUT_MS = 6e4;
112394
- var MAX_READ_SCOPE_TIMEOUT_MS = 3e5;
112640
+ var MAX_READ_SCOPE_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112395
112641
  var DEFAULT_READ_FILE_TIMEOUT_MS = 6e4;
112396
- var MAX_READ_FILE_TIMEOUT_MS = 3e5;
112642
+ var MAX_READ_FILE_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112397
112643
  var DEFAULT_READ_FILE_MAX_BYTES = 10 * 1024 * 1024;
112398
112644
  var MAX_READ_FILE_MAX_BYTES = 25 * 1024 * 1024;
112399
112645
  var DEFAULT_SEARCH_MAX_BYTES = 64 * 1024;
112400
112646
  var MAX_SEARCH_MAX_BYTES = 1024 * 1024;
112401
112647
  var DEFAULT_SCOPE_METADATA_TIMEOUT_MS = 2e3;
112402
- var SEARCH_MAX_PAGES_PER_SCOPE = 16;
112648
+ var DEFAULT_LIST_BLOCKS_LIMIT = 100;
112649
+ var MAX_LIST_BLOCKS_LIMIT = 500;
112650
+ var LIST_BLOCKS_TIMEOUT_MS = 15e3;
112651
+ var SEARCH_MAX_PAGES_PER_SCOPE = 256;
112403
112652
  var SEARCH_QUERY_MAX_CHARS = 256;
112404
112653
  var SEARCH_SCOPE_MAX_CHARS = 128;
112654
+ var BLOCK_ID_MAX_CHARS = 128;
112405
112655
  var SEARCH_REQUESTED_SCOPES_LIMIT = MAX_SEARCH_SCOPES * 2;
112406
112656
  var SEARCH_SKIPPED_SCOPES_LIMIT = 50;
112407
112657
  var SEARCH_PREVIEW_CHARS = 600;
@@ -112775,10 +113025,11 @@ var requestScopeAccess = {
112775
113025
  var readScope = {
112776
113026
  name: "read_scope",
112777
113027
  title: "Read scope",
112778
- description: "Read approved scope blocks. Best for small scopes. Use nextCursor for more pages; prefer search for large scopes.",
113028
+ description: "Read approved scope blocks. Pass blockIds to fetch exact blocks; otherwise page with nextCursor.",
112779
113029
  inputSchema: {
112780
113030
  scope: external_exports.string().min(1).describe("Exact scope id."),
112781
113031
  cursor: external_exports.string().min(1).optional(),
113032
+ blockIds: external_exports.array(external_exports.string().min(1).max(BLOCK_ID_MAX_CHARS)).min(1).max(MAX_SELECTED_BLOCK_IDS).optional().describe("Block ids from a search hit's blockRef or list_scope_blocks. Ignores cursor; maxBytes still applies."),
112782
113033
  maxBytes: external_exports.number().int().min(1).max(MAX_READ_SCOPE_MAX_BYTES).optional(),
112783
113034
  timeoutMs: external_exports.number().int().min(1e3).max(MAX_READ_SCOPE_TIMEOUT_MS).optional()
112784
113035
  },
@@ -112796,6 +113047,7 @@ var readScope = {
112796
113047
  }, true);
112797
113048
  }
112798
113049
  const cursor = typeof args.cursor === "string" ? args.cursor : void 0;
113050
+ const blockIds = normalizeBlockIdsInput(args.blockIds);
112799
113051
  const maxBytes = typeof args.maxBytes === "number" ? clampInteger(args.maxBytes, DEFAULT_READ_SCOPE_MAX_BYTES, 1, MAX_READ_SCOPE_MAX_BYTES) : DEFAULT_READ_SCOPE_MAX_BYTES;
112800
113052
  const timeoutMs = clampInteger(args.timeoutMs, DEFAULT_READ_SCOPE_TIMEOUT_MS, 1e3, MAX_READ_SCOPE_TIMEOUT_MS);
112801
113053
  let guidance;
@@ -112821,7 +113073,8 @@ var readScope = {
112821
113073
  scope,
112822
113074
  grantId: grant.grantId,
112823
113075
  cursor,
112824
- maxBytes
113076
+ maxBytes,
113077
+ ...blockIds.length > 0 ? { blockIds } : {}
112825
113078
  }), timeoutMs, `read blocks for ${scope}`);
112826
113079
  const nextCursor = result.nextCursor ?? null;
112827
113080
  return textResult({
@@ -112839,7 +113092,8 @@ var readScope = {
112839
113092
  hasMore: Boolean(result.nextCursor),
112840
113093
  maxBytes,
112841
113094
  timeoutMs,
112842
- returnedBlocks: result.blocks.length
113095
+ returnedBlocks: result.blocks.length,
113096
+ ...blockIds.length > 0 ? { requestedBlockIds: blockIds } : {}
112843
113097
  }
112844
113098
  });
112845
113099
  } catch (err2) {
@@ -112867,6 +113121,92 @@ var readScope = {
112867
113121
  }
112868
113122
  }
112869
113123
  };
113124
+ var listScopeBlocks = {
113125
+ name: "list_scope_blocks",
113126
+ title: "List scope blocks",
113127
+ description: "Scope table of contents: block ids, paths, sizes. Feed ids to read_scope blockIds.",
113128
+ inputSchema: {
113129
+ scope: external_exports.string().min(1).describe("Exact scope id."),
113130
+ offset: external_exports.number().int().min(0).optional(),
113131
+ limit: external_exports.number().int().min(1).max(MAX_LIST_BLOCKS_LIMIT).optional()
113132
+ },
113133
+ async handler(args, { connection, readClient }) {
113134
+ const scope = typeof args.scope === "string" ? args.scope : null;
113135
+ if (!scope) {
113136
+ return textResult({ error: "scope is required and must be a string" }, true);
113137
+ }
113138
+ const grant = resolveGrantForScope(connection, scope);
113139
+ if (!grant) {
113140
+ return textResult({
113141
+ error: "scope_not_granted",
113142
+ message: `Scope '${scope}' is not covered by any grant on this MCP connection.`,
113143
+ grantedScopes: uniqueScopes(connection)
113144
+ }, true);
113145
+ }
113146
+ if (typeof readClient.readBlockManifest !== "function") {
113147
+ return textResult({
113148
+ scope,
113149
+ blocks: [],
113150
+ manifestAvailable: false,
113151
+ reason: "this server build does not expose block manifests",
113152
+ nextStep: "Use read_scope with nextCursor, or search_personal_context."
113153
+ });
113154
+ }
113155
+ const offset = clampInteger(args.offset, 0, 0, Number.MAX_SAFE_INTEGER);
113156
+ const limit = clampInteger(args.limit, DEFAULT_LIST_BLOCKS_LIMIT, 1, MAX_LIST_BLOCKS_LIMIT);
113157
+ try {
113158
+ const manifest = await withTimeout(readClient.readBlockManifest({ scope, grantId: grant.grantId }), LIST_BLOCKS_TIMEOUT_MS, `read block manifest for ${scope}`);
113159
+ if (!manifest) {
113160
+ return textResult({
113161
+ scope,
113162
+ grantId: grant.grantId,
113163
+ blocks: [],
113164
+ manifestAvailable: false,
113165
+ reason: "no block manifest for this scope yet; it may still be indexing",
113166
+ nextStep: "Use read_scope with nextCursor, or search_personal_context."
113167
+ });
113168
+ }
113169
+ const page = manifest.blocks.slice(offset, offset + limit);
113170
+ const nextOffset = offset + page.length;
113171
+ return textResult({
113172
+ scope,
113173
+ grantId: grant.grantId,
113174
+ collectedAt: manifest.collectedAt,
113175
+ contentKind: manifest.contentKind,
113176
+ manifestAvailable: true,
113177
+ totalBlocks: manifest.blocks.length,
113178
+ blocks: page.map((block) => ({
113179
+ id: block.id,
113180
+ path: block.path,
113181
+ sizeBytes: block.sizeBytes,
113182
+ ...block.itemCount === void 0 ? {} : { itemCount: block.itemCount }
113183
+ })),
113184
+ warnings: manifest.warnings,
113185
+ page: {
113186
+ offset,
113187
+ limit,
113188
+ returnedBlocks: page.length,
113189
+ ...nextOffset < manifest.blocks.length ? { nextOffset } : {}
113190
+ }
113191
+ });
113192
+ } catch (err2) {
113193
+ if (err2 instanceof OperationTimeoutError) {
113194
+ return textResult({
113195
+ error: "scope_blocks_timeout",
113196
+ message: err2.message,
113197
+ timeoutMs: err2.timeoutMs
113198
+ }, true);
113199
+ }
113200
+ if (err2 instanceof McpDataReadError) {
113201
+ return textResult({ error: "data_read_failed", status: err2.status, body: err2.body }, true);
113202
+ }
113203
+ return textResult({
113204
+ error: "tool_handler_error",
113205
+ message: err2 instanceof Error ? err2.message : String(err2)
113206
+ }, true);
113207
+ }
113208
+ }
113209
+ };
112870
113210
  function encodeSearchCursor(payload) {
112871
113211
  const json2 = JSON.stringify(payload);
112872
113212
  const bytes2 = new TextEncoder().encode(json2);
@@ -113011,7 +113351,6 @@ var searchPersonalContext = {
113011
113351
  }
113012
113352
  let cursor = scopeIndex === startScopeIndex ? initialBlockCursor : void 0;
113013
113353
  let pageCount = 0;
113014
- let scopeHasMatch = false;
113015
113354
  let scopeTruncated = false;
113016
113355
  let scopeSearched = false;
113017
113356
  try {
@@ -113041,9 +113380,13 @@ var searchPersonalContext = {
113041
113380
  }), perScopeTimeoutMs, `read blocks for ${scope}`);
113042
113381
  const pageText = blockPageSearchText(result.blocks);
113043
113382
  const { documents, textById } = blockPageSearchDocuments(scope, result.blocks);
113044
- const pageHits = documents.length > 0 ? MiniSearchIndex.build(documents).search({ query, limit: 1 }) : [];
113045
- const pageHit = pageHits[0];
113046
- if (pageHit && matches.length < limit && !scopeHasMatch) {
113383
+ const pageHits = documents.length > 0 ? MiniSearchIndex.build(documents).search({
113384
+ query,
113385
+ limit: limit - matches.length
113386
+ }) : [];
113387
+ for (const pageHit of pageHits) {
113388
+ if (matches.length >= limit)
113389
+ break;
113047
113390
  const hitText = textById.get(pageHit.id) ?? pageText;
113048
113391
  matches.push({
113049
113392
  scope,
@@ -113051,9 +113394,13 @@ var searchPersonalContext = {
113051
113394
  collectedAt: result.collectedAt,
113052
113395
  preview: previewMatch(hitText, miniSearchMatchIndex(hitText, pageHit.terms)),
113053
113396
  searchedChars: pageText.length,
113054
- truncated: Boolean(result.nextCursor)
113397
+ truncated: Boolean(result.nextCursor),
113398
+ // The id of the block that matched, so the caller can fetch it
113399
+ // with read_scope({ blockIds }) instead of walking cursors.
113400
+ ...pageHit.blockRef ? { blockRef: pageHit.blockRef } : {},
113401
+ score: pageHit.score,
113402
+ terms: pageHit.terms
113055
113403
  });
113056
- scopeHasMatch = true;
113057
113404
  }
113058
113405
  if (result.nextCursor) {
113059
113406
  cursor = result.nextCursor;
@@ -113082,7 +113429,7 @@ var searchPersonalContext = {
113082
113429
  }
113083
113430
  if (matches.length >= limit) {
113084
113431
  const nextScopeIndex = scopeIndex + 1;
113085
- if (nextScopeIndex < resolved.scopes.length) {
113432
+ if (!nextSearchCursor && nextScopeIndex < resolved.scopes.length) {
113086
113433
  nextSearchCursor = encodeSearchCursor({
113087
113434
  scopeIndex: nextScopeIndex
113088
113435
  });
@@ -113091,6 +113438,7 @@ var searchPersonalContext = {
113091
113438
  }
113092
113439
  }
113093
113440
  const elapsedMs = Date.now() - startedAt;
113441
+ matches.sort((a10, b10) => (b10.score ?? -1) - (a10.score ?? -1));
113094
113442
  return textResult({
113095
113443
  query,
113096
113444
  results: matches,
@@ -113175,7 +113523,7 @@ var getScopeFile = {
113175
113523
  contentIncluded: false,
113176
113524
  reason: !includeContent ? "includeContent=false" : "file exceeds maxBytes for inline MCP tool response",
113177
113525
  nextStep: "Use resources/read with resourceUri if your MCP client supports resources, or retry with a higher maxBytes if appropriate."
113178
- }, null, 2)
113526
+ })
113179
113527
  },
113180
113528
  {
113181
113529
  type: "resource_link",
@@ -113201,7 +113549,7 @@ var getScopeFile = {
113201
113549
  ...base,
113202
113550
  contentIncluded: true,
113203
113551
  resourceType: "blob"
113204
- }, null, 2)
113552
+ })
113205
113553
  },
113206
113554
  {
113207
113555
  type: "resource",
@@ -113246,6 +113594,7 @@ var MCP_TOOLS = [
113246
113594
  listGrantedScopes,
113247
113595
  requestScopeAccess,
113248
113596
  readScope,
113597
+ listScopeBlocks,
113249
113598
  getScopeFile,
113250
113599
  searchPersonalContext
113251
113600
  ];
@@ -123561,10 +123910,9 @@ data:
123561
123910
  var DEFAULT_SERVER_NAME = "vana-personal-server-mcp";
123562
123911
  var DEFAULT_SERVER_VERSION = "0.0.1";
123563
123912
  var DEFAULT_MCP_TOOL_TIMEOUT_MS = 3e4;
123564
- var MAX_MCP_TOOL_TIMEOUT_MS = 9e4;
123565
123913
  var MCP_TOOL_TIMEOUT_GRACE_MS = 1e3;
123566
123914
  var QUERY_PREVIEW_CHARS = 120;
123567
- var textEncoder4 = new TextEncoder();
123915
+ var textEncoder5 = new TextEncoder();
123568
123916
  var McpToolTimeoutError = class extends Error {
123569
123917
  tool;
123570
123918
  timeoutMs;
@@ -123657,7 +124005,7 @@ function extractActivityFinishParams(tool, result) {
123657
124005
  return {};
123658
124006
  }
123659
124007
  function bytes(value) {
123660
- return textEncoder4.encode(value).byteLength;
124008
+ return textEncoder5.encode(value).byteLength;
123661
124009
  }
123662
124010
  function estimatePayloadMetrics(result) {
123663
124011
  const textBytes = result.content?.reduce((total, item) => {
@@ -124693,7 +125041,10 @@ function createWeb3SignedPsLiteAuth(options) {
124693
125041
  signer: auth.auth.signer,
124694
125042
  grantId: auth.auth.payload.grantId ?? input.grantId,
124695
125043
  requestedScope: input.scope,
124696
- fileId: input.fileId
125044
+ fileId: input.fileId,
125045
+ // Bind the read to this PS's owner — the grant must have been issued
125046
+ // by us. Required now that the policy fails closed on a missing owner.
125047
+ serverOwner: options.ownerAddress
124697
125048
  }, options.dataReadPolicyPorts);
124698
125049
  return { builder: auth.auth.signer, grantId: grant.id };
124699
125050
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendatalabs/personal-server-ts-server",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "Hono HTTP server for the Vana Personal Server — routes, middleware, composition root",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -44,8 +44,8 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@hono/node-server": "^1.19.13",
47
- "@opendatalabs/personal-server-ts-core": "1.3.2",
48
- "@opendatalabs/personal-server-ts-lite": "1.3.2",
47
+ "@opendatalabs/personal-server-ts-core": "1.3.4",
48
+ "@opendatalabs/personal-server-ts-lite": "1.3.4",
49
49
  "@opendatalabs/vana-sdk": "3.13.0",
50
50
  "better-sqlite3": "^12.11.1",
51
51
  "hono": "^4.12.27",