@collage-dam/mcp-server 0.1.6 → 0.1.8

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.
@@ -0,0 +1,95 @@
1
+ // ── Search pagination cursor ─────────────────────────────────────────
2
+ // Encodes the position + page size needed to continue a search through
3
+ // `search_assets` or `search_collections`. Replaces the prior "page:N"
4
+ // string cursor (which encoded position but not page size) and the
5
+ // `String(offset)` shape `applyResponseBudget` was emitting on
6
+ // token-cap truncation (which encoded neither stably).
7
+ //
8
+ // Shape: base64url-encoded JSON `{ v, p, n }`:
9
+ // v — cursor schema version (currently 1; bump on shape changes)
10
+ // p — upstream page number to fetch next
11
+ // n — `per_page` to use on that fetch (the *effective* page size,
12
+ // which is what the budget actually allows for the projection,
13
+ // not the requested page size)
14
+ //
15
+ // Why both `p` and `n`: requesting `per_page: 250` on a verbose
16
+ // projection silently truncates to ~20–29 hits because of the response
17
+ // token budget — and the prior cursor didn't carry forward `n`, so a
18
+ // caller resuming from the cursor would request `per_page: 250` again
19
+ // and re-hit the same cap. By round-tripping the effective `n`, a
20
+ // well-behaved caller stays inside the budget on every page.
21
+ import { z } from 'zod';
22
+ /** Current cursor version. Bump on incompatible shape changes. */
23
+ export const CURSOR_VERSION = 1;
24
+ const CursorPayloadSchema = z.object({
25
+ v: z.literal(1),
26
+ p: z.number().int().min(1),
27
+ n: z.number().int().min(1),
28
+ });
29
+ /**
30
+ * Encode a `(page, per_page)` continuation handle as an opaque
31
+ * base64url string. The opacity is deliberate — callers MUST round-trip
32
+ * the cursor verbatim; the encoding may change without notice.
33
+ */
34
+ export function encodeSearchCursor(payload) {
35
+ const json = JSON.stringify({
36
+ v: CURSOR_VERSION,
37
+ p: payload.page,
38
+ n: payload.per_page,
39
+ });
40
+ return Buffer.from(json, 'utf-8').toString('base64url');
41
+ }
42
+ /**
43
+ * Decode a previously-emitted cursor. Returns `null` if the cursor is
44
+ * malformed, version-mismatched, or otherwise unparseable. Callers
45
+ * should treat a null result as "fall back to page/per_page in the
46
+ * input" rather than as an error.
47
+ */
48
+ export function decodeSearchCursor(cursor) {
49
+ try {
50
+ const decoded = Buffer.from(cursor, 'base64url').toString('utf-8');
51
+ const parsed = CursorPayloadSchema.safeParse(JSON.parse(decoded));
52
+ if (!parsed.success)
53
+ return null;
54
+ return { page: parsed.data.p, per_page: parsed.data.n };
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ // ── Effective per_page (projection-aware budget pre-cap) ─────────────
61
+ //
62
+ // Per-projection token estimates (chars/4 → token estimate, matching
63
+ // `estimateTokens()` in response-budget.ts). These are *generous* — we'd
64
+ // rather under-request from upstream and trust the safety-net budget
65
+ // check than over-request and hit the cap repeatedly.
66
+ //
67
+ // Compact hit: id, display_file_name, thumbnail_file (presigned S3 URLs
68
+ // run ~500 chars), modified_at, plus JSON structural overhead. ~800
69
+ // chars / ~200 tokens per hit budgeted; real hits vary.
70
+ //
71
+ // Verbose hit: full indexed-field set including tags arrays, breadcrumb
72
+ // arrays, multiple URLs. ~2400 chars / ~600 tokens per hit budgeted.
73
+ import { HARD_CAP_TOKENS } from '../../conventions/response-budget.js';
74
+ export const PER_HIT_TOKEN_ESTIMATE = {
75
+ compact: 200,
76
+ verbose: 600,
77
+ };
78
+ /**
79
+ * Maximum `per_page` the response budget will tolerate for a given
80
+ * projection. Below this, the budget safety-net won't trigger; at or
81
+ * above, it might (and the cursor will reflect the budget-clamped
82
+ * size on continuation).
83
+ */
84
+ export function budgetMaxPerPage(projection) {
85
+ return Math.max(1, Math.floor(HARD_CAP_TOKENS / PER_HIT_TOKEN_ESTIMATE[projection]));
86
+ }
87
+ /**
88
+ * Compute the page size that will actually be requested upstream and
89
+ * returned to the caller. Caps the caller's requested `per_page` at
90
+ * the projection-specific budget max.
91
+ */
92
+ export function effectivePerPage(requested, projection) {
93
+ return Math.min(requested, budgetMaxPerPage(projection));
94
+ }
95
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/tools/search/cursor.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,mEAAmE;AACnE,+DAA+D;AAC/D,uDAAuD;AACvD,EAAE;AACF,+CAA+C;AAC/C,oEAAoE;AACpE,4CAA4C;AAC5C,qEAAqE;AACrE,sEAAsE;AACtE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,kEAAkE;AAClE,6DAA6D;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACf,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAOH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAsB;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,OAAO,CAAC,IAAI;QACf,CAAC,EAAE,OAAO,CAAC,QAAQ;KACpB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,qEAAqE;AACrE,sDAAsD;AACtD,EAAE;AACF,wEAAwE;AACxE,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACJ,CAAC;AAIX;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAsB;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,UAAsB;IAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -13,6 +13,12 @@ interface HintGeneratorContext {
13
13
  hasTags: boolean;
14
14
  /** Number of hits where `tags` is empty/missing. */
15
15
  untaggedCount: number;
16
+ /**
17
+ * True when the response includes a non-null `next_cursor` (i.e.
18
+ * more results exist beyond this page). Used to emit a continuation
19
+ * hint with concrete `suggested_args` the LLM can pass back verbatim.
20
+ */
21
+ hasNextCursor: boolean;
16
22
  }
17
23
  /**
18
24
  * Generate structured next-step hints for a `search_assets` response.
@@ -1 +1 @@
1
- {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../../src/tools/search/facets.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EAEf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,EACvC,IAAI,EAAE,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC,EACtD,IAAI,SAAK,GACR,YAAY,CAkCd;AAqCD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,oBAAoB,GACxB,kBAAkB,EAAE,CA8BtB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAWtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9C,MAAM,CAWR"}
1
+ {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../../src/tools/search/facets.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EAEf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,EACvC,IAAI,EAAE,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC,EACtD,IAAI,SAAK,GACR,YAAY,CAkCd;AAqCD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,oBAAoB,GACxB,kBAAkB,EAAE,CA+BtB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAWtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9C,MAAM,CAWR"}
@@ -97,11 +97,13 @@ export function buildAssetSearchNextSteps(ctx) {
97
97
  reason: `${ctx.untaggedCount} hit(s) have no tags — consider running the tagging-hygiene audit.`,
98
98
  });
99
99
  }
100
- if (ctx.truncated) {
100
+ if (ctx.hasNextCursor) {
101
101
  hints.push({
102
102
  tool: 'search_assets',
103
- reason_code: 'response_truncated',
104
- reason: 'Result page was hard-capped to stay under the response budget. Use the returned next_cursor to continue.',
103
+ reason_code: ctx.truncated ? 'response_truncated' : 'more_results_available',
104
+ reason: ctx.truncated
105
+ ? 'Result page was clamped or capped to fit the response budget. Use the returned next_cursor to continue.'
106
+ : 'More results exist beyond this page. Pass next_cursor back as `cursor` to fetch the next page.',
105
107
  });
106
108
  }
107
109
  if (ctx.found > 1000) {
@@ -1 +1 @@
1
- {"version":3,"file":"facets.js","sourceRoot":"","sources":["../../../src/tools/search/facets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facets.js","sourceRoot":"","sources":["../../../src/tools/search/facets.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,6 @@ export declare function runSearchAssets(client: CollageSearchClient, workspaceId
37
37
  };
38
38
  isError?: boolean;
39
39
  }>;
40
- export declare function decodePageCursor(cursor: string): number | null;
41
40
  /**
42
41
  * Parse a comma-separated `query_by` value and return any tokens that
43
42
  * are not in the allowed field set. Empty result = all valid.
@@ -1 +1 @@
1
- {"version":3,"file":"search-assets.d.ts","sourceRoot":"","sources":["../../../src/tools/search/search-assets.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAa9D,OAAO,EASL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAExB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB,QAUkC,CAAC;AAEzE,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,IAEL,UAAU,OAAO;aAiBtB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;uBAC3B,kBAAkB,GAAG;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;cAClH,OAAO;GAVlB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,kBAAkB,GAAG;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7H,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CA8GD;AAmBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU9D;AAqBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAC3B,MAAM,EAAE,CAOV"}
1
+ {"version":3,"file":"search-assets.d.ts","sourceRoot":"","sources":["../../../src/tools/search/search-assets.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAa9D,OAAO,EASL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,yBAAyB,QAiBxB,CAAC;AAEf,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,IAEL,UAAU,OAAO;aAiBtB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;uBAC3B,kBAAkB,GAAG;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;cAClH,OAAO;GAVlB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,kBAAkB,GAAG;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7H,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CA4JD;AAkCD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAC3B,MAAM,EAAE,CAOV"}
@@ -16,6 +16,7 @@ import { searchWorkspaceScoped } from '../../typesense.js';
16
16
  import { buildAssetFilterClauses, joinFilterClauses, } from './filter-builder.js';
17
17
  import { buildAssetSearchNextSteps, buildSearchFacets, countUntagged, } from './facets.js';
18
18
  import { CompactAssetHitSchema, DEFAULT_FACET_BY_ASSETS, DEFAULT_MAX_FACET_VALUES, DEFAULT_QUERY_BY_ASSETS, SearchAssetsInputSchema, VALID_QUERY_BY_ASSETS, VerboseAssetHitSchema, } from './types.js';
19
+ import { decodeSearchCursor, effectivePerPage, encodeSearchCursor, } from './cursor.js';
19
20
  export const SEARCH_ASSETS_DESCRIPTION = 'Full-text + faceted search over the workspace digital-asset library. ' +
20
21
  'Backed by Typesense Cloud; returns hits, facets (tags, file_type, ' +
21
22
  'date histogram), pagination cursor, and structured next_step_hints. ' +
@@ -25,7 +26,14 @@ export const SEARCH_ASSETS_DESCRIPTION = 'Full-text + faceted search over the wo
25
26
  'created_after/before, modified_after/before. ' +
26
27
  'Optional `query_by` (comma-separated, no spaces) overrides the searched ' +
27
28
  `field set; valid values are ${VALID_QUERY_BY_ASSETS.join(', ')} — ` +
28
- 'unknown field names are rejected with a VALIDATION error. Read-only.';
29
+ 'unknown field names are rejected with a VALIDATION error. ' +
30
+ 'Pagination: pass `next_cursor` from the previous response back as ' +
31
+ '`cursor` to fetch the next page. The cursor encodes both page and ' +
32
+ 'effective per_page (auto-clamped to fit the response-token budget for ' +
33
+ 'the projection — compact ~60/page, verbose ~20/page). `effective_per_page` ' +
34
+ 'in the response reflects what was actually used; `truncated` + ' +
35
+ '`truncation_reason` indicate when clamping or budget capping occurred. ' +
36
+ 'Read-only.';
29
37
  export const SEARCH_ASSETS_COLLECTION = 'digital_assets';
30
38
  /**
31
39
  * Build the handler for `search_assets`. Accepts a `CollageSearchClient`
@@ -58,13 +66,25 @@ export async function runSearchAssets(client, workspaceId, input, requestId) {
58
66
  const includeFields = input.projection === 'compact'
59
67
  ? 'id,display_file_name,thumbnail_file,modified_at'
60
68
  : undefined;
69
+ // Resolve pagination from cursor when present; otherwise from
70
+ // input.page / input.per_page. Cursor takes precedence so that
71
+ // continuing from a previous response is the path of least friction —
72
+ // callers don't have to remember which per_page they originally used.
73
+ const cursorDecoded = input.cursor !== undefined ? decodeSearchCursor(input.cursor) : null;
74
+ const requestedPage = cursorDecoded?.page ?? input.page;
75
+ const requestedPerPage = cursorDecoded?.per_page ?? input.per_page;
76
+ // Clamp per_page to what the projection's response-token budget can
77
+ // realistically carry. The HARD_CAP safety net in applyResponseBudget
78
+ // still runs below as belt-and-suspenders for unusually heavy hits.
79
+ const effPerPage = effectivePerPage(requestedPerPage, input.projection);
80
+ const perPageClamped = effPerPage < requestedPerPage;
61
81
  const result = await searchWorkspaceScoped(client, SEARCH_ASSETS_COLLECTION, workspaceId, {
62
82
  q: input.q,
63
83
  query_by: queryBy,
64
84
  ...(filterBy.length > 0 ? { filter_by: filterBy } : {}),
65
85
  sort_by: input.sort_by,
66
- page: input.page,
67
- per_page: input.per_page,
86
+ page: requestedPage,
87
+ per_page: effPerPage,
68
88
  facet_by: DEFAULT_FACET_BY_ASSETS,
69
89
  max_facet_values: DEFAULT_MAX_FACET_VALUES,
70
90
  // `'fallback'` runs Typesense's full search pipeline (exact → typo →
@@ -89,24 +109,51 @@ export async function runSearchAssets(client, workspaceId, input, requestId) {
89
109
  // skipping them so a single bad index entry doesn't fail the whole
90
110
  // response.
91
111
  const hits = projectHits(result.hits, input.projection);
92
- // Apply response-budget truncation. The next_cursor from the budget
93
- // is offset-based; our pagination model uses page+per_page from
94
- // Typesense, so we wrap the budget cursor to preserve the page
95
- // identity by returning the next page number (input.page + 1) when
96
- // truncation does NOT trigger and there are more results, and a
97
- // sentinel `truncated:true` when it does.
112
+ // Safety-net budget check. With per_page already clamped above, the
113
+ // typical case is no truncation here but unusually heavy hits
114
+ // (multiple long presigned URLs in one row, very long descriptions)
115
+ // can still cross the line. When that happens, the cursor advances
116
+ // by the *delivered* count rather than a fixed page, so no asset is
117
+ // skipped.
98
118
  const budget = applyResponseBudget(hits, {
99
119
  serialize: (item) => JSON.stringify(item),
100
- offset: (input.page - 1) * input.per_page,
101
- pageSize: input.per_page,
120
+ offset: (requestedPage - 1) * effPerPage,
121
+ pageSize: effPerPage,
102
122
  });
103
- const totalPages = Math.max(1, Math.ceil(result.found / input.per_page));
104
- const hasMorePages = input.page < totalPages;
105
- const next_cursor = budget.truncated
106
- ? budget.next_cursor ?? null
107
- : hasMorePages
108
- ? encodePageCursor(input.page + 1)
123
+ const tokenCapped = budget.truncated;
124
+ const truncated = perPageClamped || tokenCapped;
125
+ const truncation_reason = tokenCapped
126
+ ? 'token_cap'
127
+ : perPageClamped
128
+ ? 'per_page_clamped'
109
129
  : null;
130
+ // Total assets we'll have surfaced after this response.
131
+ const seenSoFar = (requestedPage - 1) * effPerPage + budget.data.length;
132
+ const moreAvailable = seenSoFar < result.found;
133
+ // Encode the continuation. When the budget caps mid-page we cannot
134
+ // safely advance the page number because we've delivered only a
135
+ // prefix of the upstream page — so we re-fetch the same page with a
136
+ // smaller per_page so the next call covers the gap.
137
+ let next_cursor = null;
138
+ if (moreAvailable) {
139
+ if (tokenCapped) {
140
+ // Shrink per_page to what just fit, advance to the next page.
141
+ const shrunkPerPage = Math.max(1, budget.data.length);
142
+ const itemsBeforeThisPage = (requestedPage - 1) * effPerPage;
143
+ const nextPage = Math.floor((itemsBeforeThisPage + budget.data.length) / shrunkPerPage) +
144
+ 1;
145
+ next_cursor = encodeSearchCursor({
146
+ page: nextPage,
147
+ per_page: shrunkPerPage,
148
+ });
149
+ }
150
+ else {
151
+ next_cursor = encodeSearchCursor({
152
+ page: requestedPage + 1,
153
+ per_page: effPerPage,
154
+ });
155
+ }
156
+ }
110
157
  const facets = buildSearchFacets(result.facet_counts, budget.data);
111
158
  // Count untagged from raw upstream rows (clipped to what survived the
112
159
  // budget) — the projected payload strips `tags` when projection=compact,
@@ -114,17 +161,20 @@ export async function runSearchAssets(client, workspaceId, input, requestId) {
114
161
  const untagged = countUntagged(result.hits.slice(0, budget.data.length));
115
162
  const next_step_hints = buildAssetSearchNextSteps({
116
163
  found: result.found,
117
- truncated: budget.truncated,
164
+ truncated,
118
165
  hasTags: facets.tags.length > 0,
119
166
  untaggedCount: untagged,
167
+ hasNextCursor: next_cursor !== null,
120
168
  });
121
169
  const output = {
122
170
  hits: budget.data,
123
171
  total: result.found,
124
- page: result.page,
125
- per_page: result.per_page,
172
+ page: requestedPage,
173
+ per_page: requestedPerPage,
174
+ effective_per_page: effPerPage,
126
175
  next_cursor,
127
- truncated: budget.truncated,
176
+ truncated,
177
+ truncation_reason,
128
178
  facets,
129
179
  next_step_hints,
130
180
  request_id: requestId,
@@ -144,23 +194,6 @@ function projectHits(rawHits, projection) {
144
194
  }
145
195
  return out;
146
196
  }
147
- function encodePageCursor(page) {
148
- return Buffer.from(`page:${page}`, 'utf-8').toString('base64');
149
- }
150
- export function decodePageCursor(cursor) {
151
- try {
152
- const decoded = Buffer.from(cursor, 'base64').toString('utf-8');
153
- if (!decoded.startsWith('page:'))
154
- return null;
155
- const n = Number(decoded.slice('page:'.length));
156
- if (!Number.isFinite(n) || n < 1 || !Number.isInteger(n))
157
- return null;
158
- return n;
159
- }
160
- catch {
161
- return null;
162
- }
163
- }
164
197
  function errorResult(requestId, code, message) {
165
198
  const retriable = code === 'UPSTREAM' || code === 'RATE_LIMITED' || code === 'INTERNAL';
166
199
  const error = { code, message, retriable };
@@ -1 +1 @@
1
- {"version":3,"file":"search-assets.js","sourceRoot":"","sources":["../../../src/tools/search/search-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-assets.js","sourceRoot":"","sources":["../../../src/tools/search/search-assets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-collections.d.ts","sourceRoot":"","sources":["../../../src/tools/search/search-collections.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQ9D,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,8BAA8B,QAO6B,CAAC;AAEzE,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,IAEL,UAAU,OAAO;aAiBtB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;uBAC3B,uBAAuB,GAAG;QAC3C,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7D,UAAU,EAAE,MAAM,CAAC;KACpB;cACS,OAAO;GAblB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,uBAAuB,GAAG;QAC3C,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7D,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CA4ED"}
1
+ {"version":3,"file":"search-collections.d.ts","sourceRoot":"","sources":["../../../src/tools/search/search-collections.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQ9D,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE7B,MAAM,YAAY,CAAC;AAQpB,eAAO,MAAM,8BAA8B,QAWN,CAAC;AAEtC,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,IAEL,UAAU,OAAO;aAiBtB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;uBAC3B,uBAAuB,GAAG;QAC3C,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7D,UAAU,EAAE,MAAM,CAAC;KACpB;cACS,OAAO;GAblB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,uBAAuB,GAAG;QAC3C,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7D,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CA6GD"}
@@ -11,13 +11,18 @@ import { searchWorkspaceScoped } from '../../typesense.js';
11
11
  import { buildCollectionSearchNextSteps, buildSearchFacets, } from './facets.js';
12
12
  import { CollectionHitSchema, DEFAULT_FACET_BY_COLLECTIONS, DEFAULT_MAX_FACET_VALUES, DEFAULT_QUERY_BY_COLLECTIONS, SearchCollectionsInputSchema, VALID_QUERY_BY_COLLECTIONS, } from './types.js';
13
13
  import { invalidQueryByFields } from './search-assets.js';
14
+ import { decodeSearchCursor, effectivePerPage, encodeSearchCursor, } from './cursor.js';
14
15
  export const SEARCH_COLLECTIONS_DESCRIPTION = 'Full-text search over the workspace dam_collections (Collages) Typesense ' +
15
16
  'index. Returns collection hits, a date histogram facet, pagination ' +
16
17
  'cursor, and next_step_hints. Useful for discovering existing collections ' +
17
18
  'before creating a new one or for narrowing a downstream tag/asset workflow ' +
18
19
  'to a specific collection. ' +
19
20
  `Optional \`query_by\` (comma-separated, no spaces) — valid values are ${VALID_QUERY_BY_COLLECTIONS.join(', ')}; ` +
20
- 'unknown field names are rejected with a VALIDATION error. Read-only.';
21
+ 'unknown field names are rejected with a VALIDATION error. ' +
22
+ 'Pagination: pass `next_cursor` from the previous response back as ' +
23
+ '`cursor` to continue. `effective_per_page` reflects the page size ' +
24
+ 'actually used; the upstream `per_page` is auto-clamped to fit the ' +
25
+ 'response-token budget. Read-only.';
21
26
  export const SEARCH_COLLECTIONS_INDEX = 'dam_collections';
22
27
  export function buildSearchCollectionsHandler(client, workspaceId) {
23
28
  return async (rawInput) => {
@@ -38,12 +43,18 @@ export async function runSearchCollections(client, workspaceId, input, requestId
38
43
  }
39
44
  }
40
45
  const queryBy = input.query_by ?? DEFAULT_QUERY_BY_COLLECTIONS;
46
+ // Cursor takes precedence over page/per_page when present.
47
+ const cursorDecoded = input.cursor !== undefined ? decodeSearchCursor(input.cursor) : null;
48
+ const requestedPage = cursorDecoded?.page ?? input.page;
49
+ const requestedPerPage = cursorDecoded?.per_page ?? input.per_page;
50
+ const effPerPage = effectivePerPage(requestedPerPage, input.projection);
51
+ const perPageClamped = effPerPage < requestedPerPage;
41
52
  const result = await searchWorkspaceScoped(client, SEARCH_COLLECTIONS_INDEX, workspaceId, {
42
53
  q: input.q,
43
54
  query_by: queryBy,
44
55
  sort_by: input.sort_by,
45
- page: input.page,
46
- per_page: input.per_page,
56
+ page: requestedPage,
57
+ per_page: effPerPage,
47
58
  facet_by: DEFAULT_FACET_BY_COLLECTIONS,
48
59
  max_facet_values: DEFAULT_MAX_FACET_VALUES,
49
60
  // See `search-assets.ts` for the rationale on `'fallback'`. Same
@@ -59,25 +70,48 @@ export async function runSearchCollections(client, workspaceId, input, requestId
59
70
  const hits = projectCollectionHits(result.hits);
60
71
  const budget = applyResponseBudget(hits, {
61
72
  serialize: (item) => JSON.stringify(item),
62
- offset: (input.page - 1) * input.per_page,
63
- pageSize: input.per_page,
73
+ offset: (requestedPage - 1) * effPerPage,
74
+ pageSize: effPerPage,
64
75
  });
65
- const totalPages = Math.max(1, Math.ceil(result.found / input.per_page));
66
- const hasMorePages = input.page < totalPages;
67
- const next_cursor = budget.truncated
68
- ? budget.next_cursor ?? null
69
- : hasMorePages
70
- ? encodePageCursor(input.page + 1)
76
+ const tokenCapped = budget.truncated;
77
+ const truncated = perPageClamped || tokenCapped;
78
+ const truncation_reason = tokenCapped
79
+ ? 'token_cap'
80
+ : perPageClamped
81
+ ? 'per_page_clamped'
71
82
  : null;
83
+ const seenSoFar = (requestedPage - 1) * effPerPage + budget.data.length;
84
+ const moreAvailable = seenSoFar < result.found;
85
+ let next_cursor = null;
86
+ if (moreAvailable) {
87
+ if (tokenCapped) {
88
+ const shrunkPerPage = Math.max(1, budget.data.length);
89
+ const itemsBeforeThisPage = (requestedPage - 1) * effPerPage;
90
+ const nextPage = Math.floor((itemsBeforeThisPage + budget.data.length) / shrunkPerPage) +
91
+ 1;
92
+ next_cursor = encodeSearchCursor({
93
+ page: nextPage,
94
+ per_page: shrunkPerPage,
95
+ });
96
+ }
97
+ else {
98
+ next_cursor = encodeSearchCursor({
99
+ page: requestedPage + 1,
100
+ per_page: effPerPage,
101
+ });
102
+ }
103
+ }
72
104
  const facets = buildSearchFacets(result.facet_counts, []);
73
105
  const next_step_hints = buildCollectionSearchNextSteps(result.found);
74
106
  const output = {
75
107
  hits: budget.data,
76
108
  total: result.found,
77
- page: result.page,
78
- per_page: result.per_page,
109
+ page: requestedPage,
110
+ per_page: requestedPerPage,
111
+ effective_per_page: effPerPage,
79
112
  next_cursor,
80
- truncated: budget.truncated,
113
+ truncated,
114
+ truncation_reason,
81
115
  facets,
82
116
  next_step_hints,
83
117
  request_id: requestId,
@@ -96,9 +130,6 @@ function projectCollectionHits(rawHits) {
96
130
  }
97
131
  return out;
98
132
  }
99
- function encodePageCursor(page) {
100
- return Buffer.from(`page:${page}`, 'utf-8').toString('base64');
101
- }
102
133
  function errorResult(requestId, code, message) {
103
134
  const retriable = code === 'UPSTREAM' || code === 'RATE_LIMITED' || code === 'INTERNAL';
104
135
  const error = { code, message, retriable };
@@ -1 +1 @@
1
- {"version":3,"file":"search-collections.js","sourceRoot":"","sources":["../../../src/tools/search/search-collections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-collections.js","sourceRoot":"","sources":["../../../src/tools/search/search-collections.ts"],"names":[],"mappings":"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"}