@backendkit-labs/agent-web 0.1.0 → 0.4.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/auth/JwtAuth.d.ts +42 -0
- package/dist/auth/JwtAuth.d.ts.map +1 -0
- package/dist/auth/JwtAuth.js +69 -0
- package/dist/auth/JwtAuth.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsCollector.d.ts +46 -0
- package/dist/metrics/MetricsCollector.d.ts.map +1 -0
- package/dist/metrics/MetricsCollector.js +95 -0
- package/dist/metrics/MetricsCollector.js.map +1 -0
- package/dist/server/AgentServer.d.ts +46 -2
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +37 -4
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +2 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +20 -5
- package/dist/server/routes.js.map +1 -1
- package/dist/session/SessionManager.d.ts +12 -2
- package/dist/session/SessionManager.d.ts.map +1 -1
- package/dist/session/SessionManager.js +29 -6
- package/dist/session/SessionManager.js.map +1 -1
- package/dist/store/SessionMetaStore.d.ts +46 -0
- package/dist/store/SessionMetaStore.d.ts.map +1 -0
- package/dist/store/SessionMetaStore.js +72 -0
- package/dist/store/SessionMetaStore.js.map +1 -0
- package/dist/transport/HeadlessTransport.d.ts +21 -0
- package/dist/transport/HeadlessTransport.d.ts.map +1 -0
- package/dist/transport/HeadlessTransport.js +42 -0
- package/dist/transport/HeadlessTransport.js.map +1 -0
- package/dist/trigger/TriggerBus.d.ts +129 -0
- package/dist/trigger/TriggerBus.d.ts.map +1 -0
- package/dist/trigger/TriggerBus.js +249 -0
- package/dist/trigger/TriggerBus.js.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TriggerBus = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const uuid_1 = require("uuid");
|
|
39
|
+
const HeadlessTransport_1 = require("../transport/HeadlessTransport");
|
|
40
|
+
// ── TriggerBus ────────────────────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Orchestrates autonomous agent runs triggered by cron schedules or
|
|
43
|
+
* inbound HTTP webhooks.
|
|
44
|
+
*
|
|
45
|
+
* Integrates with AgentServer via the `triggers` option so webhook routes
|
|
46
|
+
* are registered on the same Fastify instance and cron jobs start alongside
|
|
47
|
+
* the server. Can also be used standalone (no AgentServer required).
|
|
48
|
+
*
|
|
49
|
+
* All runs are broadcast to the MonitorBus (if supplied) so the kanban board
|
|
50
|
+
* shows autonomous runs alongside interactive chat sessions.
|
|
51
|
+
*
|
|
52
|
+
* Usage:
|
|
53
|
+
* ```ts
|
|
54
|
+
* const triggers = new TriggerBus(enterprise.engineFactory)
|
|
55
|
+
* .addCron({
|
|
56
|
+
* name: 'daily-report',
|
|
57
|
+
* schedule: '0 9 * * 1-5',
|
|
58
|
+
* buildPrompt: () => 'Generate the daily ops summary.',
|
|
59
|
+
* onComplete: ({ output }) => console.log(output),
|
|
60
|
+
* })
|
|
61
|
+
* .addWebhook({
|
|
62
|
+
* name: 'github-issue',
|
|
63
|
+
* path: '/triggers/github',
|
|
64
|
+
* secret: process.env.GITHUB_WEBHOOK_SECRET,
|
|
65
|
+
* buildPrompt: (body) => `New GitHub issue: ${JSON.stringify(body)}`,
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* const server = new AgentServer({ port: 4001, engineFactory, triggers });
|
|
69
|
+
* await server.start();
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
class TriggerBus {
|
|
73
|
+
engineFactory;
|
|
74
|
+
monitorBus;
|
|
75
|
+
cronDefs = [];
|
|
76
|
+
webhookDefs = [];
|
|
77
|
+
queueDefs = [];
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
+
cronTasks = []; // node-cron ScheduledTask — loaded lazily
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
queueWorkers = []; // BullMQ Worker[] — loaded lazily
|
|
82
|
+
started = false;
|
|
83
|
+
constructor(engineFactory, monitorBus) {
|
|
84
|
+
this.engineFactory = engineFactory;
|
|
85
|
+
this.monitorBus = monitorBus;
|
|
86
|
+
}
|
|
87
|
+
addCron(def) {
|
|
88
|
+
this.cronDefs.push(def);
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
addWebhook(def) {
|
|
92
|
+
this.webhookDefs.push(def);
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
addQueue(def) {
|
|
96
|
+
this.queueDefs.push(def);
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
// ── Fastify integration ───────────────────────────────────────────────────
|
|
100
|
+
/** Register webhook routes on a Fastify instance. Called by AgentServer. */
|
|
101
|
+
registerRoutes(app) {
|
|
102
|
+
for (const def of this.webhookDefs) {
|
|
103
|
+
const method = (def.method ?? 'POST').toLowerCase();
|
|
104
|
+
app[method](def.path, async (req, reply) => {
|
|
105
|
+
if (def.secret) {
|
|
106
|
+
const sig = (req.headers['x-hub-signature-256'] ?? '');
|
|
107
|
+
const rawBody = JSON.stringify(req.body);
|
|
108
|
+
if (!verifyHmac(rawBody, sig, def.secret)) {
|
|
109
|
+
return reply.code(401).send({ error: 'Invalid webhook signature' });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Fire async — respond immediately so the caller doesn't time out
|
|
113
|
+
void this.fire(def, req.body).catch(err => def.onError?.(err instanceof Error ? err : new Error(String(err)), def.name));
|
|
114
|
+
return reply.code(202).send({ queued: true, trigger: def.name });
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ── Lifecycle ─────────────────────────────────────────────────────────────
|
|
119
|
+
start() {
|
|
120
|
+
if (this.started)
|
|
121
|
+
return;
|
|
122
|
+
this.started = true;
|
|
123
|
+
this.startCrons();
|
|
124
|
+
this.startQueues();
|
|
125
|
+
}
|
|
126
|
+
async close() {
|
|
127
|
+
for (const task of this.cronTasks) {
|
|
128
|
+
try {
|
|
129
|
+
task.stop();
|
|
130
|
+
}
|
|
131
|
+
catch { /* already stopped */ }
|
|
132
|
+
}
|
|
133
|
+
this.cronTasks = [];
|
|
134
|
+
await Promise.allSettled(this.queueWorkers.map(w => w.close().catch(() => undefined)));
|
|
135
|
+
this.queueWorkers = [];
|
|
136
|
+
this.started = false;
|
|
137
|
+
}
|
|
138
|
+
// ── Internal ──────────────────────────────────────────────────────────────
|
|
139
|
+
startCrons() {
|
|
140
|
+
let nodeCron = null;
|
|
141
|
+
try {
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
143
|
+
nodeCron = require('node-cron');
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
if (this.cronDefs.length > 0) {
|
|
147
|
+
console.warn('[TriggerBus] node-cron not found — cron triggers disabled. Run: npm i node-cron');
|
|
148
|
+
}
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
for (const def of this.cronDefs) {
|
|
152
|
+
if (!nodeCron.validate(def.schedule)) {
|
|
153
|
+
console.error(`[TriggerBus] Invalid cron schedule for "${def.name}": ${def.schedule}`);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const task = nodeCron.schedule(def.schedule, () => {
|
|
157
|
+
void this.fire(def).catch(err => def.onError?.(err instanceof Error ? err : new Error(String(err)), def.name));
|
|
158
|
+
});
|
|
159
|
+
this.cronTasks.push(task);
|
|
160
|
+
if (def.runOnStart) {
|
|
161
|
+
void this.fire(def).catch(err => def.onError?.(err instanceof Error ? err : new Error(String(err)), def.name));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
startQueues() {
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
let BullMQ = null;
|
|
168
|
+
try {
|
|
169
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
170
|
+
BullMQ = require('bullmq');
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
if (this.queueDefs.length > 0) {
|
|
174
|
+
console.warn('[TriggerBus] bullmq not found — queue triggers disabled. Run: npm i bullmq');
|
|
175
|
+
}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
for (const def of this.queueDefs) {
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
+
const worker = new BullMQ.Worker(def.queueName,
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
182
|
+
async (job) => {
|
|
183
|
+
try {
|
|
184
|
+
await this.fire(def, job.data);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
await def.onError?.(err instanceof Error ? err : new Error(String(err)), def.name);
|
|
188
|
+
throw err; // Rethrow so BullMQ marks the job as failed
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
192
|
+
{ connection: def.connection, concurrency: def.concurrency ?? 1 });
|
|
193
|
+
this.queueWorkers.push(worker);
|
|
194
|
+
console.info(`[TriggerBus] Queue worker "${def.name}" listening on "${def.queueName}" ` +
|
|
195
|
+
`(concurrency: ${def.concurrency ?? 1})`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async fire(def, payload) {
|
|
199
|
+
const sessionId = `trigger-${(0, uuid_1.v4)()}`;
|
|
200
|
+
const firedAt = new Date();
|
|
201
|
+
const startMs = Date.now();
|
|
202
|
+
const transport = new HeadlessTransport_1.HeadlessTransport();
|
|
203
|
+
// Fan out to MonitorBus so the kanban shows autonomous runs
|
|
204
|
+
if (this.monitorBus) {
|
|
205
|
+
const bus = this.monitorBus;
|
|
206
|
+
const origEmit = transport.emit.bind(transport);
|
|
207
|
+
transport.emit = (event) => {
|
|
208
|
+
origEmit(event);
|
|
209
|
+
bus.broadcast(sessionId, event);
|
|
210
|
+
};
|
|
211
|
+
bus.notifySessionOpen(sessionId);
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const engine = this.engineFactory(sessionId, transport);
|
|
215
|
+
const prompt = await def.buildPrompt(payload);
|
|
216
|
+
await engine.run(prompt);
|
|
217
|
+
const result = {
|
|
218
|
+
sessionId,
|
|
219
|
+
triggerName: def.name,
|
|
220
|
+
firedAt,
|
|
221
|
+
durationMs: Date.now() - startMs,
|
|
222
|
+
output: transport.getOutput(),
|
|
223
|
+
events: transport.getEvents(),
|
|
224
|
+
};
|
|
225
|
+
await def.onComplete?.(result);
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
this.monitorBus?.notifySessionClose(sessionId);
|
|
229
|
+
transport.close();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.TriggerBus = TriggerBus;
|
|
234
|
+
// ── HMAC helper ───────────────────────────────────────────────────────────────
|
|
235
|
+
function verifyHmac(body, signature, secret) {
|
|
236
|
+
if (!signature)
|
|
237
|
+
return false;
|
|
238
|
+
const expected = `sha256=${crypto
|
|
239
|
+
.createHmac('sha256', secret)
|
|
240
|
+
.update(body)
|
|
241
|
+
.digest('hex')}`;
|
|
242
|
+
try {
|
|
243
|
+
return crypto.timingSafeEqual(Buffer.from(signature, 'utf8'), Buffer.from(expected, 'utf8'));
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=TriggerBus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerBus.js","sourceRoot":"","sources":["../../src/trigger/TriggerBus.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backendkit-labs/agent-web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "HTTP/WebSocket server layer for agent-core — browser-ready streaming agent sessions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,10 +21,20 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@fastify/websocket": "^11.0.0",
|
|
23
23
|
"fastify": "^5.0.0",
|
|
24
|
+
"jsonwebtoken": "^9.0.0",
|
|
25
|
+
"prom-client": "^15.0.0",
|
|
24
26
|
"uuid": "^10.0.0"
|
|
25
27
|
},
|
|
28
|
+
"optionalDependencies": {
|
|
29
|
+
"@fastify/rate-limit": "^9.0.0",
|
|
30
|
+
"bullmq": "^5.0.0",
|
|
31
|
+
"node-cron": "^3.0.0"
|
|
32
|
+
},
|
|
26
33
|
"devDependencies": {
|
|
27
34
|
"@backendkit-labs/agent-core": "*",
|
|
35
|
+
"@types/jsonwebtoken": "^9.0.0",
|
|
36
|
+
"@types/node-cron": "^3.0.0",
|
|
37
|
+
"bullmq": "^5.0.0",
|
|
28
38
|
"@types/node": "^20.0.0",
|
|
29
39
|
"@types/uuid": "^10.0.0",
|
|
30
40
|
"@types/ws": "^8.0.0",
|