@digital-science-dsl/dimensions-analytics-mcp 0.5.3 → 1.0.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/CHANGELOG.md +2 -58
- package/README.md +1 -5
- package/dist/client/deployment-config.d.ts +20 -2
- package/dist/client/deployment-config.d.ts.map +1 -1
- package/dist/client/deployment-config.js +26 -2
- package/dist/client/deployment-config.js.map +1 -1
- package/dist/client/internal-dsl-client.d.ts +1 -1
- package/dist/client/internal-dsl-client.d.ts.map +1 -1
- package/dist/client/internal-dsl-client.js +2 -5
- package/dist/client/internal-dsl-client.js.map +1 -1
- package/dist/dsl/create-client.d.ts +1 -1
- package/dist/dsl/create-client.js +1 -1
- package/dist/dsl/fluent-query-builder.d.ts +1 -1
- package/dist/dsl/fluent-query-builder.js +1 -1
- package/dist/dsl/schema/cache.d.ts +2 -2
- package/dist/dsl/schema/cache.d.ts.map +1 -1
- package/dist/dsl/schema/cache.js +8 -14
- package/dist/dsl/schema/cache.js.map +1 -1
- package/dist/dsl/schema/load.d.ts +0 -1
- package/dist/dsl/schema/load.d.ts.map +1 -1
- package/dist/dsl/schema/load.js +1 -3
- package/dist/dsl/schema/load.js.map +1 -1
- package/dist/mcp/tools/schema.d.ts +0 -2
- package/dist/mcp/tools/schema.d.ts.map +1 -1
- package/dist/mcp/tools/schema.js.map +1 -1
- package/dist/mcp/utils.d.ts +0 -4
- package/dist/mcp/utils.d.ts.map +1 -1
- package/dist/mcp/utils.js +0 -7
- package/dist/mcp/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/client/deployment-config.ts +39 -2
- package/src/client/internal-dsl-client.ts +2 -6
- package/src/dsl/create-client.ts +1 -1
- package/src/dsl/fluent-query-builder.ts +1 -1
- package/src/dsl/schema/cache.ts +8 -13
- package/src/dsl/schema/load.ts +1 -4
- package/src/mcp/tools/schema.ts +0 -3
- package/src/mcp/utils.ts +0 -12
- package/test/client/deployment-config.test.ts +25 -1
- package/test/client/http-client.test.ts +2 -2
- package/test/client/internal-dsl-client.test.ts +3 -0
- package/test/dsl/schema/cache.test.ts +2 -4
- package/test/helpers/tool-test-harness.ts +2 -19
- package/test/middleware/field-aliases.test.ts +1 -1
- package/test/tools/analytics.test.ts +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/examples/dsl-examples.d.ts +0 -11
- package/dist/examples/dsl-examples.d.ts.map +0 -1
- package/dist/examples/dsl-examples.js +0 -49
- package/dist/examples/dsl-examples.js.map +0 -1
- package/dist/examples/usage-scenarios.d.ts +0 -22
- package/dist/examples/usage-scenarios.d.ts.map +0 -1
- package/dist/examples/usage-scenarios.js +0 -173
- package/dist/examples/usage-scenarios.js.map +0 -1
- package/dist/funder-org-names.d.ts +0 -12
- package/dist/funder-org-names.d.ts.map +0 -1
- package/dist/funder-org-names.js +0 -30
- package/dist/funder-org-names.js.map +0 -1
- package/dist/http.d.ts +0 -29
- package/dist/http.d.ts.map +0 -1
- package/dist/http.js +0 -173
- package/dist/http.js.map +0 -1
- package/dist/kwq/build-query.d.ts +0 -26
- package/dist/kwq/build-query.d.ts.map +0 -1
- package/dist/kwq/build-query.js +0 -37
- package/dist/kwq/build-query.js.map +0 -1
- package/dist/kwq/concept-groups.d.ts +0 -49
- package/dist/kwq/concept-groups.d.ts.map +0 -1
- package/dist/kwq/concept-groups.js +0 -55
- package/dist/kwq/concept-groups.js.map +0 -1
- package/dist/kwq/dsl-assembler.d.ts +0 -28
- package/dist/kwq/dsl-assembler.d.ts.map +0 -1
- package/dist/kwq/dsl-assembler.js +0 -124
- package/dist/kwq/dsl-assembler.js.map +0 -1
- package/dist/kwq/ensemble.d.ts +0 -38
- package/dist/kwq/ensemble.d.ts.map +0 -1
- package/dist/kwq/ensemble.js +0 -107
- package/dist/kwq/ensemble.js.map +0 -1
- package/dist/kwq/index.d.ts +0 -16
- package/dist/kwq/index.d.ts.map +0 -1
- package/dist/kwq/index.js +0 -14
- package/dist/kwq/index.js.map +0 -1
- package/dist/kwq/types.d.ts +0 -120
- package/dist/kwq/types.d.ts.map +0 -1
- package/dist/kwq/types.js +0 -11
- package/dist/kwq/types.js.map +0 -1
- package/dist/lambda.d.ts +0 -10
- package/dist/lambda.d.ts.map +0 -1
- package/dist/lambda.js +0 -4
- package/dist/lambda.js.map +0 -1
- package/dist/mcp/tools/concept-profile.d.ts +0 -14
- package/dist/mcp/tools/concept-profile.d.ts.map +0 -1
- package/dist/mcp/tools/concept-profile.js +0 -130
- package/dist/mcp/tools/concept-profile.js.map +0 -1
- package/dist/mcp/tools/dataset-profile.d.ts +0 -15
- package/dist/mcp/tools/dataset-profile.d.ts.map +0 -1
- package/dist/mcp/tools/dataset-profile.js +0 -194
- package/dist/mcp/tools/dataset-profile.js.map +0 -1
- package/dist/mcp/tools/impact-chain.d.ts +0 -15
- package/dist/mcp/tools/impact-chain.d.ts.map +0 -1
- package/dist/mcp/tools/impact-chain.js +0 -96
- package/dist/mcp/tools/impact-chain.js.map +0 -1
- package/dist/mcp/tools/kwq.d.ts +0 -19
- package/dist/mcp/tools/kwq.d.ts.map +0 -1
- package/dist/mcp/tools/kwq.js +0 -156
- package/dist/mcp/tools/kwq.js.map +0 -1
- package/dist/mcp/tools/policy-profile.d.ts +0 -15
- package/dist/mcp/tools/policy-profile.d.ts.map +0 -1
- package/dist/mcp/tools/policy-profile.js +0 -174
- package/dist/mcp/tools/policy-profile.js.map +0 -1
- package/dist/mcp/tools/profile.d.ts +0 -14
- package/dist/mcp/tools/profile.d.ts.map +0 -1
- package/dist/mcp/tools/profile.js +0 -349
- package/dist/mcp/tools/profile.js.map +0 -1
- package/dist/middleware/field-aliases.d.ts +0 -97
- package/dist/middleware/field-aliases.d.ts.map +0 -1
- package/dist/middleware/field-aliases.js +0 -208
- package/dist/middleware/field-aliases.js.map +0 -1
- package/dist/resources/schema.d.ts +0 -13
- package/dist/resources/schema.d.ts.map +0 -1
- package/dist/resources/schema.js +0 -204
- package/dist/resources/schema.js.map +0 -1
- package/dist/schema/context.d.ts +0 -10
- package/dist/schema/context.d.ts.map +0 -1
- package/dist/schema/context.js +0 -6
- package/dist/schema/context.js.map +0 -1
- package/dist/schema/index.d.ts +0 -9
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -6
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/load.d.ts +0 -43
- package/dist/schema/load.d.ts.map +0 -1
- package/dist/schema/load.js +0 -139
- package/dist/schema/load.js.map +0 -1
- package/dist/schema/store.d.ts +0 -112
- package/dist/schema/store.d.ts.map +0 -1
- package/dist/schema/store.js +0 -173
- package/dist/schema/store.js.map +0 -1
- package/dist/schema/structured-entities.d.ts +0 -21
- package/dist/schema/structured-entities.d.ts.map +0 -1
- package/dist/schema/structured-entities.js +0 -39
- package/dist/schema/structured-entities.js.map +0 -1
- package/dist/schema/types.d.ts +0 -36
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js +0 -6
- package/dist/schema/types.js.map +0 -1
- package/dist/server.d.ts +0 -57
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -144
- package/dist/server.js.map +0 -1
- package/dist/telemetry.d.ts +0 -172
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -233
- package/dist/telemetry.js.map +0 -1
- package/dist/tools/analytics-filters.d.ts +0 -18
- package/dist/tools/analytics-filters.d.ts.map +0 -1
- package/dist/tools/analytics-filters.js +0 -35
- package/dist/tools/analytics-filters.js.map +0 -1
- package/dist/tools/analytics.d.ts +0 -16
- package/dist/tools/analytics.d.ts.map +0 -1
- package/dist/tools/analytics.js +0 -381
- package/dist/tools/analytics.js.map +0 -1
- package/dist/tools/concept-profile.d.ts +0 -14
- package/dist/tools/concept-profile.d.ts.map +0 -1
- package/dist/tools/concept-profile.js +0 -130
- package/dist/tools/concept-profile.js.map +0 -1
- package/dist/tools/dataset-profile.d.ts +0 -15
- package/dist/tools/dataset-profile.d.ts.map +0 -1
- package/dist/tools/dataset-profile.js +0 -194
- package/dist/tools/dataset-profile.js.map +0 -1
- package/dist/tools/functions.d.ts +0 -14
- package/dist/tools/functions.d.ts.map +0 -1
- package/dist/tools/functions.js +0 -294
- package/dist/tools/functions.js.map +0 -1
- package/dist/tools/impact-chain.d.ts +0 -15
- package/dist/tools/impact-chain.d.ts.map +0 -1
- package/dist/tools/impact-chain.js +0 -96
- package/dist/tools/impact-chain.js.map +0 -1
- package/dist/tools/kwq.d.ts +0 -19
- package/dist/tools/kwq.d.ts.map +0 -1
- package/dist/tools/kwq.js +0 -156
- package/dist/tools/kwq.js.map +0 -1
- package/dist/tools/lookup.d.ts +0 -14
- package/dist/tools/lookup.d.ts.map +0 -1
- package/dist/tools/lookup.js +0 -213
- package/dist/tools/lookup.js.map +0 -1
- package/dist/tools/policy-profile.d.ts +0 -15
- package/dist/tools/policy-profile.d.ts.map +0 -1
- package/dist/tools/policy-profile.js +0 -174
- package/dist/tools/policy-profile.js.map +0 -1
- package/dist/tools/profile.d.ts +0 -14
- package/dist/tools/profile.d.ts.map +0 -1
- package/dist/tools/profile.js +0 -349
- package/dist/tools/profile.js.map +0 -1
- package/dist/tools/query.d.ts +0 -16
- package/dist/tools/query.d.ts.map +0 -1
- package/dist/tools/query.js +0 -53
- package/dist/tools/query.js.map +0 -1
- package/dist/tools/schema.d.ts +0 -23
- package/dist/tools/schema.d.ts.map +0 -1
- package/dist/tools/schema.js +0 -124
- package/dist/tools/schema.js.map +0 -1
- package/dist/tools/search-entity-metadata.d.ts +0 -18
- package/dist/tools/search-entity-metadata.d.ts.map +0 -1
- package/dist/tools/search-entity-metadata.js +0 -221
- package/dist/tools/search-entity-metadata.js.map +0 -1
- package/dist/tools/search.d.ts +0 -23
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -110
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/solr-fields.d.ts +0 -39
- package/dist/tools/solr-fields.d.ts.map +0 -1
- package/dist/tools/solr-fields.js +0 -40
- package/dist/tools/solr-fields.js.map +0 -1
- package/dist/utils.d.ts +0 -70
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -104
- package/dist/utils.js.map +0 -1
package/src/dsl/schema/cache.ts
CHANGED
|
@@ -38,7 +38,7 @@ export function isCacheFresh(cachedAt: Date | undefined, ttlMs: number): boolean
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
* Reads a schema cache file (envelope
|
|
41
|
+
* Reads a schema cache file (envelope format).
|
|
42
42
|
* @param cachePath - Path to JSON cache file
|
|
43
43
|
* @returns Parsed cache entry or undefined when missing/invalid
|
|
44
44
|
*/
|
|
@@ -55,7 +55,7 @@ export async function readSchemaCacheFile(
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
|
-
* Parses cache JSON
|
|
58
|
+
* Parses cache JSON envelope format.
|
|
59
59
|
* @param parsed - Parsed JSON value
|
|
60
60
|
* @returns Normalized cache entry
|
|
61
61
|
*/
|
|
@@ -66,20 +66,15 @@ export function parseCachePayload(parsed: unknown): SchemaCacheEntry | undefined
|
|
|
66
66
|
|
|
67
67
|
const record = parsed as Record<string, unknown>;
|
|
68
68
|
|
|
69
|
-
if ("schema" in record) {
|
|
70
|
-
|
|
71
|
-
const response = extractDescribeSchema(record.schema);
|
|
72
|
-
const cachedAt = typeof record.cachedAt === "string" ? new Date(record.cachedAt) : undefined;
|
|
73
|
-
const version = typeof record.version === "string" ? record.version : undefined;
|
|
74
|
-
return { response, cachedAt, version };
|
|
75
|
-
} catch {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
69
|
+
if (!("schema" in record)) {
|
|
70
|
+
return undefined;
|
|
78
71
|
}
|
|
79
72
|
|
|
80
73
|
try {
|
|
81
|
-
const response = extractDescribeSchema(
|
|
82
|
-
|
|
74
|
+
const response = extractDescribeSchema(record.schema);
|
|
75
|
+
const cachedAt = typeof record.cachedAt === "string" ? new Date(record.cachedAt) : undefined;
|
|
76
|
+
const version = typeof record.version === "string" ? record.version : undefined;
|
|
77
|
+
return { response, cachedAt, version };
|
|
83
78
|
} catch {
|
|
84
79
|
return undefined;
|
|
85
80
|
}
|
package/src/dsl/schema/load.ts
CHANGED
|
@@ -112,7 +112,7 @@ export async function loadSchema(
|
|
|
112
112
|
const age =
|
|
113
113
|
cached.cachedAt != null
|
|
114
114
|
? `${Math.round((Date.now() - cached.cachedAt.getTime()) / 60_000)}m old`
|
|
115
|
-
: "
|
|
115
|
+
: "undated cache";
|
|
116
116
|
console.error(
|
|
117
117
|
`[schema] API unavailable; using stale cache (${age}). ` +
|
|
118
118
|
`Call refresh_schema when the API is reachable.`,
|
|
@@ -155,6 +155,3 @@ function logSchemaLoaded(store: SchemaStore, via: string): void {
|
|
|
155
155
|
` [${flags}]`,
|
|
156
156
|
);
|
|
157
157
|
}
|
|
158
|
-
|
|
159
|
-
// Re-export extract helpers for backward compatibility
|
|
160
|
-
export { extractDescribeSchema, extractDescribeVersion } from "./extract.js";
|
package/src/mcp/tools/schema.ts
CHANGED
|
@@ -11,9 +11,6 @@ import type { SchemaContext } from "../schema/context.js";
|
|
|
11
11
|
import { loadSchema, type SchemaStore } from "../schema/index.js";
|
|
12
12
|
import { formatErrorResult, formatToolResult, READ_ONLY_API_ANNOTATIONS } from "../utils.js";
|
|
13
13
|
|
|
14
|
-
/** @deprecated Use {@link SchemaContext} from schema/context.js */
|
|
15
|
-
export type { SchemaContext } from "../schema/context.js";
|
|
16
|
-
|
|
17
14
|
/**
|
|
18
15
|
* Registers schema introspection and validation tools.
|
|
19
16
|
* @param server - MCP server instance
|
package/src/mcp/utils.ts
CHANGED
|
@@ -155,18 +155,6 @@ export function withSearchPagination<T extends Record<string, unknown>>(
|
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
/**
|
|
159
|
-
* @deprecated Use {@link withSearchPagination} — kept as alias for gradual migration.
|
|
160
|
-
*/
|
|
161
|
-
export function withTruncationWarning<T extends Record<string, unknown>>(
|
|
162
|
-
data: T,
|
|
163
|
-
totalCount: number,
|
|
164
|
-
returnedCount: number,
|
|
165
|
-
): T & SearchPaginationFields {
|
|
166
|
-
const pageSize = returnedCount > 0 ? returnedCount : 100;
|
|
167
|
-
return withSearchPagination(data, totalCount, returnedCount, 0, pageSize);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
158
|
/** Logging levels supported by the MCP protocol (syslog severity). */
|
|
171
159
|
export type McpLogLevel =
|
|
172
160
|
| "debug"
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
buildHostedDslLoggingInfo,
|
|
9
|
+
hostedBootstrapUser,
|
|
10
|
+
loadDeploymentConfig,
|
|
11
|
+
mcpTrackingUser,
|
|
12
|
+
} from "../../src/client/deployment-config.js";
|
|
8
13
|
|
|
9
14
|
const HOSTED_ENV = {
|
|
10
15
|
DEPLOYMENT_MODE: "hosted",
|
|
@@ -67,3 +72,22 @@ describe("hostedBootstrapUser", () => {
|
|
|
67
72
|
expect(hostedBootstrapUser("app.dimensions.ai")).toBe("mcp@app.dimensions.ai");
|
|
68
73
|
});
|
|
69
74
|
});
|
|
75
|
+
|
|
76
|
+
describe("mcpTrackingUser", () => {
|
|
77
|
+
it("prefixes canonical email with mcp+", () => {
|
|
78
|
+
expect(mcpTrackingUser("alice@university.edu")).toBe("mcp+alice@university.edu");
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe("buildHostedDslLoggingInfo", () => {
|
|
83
|
+
it("includes channel metadata for dsl-service logs", () => {
|
|
84
|
+
expect(buildHostedDslLoggingInfo("alice@university.edu", "standard")).toEqual({
|
|
85
|
+
user: "alice@university.edu",
|
|
86
|
+
dimensions_user: "alice@university.edu",
|
|
87
|
+
channel: "mcp",
|
|
88
|
+
mcp_user: "mcp+alice@university.edu",
|
|
89
|
+
product_variant: "standard",
|
|
90
|
+
source: "dimensions-analytics-mcp-hosted",
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -101,7 +101,7 @@ describe("HttpClient", () => {
|
|
|
101
101
|
expect(mockAuthProvider.getHeaders).toHaveBeenCalledTimes(2);
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
-
it("query() without options still works
|
|
104
|
+
it("query() without options still works", async () => {
|
|
105
105
|
const mockFetch = vi.fn().mockResolvedValueOnce({
|
|
106
106
|
ok: true,
|
|
107
107
|
json: () => Promise.resolve({ _stats: { total_count: 0 } }),
|
|
@@ -1104,7 +1104,7 @@ describe("HttpClient", () => {
|
|
|
1104
1104
|
expect(recordSpy).toHaveBeenCalledTimes(1);
|
|
1105
1105
|
});
|
|
1106
1106
|
|
|
1107
|
-
it("works without rate limiter
|
|
1107
|
+
it("works without rate limiter", async () => {
|
|
1108
1108
|
const clientWithoutLimiter = new HttpClient({
|
|
1109
1109
|
baseUrl: "https://app.dimensions.ai",
|
|
1110
1110
|
authProvider: mockAuthProvider,
|
|
@@ -55,6 +55,9 @@ describe("InternalDslClient", () => {
|
|
|
55
55
|
variant: "standard",
|
|
56
56
|
additional_logging_info: {
|
|
57
57
|
user: "user@example.com",
|
|
58
|
+
dimensions_user: "user@example.com",
|
|
59
|
+
channel: "mcp",
|
|
60
|
+
mcp_user: "mcp+user@example.com",
|
|
58
61
|
product_variant: "standard",
|
|
59
62
|
source: "dimensions-analytics-mcp-hosted",
|
|
60
63
|
},
|
|
@@ -41,10 +41,8 @@ describe("schema cache helpers", () => {
|
|
|
41
41
|
expect(entry?.response.sources.publications).toBeDefined();
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
it("parseCachePayload
|
|
45
|
-
|
|
46
|
-
expect(entry?.cachedAt).toBeUndefined();
|
|
47
|
-
expect(entry?.response.sources.publications).toBeDefined();
|
|
44
|
+
it("parseCachePayload returns undefined for bare describe payloads", () => {
|
|
45
|
+
expect(parseCachePayload(sampleSchema)).toBeUndefined();
|
|
48
46
|
});
|
|
49
47
|
|
|
50
48
|
it("resolveCacheTtlMs prefers explicit override", () => {
|
|
@@ -17,7 +17,7 @@ type ToolHandler = (
|
|
|
17
17
|
) => Promise<ToolResult>;
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* Creates a mock McpServer that captures `.
|
|
20
|
+
* Creates a mock McpServer that captures `.registerTool()` registrations into a Map.
|
|
21
21
|
* @returns Object with the mock server and a Map of tool name to handler
|
|
22
22
|
*/
|
|
23
23
|
export function createMockServer() {
|
|
@@ -27,24 +27,7 @@ export function createMockServer() {
|
|
|
27
27
|
handlers.set(name, (args, extra) => handler(args, extra));
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
const server = {
|
|
31
|
-
// Legacy — kept for backward compatibility during migration
|
|
32
|
-
tool: vi.fn(
|
|
33
|
-
(
|
|
34
|
-
name: string,
|
|
35
|
-
_descriptionOrSchema: unknown,
|
|
36
|
-
schemaOrHandler: unknown,
|
|
37
|
-
maybeHandler?: unknown,
|
|
38
|
-
) => {
|
|
39
|
-
// server.tool() has two overloads:
|
|
40
|
-
// tool(name, description, schema, handler)
|
|
41
|
-
// tool(name, schema, handler)
|
|
42
|
-
const handler = (maybeHandler ?? schemaOrHandler) as ToolHandler;
|
|
43
|
-
handlers.set(name, handler);
|
|
44
|
-
},
|
|
45
|
-
),
|
|
46
|
-
registerTool,
|
|
47
|
-
};
|
|
30
|
+
const server = { registerTool };
|
|
48
31
|
|
|
49
32
|
return { server, handlers };
|
|
50
33
|
}
|
|
@@ -22,7 +22,7 @@ describe("resolveFieldName", () => {
|
|
|
22
22
|
expect(resolveFieldName("publications", "times_cited")).toBe("times_cited");
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
it("passes through unknown names unchanged
|
|
25
|
+
it("passes through unknown names unchanged", () => {
|
|
26
26
|
expect(resolveFieldName("publications", "some_unknown_field")).toBe("some_unknown_field");
|
|
27
27
|
});
|
|
28
28
|
|
|
@@ -103,7 +103,7 @@ describe("analytics tools", () => {
|
|
|
103
103
|
expect(dsl).toContain("return journal");
|
|
104
104
|
});
|
|
105
105
|
|
|
106
|
-
it("resolves
|
|
106
|
+
it("resolves funders facet alias to funder_orgs on grants", async () => {
|
|
107
107
|
client.rawQuery.mockResolvedValue({ funder_orgs: [{ id: "grid.1", count: 1 }] });
|
|
108
108
|
|
|
109
109
|
await callTool(handlers, "facet_query", {
|
|
@@ -205,7 +205,7 @@ describe("analytics tools", () => {
|
|
|
205
205
|
expect(dsl).toContain("aggregate funding");
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
it("resolves
|
|
208
|
+
it("resolves funders facet alias on aggregate queries", async () => {
|
|
209
209
|
client.rawQuery.mockResolvedValue({ funder_orgs: [] });
|
|
210
210
|
|
|
211
211
|
await callTool(handlers, "aggregate_query", {
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/http-main.ts","./src/index.ts","./src/main.ts","./src/client/command.ts","./src/client/config.ts","./src/client/deployment-config.ts","./src/client/errors.ts","./src/client/http-client.ts","./src/client/index.ts","./src/client/internal-dsl-client.ts","./src/client/rate-limiter.ts","./src/client/resolve-api-key-user.ts","./src/client/types.ts","./src/client/auth/config-loaders.ts","./src/client/auth/factory.ts","./src/client/auth/index.ts","./src/client/auth/jwt-utils.ts","./src/client/auth/node.ts","./src/client/auth/schemas.ts","./src/client/auth/types.ts","./src/client/auth/decorators/index.ts","./src/client/auth/decorators/with-caching.ts","./src/client/auth/providers/index.ts","./src/client/auth/providers/jwt-auth-provider.ts","./src/client/config/index.ts","./src/client/config/loader.ts","./src/client/config/node.ts","./src/client/config/schemas.ts","./src/client/config/types.ts","./src/client/config/unified-loader.ts","./src/dsl/client.ts","./src/dsl/create-client.ts","./src/dsl/fluent-query-builder.ts","./src/dsl/index.ts","./src/dsl/pagination.ts","./src/dsl/query-builder.ts","./src/dsl/response-parser.ts","./src/dsl/usage-policy.ts","./src/dsl/commands/apply-filters.ts","./src/dsl/commands/index.ts","./src/dsl/commands/validate-input.ts","./src/dsl/commands/facet/index.ts","./src/dsl/commands/facet/schemas.ts","./src/dsl/commands/functions/
|
|
1
|
+
{"root":["./src/http-main.ts","./src/index.ts","./src/main.ts","./src/client/command.ts","./src/client/config.ts","./src/client/deployment-config.ts","./src/client/errors.ts","./src/client/http-client.ts","./src/client/index.ts","./src/client/internal-dsl-client.ts","./src/client/rate-limiter.ts","./src/client/resolve-api-key-user.ts","./src/client/types.ts","./src/client/auth/config-loaders.ts","./src/client/auth/factory.ts","./src/client/auth/index.ts","./src/client/auth/jwt-utils.ts","./src/client/auth/node.ts","./src/client/auth/schemas.ts","./src/client/auth/types.ts","./src/client/auth/decorators/index.ts","./src/client/auth/decorators/with-caching.ts","./src/client/auth/providers/index.ts","./src/client/auth/providers/jwt-auth-provider.ts","./src/client/config/index.ts","./src/client/config/loader.ts","./src/client/config/node.ts","./src/client/config/schemas.ts","./src/client/config/types.ts","./src/client/config/unified-loader.ts","./src/dsl/client.ts","./src/dsl/create-client.ts","./src/dsl/fluent-query-builder.ts","./src/dsl/index.ts","./src/dsl/pagination.ts","./src/dsl/query-builder.ts","./src/dsl/response-parser.ts","./src/dsl/usage-policy.ts","./src/dsl/commands/apply-filters.ts","./src/dsl/commands/index.ts","./src/dsl/commands/validate-input.ts","./src/dsl/commands/facet/index.ts","./src/dsl/commands/facet/schemas.ts","./src/dsl/commands/functions/ClassifyCommand.ts","./src/dsl/commands/functions/ExtractAffiliationsCommand.ts","./src/dsl/commands/functions/ExtractConceptsCommand.ts","./src/dsl/commands/functions/ExtractGrantsCommand.ts","./src/dsl/commands/functions/index.ts","./src/dsl/schema/cache.ts","./src/dsl/schema/extract.ts","./src/dsl/schema/index.ts","./src/dsl/schema/load.ts","./src/dsl/schema/store.ts","./src/dsl/schema/structured-entities.ts","./src/dsl/schema/summary.ts","./src/dsl/schema/types.ts","./src/dsl/schema/validation.ts","./src/dsl/types/buckets.ts","./src/dsl/types/common.ts","./src/dsl/types/entities.ts","./src/dsl/types/index.ts","./src/dsl/types/return-clauses.ts","./src/dsl/types/special-functions.ts","./src/dsl/types/vocabulary.ts","./src/dsl/utils/escape.ts","./src/dsl/utils/sanitize.ts","./src/dsl/utils/string-utils.ts","./src/dsl/utils/validate-field-name.ts","./src/mcp/batch-fetch.ts","./src/mcp/export-format.ts","./src/mcp/funder-org-names.ts","./src/mcp/http-server.ts","./src/mcp/server.ts","./src/mcp/shared-schema.ts","./src/mcp/utils.ts","./src/mcp/examples/dsl-examples.ts","./src/mcp/examples/usage-scenarios.ts","./src/mcp/middleware/field-aliases.ts","./src/mcp/resources/schema.ts","./src/mcp/schema/context.ts","./src/mcp/schema/index.ts","./src/mcp/tools/analytics-filters.ts","./src/mcp/tools/analytics.ts","./src/mcp/tools/fetch-search-pages.ts","./src/mcp/tools/functions.ts","./src/mcp/tools/lookup.ts","./src/mcp/tools/query.ts","./src/mcp/tools/schema.ts","./src/mcp/tools/search-entity-metadata.ts","./src/mcp/tools/search-input.ts","./src/mcp/tools/search.ts"],"version":"5.9.3"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Curated DSL examples for MCP resources (from public Dimensions DSL documentation patterns).
|
|
3
|
-
* @module examples/dsl-examples
|
|
4
|
-
*/
|
|
5
|
-
/** Example queries keyed by entity type. */
|
|
6
|
-
export declare const DSL_EXAMPLES_BY_ENTITY: Record<string, readonly string[]>;
|
|
7
|
-
/** General DSL patterns (describe, functions, pagination). */
|
|
8
|
-
export declare const DSL_GENERAL_EXAMPLES: readonly ["describe version", "describe schema", "describe source publications", "extract_concepts(text: \"CRISPR gene editing enables precise DNA modification\")", "classify(text: \"Stem cell therapy for diabetes\", system: \"for\")"];
|
|
9
|
-
/** Link to official DSL documentation. */
|
|
10
|
-
export declare const DSL_DOCUMENTATION_URL = "https://docs.dimensions.ai/dsl/";
|
|
11
|
-
//# sourceMappingURL=dsl-examples.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dsl-examples.d.ts","sourceRoot":"","sources":["../../src/examples/dsl-examples.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAgCpE,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,oBAAoB,6OAMvB,CAAC;AAEX,0CAA0C;AAC1C,eAAO,MAAM,qBAAqB,oCAAoC,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Curated DSL examples for MCP resources (from public Dimensions DSL documentation patterns).
|
|
3
|
-
* @module examples/dsl-examples
|
|
4
|
-
*/
|
|
5
|
-
/** Example queries keyed by entity type. */
|
|
6
|
-
export const DSL_EXAMPLES_BY_ENTITY = {
|
|
7
|
-
publications: [
|
|
8
|
-
'search publications for "machine learning" return publications[id+title+doi] limit 10',
|
|
9
|
-
'search publications for "CRISPR" where year >= 2020 return publications[id+title+times_cited+year] sort by times_cited desc limit 25',
|
|
10
|
-
'search publications in title_only for "gene therapy" return publications[basics] limit 10',
|
|
11
|
-
"search publications return publications facet journal limit 20",
|
|
12
|
-
],
|
|
13
|
-
grants: [
|
|
14
|
-
'search grants for "cancer immunotherapy" return grants limit 10',
|
|
15
|
-
'search grants where funder_org_name = "National Institutes of Health" return grants[basics] limit 10',
|
|
16
|
-
"search grants return grants aggregate funding_usd",
|
|
17
|
-
],
|
|
18
|
-
patents: [
|
|
19
|
-
'search patents for "lithium battery" return patents limit 10',
|
|
20
|
-
"search patents where year >= 2018 return patents[id+title] limit 20",
|
|
21
|
-
],
|
|
22
|
-
clinical_trials: [
|
|
23
|
-
'search clinical_trials for "diabetes" return clinical_trials limit 10',
|
|
24
|
-
'search clinical_trials where phase = "Phase 3" return clinical_trials limit 10',
|
|
25
|
-
],
|
|
26
|
-
datasets: ['search datasets for "climate model" return datasets limit 10'],
|
|
27
|
-
policy_documents: [
|
|
28
|
-
'search policy_documents for "renewable energy" return policy_documents limit 10',
|
|
29
|
-
],
|
|
30
|
-
researchers: [
|
|
31
|
-
'search researchers where last_name = "Smith" return researchers limit 10',
|
|
32
|
-
"search researchers where total_publications > 100 return researchers limit 10",
|
|
33
|
-
],
|
|
34
|
-
organizations: [
|
|
35
|
-
'search organizations for "Stanford" return organizations limit 10',
|
|
36
|
-
'search organizations where country = "United States" return organizations limit 10',
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
|
-
/** General DSL patterns (describe, functions, pagination). */
|
|
40
|
-
export const DSL_GENERAL_EXAMPLES = [
|
|
41
|
-
"describe version",
|
|
42
|
-
"describe schema",
|
|
43
|
-
"describe source publications",
|
|
44
|
-
'extract_concepts(text: "CRISPR gene editing enables precise DNA modification")',
|
|
45
|
-
'classify(text: "Stem cell therapy for diabetes", system: "for")',
|
|
46
|
-
];
|
|
47
|
-
/** Link to official DSL documentation. */
|
|
48
|
-
export const DSL_DOCUMENTATION_URL = "https://docs.dimensions.ai/dsl/";
|
|
49
|
-
//# sourceMappingURL=dsl-examples.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dsl-examples.js","sourceRoot":"","sources":["../../src/examples/dsl-examples.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAsC;IACvE,YAAY,EAAE;QACZ,uFAAuF;QACvF,sIAAsI;QACtI,2FAA2F;QAC3F,gEAAgE;KACjE;IACD,MAAM,EAAE;QACN,iEAAiE;QACjE,sGAAsG;QACtG,mDAAmD;KACpD;IACD,OAAO,EAAE;QACP,8DAA8D;QAC9D,qEAAqE;KACtE;IACD,eAAe,EAAE;QACf,uEAAuE;QACvE,gFAAgF;KACjF;IACD,QAAQ,EAAE,CAAC,8DAA8D,CAAC;IAC1E,gBAAgB,EAAE;QAChB,iFAAiF;KAClF;IACD,WAAW,EAAE;QACX,0EAA0E;QAC1E,+EAA+E;KAChF;IACD,aAAa,EAAE;QACb,mEAAmE;QACnE,oFAAoF;KACrF;CACF,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kBAAkB;IAClB,iBAAiB;IACjB,8BAA8B;IAC9B,gFAAgF;IAChF,iEAAiE;CACzD,CAAC;AAEX,0CAA0C;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,iCAAiC,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool routing for natural-language prompts in docs/USAGE.md.
|
|
3
|
-
* @module examples/usage-scenarios
|
|
4
|
-
*/
|
|
5
|
-
export interface UsageScenario {
|
|
6
|
-
/** Stable id for tests */
|
|
7
|
-
id: string;
|
|
8
|
-
/** Short goal label (matches USAGE table) */
|
|
9
|
-
goal: string;
|
|
10
|
-
/** Example user prompt */
|
|
11
|
-
prompt: string;
|
|
12
|
-
/** Structured MCP tool agents should call */
|
|
13
|
-
tool: string;
|
|
14
|
-
/** Tool arguments (validated in usage-scenarios.test.ts) */
|
|
15
|
-
args: Record<string, unknown>;
|
|
16
|
-
/** Substrings expected in DSL passed to rawQuery (when applicable) */
|
|
17
|
-
dslContains?: string[];
|
|
18
|
-
/** Substrings expected in build_query DSL output */
|
|
19
|
-
buildDslContains?: string[];
|
|
20
|
-
}
|
|
21
|
-
export declare const USAGE_SCENARIOS: readonly UsageScenario[];
|
|
22
|
-
//# sourceMappingURL=usage-scenarios.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-scenarios.d.ts","sourceRoot":"","sources":["../../src/examples/usage-scenarios.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAwK1C,CAAC"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool routing for natural-language prompts in docs/USAGE.md.
|
|
3
|
-
* @module examples/usage-scenarios
|
|
4
|
-
*/
|
|
5
|
-
export const USAGE_SCENARIOS = [
|
|
6
|
-
{
|
|
7
|
-
id: "top-publications",
|
|
8
|
-
goal: "Top papers on a topic",
|
|
9
|
-
prompt: "Find the 20 most-cited publications on CRISPR gene editing since 2020.",
|
|
10
|
-
tool: "search_publications",
|
|
11
|
-
args: {
|
|
12
|
-
query: "CRISPR gene editing",
|
|
13
|
-
yearFrom: 2020,
|
|
14
|
-
sortBy: "total_citations",
|
|
15
|
-
limit: 20,
|
|
16
|
-
fields: ["id", "title", "doi", "year", "total_citations"],
|
|
17
|
-
},
|
|
18
|
-
dslContains: [
|
|
19
|
-
"search publications",
|
|
20
|
-
"CRISPR gene editing",
|
|
21
|
-
"year >= 2020",
|
|
22
|
-
"sort by times_cited desc",
|
|
23
|
-
"limit 20",
|
|
24
|
-
],
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
id: "nih-grants",
|
|
28
|
-
goal: "Grants from a funder",
|
|
29
|
-
prompt: "Search NIH grants about cancer immunotherapy started after 2020, limit 25.",
|
|
30
|
-
tool: "search_grants",
|
|
31
|
-
args: {
|
|
32
|
-
query: "cancer immunotherapy",
|
|
33
|
-
startYearFrom: 2020,
|
|
34
|
-
funderOrgName: "National Cancer Institute",
|
|
35
|
-
limit: 25,
|
|
36
|
-
fields: ["id", "title", "funding_usd", "funder_name", "start_year"],
|
|
37
|
-
},
|
|
38
|
-
dslContains: [
|
|
39
|
-
"search grants",
|
|
40
|
-
"cancer immunotherapy",
|
|
41
|
-
"start_year >= 2020",
|
|
42
|
-
'funder_org_name = "National Cancer Institute"',
|
|
43
|
-
"limit 25",
|
|
44
|
-
],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: "researchers-by-topic",
|
|
48
|
-
goal: "Who works on a topic",
|
|
49
|
-
prompt: "Who are the top researchers working on quantum computing?",
|
|
50
|
-
tool: "facet_query",
|
|
51
|
-
args: {
|
|
52
|
-
entityType: "publications",
|
|
53
|
-
facetField: "researchers",
|
|
54
|
-
query: "quantum computing",
|
|
55
|
-
limit: 10,
|
|
56
|
-
},
|
|
57
|
-
dslContains: ["search publications", "quantum computing", "return researchers"],
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
id: "researchers-by-name",
|
|
61
|
-
goal: "Find researchers by name",
|
|
62
|
-
prompt: "Search researchers named Jennifer Doudna, sort by publication count.",
|
|
63
|
-
tool: "search_researchers",
|
|
64
|
-
args: {
|
|
65
|
-
query: "Jennifer Doudna",
|
|
66
|
-
sortBy: "total_publications",
|
|
67
|
-
limit: 10,
|
|
68
|
-
fields: ["id", "first_name", "last_name", "total_publications"],
|
|
69
|
-
},
|
|
70
|
-
dslContains: ["search researchers", "Jennifer Doudna", "sort by total_publications"],
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
id: "doi-lookup",
|
|
74
|
-
goal: "Known paper",
|
|
75
|
-
prompt: "Look up DOI 10.1038/nature12373 and show title, citations, and journal.",
|
|
76
|
-
tool: "get_by_doi",
|
|
77
|
-
args: {
|
|
78
|
-
doi: "10.1038/nature12373",
|
|
79
|
-
fields: ["id", "title", "times_cited", "journal"],
|
|
80
|
-
},
|
|
81
|
-
dslContains: ["10.1038/nature12373"],
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
id: "author-profile",
|
|
85
|
-
goal: "Researcher deep-dive",
|
|
86
|
-
prompt: "Get an author profile for Jennifer Doudna with recent publications.",
|
|
87
|
-
tool: "author_profile",
|
|
88
|
-
args: {
|
|
89
|
-
name: "Jennifer Doudna",
|
|
90
|
-
includePublications: true,
|
|
91
|
-
publicationLimit: 10,
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
id: "org-profile",
|
|
96
|
-
goal: "Institution",
|
|
97
|
-
prompt: "Profile Stanford University — publications and grants.",
|
|
98
|
-
tool: "org_profile",
|
|
99
|
-
args: {
|
|
100
|
-
organizationId: "grid.168010.e",
|
|
101
|
-
name: "Stanford University",
|
|
102
|
-
includePublications: true,
|
|
103
|
-
includeGrants: true,
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
id: "facet-journals-since-year",
|
|
108
|
-
goal: "Topic breakdown",
|
|
109
|
-
prompt: "Which journals publish the most machine learning research since 2020?",
|
|
110
|
-
tool: "facet_query",
|
|
111
|
-
args: {
|
|
112
|
-
entityType: "publications",
|
|
113
|
-
facetField: "journal",
|
|
114
|
-
query: "machine learning",
|
|
115
|
-
yearFrom: 2020,
|
|
116
|
-
limit: 20,
|
|
117
|
-
},
|
|
118
|
-
dslContains: ["machine learning", "year >= 2020", "return journal"],
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
id: "funding-leaders",
|
|
122
|
-
goal: "Funding leaders",
|
|
123
|
-
prompt: "Which funders have the most grant funding on climate adaptation?",
|
|
124
|
-
tool: "aggregate_query",
|
|
125
|
-
args: {
|
|
126
|
-
entityType: "grants",
|
|
127
|
-
facetField: "funder_orgs",
|
|
128
|
-
indicators: ["funding"],
|
|
129
|
-
query: "climate adaptation",
|
|
130
|
-
sortBy: "funding",
|
|
131
|
-
sortOrder: "desc",
|
|
132
|
-
limit: 10,
|
|
133
|
-
},
|
|
134
|
-
dslContains: ["search grants", "climate adaptation", "return funder_orgs aggregate funding"],
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: "citation-trend",
|
|
138
|
-
goal: "Citations over time",
|
|
139
|
-
prompt: "Citation trend for large language model publications from 2018 to 2024.",
|
|
140
|
-
tool: "citation_trend",
|
|
141
|
-
args: {
|
|
142
|
-
query: "large language model",
|
|
143
|
-
startYear: 2018,
|
|
144
|
-
endYear: 2024,
|
|
145
|
-
},
|
|
146
|
-
dslContains: ["large language model", "citations_per_year(2018, 2024)"],
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
id: "build-complex-query",
|
|
150
|
-
goal: "Build a complex query",
|
|
151
|
-
prompt: "Build a DSL query for publications: include CRISPR or gene editing, exclude animal models, year ≥ 2020.",
|
|
152
|
-
tool: "build_query",
|
|
153
|
-
args: {
|
|
154
|
-
entity: "publications",
|
|
155
|
-
concept_groups: [
|
|
156
|
-
{ terms: ["CRISPR", "gene editing"], role: "include" },
|
|
157
|
-
{ terms: ["animal model", "animal models"], role: "exclude" },
|
|
158
|
-
],
|
|
159
|
-
filters: [{ field: "year", op: ">=", value: 2020 }],
|
|
160
|
-
fields: ["id", "title", "doi", "times_cited"],
|
|
161
|
-
limit: 20,
|
|
162
|
-
},
|
|
163
|
-
buildDslContains: [
|
|
164
|
-
"search publications",
|
|
165
|
-
"CRISPR",
|
|
166
|
-
"gene editing",
|
|
167
|
-
"animal model",
|
|
168
|
-
"year >= 2020",
|
|
169
|
-
"limit 20",
|
|
170
|
-
],
|
|
171
|
-
},
|
|
172
|
-
];
|
|
173
|
-
//# sourceMappingURL=usage-scenarios.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-scenarios.js","sourceRoot":"","sources":["../../src/examples/usage-scenarios.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolves common funder acronyms and aliases to Dimensions funder_org_name values.
|
|
3
|
-
* @module funder-org-names
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Resolves a funder organization name or acronym to the canonical Dimensions value.
|
|
7
|
-
* Unknown names pass through unchanged.
|
|
8
|
-
* @param input - Funder name or acronym from tool arguments
|
|
9
|
-
* @returns Canonical Dimensions funder_org_name
|
|
10
|
-
*/
|
|
11
|
-
export declare function resolveFunderOrgName(input: string): string;
|
|
12
|
-
//# sourceMappingURL=funder-org-names.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"funder-org-names.d.ts","sourceRoot":"","sources":["../src/funder-org-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D"}
|
package/dist/funder-org-names.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolves common funder acronyms and aliases to Dimensions funder_org_name values.
|
|
3
|
-
* @module funder-org-names
|
|
4
|
-
*/
|
|
5
|
-
/** Case-insensitive acronym / alias → exact Dimensions funder_org_name */
|
|
6
|
-
const FUNDER_ORG_ALIASES = {
|
|
7
|
-
nih: "National Institutes of Health",
|
|
8
|
-
nci: "National Cancer Institute",
|
|
9
|
-
nsf: "National Science Foundation",
|
|
10
|
-
neh: "National Endowment for the Humanities",
|
|
11
|
-
cdc: "Centers for Disease Control and Prevention",
|
|
12
|
-
dod: "Department of Defense",
|
|
13
|
-
usaid: "United States Agency for International Development",
|
|
14
|
-
"national institutes of health": "National Institutes of Health",
|
|
15
|
-
"national cancer institute": "National Cancer Institute",
|
|
16
|
-
"national science foundation": "National Science Foundation",
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Resolves a funder organization name or acronym to the canonical Dimensions value.
|
|
20
|
-
* Unknown names pass through unchanged.
|
|
21
|
-
* @param input - Funder name or acronym from tool arguments
|
|
22
|
-
* @returns Canonical Dimensions funder_org_name
|
|
23
|
-
*/
|
|
24
|
-
export function resolveFunderOrgName(input) {
|
|
25
|
-
const trimmed = input.trim();
|
|
26
|
-
if (!trimmed)
|
|
27
|
-
return trimmed;
|
|
28
|
-
return FUNDER_ORG_ALIASES[trimmed.toLowerCase()] ?? trimmed;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=funder-org-names.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"funder-org-names.js","sourceRoot":"","sources":["../src/funder-org-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0EAA0E;AAC1E,MAAM,kBAAkB,GAAqC;IAC3D,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,2BAA2B;IAChC,GAAG,EAAE,6BAA6B;IAClC,GAAG,EAAE,uCAAuC;IAC5C,GAAG,EAAE,4CAA4C;IACjD,GAAG,EAAE,uBAAuB;IAC5B,KAAK,EAAE,oDAAoD;IAC3D,+BAA+B,EAAE,+BAA+B;IAChE,2BAA2B,EAAE,2BAA2B;IACxD,6BAA6B,EAAE,6BAA6B;CAC7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,OAAO,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC;AAC9D,CAAC"}
|
package/dist/http.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP entry point for the Dimensions MCP server.
|
|
3
|
-
*
|
|
4
|
-
* Callers authenticate with their Dimensions API key — the same credential
|
|
5
|
-
* used for DSL API requests. Pass it on each `/mcp` POST as:
|
|
6
|
-
*
|
|
7
|
-
* - `Authorization: Bearer <dimensions-api-key>`, or
|
|
8
|
-
* - `X-Dimensions-Api-Key: <dimensions-api-key>`
|
|
9
|
-
*
|
|
10
|
-
* The server exchanges the key for a JWT via Dimensions `auth.json` and
|
|
11
|
-
* forwards queries upstream; keys are not stored server-side.
|
|
12
|
-
* @module mcp/http
|
|
13
|
-
*/
|
|
14
|
-
import { Hono } from "hono";
|
|
15
|
-
/**
|
|
16
|
-
* Extracts a Dimensions API key from request headers.
|
|
17
|
-
* @param authorization - Raw Authorization header value
|
|
18
|
-
* @param dimensionsApiKey - Raw X-Dimensions-Api-Key header value
|
|
19
|
-
* @returns API key or null when missing
|
|
20
|
-
*/
|
|
21
|
-
export declare function extractDimensionsApiKey(authorization: string | undefined, dimensionsApiKey: string | undefined): string | null;
|
|
22
|
-
/**
|
|
23
|
-
* Derives a stable, non-reversible telemetry distinct id from an API key.
|
|
24
|
-
* @param apiKey - Dimensions API key
|
|
25
|
-
* @returns Hex prefix of SHA-256 hash
|
|
26
|
-
*/
|
|
27
|
-
export declare function telemetryDistinctId(apiKey: string): string;
|
|
28
|
-
export declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
29
|
-
//# sourceMappingURL=http.d.ts.map
|
package/dist/http.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgB5B;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,MAAM,GAAG,IAAI,CASf;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAMD,eAAO,MAAM,GAAG,4EAAa,CAAC"}
|