@mastra/deployer 1.22.0-alpha.0 → 1.22.0-alpha.2
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 +20 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/server/index.cjs +87 -0
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +87 -0
- package/dist/server/index.js.map +1 -1
- package/package.json +8 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;2CAgZhE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDA+DlG"}
|
package/dist/server/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { Tool } from '@mastra/core/tools';
|
|
|
15
15
|
import { MastraServer as MastraServer$1, normalizeQueryParams, redactStreamChunk } from '@mastra/server/server-adapter';
|
|
16
16
|
import util from 'util';
|
|
17
17
|
import { Buffer as Buffer$1 } from 'buffer';
|
|
18
|
+
import { ViewerRegistry, handleInputMessage } from '@mastra/server/browser-stream';
|
|
18
19
|
import { InMemoryTaskStore } from '@mastra/server/a2a/store';
|
|
19
20
|
import { Hono } from 'hono';
|
|
20
21
|
import { compress } from 'hono/compress';
|
|
@@ -3089,6 +3090,83 @@ var initializer2 = (inst, issues) => {
|
|
|
3089
3090
|
});
|
|
3090
3091
|
};
|
|
3091
3092
|
var ZodError = /* @__PURE__ */ $constructor("ZodError", initializer2);
|
|
3093
|
+
async function setupBrowserStream(app, config2) {
|
|
3094
|
+
let createNodeWebSocket;
|
|
3095
|
+
try {
|
|
3096
|
+
const mod = "@hono/node-ws";
|
|
3097
|
+
const honoNodeWs = await import(
|
|
3098
|
+
/* @vite-ignore */
|
|
3099
|
+
/* webpackIgnore: true */
|
|
3100
|
+
mod
|
|
3101
|
+
);
|
|
3102
|
+
createNodeWebSocket = honoNodeWs.createNodeWebSocket;
|
|
3103
|
+
} catch {
|
|
3104
|
+
return null;
|
|
3105
|
+
}
|
|
3106
|
+
const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app });
|
|
3107
|
+
const registry2 = new ViewerRegistry();
|
|
3108
|
+
app.get(
|
|
3109
|
+
"/browser/:agentId/stream",
|
|
3110
|
+
upgradeWebSocket((c) => {
|
|
3111
|
+
const agentId = c.req.param("agentId");
|
|
3112
|
+
const threadId = c.req.query("threadId");
|
|
3113
|
+
const viewerKey = threadId ? `${agentId}:${threadId}` : agentId;
|
|
3114
|
+
return {
|
|
3115
|
+
onOpen(_event, ws) {
|
|
3116
|
+
ws.send(JSON.stringify({ status: "connected" }));
|
|
3117
|
+
void registry2.addViewer(viewerKey, ws, config2.getToolset, agentId, threadId);
|
|
3118
|
+
},
|
|
3119
|
+
onMessage(event, _ws) {
|
|
3120
|
+
const data = typeof event.data === "string" ? event.data : null;
|
|
3121
|
+
if (data) {
|
|
3122
|
+
handleInputMessage(data, config2.getToolset, agentId, threadId);
|
|
3123
|
+
}
|
|
3124
|
+
},
|
|
3125
|
+
onClose(_event, ws) {
|
|
3126
|
+
void registry2.removeViewer(viewerKey, ws);
|
|
3127
|
+
},
|
|
3128
|
+
onError(event, ws) {
|
|
3129
|
+
console.error("[BrowserStream] WebSocket error:", event);
|
|
3130
|
+
void registry2.removeViewer(viewerKey, ws);
|
|
3131
|
+
}
|
|
3132
|
+
};
|
|
3133
|
+
})
|
|
3134
|
+
);
|
|
3135
|
+
app.post("/api/agents/:agentId/browser/close", async (c) => {
|
|
3136
|
+
const agentId = c.req.param("agentId");
|
|
3137
|
+
if (!agentId) {
|
|
3138
|
+
return c.json({ error: "Agent ID is required" }, 400);
|
|
3139
|
+
}
|
|
3140
|
+
const toolset = config2.getToolset(agentId);
|
|
3141
|
+
if (!toolset) {
|
|
3142
|
+
return c.json({ error: "No browser session for this agent" }, 404);
|
|
3143
|
+
}
|
|
3144
|
+
try {
|
|
3145
|
+
let threadId;
|
|
3146
|
+
try {
|
|
3147
|
+
const body = await c.req.json();
|
|
3148
|
+
threadId = body?.threadId;
|
|
3149
|
+
} catch {
|
|
3150
|
+
}
|
|
3151
|
+
const scope = toolset.getScope();
|
|
3152
|
+
const viewerKey = threadId ? `${agentId}:${threadId}` : agentId;
|
|
3153
|
+
if (scope === "thread" && threadId) {
|
|
3154
|
+
await registry2.closeBrowserSession(viewerKey);
|
|
3155
|
+
if ("closeThreadSession" in toolset && typeof toolset.closeThreadSession === "function") {
|
|
3156
|
+
await toolset.closeThreadSession(threadId);
|
|
3157
|
+
}
|
|
3158
|
+
} else {
|
|
3159
|
+
await registry2.closeBrowserSession(viewerKey);
|
|
3160
|
+
await toolset.close();
|
|
3161
|
+
}
|
|
3162
|
+
return c.json({ success: true });
|
|
3163
|
+
} catch (error) {
|
|
3164
|
+
console.error(`[BrowserStream] Error closing browser for ${agentId}:`, error);
|
|
3165
|
+
return c.json({ error: "Failed to close browser" }, 500);
|
|
3166
|
+
}
|
|
3167
|
+
});
|
|
3168
|
+
return { injectWebSocket, registry: registry2 };
|
|
3169
|
+
}
|
|
3092
3170
|
var _hasPermissionPromise;
|
|
3093
3171
|
function loadHasPermission() {
|
|
3094
3172
|
if (!_hasPermissionPromise) {
|
|
@@ -3994,6 +4072,12 @@ async function createHonoServer(mastra, options = {
|
|
|
3994
4072
|
app.use(m.path, m.handler);
|
|
3995
4073
|
}
|
|
3996
4074
|
}
|
|
4075
|
+
const browserStreamSetup = await setupBrowserStream(app, {
|
|
4076
|
+
getToolset: (agentId) => {
|
|
4077
|
+
const agent = mastra.getAgentById(agentId);
|
|
4078
|
+
return agent?.browser;
|
|
4079
|
+
}
|
|
4080
|
+
});
|
|
3997
4081
|
if (server?.cors === false) {
|
|
3998
4082
|
app.use("*", timeout(server?.timeout ?? 3 * 60 * 1e3));
|
|
3999
4083
|
} else {
|
|
@@ -4212,10 +4296,12 @@ async function createHonoServer(mastra, options = {
|
|
|
4212
4296
|
})
|
|
4213
4297
|
);
|
|
4214
4298
|
}
|
|
4299
|
+
app.injectWebSocket = browserStreamSetup?.injectWebSocket;
|
|
4215
4300
|
return app;
|
|
4216
4301
|
}
|
|
4217
4302
|
async function createNodeServer(mastra, options = { tools: {} }) {
|
|
4218
4303
|
const app = await createHonoServer(mastra, options);
|
|
4304
|
+
const injectWebSocket = app.injectWebSocket;
|
|
4219
4305
|
const serverOptions = mastra.getServer();
|
|
4220
4306
|
const apiPrefix = serverOptions?.apiPrefix ?? "/api";
|
|
4221
4307
|
const key = serverOptions?.https?.key ?? (process.env.MASTRA_HTTPS_KEY ? Buffer.from(process.env.MASTRA_HTTPS_KEY, "base64") : void 0);
|
|
@@ -4258,6 +4344,7 @@ async function createNodeServer(mastra, options = { tools: {} }) {
|
|
|
4258
4344
|
}
|
|
4259
4345
|
}
|
|
4260
4346
|
);
|
|
4347
|
+
injectWebSocket?.(server);
|
|
4261
4348
|
await mastra.startEventEngine();
|
|
4262
4349
|
return server;
|
|
4263
4350
|
}
|