@opendatalabs/personal-server-ts-server 1.3.3 → 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.
@@ -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
@@ -110114,6 +110222,53 @@ var McpDataReadError = class extends Error {
110114
110222
  };
110115
110223
  function createMcpDataReadClient(options) {
110116
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
+ }
110117
110272
  return {
110118
110273
  async listScopes({ scopePrefix, limit, offset } = {}) {
110119
110274
  const params = new URLSearchParams();
@@ -110157,7 +110312,7 @@ function createMcpDataReadClient(options) {
110157
110312
  hasBlocks
110158
110313
  };
110159
110314
  },
110160
- async readScopeBlocks({ scope, grantId, cursor, maxBytes }) {
110315
+ async readScopeBlocks({ scope, grantId, cursor, maxBytes, blockIds }) {
110161
110316
  const storage = options.dataApiDeps.storage;
110162
110317
  if (!storage.readScopeBlocks) {
110163
110318
  throw new McpDataReadError(503, {
@@ -110177,54 +110332,19 @@ function createMcpDataReadClient(options) {
110177
110332
  message: `No data found for scope "${scope}"`
110178
110333
  });
110179
110334
  }
110180
- const safeScope = encodeURIComponent(scope);
110181
- const signingUri = `${basePath}/${safeScope}`;
110182
- const authorization = await signMcpGranteeRequest({
110183
- account: options.granteeAccount,
110184
- aud: options.serverOrigin,
110185
- method: "GET",
110186
- uri: signingUri,
110187
- grantId
110188
- });
110189
- const url2 = new URL(signingUri, options.serverOrigin).toString();
110190
- const request2 = new Request(url2, {
110191
- method: "GET",
110192
- headers: { Authorization: authorization }
110335
+ const { request: request2, authResult } = await authorizeScopeRead({
110336
+ scope,
110337
+ grantId,
110338
+ fileId: selectedEntry.fileId ?? void 0
110193
110339
  });
110194
- let authResult;
110195
- try {
110196
- authResult = await options.dataApiDeps.auth.authorizeBuilderRead({
110197
- request: request2,
110198
- scope,
110199
- grantId,
110200
- fileId: selectedEntry.fileId ?? void 0
110201
- });
110202
- } catch (err2) {
110203
- if (err2 instanceof ProtocolError) {
110204
- throw new McpDataReadError(err2.code, err2.toJSON());
110205
- }
110206
- throw err2;
110207
- }
110208
110340
  try {
110209
110341
  const result = await storage.readScopeBlocks(scope, selectedEntry.collectedAt, {
110210
110342
  cursor,
110211
- maxBytes: maxBytes ?? 16384
110343
+ maxBytes: maxBytes ?? 16384,
110344
+ ...blockIds?.length ? { blockIds } : {}
110212
110345
  });
110213
- const logId = options.dataApiDeps.createLogId?.() ?? crypto.randomUUID();
110214
- const timestamp = (options.dataApiDeps.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
110215
- const ipAddress = request2.headers.get("x-forwarded-for") ?? request2.headers.get("x-real-ip") ?? "unknown";
110216
- const userAgent = request2.headers.get("user-agent") ?? "unknown";
110217
- await options.dataApiDeps.accessLogWriter.write({
110218
- logId,
110219
- grantId: authResult?.grantId ?? grantId,
110220
- builder: authResult?.builder ?? options.granteeAccount.address,
110221
- action: "read",
110222
- scope,
110223
- timestamp,
110224
- ipAddress,
110225
- userAgent
110226
- });
110227
- 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) {
110228
110348
  reportPersonalServerReadFulfillment(options.dataApiDeps, {
110229
110349
  builder: authResult.builder,
110230
110350
  fileId: selectedEntry.fileId ?? void 0,
@@ -110254,6 +110374,26 @@ function createMcpDataReadClient(options) {
110254
110374
  throw err2;
110255
110375
  }
110256
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
+ },
110257
110397
  async readRawScopeFile({ scope, grantId, at: at3, fileId }) {
110258
110398
  const storage = options.dataApiDeps.storage;
110259
110399
  const selectedEntry = storage.findEntry({
@@ -110936,7 +111076,7 @@ var MiniSearch = class _MiniSearch {
110936
111076
  * @param document The document to be indexed
110937
111077
  */
110938
111078
  add(document2) {
110939
- const { extractField, stringifyField, tokenize, processTerm, fields, idField } = this._options;
111079
+ const { extractField, stringifyField, tokenize, processTerm: processTerm2, fields, idField } = this._options;
110940
111080
  const id2 = extractField(document2, idField);
110941
111081
  if (id2 == null) {
110942
111082
  throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
@@ -110955,7 +111095,7 @@ var MiniSearch = class _MiniSearch {
110955
111095
  const uniqueTerms = new Set(tokens).size;
110956
111096
  this.addFieldLength(shortDocumentId, fieldId, this._documentCount - 1, uniqueTerms);
110957
111097
  for (const term of tokens) {
110958
- const processedTerm = processTerm(term, field);
111098
+ const processedTerm = processTerm2(term, field);
110959
111099
  if (Array.isArray(processedTerm)) {
110960
111100
  for (const t10 of processedTerm) {
110961
111101
  this.addTerm(fieldId, shortDocumentId, t10);
@@ -111017,7 +111157,7 @@ var MiniSearch = class _MiniSearch {
111017
111157
  * @param document The document to be removed
111018
111158
  */
111019
111159
  remove(document2) {
111020
- const { tokenize, processTerm, extractField, stringifyField, fields, idField } = this._options;
111160
+ const { tokenize, processTerm: processTerm2, extractField, stringifyField, fields, idField } = this._options;
111021
111161
  const id2 = extractField(document2, idField);
111022
111162
  if (id2 == null) {
111023
111163
  throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
@@ -111035,7 +111175,7 @@ var MiniSearch = class _MiniSearch {
111035
111175
  const uniqueTerms = new Set(tokens).size;
111036
111176
  this.removeFieldLength(shortId, fieldId, this._documentCount, uniqueTerms);
111037
111177
  for (const term of tokens) {
111038
- const processedTerm = processTerm(term, field);
111178
+ const processedTerm = processTerm2(term, field);
111039
111179
  if (Array.isArray(processedTerm)) {
111040
111180
  for (const t10 of processedTerm) {
111041
111181
  this.removeTerm(fieldId, shortId, t10);
@@ -111772,8 +111912,8 @@ var MiniSearch = class _MiniSearch {
111772
111912
  const results2 = query.queries.map((subquery) => this.executeQuery(subquery, options2));
111773
111913
  return this.combineResults(results2, options2.combineWith);
111774
111914
  }
111775
- const { tokenize, processTerm, searchOptions: globalSearchOptions } = this._options;
111776
- const options = { tokenize, processTerm, ...globalSearchOptions, ...searchOptions };
111915
+ const { tokenize, processTerm: processTerm2, searchOptions: globalSearchOptions } = this._options;
111916
+ const options = { tokenize, processTerm: processTerm2, ...globalSearchOptions, ...searchOptions };
111777
111917
  const { tokenize: searchTokenize, processTerm: searchProcessTerm } = options;
111778
111918
  const terms = searchTokenize(query).flatMap((term) => searchProcessTerm(term)).filter((term) => !!term);
111779
111919
  const queries = terms.map(termToQuerySpec(options));
@@ -112177,16 +112317,86 @@ var SPACE_OR_PUNCTUATION = /[\n\r\p{Z}\p{P}]+/u;
112177
112317
  // ../core/dist/mcp/search/index.js
112178
112318
  var SEARCH_FIELDS = ["title", "text", "preview"];
112179
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
+ };
112180
112398
  function createMiniSearch() {
112181
- return new MiniSearch({
112182
- idField: "id",
112183
- fields: SEARCH_FIELDS,
112184
- storeFields: STORE_FIELDS,
112185
- searchOptions: {
112186
- boost: { title: 2, preview: 1.2, text: 1 },
112187
- prefix: true
112188
- }
112189
- });
112399
+ return new MiniSearch(MINISEARCH_OPTIONS);
112190
112400
  }
112191
112401
  function toHit(result) {
112192
112402
  return {
@@ -112214,24 +112424,18 @@ var MiniSearchIndex = class _MiniSearchIndex {
112214
112424
  return index;
112215
112425
  }
112216
112426
  static load(serialized) {
112217
- return new _MiniSearchIndex(MiniSearch.loadJSON(serialized, {
112218
- idField: "id",
112219
- fields: SEARCH_FIELDS,
112220
- storeFields: STORE_FIELDS,
112221
- searchOptions: {
112222
- boost: { title: 2, preview: 1.2, text: 1 },
112223
- prefix: true
112224
- }
112225
- }));
112427
+ return new _MiniSearchIndex(MiniSearch.loadJSON(serialized, MINISEARCH_OPTIONS));
112226
112428
  }
112227
112429
  add(documents) {
112228
112430
  this.index.addAll(documents);
112229
112431
  }
112230
112432
  search({ query, scopes, limit = 20 }) {
112231
112433
  const allowedScopes = scopes ? new Set(scopes) : null;
112232
- return this.index.search(query, {
112434
+ const results = this.index.search(query, {
112233
112435
  filter: allowedScopes ? (result) => allowedScopes.has(String(result.scope)) : void 0
112234
- }).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);
112235
112439
  }
112236
112440
  serialize() {
112237
112441
  return JSON.stringify(this.index);
@@ -112346,7 +112550,7 @@ var rawScopeFileInputSchema = {
112346
112550
  var STRUCTURED_CONTENT_TEXT_LIMIT_BYTES = 64 * 1024;
112347
112551
  var resultTextEncoder = new TextEncoder();
112348
112552
  function textResult(value, isError = false) {
112349
- const text = typeof value === "string" ? value : JSON.stringify(value, null, 2);
112553
+ const text = typeof value === "string" ? value : JSON.stringify(value);
112350
112554
  const textBytes = resultTextEncoder.encode(text).byteLength;
112351
112555
  const structuredContent = !isError && textBytes <= STRUCTURED_CONTENT_TEXT_LIMIT_BYTES && typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
112352
112556
  return {
@@ -112385,6 +112589,25 @@ function uniqueSources(connection) {
112385
112589
  }
112386
112590
  return Array.from(set2).sort();
112387
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
+ }
112388
112611
  function normalizeScopeListInput(value) {
112389
112612
  if (!Array.isArray(value))
112390
112613
  return [];
@@ -112402,28 +112625,33 @@ function normalizeScopeListInput(value) {
112402
112625
  }
112403
112626
  return scopes;
112404
112627
  }
112628
+ var MAX_MCP_TOOL_TIMEOUT_MS = 9e4;
112405
112629
  var DEFAULT_SEARCH_LIMIT = 5;
112406
112630
  var MAX_SEARCH_LIMIT = 50;
112407
112631
  var MAX_SEARCH_SCOPES = 200;
112408
112632
  var DEFAULT_SEARCH_MAX_SCOPES = MAX_SEARCH_SCOPES;
112409
112633
  var DEFAULT_SEARCH_TIMEOUT_MS = 3e4;
112410
- var MAX_SEARCH_TIMEOUT_MS = 3e5;
112634
+ var MAX_SEARCH_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112411
112635
  var DEFAULT_SEARCH_DISCOVERY_TIMEOUT_MS = 2e3;
112412
- var MAX_SEARCH_TOTAL_TIMEOUT_MS = 3e5;
112636
+ var MAX_SEARCH_TOTAL_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112413
112637
  var DEFAULT_READ_SCOPE_MAX_BYTES = 64 * 1024;
112414
112638
  var MAX_READ_SCOPE_MAX_BYTES = 5 * 1024 * 1024;
112415
112639
  var DEFAULT_READ_SCOPE_TIMEOUT_MS = 6e4;
112416
- var MAX_READ_SCOPE_TIMEOUT_MS = 3e5;
112640
+ var MAX_READ_SCOPE_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112417
112641
  var DEFAULT_READ_FILE_TIMEOUT_MS = 6e4;
112418
- var MAX_READ_FILE_TIMEOUT_MS = 3e5;
112642
+ var MAX_READ_FILE_TIMEOUT_MS = MAX_MCP_TOOL_TIMEOUT_MS;
112419
112643
  var DEFAULT_READ_FILE_MAX_BYTES = 10 * 1024 * 1024;
112420
112644
  var MAX_READ_FILE_MAX_BYTES = 25 * 1024 * 1024;
112421
112645
  var DEFAULT_SEARCH_MAX_BYTES = 64 * 1024;
112422
112646
  var MAX_SEARCH_MAX_BYTES = 1024 * 1024;
112423
112647
  var DEFAULT_SCOPE_METADATA_TIMEOUT_MS = 2e3;
112424
- 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;
112425
112652
  var SEARCH_QUERY_MAX_CHARS = 256;
112426
112653
  var SEARCH_SCOPE_MAX_CHARS = 128;
112654
+ var BLOCK_ID_MAX_CHARS = 128;
112427
112655
  var SEARCH_REQUESTED_SCOPES_LIMIT = MAX_SEARCH_SCOPES * 2;
112428
112656
  var SEARCH_SKIPPED_SCOPES_LIMIT = 50;
112429
112657
  var SEARCH_PREVIEW_CHARS = 600;
@@ -112797,10 +113025,11 @@ var requestScopeAccess = {
112797
113025
  var readScope = {
112798
113026
  name: "read_scope",
112799
113027
  title: "Read scope",
112800
- 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.",
112801
113029
  inputSchema: {
112802
113030
  scope: external_exports.string().min(1).describe("Exact scope id."),
112803
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."),
112804
113033
  maxBytes: external_exports.number().int().min(1).max(MAX_READ_SCOPE_MAX_BYTES).optional(),
112805
113034
  timeoutMs: external_exports.number().int().min(1e3).max(MAX_READ_SCOPE_TIMEOUT_MS).optional()
112806
113035
  },
@@ -112818,6 +113047,7 @@ var readScope = {
112818
113047
  }, true);
112819
113048
  }
112820
113049
  const cursor = typeof args.cursor === "string" ? args.cursor : void 0;
113050
+ const blockIds = normalizeBlockIdsInput(args.blockIds);
112821
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;
112822
113052
  const timeoutMs = clampInteger(args.timeoutMs, DEFAULT_READ_SCOPE_TIMEOUT_MS, 1e3, MAX_READ_SCOPE_TIMEOUT_MS);
112823
113053
  let guidance;
@@ -112843,7 +113073,8 @@ var readScope = {
112843
113073
  scope,
112844
113074
  grantId: grant.grantId,
112845
113075
  cursor,
112846
- maxBytes
113076
+ maxBytes,
113077
+ ...blockIds.length > 0 ? { blockIds } : {}
112847
113078
  }), timeoutMs, `read blocks for ${scope}`);
112848
113079
  const nextCursor = result.nextCursor ?? null;
112849
113080
  return textResult({
@@ -112861,7 +113092,8 @@ var readScope = {
112861
113092
  hasMore: Boolean(result.nextCursor),
112862
113093
  maxBytes,
112863
113094
  timeoutMs,
112864
- returnedBlocks: result.blocks.length
113095
+ returnedBlocks: result.blocks.length,
113096
+ ...blockIds.length > 0 ? { requestedBlockIds: blockIds } : {}
112865
113097
  }
112866
113098
  });
112867
113099
  } catch (err2) {
@@ -112889,6 +113121,92 @@ var readScope = {
112889
113121
  }
112890
113122
  }
112891
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
+ };
112892
113210
  function encodeSearchCursor(payload) {
112893
113211
  const json2 = JSON.stringify(payload);
112894
113212
  const bytes2 = new TextEncoder().encode(json2);
@@ -113033,7 +113351,6 @@ var searchPersonalContext = {
113033
113351
  }
113034
113352
  let cursor = scopeIndex === startScopeIndex ? initialBlockCursor : void 0;
113035
113353
  let pageCount = 0;
113036
- let scopeHasMatch = false;
113037
113354
  let scopeTruncated = false;
113038
113355
  let scopeSearched = false;
113039
113356
  try {
@@ -113063,9 +113380,13 @@ var searchPersonalContext = {
113063
113380
  }), perScopeTimeoutMs, `read blocks for ${scope}`);
113064
113381
  const pageText = blockPageSearchText(result.blocks);
113065
113382
  const { documents, textById } = blockPageSearchDocuments(scope, result.blocks);
113066
- const pageHits = documents.length > 0 ? MiniSearchIndex.build(documents).search({ query, limit: 1 }) : [];
113067
- const pageHit = pageHits[0];
113068
- 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;
113069
113390
  const hitText = textById.get(pageHit.id) ?? pageText;
113070
113391
  matches.push({
113071
113392
  scope,
@@ -113073,9 +113394,13 @@ var searchPersonalContext = {
113073
113394
  collectedAt: result.collectedAt,
113074
113395
  preview: previewMatch(hitText, miniSearchMatchIndex(hitText, pageHit.terms)),
113075
113396
  searchedChars: pageText.length,
113076
- 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
113077
113403
  });
113078
- scopeHasMatch = true;
113079
113404
  }
113080
113405
  if (result.nextCursor) {
113081
113406
  cursor = result.nextCursor;
@@ -113104,7 +113429,7 @@ var searchPersonalContext = {
113104
113429
  }
113105
113430
  if (matches.length >= limit) {
113106
113431
  const nextScopeIndex = scopeIndex + 1;
113107
- if (nextScopeIndex < resolved.scopes.length) {
113432
+ if (!nextSearchCursor && nextScopeIndex < resolved.scopes.length) {
113108
113433
  nextSearchCursor = encodeSearchCursor({
113109
113434
  scopeIndex: nextScopeIndex
113110
113435
  });
@@ -113113,6 +113438,7 @@ var searchPersonalContext = {
113113
113438
  }
113114
113439
  }
113115
113440
  const elapsedMs = Date.now() - startedAt;
113441
+ matches.sort((a10, b10) => (b10.score ?? -1) - (a10.score ?? -1));
113116
113442
  return textResult({
113117
113443
  query,
113118
113444
  results: matches,
@@ -113197,7 +113523,7 @@ var getScopeFile = {
113197
113523
  contentIncluded: false,
113198
113524
  reason: !includeContent ? "includeContent=false" : "file exceeds maxBytes for inline MCP tool response",
113199
113525
  nextStep: "Use resources/read with resourceUri if your MCP client supports resources, or retry with a higher maxBytes if appropriate."
113200
- }, null, 2)
113526
+ })
113201
113527
  },
113202
113528
  {
113203
113529
  type: "resource_link",
@@ -113223,7 +113549,7 @@ var getScopeFile = {
113223
113549
  ...base,
113224
113550
  contentIncluded: true,
113225
113551
  resourceType: "blob"
113226
- }, null, 2)
113552
+ })
113227
113553
  },
113228
113554
  {
113229
113555
  type: "resource",
@@ -113268,6 +113594,7 @@ var MCP_TOOLS = [
113268
113594
  listGrantedScopes,
113269
113595
  requestScopeAccess,
113270
113596
  readScope,
113597
+ listScopeBlocks,
113271
113598
  getScopeFile,
113272
113599
  searchPersonalContext
113273
113600
  ];
@@ -123583,10 +123910,9 @@ data:
123583
123910
  var DEFAULT_SERVER_NAME = "vana-personal-server-mcp";
123584
123911
  var DEFAULT_SERVER_VERSION = "0.0.1";
123585
123912
  var DEFAULT_MCP_TOOL_TIMEOUT_MS = 3e4;
123586
- var MAX_MCP_TOOL_TIMEOUT_MS = 9e4;
123587
123913
  var MCP_TOOL_TIMEOUT_GRACE_MS = 1e3;
123588
123914
  var QUERY_PREVIEW_CHARS = 120;
123589
- var textEncoder4 = new TextEncoder();
123915
+ var textEncoder5 = new TextEncoder();
123590
123916
  var McpToolTimeoutError = class extends Error {
123591
123917
  tool;
123592
123918
  timeoutMs;
@@ -123679,7 +124005,7 @@ function extractActivityFinishParams(tool, result) {
123679
124005
  return {};
123680
124006
  }
123681
124007
  function bytes(value) {
123682
- return textEncoder4.encode(value).byteLength;
124008
+ return textEncoder5.encode(value).byteLength;
123683
124009
  }
123684
124010
  function estimatePayloadMetrics(result) {
123685
124011
  const textBytes = result.content?.reduce((total, item) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendatalabs/personal-server-ts-server",
3
- "version": "1.3.3",
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.3",
48
- "@opendatalabs/personal-server-ts-lite": "1.3.3",
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",