@mastra/playground-ui 38.1.0-alpha.4 → 39.0.0-alpha.5
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 +11 -0
- package/dist/ee/signals/hooks/use-entity-learning-config.cjs.js +11 -3
- package/dist/ee/signals/hooks/use-entity-learning-config.cjs.js.map +1 -1
- package/dist/ee/signals/hooks/use-entity-learning-config.es.js +11 -3
- package/dist/ee/signals/hooks/use-entity-learning-config.es.js.map +1 -1
- package/dist/ee/signals/services/entity-learning-service.cjs.js +5 -8
- package/dist/ee/signals/services/entity-learning-service.cjs.js.map +1 -1
- package/dist/ee/signals/services/entity-learning-service.es.js +5 -8
- package/dist/ee/signals/services/entity-learning-service.es.js.map +1 -1
- package/dist/src/ee/signals/services/entity-learning-service.d.ts +14 -4
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 39.0.0-alpha.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fix the Signals (Agent Learning) client to call the platform query service's session-authenticated `/api/learning/*` routes instead of the internal `/entity-learning/*` output-service contract. The client now derives the query-service origin from the injected observability endpoint, sends the WorkOS session cookie via `credentials: 'include'`, and scopes reads with the `X-Mastra-Project-Id` header — matching the existing `/api/observability/*` auth pattern. Previously the Signals UI called an internal-only endpoint with no credentials, which 404'd on every hosted and local deployment. ([#18852](https://github.com/mastra-ai/mastra/pull/18852))
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`9250acd`](https://github.com/mastra-ai/mastra/commit/9250acd1357f0f1f33d0dcca16f9655084c58eca), [`215f9b0`](https://github.com/mastra-ai/mastra/commit/215f9b0f3f3f6fc165edad360582dd4d3d7ea748), [`c64c2a8`](https://github.com/mastra-ai/mastra/commit/c64c2a8503a50252f9ca6b8e8c54cadee31b92a2), [`06e2680`](https://github.com/mastra-ai/mastra/commit/06e26806b51d2cbd858afdc66daa2b86ff3ba64a), [`1240f05`](https://github.com/mastra-ai/mastra/commit/1240f051c8e5371f1c014448bf37b1a1b9a05e47), [`215f9b0`](https://github.com/mastra-ai/mastra/commit/215f9b0f3f3f6fc165edad360582dd4d3d7ea748), [`24c10d3`](https://github.com/mastra-ai/mastra/commit/24c10d333e6649ac06075903aeeee13a933db3b3), [`24c10d3`](https://github.com/mastra-ai/mastra/commit/24c10d333e6649ac06075903aeeee13a933db3b3), [`24c10d3`](https://github.com/mastra-ai/mastra/commit/24c10d333e6649ac06075903aeeee13a933db3b3), [`24c10d3`](https://github.com/mastra-ai/mastra/commit/24c10d333e6649ac06075903aeeee13a933db3b3), [`215f9b0`](https://github.com/mastra-ai/mastra/commit/215f9b0f3f3f6fc165edad360582dd4d3d7ea748), [`215f9b0`](https://github.com/mastra-ai/mastra/commit/215f9b0f3f3f6fc165edad360582dd4d3d7ea748)]:
|
|
10
|
+
- @mastra/core@1.49.0-alpha.5
|
|
11
|
+
- @mastra/client-js@1.30.0-alpha.5
|
|
12
|
+
- @mastra/react@1.2.2-alpha.5
|
|
13
|
+
|
|
3
14
|
## 38.1.0-alpha.4
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
|
@@ -5,15 +5,23 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const React = require('react');
|
|
6
6
|
const ee_signals_services_entityLearningService = require('../services/entity-learning-service.cjs.js');
|
|
7
7
|
|
|
8
|
+
function toQueryServiceOrigin(endpoint) {
|
|
9
|
+
try {
|
|
10
|
+
return new URL(endpoint).origin;
|
|
11
|
+
} catch {
|
|
12
|
+
return endpoint;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
8
15
|
function useEntityLearningConfig() {
|
|
9
16
|
const w = typeof window === "undefined" ? void 0 : window;
|
|
10
|
-
const
|
|
17
|
+
const observabilityEndpoint = w?.MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT || void 0;
|
|
18
|
+
const baseUrl = observabilityEndpoint ? toQueryServiceOrigin(observabilityEndpoint) : void 0;
|
|
11
19
|
const organizationId = w?.MASTRA_ORGANIZATION_ID || void 0;
|
|
12
20
|
const projectId = w?.MASTRA_PLATFORM_PROJECT_ID || void 0;
|
|
13
21
|
const service = React.useMemo(() => {
|
|
14
22
|
if (!baseUrl) return null;
|
|
15
|
-
return ee_signals_services_entityLearningService.createEntityLearningService({ baseUrl,
|
|
16
|
-
}, [baseUrl,
|
|
23
|
+
return ee_signals_services_entityLearningService.createEntityLearningService({ baseUrl, projectId });
|
|
24
|
+
}, [baseUrl, projectId]);
|
|
17
25
|
return {
|
|
18
26
|
baseUrl,
|
|
19
27
|
organizationId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-entity-learning-config.cjs.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning-config.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { createEntityLearningService } from '../services';\nimport type { EntityLearningService } from '../services';\n\ntype EntityLearningWindow = Window &\n typeof globalThis & {\n MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT?: string;\n MASTRA_ORGANIZATION_ID?: string;\n MASTRA_PLATFORM_PROJECT_ID?: string;\n };\n\nexport type EntityLearningConfig = {\n baseUrl?: string;\n organizationId?: string;\n projectId?: string;\n isConfigured: boolean;\n service: EntityLearningService | null;\n};\n\n/**\n * Reads the server-injected platform observability config from `window` and\n * memoizes a configured Entity-Learning service. Returns `service: null` when\n * the observability endpoint is not configured, so callers can gate queries.\n */\nexport function useEntityLearningConfig(): EntityLearningConfig {\n const w = typeof window === 'undefined' ? undefined : (window as EntityLearningWindow);\n const
|
|
1
|
+
{"version":3,"file":"use-entity-learning-config.cjs.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning-config.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { createEntityLearningService } from '../services';\nimport type { EntityLearningService } from '../services';\n\ntype EntityLearningWindow = Window &\n typeof globalThis & {\n MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT?: string;\n MASTRA_ORGANIZATION_ID?: string;\n MASTRA_PLATFORM_PROJECT_ID?: string;\n };\n\nexport type EntityLearningConfig = {\n baseUrl?: string;\n organizationId?: string;\n projectId?: string;\n isConfigured: boolean;\n service: EntityLearningService | null;\n};\n\n/**\n * The injected observability endpoint is the trace-ingest URL (e.g.\n * `https://observability.mastra.ai/v1/traces`). Agent Learning lives on the\n * same origin under `/api/learning`, so strip the path down to the origin.\n * Falls back to the raw value when it isn't an absolute URL (e.g. tests or\n * proxy-relative setups).\n */\nfunction toQueryServiceOrigin(endpoint: string): string {\n try {\n return new URL(endpoint).origin;\n } catch {\n return endpoint;\n }\n}\n\n/**\n * Reads the server-injected platform observability config from `window` and\n * memoizes a configured Entity-Learning service. Returns `service: null` when\n * the observability endpoint is not configured, so callers can gate queries.\n */\nexport function useEntityLearningConfig(): EntityLearningConfig {\n const w = typeof window === 'undefined' ? undefined : (window as EntityLearningWindow);\n const observabilityEndpoint = w?.MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT || undefined;\n const baseUrl = observabilityEndpoint ? toQueryServiceOrigin(observabilityEndpoint) : undefined;\n const organizationId = w?.MASTRA_ORGANIZATION_ID || undefined;\n const projectId = w?.MASTRA_PLATFORM_PROJECT_ID || undefined;\n\n const service = useMemo(() => {\n if (!baseUrl) return null;\n return createEntityLearningService({ baseUrl, projectId });\n }, [baseUrl, projectId]);\n\n return {\n baseUrl,\n organizationId,\n projectId,\n isConfigured: Boolean(baseUrl),\n service,\n };\n}\n"],"names":["useMemo","createEntityLearningService"],"mappings":";;;;;;;AA0BA,SAAS,qBAAqB,QAAA,EAA0B;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAI,QAAQ,CAAA,CAAE,MAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAOO,SAAS,uBAAA,GAAgD;AAC9D,EAAA,MAAM,CAAA,GAAI,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,GAAa,MAAA;AACvD,EAAA,MAAM,qBAAA,GAAwB,GAAG,sCAAA,IAA0C,MAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,qBAAA,GAAwB,oBAAA,CAAqB,qBAAqB,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,cAAA,GAAiB,GAAG,sBAAA,IAA0B,MAAA;AACpD,EAAA,MAAM,SAAA,GAAY,GAAG,0BAAA,IAA8B,MAAA;AAEnD,EAAA,MAAM,OAAA,GAAUA,cAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAOC,qEAAA,CAA4B,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,EAAc,QAAQ,OAAO,CAAA;AAAA,IAC7B;AAAA,GACF;AACF;;;;"}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
import { createEntityLearningService } from '../services/entity-learning-service.es.js';
|
|
3
3
|
|
|
4
|
+
function toQueryServiceOrigin(endpoint) {
|
|
5
|
+
try {
|
|
6
|
+
return new URL(endpoint).origin;
|
|
7
|
+
} catch {
|
|
8
|
+
return endpoint;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
4
11
|
function useEntityLearningConfig() {
|
|
5
12
|
const w = typeof window === "undefined" ? void 0 : window;
|
|
6
|
-
const
|
|
13
|
+
const observabilityEndpoint = w?.MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT || void 0;
|
|
14
|
+
const baseUrl = observabilityEndpoint ? toQueryServiceOrigin(observabilityEndpoint) : void 0;
|
|
7
15
|
const organizationId = w?.MASTRA_ORGANIZATION_ID || void 0;
|
|
8
16
|
const projectId = w?.MASTRA_PLATFORM_PROJECT_ID || void 0;
|
|
9
17
|
const service = useMemo(() => {
|
|
10
18
|
if (!baseUrl) return null;
|
|
11
|
-
return createEntityLearningService({ baseUrl,
|
|
12
|
-
}, [baseUrl,
|
|
19
|
+
return createEntityLearningService({ baseUrl, projectId });
|
|
20
|
+
}, [baseUrl, projectId]);
|
|
13
21
|
return {
|
|
14
22
|
baseUrl,
|
|
15
23
|
organizationId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-entity-learning-config.es.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning-config.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { createEntityLearningService } from '../services';\nimport type { EntityLearningService } from '../services';\n\ntype EntityLearningWindow = Window &\n typeof globalThis & {\n MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT?: string;\n MASTRA_ORGANIZATION_ID?: string;\n MASTRA_PLATFORM_PROJECT_ID?: string;\n };\n\nexport type EntityLearningConfig = {\n baseUrl?: string;\n organizationId?: string;\n projectId?: string;\n isConfigured: boolean;\n service: EntityLearningService | null;\n};\n\n/**\n * Reads the server-injected platform observability config from `window` and\n * memoizes a configured Entity-Learning service. Returns `service: null` when\n * the observability endpoint is not configured, so callers can gate queries.\n */\nexport function useEntityLearningConfig(): EntityLearningConfig {\n const w = typeof window === 'undefined' ? undefined : (window as EntityLearningWindow);\n const
|
|
1
|
+
{"version":3,"file":"use-entity-learning-config.es.js","sources":["../../../../src/ee/signals/hooks/use-entity-learning-config.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { createEntityLearningService } from '../services';\nimport type { EntityLearningService } from '../services';\n\ntype EntityLearningWindow = Window &\n typeof globalThis & {\n MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT?: string;\n MASTRA_ORGANIZATION_ID?: string;\n MASTRA_PLATFORM_PROJECT_ID?: string;\n };\n\nexport type EntityLearningConfig = {\n baseUrl?: string;\n organizationId?: string;\n projectId?: string;\n isConfigured: boolean;\n service: EntityLearningService | null;\n};\n\n/**\n * The injected observability endpoint is the trace-ingest URL (e.g.\n * `https://observability.mastra.ai/v1/traces`). Agent Learning lives on the\n * same origin under `/api/learning`, so strip the path down to the origin.\n * Falls back to the raw value when it isn't an absolute URL (e.g. tests or\n * proxy-relative setups).\n */\nfunction toQueryServiceOrigin(endpoint: string): string {\n try {\n return new URL(endpoint).origin;\n } catch {\n return endpoint;\n }\n}\n\n/**\n * Reads the server-injected platform observability config from `window` and\n * memoizes a configured Entity-Learning service. Returns `service: null` when\n * the observability endpoint is not configured, so callers can gate queries.\n */\nexport function useEntityLearningConfig(): EntityLearningConfig {\n const w = typeof window === 'undefined' ? undefined : (window as EntityLearningWindow);\n const observabilityEndpoint = w?.MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT || undefined;\n const baseUrl = observabilityEndpoint ? toQueryServiceOrigin(observabilityEndpoint) : undefined;\n const organizationId = w?.MASTRA_ORGANIZATION_ID || undefined;\n const projectId = w?.MASTRA_PLATFORM_PROJECT_ID || undefined;\n\n const service = useMemo(() => {\n if (!baseUrl) return null;\n return createEntityLearningService({ baseUrl, projectId });\n }, [baseUrl, projectId]);\n\n return {\n baseUrl,\n organizationId,\n projectId,\n isConfigured: Boolean(baseUrl),\n service,\n };\n}\n"],"names":[],"mappings":";;;AA0BA,SAAS,qBAAqB,QAAA,EAA0B;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAI,QAAQ,CAAA,CAAE,MAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAOO,SAAS,uBAAA,GAAgD;AAC9D,EAAA,MAAM,CAAA,GAAI,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,GAAa,MAAA;AACvD,EAAA,MAAM,qBAAA,GAAwB,GAAG,sCAAA,IAA0C,MAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,qBAAA,GAAwB,oBAAA,CAAqB,qBAAqB,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,cAAA,GAAiB,GAAG,sBAAA,IAA0B,MAAA;AACpD,EAAA,MAAM,SAAA,GAAY,GAAG,0BAAA,IAA8B,MAAA;AAEnD,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAO,2BAAA,CAA4B,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,EAAc,QAAQ,OAAO,CAAA;AAAA,IAC7B;AAAA,GACF;AACF;;;;"}
|
|
@@ -4,15 +4,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const trimTrailingSlash = (value) => value.replace(/\/+$/, "");
|
|
6
6
|
function createEntityLearningService(config) {
|
|
7
|
-
const root = `${trimTrailingSlash(config.baseUrl)}/
|
|
7
|
+
const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;
|
|
8
8
|
const buildUrl = (path, params) => {
|
|
9
9
|
const url = new URL(`${root}${path}`);
|
|
10
|
-
if (config.organizationId) {
|
|
11
|
-
url.searchParams.set("organizationId", config.organizationId);
|
|
12
|
-
}
|
|
13
|
-
if (config.projectId) {
|
|
14
|
-
url.searchParams.set("projectId", config.projectId);
|
|
15
|
-
}
|
|
16
10
|
if (params) {
|
|
17
11
|
for (const [key, value] of Object.entries(params)) {
|
|
18
12
|
if (value !== void 0) {
|
|
@@ -23,7 +17,10 @@ function createEntityLearningService(config) {
|
|
|
23
17
|
return url.toString();
|
|
24
18
|
};
|
|
25
19
|
async function getJson(url) {
|
|
26
|
-
const res = await fetch(url
|
|
20
|
+
const res = await fetch(url, {
|
|
21
|
+
credentials: "include",
|
|
22
|
+
headers: config.projectId ? { "X-Mastra-Project-Id": config.projectId } : void 0
|
|
23
|
+
});
|
|
27
24
|
if (!res.ok) {
|
|
28
25
|
throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);
|
|
29
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-learning-service.cjs.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningPointsResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n
|
|
1
|
+
{"version":3,"file":"entity-learning-service.cjs.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningPointsResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n /**\n * Platform observability query-service origin (mobs-query), e.g.\n * `https://observability.mastra.ai`. Agent Learning routes are served\n * session-authenticated under `/api/learning` on this origin — the same\n * origin and auth model as the `/api/observability/*` routes.\n */\n baseUrl: string;\n projectId?: string;\n};\n\nexport type EntityLearningTopicExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningPointsParams = {\n signalName: string;\n runId: string;\n includeOutliers?: boolean;\n limit?: number;\n};\n\nexport type EntityLearningOutlierExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningService = ReturnType<typeof createEntityLearningService>;\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, '');\n\n/**\n * Network layer for the platform Agent Learning API served by the\n * observability query service (mobs-query) under `/api/learning`.\n *\n * Auth follows the observability pattern: the WorkOS session cookie is sent\n * via `credentials: 'include'`, and the org/project scope is resolved\n * server-side from the session. `projectId` is passed as the\n * `X-Mastra-Project-Id` header so the server scopes reads to that project;\n * caller-supplied scope can never widen access beyond the session.\n */\nexport function createEntityLearningService(config: EntityLearningServiceConfig) {\n const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;\n\n const buildUrl = (path: string, params?: Record<string, string | number | boolean | undefined>) => {\n const url = new URL(`${root}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n };\n\n async function getJson<T>(url: string): Promise<T> {\n const res = await fetch(url, {\n credentials: 'include',\n headers: config.projectId ? { 'X-Mastra-Project-Id': config.projectId } : undefined,\n });\n if (!res.ok) {\n throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);\n }\n return (await res.json()) as T;\n }\n\n const encode = (segment: string) => encodeURIComponent(segment);\n\n return {\n getEntities() {\n return getJson<EntityLearningEntitiesResponse>(buildUrl('/entities'));\n },\n\n getEntityRuns(entityId: string, signalName: string) {\n return getJson<EntityLearningRunsResponse>(buildUrl(`/entities/${encode(entityId)}/runs`, { signalName }));\n },\n\n getEntityRun(entityId: string, runId: string, signalName: string) {\n return getJson<EntityLearningRunResponse>(\n buildUrl(`/entities/${encode(entityId)}/runs/${encode(runId)}`, { signalName }),\n );\n },\n\n getEntityLearning(entityId: string, signalName: string, runId?: string) {\n return getJson<EntityLearningLearningResponse>(\n buildUrl(`/entities/${encode(entityId)}/learning`, { signalName, runId }),\n );\n },\n\n getEntityTopics(entityId: string, signalName: string, runId?: string) {\n // runId omitted → the API resolves the latest run for that signal.\n return getJson<EntityLearningTopicsResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics`, { signalName, runId }),\n );\n },\n\n getEntityTopic(entityId: string, topicId: string, signalName: string, runId: string) {\n return getJson<EntityLearningTopicResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}`, { signalName, runId }),\n );\n },\n\n getEntityTopicExamples(entityId: string, topicId: string, params: EntityLearningTopicExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n\n getEntityPoints(entityId: string, params: EntityLearningPointsParams) {\n return getJson<EntityLearningPointsResponse>(\n buildUrl(`/entities/${encode(entityId)}/points`, {\n signalName: params.signalName,\n runId: params.runId,\n includeOutliers: params.includeOutliers,\n limit: params.limit,\n }),\n );\n },\n\n getEntityOutliers(entityId: string, signalName: string, runId: string) {\n return getJson<EntityLearningOutliersResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId }),\n );\n },\n\n getEntityOutlierExamples(entityId: string, params: EntityLearningOutlierExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
const trimTrailingSlash = (value) => value.replace(/\/+$/, "");
|
|
2
2
|
function createEntityLearningService(config) {
|
|
3
|
-
const root = `${trimTrailingSlash(config.baseUrl)}/
|
|
3
|
+
const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;
|
|
4
4
|
const buildUrl = (path, params) => {
|
|
5
5
|
const url = new URL(`${root}${path}`);
|
|
6
|
-
if (config.organizationId) {
|
|
7
|
-
url.searchParams.set("organizationId", config.organizationId);
|
|
8
|
-
}
|
|
9
|
-
if (config.projectId) {
|
|
10
|
-
url.searchParams.set("projectId", config.projectId);
|
|
11
|
-
}
|
|
12
6
|
if (params) {
|
|
13
7
|
for (const [key, value] of Object.entries(params)) {
|
|
14
8
|
if (value !== void 0) {
|
|
@@ -19,7 +13,10 @@ function createEntityLearningService(config) {
|
|
|
19
13
|
return url.toString();
|
|
20
14
|
};
|
|
21
15
|
async function getJson(url) {
|
|
22
|
-
const res = await fetch(url
|
|
16
|
+
const res = await fetch(url, {
|
|
17
|
+
credentials: "include",
|
|
18
|
+
headers: config.projectId ? { "X-Mastra-Project-Id": config.projectId } : void 0
|
|
19
|
+
});
|
|
23
20
|
if (!res.ok) {
|
|
24
21
|
throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);
|
|
25
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-learning-service.es.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningPointsResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n
|
|
1
|
+
{"version":3,"file":"entity-learning-service.es.js","sources":["../../../../src/ee/signals/services/entity-learning-service.ts"],"sourcesContent":["import type {\n EntityLearningEntitiesResponse,\n EntityLearningRunsResponse,\n EntityLearningRunResponse,\n EntityLearningLearningResponse,\n EntityLearningTopicsResponse,\n EntityLearningTopicResponse,\n EntityLearningTopicExamplesResponse,\n EntityLearningPointsResponse,\n EntityLearningOutliersResponse,\n} from './entity-learning-types';\n\nexport type EntityLearningServiceConfig = {\n /**\n * Platform observability query-service origin (mobs-query), e.g.\n * `https://observability.mastra.ai`. Agent Learning routes are served\n * session-authenticated under `/api/learning` on this origin — the same\n * origin and auth model as the `/api/observability/*` routes.\n */\n baseUrl: string;\n projectId?: string;\n};\n\nexport type EntityLearningTopicExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningPointsParams = {\n signalName: string;\n runId: string;\n includeOutliers?: boolean;\n limit?: number;\n};\n\nexport type EntityLearningOutlierExamplesParams = {\n signalName: string;\n runId: string;\n limit?: number;\n};\n\nexport type EntityLearningService = ReturnType<typeof createEntityLearningService>;\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, '');\n\n/**\n * Network layer for the platform Agent Learning API served by the\n * observability query service (mobs-query) under `/api/learning`.\n *\n * Auth follows the observability pattern: the WorkOS session cookie is sent\n * via `credentials: 'include'`, and the org/project scope is resolved\n * server-side from the session. `projectId` is passed as the\n * `X-Mastra-Project-Id` header so the server scopes reads to that project;\n * caller-supplied scope can never widen access beyond the session.\n */\nexport function createEntityLearningService(config: EntityLearningServiceConfig) {\n const root = `${trimTrailingSlash(config.baseUrl)}/api/learning`;\n\n const buildUrl = (path: string, params?: Record<string, string | number | boolean | undefined>) => {\n const url = new URL(`${root}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n };\n\n async function getJson<T>(url: string): Promise<T> {\n const res = await fetch(url, {\n credentials: 'include',\n headers: config.projectId ? { 'X-Mastra-Project-Id': config.projectId } : undefined,\n });\n if (!res.ok) {\n throw new Error(`Entity-Learning request failed (${res.status}): ${url}`);\n }\n return (await res.json()) as T;\n }\n\n const encode = (segment: string) => encodeURIComponent(segment);\n\n return {\n getEntities() {\n return getJson<EntityLearningEntitiesResponse>(buildUrl('/entities'));\n },\n\n getEntityRuns(entityId: string, signalName: string) {\n return getJson<EntityLearningRunsResponse>(buildUrl(`/entities/${encode(entityId)}/runs`, { signalName }));\n },\n\n getEntityRun(entityId: string, runId: string, signalName: string) {\n return getJson<EntityLearningRunResponse>(\n buildUrl(`/entities/${encode(entityId)}/runs/${encode(runId)}`, { signalName }),\n );\n },\n\n getEntityLearning(entityId: string, signalName: string, runId?: string) {\n return getJson<EntityLearningLearningResponse>(\n buildUrl(`/entities/${encode(entityId)}/learning`, { signalName, runId }),\n );\n },\n\n getEntityTopics(entityId: string, signalName: string, runId?: string) {\n // runId omitted → the API resolves the latest run for that signal.\n return getJson<EntityLearningTopicsResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics`, { signalName, runId }),\n );\n },\n\n getEntityTopic(entityId: string, topicId: string, signalName: string, runId: string) {\n return getJson<EntityLearningTopicResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}`, { signalName, runId }),\n );\n },\n\n getEntityTopicExamples(entityId: string, topicId: string, params: EntityLearningTopicExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/topics/${encode(topicId)}/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n\n getEntityPoints(entityId: string, params: EntityLearningPointsParams) {\n return getJson<EntityLearningPointsResponse>(\n buildUrl(`/entities/${encode(entityId)}/points`, {\n signalName: params.signalName,\n runId: params.runId,\n includeOutliers: params.includeOutliers,\n limit: params.limit,\n }),\n );\n },\n\n getEntityOutliers(entityId: string, signalName: string, runId: string) {\n return getJson<EntityLearningOutliersResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers`, { signalName, runId }),\n );\n },\n\n getEntityOutlierExamples(entityId: string, params: EntityLearningOutlierExamplesParams) {\n return getJson<EntityLearningTopicExamplesResponse>(\n buildUrl(`/entities/${encode(entityId)}/outliers/examples`, {\n signalName: params.signalName,\n runId: params.runId,\n limit: params.limit,\n }),\n );\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { EntityLearningEntitiesResponse, EntityLearningRunsResponse, EntityLearningRunResponse, EntityLearningLearningResponse, EntityLearningTopicsResponse, EntityLearningTopicResponse, EntityLearningTopicExamplesResponse, EntityLearningPointsResponse, EntityLearningOutliersResponse } from './entity-learning-types';
|
|
2
2
|
export type EntityLearningServiceConfig = {
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Platform observability query-service origin (mobs-query), e.g.
|
|
5
|
+
* `https://observability.mastra.ai`. Agent Learning routes are served
|
|
6
|
+
* session-authenticated under `/api/learning` on this origin — the same
|
|
7
|
+
* origin and auth model as the `/api/observability/*` routes.
|
|
8
|
+
*/
|
|
4
9
|
baseUrl: string;
|
|
5
|
-
organizationId?: string;
|
|
6
10
|
projectId?: string;
|
|
7
11
|
};
|
|
8
12
|
export type EntityLearningTopicExamplesParams = {
|
|
@@ -23,8 +27,14 @@ export type EntityLearningOutlierExamplesParams = {
|
|
|
23
27
|
};
|
|
24
28
|
export type EntityLearningService = ReturnType<typeof createEntityLearningService>;
|
|
25
29
|
/**
|
|
26
|
-
* Network layer for the platform
|
|
27
|
-
* observability
|
|
30
|
+
* Network layer for the platform Agent Learning API served by the
|
|
31
|
+
* observability query service (mobs-query) under `/api/learning`.
|
|
32
|
+
*
|
|
33
|
+
* Auth follows the observability pattern: the WorkOS session cookie is sent
|
|
34
|
+
* via `credentials: 'include'`, and the org/project scope is resolved
|
|
35
|
+
* server-side from the session. `projectId` is passed as the
|
|
36
|
+
* `X-Mastra-Project-Id` header so the server scopes reads to that project;
|
|
37
|
+
* caller-supplied scope can never widen access beyond the session.
|
|
28
38
|
*/
|
|
29
39
|
export declare function createEntityLearningService(config: EntityLearningServiceConfig): {
|
|
30
40
|
getEntities(): Promise<EntityLearningEntitiesResponse>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "39.0.0-alpha.5",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"**/*.css"
|
|
@@ -150,8 +150,8 @@
|
|
|
150
150
|
"react": ">=19.0.0",
|
|
151
151
|
"react-dom": ">=19.0.0",
|
|
152
152
|
"tailwindcss": "^4.0.0",
|
|
153
|
-
"@mastra/client-js": "^1.
|
|
154
|
-
"@mastra/react": "1.2.2-alpha.
|
|
153
|
+
"@mastra/client-js": "^1.30.0-alpha.5",
|
|
154
|
+
"@mastra/react": "1.2.2-alpha.5"
|
|
155
155
|
},
|
|
156
156
|
"devDependencies": {
|
|
157
157
|
"@storybook/addon-a11y": "^10.4.1",
|
|
@@ -189,10 +189,10 @@
|
|
|
189
189
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
190
190
|
"vitest": "4.1.8",
|
|
191
191
|
"@internal/lint": "0.0.110",
|
|
192
|
-
"@mastra/core": "1.49.0-alpha.
|
|
193
|
-
"@mastra/client-js": "^1.29.1-alpha.4",
|
|
192
|
+
"@mastra/core": "1.49.0-alpha.5",
|
|
194
193
|
"@mastra/memory": "1.22.1-alpha.1",
|
|
195
|
-
"@mastra/
|
|
194
|
+
"@mastra/client-js": "^1.30.0-alpha.5",
|
|
195
|
+
"@mastra/react": "1.2.2-alpha.5"
|
|
196
196
|
},
|
|
197
197
|
"homepage": "https://mastra.ai",
|
|
198
198
|
"repository": {
|