@cyanheads/brapi-mcp-server 0.4.13 → 0.5.0

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.
Files changed (120) hide show
  1. package/CLAUDE.md +25 -19
  2. package/README.md +40 -26
  3. package/changelog/0.4.x/0.4.13.md +15 -0
  4. package/changelog/0.4.x/0.4.14.md +22 -0
  5. package/changelog/0.5.x/0.5.0.md +59 -0
  6. package/dist/config/builtin-aliases.d.ts +1 -1
  7. package/dist/config/builtin-aliases.js +1 -1
  8. package/dist/config/server-config.d.ts +3 -3
  9. package/dist/config/server-config.d.ts.map +1 -1
  10. package/dist/config/server-config.js +13 -13
  11. package/dist/config/server-config.js.map +1 -1
  12. package/dist/index.js +62 -15
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +1 -1
  15. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -1
  16. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +3 -3
  17. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts +8 -11
  19. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js +15 -25
  21. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts +6 -10
  23. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js +6 -16
  25. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts +69 -0
  27. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts.map +1 -0
  28. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js +233 -0
  29. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js.map +1 -0
  30. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts +19 -11
  31. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts.map +1 -1
  32. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js +80 -28
  33. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js.map +1 -1
  34. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +4 -6
  35. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -1
  36. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +28 -36
  37. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -1
  38. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +3 -5
  39. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -1
  40. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +21 -17
  41. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -1
  42. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +4 -6
  43. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -1
  44. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +16 -16
  45. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -1
  46. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +3 -5
  47. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -1
  48. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +15 -15
  49. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -1
  50. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +4 -6
  51. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -1
  52. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +17 -17
  53. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -1
  54. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +4 -6
  55. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -1
  56. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +17 -17
  57. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -1
  58. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +2 -4
  59. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -1
  60. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +60 -19
  61. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -1
  62. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +3 -5
  63. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -1
  64. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +15 -15
  65. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -1
  66. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -1
  67. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +6 -2
  68. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -1
  69. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +17 -2
  70. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -1
  71. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +51 -7
  72. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -1
  73. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +16 -2
  74. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -1
  75. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +51 -5
  76. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -1
  77. package/dist/mcp-server/tools/definitions/index.d.ts +141 -165
  78. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  79. package/dist/mcp-server/tools/definitions/index.js +28 -17
  80. package/dist/mcp-server/tools/definitions/index.js.map +1 -1
  81. package/dist/mcp-server/tools/shared/find-helpers.d.ts +79 -39
  82. package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -1
  83. package/dist/mcp-server/tools/shared/find-helpers.js +167 -70
  84. package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -1
  85. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -1
  86. package/dist/mcp-server/tools/shared/raw-routing-hints.js +6 -6
  87. package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -1
  88. package/dist/services/canvas-bridge/canvas-bridge.d.ts +69 -44
  89. package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -1
  90. package/dist/services/canvas-bridge/canvas-bridge.js +220 -103
  91. package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -1
  92. package/dist/services/canvas-bridge/index.d.ts +1 -1
  93. package/dist/services/canvas-bridge/index.d.ts.map +1 -1
  94. package/dist/services/canvas-bridge/index.js +1 -1
  95. package/dist/services/canvas-bridge/index.js.map +1 -1
  96. package/dist/services/canvas-bridge/types.d.ts +11 -12
  97. package/dist/services/canvas-bridge/types.d.ts.map +1 -1
  98. package/dist/services/canvas-bridge/types.js +4 -4
  99. package/package.json +3 -11
  100. package/server.json +3 -3
  101. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +0 -13
  102. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +0 -1
  103. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +0 -26
  104. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +0 -1
  105. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +0 -89
  106. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +0 -1
  107. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +0 -306
  108. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +0 -1
  109. package/dist/services/dataset-store/dataset-store.d.ts +0 -44
  110. package/dist/services/dataset-store/dataset-store.d.ts.map +0 -1
  111. package/dist/services/dataset-store/dataset-store.js +0 -208
  112. package/dist/services/dataset-store/dataset-store.js.map +0 -1
  113. package/dist/services/dataset-store/index.d.ts +0 -8
  114. package/dist/services/dataset-store/index.d.ts.map +0 -1
  115. package/dist/services/dataset-store/index.js +0 -7
  116. package/dist/services/dataset-store/index.js.map +0 -1
  117. package/dist/services/dataset-store/types.d.ts +0 -72
  118. package/dist/services/dataset-store/types.d.ts.map +0 -1
  119. package/dist/services/dataset-store/types.js +0 -8
  120. package/dist/services/dataset-store/types.js.map +0 -1
@@ -2,8 +2,8 @@
2
2
  * @fileoverview Shared building blocks for `find_*` tools — Zod fragments for
3
3
  * common inputs (alias, loadLimit, extraFilters), utilities to merge named
4
4
  * filters with the passthrough map, a generic distribution aggregator, and
5
- * the dataset-spillover handler that turns a "too many rows" result into a
6
- * DatasetStore handle.
5
+ * the spillover handler that turns a "too many rows" result into a canvas
6
+ * dataframe handle.
7
7
  *
8
8
  * @module mcp-server/tools/shared/find-helpers
9
9
  */
@@ -11,14 +11,14 @@ import { type Context, type HandlerContext, z } from '@cyanheads/mcp-ts-core';
11
11
  import type { ServerConfig } from '../../../config/server-config.js';
12
12
  import type { BrapiClient, BrapiEnvelope, BrapiPagination, BrapiRequestOptions, ResolvedAuth } from '../../../services/brapi-client/index.js';
13
13
  import type { BrapiDialect } from '../../../services/brapi-dialect/index.js';
14
+ import type { CanvasBridge, RegisterDataframeResult } from '../../../services/canvas-bridge/index.js';
14
15
  import type { CapabilityProfile } from '../../../services/capability-registry/types.js';
15
- import type { DatasetMetadata, DatasetStore } from '../../../services/dataset-store/index.js';
16
16
  import type { RegisteredServer } from '../../../services/server-registry/index.js';
17
17
  /** True when the thrown value is an upstream 404 surfaced by the BrAPI client. */
18
18
  export declare function isUpstreamNotFound(err: unknown): boolean;
19
- /** Upper cap on how many rows we'll pull for DatasetStore spillover per call. */
19
+ /** Upper cap on how many rows we'll pull for canvas dataframe spillover per call. */
20
20
  export declare const MAX_SPILLOVER_ROWS = 50000;
21
- /** Hard cap on how many BrAPI pages we'll traverse when building a dataset. */
21
+ /** Hard cap on how many BrAPI pages we'll traverse when building a dataframe. */
22
22
  export declare const MAX_SPILLOVER_PAGES = 50;
23
23
  export declare const AliasInput: z.ZodOptional<z.ZodString>;
24
24
  export declare const LoadLimitInput: z.ZodOptional<z.ZodNumber>;
@@ -90,18 +90,18 @@ export declare function companionRequestOptions(connection: RegisteredServer, di
90
90
  */
91
91
  export declare function computeDistribution<T>(rows: readonly T[], accessor: (row: T) => string | readonly string[] | undefined | null): Record<string, number>;
92
92
  /**
93
- * Render the standardized header line for `find_*` tools. When a dataset
94
- * spillover is present, surfaces the dataset row count alongside the
93
+ * Render the standardized header line for `find_*` tools. When a dataframe
94
+ * spillover is present, surfaces the dataframe row count alongside the
95
95
  * in-context count and the upstream total — `{returned} of {total}` alone
96
96
  * hides the middle number and confuses readers when filters miss server-
97
- * side and the dataset row count diverges from both.
97
+ * side and the dataframe row count diverges from both.
98
98
  */
99
99
  export declare function renderFindHeader(opts: {
100
100
  noun: string;
101
101
  alias: string;
102
102
  returnedCount: number;
103
103
  totalCount: number;
104
- dataset?: {
104
+ dataframe?: {
105
105
  rowCount: number;
106
106
  expiresAt?: string;
107
107
  } | undefined;
@@ -127,12 +127,13 @@ export interface LoadedRows<T> {
127
127
  /**
128
128
  * Pull rows up to `loadLimit` on a single page. If the server reports more
129
129
  * rows than the limit, leave the rest behind — callers decide whether to
130
- * spill via `spillToDataset`.
130
+ * spill via `spillToCanvas`.
131
131
  */
132
132
  export declare function loadInitialPage<T>(client: BrapiClient, connection: RegisteredServer, path: string, filters: Record<string, unknown>, loadLimit: number, ctx: Context): Promise<LoadedRows<T>>;
133
133
  /** Pull the first page for either a GET list endpoint or POST /search route. */
134
134
  export declare function loadInitialFindPage<T>(client: BrapiClient, connection: RegisteredServer, route: FindRoute, loadLimit: number, ctx: Context): Promise<LoadedRows<T>>;
135
135
  export interface SpillInput<T> {
136
+ bridge: CanvasBridge;
136
137
  client: BrapiClient;
137
138
  connection: RegisteredServer;
138
139
  ctx: Context;
@@ -147,56 +148,63 @@ export interface SpillInput<T> {
147
148
  route?: FindRoute;
148
149
  /**
149
150
  * Optional client-side predicate applied to every row (first-page + spilled)
150
- * before persistence. When present, only rows that pass are persisted to
151
- * DatasetStore and returned in `fullRows`. The unfiltered upstream total is
151
+ * before persistence. When present, only rows that pass are registered on
152
+ * the canvas and returned in `fullRows`. The unfiltered upstream total is
152
153
  * preserved separately on the LoadedRows envelope so distributions and
153
154
  * headers can still report the true upstream size.
154
155
  */
155
156
  rowFilter?: (row: T) => boolean;
157
+ /**
158
+ * Optional client-side transform applied to every row (first-page + spilled)
159
+ * before any predicate filter runs. Used to normalize sparse / duplicated
160
+ * upstream payloads (e.g. dedup'ing CassavaBase's 11×-repeated synonym
161
+ * arrays) so the in-context view and the canvas dataframe see the same
162
+ * cleaned shape. Runs before `rowFilter`.
163
+ */
164
+ rowMapper?: (row: T) => T;
156
165
  source: string;
157
- store: DatasetStore;
158
166
  /** Total reported by the server on the first page. */
159
167
  totalCount: number;
160
168
  }
161
169
  export interface SpillResult<T> {
162
- dataset: DatasetMetadata;
163
- /** Rows that were persisted (post-filter when `rowFilter` was supplied). */
170
+ dataframe: RegisterDataframeResult;
171
+ /** Rows that were registered (post-filter when `rowFilter` was supplied). */
164
172
  fullRows: T[];
165
173
  pagesFetched: number;
166
174
  }
167
175
  /**
168
- * Shape of the dataset handle returned inline by `find_*` tools. Drops the
169
- * provenance fields (source/baseUrl/query) since those are internal and
170
- * available via `brapi_manage_dataset summary`.
176
+ * Shape of the dataframe handle returned inline by `find_*` tools. The
177
+ * dataframe is the canvas table holding every row beyond `loadLimit`; query
178
+ * it with `brapi_dataframe_query` for SQL access or describe it with
179
+ * `brapi_dataframe_describe` for schema + provenance.
171
180
  */
172
- export declare const DatasetHandleSchema: z.ZodObject<{
173
- datasetId: z.ZodString;
181
+ export declare const DataframeHandleSchema: z.ZodObject<{
182
+ tableName: z.ZodString;
174
183
  rowCount: z.ZodNumber;
175
- sizeBytes: z.ZodNumber;
176
184
  columns: z.ZodArray<z.ZodString>;
177
185
  createdAt: z.ZodString;
178
186
  expiresAt: z.ZodString;
179
187
  truncated: z.ZodOptional<z.ZodBoolean>;
180
188
  maxRows: z.ZodOptional<z.ZodNumber>;
181
- dataframe: z.ZodOptional<z.ZodString>;
182
189
  }, z.core.$strip>;
183
- export type DatasetHandle = z.infer<typeof DatasetHandleSchema>;
190
+ export type DataframeHandle = z.infer<typeof DataframeHandleSchema>;
184
191
  /**
185
- * Render a DatasetHandle as bullet lines, matching the existing find_* tool
192
+ * Render a DataframeHandle as bullet lines, matching the existing find_* tool
186
193
  * format. Centralized so the truncated/maxRows fields surface consistently.
187
194
  * `expiresAt` is paired with a human-readable `expires in Xh / Xd` so the
188
195
  * agent doesn't have to subtract dates to know when the handle goes stale.
189
196
  */
190
- export declare function renderDatasetHandle(handle: DatasetHandle): string[];
197
+ export declare function renderDataframeHandle(handle: DataframeHandle): string[];
191
198
  /**
192
199
  * Render an absolute `expiresAt` timestamp as a relative human label
193
200
  * (`expires in 24h`, `expires in 30m`, `expired 5m ago`). Coarsens to the
194
201
  * most useful unit so the value reads at a glance.
195
202
  */
196
203
  export declare function formatExpiresIn(expiresAt: string, now?: Date): string;
197
- /** Project a `DatasetMetadata` to the in-context handle shape. */
198
- export declare function toDatasetHandle(metadata: DatasetMetadata): DatasetHandle;
204
+ /** Project a `RegisterDataframeResult` to the inline handle shape. */
205
+ export declare function toDataframeHandle(result: RegisterDataframeResult): DataframeHandle;
199
206
  export interface MaybeSpillInput<T> {
207
+ bridge: CanvasBridge;
200
208
  client: BrapiClient;
201
209
  connection: RegisteredServer;
202
210
  ctx: Context;
@@ -207,47 +215,79 @@ export interface MaybeSpillInput<T> {
207
215
  route?: FindRoute;
208
216
  /**
209
217
  * Optional client-side predicate applied to every row before persistence.
210
- * Forwarded to `spillToDataset`. When present and no spillover happens, the
218
+ * Forwarded to `spillToCanvas`. When present and no spillover happens, the
211
219
  * first-page rows are also filtered before being returned.
212
220
  */
213
221
  rowFilter?: (row: T) => boolean;
222
+ /**
223
+ * Optional client-side transform applied to every row (first-page + spilled)
224
+ * before persistence and before any `rowFilter`. See {@link SpillInput.rowMapper}.
225
+ */
226
+ rowMapper?: (row: T) => T;
214
227
  source: string;
215
228
  /**
216
229
  * Optional request overrides for spillover page pulls. Useful when a tool
217
- * wants dataset persistence to be best-effort under a tighter latency
218
- * budget than the first page.
230
+ * wants dataframe materialization to run under a tighter latency budget
231
+ * than the first page.
219
232
  */
220
233
  spillRequestOptions?: BrapiRequestOptions;
221
- store: DatasetStore;
222
234
  /** Optional warning sink. When supplied, spillover failures degrade to rows-only output. */
223
235
  warnings?: string[];
224
236
  }
225
237
  export interface MaybeSpillResult<T> {
226
- dataset?: DatasetHandle;
238
+ dataframe?: DataframeHandle;
227
239
  /** Row set after `rowFilter` (when supplied), spilled or first-page only. */
228
240
  fullRows: T[];
229
241
  }
230
242
  /**
231
- * Wrap `spillToDataset` with the "only spill when hasMore and totalCount >
243
+ * Wrap `spillToCanvas` with the "only spill when hasMore and totalCount >
232
244
  * loadLimit" guard that every `find_*` tool replicates. When no spillover is
233
- * needed, returns the first-page rows untouched. When it is, persists the
234
- * union to DatasetStore and returns both the full set and the handle.
245
+ * needed, returns the first-page rows untouched. When it is, materializes
246
+ * the union as a canvas dataframe and returns both the full set and the
247
+ * handle.
235
248
  */
236
249
  export declare function maybeSpill<T extends Record<string, unknown>>(input: MaybeSpillInput<T>): Promise<MaybeSpillResult<T>>;
237
250
  /**
238
- * Pull every remaining page up to MAX_SPILLOVER_* caps, then persist the
239
- * union to DatasetStore. Returns the dataset metadata plus the full row set
240
- * (so callers can compute honest distributions from the whole result).
251
+ * Pull every remaining page up to MAX_SPILLOVER_* caps, then materialize the
252
+ * union as a canvas dataframe. Returns the dataframe metadata plus the full
253
+ * row set (so callers can compute honest distributions from the whole result).
241
254
  */
242
- export declare function spillToDataset<T extends Record<string, unknown>>(input: SpillInput<T>): Promise<SpillResult<T>>;
255
+ export declare function spillToCanvas<T extends Record<string, unknown>>(input: SpillInput<T>): Promise<SpillResult<T>>;
243
256
  /** BrAPI list endpoints return `{data: T[], ...}`. Some omit the wrapper. */
244
257
  export interface BrapiListResult<T> {
245
258
  data?: T[];
246
259
  [key: string]: unknown;
247
260
  }
248
261
  export declare function extractRows<T>(result: BrapiListResult<T> | T[]): T[];
262
+ /**
263
+ * Extract a homogeneous record-row set from a raw BrAPI envelope `result`.
264
+ * Returns the array when `result` is itself a list of objects, or when
265
+ * `result.data` is — covering both bare-array and BrAPI-list-envelope shapes.
266
+ * Returns `null` for non-list shapes (single object, scalar, primitive
267
+ * arrays) so callers — notably `raw_get` / `raw_search` — can skip spillover
268
+ * and pass the upstream payload through unchanged. Empty arrays are list-
269
+ * shaped but carry no rows; the caller uses `length === 0` to decide whether
270
+ * to register a dataframe.
271
+ */
272
+ export declare function extractListRows<T extends Record<string, unknown>>(result: unknown): T[] | null;
249
273
  /** Return the input as a non-empty string, or undefined. Used in distribution accessors. */
250
274
  export declare function asString(value: unknown): string | undefined;
275
+ /**
276
+ * Drop entries from a `synonyms` array that are structurally identical to an
277
+ * entry already kept. Some Breedbase deployments (notably CassavaBase) return
278
+ * each registered synonym repeated 11× per germplasm record — the bloat is
279
+ * purely upstream and carries no information beyond the unique set.
280
+ *
281
+ * Identity is taken via a stable serialization (keys sorted recursively) so
282
+ * that two entries with the same fields but different property insertion
283
+ * order are recognized as duplicates — observed live: CassavaBase emits two
284
+ * key orderings on the same record. Two entries that genuinely differ on
285
+ * any field (e.g. same `synonym` text but different `type`) still hash to
286
+ * distinct keys and are both kept. When no duplicates are present the
287
+ * input row is returned by reference — the helper is allocation-free on
288
+ * the common case.
289
+ */
290
+ export declare function dedupSynonymsByIdentity<T extends Record<string, unknown>>(row: T): T;
251
291
  /** Return the input as a non-empty string array, or undefined. */
252
292
  export declare function asStringArray(value: unknown): string[] | undefined;
253
293
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"find-helpers.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/shared/find-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-helpers.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/shared/find-helpers.ts"],"names":[],"mappings":"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"}