@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.
- package/CLAUDE.md +25 -19
- package/README.md +40 -26
- package/changelog/0.4.x/0.4.13.md +15 -0
- package/changelog/0.4.x/0.4.14.md +22 -0
- package/changelog/0.5.x/0.5.0.md +59 -0
- package/dist/config/builtin-aliases.d.ts +1 -1
- package/dist/config/builtin-aliases.js +1 -1
- package/dist/config/server-config.d.ts +3 -3
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +13 -13
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +62 -15
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +1 -1
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -1
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +3 -3
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts +8 -11
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js +15 -25
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts +6 -10
- package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js +6 -16
- package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts +69 -0
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js +233 -0
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts +19 -11
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js +80 -28
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +4 -6
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +28 -36
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +3 -5
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +21 -17
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +4 -6
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +16 -16
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +3 -5
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +15 -15
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +4 -6
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +17 -17
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +4 -6
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +17 -17
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +2 -4
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +60 -19
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +3 -5
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +15 -15
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +6 -2
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +17 -2
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +51 -7
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +16 -2
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +51 -5
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +141 -165
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/index.js +28 -17
- package/dist/mcp-server/tools/definitions/index.js.map +1 -1
- package/dist/mcp-server/tools/shared/find-helpers.d.ts +79 -39
- package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/find-helpers.js +167 -70
- package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -1
- package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/raw-routing-hints.js +6 -6
- package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -1
- package/dist/services/canvas-bridge/canvas-bridge.d.ts +69 -44
- package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -1
- package/dist/services/canvas-bridge/canvas-bridge.js +220 -103
- package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -1
- package/dist/services/canvas-bridge/index.d.ts +1 -1
- package/dist/services/canvas-bridge/index.d.ts.map +1 -1
- package/dist/services/canvas-bridge/index.js +1 -1
- package/dist/services/canvas-bridge/index.js.map +1 -1
- package/dist/services/canvas-bridge/types.d.ts +11 -12
- package/dist/services/canvas-bridge/types.d.ts.map +1 -1
- package/dist/services/canvas-bridge/types.js +4 -4
- package/package.json +3 -11
- package/server.json +3 -3
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +0 -13
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +0 -1
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +0 -26
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +0 -1
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +0 -89
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +0 -1
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +0 -306
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +0 -1
- package/dist/services/dataset-store/dataset-store.d.ts +0 -44
- package/dist/services/dataset-store/dataset-store.d.ts.map +0 -1
- package/dist/services/dataset-store/dataset-store.js +0 -208
- package/dist/services/dataset-store/dataset-store.js.map +0 -1
- package/dist/services/dataset-store/index.d.ts +0 -8
- package/dist/services/dataset-store/index.d.ts.map +0 -1
- package/dist/services/dataset-store/index.js +0 -7
- package/dist/services/dataset-store/index.js.map +0 -1
- package/dist/services/dataset-store/types.d.ts +0 -72
- package/dist/services/dataset-store/types.d.ts.map +0 -1
- package/dist/services/dataset-store/types.js +0 -8
- 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
|
|
6
|
-
*
|
|
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
|
|
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
|
|
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
|
|
94
|
-
* spillover is present, surfaces 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
|
|
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
|
-
|
|
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 `
|
|
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
|
|
151
|
-
*
|
|
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
|
-
|
|
163
|
-
/** Rows that were
|
|
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
|
|
169
|
-
*
|
|
170
|
-
*
|
|
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
|
|
173
|
-
|
|
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
|
|
190
|
+
export type DataframeHandle = z.infer<typeof DataframeHandleSchema>;
|
|
184
191
|
/**
|
|
185
|
-
* Render a
|
|
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
|
|
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 `
|
|
198
|
-
export declare function
|
|
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 `
|
|
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
|
|
218
|
-
*
|
|
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
|
-
|
|
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 `
|
|
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,
|
|
234
|
-
* union
|
|
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
|
|
239
|
-
* union
|
|
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
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,YAAY,EACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"find-helpers.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/shared/find-helpers.ts"],"names":[],"mappings":"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"}
|