@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.
Files changed (37) hide show
  1. package/dist/auth/JwtAuth.d.ts +42 -0
  2. package/dist/auth/JwtAuth.d.ts.map +1 -0
  3. package/dist/auth/JwtAuth.js +69 -0
  4. package/dist/auth/JwtAuth.js.map +1 -0
  5. package/dist/index.d.ts +10 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +16 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/metrics/MetricsCollector.d.ts +46 -0
  10. package/dist/metrics/MetricsCollector.d.ts.map +1 -0
  11. package/dist/metrics/MetricsCollector.js +95 -0
  12. package/dist/metrics/MetricsCollector.js.map +1 -0
  13. package/dist/server/AgentServer.d.ts +46 -2
  14. package/dist/server/AgentServer.d.ts.map +1 -1
  15. package/dist/server/AgentServer.js +37 -4
  16. package/dist/server/AgentServer.js.map +1 -1
  17. package/dist/server/routes.d.ts +2 -1
  18. package/dist/server/routes.d.ts.map +1 -1
  19. package/dist/server/routes.js +20 -5
  20. package/dist/server/routes.js.map +1 -1
  21. package/dist/session/SessionManager.d.ts +12 -2
  22. package/dist/session/SessionManager.d.ts.map +1 -1
  23. package/dist/session/SessionManager.js +29 -6
  24. package/dist/session/SessionManager.js.map +1 -1
  25. package/dist/store/SessionMetaStore.d.ts +46 -0
  26. package/dist/store/SessionMetaStore.d.ts.map +1 -0
  27. package/dist/store/SessionMetaStore.js +72 -0
  28. package/dist/store/SessionMetaStore.js.map +1 -0
  29. package/dist/transport/HeadlessTransport.d.ts +21 -0
  30. package/dist/transport/HeadlessTransport.d.ts.map +1 -0
  31. package/dist/transport/HeadlessTransport.js +42 -0
  32. package/dist/transport/HeadlessTransport.js.map +1 -0
  33. package/dist/trigger/TriggerBus.d.ts +129 -0
  34. package/dist/trigger/TriggerBus.d.ts.map +1 -0
  35. package/dist/trigger/TriggerBus.js +249 -0
  36. package/dist/trigger/TriggerBus.js.map +1 -0
  37. 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.1.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",