@generacy-ai/orchestrator 0.0.0-preview-20260304013206

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 (274) hide show
  1. package/LICENSE +191 -0
  2. package/dist/auth/api-key.d.ts +63 -0
  3. package/dist/auth/api-key.d.ts.map +1 -0
  4. package/dist/auth/api-key.js +102 -0
  5. package/dist/auth/api-key.js.map +1 -0
  6. package/dist/auth/github-oauth.d.ts +29 -0
  7. package/dist/auth/github-oauth.d.ts.map +1 -0
  8. package/dist/auth/github-oauth.js +136 -0
  9. package/dist/auth/github-oauth.js.map +1 -0
  10. package/dist/auth/index.d.ts +5 -0
  11. package/dist/auth/index.d.ts.map +1 -0
  12. package/dist/auth/index.js +9 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/jwt.d.ts +34 -0
  15. package/dist/auth/jwt.d.ts.map +1 -0
  16. package/dist/auth/jwt.js +74 -0
  17. package/dist/auth/jwt.js.map +1 -0
  18. package/dist/auth/middleware.d.ts +43 -0
  19. package/dist/auth/middleware.d.ts.map +1 -0
  20. package/dist/auth/middleware.js +101 -0
  21. package/dist/auth/middleware.js.map +1 -0
  22. package/dist/config/index.d.ts +3 -0
  23. package/dist/config/index.d.ts.map +1 -0
  24. package/dist/config/index.js +5 -0
  25. package/dist/config/index.js.map +1 -0
  26. package/dist/config/loader.d.ts +21 -0
  27. package/dist/config/loader.d.ts.map +1 -0
  28. package/dist/config/loader.js +295 -0
  29. package/dist/config/loader.js.map +1 -0
  30. package/dist/config/schema.d.ts +733 -0
  31. package/dist/config/schema.d.ts.map +1 -0
  32. package/dist/config/schema.js +174 -0
  33. package/dist/config/schema.js.map +1 -0
  34. package/dist/index.d.ts +24 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +33 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/middleware/error-handler.d.ts +30 -0
  39. package/dist/middleware/error-handler.d.ts.map +1 -0
  40. package/dist/middleware/error-handler.js +173 -0
  41. package/dist/middleware/error-handler.js.map +1 -0
  42. package/dist/middleware/index.d.ts +4 -0
  43. package/dist/middleware/index.d.ts.map +1 -0
  44. package/dist/middleware/index.js +4 -0
  45. package/dist/middleware/index.js.map +1 -0
  46. package/dist/middleware/rate-limit.d.ts +32 -0
  47. package/dist/middleware/rate-limit.d.ts.map +1 -0
  48. package/dist/middleware/rate-limit.js +92 -0
  49. package/dist/middleware/rate-limit.js.map +1 -0
  50. package/dist/middleware/request-logger.d.ts +31 -0
  51. package/dist/middleware/request-logger.d.ts.map +1 -0
  52. package/dist/middleware/request-logger.js +89 -0
  53. package/dist/middleware/request-logger.js.map +1 -0
  54. package/dist/routes/agents.d.ts +7 -0
  55. package/dist/routes/agents.d.ts.map +1 -0
  56. package/dist/routes/agents.js +78 -0
  57. package/dist/routes/agents.js.map +1 -0
  58. package/dist/routes/dispatch.d.ts +8 -0
  59. package/dist/routes/dispatch.d.ts.map +1 -0
  60. package/dist/routes/dispatch.js +46 -0
  61. package/dist/routes/dispatch.js.map +1 -0
  62. package/dist/routes/events.d.ts +14 -0
  63. package/dist/routes/events.d.ts.map +1 -0
  64. package/dist/routes/events.js +240 -0
  65. package/dist/routes/events.js.map +1 -0
  66. package/dist/routes/health.d.ts +14 -0
  67. package/dist/routes/health.d.ts.map +1 -0
  68. package/dist/routes/health.js +132 -0
  69. package/dist/routes/health.js.map +1 -0
  70. package/dist/routes/index.d.ts +36 -0
  71. package/dist/routes/index.d.ts.map +1 -0
  72. package/dist/routes/index.js +34 -0
  73. package/dist/routes/index.js.map +1 -0
  74. package/dist/routes/integrations.d.ts +34 -0
  75. package/dist/routes/integrations.d.ts.map +1 -0
  76. package/dist/routes/integrations.js +81 -0
  77. package/dist/routes/integrations.js.map +1 -0
  78. package/dist/routes/metrics.d.ts +31 -0
  79. package/dist/routes/metrics.d.ts.map +1 -0
  80. package/dist/routes/metrics.js +157 -0
  81. package/dist/routes/metrics.js.map +1 -0
  82. package/dist/routes/pr-webhooks.d.ts +15 -0
  83. package/dist/routes/pr-webhooks.d.ts.map +1 -0
  84. package/dist/routes/pr-webhooks.js +114 -0
  85. package/dist/routes/pr-webhooks.js.map +1 -0
  86. package/dist/routes/queue.d.ts +7 -0
  87. package/dist/routes/queue.d.ts.map +1 -0
  88. package/dist/routes/queue.js +94 -0
  89. package/dist/routes/queue.js.map +1 -0
  90. package/dist/routes/webhooks.d.ts +15 -0
  91. package/dist/routes/webhooks.d.ts.map +1 -0
  92. package/dist/routes/webhooks.js +117 -0
  93. package/dist/routes/webhooks.js.map +1 -0
  94. package/dist/routes/workflows.d.ts +7 -0
  95. package/dist/routes/workflows.d.ts.map +1 -0
  96. package/dist/routes/workflows.js +138 -0
  97. package/dist/routes/workflows.js.map +1 -0
  98. package/dist/server.d.ts +35 -0
  99. package/dist/server.d.ts.map +1 -0
  100. package/dist/server.js +264 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/services/agent-registry.d.ts +89 -0
  103. package/dist/services/agent-registry.d.ts.map +1 -0
  104. package/dist/services/agent-registry.js +173 -0
  105. package/dist/services/agent-registry.js.map +1 -0
  106. package/dist/services/epic-completion-monitor-service.d.ts +69 -0
  107. package/dist/services/epic-completion-monitor-service.d.ts.map +1 -0
  108. package/dist/services/epic-completion-monitor-service.js +200 -0
  109. package/dist/services/epic-completion-monitor-service.js.map +1 -0
  110. package/dist/services/identity.d.ts +41 -0
  111. package/dist/services/identity.d.ts.map +1 -0
  112. package/dist/services/identity.js +91 -0
  113. package/dist/services/identity.js.map +1 -0
  114. package/dist/services/index.d.ts +13 -0
  115. package/dist/services/index.d.ts.map +1 -0
  116. package/dist/services/index.js +13 -0
  117. package/dist/services/index.js.map +1 -0
  118. package/dist/services/label-monitor-service.d.ts +95 -0
  119. package/dist/services/label-monitor-service.d.ts.map +1 -0
  120. package/dist/services/label-monitor-service.js +414 -0
  121. package/dist/services/label-monitor-service.js.map +1 -0
  122. package/dist/services/label-sync-service.d.ts +76 -0
  123. package/dist/services/label-sync-service.d.ts.map +1 -0
  124. package/dist/services/label-sync-service.js +108 -0
  125. package/dist/services/label-sync-service.js.map +1 -0
  126. package/dist/services/phase-tracker-service.d.ts +32 -0
  127. package/dist/services/phase-tracker-service.d.ts.map +1 -0
  128. package/dist/services/phase-tracker-service.js +82 -0
  129. package/dist/services/phase-tracker-service.js.map +1 -0
  130. package/dist/services/pr-feedback-monitor-service.d.ts +86 -0
  131. package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -0
  132. package/dist/services/pr-feedback-monitor-service.js +423 -0
  133. package/dist/services/pr-feedback-monitor-service.js.map +1 -0
  134. package/dist/services/queue-service.d.ts +62 -0
  135. package/dist/services/queue-service.d.ts.map +1 -0
  136. package/dist/services/queue-service.js +147 -0
  137. package/dist/services/queue-service.js.map +1 -0
  138. package/dist/services/redis-queue-adapter.d.ts +35 -0
  139. package/dist/services/redis-queue-adapter.d.ts.map +1 -0
  140. package/dist/services/redis-queue-adapter.js +218 -0
  141. package/dist/services/redis-queue-adapter.js.map +1 -0
  142. package/dist/services/smee-receiver.d.ts +87 -0
  143. package/dist/services/smee-receiver.d.ts.map +1 -0
  144. package/dist/services/smee-receiver.js +225 -0
  145. package/dist/services/smee-receiver.js.map +1 -0
  146. package/dist/services/webhook-setup-service.d.ts +253 -0
  147. package/dist/services/webhook-setup-service.d.ts.map +1 -0
  148. package/dist/services/webhook-setup-service.js +369 -0
  149. package/dist/services/webhook-setup-service.js.map +1 -0
  150. package/dist/services/worker-dispatcher.d.ts +57 -0
  151. package/dist/services/worker-dispatcher.d.ts.map +1 -0
  152. package/dist/services/worker-dispatcher.js +211 -0
  153. package/dist/services/worker-dispatcher.js.map +1 -0
  154. package/dist/services/workflow-service.d.ts +65 -0
  155. package/dist/services/workflow-service.d.ts.map +1 -0
  156. package/dist/services/workflow-service.js +164 -0
  157. package/dist/services/workflow-service.js.map +1 -0
  158. package/dist/sse/events.d.ts +50 -0
  159. package/dist/sse/events.d.ts.map +1 -0
  160. package/dist/sse/events.js +152 -0
  161. package/dist/sse/events.js.map +1 -0
  162. package/dist/sse/index.d.ts +4 -0
  163. package/dist/sse/index.d.ts.map +1 -0
  164. package/dist/sse/index.js +7 -0
  165. package/dist/sse/index.js.map +1 -0
  166. package/dist/sse/stream.d.ts +109 -0
  167. package/dist/sse/stream.d.ts.map +1 -0
  168. package/dist/sse/stream.js +239 -0
  169. package/dist/sse/stream.js.map +1 -0
  170. package/dist/sse/subscriptions.d.ts +91 -0
  171. package/dist/sse/subscriptions.d.ts.map +1 -0
  172. package/dist/sse/subscriptions.js +299 -0
  173. package/dist/sse/subscriptions.js.map +1 -0
  174. package/dist/types/api.d.ts +651 -0
  175. package/dist/types/api.d.ts.map +1 -0
  176. package/dist/types/api.js +169 -0
  177. package/dist/types/api.js.map +1 -0
  178. package/dist/types/index.d.ts +6 -0
  179. package/dist/types/index.d.ts.map +1 -0
  180. package/dist/types/index.js +27 -0
  181. package/dist/types/index.js.map +1 -0
  182. package/dist/types/monitor.d.ts +243 -0
  183. package/dist/types/monitor.d.ts.map +1 -0
  184. package/dist/types/monitor.js +2 -0
  185. package/dist/types/monitor.js.map +1 -0
  186. package/dist/types/problem-details.d.ts +63 -0
  187. package/dist/types/problem-details.d.ts.map +1 -0
  188. package/dist/types/problem-details.js +37 -0
  189. package/dist/types/problem-details.js.map +1 -0
  190. package/dist/types/sse.d.ts +224 -0
  191. package/dist/types/sse.d.ts.map +1 -0
  192. package/dist/types/sse.js +103 -0
  193. package/dist/types/sse.js.map +1 -0
  194. package/dist/types/webhook.d.ts +59 -0
  195. package/dist/types/webhook.d.ts.map +1 -0
  196. package/dist/types/webhook.js +2 -0
  197. package/dist/types/webhook.js.map +1 -0
  198. package/dist/utils/correlation.d.ts +30 -0
  199. package/dist/utils/correlation.d.ts.map +1 -0
  200. package/dist/utils/correlation.js +34 -0
  201. package/dist/utils/correlation.js.map +1 -0
  202. package/dist/utils/index.d.ts +3 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +3 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/shutdown.d.ts +28 -0
  207. package/dist/utils/shutdown.d.ts.map +1 -0
  208. package/dist/utils/shutdown.js +86 -0
  209. package/dist/utils/shutdown.js.map +1 -0
  210. package/dist/worker/claude-cli-worker.d.ts +61 -0
  211. package/dist/worker/claude-cli-worker.d.ts.map +1 -0
  212. package/dist/worker/claude-cli-worker.js +330 -0
  213. package/dist/worker/claude-cli-worker.js.map +1 -0
  214. package/dist/worker/cli-spawner.d.ts +42 -0
  215. package/dist/worker/cli-spawner.d.ts.map +1 -0
  216. package/dist/worker/cli-spawner.js +183 -0
  217. package/dist/worker/cli-spawner.js.map +1 -0
  218. package/dist/worker/config.d.ts +76 -0
  219. package/dist/worker/config.d.ts.map +1 -0
  220. package/dist/worker/config.js +39 -0
  221. package/dist/worker/config.js.map +1 -0
  222. package/dist/worker/epic-post-tasks.d.ts +73 -0
  223. package/dist/worker/epic-post-tasks.d.ts.map +1 -0
  224. package/dist/worker/epic-post-tasks.js +266 -0
  225. package/dist/worker/epic-post-tasks.js.map +1 -0
  226. package/dist/worker/gate-checker.d.ts +22 -0
  227. package/dist/worker/gate-checker.d.ts.map +1 -0
  228. package/dist/worker/gate-checker.js +41 -0
  229. package/dist/worker/gate-checker.js.map +1 -0
  230. package/dist/worker/index.d.ts +13 -0
  231. package/dist/worker/index.d.ts.map +1 -0
  232. package/dist/worker/index.js +19 -0
  233. package/dist/worker/index.js.map +1 -0
  234. package/dist/worker/label-manager.d.ts +89 -0
  235. package/dist/worker/label-manager.d.ts.map +1 -0
  236. package/dist/worker/label-manager.js +200 -0
  237. package/dist/worker/label-manager.js.map +1 -0
  238. package/dist/worker/output-capture.d.ts +58 -0
  239. package/dist/worker/output-capture.d.ts.map +1 -0
  240. package/dist/worker/output-capture.js +153 -0
  241. package/dist/worker/output-capture.js.map +1 -0
  242. package/dist/worker/phase-loop.d.ts +64 -0
  243. package/dist/worker/phase-loop.d.ts.map +1 -0
  244. package/dist/worker/phase-loop.js +185 -0
  245. package/dist/worker/phase-loop.js.map +1 -0
  246. package/dist/worker/phase-resolver.d.ts +62 -0
  247. package/dist/worker/phase-resolver.d.ts.map +1 -0
  248. package/dist/worker/phase-resolver.js +144 -0
  249. package/dist/worker/phase-resolver.js.map +1 -0
  250. package/dist/worker/pr-feedback-handler.d.ts +105 -0
  251. package/dist/worker/pr-feedback-handler.d.ts.map +1 -0
  252. package/dist/worker/pr-feedback-handler.js +391 -0
  253. package/dist/worker/pr-feedback-handler.js.map +1 -0
  254. package/dist/worker/pr-linker.d.ts +69 -0
  255. package/dist/worker/pr-linker.d.ts.map +1 -0
  256. package/dist/worker/pr-linker.js +108 -0
  257. package/dist/worker/pr-linker.js.map +1 -0
  258. package/dist/worker/pr-manager.d.ts +61 -0
  259. package/dist/worker/pr-manager.d.ts.map +1 -0
  260. package/dist/worker/pr-manager.js +140 -0
  261. package/dist/worker/pr-manager.js.map +1 -0
  262. package/dist/worker/repo-checkout.d.ts +63 -0
  263. package/dist/worker/repo-checkout.d.ts.map +1 -0
  264. package/dist/worker/repo-checkout.js +160 -0
  265. package/dist/worker/repo-checkout.js.map +1 -0
  266. package/dist/worker/stage-comment-manager.d.ts +34 -0
  267. package/dist/worker/stage-comment-manager.d.ts.map +1 -0
  268. package/dist/worker/stage-comment-manager.js +114 -0
  269. package/dist/worker/stage-comment-manager.js.map +1 -0
  270. package/dist/worker/types.d.ts +192 -0
  271. package/dist/worker/types.d.ts.map +1 -0
  272. package/dist/worker/types.js +53 -0
  273. package/dist/worker/types.js.map +1 -0
  274. package/package.json +64 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Default health checks
3
+ */
4
+ const defaultChecks = {
5
+ server: async () => 'ok',
6
+ };
7
+ /**
8
+ * Setup health routes
9
+ */
10
+ export async function setupHealthRoutes(server, options = {}) {
11
+ const checks = { ...defaultChecks, ...options.checks };
12
+ // GET /health - Health check endpoint
13
+ server.get('/health', {
14
+ schema: {
15
+ description: 'Health check endpoint',
16
+ tags: ['System'],
17
+ response: {
18
+ 200: {
19
+ type: 'object',
20
+ properties: {
21
+ status: { type: 'string', enum: ['ok', 'degraded', 'error'] },
22
+ timestamp: { type: 'string', format: 'date-time' },
23
+ services: {
24
+ type: 'object',
25
+ additionalProperties: { type: 'string', enum: ['ok', 'error'] },
26
+ },
27
+ },
28
+ },
29
+ 503: {
30
+ type: 'object',
31
+ properties: {
32
+ status: { type: 'string', enum: ['ok', 'degraded', 'error'] },
33
+ timestamp: { type: 'string', format: 'date-time' },
34
+ services: {
35
+ type: 'object',
36
+ additionalProperties: { type: 'string', enum: ['ok', 'error'] },
37
+ },
38
+ },
39
+ },
40
+ },
41
+ },
42
+ }, async (_request, reply) => {
43
+ const services = {};
44
+ let overallStatus = 'ok';
45
+ // Run all health checks
46
+ for (const [name, check] of Object.entries(checks)) {
47
+ try {
48
+ services[name] = await check();
49
+ if (services[name] === 'error') {
50
+ overallStatus = 'degraded';
51
+ }
52
+ }
53
+ catch {
54
+ services[name] = 'error';
55
+ overallStatus = 'degraded';
56
+ }
57
+ }
58
+ // If all services are down, status is error
59
+ const allError = Object.values(services).every((s) => s === 'error');
60
+ if (allError && Object.keys(services).length > 0) {
61
+ overallStatus = 'error';
62
+ }
63
+ const response = {
64
+ status: overallStatus,
65
+ timestamp: new Date().toISOString(),
66
+ services,
67
+ };
68
+ const statusCode = overallStatus === 'error' ? 503 : 200;
69
+ return reply.status(statusCode).send(response);
70
+ });
71
+ // GET /health/live - Liveness probe (Kubernetes)
72
+ server.get('/health/live', {
73
+ schema: {
74
+ description: 'Liveness probe',
75
+ tags: ['System'],
76
+ response: {
77
+ 200: {
78
+ type: 'object',
79
+ properties: {
80
+ status: { type: 'string' },
81
+ },
82
+ },
83
+ },
84
+ },
85
+ }, async (_request, reply) => {
86
+ return reply.send({ status: 'ok' });
87
+ });
88
+ // GET /health/ready - Readiness probe (Kubernetes)
89
+ server.get('/health/ready', {
90
+ schema: {
91
+ description: 'Readiness probe',
92
+ tags: ['System'],
93
+ response: {
94
+ 200: {
95
+ type: 'object',
96
+ properties: {
97
+ status: { type: 'string' },
98
+ },
99
+ },
100
+ 503: {
101
+ type: 'object',
102
+ properties: {
103
+ status: { type: 'string' },
104
+ },
105
+ },
106
+ },
107
+ },
108
+ }, async (_request, reply) => {
109
+ // Check critical services
110
+ let ready = true;
111
+ for (const [, check] of Object.entries(checks)) {
112
+ try {
113
+ const status = await check();
114
+ if (status === 'error') {
115
+ ready = false;
116
+ break;
117
+ }
118
+ }
119
+ catch {
120
+ ready = false;
121
+ break;
122
+ }
123
+ }
124
+ if (ready) {
125
+ return reply.send({ status: 'ok' });
126
+ }
127
+ else {
128
+ return reply.status(503).send({ status: 'not ready' });
129
+ }
130
+ });
131
+ }
132
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import { type HealthCheckOptions } from './health.js';
3
+ import { type IntegrationRegistry } from './integrations.js';
4
+ import type { WorkflowService } from '../services/workflow-service.js';
5
+ import type { QueueService } from '../services/queue-service.js';
6
+ import type { AgentRegistry } from '../services/agent-registry.js';
7
+ /**
8
+ * Route registration options
9
+ */
10
+ export interface RouteRegistrationOptions {
11
+ /** Workflow service */
12
+ workflowService: WorkflowService;
13
+ /** Queue service */
14
+ queueService: QueueService;
15
+ /** Agent registry */
16
+ agentRegistry: AgentRegistry;
17
+ /** Integration registry */
18
+ integrationRegistry: IntegrationRegistry;
19
+ /** Health check options */
20
+ healthCheckOptions?: HealthCheckOptions;
21
+ }
22
+ /**
23
+ * Register all routes
24
+ */
25
+ export declare function registerRoutes(server: FastifyInstance, options: RouteRegistrationOptions): Promise<void>;
26
+ export { setupHealthRoutes, type HealthCheckOptions } from './health.js';
27
+ export { setupMetricsRoutes, initializeMetrics, recordHttpRequest } from './metrics.js';
28
+ export { setupWorkflowRoutes } from './workflows.js';
29
+ export { setupQueueRoutes } from './queue.js';
30
+ export { setupAgentRoutes } from './agents.js';
31
+ export { setupIntegrationRoutes, InMemoryIntegrationRegistry, type IntegrationRegistry, } from './integrations.js';
32
+ export { setupEventsRoutes, getActiveConnectionCount, closeAllSSEConnections, } from './events.js';
33
+ export { setupWebhookRoutes, type WebhookRouteOptions, } from './webhooks.js';
34
+ export { setupPrWebhookRoutes, type PrWebhookRouteOptions, } from './pr-webhooks.js';
35
+ export { setupDispatchRoutes } from './dispatch.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKzE,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uBAAuB;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,oBAAoB;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,qBAAqB;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,2BAA2B;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAaf;AAGD,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { setupHealthRoutes } from './health.js';
2
+ import { setupMetricsRoutes } from './metrics.js';
3
+ import { setupWorkflowRoutes } from './workflows.js';
4
+ import { setupQueueRoutes } from './queue.js';
5
+ import { setupAgentRoutes } from './agents.js';
6
+ import { setupIntegrationRoutes } from './integrations.js';
7
+ import { setupEventsRoutes } from './events.js';
8
+ /**
9
+ * Register all routes
10
+ */
11
+ export async function registerRoutes(server, options) {
12
+ // System routes (no auth required)
13
+ await setupHealthRoutes(server, options.healthCheckOptions);
14
+ await setupMetricsRoutes(server);
15
+ // API routes (auth required)
16
+ await setupWorkflowRoutes(server, options.workflowService);
17
+ await setupQueueRoutes(server, options.queueService);
18
+ await setupAgentRoutes(server, options.agentRegistry);
19
+ await setupIntegrationRoutes(server, options.integrationRegistry);
20
+ // SSE event routes
21
+ await setupEventsRoutes(server);
22
+ }
23
+ // Re-export route setup functions
24
+ export { setupHealthRoutes } from './health.js';
25
+ export { setupMetricsRoutes, initializeMetrics, recordHttpRequest } from './metrics.js';
26
+ export { setupWorkflowRoutes } from './workflows.js';
27
+ export { setupQueueRoutes } from './queue.js';
28
+ export { setupAgentRoutes } from './agents.js';
29
+ export { setupIntegrationRoutes, InMemoryIntegrationRegistry, } from './integrations.js';
30
+ export { setupEventsRoutes, getActiveConnectionCount, closeAllSSEConnections, } from './events.js';
31
+ export { setupWebhookRoutes, } from './webhooks.js';
32
+ export { setupPrWebhookRoutes, } from './pr-webhooks.js';
33
+ export { setupDispatchRoutes } from './dispatch.js';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAA4B,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAqBhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAuB,EACvB,OAAiC;IAEjC,mCAAmC;IACnC,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEjC,6BAA6B;IAC7B,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElE,mBAAmB;IACnB,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAA2B,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAE5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,GAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,GAErB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type { Integration } from '../types/index.js';
3
+ /**
4
+ * Integration registry interface
5
+ */
6
+ export interface IntegrationRegistry {
7
+ getAll(): Promise<Integration[]>;
8
+ get(id: string): Promise<Integration | null>;
9
+ }
10
+ /**
11
+ * In-memory integration registry for development/testing
12
+ */
13
+ export declare class InMemoryIntegrationRegistry implements IntegrationRegistry {
14
+ private integrations;
15
+ getAll(): Promise<Integration[]>;
16
+ get(id: string): Promise<Integration | null>;
17
+ /**
18
+ * Add an integration (for testing)
19
+ */
20
+ add(integration: Integration): void;
21
+ /**
22
+ * Update integration status
23
+ */
24
+ updateStatus(id: string, status: 'connected' | 'disconnected' | 'error', error?: string): boolean;
25
+ /**
26
+ * Clear all integrations (for testing)
27
+ */
28
+ clear(): void;
29
+ }
30
+ /**
31
+ * Setup integration routes
32
+ */
33
+ export declare function setupIntegrationRoutes(server: FastifyInstance, integrationRegistry: IntegrationRegistry): Promise<void>;
34
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,OAAO,CAAC,YAAY,CAAuC;IAErD,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIhC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIlD;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInC;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAYjG;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,eAAe,EACvB,mBAAmB,EAAE,mBAAmB,GACvC,OAAO,CAAC,IAAI,CAAC,CAgDf"}
@@ -0,0 +1,81 @@
1
+ import { requireRead } from '../auth/middleware.js';
2
+ /**
3
+ * In-memory integration registry for development/testing
4
+ */
5
+ export class InMemoryIntegrationRegistry {
6
+ integrations = new Map();
7
+ async getAll() {
8
+ return Array.from(this.integrations.values());
9
+ }
10
+ async get(id) {
11
+ return this.integrations.get(id) ?? null;
12
+ }
13
+ /**
14
+ * Add an integration (for testing)
15
+ */
16
+ add(integration) {
17
+ this.integrations.set(integration.id, integration);
18
+ }
19
+ /**
20
+ * Update integration status
21
+ */
22
+ updateStatus(id, status, error) {
23
+ const integration = this.integrations.get(id);
24
+ if (!integration)
25
+ return false;
26
+ integration.status = status;
27
+ integration.error = error ?? null;
28
+ if (status === 'connected') {
29
+ integration.lastSync = new Date().toISOString();
30
+ }
31
+ return true;
32
+ }
33
+ /**
34
+ * Clear all integrations (for testing)
35
+ */
36
+ clear() {
37
+ this.integrations.clear();
38
+ }
39
+ }
40
+ /**
41
+ * Setup integration routes
42
+ */
43
+ export async function setupIntegrationRoutes(server, integrationRegistry) {
44
+ // GET /integrations - Get integration status
45
+ server.get('/integrations', {
46
+ preHandler: [requireRead('agents')], // Using agents scope for integrations
47
+ }, async (_request, reply) => {
48
+ const integrations = await integrationRegistry.getAll();
49
+ const response = { integrations };
50
+ return reply.send(response);
51
+ });
52
+ // GET /integrations/:id - Get specific integration
53
+ server.get('/integrations/:id', {
54
+ preHandler: [requireRead('agents')],
55
+ schema: {
56
+ description: 'Get integration details',
57
+ tags: ['Integrations'],
58
+ params: {
59
+ type: 'object',
60
+ properties: {
61
+ id: { type: 'string' },
62
+ },
63
+ required: ['id'],
64
+ },
65
+ },
66
+ }, async (request, reply) => {
67
+ const params = request.params;
68
+ const integration = await integrationRegistry.get(params.id);
69
+ if (!integration) {
70
+ return reply.status(404).send({
71
+ type: 'urn:generacy:error:not-found',
72
+ title: 'Not Found',
73
+ status: 404,
74
+ detail: `Integration ${params.id} not found`,
75
+ traceId: request.correlationId,
76
+ });
77
+ }
78
+ return reply.send(integration);
79
+ });
80
+ }
81
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import { Registry } from 'prom-client';
3
+ /**
4
+ * Initialize metrics
5
+ */
6
+ export declare function initializeMetrics(): Registry;
7
+ /**
8
+ * Record HTTP request metrics
9
+ */
10
+ export declare function recordHttpRequest(method: string, path: string, status: number, durationSeconds: number): void;
11
+ /**
12
+ * Update workflow metrics
13
+ */
14
+ export declare function updateWorkflowMetrics(statusCounts: Record<string, number>): void;
15
+ /**
16
+ * Update queue metrics
17
+ */
18
+ export declare function updateQueueMetrics(priorityCounts: Record<string, number>): void;
19
+ /**
20
+ * Update agent metrics
21
+ */
22
+ export declare function updateAgentMetrics(agentCounts: Record<string, Record<string, number>>): void;
23
+ /**
24
+ * Setup metrics routes
25
+ */
26
+ export declare function setupMetricsRoutes(server: FastifyInstance): Promise<void>;
27
+ /**
28
+ * Get registry for testing
29
+ */
30
+ export declare function getRegistry(): Registry;
31
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/routes/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAoD,MAAM,aAAa,CAAC;AAgBzF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,QAAQ,CAgD5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,IAAI,CAaN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAM/E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAClD,IAAI,CAQN;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD/E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC"}
@@ -0,0 +1,157 @@
1
+ import { Registry, collectDefaultMetrics, Counter, Histogram, Gauge } from 'prom-client';
2
+ /**
3
+ * Metrics registry
4
+ */
5
+ let registry;
6
+ /**
7
+ * Custom metrics
8
+ */
9
+ let httpRequestsTotal;
10
+ let httpRequestDuration;
11
+ let activeWorkflows;
12
+ let queueSize;
13
+ let connectedAgents;
14
+ /**
15
+ * Initialize metrics
16
+ */
17
+ export function initializeMetrics() {
18
+ registry = new Registry();
19
+ // Collect default Node.js metrics
20
+ collectDefaultMetrics({ register: registry });
21
+ // HTTP request counter
22
+ httpRequestsTotal = new Counter({
23
+ name: 'http_requests_total',
24
+ help: 'Total number of HTTP requests',
25
+ labelNames: ['method', 'path', 'status'],
26
+ registers: [registry],
27
+ });
28
+ // HTTP request duration histogram
29
+ httpRequestDuration = new Histogram({
30
+ name: 'http_request_duration_seconds',
31
+ help: 'HTTP request duration in seconds',
32
+ labelNames: ['method', 'path', 'status'],
33
+ buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5],
34
+ registers: [registry],
35
+ });
36
+ // Active workflows gauge
37
+ activeWorkflows = new Gauge({
38
+ name: 'orchestrator_active_workflows',
39
+ help: 'Number of active workflows',
40
+ labelNames: ['status'],
41
+ registers: [registry],
42
+ });
43
+ // Queue size gauge
44
+ queueSize = new Gauge({
45
+ name: 'orchestrator_queue_size',
46
+ help: 'Number of items in the decision queue',
47
+ labelNames: ['priority'],
48
+ registers: [registry],
49
+ });
50
+ // Connected agents gauge
51
+ connectedAgents = new Gauge({
52
+ name: 'orchestrator_connected_agents',
53
+ help: 'Number of connected agents',
54
+ labelNames: ['type', 'status'],
55
+ registers: [registry],
56
+ });
57
+ return registry;
58
+ }
59
+ /**
60
+ * Record HTTP request metrics
61
+ */
62
+ export function recordHttpRequest(method, path, status, durationSeconds) {
63
+ if (!httpRequestsTotal || !httpRequestDuration)
64
+ return;
65
+ // Normalize path (remove IDs)
66
+ const normalizedPath = path
67
+ .replace(/\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, '/:id')
68
+ .replace(/\/\d+/g, '/:id');
69
+ httpRequestsTotal.inc({ method, path: normalizedPath, status: String(status) });
70
+ httpRequestDuration.observe({ method, path: normalizedPath, status: String(status) }, durationSeconds);
71
+ }
72
+ /**
73
+ * Update workflow metrics
74
+ */
75
+ export function updateWorkflowMetrics(statusCounts) {
76
+ if (!activeWorkflows)
77
+ return;
78
+ for (const [status, count] of Object.entries(statusCounts)) {
79
+ activeWorkflows.set({ status }, count);
80
+ }
81
+ }
82
+ /**
83
+ * Update queue metrics
84
+ */
85
+ export function updateQueueMetrics(priorityCounts) {
86
+ if (!queueSize)
87
+ return;
88
+ for (const [priority, count] of Object.entries(priorityCounts)) {
89
+ queueSize.set({ priority }, count);
90
+ }
91
+ }
92
+ /**
93
+ * Update agent metrics
94
+ */
95
+ export function updateAgentMetrics(agentCounts) {
96
+ if (!connectedAgents)
97
+ return;
98
+ for (const [type, statusCounts] of Object.entries(agentCounts)) {
99
+ for (const [status, count] of Object.entries(statusCounts)) {
100
+ connectedAgents.set({ type, status }, count);
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Setup metrics routes
106
+ */
107
+ export async function setupMetricsRoutes(server) {
108
+ // Initialize metrics if not already done
109
+ if (!registry) {
110
+ initializeMetrics();
111
+ }
112
+ // GET /metrics - Prometheus metrics endpoint
113
+ server.get('/metrics', {
114
+ schema: {
115
+ description: 'Prometheus metrics endpoint',
116
+ tags: ['System'],
117
+ response: {
118
+ 200: {
119
+ type: 'string',
120
+ },
121
+ },
122
+ },
123
+ }, async (_request, reply) => {
124
+ const metrics = await registry.metrics();
125
+ return reply
126
+ .header('content-type', registry.contentType)
127
+ .send(metrics);
128
+ });
129
+ // Add hook to record request metrics
130
+ server.addHook('onResponse', (request, reply, done) => {
131
+ // Skip metrics endpoint itself
132
+ if (request.url === '/metrics') {
133
+ done();
134
+ return;
135
+ }
136
+ // Calculate duration
137
+ const startTime = request.startTime;
138
+ let durationSeconds = 0;
139
+ if (startTime) {
140
+ durationSeconds = Number(process.hrtime.bigint() - startTime) / 1e9;
141
+ }
142
+ recordHttpRequest(request.method, request.url, reply.statusCode, durationSeconds);
143
+ done();
144
+ });
145
+ // Add hook to record start time
146
+ server.addHook('onRequest', (request, _reply, done) => {
147
+ request.startTime = process.hrtime.bigint();
148
+ done();
149
+ });
150
+ }
151
+ /**
152
+ * Get registry for testing
153
+ */
154
+ export function getRegistry() {
155
+ return registry;
156
+ }
157
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/routes/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type { PrFeedbackMonitorService } from '../services/pr-feedback-monitor-service.js';
3
+ export interface PrWebhookRouteOptions {
4
+ monitorService: PrFeedbackMonitorService;
5
+ webhookSecret?: string;
6
+ watchedRepos: Set<string>;
7
+ clusterGithubUsername?: string;
8
+ }
9
+ /**
10
+ * Setup webhook routes for receiving GitHub PR review events.
11
+ * The webhook route bypasses global auth middleware — authentication
12
+ * is handled via HMAC-SHA256 signature verification.
13
+ */
14
+ export declare function setupPrWebhookRoutes(server: FastifyInstance, options: PrWebhookRouteOptions): Promise<void>;
15
+ //# sourceMappingURL=pr-webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-webhooks.d.ts","sourceRoot":"","sources":["../../src/routes/pr-webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAiC3F,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,wBAAwB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAmGf"}