@mastra/server 1.81.0-alpha.2 → 1.82.0-alpha.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/dist/{a2a-eUB3oDRN.cjs → a2a-CIq9dtbC.cjs} +3 -3
- package/dist/{a2a-eUB3oDRN.cjs.map → a2a-CIq9dtbC.cjs.map} +1 -1
- package/dist/{a2a-UYs7rzN2.js → a2a-DULF2hBd.js} +3 -3
- package/dist/{a2a-UYs7rzN2.js.map → a2a-DULF2hBd.js.map} +1 -1
- package/dist/{agent-builder-DwfHzUnt.cjs → agent-builder-CX7Rgay-.cjs} +4 -4
- package/dist/{agent-builder-DwfHzUnt.cjs.map → agent-builder-CX7Rgay-.cjs.map} +1 -1
- package/dist/{agent-builder-5dpawFJf.js → agent-builder-C_H7OUVX.js} +4 -4
- package/dist/{agent-builder-5dpawFJf.js.map → agent-builder-C_H7OUVX.js.map} +1 -1
- package/dist/{agents-BuI0JjjX.js → agents-NRBk4JAs.js} +4 -4
- package/dist/{agents-BuI0JjjX.js.map → agents-NRBk4JAs.js.map} +1 -1
- package/dist/{agents-BjdRPzyV.cjs → agents-SvkxJW48.cjs} +4 -4
- package/dist/{agents-BjdRPzyV.cjs.map → agents-SvkxJW48.cjs.map} +1 -1
- package/dist/{api-schema-manifest-GgyfF4dw.cjs → api-schema-manifest-BMJwl8fK.cjs} +2 -2
- package/dist/{api-schema-manifest-GgyfF4dw.cjs.map → api-schema-manifest-BMJwl8fK.cjs.map} +1 -1
- package/dist/{api-schema-manifest-DafznVYs.js → api-schema-manifest-CEMyoduN.js} +2 -2
- package/dist/{api-schema-manifest-DafznVYs.js.map → api-schema-manifest-CEMyoduN.js.map} +1 -1
- package/dist/{background-tasks-BkYNmUcf.js → background-tasks-DhQ6upHK.js} +2 -2
- package/dist/{background-tasks-BkYNmUcf.js.map → background-tasks-DhQ6upHK.js.map} +1 -1
- package/dist/{background-tasks-Civclnuq.cjs → background-tasks-Kcx2YtW0.cjs} +2 -2
- package/dist/{background-tasks-Civclnuq.cjs.map → background-tasks-Kcx2YtW0.cjs.map} +1 -1
- package/dist/{builder-registry-DHVK50Ba.js → builder-registry-6TFaV4oT.js} +2 -2
- package/dist/{builder-registry-DHVK50Ba.js.map → builder-registry-6TFaV4oT.js.map} +1 -1
- package/dist/{builder-registry-CamBJItc.cjs → builder-registry-CkPRx_vx.cjs} +2 -2
- package/dist/{builder-registry-CamBJItc.cjs.map → builder-registry-CkPRx_vx.cjs.map} +1 -1
- package/dist/{channels-EqvuQQbv.cjs → channels-Bfkp5vYI.cjs} +2 -2
- package/dist/{channels-EqvuQQbv.cjs.map → channels-Bfkp5vYI.cjs.map} +1 -1
- package/dist/{channels-LNR2QIkc.js → channels-hhQ3vD30.js} +2 -2
- package/dist/{channels-LNR2QIkc.js.map → channels-hhQ3vD30.js.map} +1 -1
- package/dist/{constants-ohUUT3Vg.js → constants-CXAvBYcz.js} +9 -2
- package/dist/constants-CXAvBYcz.js.map +1 -0
- package/dist/{constants-Co1XjPjd.cjs → constants-DMg8hUOR.cjs} +14 -1
- package/dist/constants-DMg8hUOR.cjs.map +1 -0
- package/dist/{conversations-fdXV9K0J.js → conversations-CVvZOu1K.js} +3 -3
- package/dist/{conversations-fdXV9K0J.js.map → conversations-CVvZOu1K.js.map} +1 -1
- package/dist/{conversations-ORTpTqBg.cjs → conversations-Ds6aiCMU.cjs} +3 -3
- package/dist/{conversations-ORTpTqBg.cjs.map → conversations-Ds6aiCMU.cjs.map} +1 -1
- package/dist/{dist-BEtxPxkM.cjs → dist-4RWkx1DC.cjs} +1 -1
- package/dist/dist-BOLBpPgs.js +1 -0
- package/dist/{dist-CR3PolEz.cjs → dist-CRO6e62N.cjs} +583 -3539
- package/dist/dist-CRO6e62N.cjs.map +1 -0
- package/dist/{dist-CmG4sN60.js → dist-DwXaR0sc.js} +585 -3541
- package/dist/dist-DwXaR0sc.js.map +1 -0
- package/dist/docs/SKILL.md +2 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-studio-knowledge.md +81 -0
- package/dist/{editor-builder-DxGZ7IN5.js → editor-builder-BG38irXi.js} +2 -2
- package/dist/{editor-builder-DxGZ7IN5.js.map → editor-builder-BG38irXi.js.map} +1 -1
- package/dist/{editor-builder-6l27BFzD.cjs → editor-builder-CcSeAW18.cjs} +2 -2
- package/dist/{editor-builder-6l27BFzD.cjs.map → editor-builder-CcSeAW18.cjs.map} +1 -1
- package/dist/{helpers-CE1fJdLM.cjs → helpers-BKtUXhz2.cjs} +26 -3
- package/dist/helpers-BKtUXhz2.cjs.map +1 -0
- package/dist/{helpers-CMCXsowL.js → helpers-DNq3LtLq.js} +26 -3
- package/dist/helpers-DNq3LtLq.js.map +1 -0
- package/dist/knowledge-DykIi0wH.js +431 -0
- package/dist/knowledge-DykIi0wH.js.map +1 -0
- package/dist/knowledge-qu0om3W7.cjs +474 -0
- package/dist/knowledge-qu0om3W7.cjs.map +1 -0
- package/dist/{logs-BbaBP2LD.js → logs-B57_NKDn.js} +2 -2
- package/dist/{logs-BbaBP2LD.js.map → logs-B57_NKDn.js.map} +1 -1
- package/dist/{logs-DI-h9uHR.cjs → logs-BJN3M88A.cjs} +2 -2
- package/dist/{logs-DI-h9uHR.cjs.map → logs-BJN3M88A.cjs.map} +1 -1
- package/dist/{mcp-CMw0sq0y.cjs → mcp-B9BILfJP.cjs} +2 -2
- package/dist/{mcp-CMw0sq0y.cjs.map → mcp-B9BILfJP.cjs.map} +1 -1
- package/dist/{mcp-DN9mT9q4.js → mcp-BkmWZD6M.js} +2 -2
- package/dist/{mcp-DN9mT9q4.js.map → mcp-BkmWZD6M.js.map} +1 -1
- package/dist/{memory-Buhi6kZ-.cjs → memory-Dqod_AK9.cjs} +2 -2
- package/dist/{memory-Buhi6kZ-.cjs.map → memory-Dqod_AK9.cjs.map} +1 -1
- package/dist/{memory-BTR95ujT.js → memory-ipOCmg0C.js} +2 -2
- package/dist/{memory-BTR95ujT.js.map → memory-ipOCmg0C.js.map} +1 -1
- package/dist/{observability-pX3wmG8T.js → observability-CbJDt-WY.js} +2 -2
- package/dist/{observability-pX3wmG8T.js.map → observability-CbJDt-WY.js.map} +1 -1
- package/dist/{observability-new-endpoints-BrB2CKix.cjs → observability-new-endpoints-7KCQHib3.cjs} +2 -2
- package/dist/{observability-new-endpoints-BrB2CKix.cjs.map → observability-new-endpoints-7KCQHib3.cjs.map} +1 -1
- package/dist/{observability-new-endpoints-CQNVjYYq.js → observability-new-endpoints-DrDPcAjm.js} +2 -2
- package/dist/{observability-new-endpoints-CQNVjYYq.js.map → observability-new-endpoints-DrDPcAjm.js.map} +1 -1
- package/dist/{observability-DRbDeN1X.cjs → observability-wSQo-vXB.cjs} +2 -2
- package/dist/{observability-DRbDeN1X.cjs.map → observability-wSQo-vXB.cjs.map} +1 -1
- package/dist/{plans-D9BGMVkL.js → plans-BRf1-Sch.js} +3 -3
- package/dist/{plans-D9BGMVkL.js.map → plans-BRf1-Sch.js.map} +1 -1
- package/dist/{plans-BHQFsFRU.cjs → plans-Cq23qQ48.cjs} +3 -3
- package/dist/{plans-BHQFsFRU.cjs.map → plans-Cq23qQ48.cjs.map} +1 -1
- package/dist/{probe-image-size-BjNoJxWf.js → probe-image-size-BGSAADKy.js} +2 -2
- package/dist/{probe-image-size-BjNoJxWf.js.map → probe-image-size-BGSAADKy.js.map} +1 -1
- package/dist/{probe-image-size-jS0ECSlc.cjs → probe-image-size-CsYWL1Gs.cjs} +2 -2
- package/dist/{probe-image-size-jS0ECSlc.cjs.map → probe-image-size-CsYWL1Gs.cjs.map} +1 -1
- package/dist/{responses-Cb-9JV9A.js → responses-CGy87E_N.js} +3 -3
- package/dist/{responses-Cb-9JV9A.js.map → responses-CGy87E_N.js.map} +1 -1
- package/dist/{responses-4_RCBNJB.cjs → responses-CPTdr5VE.cjs} +3 -3
- package/dist/{responses-4_RCBNJB.cjs.map → responses-CPTdr5VE.cjs.map} +1 -1
- package/dist/{routes-BqWcvAcz.cjs → routes-BCpGBudO.cjs} +79 -22
- package/dist/routes-BCpGBudO.cjs.map +1 -0
- package/dist/{routes-4X2kSYEG.js → routes-DZgJrVh5.js} +62 -23
- package/dist/routes-DZgJrVh5.js.map +1 -0
- package/dist/{schedules-CQPodXrR.js → schedules-CGViSLZC.js} +2 -2
- package/dist/{schedules-CQPodXrR.js.map → schedules-CGViSLZC.js.map} +1 -1
- package/dist/{schedules-CL4IU7kS.cjs → schedules-D8ShgpY3.cjs} +2 -2
- package/dist/{schedules-CL4IU7kS.cjs.map → schedules-D8ShgpY3.cjs.map} +1 -1
- package/dist/{scores-DnEcBe2i.cjs → scores-BZ0Iz_0O.cjs} +2 -2
- package/dist/{scores-DnEcBe2i.cjs.map → scores-BZ0Iz_0O.cjs.map} +1 -1
- package/dist/{scores-DqImg-o-.js → scores-DqSDYRs0.js} +2 -2
- package/dist/{scores-DqImg-o-.js.map → scores-DqSDYRs0.js.map} +1 -1
- package/dist/server/auth/helpers.d.ts.map +1 -1
- package/dist/server/auth/index.cjs +2 -2
- package/dist/server/auth/index.js +2 -2
- package/dist/server/constants.d.ts +7 -1
- package/dist/server/constants.d.ts.map +1 -1
- package/dist/server/fga-permissions.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-controller.cjs +2 -2
- package/dist/server/handlers/agent-controller.js +2 -2
- package/dist/server/handlers/agent-versions.cjs +1 -1
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +2 -2
- package/dist/server/handlers/auth.js +2 -2
- package/dist/server/handlers/authorship.cjs +1 -1
- package/dist/server/handlers/authorship.js +1 -1
- package/dist/server/handlers/background-tasks.cjs +1 -1
- package/dist/server/handlers/background-tasks.js +1 -1
- package/dist/server/handlers/builder-registry.cjs +1 -1
- package/dist/server/handlers/builder-registry.js +1 -1
- package/dist/server/handlers/channels.cjs +1 -1
- package/dist/server/handlers/channels.js +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +1 -1
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/knowledge.cjs +10 -0
- package/dist/server/handlers/knowledge.d.ts +237 -0
- package/dist/server/handlers/knowledge.d.ts.map +1 -0
- package/dist/server/handlers/knowledge.js +1 -0
- package/dist/server/handlers/logs.cjs +1 -1
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +1 -1
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/mcp.cjs +1 -1
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +1 -1
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +2 -2
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/plans.cjs +1 -1
- package/dist/server/handlers/plans.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +1 -1
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/responses.cjs +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/responses.storage.cjs +1 -1
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/schedules.cjs +1 -1
- package/dist/server/handlers/schedules.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +1 -1
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +2 -2
- package/dist/server/handlers/stored-agent-favorites.js +2 -2
- package/dist/server/handlers/stored-agents.cjs +2 -2
- package/dist/server/handlers/stored-agents.js +2 -2
- package/dist/server/handlers/stored-mcp-clients.cjs +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +1 -1
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +1 -1
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +2 -2
- package/dist/server/handlers/stored-skill-favorites.js +2 -2
- package/dist/server/handlers/stored-skills.cjs +2 -2
- package/dist/server/handlers/stored-skills.js +2 -2
- package/dist/server/handlers/stored-workspaces.cjs +1 -1
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/system.cjs +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tool-providers.cjs +1 -1
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +1 -1
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +1 -1
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
- package/dist/server/handlers/validate-agent-instructions.js +1 -1
- package/dist/server/handlers/workflow-builder.cjs +1 -1
- package/dist/server/handlers/workflow-builder.js +1 -1
- package/dist/server/handlers/workflows.cjs +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers/workspace.d.ts +23 -23
- package/dist/server/handlers.cjs +13 -13
- package/dist/server/handlers.js +13 -13
- package/dist/server/schemas/knowledge.d.ts +58 -0
- package/dist/server/schemas/knowledge.d.ts.map +1 -0
- package/dist/server/server-adapter/index.cjs +21 -6
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +1 -1
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +18 -7
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/fga-manifest.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/index.d.ts +29 -0
- package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/knowledge.d.ts +231 -0
- package/dist/server/server-adapter/routes/knowledge.d.ts.map +1 -0
- package/dist/{tools-BFpuzQsz.js → tools-CtELrYsA.js} +4 -4
- package/dist/{tools-BFpuzQsz.js.map → tools-CtELrYsA.js.map} +1 -1
- package/dist/{tools-Dy_j6URC.cjs → tools-DtRHH9Hr.cjs} +4 -4
- package/dist/{tools-Dy_j6URC.cjs.map → tools-DtRHH9Hr.cjs.map} +1 -1
- package/dist/{utils-BbYUI6Yn.cjs → utils-9PRHHTGC.cjs} +7 -3
- package/dist/utils-9PRHHTGC.cjs.map +1 -0
- package/dist/{utils-DHxjw4Tn.js → utils-B15w-1hm.js} +7 -3
- package/dist/utils-B15w-1hm.js.map +1 -0
- package/dist/{utils-BnH77wPf.cjs → utils-bQ6Jhog6.cjs} +2 -2
- package/dist/{utils-BnH77wPf.cjs.map → utils-bQ6Jhog6.cjs.map} +1 -1
- package/dist/{utils-YEuwVEc2.js → utils-qaBKOShQ.js} +2 -2
- package/dist/{utils-YEuwVEc2.js.map → utils-qaBKOShQ.js.map} +1 -1
- package/dist/{workflow-builder--W9PMW13.js → workflow-builder-6I2HiKcF.js} +2 -2
- package/dist/{workflow-builder--W9PMW13.js.map → workflow-builder-6I2HiKcF.js.map} +1 -1
- package/dist/{workflow-builder-CT7JOoW6.cjs → workflow-builder-CQzvZvwC.cjs} +2 -2
- package/dist/{workflow-builder-CT7JOoW6.cjs.map → workflow-builder-CQzvZvwC.cjs.map} +1 -1
- package/dist/{workflows-DPIRVRN9.js → workflows-ClfVyB1p.js} +3 -3
- package/dist/{workflows-DPIRVRN9.js.map → workflows-ClfVyB1p.js.map} +1 -1
- package/dist/{workflows-BAOfWBkr.cjs → workflows-DgSo-eBG.cjs} +3 -3
- package/dist/{workflows-BAOfWBkr.cjs.map → workflows-DgSo-eBG.cjs.map} +1 -1
- package/package.json +9 -9
- package/dist/constants-Co1XjPjd.cjs.map +0 -1
- package/dist/constants-ohUUT3Vg.js.map +0 -1
- package/dist/dist-BQ1uFC_1.js +0 -1
- package/dist/dist-CR3PolEz.cjs.map +0 -1
- package/dist/dist-CmG4sN60.js.map +0 -1
- package/dist/helpers-CE1fJdLM.cjs.map +0 -1
- package/dist/helpers-CMCXsowL.js.map +0 -1
- package/dist/routes-4X2kSYEG.js.map +0 -1
- package/dist/routes-BqWcvAcz.cjs.map +0 -1
- package/dist/utils-BbYUI6Yn.cjs.map +0 -1
- package/dist/utils-DHxjw4Tn.js.map +0 -1
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-10nMEhjP.cjs");
|
|
2
|
+
const require_http_exception = require("./http-exception-Co3MbFUf.cjs");
|
|
3
|
+
const require_route_builder = require("./route-builder-CvARmqnA.cjs");
|
|
4
|
+
const require_constants = require("./constants-DMg8hUOR.cjs");
|
|
5
|
+
const require_server_handlers_error = require("./server/handlers/error.cjs");
|
|
6
|
+
const require_utils = require("./utils-9PRHHTGC.cjs");
|
|
7
|
+
let zod_v4 = require("zod/v4");
|
|
8
|
+
let _mastra_core_knowledge = require("@mastra/core/knowledge");
|
|
9
|
+
_mastra_core_knowledge = require_rolldown_runtime.__toESM(_mastra_core_knowledge, 1);
|
|
10
|
+
// src/server/schemas/knowledge.ts
|
|
11
|
+
const knowledgePathParams = zod_v4.z.object({ knowledgeKey: zod_v4.z.string().describe("Application key the Knowledge instance is registered under") });
|
|
12
|
+
const knowledgePagePathParams = knowledgePathParams.extend({ pageId: zod_v4.z.string().min(1).max(512).describe("Knowledge page id") });
|
|
13
|
+
const pageId = zod_v4.z.string().min(1).max(512);
|
|
14
|
+
const limit = zod_v4.z.coerce.number().int().min(1).max(100).optional();
|
|
15
|
+
const knowledgeTreeQuerySchema = zod_v4.z.object({
|
|
16
|
+
parentId: pageId.optional().describe("Page whose children to list; omit for the root scopes"),
|
|
17
|
+
cursor: zod_v4.z.string().optional(),
|
|
18
|
+
limit
|
|
19
|
+
});
|
|
20
|
+
const knowledgePageQuerySchema = zod_v4.z.object({
|
|
21
|
+
noteCursor: zod_v4.z.string().optional(),
|
|
22
|
+
noteLimit: limit
|
|
23
|
+
});
|
|
24
|
+
const knowledgeGraphQuerySchema = zod_v4.z.object({
|
|
25
|
+
rootId: pageId.optional().describe("Page to walk from; omit to walk every root scope"),
|
|
26
|
+
maxPages: zod_v4.z.coerce.number().int().min(1).max(500).optional()
|
|
27
|
+
});
|
|
28
|
+
const scopeIds = zod_v4.z.union([zod_v4.z.string(), zod_v4.z.array(zod_v4.z.string())]).transform((value) => Array.isArray(value) ? value : [value]).pipe(zod_v4.z.array(pageId).max(20));
|
|
29
|
+
const knowledgeSearchQuerySchema = zod_v4.z.object({
|
|
30
|
+
q: zod_v4.z.string().min(1).max(200).describe("Text to match in page names, synopses, bodies and notes"),
|
|
31
|
+
scopeId: scopeIds.optional().describe("Only pages within these scopes"),
|
|
32
|
+
limit
|
|
33
|
+
});
|
|
34
|
+
const knowledgeActivityQuerySchema = zod_v4.z.object({
|
|
35
|
+
scopeId: pageId.optional(),
|
|
36
|
+
pageId: pageId.optional(),
|
|
37
|
+
cursor: zod_v4.z.string().optional(),
|
|
38
|
+
limit
|
|
39
|
+
});
|
|
40
|
+
const payload = zod_v4.z.record(zod_v4.z.string(), zod_v4.z.unknown());
|
|
41
|
+
const listKnowledgeResponseSchema = zod_v4.z.object({ instances: zod_v4.z.array(zod_v4.z.object({
|
|
42
|
+
key: zod_v4.z.string(),
|
|
43
|
+
id: zod_v4.z.string()
|
|
44
|
+
})) });
|
|
45
|
+
const knowledgeTreeResponseSchema = payload;
|
|
46
|
+
const knowledgePageResponseSchema = payload;
|
|
47
|
+
const knowledgeGraphResponseSchema = payload;
|
|
48
|
+
const knowledgeSearchResponseSchema = zod_v4.z.object({ results: zod_v4.z.array(payload) });
|
|
49
|
+
const knowledgeActivityResponseSchema = payload;
|
|
50
|
+
const knowledgeEventsResponseSchema = zod_v4.z.object({
|
|
51
|
+
kind: zod_v4.z.enum([
|
|
52
|
+
"scope",
|
|
53
|
+
"page",
|
|
54
|
+
"note",
|
|
55
|
+
"pin"
|
|
56
|
+
]),
|
|
57
|
+
op: zod_v4.z.string(),
|
|
58
|
+
pageId: zod_v4.z.string().optional(),
|
|
59
|
+
scopeId: zod_v4.z.string().optional(),
|
|
60
|
+
at: zod_v4.z.string()
|
|
61
|
+
});
|
|
62
|
+
// src/server/handlers/knowledge.ts
|
|
63
|
+
/**
|
|
64
|
+
* Read-only browsing of Knowledge instances registered on Mastra, for Studio. Nothing here writes.
|
|
65
|
+
*
|
|
66
|
+
* What a caller reads depends on whether the app has auth configured (`server.auth` or `studio.auth`):
|
|
67
|
+
* - No auth: probably a local or test project, so the routes read as the instance owner (`'all'`).
|
|
68
|
+
* - Auth: reads are narrowed to what the signed-in caller can read. The app maps the user to Knowledge
|
|
69
|
+
* principals by setting MASTRA_KNOWLEDGE_PRINCIPALS_KEY in `auth.authorize` (a `string[]`, or `'all'`
|
|
70
|
+
* for an admin); the instance turns them into a read scope with `readScopeFor`. A caller with no
|
|
71
|
+
* mapping is refused with 403.
|
|
72
|
+
*
|
|
73
|
+
* On top of that the path derives `knowledge:read` (`GET /knowledge/...`), and with FGA configured each
|
|
74
|
+
* instance is filtered and gated by `knowledge:read` on that instance. The routes are opt-in
|
|
75
|
+
* (KNOWLEDGE_ROUTES); hosts with their own scoping (Factory) do not mount them.
|
|
76
|
+
*/
|
|
77
|
+
function hasAuth(mastra) {
|
|
78
|
+
return Boolean(mastra.getServer?.()?.auth || mastra.getStudio?.()?.auth);
|
|
79
|
+
}
|
|
80
|
+
async function callerReadScope(mastra, requestContext, instance) {
|
|
81
|
+
if (!hasAuth(mastra)) return "all";
|
|
82
|
+
const principals = requestContext?.get(require_constants.MASTRA_KNOWLEDGE_PRINCIPALS_KEY);
|
|
83
|
+
if (principals === void 0 || principals === null) throw new require_http_exception.HTTPException(403, { message: `Knowledge access is not mapped for this caller. Set request context key "${require_constants.MASTRA_KNOWLEDGE_PRINCIPALS_KEY}" in auth.authorize.` });
|
|
84
|
+
if (principals === "all") return "all";
|
|
85
|
+
if (!Array.isArray(principals) || principals.some((principal) => typeof principal !== "string")) throw new require_http_exception.HTTPException(500, { message: `Request context key "${require_constants.MASTRA_KNOWLEDGE_PRINCIPALS_KEY}" must be a string array or 'all'.` });
|
|
86
|
+
try {
|
|
87
|
+
return await instance.readScopeFor(principals);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
if (error instanceof Error && error.name === "KnowledgeDeclarationError") throw new require_http_exception.HTTPException(500, {
|
|
90
|
+
message: error.message,
|
|
91
|
+
cause: error
|
|
92
|
+
});
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function accessibleInstances(mastra, requestContext, entries) {
|
|
97
|
+
const fgaProvider = require_utils.getHandlerFGAProvider(mastra, requestContext);
|
|
98
|
+
const user = requestContext?.get("user");
|
|
99
|
+
if (!fgaProvider || !user || typeof user !== "object" || entries.length === 0) return new Set(entries.map((entry) => entry.key));
|
|
100
|
+
const accessible = await fgaProvider.filterAccessible(user, entries.map((entry) => ({
|
|
101
|
+
...entry,
|
|
102
|
+
id: entry.key
|
|
103
|
+
})), "knowledge", require_utils.MastraFGAPermissions.KNOWLEDGE_READ);
|
|
104
|
+
return new Set(accessible.map((entry) => entry.key));
|
|
105
|
+
}
|
|
106
|
+
const pageReaders = _mastra_core_knowledge;
|
|
107
|
+
function requirePageReaders() {
|
|
108
|
+
const { listKnowledgeTreeChildren, readKnowledgePage, readKnowledgePageActivity, readKnowledgePageGraph, searchKnowledgeExplorerPages } = pageReaders;
|
|
109
|
+
if (!listKnowledgeTreeChildren || !readKnowledgePage || !readKnowledgePageActivity || !readKnowledgePageGraph || !searchKnowledgeExplorerPages) throw new require_http_exception.HTTPException(501, { message: "Knowledge browsing needs @mastra/core 1.81.0 or later." });
|
|
110
|
+
return {
|
|
111
|
+
listKnowledgeTreeChildren,
|
|
112
|
+
readKnowledgePage,
|
|
113
|
+
readKnowledgePageActivity,
|
|
114
|
+
readKnowledgePageGraph,
|
|
115
|
+
searchKnowledgeExplorerPages
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The declared grants between the graph's scopes, each with its principal's display label. Grants are
|
|
120
|
+
* newer than the page readers, so a core without them sends none and the graph still loads.
|
|
121
|
+
*/
|
|
122
|
+
async function graphGrants(instance, store, pages, read) {
|
|
123
|
+
const readGrants = _mastra_core_knowledge.readKnowledgeScopeGrants;
|
|
124
|
+
const scopeGrants = instance.scopeGrants?.bind(instance);
|
|
125
|
+
if (!readGrants || !scopeGrants) return void 0;
|
|
126
|
+
return (await readGrants(store, {
|
|
127
|
+
pages,
|
|
128
|
+
read,
|
|
129
|
+
grantsFor: scopeGrants
|
|
130
|
+
})).map((grant) => {
|
|
131
|
+
const principalLabel = instance.scopeLabel?.(grant.principal);
|
|
132
|
+
return principalLabel ? {
|
|
133
|
+
...grant,
|
|
134
|
+
principalLabel
|
|
135
|
+
} : grant;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function resolveStore(mastra, requestContext, knowledgeKey) {
|
|
139
|
+
const instances = mastra.listKnowledge();
|
|
140
|
+
const instance = knowledgeKey && Object.hasOwn(instances, knowledgeKey) ? instances[knowledgeKey] : void 0;
|
|
141
|
+
if (!knowledgeKey || !instance) throw new require_http_exception.HTTPException(404, { message: `Knowledge ${knowledgeKey ?? ""} not found` });
|
|
142
|
+
const fgaProvider = require_utils.getHandlerFGAProvider(mastra, requestContext);
|
|
143
|
+
const user = requestContext?.get("user");
|
|
144
|
+
if (fgaProvider && user && typeof user === "object") {
|
|
145
|
+
if (!await fgaProvider.check(user, {
|
|
146
|
+
resource: {
|
|
147
|
+
type: "knowledge",
|
|
148
|
+
id: knowledgeKey
|
|
149
|
+
},
|
|
150
|
+
permission: require_utils.MastraFGAPermissions.KNOWLEDGE_READ
|
|
151
|
+
})) throw new require_http_exception.HTTPException(404, { message: `Knowledge ${knowledgeKey} not found` });
|
|
152
|
+
}
|
|
153
|
+
const readers = requirePageReaders();
|
|
154
|
+
const read = await callerReadScope(mastra, requestContext, instance);
|
|
155
|
+
return {
|
|
156
|
+
instance,
|
|
157
|
+
store: await instance.getStorage(),
|
|
158
|
+
read,
|
|
159
|
+
readers
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Adds each scope page's declared `displayLabel` with its address's `$params` filled in (`'$orgId policy'`
|
|
164
|
+
* → `'acme policy'`), so the explorer can caption scopes. Scope declarations live in config, not
|
|
165
|
+
* storage, so the readers can't supply it. Older cores without `scopeLabel` send no label.
|
|
166
|
+
*/
|
|
167
|
+
function withDisplayLabel(instance, page) {
|
|
168
|
+
if (!page.isScope || !page.address) return page;
|
|
169
|
+
const displayLabel = instance.scopeLabel?.(page.address);
|
|
170
|
+
return displayLabel ? {
|
|
171
|
+
...page,
|
|
172
|
+
displayLabel
|
|
173
|
+
} : page;
|
|
174
|
+
}
|
|
175
|
+
const LIST_KNOWLEDGE_ROUTE = require_route_builder.createRoute({
|
|
176
|
+
method: "GET",
|
|
177
|
+
path: "/knowledge",
|
|
178
|
+
responseType: "json",
|
|
179
|
+
responseSchema: listKnowledgeResponseSchema,
|
|
180
|
+
summary: "List Knowledge instances",
|
|
181
|
+
description: "Returns the Knowledge instances registered on this Mastra instance, by application key. Without app auth the other Knowledge routes read the whole instance; with auth they read only what the caller's Knowledge principals (MASTRA_KNOWLEDGE_PRINCIPALS_KEY, set in auth.authorize) can read, and refuse an unmapped caller with 403.",
|
|
182
|
+
tags: ["Knowledge"],
|
|
183
|
+
requiresAuth: true,
|
|
184
|
+
handler: async ({ mastra, requestContext }) => {
|
|
185
|
+
try {
|
|
186
|
+
const all = Object.entries(mastra.listKnowledge()).map(([key, instance]) => ({
|
|
187
|
+
key,
|
|
188
|
+
id: instance.id
|
|
189
|
+
}));
|
|
190
|
+
const allowed = await accessibleInstances(mastra, requestContext, all);
|
|
191
|
+
return { instances: all.filter((entry) => allowed.has(entry.key)) };
|
|
192
|
+
} catch (error) {
|
|
193
|
+
return require_server_handlers_error.handleError(error, "Error listing Knowledge instances");
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
const GET_KNOWLEDGE_TREE_ROUTE = require_route_builder.createRoute({
|
|
198
|
+
method: "GET",
|
|
199
|
+
path: "/knowledge/:knowledgeKey/tree",
|
|
200
|
+
responseType: "json",
|
|
201
|
+
pathParamSchema: knowledgePathParams,
|
|
202
|
+
queryParamSchema: knowledgeTreeQuerySchema,
|
|
203
|
+
responseSchema: knowledgeTreeResponseSchema,
|
|
204
|
+
summary: "List one level of the Knowledge page tree",
|
|
205
|
+
description: "Without parentId, returns the root scopes. With parentId, returns its child scopes (first page only) then its child pages in order, paged with cursor.",
|
|
206
|
+
tags: ["Knowledge"],
|
|
207
|
+
requiresAuth: true,
|
|
208
|
+
handler: async ({ mastra, requestContext, knowledgeKey, parentId, cursor, limit }) => {
|
|
209
|
+
try {
|
|
210
|
+
const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
211
|
+
const level = await readers.listKnowledgeTreeChildren(store, {
|
|
212
|
+
parentId: parentId ?? null,
|
|
213
|
+
read,
|
|
214
|
+
cursor: cursor || void 0,
|
|
215
|
+
limit
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
...level,
|
|
219
|
+
pages: level.pages.map((page) => withDisplayLabel(instance, page))
|
|
220
|
+
};
|
|
221
|
+
} catch (error) {
|
|
222
|
+
return require_server_handlers_error.handleError(error, "Error reading Knowledge tree");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
const GET_KNOWLEDGE_PAGE_ROUTE = require_route_builder.createRoute({
|
|
227
|
+
method: "GET",
|
|
228
|
+
path: "/knowledge/:knowledgeKey/pages/:pageId",
|
|
229
|
+
responseType: "json",
|
|
230
|
+
pathParamSchema: knowledgePagePathParams,
|
|
231
|
+
queryParamSchema: knowledgePageQuerySchema,
|
|
232
|
+
responseSchema: knowledgePageResponseSchema,
|
|
233
|
+
summary: "Get a Knowledge page",
|
|
234
|
+
description: "Returns one page with its ancestors, a page of its notes, its pin, the pages its notes reference and notes elsewhere that mention it; 404 when it does not exist",
|
|
235
|
+
tags: ["Knowledge"],
|
|
236
|
+
requiresAuth: true,
|
|
237
|
+
handler: async ({ mastra, requestContext, knowledgeKey, pageId, noteCursor, noteLimit }) => {
|
|
238
|
+
try {
|
|
239
|
+
const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
240
|
+
const view = await readers.readKnowledgePage(store, {
|
|
241
|
+
pageId,
|
|
242
|
+
read,
|
|
243
|
+
noteCursor,
|
|
244
|
+
noteLimit
|
|
245
|
+
});
|
|
246
|
+
if (!view) throw new require_http_exception.HTTPException(404, { message: "Knowledge page not found" });
|
|
247
|
+
const label = (page) => withDisplayLabel(instance, page);
|
|
248
|
+
return {
|
|
249
|
+
...view,
|
|
250
|
+
page: label(view.page),
|
|
251
|
+
ancestors: view.ancestors.map(label),
|
|
252
|
+
related: view.related.map(label)
|
|
253
|
+
};
|
|
254
|
+
} catch (error) {
|
|
255
|
+
return require_server_handlers_error.handleError(error, "Error reading Knowledge page");
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
const GET_KNOWLEDGE_GRAPH_ROUTE = require_route_builder.createRoute({
|
|
260
|
+
method: "GET",
|
|
261
|
+
path: "/knowledge/:knowledgeKey/graph",
|
|
262
|
+
responseType: "json",
|
|
263
|
+
pathParamSchema: knowledgePathParams,
|
|
264
|
+
queryParamSchema: knowledgeGraphQuerySchema,
|
|
265
|
+
responseSchema: knowledgeGraphResponseSchema,
|
|
266
|
+
summary: "Get a bounded Knowledge page graph",
|
|
267
|
+
description: "Returns pages under rootId (or every root scope) breadth-first with parent and mention edges, bounded; truncated is true when a limit stopped it. grants lists the declared access grants onto the scopes shown, from principal scopes the caller can read. 404 when rootId does not exist.",
|
|
268
|
+
tags: ["Knowledge"],
|
|
269
|
+
requiresAuth: true,
|
|
270
|
+
handler: async ({ mastra, requestContext, knowledgeKey, rootId, maxPages }) => {
|
|
271
|
+
try {
|
|
272
|
+
const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
273
|
+
const graph = await readers.readKnowledgePageGraph(store, {
|
|
274
|
+
read,
|
|
275
|
+
rootId: rootId ?? null,
|
|
276
|
+
...maxPages ? { limits: { maxPages } } : {}
|
|
277
|
+
});
|
|
278
|
+
if (!graph) throw new require_http_exception.HTTPException(404, { message: "Knowledge page not found" });
|
|
279
|
+
const grants = await graphGrants(instance, store, graph.pages, read);
|
|
280
|
+
return {
|
|
281
|
+
...graph,
|
|
282
|
+
pages: graph.pages.map((page) => withDisplayLabel(instance, page)),
|
|
283
|
+
...grants ? { grants } : {}
|
|
284
|
+
};
|
|
285
|
+
} catch (error) {
|
|
286
|
+
return require_server_handlers_error.handleError(error, "Error reading Knowledge graph");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
const SEARCH_KNOWLEDGE_ROUTE = require_route_builder.createRoute({
|
|
291
|
+
method: "GET",
|
|
292
|
+
path: "/knowledge/:knowledgeKey/search",
|
|
293
|
+
responseType: "json",
|
|
294
|
+
pathParamSchema: knowledgePathParams,
|
|
295
|
+
queryParamSchema: knowledgeSearchQuerySchema,
|
|
296
|
+
responseSchema: knowledgeSearchResponseSchema,
|
|
297
|
+
summary: "Search Knowledge pages and notes",
|
|
298
|
+
description: "Returns pages whose name, synopsis or body, and notes whose text, match the query",
|
|
299
|
+
tags: ["Knowledge"],
|
|
300
|
+
requiresAuth: true,
|
|
301
|
+
handler: async ({ mastra, requestContext, knowledgeKey, q, scopeId, limit }) => {
|
|
302
|
+
try {
|
|
303
|
+
const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
304
|
+
return { results: (await readers.searchKnowledgeExplorerPages(store, {
|
|
305
|
+
query: q,
|
|
306
|
+
read,
|
|
307
|
+
...scopeId?.length ? { scopeIds: scopeId } : {},
|
|
308
|
+
limit
|
|
309
|
+
})).map((hit) => ({
|
|
310
|
+
...hit,
|
|
311
|
+
page: withDisplayLabel(instance, hit.page)
|
|
312
|
+
})) };
|
|
313
|
+
} catch (error) {
|
|
314
|
+
return require_server_handlers_error.handleError(error, "Error searching Knowledge");
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
const GET_KNOWLEDGE_ACTIVITY_ROUTE = require_route_builder.createRoute({
|
|
319
|
+
method: "GET",
|
|
320
|
+
path: "/knowledge/:knowledgeKey/activity",
|
|
321
|
+
responseType: "json",
|
|
322
|
+
pathParamSchema: knowledgePathParams,
|
|
323
|
+
queryParamSchema: knowledgeActivityQuerySchema,
|
|
324
|
+
responseSchema: knowledgeActivityResponseSchema,
|
|
325
|
+
summary: "List recent Knowledge activity",
|
|
326
|
+
description: "Returns a newest-first page of activity, optionally for one scope or one page",
|
|
327
|
+
tags: ["Knowledge"],
|
|
328
|
+
requiresAuth: true,
|
|
329
|
+
handler: async ({ mastra, requestContext, knowledgeKey, scopeId, pageId, cursor, limit }) => {
|
|
330
|
+
try {
|
|
331
|
+
const { store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
332
|
+
return { ...await readers.readKnowledgePageActivity(store, {
|
|
333
|
+
read,
|
|
334
|
+
scopeId,
|
|
335
|
+
pageId,
|
|
336
|
+
cursor,
|
|
337
|
+
limit
|
|
338
|
+
}) };
|
|
339
|
+
} catch (error) {
|
|
340
|
+
return require_server_handlers_error.handleError(error, "Error reading Knowledge activity");
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
const KEEPALIVE_MS = 25e3;
|
|
345
|
+
/**
|
|
346
|
+
* The read scope is resolved when the stream opens. Ending it after this long makes the client reconnect,
|
|
347
|
+
* which resolves the caller's read scope again, so a revoked grant stops receiving changes.
|
|
348
|
+
*/
|
|
349
|
+
const STREAM_MAX_AGE_MS = 3e5;
|
|
350
|
+
/**
|
|
351
|
+
* What a viewer may learn about one change: the ids in it they can read, or nothing when they can read
|
|
352
|
+
* none. A page they can read now, or the scope it is (or was, before a move or merge) in, counts; a
|
|
353
|
+
* deleted page is matched by its scope.
|
|
354
|
+
*/
|
|
355
|
+
async function visibleChange(store, read, event) {
|
|
356
|
+
const readable = async (id) => id !== void 0 && (read === "all" || await store.getPage({
|
|
357
|
+
id,
|
|
358
|
+
read
|
|
359
|
+
}) !== null);
|
|
360
|
+
const scopeId = "scopeId" in event ? event.scopeId : void 0;
|
|
361
|
+
const fromScopeId = "fromScopeId" in event ? event.fromScopeId : void 0;
|
|
362
|
+
const [page, scope, fromScope] = await Promise.all([
|
|
363
|
+
readable(event.pageId),
|
|
364
|
+
readable(scopeId),
|
|
365
|
+
readable(fromScopeId)
|
|
366
|
+
]);
|
|
367
|
+
if (!page && !scope && !fromScope) return null;
|
|
368
|
+
return {
|
|
369
|
+
kind: event.kind,
|
|
370
|
+
op: event.op,
|
|
371
|
+
...page ? { pageId: event.pageId } : {},
|
|
372
|
+
...scope ? { scopeId } : {},
|
|
373
|
+
at: event.at.toISOString()
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const STREAM_KNOWLEDGE_EVENTS_ROUTE = require_route_builder.createRoute({
|
|
377
|
+
method: "GET",
|
|
378
|
+
path: "/knowledge/:knowledgeKey/events",
|
|
379
|
+
responseType: "stream",
|
|
380
|
+
streamFormat: "sse",
|
|
381
|
+
sseFlushOnConnect: true,
|
|
382
|
+
pathParamSchema: knowledgePathParams,
|
|
383
|
+
responseSchema: knowledgeEventsResponseSchema,
|
|
384
|
+
summary: "Stream Knowledge changes",
|
|
385
|
+
description: "Server-Sent Events, one per committed write the caller can read: { kind, op, pageId?, scopeId?, at }. Ids the caller cannot read are left out, and changes they cannot read at all are not sent. Re-read what changed with the other Knowledge routes.",
|
|
386
|
+
tags: ["Knowledge"],
|
|
387
|
+
requiresAuth: true,
|
|
388
|
+
handler: async ({ mastra, requestContext, knowledgeKey, abortSignal }) => {
|
|
389
|
+
try {
|
|
390
|
+
const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
|
|
391
|
+
if (typeof instance.onChange !== "function") throw new require_http_exception.HTTPException(501, { message: "Knowledge change events need @mastra/core 1.81.0 or later." });
|
|
392
|
+
const logger = mastra.getLogger();
|
|
393
|
+
let stop = () => {};
|
|
394
|
+
return new ReadableStream({
|
|
395
|
+
start(controller) {
|
|
396
|
+
let open = true;
|
|
397
|
+
let queue = Promise.resolve();
|
|
398
|
+
const unsubscribe = instance.onChange((event) => {
|
|
399
|
+
queue = queue.then(async () => {
|
|
400
|
+
const change = await visibleChange(store, read, event).catch((error) => {
|
|
401
|
+
logger?.error("Error filtering a Knowledge change", { error });
|
|
402
|
+
return null;
|
|
403
|
+
});
|
|
404
|
+
if (open && change) controller.enqueue(change);
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
const keepalive = setInterval(() => open && controller.enqueue(": keepalive\n\n"), KEEPALIVE_MS);
|
|
408
|
+
const expire = setTimeout(() => stop(), STREAM_MAX_AGE_MS);
|
|
409
|
+
stop = () => {
|
|
410
|
+
if (!open) return;
|
|
411
|
+
open = false;
|
|
412
|
+
clearInterval(keepalive);
|
|
413
|
+
clearTimeout(expire);
|
|
414
|
+
unsubscribe();
|
|
415
|
+
try {
|
|
416
|
+
controller.close();
|
|
417
|
+
} catch {}
|
|
418
|
+
};
|
|
419
|
+
if (abortSignal?.aborted) stop();
|
|
420
|
+
else abortSignal?.addEventListener("abort", stop, { once: true });
|
|
421
|
+
},
|
|
422
|
+
cancel() {
|
|
423
|
+
stop();
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
} catch (error) {
|
|
427
|
+
return require_server_handlers_error.handleError(error, "Error streaming Knowledge changes");
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
Object.defineProperty(exports, "GET_KNOWLEDGE_ACTIVITY_ROUTE", {
|
|
432
|
+
enumerable: true,
|
|
433
|
+
get: function() {
|
|
434
|
+
return GET_KNOWLEDGE_ACTIVITY_ROUTE;
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
Object.defineProperty(exports, "GET_KNOWLEDGE_GRAPH_ROUTE", {
|
|
438
|
+
enumerable: true,
|
|
439
|
+
get: function() {
|
|
440
|
+
return GET_KNOWLEDGE_GRAPH_ROUTE;
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
Object.defineProperty(exports, "GET_KNOWLEDGE_PAGE_ROUTE", {
|
|
444
|
+
enumerable: true,
|
|
445
|
+
get: function() {
|
|
446
|
+
return GET_KNOWLEDGE_PAGE_ROUTE;
|
|
447
|
+
}
|
|
448
|
+
});
|
|
449
|
+
Object.defineProperty(exports, "GET_KNOWLEDGE_TREE_ROUTE", {
|
|
450
|
+
enumerable: true,
|
|
451
|
+
get: function() {
|
|
452
|
+
return GET_KNOWLEDGE_TREE_ROUTE;
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
Object.defineProperty(exports, "LIST_KNOWLEDGE_ROUTE", {
|
|
456
|
+
enumerable: true,
|
|
457
|
+
get: function() {
|
|
458
|
+
return LIST_KNOWLEDGE_ROUTE;
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
Object.defineProperty(exports, "SEARCH_KNOWLEDGE_ROUTE", {
|
|
462
|
+
enumerable: true,
|
|
463
|
+
get: function() {
|
|
464
|
+
return SEARCH_KNOWLEDGE_ROUTE;
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
Object.defineProperty(exports, "STREAM_KNOWLEDGE_EVENTS_ROUTE", {
|
|
468
|
+
enumerable: true,
|
|
469
|
+
get: function() {
|
|
470
|
+
return STREAM_KNOWLEDGE_EVENTS_ROUTE;
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
//# sourceMappingURL=knowledge-qu0om3W7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-qu0om3W7.cjs","names":["z","MASTRA_KNOWLEDGE_PRINCIPALS_KEY","HTTPException","getHandlerFGAProvider","MastraFGAPermissions","coreKnowledge","createRoute","handleError"],"sources":["../src/server/schemas/knowledge.ts","../src/server/handlers/knowledge.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const knowledgePathParams = z.object({\n knowledgeKey: z.string().describe('Application key the Knowledge instance is registered under'),\n});\n\nexport const knowledgePagePathParams = knowledgePathParams.extend({\n pageId: z.string().min(1).max(512).describe('Knowledge page id'),\n});\n\nconst pageId = z.string().min(1).max(512);\nconst limit = z.coerce.number().int().min(1).max(100).optional();\n\nexport const knowledgeTreeQuerySchema = z.object({\n parentId: pageId.optional().describe('Page whose children to list; omit for the root scopes'),\n cursor: z.string().optional(),\n limit,\n});\n\nexport const knowledgePageQuerySchema = z.object({\n noteCursor: z.string().optional(),\n noteLimit: limit,\n});\n\nexport const knowledgeGraphQuerySchema = z.object({\n rootId: pageId.optional().describe('Page to walk from; omit to walk every root scope'),\n maxPages: z.coerce.number().int().min(1).max(500).optional(),\n});\n\n// A repeated param (`?scopeId=a&scopeId=b`) arrives as an array, a lone one as a string.\nconst scopeIds = z\n .union([z.string(), z.array(z.string())])\n .transform(value => (Array.isArray(value) ? value : [value]))\n .pipe(z.array(pageId).max(20));\n\nexport const knowledgeSearchQuerySchema = z.object({\n q: z.string().min(1).max(200).describe('Text to match in page names, synopses, bodies and notes'),\n scopeId: scopeIds.optional().describe('Only pages within these scopes'),\n limit,\n});\n\nexport const knowledgeActivityQuerySchema = z.object({\n scopeId: pageId.optional(),\n pageId: pageId.optional(),\n cursor: z.string().optional(),\n limit,\n});\n\n// Payloads come from the @mastra/core/knowledge page readers; the UI package owns their TypeScript shapes.\nconst payload = z.record(z.string(), z.unknown());\n\nexport const listKnowledgeResponseSchema = z.object({\n instances: z.array(z.object({ key: z.string(), id: z.string() })),\n});\nexport const knowledgeTreeResponseSchema = payload;\nexport const knowledgePageResponseSchema = payload;\nexport const knowledgeGraphResponseSchema = payload;\nexport const knowledgeSearchResponseSchema = z.object({ results: z.array(payload) });\nexport const knowledgeActivityResponseSchema = payload;\nexport const knowledgeEventsResponseSchema = z.object({\n kind: z.enum(['scope', 'page', 'note', 'pin']),\n op: z.string(),\n pageId: z.string().optional(),\n scopeId: z.string().optional(),\n at: z.string(),\n});\n","import * as coreKnowledge from '@mastra/core/knowledge';\nimport type { Knowledge, KnowledgeChangeEvent } from '@mastra/core/knowledge';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { KnowledgeReadScope, KnowledgeStorage } from '@mastra/core/storage';\nimport { MASTRA_KNOWLEDGE_PRINCIPALS_KEY } from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n knowledgeActivityQuerySchema,\n knowledgeActivityResponseSchema,\n knowledgeEventsResponseSchema,\n knowledgeGraphQuerySchema,\n knowledgeGraphResponseSchema,\n knowledgePagePathParams,\n knowledgePageQuerySchema,\n knowledgePageResponseSchema,\n knowledgePathParams,\n knowledgeSearchQuerySchema,\n knowledgeSearchResponseSchema,\n knowledgeTreeQuerySchema,\n knowledgeTreeResponseSchema,\n listKnowledgeResponseSchema,\n} from '../schemas/knowledge';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\nimport { getHandlerFGAProvider } from './utils';\n\n/**\n * Read-only browsing of Knowledge instances registered on Mastra, for Studio. Nothing here writes.\n *\n * What a caller reads depends on whether the app has auth configured (`server.auth` or `studio.auth`):\n * - No auth: probably a local or test project, so the routes read as the instance owner (`'all'`).\n * - Auth: reads are narrowed to what the signed-in caller can read. The app maps the user to Knowledge\n * principals by setting MASTRA_KNOWLEDGE_PRINCIPALS_KEY in `auth.authorize` (a `string[]`, or `'all'`\n * for an admin); the instance turns them into a read scope with `readScopeFor`. A caller with no\n * mapping is refused with 403.\n *\n * On top of that the path derives `knowledge:read` (`GET /knowledge/...`), and with FGA configured each\n * instance is filtered and gated by `knowledge:read` on that instance. The routes are opt-in\n * (KNOWLEDGE_ROUTES); hosts with their own scoping (Factory) do not mount them.\n */\n\nfunction hasAuth(mastra: Mastra): boolean {\n return Boolean(mastra.getServer?.()?.auth || (mastra as any).getStudio?.()?.auth);\n}\n\nasync function callerReadScope(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n instance: Knowledge,\n): Promise<KnowledgeReadScope> {\n if (!hasAuth(mastra)) return 'all';\n\n const principals = requestContext?.get(MASTRA_KNOWLEDGE_PRINCIPALS_KEY);\n if (principals === undefined || principals === null) {\n throw new HTTPException(403, {\n message: `Knowledge access is not mapped for this caller. Set request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" in auth.authorize.`,\n });\n }\n if (principals === 'all') return 'all';\n // The value comes from the app's own authorize code, so a bad one is a host misconfiguration, not a denial.\n if (!Array.isArray(principals) || principals.some(principal => typeof principal !== 'string')) {\n throw new HTTPException(500, {\n message: `Request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" must be a string array or 'all'.`,\n });\n }\n try {\n return await instance.readScopeFor(principals);\n } catch (error) {\n // A principal that matches no declared scope type: the app's mapping disagrees with its declarations.\n if (error instanceof Error && error.name === 'KnowledgeDeclarationError') {\n throw new HTTPException(500, { message: error.message, cause: error });\n }\n throw error;\n }\n}\n\nasync function accessibleInstances(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n entries: Array<{ id: string; key: string }>,\n): Promise<Set<string>> {\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (!fgaProvider || !user || typeof user !== 'object' || entries.length === 0) {\n return new Set(entries.map(entry => entry.key));\n }\n // FGA names a Knowledge instance by its registered key, as the route metadata does (`:knowledgeKey`).\n const accessible: Array<{ id: string; key: string }> = await fgaProvider.filterAccessible(\n user,\n entries.map(entry => ({ ...entry, id: entry.key })),\n 'knowledge',\n MastraFGAPermissions.KNOWLEDGE_READ,\n );\n return new Set(accessible.map(entry => entry.key));\n}\n\ntype KnowledgePageReaders = Pick<\n typeof coreKnowledge,\n | 'listKnowledgeTreeChildren'\n | 'readKnowledgePage'\n | 'readKnowledgePageActivity'\n | 'readKnowledgePageGraph'\n | 'searchKnowledgeExplorerPages'\n>;\n\n// The page readers first ship in @mastra/core 1.81.0, above this package's peer floor. A named import\n// of an export an older core lacks fails at ESM link time and takes the whole server down, so they are\n// read off the namespace (as in schedules-workflows-shim.ts) and the routes answer 501 without them.\nconst pageReaders: Partial<KnowledgePageReaders> = coreKnowledge;\n\nfunction requirePageReaders(): KnowledgePageReaders {\n const {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n } = pageReaders;\n if (\n !listKnowledgeTreeChildren ||\n !readKnowledgePage ||\n !readKnowledgePageActivity ||\n !readKnowledgePageGraph ||\n !searchKnowledgeExplorerPages\n ) {\n throw new HTTPException(501, { message: 'Knowledge browsing needs @mastra/core 1.81.0 or later.' });\n }\n return {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n };\n}\n\n/**\n * The declared grants between the graph's scopes, each with its principal's display label. Grants are\n * newer than the page readers, so a core without them sends none and the graph still loads.\n */\nasync function graphGrants(\n instance: Knowledge,\n store: KnowledgeStorage,\n pages: readonly coreKnowledge.KnowledgePage[],\n read: KnowledgeReadScope,\n): Promise<Array<coreKnowledge.KnowledgeGraphScopeGrant & { principalLabel?: string }> | undefined> {\n const readGrants = (coreKnowledge as Partial<typeof coreKnowledge>).readKnowledgeScopeGrants;\n const scopeGrants = (instance as Partial<Knowledge>).scopeGrants?.bind(instance);\n if (!readGrants || !scopeGrants) return undefined;\n const grants = await readGrants(store, { pages, read, grantsFor: scopeGrants });\n return grants.map(grant => {\n const principalLabel = instance.scopeLabel?.(grant.principal);\n return principalLabel ? { ...grant, principalLabel } : grant;\n });\n}\n\nasync function resolveStore(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n knowledgeKey: string | undefined,\n): Promise<{ instance: Knowledge; store: KnowledgeStorage; read: KnowledgeReadScope; readers: KnowledgePageReaders }> {\n const instances = mastra.listKnowledge();\n // Own keys only: `constructor` or `__proto__` must not resolve to an Object.prototype member.\n const instance = knowledgeKey && Object.hasOwn(instances, knowledgeKey) ? instances[knowledgeKey] : undefined;\n if (!knowledgeKey || !instance)\n throw new HTTPException(404, { message: `Knowledge ${knowledgeKey ?? ''} not found` });\n\n // An instance the caller may not read looks the same as one that does not exist.\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (fgaProvider && user && typeof user === 'object') {\n const allowed = await fgaProvider.check(user, {\n resource: { type: 'knowledge', id: knowledgeKey },\n permission: MastraFGAPermissions.KNOWLEDGE_READ,\n });\n if (!allowed) throw new HTTPException(404, { message: `Knowledge ${knowledgeKey} not found` });\n }\n const readers = requirePageReaders();\n const read = await callerReadScope(mastra, requestContext, instance);\n return { instance, store: await instance.getStorage(), read, readers };\n}\n\n/**\n * Adds each scope page's declared `displayLabel` with its address's `$params` filled in (`'$orgId policy'`\n * → `'acme policy'`), so the explorer can caption scopes. Scope declarations live in config, not\n * storage, so the readers can't supply it. Older cores without `scopeLabel` send no label.\n */\nfunction withDisplayLabel<T extends { isScope: boolean; address?: string }>(\n instance: Knowledge,\n page: T,\n): T & { displayLabel?: string } {\n if (!page.isScope || !page.address) return page;\n const displayLabel = instance.scopeLabel?.(page.address);\n return displayLabel ? { ...page, displayLabel } : page;\n}\n\nexport const LIST_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge',\n responseType: 'json',\n responseSchema: listKnowledgeResponseSchema,\n summary: 'List Knowledge instances',\n description:\n \"Returns the Knowledge instances registered on this Mastra instance, by application key. Without app auth the other Knowledge routes read the whole instance; with auth they read only what the caller's Knowledge principals (MASTRA_KNOWLEDGE_PRINCIPALS_KEY, set in auth.authorize) can read, and refuse an unmapped caller with 403.\",\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext }) => {\n try {\n const all = Object.entries(mastra.listKnowledge()).map(([key, instance]) => ({ key, id: instance.id }));\n const allowed = await accessibleInstances(mastra, requestContext, all);\n return { instances: all.filter(entry => allowed.has(entry.key)) };\n } catch (error) {\n return handleError(error, 'Error listing Knowledge instances');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_TREE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/tree',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeTreeQuerySchema,\n responseSchema: knowledgeTreeResponseSchema,\n summary: 'List one level of the Knowledge page tree',\n description:\n 'Without parentId, returns the root scopes. With parentId, returns its child scopes (first page only) then its child pages in order, paged with cursor.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, parentId, cursor, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const level = await readers.listKnowledgeTreeChildren(store, {\n parentId: parentId ?? null,\n read,\n // An empty `?cursor=` means no cursor, so root scopes are still listed.\n cursor: cursor || undefined,\n limit,\n });\n return { ...level, pages: level.pages.map(page => withDisplayLabel(instance, page)) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge tree');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_PAGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/pages/:pageId',\n responseType: 'json',\n pathParamSchema: knowledgePagePathParams,\n queryParamSchema: knowledgePageQuerySchema,\n responseSchema: knowledgePageResponseSchema,\n summary: 'Get a Knowledge page',\n description:\n 'Returns one page with its ancestors, a page of its notes, its pin, the pages its notes reference and notes elsewhere that mention it; 404 when it does not exist',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId, noteCursor, noteLimit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const view = await readers.readKnowledgePage(store, { pageId, read, noteCursor, noteLimit });\n if (!view) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const label = <T extends { isScope: boolean; declaration?: string }>(page: T) => withDisplayLabel(instance, page);\n return {\n ...view,\n page: label(view.page),\n ancestors: view.ancestors.map(label),\n related: view.related.map(label),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge page');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_GRAPH_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/graph',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeGraphQuerySchema,\n responseSchema: knowledgeGraphResponseSchema,\n summary: 'Get a bounded Knowledge page graph',\n description:\n 'Returns pages under rootId (or every root scope) breadth-first with parent and mention edges, bounded; truncated is true when a limit stopped it. grants lists the declared access grants onto the scopes shown, from principal scopes the caller can read. 404 when rootId does not exist.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, rootId, maxPages }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const graph = await readers.readKnowledgePageGraph(store, {\n read,\n rootId: rootId ?? null,\n ...(maxPages ? { limits: { maxPages } } : {}),\n });\n if (!graph) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const grants = await graphGrants(instance, store, graph.pages, read);\n return {\n ...graph,\n pages: graph.pages.map(page => withDisplayLabel(instance, page)),\n ...(grants ? { grants } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge graph');\n }\n },\n});\n\nexport const SEARCH_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/search',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeSearchQuerySchema,\n responseSchema: knowledgeSearchResponseSchema,\n summary: 'Search Knowledge pages and notes',\n description: 'Returns pages whose name, synopsis or body, and notes whose text, match the query',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, q, scopeId, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const results = await readers.searchKnowledgeExplorerPages(store, {\n query: q,\n read,\n ...(scopeId?.length ? { scopeIds: scopeId } : {}),\n limit,\n });\n return { results: results.map(hit => ({ ...hit, page: withDisplayLabel(instance, hit.page) })) };\n } catch (error) {\n return handleError(error, 'Error searching Knowledge');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_ACTIVITY_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/activity',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeActivityQuerySchema,\n responseSchema: knowledgeActivityResponseSchema,\n summary: 'List recent Knowledge activity',\n description: 'Returns a newest-first page of activity, optionally for one scope or one page',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, scopeId, pageId, cursor, limit }) => {\n try {\n const { store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n return { ...(await readers.readKnowledgePageActivity(store, { read, scopeId, pageId, cursor, limit })) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge activity');\n }\n },\n});\n\nconst KEEPALIVE_MS = 25_000;\n/**\n * The read scope is resolved when the stream opens. Ending it after this long makes the client reconnect,\n * which resolves the caller's read scope again, so a revoked grant stops receiving changes.\n */\nconst STREAM_MAX_AGE_MS = 5 * 60_000;\n\n/**\n * What a viewer may learn about one change: the ids in it they can read, or nothing when they can read\n * none. A page they can read now, or the scope it is (or was, before a move or merge) in, counts; a\n * deleted page is matched by its scope.\n */\nasync function visibleChange(store: KnowledgeStorage, read: KnowledgeReadScope, event: KnowledgeChangeEvent) {\n const readable = async (id: string | undefined) =>\n id !== undefined && (read === 'all' || (await store.getPage({ id, read })) !== null);\n const scopeId = 'scopeId' in event ? event.scopeId : undefined;\n const fromScopeId = 'fromScopeId' in event ? event.fromScopeId : undefined;\n const [page, scope, fromScope] = await Promise.all([\n readable(event.pageId),\n readable(scopeId),\n readable(fromScopeId),\n ]);\n if (!page && !scope && !fromScope) return null;\n return {\n kind: event.kind,\n op: event.op,\n ...(page ? { pageId: event.pageId } : {}),\n ...(scope ? { scopeId } : {}),\n at: event.at.toISOString(),\n };\n}\n\nexport const STREAM_KNOWLEDGE_EVENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/events',\n responseType: 'stream',\n streamFormat: 'sse',\n sseFlushOnConnect: true,\n pathParamSchema: knowledgePathParams,\n responseSchema: knowledgeEventsResponseSchema,\n summary: 'Stream Knowledge changes',\n description:\n 'Server-Sent Events, one per committed write the caller can read: { kind, op, pageId?, scopeId?, at }. Ids the caller cannot read are left out, and changes they cannot read at all are not sent. Re-read what changed with the other Knowledge routes.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, abortSignal }) => {\n try {\n const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n if (typeof instance.onChange !== 'function') {\n throw new HTTPException(501, { message: 'Knowledge change events need @mastra/core 1.81.0 or later.' });\n }\n const logger = mastra.getLogger();\n let stop = () => {};\n return new ReadableStream({\n start(controller) {\n let open = true;\n // Writes are filtered in order so a viewer never sees a later change before an earlier one.\n let queue = Promise.resolve();\n const unsubscribe = instance.onChange(event => {\n queue = queue.then(async () => {\n const change = await visibleChange(store, read, event).catch(error => {\n logger?.error('Error filtering a Knowledge change', { error });\n return null;\n });\n if (open && change) controller.enqueue(change);\n });\n });\n const keepalive = setInterval(() => open && controller.enqueue(': keepalive\\n\\n'), KEEPALIVE_MS);\n const expire = setTimeout(() => stop(), STREAM_MAX_AGE_MS);\n stop = () => {\n if (!open) return;\n open = false;\n clearInterval(keepalive);\n clearTimeout(expire);\n unsubscribe();\n try {\n controller.close();\n } catch {\n // Already closed\n }\n };\n if (abortSignal?.aborted) stop();\n else abortSignal?.addEventListener('abort', stop, { once: true });\n },\n cancel() {\n stop();\n },\n });\n } catch (error) {\n return handleError(error, 'Error streaming Knowledge changes');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { r as __exportAll } from "./rolldown-runtime-CQI-hT2b.js";
|
|
|
2
2
|
import { u as runIdSchema } from "./common-J-yUnHk9.js";
|
|
3
3
|
import { n as createRoute } from "./route-builder-BxPrwNog.js";
|
|
4
4
|
import { handleError } from "./server/handlers/error.js";
|
|
5
|
-
import { l as parseFilters, m as validateBody } from "./utils-
|
|
5
|
+
import { l as parseFilters, m as validateBody } from "./utils-B15w-1hm.js";
|
|
6
6
|
import { n as listLogsQuerySchema, r as listLogsResponseSchema, t as listLogTransportsResponseSchema } from "./logs-Ca_q8krO.js";
|
|
7
7
|
// src/server/handlers/logs.ts
|
|
8
8
|
var logs_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -92,4 +92,4 @@ const LIST_LOGS_BY_RUN_ID_ROUTE = createRoute({
|
|
|
92
92
|
});
|
|
93
93
|
export { logs_exports as i, LIST_LOGS_ROUTE as n, LIST_LOG_TRANSPORTS_ROUTE as r, LIST_LOGS_BY_RUN_ID_ROUTE as t };
|
|
94
94
|
|
|
95
|
-
//# sourceMappingURL=logs-
|
|
95
|
+
//# sourceMappingURL=logs-B57_NKDn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-
|
|
1
|
+
{"version":3,"file":"logs-B57_NKDn.js","names":[],"sources":["../src/server/handlers/logs.ts"],"sourcesContent":["import { runIdSchema } from '../schemas/common';\nimport { listLogsQuerySchema, listLogsResponseSchema, listLogTransportsResponseSchema } from '../schemas/logs';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { parseFilters, validateBody } from './utils';\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_LOG_TRANSPORTS_ROUTE = createRoute({\n method: 'GET',\n path: '/logs/transports',\n responseType: 'json',\n responseSchema: listLogTransportsResponseSchema,\n summary: 'List log transports',\n description: 'Returns a list of all available log transports',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const logger = mastra.getLogger();\n const transports = logger.getTransports();\n\n return {\n transports: transports ? [...transports.keys()] : [],\n };\n } catch (error) {\n return handleError(error, 'Error getting log Transports');\n }\n },\n});\n\nexport const LIST_LOGS_ROUTE = createRoute({\n method: 'GET',\n path: '/logs',\n responseType: 'json',\n queryParamSchema: listLogsQuerySchema,\n responseSchema: listLogsResponseSchema,\n summary: 'List logs',\n description:\n 'Returns logs from a specific transport with optional filtering by date range, log level, and custom filters',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { transportId, fromDate, toDate, logLevel, filters: _filters, page, perPage } = params;\n\n validateBody({ transportId });\n\n // Parse filter query parameter if present\n const filters = parseFilters(_filters);\n\n const logs = await mastra.listLogs(transportId!, {\n fromDate,\n toDate,\n logLevel,\n filters,\n page: page ? Number(page) : undefined,\n perPage: perPage ? Number(perPage) : undefined,\n });\n return logs;\n } catch (error) {\n return handleError(error, 'Error getting logs');\n }\n },\n});\n\nexport const LIST_LOGS_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/logs/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listLogsQuerySchema,\n responseSchema: listLogsResponseSchema,\n summary: 'List logs by run ID',\n description: 'Returns all logs for a specific execution run from a transport',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { transportId, fromDate, toDate, logLevel, filters: _filters, page, perPage } = params;\n\n validateBody({ runId, transportId });\n\n // Parse filter query parameter if present\n const filters = parseFilters(_filters);\n\n const logs = await mastra.listLogsByRunId({\n runId: runId!,\n transportId: transportId!,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: page ? Number(page) : undefined,\n perPage: perPage ? Number(perPage) : undefined,\n });\n return logs;\n } catch (error) {\n return handleError(error, 'Error getting logs by run ID');\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;AAUA,MAAa,4BAA4B,YAAY;CACnD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,aAAa;EAC7B,IAAI;GAEF,MAAM,aADS,OAAO,UACE,CAAC,CAAC,cAAc;GAExC,OAAO,EACL,YAAY,aAAa,CAAC,GAAG,WAAW,KAAK,CAAC,IAAI,CAAC,EACrD;EACF,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC;AAED,MAAa,kBAAkB,YAAY;CACzC,QAAQ;CACR,MAAM;CACN,cAAc;CACd,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,GAAG,aAAa;EACxC,IAAI;GACF,MAAM,EAAE,aAAa,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,YAAY;GAEtF,aAAa,EAAE,YAAY,CAAC;GAG5B,MAAM,UAAU,aAAa,QAAQ;GAUrC,OAAO,MARY,OAAO,SAAS,aAAc;IAC/C;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,IAAI,IAAI,KAAA;IAC5B,SAAS,UAAU,OAAO,OAAO,IAAI,KAAA;GACvC,CAAC;EAEH,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,oBAAoB;EAChD;CACF;AACF,CAAC;AAED,MAAa,4BAA4B,YAAY;CACnD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,OAAO,GAAG,aAAa;EAC/C,IAAI;GACF,MAAM,EAAE,aAAa,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,YAAY;GAEtF,aAAa;IAAE;IAAO;GAAY,CAAC;GAGnC,MAAM,UAAU,aAAa,QAAQ;GAYrC,OAAO,MAVY,OAAO,gBAAgB;IACjC;IACM;IACb;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,IAAI,IAAI,KAAA;IAC5B,SAAS,UAAU,OAAO,OAAO,IAAI,KAAA;GACvC,CAAC;EAEH,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC"}
|
|
@@ -2,7 +2,7 @@ const require_rolldown_runtime = require("./rolldown-runtime-10nMEhjP.cjs");
|
|
|
2
2
|
const require_common = require("./common-D5XxSuvu.cjs");
|
|
3
3
|
const require_route_builder = require("./route-builder-CvARmqnA.cjs");
|
|
4
4
|
const require_server_handlers_error = require("./server/handlers/error.cjs");
|
|
5
|
-
const require_utils = require("./utils-
|
|
5
|
+
const require_utils = require("./utils-9PRHHTGC.cjs");
|
|
6
6
|
const require_logs = require("./logs-YisOj8HR.cjs");
|
|
7
7
|
// src/server/handlers/logs.ts
|
|
8
8
|
var logs_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
@@ -115,4 +115,4 @@ Object.defineProperty(exports, "logs_exports", {
|
|
|
115
115
|
}
|
|
116
116
|
});
|
|
117
117
|
|
|
118
|
-
//# sourceMappingURL=logs-
|
|
118
|
+
//# sourceMappingURL=logs-BJN3M88A.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-
|
|
1
|
+
{"version":3,"file":"logs-BJN3M88A.cjs","names":["createRoute","listLogTransportsResponseSchema","handleError","listLogsQuerySchema","listLogsResponseSchema","parseFilters","runIdSchema"],"sources":["../src/server/handlers/logs.ts"],"sourcesContent":["import { runIdSchema } from '../schemas/common';\nimport { listLogsQuerySchema, listLogsResponseSchema, listLogTransportsResponseSchema } from '../schemas/logs';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { parseFilters, validateBody } from './utils';\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_LOG_TRANSPORTS_ROUTE = createRoute({\n method: 'GET',\n path: '/logs/transports',\n responseType: 'json',\n responseSchema: listLogTransportsResponseSchema,\n summary: 'List log transports',\n description: 'Returns a list of all available log transports',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const logger = mastra.getLogger();\n const transports = logger.getTransports();\n\n return {\n transports: transports ? [...transports.keys()] : [],\n };\n } catch (error) {\n return handleError(error, 'Error getting log Transports');\n }\n },\n});\n\nexport const LIST_LOGS_ROUTE = createRoute({\n method: 'GET',\n path: '/logs',\n responseType: 'json',\n queryParamSchema: listLogsQuerySchema,\n responseSchema: listLogsResponseSchema,\n summary: 'List logs',\n description:\n 'Returns logs from a specific transport with optional filtering by date range, log level, and custom filters',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { transportId, fromDate, toDate, logLevel, filters: _filters, page, perPage } = params;\n\n validateBody({ transportId });\n\n // Parse filter query parameter if present\n const filters = parseFilters(_filters);\n\n const logs = await mastra.listLogs(transportId!, {\n fromDate,\n toDate,\n logLevel,\n filters,\n page: page ? Number(page) : undefined,\n perPage: perPage ? Number(perPage) : undefined,\n });\n return logs;\n } catch (error) {\n return handleError(error, 'Error getting logs');\n }\n },\n});\n\nexport const LIST_LOGS_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/logs/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listLogsQuerySchema,\n responseSchema: listLogsResponseSchema,\n summary: 'List logs by run ID',\n description: 'Returns all logs for a specific execution run from a transport',\n tags: ['Logs'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { transportId, fromDate, toDate, logLevel, filters: _filters, page, perPage } = params;\n\n validateBody({ runId, transportId });\n\n // Parse filter query parameter if present\n const filters = parseFilters(_filters);\n\n const logs = await mastra.listLogsByRunId({\n runId: runId!,\n transportId: transportId!,\n fromDate,\n toDate,\n logLevel,\n filters,\n page: page ? Number(page) : undefined,\n perPage: perPage ? Number(perPage) : undefined,\n });\n return logs;\n } catch (error) {\n return handleError(error, 'Error getting logs by run ID');\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;AAUA,MAAa,4BAA4BA,sBAAAA,YAAY;CACnD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgBC,aAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,aAAa;EAC7B,IAAI;GAEF,MAAM,aADS,OAAO,UACE,CAAC,CAAC,cAAc;GAExC,OAAO,EACL,YAAY,aAAa,CAAC,GAAG,WAAW,KAAK,CAAC,IAAI,CAAC,EACrD;EACF,SAAS,OAAO;GACd,OAAOC,8BAAAA,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC;AAED,MAAa,kBAAkBF,sBAAAA,YAAY;CACzC,QAAQ;CACR,MAAM;CACN,cAAc;CACd,kBAAkBG,aAAAA;CAClB,gBAAgBC,aAAAA;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,GAAG,aAAa;EACxC,IAAI;GACF,MAAM,EAAE,aAAa,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,YAAY;GAEtF,cAAA,aAAa,EAAE,YAAY,CAAC;GAG5B,MAAM,UAAUC,cAAAA,aAAa,QAAQ;GAUrC,OAAO,MARY,OAAO,SAAS,aAAc;IAC/C;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,IAAI,IAAI,KAAA;IAC5B,SAAS,UAAU,OAAO,OAAO,IAAI,KAAA;GACvC,CAAC;EAEH,SAAS,OAAO;GACd,OAAOH,8BAAAA,YAAY,OAAO,oBAAoB;EAChD;CACF;AACF,CAAC;AAED,MAAa,4BAA4BF,sBAAAA,YAAY;CACnD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiBM,eAAAA;CACjB,kBAAkBH,aAAAA;CAClB,gBAAgBC,aAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,MAAM;CACb,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,OAAO,GAAG,aAAa;EAC/C,IAAI;GACF,MAAM,EAAE,aAAa,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,YAAY;GAEtF,cAAA,aAAa;IAAE;IAAO;GAAY,CAAC;GAGnC,MAAM,UAAUC,cAAAA,aAAa,QAAQ;GAYrC,OAAO,MAVY,OAAO,gBAAgB;IACjC;IACM;IACb;IACA;IACA;IACA;IACA,MAAM,OAAO,OAAO,IAAI,IAAI,KAAA;IAC5B,SAAS,UAAU,OAAO,OAAO,IAAI,KAAA;GACvC,CAAC;EAEH,SAAS,OAAO;GACd,OAAOH,8BAAAA,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-10nMEhjP.cjs");
|
|
2
2
|
const require_http_exception = require("./http-exception-Co3MbFUf.cjs");
|
|
3
3
|
const require_route_builder = require("./route-builder-CvARmqnA.cjs");
|
|
4
|
-
const require_utils = require("./utils-
|
|
4
|
+
const require_utils = require("./utils-9PRHHTGC.cjs");
|
|
5
5
|
const require_mcp = require("./mcp-B7Q8qwjn.cjs");
|
|
6
6
|
let _mastra_core_error = require("@mastra/core/error");
|
|
7
7
|
// src/server/handlers/mcp.ts
|
|
@@ -732,4 +732,4 @@ Object.defineProperty(exports, "mcp_exports", {
|
|
|
732
732
|
}
|
|
733
733
|
});
|
|
734
734
|
|
|
735
|
-
//# sourceMappingURL=mcp-
|
|
735
|
+
//# sourceMappingURL=mcp-B9BILfJP.cjs.map
|