mcp-agent-broker 1.0.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 (32) hide show
  1. package/README.md +31 -0
  2. package/dist/app.js +30 -0
  3. package/dist/infrastructure/db/index.js +44 -0
  4. package/dist/infrastructure/db/schema.js +136 -0
  5. package/dist/infrastructure/redis/index.js +11 -0
  6. package/dist/modules/event/event.service.js +36 -0
  7. package/dist/modules/identity/agent.service.js +56 -0
  8. package/dist/modules/lease/lease.service.js +76 -0
  9. package/dist/modules/task/task.service.js +40 -0
  10. package/dist/transport/mcp/index.js +157 -0
  11. package/dist/workers/outbox-relay.js +57 -0
  12. package/docker-compose.yml +41 -0
  13. package/drizzle.config.ts +10 -0
  14. package/package.json +35 -0
  15. package/src/app.ts +31 -0
  16. package/src/infrastructure/db/index.ts +10 -0
  17. package/src/infrastructure/db/migrations/0000_flawless_vanisher.sql +103 -0
  18. package/src/infrastructure/db/migrations/0001_fearless_sersi.sql +36 -0
  19. package/src/infrastructure/db/migrations/meta/0000_snapshot.json +714 -0
  20. package/src/infrastructure/db/migrations/meta/0001_snapshot.json +947 -0
  21. package/src/infrastructure/db/migrations/meta/_journal.json +20 -0
  22. package/src/infrastructure/db/schema.ts +148 -0
  23. package/src/infrastructure/redis/index.ts +7 -0
  24. package/src/modules/event/event.service.ts +50 -0
  25. package/src/modules/identity/agent.service.ts +58 -0
  26. package/src/modules/lease/lease.service.ts +89 -0
  27. package/src/modules/task/task.service.ts +46 -0
  28. package/src/transport/mcp/index.ts +167 -0
  29. package/src/workers/outbox-relay.ts +61 -0
  30. package/test_client.ts +34 -0
  31. package/test_task.ts +68 -0
  32. package/tsconfig.json +14 -0
@@ -0,0 +1,714 @@
1
+ {
2
+ "id": "d4ceff4e-b536-4d58-a965-f80b5a2fb276",
3
+ "prevId": "00000000-0000-0000-0000-000000000000",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.events": {
8
+ "name": "events",
9
+ "schema": "",
10
+ "columns": {
11
+ "event_seq": {
12
+ "name": "event_seq",
13
+ "type": "bigserial",
14
+ "primaryKey": true,
15
+ "notNull": true
16
+ },
17
+ "event_id": {
18
+ "name": "event_id",
19
+ "type": "uuid",
20
+ "primaryKey": false,
21
+ "notNull": true
22
+ },
23
+ "event_type": {
24
+ "name": "event_type",
25
+ "type": "text",
26
+ "primaryKey": false,
27
+ "notNull": true
28
+ },
29
+ "event_version": {
30
+ "name": "event_version",
31
+ "type": "integer",
32
+ "primaryKey": false,
33
+ "notNull": true
34
+ },
35
+ "workspace_id": {
36
+ "name": "workspace_id",
37
+ "type": "uuid",
38
+ "primaryKey": false,
39
+ "notNull": true
40
+ },
41
+ "aggregate_type": {
42
+ "name": "aggregate_type",
43
+ "type": "text",
44
+ "primaryKey": false,
45
+ "notNull": true
46
+ },
47
+ "aggregate_id": {
48
+ "name": "aggregate_id",
49
+ "type": "uuid",
50
+ "primaryKey": false,
51
+ "notNull": true
52
+ },
53
+ "aggregate_version": {
54
+ "name": "aggregate_version",
55
+ "type": "bigint",
56
+ "primaryKey": false,
57
+ "notNull": true
58
+ },
59
+ "actor_type": {
60
+ "name": "actor_type",
61
+ "type": "text",
62
+ "primaryKey": false,
63
+ "notNull": true
64
+ },
65
+ "actor_id": {
66
+ "name": "actor_id",
67
+ "type": "uuid",
68
+ "primaryKey": false,
69
+ "notNull": false
70
+ },
71
+ "correlation_id": {
72
+ "name": "correlation_id",
73
+ "type": "uuid",
74
+ "primaryKey": false,
75
+ "notNull": true
76
+ },
77
+ "causation_id": {
78
+ "name": "causation_id",
79
+ "type": "uuid",
80
+ "primaryKey": false,
81
+ "notNull": false
82
+ },
83
+ "payload": {
84
+ "name": "payload",
85
+ "type": "jsonb",
86
+ "primaryKey": false,
87
+ "notNull": true
88
+ },
89
+ "occurred_at": {
90
+ "name": "occurred_at",
91
+ "type": "timestamp with time zone",
92
+ "primaryKey": false,
93
+ "notNull": true,
94
+ "default": "now()"
95
+ }
96
+ },
97
+ "indexes": {
98
+ "events_workspace_cursor": {
99
+ "name": "events_workspace_cursor",
100
+ "columns": [
101
+ {
102
+ "expression": "workspace_id",
103
+ "isExpression": false,
104
+ "asc": true,
105
+ "nulls": "last"
106
+ },
107
+ {
108
+ "expression": "event_seq",
109
+ "isExpression": false,
110
+ "asc": true,
111
+ "nulls": "last"
112
+ }
113
+ ],
114
+ "isUnique": false,
115
+ "concurrently": false,
116
+ "method": "btree",
117
+ "with": {}
118
+ }
119
+ },
120
+ "foreignKeys": {},
121
+ "compositePrimaryKeys": {},
122
+ "uniqueConstraints": {
123
+ "events_event_id_unique": {
124
+ "name": "events_event_id_unique",
125
+ "nullsNotDistinct": false,
126
+ "columns": [
127
+ "event_id"
128
+ ]
129
+ },
130
+ "events_aggregate_type_aggregate_id_aggregate_version_unique": {
131
+ "name": "events_aggregate_type_aggregate_id_aggregate_version_unique",
132
+ "nullsNotDistinct": false,
133
+ "columns": [
134
+ "aggregate_type",
135
+ "aggregate_id",
136
+ "aggregate_version"
137
+ ]
138
+ }
139
+ },
140
+ "policies": {},
141
+ "checkConstraints": {},
142
+ "isRLSEnabled": false
143
+ },
144
+ "public.idempotency_records": {
145
+ "name": "idempotency_records",
146
+ "schema": "",
147
+ "columns": {
148
+ "principal_id": {
149
+ "name": "principal_id",
150
+ "type": "uuid",
151
+ "primaryKey": false,
152
+ "notNull": true
153
+ },
154
+ "operation": {
155
+ "name": "operation",
156
+ "type": "text",
157
+ "primaryKey": false,
158
+ "notNull": true
159
+ },
160
+ "idempotency_key": {
161
+ "name": "idempotency_key",
162
+ "type": "text",
163
+ "primaryKey": false,
164
+ "notNull": true
165
+ },
166
+ "request_hash": {
167
+ "name": "request_hash",
168
+ "type": "text",
169
+ "primaryKey": false,
170
+ "notNull": true
171
+ },
172
+ "response_json": {
173
+ "name": "response_json",
174
+ "type": "jsonb",
175
+ "primaryKey": false,
176
+ "notNull": false
177
+ },
178
+ "response_status": {
179
+ "name": "response_status",
180
+ "type": "text",
181
+ "primaryKey": false,
182
+ "notNull": true
183
+ },
184
+ "resource_id": {
185
+ "name": "resource_id",
186
+ "type": "uuid",
187
+ "primaryKey": false,
188
+ "notNull": false
189
+ },
190
+ "created_at": {
191
+ "name": "created_at",
192
+ "type": "timestamp with time zone",
193
+ "primaryKey": false,
194
+ "notNull": true,
195
+ "default": "now()"
196
+ },
197
+ "expires_at": {
198
+ "name": "expires_at",
199
+ "type": "timestamp with time zone",
200
+ "primaryKey": false,
201
+ "notNull": true
202
+ }
203
+ },
204
+ "indexes": {
205
+ "idempotency_expiry": {
206
+ "name": "idempotency_expiry",
207
+ "columns": [
208
+ {
209
+ "expression": "expires_at",
210
+ "isExpression": false,
211
+ "asc": true,
212
+ "nulls": "last"
213
+ }
214
+ ],
215
+ "isUnique": false,
216
+ "concurrently": false,
217
+ "method": "btree",
218
+ "with": {}
219
+ }
220
+ },
221
+ "foreignKeys": {},
222
+ "compositePrimaryKeys": {
223
+ "idempotency_records_principal_id_operation_idempotency_key_pk": {
224
+ "name": "idempotency_records_principal_id_operation_idempotency_key_pk",
225
+ "columns": [
226
+ "principal_id",
227
+ "operation",
228
+ "idempotency_key"
229
+ ]
230
+ }
231
+ },
232
+ "uniqueConstraints": {},
233
+ "policies": {},
234
+ "checkConstraints": {},
235
+ "isRLSEnabled": false
236
+ },
237
+ "public.leases": {
238
+ "name": "leases",
239
+ "schema": "",
240
+ "columns": {
241
+ "id": {
242
+ "name": "id",
243
+ "type": "uuid",
244
+ "primaryKey": true,
245
+ "notNull": true
246
+ },
247
+ "workspace_id": {
248
+ "name": "workspace_id",
249
+ "type": "uuid",
250
+ "primaryKey": false,
251
+ "notNull": true
252
+ },
253
+ "task_id": {
254
+ "name": "task_id",
255
+ "type": "uuid",
256
+ "primaryKey": false,
257
+ "notNull": true
258
+ },
259
+ "task_attempt_id": {
260
+ "name": "task_attempt_id",
261
+ "type": "uuid",
262
+ "primaryKey": false,
263
+ "notNull": false
264
+ },
265
+ "agent_instance_id": {
266
+ "name": "agent_instance_id",
267
+ "type": "uuid",
268
+ "primaryKey": false,
269
+ "notNull": true
270
+ },
271
+ "lease_type": {
272
+ "name": "lease_type",
273
+ "type": "lease_type",
274
+ "typeSchema": "public",
275
+ "primaryKey": false,
276
+ "notNull": true
277
+ },
278
+ "status": {
279
+ "name": "status",
280
+ "type": "lease_status",
281
+ "typeSchema": "public",
282
+ "primaryKey": false,
283
+ "notNull": true
284
+ },
285
+ "fencing_token": {
286
+ "name": "fencing_token",
287
+ "type": "bigint",
288
+ "primaryKey": false,
289
+ "notNull": true
290
+ },
291
+ "acquired_at": {
292
+ "name": "acquired_at",
293
+ "type": "timestamp with time zone",
294
+ "primaryKey": false,
295
+ "notNull": true
296
+ },
297
+ "renewed_at": {
298
+ "name": "renewed_at",
299
+ "type": "timestamp with time zone",
300
+ "primaryKey": false,
301
+ "notNull": true
302
+ },
303
+ "expires_at": {
304
+ "name": "expires_at",
305
+ "type": "timestamp with time zone",
306
+ "primaryKey": false,
307
+ "notNull": true
308
+ },
309
+ "released_at": {
310
+ "name": "released_at",
311
+ "type": "timestamp with time zone",
312
+ "primaryKey": false,
313
+ "notNull": false
314
+ }
315
+ },
316
+ "indexes": {},
317
+ "foreignKeys": {
318
+ "leases_task_id_tasks_id_fk": {
319
+ "name": "leases_task_id_tasks_id_fk",
320
+ "tableFrom": "leases",
321
+ "tableTo": "tasks",
322
+ "columnsFrom": [
323
+ "task_id"
324
+ ],
325
+ "columnsTo": [
326
+ "id"
327
+ ],
328
+ "onDelete": "no action",
329
+ "onUpdate": "no action"
330
+ },
331
+ "leases_task_attempt_id_task_attempts_id_fk": {
332
+ "name": "leases_task_attempt_id_task_attempts_id_fk",
333
+ "tableFrom": "leases",
334
+ "tableTo": "task_attempts",
335
+ "columnsFrom": [
336
+ "task_attempt_id"
337
+ ],
338
+ "columnsTo": [
339
+ "id"
340
+ ],
341
+ "onDelete": "no action",
342
+ "onUpdate": "no action"
343
+ }
344
+ },
345
+ "compositePrimaryKeys": {},
346
+ "uniqueConstraints": {
347
+ "leases_task_id_lease_type_fencing_token_unique": {
348
+ "name": "leases_task_id_lease_type_fencing_token_unique",
349
+ "nullsNotDistinct": false,
350
+ "columns": [
351
+ "task_id",
352
+ "lease_type",
353
+ "fencing_token"
354
+ ]
355
+ }
356
+ },
357
+ "policies": {},
358
+ "checkConstraints": {},
359
+ "isRLSEnabled": false
360
+ },
361
+ "public.outbox": {
362
+ "name": "outbox",
363
+ "schema": "",
364
+ "columns": {
365
+ "event_id": {
366
+ "name": "event_id",
367
+ "type": "uuid",
368
+ "primaryKey": true,
369
+ "notNull": true
370
+ },
371
+ "available_at": {
372
+ "name": "available_at",
373
+ "type": "timestamp with time zone",
374
+ "primaryKey": false,
375
+ "notNull": true,
376
+ "default": "now()"
377
+ },
378
+ "attempts": {
379
+ "name": "attempts",
380
+ "type": "integer",
381
+ "primaryKey": false,
382
+ "notNull": true,
383
+ "default": 0
384
+ },
385
+ "locked_by": {
386
+ "name": "locked_by",
387
+ "type": "text",
388
+ "primaryKey": false,
389
+ "notNull": false
390
+ },
391
+ "locked_until": {
392
+ "name": "locked_until",
393
+ "type": "timestamp with time zone",
394
+ "primaryKey": false,
395
+ "notNull": false
396
+ },
397
+ "published_at": {
398
+ "name": "published_at",
399
+ "type": "timestamp with time zone",
400
+ "primaryKey": false,
401
+ "notNull": false
402
+ },
403
+ "last_error": {
404
+ "name": "last_error",
405
+ "type": "text",
406
+ "primaryKey": false,
407
+ "notNull": false
408
+ },
409
+ "created_at": {
410
+ "name": "created_at",
411
+ "type": "timestamp with time zone",
412
+ "primaryKey": false,
413
+ "notNull": true,
414
+ "default": "now()"
415
+ }
416
+ },
417
+ "indexes": {},
418
+ "foreignKeys": {
419
+ "outbox_event_id_events_event_id_fk": {
420
+ "name": "outbox_event_id_events_event_id_fk",
421
+ "tableFrom": "outbox",
422
+ "tableTo": "events",
423
+ "columnsFrom": [
424
+ "event_id"
425
+ ],
426
+ "columnsTo": [
427
+ "event_id"
428
+ ],
429
+ "onDelete": "cascade",
430
+ "onUpdate": "no action"
431
+ }
432
+ },
433
+ "compositePrimaryKeys": {},
434
+ "uniqueConstraints": {},
435
+ "policies": {},
436
+ "checkConstraints": {},
437
+ "isRLSEnabled": false
438
+ },
439
+ "public.task_attempts": {
440
+ "name": "task_attempts",
441
+ "schema": "",
442
+ "columns": {
443
+ "id": {
444
+ "name": "id",
445
+ "type": "uuid",
446
+ "primaryKey": true,
447
+ "notNull": true
448
+ },
449
+ "workspace_id": {
450
+ "name": "workspace_id",
451
+ "type": "uuid",
452
+ "primaryKey": false,
453
+ "notNull": true
454
+ },
455
+ "task_id": {
456
+ "name": "task_id",
457
+ "type": "uuid",
458
+ "primaryKey": false,
459
+ "notNull": true
460
+ },
461
+ "attempt_number": {
462
+ "name": "attempt_number",
463
+ "type": "integer",
464
+ "primaryKey": false,
465
+ "notNull": true
466
+ },
467
+ "agent_instance_id": {
468
+ "name": "agent_instance_id",
469
+ "type": "uuid",
470
+ "primaryKey": false,
471
+ "notNull": true
472
+ },
473
+ "status": {
474
+ "name": "status",
475
+ "type": "text",
476
+ "primaryKey": false,
477
+ "notNull": true
478
+ },
479
+ "started_at": {
480
+ "name": "started_at",
481
+ "type": "timestamp with time zone",
482
+ "primaryKey": false,
483
+ "notNull": false
484
+ },
485
+ "ended_at": {
486
+ "name": "ended_at",
487
+ "type": "timestamp with time zone",
488
+ "primaryKey": false,
489
+ "notNull": false
490
+ },
491
+ "outcome": {
492
+ "name": "outcome",
493
+ "type": "text",
494
+ "primaryKey": false,
495
+ "notNull": false
496
+ }
497
+ },
498
+ "indexes": {},
499
+ "foreignKeys": {
500
+ "task_attempts_task_id_tasks_id_fk": {
501
+ "name": "task_attempts_task_id_tasks_id_fk",
502
+ "tableFrom": "task_attempts",
503
+ "tableTo": "tasks",
504
+ "columnsFrom": [
505
+ "task_id"
506
+ ],
507
+ "columnsTo": [
508
+ "id"
509
+ ],
510
+ "onDelete": "no action",
511
+ "onUpdate": "no action"
512
+ }
513
+ },
514
+ "compositePrimaryKeys": {},
515
+ "uniqueConstraints": {
516
+ "task_attempts_task_id_attempt_number_unique": {
517
+ "name": "task_attempts_task_id_attempt_number_unique",
518
+ "nullsNotDistinct": false,
519
+ "columns": [
520
+ "task_id",
521
+ "attempt_number"
522
+ ]
523
+ }
524
+ },
525
+ "policies": {},
526
+ "checkConstraints": {},
527
+ "isRLSEnabled": false
528
+ },
529
+ "public.tasks": {
530
+ "name": "tasks",
531
+ "schema": "",
532
+ "columns": {
533
+ "id": {
534
+ "name": "id",
535
+ "type": "uuid",
536
+ "primaryKey": true,
537
+ "notNull": true
538
+ },
539
+ "workspace_id": {
540
+ "name": "workspace_id",
541
+ "type": "uuid",
542
+ "primaryKey": false,
543
+ "notNull": true
544
+ },
545
+ "repository_id": {
546
+ "name": "repository_id",
547
+ "type": "uuid",
548
+ "primaryKey": false,
549
+ "notNull": true
550
+ },
551
+ "session_id": {
552
+ "name": "session_id",
553
+ "type": "uuid",
554
+ "primaryKey": false,
555
+ "notNull": false
556
+ },
557
+ "objective": {
558
+ "name": "objective",
559
+ "type": "text",
560
+ "primaryKey": false,
561
+ "notNull": true
562
+ },
563
+ "description": {
564
+ "name": "description",
565
+ "type": "text",
566
+ "primaryKey": false,
567
+ "notNull": true,
568
+ "default": "''"
569
+ },
570
+ "acceptance_criteria": {
571
+ "name": "acceptance_criteria",
572
+ "type": "jsonb",
573
+ "primaryKey": false,
574
+ "notNull": true,
575
+ "default": "'[]'"
576
+ },
577
+ "constraints": {
578
+ "name": "constraints",
579
+ "type": "jsonb",
580
+ "primaryKey": false,
581
+ "notNull": true,
582
+ "default": "'[]'"
583
+ },
584
+ "priority": {
585
+ "name": "priority",
586
+ "type": "smallint",
587
+ "primaryKey": false,
588
+ "notNull": true,
589
+ "default": 3
590
+ },
591
+ "state": {
592
+ "name": "state",
593
+ "type": "task_state",
594
+ "typeSchema": "public",
595
+ "primaryKey": false,
596
+ "notNull": true,
597
+ "default": "'draft'"
598
+ },
599
+ "base_commit_sha": {
600
+ "name": "base_commit_sha",
601
+ "type": "text",
602
+ "primaryKey": false,
603
+ "notNull": false
604
+ },
605
+ "active_execution_lease_id": {
606
+ "name": "active_execution_lease_id",
607
+ "type": "uuid",
608
+ "primaryKey": false,
609
+ "notNull": false
610
+ },
611
+ "active_review_lease_id": {
612
+ "name": "active_review_lease_id",
613
+ "type": "uuid",
614
+ "primaryKey": false,
615
+ "notNull": false
616
+ },
617
+ "next_fencing_token": {
618
+ "name": "next_fencing_token",
619
+ "type": "bigint",
620
+ "primaryKey": false,
621
+ "notNull": true,
622
+ "default": 0
623
+ },
624
+ "version": {
625
+ "name": "version",
626
+ "type": "bigint",
627
+ "primaryKey": false,
628
+ "notNull": true,
629
+ "default": 1
630
+ },
631
+ "created_by": {
632
+ "name": "created_by",
633
+ "type": "uuid",
634
+ "primaryKey": false,
635
+ "notNull": true
636
+ },
637
+ "created_at": {
638
+ "name": "created_at",
639
+ "type": "timestamp with time zone",
640
+ "primaryKey": false,
641
+ "notNull": true,
642
+ "default": "now()"
643
+ },
644
+ "updated_at": {
645
+ "name": "updated_at",
646
+ "type": "timestamp with time zone",
647
+ "primaryKey": false,
648
+ "notNull": true,
649
+ "default": "now()"
650
+ },
651
+ "completed_at": {
652
+ "name": "completed_at",
653
+ "type": "timestamp with time zone",
654
+ "primaryKey": false,
655
+ "notNull": false
656
+ }
657
+ },
658
+ "indexes": {},
659
+ "foreignKeys": {},
660
+ "compositePrimaryKeys": {},
661
+ "uniqueConstraints": {},
662
+ "policies": {},
663
+ "checkConstraints": {},
664
+ "isRLSEnabled": false
665
+ }
666
+ },
667
+ "enums": {
668
+ "public.lease_status": {
669
+ "name": "lease_status",
670
+ "schema": "public",
671
+ "values": [
672
+ "active",
673
+ "released",
674
+ "expired",
675
+ "revoked"
676
+ ]
677
+ },
678
+ "public.lease_type": {
679
+ "name": "lease_type",
680
+ "schema": "public",
681
+ "values": [
682
+ "execution",
683
+ "review"
684
+ ]
685
+ },
686
+ "public.task_state": {
687
+ "name": "task_state",
688
+ "schema": "public",
689
+ "values": [
690
+ "draft",
691
+ "ready",
692
+ "leased",
693
+ "running",
694
+ "blocked",
695
+ "awaiting_review",
696
+ "changes_requested",
697
+ "completed",
698
+ "failed",
699
+ "canceled",
700
+ "superseded"
701
+ ]
702
+ }
703
+ },
704
+ "schemas": {},
705
+ "sequences": {},
706
+ "roles": {},
707
+ "policies": {},
708
+ "views": {},
709
+ "_meta": {
710
+ "columns": {},
711
+ "schemas": {},
712
+ "tables": {}
713
+ }
714
+ }