@digital-science-dsl/dimensions-analytics-mcp 0.5.3 → 1.0.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.
Files changed (218) hide show
  1. package/CHANGELOG.md +4 -56
  2. package/README.md +1 -5
  3. package/dist/client/deployment-config.d.ts +20 -2
  4. package/dist/client/deployment-config.d.ts.map +1 -1
  5. package/dist/client/deployment-config.js +26 -2
  6. package/dist/client/deployment-config.js.map +1 -1
  7. package/dist/client/internal-dsl-client.d.ts +1 -1
  8. package/dist/client/internal-dsl-client.d.ts.map +1 -1
  9. package/dist/client/internal-dsl-client.js +2 -5
  10. package/dist/client/internal-dsl-client.js.map +1 -1
  11. package/dist/dsl/create-client.d.ts +1 -1
  12. package/dist/dsl/create-client.js +1 -1
  13. package/dist/dsl/fluent-query-builder.d.ts +1 -1
  14. package/dist/dsl/fluent-query-builder.js +1 -1
  15. package/dist/dsl/schema/cache.d.ts +2 -2
  16. package/dist/dsl/schema/cache.d.ts.map +1 -1
  17. package/dist/dsl/schema/cache.js +8 -14
  18. package/dist/dsl/schema/cache.js.map +1 -1
  19. package/dist/dsl/schema/load.d.ts +0 -1
  20. package/dist/dsl/schema/load.d.ts.map +1 -1
  21. package/dist/dsl/schema/load.js +1 -3
  22. package/dist/dsl/schema/load.js.map +1 -1
  23. package/dist/mcp/tools/schema.d.ts +0 -2
  24. package/dist/mcp/tools/schema.d.ts.map +1 -1
  25. package/dist/mcp/tools/schema.js.map +1 -1
  26. package/dist/mcp/utils.d.ts +0 -4
  27. package/dist/mcp/utils.d.ts.map +1 -1
  28. package/dist/mcp/utils.js +0 -7
  29. package/dist/mcp/utils.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/client/deployment-config.ts +39 -2
  32. package/src/client/internal-dsl-client.ts +2 -6
  33. package/src/dsl/create-client.ts +1 -1
  34. package/src/dsl/fluent-query-builder.ts +1 -1
  35. package/src/dsl/schema/cache.ts +8 -13
  36. package/src/dsl/schema/load.ts +1 -4
  37. package/src/mcp/tools/schema.ts +0 -3
  38. package/src/mcp/utils.ts +0 -12
  39. package/test/client/deployment-config.test.ts +25 -1
  40. package/test/client/http-client.test.ts +2 -2
  41. package/test/client/internal-dsl-client.test.ts +3 -0
  42. package/test/dsl/schema/cache.test.ts +2 -4
  43. package/test/helpers/tool-test-harness.ts +2 -19
  44. package/test/middleware/field-aliases.test.ts +1 -1
  45. package/test/tools/analytics.test.ts +2 -2
  46. package/tsconfig.tsbuildinfo +1 -1
  47. package/dist/examples/dsl-examples.d.ts +0 -11
  48. package/dist/examples/dsl-examples.d.ts.map +0 -1
  49. package/dist/examples/dsl-examples.js +0 -49
  50. package/dist/examples/dsl-examples.js.map +0 -1
  51. package/dist/examples/usage-scenarios.d.ts +0 -22
  52. package/dist/examples/usage-scenarios.d.ts.map +0 -1
  53. package/dist/examples/usage-scenarios.js +0 -173
  54. package/dist/examples/usage-scenarios.js.map +0 -1
  55. package/dist/funder-org-names.d.ts +0 -12
  56. package/dist/funder-org-names.d.ts.map +0 -1
  57. package/dist/funder-org-names.js +0 -30
  58. package/dist/funder-org-names.js.map +0 -1
  59. package/dist/http.d.ts +0 -29
  60. package/dist/http.d.ts.map +0 -1
  61. package/dist/http.js +0 -173
  62. package/dist/http.js.map +0 -1
  63. package/dist/kwq/build-query.d.ts +0 -26
  64. package/dist/kwq/build-query.d.ts.map +0 -1
  65. package/dist/kwq/build-query.js +0 -37
  66. package/dist/kwq/build-query.js.map +0 -1
  67. package/dist/kwq/concept-groups.d.ts +0 -49
  68. package/dist/kwq/concept-groups.d.ts.map +0 -1
  69. package/dist/kwq/concept-groups.js +0 -55
  70. package/dist/kwq/concept-groups.js.map +0 -1
  71. package/dist/kwq/dsl-assembler.d.ts +0 -28
  72. package/dist/kwq/dsl-assembler.d.ts.map +0 -1
  73. package/dist/kwq/dsl-assembler.js +0 -124
  74. package/dist/kwq/dsl-assembler.js.map +0 -1
  75. package/dist/kwq/ensemble.d.ts +0 -38
  76. package/dist/kwq/ensemble.d.ts.map +0 -1
  77. package/dist/kwq/ensemble.js +0 -107
  78. package/dist/kwq/ensemble.js.map +0 -1
  79. package/dist/kwq/index.d.ts +0 -16
  80. package/dist/kwq/index.d.ts.map +0 -1
  81. package/dist/kwq/index.js +0 -14
  82. package/dist/kwq/index.js.map +0 -1
  83. package/dist/kwq/types.d.ts +0 -120
  84. package/dist/kwq/types.d.ts.map +0 -1
  85. package/dist/kwq/types.js +0 -11
  86. package/dist/kwq/types.js.map +0 -1
  87. package/dist/lambda.d.ts +0 -10
  88. package/dist/lambda.d.ts.map +0 -1
  89. package/dist/lambda.js +0 -4
  90. package/dist/lambda.js.map +0 -1
  91. package/dist/mcp/tools/concept-profile.d.ts +0 -14
  92. package/dist/mcp/tools/concept-profile.d.ts.map +0 -1
  93. package/dist/mcp/tools/concept-profile.js +0 -130
  94. package/dist/mcp/tools/concept-profile.js.map +0 -1
  95. package/dist/mcp/tools/dataset-profile.d.ts +0 -15
  96. package/dist/mcp/tools/dataset-profile.d.ts.map +0 -1
  97. package/dist/mcp/tools/dataset-profile.js +0 -194
  98. package/dist/mcp/tools/dataset-profile.js.map +0 -1
  99. package/dist/mcp/tools/impact-chain.d.ts +0 -15
  100. package/dist/mcp/tools/impact-chain.d.ts.map +0 -1
  101. package/dist/mcp/tools/impact-chain.js +0 -96
  102. package/dist/mcp/tools/impact-chain.js.map +0 -1
  103. package/dist/mcp/tools/kwq.d.ts +0 -19
  104. package/dist/mcp/tools/kwq.d.ts.map +0 -1
  105. package/dist/mcp/tools/kwq.js +0 -156
  106. package/dist/mcp/tools/kwq.js.map +0 -1
  107. package/dist/mcp/tools/policy-profile.d.ts +0 -15
  108. package/dist/mcp/tools/policy-profile.d.ts.map +0 -1
  109. package/dist/mcp/tools/policy-profile.js +0 -174
  110. package/dist/mcp/tools/policy-profile.js.map +0 -1
  111. package/dist/mcp/tools/profile.d.ts +0 -14
  112. package/dist/mcp/tools/profile.d.ts.map +0 -1
  113. package/dist/mcp/tools/profile.js +0 -349
  114. package/dist/mcp/tools/profile.js.map +0 -1
  115. package/dist/middleware/field-aliases.d.ts +0 -97
  116. package/dist/middleware/field-aliases.d.ts.map +0 -1
  117. package/dist/middleware/field-aliases.js +0 -208
  118. package/dist/middleware/field-aliases.js.map +0 -1
  119. package/dist/resources/schema.d.ts +0 -13
  120. package/dist/resources/schema.d.ts.map +0 -1
  121. package/dist/resources/schema.js +0 -204
  122. package/dist/resources/schema.js.map +0 -1
  123. package/dist/schema/context.d.ts +0 -10
  124. package/dist/schema/context.d.ts.map +0 -1
  125. package/dist/schema/context.js +0 -6
  126. package/dist/schema/context.js.map +0 -1
  127. package/dist/schema/index.d.ts +0 -9
  128. package/dist/schema/index.d.ts.map +0 -1
  129. package/dist/schema/index.js +0 -6
  130. package/dist/schema/index.js.map +0 -1
  131. package/dist/schema/load.d.ts +0 -43
  132. package/dist/schema/load.d.ts.map +0 -1
  133. package/dist/schema/load.js +0 -139
  134. package/dist/schema/load.js.map +0 -1
  135. package/dist/schema/store.d.ts +0 -112
  136. package/dist/schema/store.d.ts.map +0 -1
  137. package/dist/schema/store.js +0 -173
  138. package/dist/schema/store.js.map +0 -1
  139. package/dist/schema/structured-entities.d.ts +0 -21
  140. package/dist/schema/structured-entities.d.ts.map +0 -1
  141. package/dist/schema/structured-entities.js +0 -39
  142. package/dist/schema/structured-entities.js.map +0 -1
  143. package/dist/schema/types.d.ts +0 -36
  144. package/dist/schema/types.d.ts.map +0 -1
  145. package/dist/schema/types.js +0 -6
  146. package/dist/schema/types.js.map +0 -1
  147. package/dist/server.d.ts +0 -57
  148. package/dist/server.d.ts.map +0 -1
  149. package/dist/server.js +0 -144
  150. package/dist/server.js.map +0 -1
  151. package/dist/telemetry.d.ts +0 -172
  152. package/dist/telemetry.d.ts.map +0 -1
  153. package/dist/telemetry.js +0 -233
  154. package/dist/telemetry.js.map +0 -1
  155. package/dist/tools/analytics-filters.d.ts +0 -18
  156. package/dist/tools/analytics-filters.d.ts.map +0 -1
  157. package/dist/tools/analytics-filters.js +0 -35
  158. package/dist/tools/analytics-filters.js.map +0 -1
  159. package/dist/tools/analytics.d.ts +0 -16
  160. package/dist/tools/analytics.d.ts.map +0 -1
  161. package/dist/tools/analytics.js +0 -381
  162. package/dist/tools/analytics.js.map +0 -1
  163. package/dist/tools/concept-profile.d.ts +0 -14
  164. package/dist/tools/concept-profile.d.ts.map +0 -1
  165. package/dist/tools/concept-profile.js +0 -130
  166. package/dist/tools/concept-profile.js.map +0 -1
  167. package/dist/tools/dataset-profile.d.ts +0 -15
  168. package/dist/tools/dataset-profile.d.ts.map +0 -1
  169. package/dist/tools/dataset-profile.js +0 -194
  170. package/dist/tools/dataset-profile.js.map +0 -1
  171. package/dist/tools/functions.d.ts +0 -14
  172. package/dist/tools/functions.d.ts.map +0 -1
  173. package/dist/tools/functions.js +0 -294
  174. package/dist/tools/functions.js.map +0 -1
  175. package/dist/tools/impact-chain.d.ts +0 -15
  176. package/dist/tools/impact-chain.d.ts.map +0 -1
  177. package/dist/tools/impact-chain.js +0 -96
  178. package/dist/tools/impact-chain.js.map +0 -1
  179. package/dist/tools/kwq.d.ts +0 -19
  180. package/dist/tools/kwq.d.ts.map +0 -1
  181. package/dist/tools/kwq.js +0 -156
  182. package/dist/tools/kwq.js.map +0 -1
  183. package/dist/tools/lookup.d.ts +0 -14
  184. package/dist/tools/lookup.d.ts.map +0 -1
  185. package/dist/tools/lookup.js +0 -213
  186. package/dist/tools/lookup.js.map +0 -1
  187. package/dist/tools/policy-profile.d.ts +0 -15
  188. package/dist/tools/policy-profile.d.ts.map +0 -1
  189. package/dist/tools/policy-profile.js +0 -174
  190. package/dist/tools/policy-profile.js.map +0 -1
  191. package/dist/tools/profile.d.ts +0 -14
  192. package/dist/tools/profile.d.ts.map +0 -1
  193. package/dist/tools/profile.js +0 -349
  194. package/dist/tools/profile.js.map +0 -1
  195. package/dist/tools/query.d.ts +0 -16
  196. package/dist/tools/query.d.ts.map +0 -1
  197. package/dist/tools/query.js +0 -53
  198. package/dist/tools/query.js.map +0 -1
  199. package/dist/tools/schema.d.ts +0 -23
  200. package/dist/tools/schema.d.ts.map +0 -1
  201. package/dist/tools/schema.js +0 -124
  202. package/dist/tools/schema.js.map +0 -1
  203. package/dist/tools/search-entity-metadata.d.ts +0 -18
  204. package/dist/tools/search-entity-metadata.d.ts.map +0 -1
  205. package/dist/tools/search-entity-metadata.js +0 -221
  206. package/dist/tools/search-entity-metadata.js.map +0 -1
  207. package/dist/tools/search.d.ts +0 -23
  208. package/dist/tools/search.d.ts.map +0 -1
  209. package/dist/tools/search.js +0 -110
  210. package/dist/tools/search.js.map +0 -1
  211. package/dist/tools/solr-fields.d.ts +0 -39
  212. package/dist/tools/solr-fields.d.ts.map +0 -1
  213. package/dist/tools/solr-fields.js +0 -40
  214. package/dist/tools/solr-fields.js.map +0 -1
  215. package/dist/utils.d.ts +0 -70
  216. package/dist/utils.d.ts.map +0 -1
  217. package/dist/utils.js +0 -104
  218. package/dist/utils.js.map +0 -1
@@ -1,107 +0,0 @@
1
- /**
2
- * Ring 4: RRF (Reciprocal Rank Fusion) ensemble.
3
- *
4
- * Executes multiple QuerySpecs in parallel, merges results using RRF scoring,
5
- * and returns a fused ranking. Pure function — no LLM dependency.
6
- *
7
- * @module ensemble
8
- */
9
- import { buildQuery } from "./build-query.js";
10
- const DEFAULT_K = 60;
11
- const DEFAULT_LIMIT = 100;
12
- /**
13
- * Execute multiple query specs and fuse results using Reciprocal Rank Fusion.
14
- *
15
- * RRF score for a document `d` across N ranked lists:
16
- * score(d) = Σ 1/(k + rank_i(d))
17
- * where rank_i is the 0-based position in list i.
18
- *
19
- * @param execute - Executes a DSL string and returns the raw API response.
20
- * In MCP context: `(dsl) => client.rawQuery(dsl)`.
21
- * @param specs - Query specifications to build, execute, and fuse.
22
- * @param options - Optional k (default 60) and limit (default 100).
23
- *
24
- * @example
25
- * ```typescript
26
- * const result = await ensembleQueries(
27
- * (dsl) => client.rawQuery(dsl),
28
- * [
29
- * { entity: "publications", search: "quantum networking" },
30
- * { entity: "publications", search: "quantum key distribution" },
31
- * ],
32
- * );
33
- * // result.items: [{ id: "pub.123", rrfScore: 0.033, ... }, ...]
34
- * ```
35
- */
36
- export async function ensembleQueries(execute, specs, options) {
37
- const startMs = Date.now();
38
- const k = options?.k ?? DEFAULT_K;
39
- const limit = options?.limit ?? DEFAULT_LIMIT;
40
- // Phase 1: Build DSL for each spec, skip invalid ones
41
- const built = specs.map((spec, originalIndex) => {
42
- const result = buildQuery(spec);
43
- return { spec, result, valid: result.validation._tag === "valid", originalIndex };
44
- });
45
- // Phase 2: Execute valid queries in parallel
46
- const validEntries = built.filter((b) => b.valid);
47
- const settled = await Promise.allSettled(validEntries.map((entry) => execute(entry.result.dsl)));
48
- const rankedLists = [];
49
- for (let i = 0; i < settled.length; i++) {
50
- const outcome = settled[i];
51
- if (outcome.status !== "fulfilled")
52
- continue;
53
- const response = outcome.value;
54
- const entity = validEntries[i].spec.entity;
55
- // Dimensions API returns entity array under the entity name key
56
- const entityArray = response[entity];
57
- if (!Array.isArray(entityArray))
58
- continue;
59
- rankedLists.push({
60
- specIndex: validEntries[i].originalIndex,
61
- items: entityArray,
62
- });
63
- }
64
- // Phase 4: RRF merge
65
- const scoreMap = new Map();
66
- for (const list of rankedLists) {
67
- for (let rank = 0; rank < list.items.length; rank++) {
68
- const item = list.items[rank];
69
- const id = String(item.id ?? "");
70
- if (!id)
71
- continue;
72
- const existing = scoreMap.get(id);
73
- const contribution = 1 / (k + rank);
74
- if (existing) {
75
- existing.rrfScore += contribution;
76
- existing.sourceIndices.push(list.specIndex);
77
- }
78
- else {
79
- scoreMap.set(id, {
80
- rrfScore: contribution,
81
- sourceIndices: [list.specIndex],
82
- data: item,
83
- });
84
- }
85
- }
86
- }
87
- // Phase 5: Sort by rrfScore descending, truncate to limit
88
- const items = [...scoreMap.entries()]
89
- .map(([id, entry]) => ({
90
- id,
91
- rrfScore: entry.rrfScore,
92
- sourceIndices: entry.sourceIndices,
93
- data: entry.data,
94
- }))
95
- .sort((a, b) => b.rrfScore - a.rrfScore)
96
- .slice(0, limit);
97
- return {
98
- items,
99
- metadata: {
100
- specsProvided: specs.length,
101
- specsExecuted: rankedLists.length,
102
- k,
103
- durationMs: Date.now() - startMs,
104
- },
105
- };
106
- }
107
- //# sourceMappingURL=ensemble.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensemble.js","sourceRoot":"","sources":["../../src/kwq/ensemble.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * @digital-science/dimensions-kwq
3
- *
4
- * Keyword query construction for Dimensions DSL.
5
- *
6
- * Ring 1: buildQuery() — structured spec → DSL string
7
- * Ring 4: ensembleQueries() — multi-query RRF fusion
8
- *
9
- * @module index
10
- */
11
- export { buildQuery, buildSearchNode } from "./build-query.js";
12
- export type { ConceptGroup, ConceptGroupsInput } from "./concept-groups.js";
13
- export { conceptGroupsToQuerySpec } from "./concept-groups.js";
14
- export { ensembleQueries } from "./ensemble.js";
15
- export type { BuildResult, EnsembleItem, EnsembleResult, FilterSpec, QuerySpec, SearchExpr, } from "./types.js";
16
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kwq/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC"}
package/dist/kwq/index.js DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * @digital-science/dimensions-kwq
3
- *
4
- * Keyword query construction for Dimensions DSL.
5
- *
6
- * Ring 1: buildQuery() — structured spec → DSL string
7
- * Ring 4: ensembleQueries() — multi-query RRF fusion
8
- *
9
- * @module index
10
- */
11
- export { buildQuery, buildSearchNode } from "./build-query.js";
12
- export { conceptGroupsToQuerySpec } from "./concept-groups.js";
13
- export { ensembleQueries } from "./ensemble.js";
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kwq/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -1,120 +0,0 @@
1
- /**
2
- * Types for the KWQ (Keyword Query) package.
3
- *
4
- * Ring 1: QuerySpec → buildQuery() → BuildResult (DSL string)
5
- * Ring 4: ensembleQueries() → EnsembleResult
6
- *
7
- * @module types
8
- */
9
- /** Result of structural query validation (API validates on execute). */
10
- export type ValidationResult = {
11
- readonly _tag: "valid";
12
- readonly warnings: readonly [];
13
- } | {
14
- readonly _tag: "invalid";
15
- readonly errors: readonly {
16
- readonly message: string;
17
- }[];
18
- readonly warnings: readonly [];
19
- };
20
- /** Dimensions search index names (see describe schema `search_fields`). */
21
- export type SearchIndex = "full_data" | "full_data_exact" | "title_abstract_only" | "title_only" | "authors" | "inventors" | "investigators" | "concepts" | "funding" | "abstract_only" | "title_abstract" | "title_abstract_concepts";
22
- /**
23
- * A search expression tree.
24
- *
25
- * - `string` shorthand becomes a single phrase with default index
26
- * - `{ term, index? }` for explicit per-clause index control
27
- * - `{ and: [...] }` / `{ or: [...] }` for boolean composition
28
- */
29
- export type SearchExpr = string | {
30
- readonly term: string;
31
- readonly index?: SearchIndex;
32
- } | {
33
- readonly and: readonly SearchExpr[];
34
- } | {
35
- readonly or: readonly SearchExpr[];
36
- };
37
- /**
38
- * A WHERE-clause filter.
39
- */
40
- export interface FilterSpec {
41
- readonly field: string;
42
- readonly op: "=" | "!=" | ">" | "<" | ">=" | "<=" | "in" | "~";
43
- readonly value: string | number | readonly string[] | readonly number[];
44
- }
45
- /**
46
- * Full query specification — the input to `buildQuery()`.
47
- */
48
- export interface QuerySpec {
49
- /** Target entity type */
50
- readonly entity: "publications" | "grants" | "researchers" | "patents" | "clinical_trials" | "datasets" | "policy_documents" | "organizations";
51
- /** Search expression (the `for "..."` clause) */
52
- readonly search?: SearchExpr;
53
- /** Exclusion expression — combined as `search NOT exclude` */
54
- readonly exclude?: SearchExpr;
55
- /** Default search index for terms without explicit index */
56
- readonly index?: SearchIndex;
57
- /** WHERE-clause filters */
58
- readonly filters?: readonly FilterSpec[];
59
- /** Fields to return */
60
- readonly fields?: readonly string[];
61
- /** Sort field */
62
- readonly sortBy?: string;
63
- /** Sort order (default: "desc") */
64
- readonly sortOrder?: "asc" | "desc";
65
- /** Result limit (default: 20) */
66
- readonly limit?: number;
67
- /** Result offset */
68
- readonly skip?: number;
69
- }
70
- /** Lightweight complexity summary for a built query. */
71
- export interface QueryComplexity {
72
- readonly filterCount: number;
73
- readonly hasExclusion: boolean;
74
- readonly hasSearch: boolean;
75
- }
76
- /**
77
- * Result of `buildQuery()`.
78
- */
79
- export interface BuildResult {
80
- /** Emitted DSL string */
81
- readonly dsl: string;
82
- /** Validation result (may be valid with warnings, or invalid with errors) */
83
- readonly validation: ValidationResult;
84
- /** Human-readable query explanation */
85
- readonly description: string;
86
- /** Query complexity metrics */
87
- readonly complexity: QueryComplexity;
88
- }
89
- /**
90
- * A single item in the fused RRF ranking.
91
- */
92
- export interface EnsembleItem {
93
- /** Entity ID (e.g. publication id, grant id) */
94
- readonly id: string;
95
- /** Reciprocal Rank Fusion score: Σ 1/(k + rank_i) */
96
- readonly rrfScore: number;
97
- /** Indices of the source specs that contributed this item (0-based) */
98
- readonly sourceIndices: readonly number[];
99
- /** Raw entity data from the first source that contained this item */
100
- readonly data: Record<string, unknown>;
101
- }
102
- /**
103
- * Result of `ensembleQueries()`.
104
- */
105
- export interface EnsembleResult {
106
- /** Fused items sorted by rrfScore descending */
107
- readonly items: readonly EnsembleItem[];
108
- /** Ensemble metadata */
109
- readonly metadata: {
110
- /** Number of specs provided */
111
- readonly specsProvided: number;
112
- /** Number of specs that produced valid DSL and executed successfully */
113
- readonly specsExecuted: number;
114
- /** RRF k parameter used */
115
- readonly k: number;
116
- /** Total duration in milliseconds */
117
- readonly durationMs: number;
118
- };
119
- }
120
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/kwq/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAA;CAAE,GAC1D;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;CAChC,CAAC;AAEN,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,iBAAiB,GACjB,qBAAqB,GACrB,YAAY,GACZ,SAAS,GACT,WAAW,GACX,eAAe,GACf,UAAU,GACV,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,yBAAyB,CAAC;AAI9B;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GACvC;IAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EACX,cAAc,GACd,QAAQ,GACR,aAAa,GACb,SAAS,GACT,iBAAiB,GACjB,UAAU,GACV,kBAAkB,GAClB,eAAe,CAAC;IAEpB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAE7B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAE9B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAE7B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAEzC,uBAAuB;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,iBAAiB;IACjB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAEpC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEtC,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAE1C,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAExC,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE;QACjB,+BAA+B;QAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,wEAAwE;QACxE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,2BAA2B;QAC3B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,qCAAqC;QACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH"}
package/dist/kwq/types.js DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * Types for the KWQ (Keyword Query) package.
3
- *
4
- * Ring 1: QuerySpec → buildQuery() → BuildResult (DSL string)
5
- * Ring 4: ensembleQueries() → EnsembleResult
6
- *
7
- * @module types
8
- */
9
- export {};
10
- // #endregion
11
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/kwq/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AA8JH,aAAa"}
package/dist/lambda.d.ts DELETED
@@ -1,10 +0,0 @@
1
- export declare const handler: <L extends import("hono/aws-lambda").LambdaEvent>(event: L, lambdaContext?: import("hono/aws-lambda").LambdaContext) => Promise<import("hono/aws-lambda").APIGatewayProxyResult & (L extends {
2
- multiValueHeaders: Record<string, string[]>;
3
- } ? {
4
- headers?: undefined;
5
- multiValueHeaders: Record<string, string[]>;
6
- } : {
7
- headers: Record<string, string>;
8
- multiValueHeaders?: undefined;
9
- })>;
10
- //# sourceMappingURL=lambda.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lambda.d.ts","sourceRoot":"","sources":["../src/lambda.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO;;;;;;;;GAAc,CAAC"}
package/dist/lambda.js DELETED
@@ -1,4 +0,0 @@
1
- import { handle } from "hono/aws-lambda";
2
- import { app } from "./http.js";
3
- export const handler = handle(app);
4
- //# sourceMappingURL=lambda.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lambda.js","sourceRoot":"","sources":["../src/lambda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Concept profile tool for the MCP server.
3
- * Provides multi-dimensional concept profiling across entity types via the Dimensions DSL.
4
- * @module mcp/tools/concept-profile
5
- */
6
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import type { DimensionsClient } from "../../dsl/index.js";
8
- /**
9
- * Registers the concept_profile tool with the MCP server.
10
- * @param server - MCP server instance
11
- * @param client - Dimensions client instance
12
- */
13
- export declare function registerConceptProfileTools(server: McpServer, client: DimensionsClient): void;
14
- //# sourceMappingURL=concept-profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"concept-profile.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/concept-profile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAkB3D;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAkI7F"}
@@ -1,130 +0,0 @@
1
- /**
2
- * Concept profile tool for the MCP server.
3
- * Provides multi-dimensional concept profiling across entity types via the Dimensions DSL.
4
- * @module mcp/tools/concept-profile
5
- */
6
- import { z } from "zod";
7
- import { asArray, formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS, } from "../utils.js";
8
- /** Entity types used for entity footprint counts. */
9
- const FOOTPRINT_ENTITIES = [
10
- "publications",
11
- "grants",
12
- "patents",
13
- "clinical_trials",
14
- "datasets",
15
- "policy_documents",
16
- ];
17
- /**
18
- * Registers the concept_profile tool with the MCP server.
19
- * @param server - MCP server instance
20
- * @param client - Dimensions client instance
21
- */
22
- export function registerConceptProfileTools(server, client) {
23
- server.registerTool("concept_profile", {
24
- description: "Build a multi-dimensional profile for a research concept. Returns publication analytics (year trends, top orgs, journals, funders, field classification) and entity footprint across 6 entity types.",
25
- inputSchema: {
26
- concept: z.string().describe("The concept to profile (e.g., 'CRISPR', 'machine learning')"),
27
- includeAnalytics: z
28
- .boolean()
29
- .default(true)
30
- .describe("Include DSL facet analytics (year trends, top orgs, journals, funders, fields)"),
31
- includeEntityFootprint: z
32
- .boolean()
33
- .default(true)
34
- .describe("Include cross-entity type record counts"),
35
- facetLimit: z
36
- .number()
37
- .int()
38
- .min(1)
39
- .max(50)
40
- .default(10)
41
- .describe("Max buckets per facet in analytics"),
42
- },
43
- outputSchema: {
44
- found: z.boolean().describe("Whether results were found for the concept"),
45
- concept: z.string().optional().describe("The profiled concept"),
46
- profile: z
47
- .record(z.string(), z.unknown())
48
- .optional()
49
- .describe("Multi-dimensional concept profile"),
50
- },
51
- annotations: READ_ONLY_API_ANNOTATIONS,
52
- }, async (args) => {
53
- try {
54
- const profile = {};
55
- const phases = [];
56
- // Phase 1: DSL facet analytics
57
- if (args.includeAnalytics !== false) {
58
- phases.push((async () => {
59
- const facetFields = ["year", "research_orgs", "journal", "funders", "category_for"];
60
- const facetResults = await Promise.all(facetFields.map(async (field) => {
61
- const dsl = client
62
- .createQueryBuilder()
63
- .search("publications")
64
- .for(args.concept)
65
- .returnFacet(field, { limit: field === "year" ? 50 : args.facetLimit })
66
- .limit(0)
67
- .build();
68
- const response = await client.rawQuery(dsl);
69
- return { field, data: response };
70
- }));
71
- const analytics = {};
72
- for (const { field, data } of facetResults) {
73
- const buckets = asArray(data[field]);
74
- switch (field) {
75
- case "year":
76
- analytics.yearTrend = buckets;
77
- break;
78
- case "research_orgs":
79
- analytics.topOrgs = buckets;
80
- break;
81
- case "journal":
82
- analytics.topJournals = buckets;
83
- break;
84
- case "funders":
85
- analytics.topFunders = buckets;
86
- break;
87
- case "category_for":
88
- analytics.fieldClassification = buckets;
89
- break;
90
- }
91
- }
92
- profile.analytics = analytics;
93
- })());
94
- }
95
- // Phase 2: DSL entity footprint
96
- if (args.includeEntityFootprint !== false) {
97
- phases.push((async () => {
98
- const counts = await Promise.all(FOOTPRINT_ENTITIES.map(async (entityType) => {
99
- const dsl = client
100
- .createQueryBuilder()
101
- .search(entityType)
102
- .for(args.concept)
103
- .limit(1)
104
- .build();
105
- const response = await client.rawQuery(dsl);
106
- const total = typeof response._stats?.total_count === "number"
107
- ? response._stats.total_count
108
- : 0;
109
- return { entityType, count: total };
110
- }));
111
- const entityFootprint = {};
112
- for (const { entityType, count } of counts) {
113
- entityFootprint[entityType] = count;
114
- }
115
- profile.entityFootprint = entityFootprint;
116
- })());
117
- }
118
- await Promise.all(phases);
119
- return formatToolResult({
120
- found: true,
121
- concept: args.concept,
122
- profile,
123
- });
124
- }
125
- catch (error) {
126
- return formatErrorResult(error);
127
- }
128
- });
129
- }
130
- //# sourceMappingURL=concept-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"concept-profile.js","sourceRoot":"","sources":["../../../src/mcp/tools/concept-profile.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Dataset profile tool for the MCP server.
3
- * Provides deep profiling of Dimensions datasets including structural links
4
- * to associated publications and grants.
5
- * @module mcp/tools/dataset-profile
6
- */
7
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
- import type { DimensionsClient } from "../../dsl/index.js";
9
- /**
10
- * Registers the dataset_profile tool with the MCP server.
11
- * @param server - MCP server instance
12
- * @param client - Dimensions client instance
13
- */
14
- export declare function registerDatasetProfileTools(server: McpServer, client: DimensionsClient): void;
15
- //# sourceMappingURL=dataset-profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataset-profile.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/dataset-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA6M7F"}