@cyanheads/brapi-mcp-server 0.4.14 → 0.5.1
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 +23 -19
- package/README.md +40 -26
- package/changelog/0.5.x/0.5.0.md +59 -0
- package/changelog/0.5.x/0.5.1.md +13 -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 +20 -19
- 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 +17 -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 +16 -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 +18 -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 +23 -21
- 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 +18 -17
- 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 +18 -15
- package/dist/mcp-server/tools/definitions/brapi-find-variants.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 +76 -45
- package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/find-helpers.js +159 -72
- 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 +143 -112
- 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,27 +90,30 @@ 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;
|
|
108
108
|
}): string;
|
|
109
109
|
/**
|
|
110
|
-
* Render the
|
|
111
|
-
* keys to the user-facing parameter names declared by the
|
|
112
|
-
* keys without a user-facing alias (e.g. anything from
|
|
113
|
-
* rendered as-is.
|
|
110
|
+
* Render the filters-sent-to-server block, optionally translating
|
|
111
|
+
* server-side keys to the user-facing parameter names declared by the
|
|
112
|
+
* tool. Server keys without a user-facing alias (e.g. anything from
|
|
113
|
+
* `extraFilters`) are rendered as-is. The label deliberately says "sent
|
|
114
|
+
* to server" rather than "applied" — this is the wire-shape payload, not
|
|
115
|
+
* a verified honor list. Drift between requested and honored values
|
|
116
|
+
* surfaces in the warnings produced by `checkFilterMatchRates`.
|
|
114
117
|
*/
|
|
115
118
|
export declare function renderAppliedFilters(filters: Record<string, unknown>, serverToUser?: Record<string, string>): string;
|
|
116
119
|
/** Cheap sanity-render for a distributions block in markdown. */
|
|
@@ -127,12 +130,13 @@ export interface LoadedRows<T> {
|
|
|
127
130
|
/**
|
|
128
131
|
* Pull rows up to `loadLimit` on a single page. If the server reports more
|
|
129
132
|
* rows than the limit, leave the rest behind — callers decide whether to
|
|
130
|
-
* spill via `
|
|
133
|
+
* spill via `spillToCanvas`.
|
|
131
134
|
*/
|
|
132
135
|
export declare function loadInitialPage<T>(client: BrapiClient, connection: RegisteredServer, path: string, filters: Record<string, unknown>, loadLimit: number, ctx: Context): Promise<LoadedRows<T>>;
|
|
133
136
|
/** Pull the first page for either a GET list endpoint or POST /search route. */
|
|
134
137
|
export declare function loadInitialFindPage<T>(client: BrapiClient, connection: RegisteredServer, route: FindRoute, loadLimit: number, ctx: Context): Promise<LoadedRows<T>>;
|
|
135
138
|
export interface SpillInput<T> {
|
|
139
|
+
bridge: CanvasBridge;
|
|
136
140
|
client: BrapiClient;
|
|
137
141
|
connection: RegisteredServer;
|
|
138
142
|
ctx: Context;
|
|
@@ -147,8 +151,8 @@ export interface SpillInput<T> {
|
|
|
147
151
|
route?: FindRoute;
|
|
148
152
|
/**
|
|
149
153
|
* Optional client-side predicate applied to every row (first-page + spilled)
|
|
150
|
-
* before persistence. When present, only rows that pass are
|
|
151
|
-
*
|
|
154
|
+
* before persistence. When present, only rows that pass are registered on
|
|
155
|
+
* the canvas and returned in `fullRows`. The unfiltered upstream total is
|
|
152
156
|
* preserved separately on the LoadedRows envelope so distributions and
|
|
153
157
|
* headers can still report the true upstream size.
|
|
154
158
|
*/
|
|
@@ -157,54 +161,53 @@ export interface SpillInput<T> {
|
|
|
157
161
|
* Optional client-side transform applied to every row (first-page + spilled)
|
|
158
162
|
* before any predicate filter runs. Used to normalize sparse / duplicated
|
|
159
163
|
* upstream payloads (e.g. dedup'ing CassavaBase's 11×-repeated synonym
|
|
160
|
-
* arrays) so the in-context view
|
|
161
|
-
*
|
|
164
|
+
* arrays) so the in-context view and the canvas dataframe see the same
|
|
165
|
+
* cleaned shape. Runs before `rowFilter`.
|
|
162
166
|
*/
|
|
163
167
|
rowMapper?: (row: T) => T;
|
|
164
168
|
source: string;
|
|
165
|
-
store: DatasetStore;
|
|
166
169
|
/** Total reported by the server on the first page. */
|
|
167
170
|
totalCount: number;
|
|
168
171
|
}
|
|
169
172
|
export interface SpillResult<T> {
|
|
170
|
-
|
|
171
|
-
/** Rows that were
|
|
173
|
+
dataframe: RegisterDataframeResult;
|
|
174
|
+
/** Rows that were registered (post-filter when `rowFilter` was supplied). */
|
|
172
175
|
fullRows: T[];
|
|
173
176
|
pagesFetched: number;
|
|
174
177
|
}
|
|
175
178
|
/**
|
|
176
|
-
* Shape of the
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
+
* Shape of the dataframe handle returned inline by `find_*` tools. The
|
|
180
|
+
* dataframe is the canvas table holding every row beyond `loadLimit`; query
|
|
181
|
+
* it with `brapi_dataframe_query` for SQL access or describe it with
|
|
182
|
+
* `brapi_dataframe_describe` for schema + provenance.
|
|
179
183
|
*/
|
|
180
|
-
export declare const
|
|
181
|
-
|
|
184
|
+
export declare const DataframeHandleSchema: z.ZodObject<{
|
|
185
|
+
tableName: z.ZodString;
|
|
182
186
|
rowCount: z.ZodNumber;
|
|
183
|
-
sizeBytes: z.ZodNumber;
|
|
184
187
|
columns: z.ZodArray<z.ZodString>;
|
|
185
188
|
createdAt: z.ZodString;
|
|
186
189
|
expiresAt: z.ZodString;
|
|
187
190
|
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
188
191
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
189
|
-
dataframe: z.ZodOptional<z.ZodString>;
|
|
190
192
|
}, z.core.$strip>;
|
|
191
|
-
export type
|
|
193
|
+
export type DataframeHandle = z.infer<typeof DataframeHandleSchema>;
|
|
192
194
|
/**
|
|
193
|
-
* Render a
|
|
195
|
+
* Render a DataframeHandle as bullet lines, matching the existing find_* tool
|
|
194
196
|
* format. Centralized so the truncated/maxRows fields surface consistently.
|
|
195
197
|
* `expiresAt` is paired with a human-readable `expires in Xh / Xd` so the
|
|
196
198
|
* agent doesn't have to subtract dates to know when the handle goes stale.
|
|
197
199
|
*/
|
|
198
|
-
export declare function
|
|
200
|
+
export declare function renderDataframeHandle(handle: DataframeHandle): string[];
|
|
199
201
|
/**
|
|
200
202
|
* Render an absolute `expiresAt` timestamp as a relative human label
|
|
201
203
|
* (`expires in 24h`, `expires in 30m`, `expired 5m ago`). Coarsens to the
|
|
202
204
|
* most useful unit so the value reads at a glance.
|
|
203
205
|
*/
|
|
204
206
|
export declare function formatExpiresIn(expiresAt: string, now?: Date): string;
|
|
205
|
-
/** Project a `
|
|
206
|
-
export declare function
|
|
207
|
+
/** Project a `RegisterDataframeResult` to the inline handle shape. */
|
|
208
|
+
export declare function toDataframeHandle(result: RegisterDataframeResult): DataframeHandle;
|
|
207
209
|
export interface MaybeSpillInput<T> {
|
|
210
|
+
bridge: CanvasBridge;
|
|
208
211
|
client: BrapiClient;
|
|
209
212
|
connection: RegisteredServer;
|
|
210
213
|
ctx: Context;
|
|
@@ -215,7 +218,7 @@ export interface MaybeSpillInput<T> {
|
|
|
215
218
|
route?: FindRoute;
|
|
216
219
|
/**
|
|
217
220
|
* Optional client-side predicate applied to every row before persistence.
|
|
218
|
-
* Forwarded to `
|
|
221
|
+
* Forwarded to `spillToCanvas`. When present and no spillover happens, the
|
|
219
222
|
* first-page rows are also filtered before being returned.
|
|
220
223
|
*/
|
|
221
224
|
rowFilter?: (row: T) => boolean;
|
|
@@ -227,38 +230,49 @@ export interface MaybeSpillInput<T> {
|
|
|
227
230
|
source: string;
|
|
228
231
|
/**
|
|
229
232
|
* Optional request overrides for spillover page pulls. Useful when a tool
|
|
230
|
-
* wants
|
|
231
|
-
*
|
|
233
|
+
* wants dataframe materialization to run under a tighter latency budget
|
|
234
|
+
* than the first page.
|
|
232
235
|
*/
|
|
233
236
|
spillRequestOptions?: BrapiRequestOptions;
|
|
234
|
-
store: DatasetStore;
|
|
235
237
|
/** Optional warning sink. When supplied, spillover failures degrade to rows-only output. */
|
|
236
238
|
warnings?: string[];
|
|
237
239
|
}
|
|
238
240
|
export interface MaybeSpillResult<T> {
|
|
239
|
-
|
|
241
|
+
dataframe?: DataframeHandle;
|
|
240
242
|
/** Row set after `rowFilter` (when supplied), spilled or first-page only. */
|
|
241
243
|
fullRows: T[];
|
|
242
244
|
}
|
|
243
245
|
/**
|
|
244
|
-
* Wrap `
|
|
246
|
+
* Wrap `spillToCanvas` with the "only spill when hasMore and totalCount >
|
|
245
247
|
* loadLimit" guard that every `find_*` tool replicates. When no spillover is
|
|
246
|
-
* needed, returns the first-page rows untouched. When it is,
|
|
247
|
-
* union
|
|
248
|
+
* needed, returns the first-page rows untouched. When it is, materializes
|
|
249
|
+
* the union as a canvas dataframe and returns both the full set and the
|
|
250
|
+
* handle.
|
|
248
251
|
*/
|
|
249
252
|
export declare function maybeSpill<T extends Record<string, unknown>>(input: MaybeSpillInput<T>): Promise<MaybeSpillResult<T>>;
|
|
250
253
|
/**
|
|
251
|
-
* Pull every remaining page up to MAX_SPILLOVER_* caps, then
|
|
252
|
-
* union
|
|
253
|
-
* (so callers can compute honest distributions from the whole result).
|
|
254
|
+
* Pull every remaining page up to MAX_SPILLOVER_* caps, then materialize the
|
|
255
|
+
* union as a canvas dataframe. Returns the dataframe metadata plus the full
|
|
256
|
+
* row set (so callers can compute honest distributions from the whole result).
|
|
254
257
|
*/
|
|
255
|
-
export declare function
|
|
258
|
+
export declare function spillToCanvas<T extends Record<string, unknown>>(input: SpillInput<T>): Promise<SpillResult<T>>;
|
|
256
259
|
/** BrAPI list endpoints return `{data: T[], ...}`. Some omit the wrapper. */
|
|
257
260
|
export interface BrapiListResult<T> {
|
|
258
261
|
data?: T[];
|
|
259
262
|
[key: string]: unknown;
|
|
260
263
|
}
|
|
261
264
|
export declare function extractRows<T>(result: BrapiListResult<T> | T[]): T[];
|
|
265
|
+
/**
|
|
266
|
+
* Extract a homogeneous record-row set from a raw BrAPI envelope `result`.
|
|
267
|
+
* Returns the array when `result` is itself a list of objects, or when
|
|
268
|
+
* `result.data` is — covering both bare-array and BrAPI-list-envelope shapes.
|
|
269
|
+
* Returns `null` for non-list shapes (single object, scalar, primitive
|
|
270
|
+
* arrays) so callers — notably `raw_get` / `raw_search` — can skip spillover
|
|
271
|
+
* and pass the upstream payload through unchanged. Empty arrays are list-
|
|
272
|
+
* shaped but carry no rows; the caller uses `length === 0` to decide whether
|
|
273
|
+
* to register a dataframe.
|
|
274
|
+
*/
|
|
275
|
+
export declare function extractListRows<T extends Record<string, unknown>>(result: unknown): T[] | null;
|
|
262
276
|
/** Return the input as a non-empty string, or undefined. Used in distribution accessors. */
|
|
263
277
|
export declare function asString(value: unknown): string | undefined;
|
|
264
278
|
/**
|
|
@@ -350,6 +364,23 @@ export declare function checkFilterMatchRates(warnings: string[], fullRowCount:
|
|
|
350
364
|
export declare function fkMatchCheck(paramName: string, requestedValues: readonly (string | number | boolean)[] | undefined, rows: readonly Record<string, unknown>[], fieldName: string, options?: {
|
|
351
365
|
requireEveryRowMatch?: boolean;
|
|
352
366
|
}): FilterMatchCheck;
|
|
367
|
+
/**
|
|
368
|
+
* Generate `FilterMatchCheck` entries for every key in `extraFilters` that
|
|
369
|
+
* can be cross-referenced against a top-level column on the returned rows.
|
|
370
|
+
* Catches the wrong-results class of bug where the agent passes a filter the
|
|
371
|
+
* upstream silently ignores (e.g. `locationName` on `/studies` — not a valid
|
|
372
|
+
* filter key, server returns the unfiltered baseline). The named-param
|
|
373
|
+
* verification path treats requested values as authoritative; this helper
|
|
374
|
+
* extends that same check across `extraFilters` so the post-hoc validator
|
|
375
|
+
* runs uniformly regardless of how the filter entered the call.
|
|
376
|
+
*
|
|
377
|
+
* Column inference is intentionally narrow — exact match, then a trailing-`s`
|
|
378
|
+
* strip (`locationDbIds → locationDbId`, `locationNames → locationName`).
|
|
379
|
+
* Keys that don't resolve to a column produce a single grouped warning
|
|
380
|
+
* ("could not verify these extraFilters keys: …") so the agent knows the
|
|
381
|
+
* trace can't speak to whether they were honored.
|
|
382
|
+
*/
|
|
383
|
+
export declare function buildExtraFilterChecks(extraFilters: Record<string, unknown> | undefined, rows: readonly Record<string, unknown>[], warnings: string[]): FilterMatchCheck[];
|
|
353
384
|
export interface RefinementHintOptions {
|
|
354
385
|
/**
|
|
355
386
|
* Filter parameter names available on the calling tool. Used to suggest
|
|
@@ -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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"}
|