@fleettools/server 0.1.0 → 0.2.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 (307) hide show
  1. package/package.json +6 -2
  2. package/tsconfig.json +7 -1
  3. package/.flightline/checkpoints.db +0 -0
  4. package/.flightline/ctk/04a5510b-1e09-40c6-91c8-399c22138708.json +0 -9
  5. package/.flightline/ctk/0ecde721-7827-4039-995a-974e24493cc5.json +0 -9
  6. package/.flightline/ctk/268bbdbd-ddd7-46b2-845f-56a138aa518a.json +0 -9
  7. package/.flightline/ctk/6f476f2e-776c-407a-b441-b9365c0bae95.json +0 -9
  8. package/.flightline/ctk/7e10d0d5-fbc2-4661-af03-53de89e064db.json +0 -9
  9. package/.flightline/ctk/90783096-b7d4-49c5-8153-3c35018a2e61.json +0 -9
  10. package/.flightline/ctk/9a3b6d18-8a46-4728-90aa-279800a8e397.json +0 -9
  11. package/.flightline/ctk/ae30e192-b386-4ee2-899c-93f86785d3f3.json +0 -9
  12. package/.flightline/ctk/d0e9c49e-10df-413e-8cf7-37232b1838ca.json +0 -9
  13. package/.flightline/ctk/eae1a12b-2e9d-4c3f-8619-dafbb1346e96.json +0 -9
  14. package/.flightline/mailboxes/mbx_00dae6ba-0b5e-4a8d-a86d-93c8640872c3/manifest.json +0 -6
  15. package/.flightline/mailboxes/mbx_05b0bfa9-c4f5-4f68-ba75-6202820f49c3/manifest.json +0 -6
  16. package/.flightline/mailboxes/mbx_0a6b8fb2-729e-4385-8241-839c36b929d7/manifest.json +0 -6
  17. package/.flightline/mailboxes/mbx_0abca4ab-8e34-409c-997f-481e80e450dc/manifest.json +0 -6
  18. package/.flightline/mailboxes/mbx_173e5fb9-8203-418d-93c2-4f8c91f2d842/manifest.json +0 -6
  19. package/.flightline/mailboxes/mbx_22b62201-0570-4ce8-b0a7-0f4b445f6d9e/manifest.json +0 -6
  20. package/.flightline/mailboxes/mbx_2724efb1-76e1-4147-9620-4defcc65510f/manifest.json +0 -6
  21. package/.flightline/mailboxes/mbx_35b8bfcd-5a54-48f1-8759-cb1f8ffe775d/manifest.json +0 -6
  22. package/.flightline/mailboxes/mbx_3bc5193a-604d-4f52-be00-e56277643358/manifest.json +0 -6
  23. package/.flightline/mailboxes/mbx_3bd500f3-c111-427a-8cd7-a004125d6dc1/manifest.json +0 -6
  24. package/.flightline/mailboxes/mbx_45ce9ae8-5299-44dc-a1b5-4d63914a9609/manifest.json +0 -6
  25. package/.flightline/mailboxes/mbx_4779c645-1efc-4c76-ab21-ff93f973ee8f/manifest.json +0 -6
  26. package/.flightline/mailboxes/mbx_482237cf-87c8-486e-a24d-0941be2f480d/manifest.json +0 -6
  27. package/.flightline/mailboxes/mbx_4b7e23c8-5680-4edd-a276-88803dd5fb6f/manifest.json +0 -6
  28. package/.flightline/mailboxes/mbx_4dd3b945-d846-4c7a-94eb-6eeb25a0dc6b/manifest.json +0 -6
  29. package/.flightline/mailboxes/mbx_4ec41a62-62bb-4be4-b3ce-282d5a33acce/manifest.json +0 -6
  30. package/.flightline/mailboxes/mbx_4ff7ee7e-0c8a-43d6-a829-7c62c10af3b0/manifest.json +0 -6
  31. package/.flightline/mailboxes/mbx_7661e4fb-a919-4af1-86f7-3eaef22f1d81/manifest.json +0 -6
  32. package/.flightline/mailboxes/mbx_7ca872bb-69ab-4e7d-a7c6-4888ec8e7749/manifest.json +0 -6
  33. package/.flightline/mailboxes/mbx_7e6d5707-2aa5-4770-a7be-6b1be93d0d87/manifest.json +0 -6
  34. package/.flightline/mailboxes/mbx_87bef50d-3c59-429b-a995-5872f6278c37/manifest.json +0 -6
  35. package/.flightline/mailboxes/mbx_88d1ea56-0b69-48c4-9fcf-ce1e1f7527ba/manifest.json +0 -6
  36. package/.flightline/mailboxes/mbx_8bfb6bd7-07d1-4836-ae9d-3c93668c6dfe/manifest.json +0 -6
  37. package/.flightline/mailboxes/mbx_93355083-e95b-4341-b625-56fcc1e4fc0c/manifest.json +0 -6
  38. package/.flightline/mailboxes/mbx_999fd94c-ca56-4fec-8d30-8b677cf40ad6/manifest.json +0 -6
  39. package/.flightline/mailboxes/mbx_a039fd15-7ee1-4bd6-906d-55dea8d0e489/manifest.json +0 -6
  40. package/.flightline/mailboxes/mbx_a0b7363f-7cc6-4940-8e29-2dc85793a77d/manifest.json +0 -6
  41. package/.flightline/mailboxes/mbx_a31e8b61-9643-4c78-939d-d1696d0420d9/manifest.json +0 -6
  42. package/.flightline/mailboxes/mbx_acc51591-256c-4bed-9a51-514b1811f4cd/manifest.json +0 -6
  43. package/.flightline/mailboxes/mbx_b1efebd9-5981-49fa-8775-20fa00d0c902/manifest.json +0 -6
  44. package/.flightline/mailboxes/mbx_ba9d4c61-39a3-4852-95d7-bd34e3605a43/manifest.json +0 -6
  45. package/.flightline/mailboxes/mbx_c549b60f-65fd-48d5-8cd6-2f053292b112/manifest.json +0 -6
  46. package/.flightline/mailboxes/mbx_d0f839a5-3ab9-42e2-b438-df5825d049fe/manifest.json +0 -6
  47. package/.flightline/mailboxes/mbx_d826d57e-9817-4f3c-ab94-2bfafa352f6d/manifest.json +0 -6
  48. package/.flightline/mailboxes/mbx_da102f37-632c-4c0b-be4c-4270a74c06b9/manifest.json +0 -6
  49. package/.flightline/mailboxes/mbx_df4506f5-67f2-4cf6-9113-93994b76f39b/manifest.json +0 -6
  50. package/.flightline/mailboxes/mbx_e038e93b-87ea-4122-9578-6540018697b7/manifest.json +0 -6
  51. package/.flightline/mailboxes/mbx_e0c171c5-407f-44dc-9ef9-e26e8b99ceac/manifest.json +0 -6
  52. package/.flightline/mailboxes/mbx_e64770bf-7220-4d0f-848c-d751ea1c7376/manifest.json +0 -6
  53. package/.flightline/mailboxes/mbx_e7f0edda-0fab-484d-ab4d-d8a8e363cd14/manifest.json +0 -6
  54. package/.flightline/mailboxes/mbx_ec7d9118-8594-4d79-bf79-f43afdfaf156/manifest.json +0 -6
  55. package/.flightline/mailboxes/mbx_ee06ec01-03e4-485a-ae2b-d8bdb6e7a3a8/manifest.json +0 -6
  56. package/.flightline/mailboxes/mbx_fd467681-f9cf-4a54-b06a-836df6de2ccc/manifest.json +0 -6
  57. package/.flightline/progress.db +0 -0
  58. package/.flightline/recovery.log +0 -1
  59. package/.flightline/tasks.db +0 -0
  60. package/.flightline/tech-orders/to_0c93d981-6b4e-4055-8678-f39c009d1db1.json +0 -11
  61. package/.flightline/tech-orders/to_1862f8ed-c487-4914-9f1e-528af6d4f053.json +0 -11
  62. package/.flightline/tech-orders/to_2335a57d-f400-4efa-b108-e13ece57520d.json +0 -11
  63. package/.flightline/tech-orders/to_2bd8dbdd-ac57-4b84-b977-33a3637d10d1.json +0 -11
  64. package/.flightline/tech-orders/to_37057c01-39b5-403a-991f-afb186abde95.json +0 -11
  65. package/.flightline/tech-orders/to_9e7288bb-c0fd-488a-a83d-1e9337bd0f1f.json +0 -11
  66. package/.flightline/tech-orders/to_aa0fe80b-9de7-40f6-a106-353b5bca10bd.json +0 -11
  67. package/.flightline/tech-orders/to_c1a0f480-c863-4203-a070-76ad77137845.json +0 -11
  68. package/.flightline/tech-orders/to_cf1e882a-cf56-45a4-8d19-494925e5f449.json +0 -11
  69. package/.flightline/work-orders/wo_5a29168d-5fb4-41d7-8dac-1d1151d9248f/manifest.json +0 -15
  70. package/.flightline/work-orders/wo_6c8c38bb-17a1-4885-ada4-dbfc5cc12d7a/manifest.json +0 -15
  71. package/.flightline/work-orders/wo_cadeb9b2-ea42-4491-b429-e2d467942b5c/manifest.json +0 -12
  72. package/.flightline/work-orders/wo_cc7b669c-16c4-4ef7-8a76-d1813219d0be/manifest.json +0 -15
  73. package/dist/agent-lifecycle.js +0 -148
  74. package/dist/agent-spawner.js +0 -460
  75. package/dist/agent-validation.js +0 -111
  76. package/dist/index.js +0 -255
  77. package/dist/server/api/src/coordination/agent-lifecycle.d.ts +0 -12
  78. package/dist/server/api/src/coordination/agent-lifecycle.d.ts.map +0 -1
  79. package/dist/server/api/src/coordination/agent-lifecycle.js +0 -12
  80. package/dist/server/api/src/coordination/agent-lifecycle.js.map +0 -1
  81. package/dist/server/api/src/coordination/agent-runner.d.ts +0 -9
  82. package/dist/server/api/src/coordination/agent-runner.d.ts.map +0 -1
  83. package/dist/server/api/src/coordination/agent-runner.js +0 -416
  84. package/dist/server/api/src/coordination/agent-runner.js.map +0 -1
  85. package/dist/server/api/src/coordination/agent-spawner-routes.d.ts +0 -7
  86. package/dist/server/api/src/coordination/agent-spawner-routes.d.ts.map +0 -1
  87. package/dist/server/api/src/coordination/agent-spawner-routes.js +0 -321
  88. package/dist/server/api/src/coordination/agent-spawner-routes.js.map +0 -1
  89. package/dist/server/api/src/coordination/agent-spawner.d.ts +0 -187
  90. package/dist/server/api/src/coordination/agent-spawner.d.ts.map +0 -1
  91. package/dist/server/api/src/coordination/agent-spawner.js +0 -712
  92. package/dist/server/api/src/coordination/agent-spawner.js.map +0 -1
  93. package/dist/server/api/src/coordination/agents.d.ts +0 -13
  94. package/dist/server/api/src/coordination/agents.d.ts.map +0 -1
  95. package/dist/server/api/src/coordination/agents.js +0 -464
  96. package/dist/server/api/src/coordination/agents.js.map +0 -1
  97. package/dist/server/api/src/coordination/checkpoint-routes.d.ts +0 -33
  98. package/dist/server/api/src/coordination/checkpoint-routes.d.ts.map +0 -1
  99. package/dist/server/api/src/coordination/checkpoint-routes.js +0 -323
  100. package/dist/server/api/src/coordination/checkpoint-routes.js.map +0 -1
  101. package/dist/server/api/src/coordination/conflict-resolver.d.ts +0 -152
  102. package/dist/server/api/src/coordination/conflict-resolver.d.ts.map +0 -1
  103. package/dist/server/api/src/coordination/conflict-resolver.js +0 -502
  104. package/dist/server/api/src/coordination/conflict-resolver.js.map +0 -1
  105. package/dist/server/api/src/coordination/missions.d.ts +0 -9
  106. package/dist/server/api/src/coordination/missions.d.ts.map +0 -1
  107. package/dist/server/api/src/coordination/missions.js +0 -148
  108. package/dist/server/api/src/coordination/missions.js.map +0 -1
  109. package/dist/server/api/src/coordination/monitor.d.ts +0 -175
  110. package/dist/server/api/src/coordination/monitor.d.ts.map +0 -1
  111. package/dist/server/api/src/coordination/monitor.js +0 -410
  112. package/dist/server/api/src/coordination/monitor.js.map +0 -1
  113. package/dist/server/api/src/coordination/notifier.d.ts +0 -160
  114. package/dist/server/api/src/coordination/notifier.d.ts.map +0 -1
  115. package/dist/server/api/src/coordination/notifier.js +0 -422
  116. package/dist/server/api/src/coordination/notifier.js.map +0 -1
  117. package/dist/server/api/src/coordination/progress-tracker.d.ts +0 -98
  118. package/dist/server/api/src/coordination/progress-tracker.d.ts.map +0 -1
  119. package/dist/server/api/src/coordination/progress-tracker.js +0 -323
  120. package/dist/server/api/src/coordination/progress-tracker.js.map +0 -1
  121. package/dist/server/api/src/coordination/recovery-manager.d.ts +0 -135
  122. package/dist/server/api/src/coordination/recovery-manager.d.ts.map +0 -1
  123. package/dist/server/api/src/coordination/recovery-manager.js +0 -435
  124. package/dist/server/api/src/coordination/recovery-manager.js.map +0 -1
  125. package/dist/server/api/src/coordination/task-decomposer.d.ts +0 -90
  126. package/dist/server/api/src/coordination/task-decomposer.d.ts.map +0 -1
  127. package/dist/server/api/src/coordination/task-decomposer.js +0 -412
  128. package/dist/server/api/src/coordination/task-decomposer.js.map +0 -1
  129. package/dist/server/api/src/coordination/task-queue-routes.d.ts +0 -7
  130. package/dist/server/api/src/coordination/task-queue-routes.d.ts.map +0 -1
  131. package/dist/server/api/src/coordination/task-queue-routes.js +0 -266
  132. package/dist/server/api/src/coordination/task-queue-routes.js.map +0 -1
  133. package/dist/server/api/src/coordination/task-queue.d.ts +0 -104
  134. package/dist/server/api/src/coordination/task-queue.d.ts.map +0 -1
  135. package/dist/server/api/src/coordination/task-queue.js +0 -378
  136. package/dist/server/api/src/coordination/task-queue.js.map +0 -1
  137. package/dist/server/api/src/coordination/tasks.d.ts +0 -7
  138. package/dist/server/api/src/coordination/tasks.d.ts.map +0 -1
  139. package/dist/server/api/src/coordination/tasks.js +0 -59
  140. package/dist/server/api/src/coordination/tasks.js.map +0 -1
  141. package/dist/server/api/src/decomposition/cli.d.ts +0 -18
  142. package/dist/server/api/src/decomposition/cli.d.ts.map +0 -1
  143. package/dist/server/api/src/decomposition/cli.js +0 -191
  144. package/dist/server/api/src/decomposition/cli.js.map +0 -1
  145. package/dist/server/api/src/decomposition/codebase-analyzer.d.ts +0 -59
  146. package/dist/server/api/src/decomposition/codebase-analyzer.d.ts.map +0 -1
  147. package/dist/server/api/src/decomposition/codebase-analyzer.js +0 -274
  148. package/dist/server/api/src/decomposition/codebase-analyzer.js.map +0 -1
  149. package/dist/server/api/src/decomposition/dependency-resolver.d.ts +0 -68
  150. package/dist/server/api/src/decomposition/dependency-resolver.d.ts.map +0 -1
  151. package/dist/server/api/src/decomposition/dependency-resolver.js +0 -261
  152. package/dist/server/api/src/decomposition/dependency-resolver.js.map +0 -1
  153. package/dist/server/api/src/decomposition/index.d.ts +0 -17
  154. package/dist/server/api/src/decomposition/index.d.ts.map +0 -1
  155. package/dist/server/api/src/decomposition/index.js +0 -19
  156. package/dist/server/api/src/decomposition/index.js.map +0 -1
  157. package/dist/server/api/src/decomposition/parallelization.d.ts +0 -40
  158. package/dist/server/api/src/decomposition/parallelization.d.ts.map +0 -1
  159. package/dist/server/api/src/decomposition/parallelization.js +0 -144
  160. package/dist/server/api/src/decomposition/parallelization.js.map +0 -1
  161. package/dist/server/api/src/decomposition/planner.d.ts +0 -84
  162. package/dist/server/api/src/decomposition/planner.d.ts.map +0 -1
  163. package/dist/server/api/src/decomposition/planner.js +0 -415
  164. package/dist/server/api/src/decomposition/planner.js.map +0 -1
  165. package/dist/server/api/src/decomposition/routes.d.ts +0 -13
  166. package/dist/server/api/src/decomposition/routes.d.ts.map +0 -1
  167. package/dist/server/api/src/decomposition/routes.js +0 -114
  168. package/dist/server/api/src/decomposition/routes.js.map +0 -1
  169. package/dist/server/api/src/decomposition/strategies.d.ts +0 -43
  170. package/dist/server/api/src/decomposition/strategies.d.ts.map +0 -1
  171. package/dist/server/api/src/decomposition/strategies.js +0 -147
  172. package/dist/server/api/src/decomposition/strategies.js.map +0 -1
  173. package/dist/server/api/src/decomposition/types.d.ts +0 -1090
  174. package/dist/server/api/src/decomposition/types.d.ts.map +0 -1
  175. package/dist/server/api/src/decomposition/types.js +0 -65
  176. package/dist/server/api/src/decomposition/types.js.map +0 -1
  177. package/dist/server/api/src/decomposition/validator.d.ts +0 -84
  178. package/dist/server/api/src/decomposition/validator.d.ts.map +0 -1
  179. package/dist/server/api/src/decomposition/validator.js +0 -314
  180. package/dist/server/api/src/decomposition/validator.js.map +0 -1
  181. package/dist/server/api/src/flightline/ctk.d.ts +0 -2
  182. package/dist/server/api/src/flightline/ctk.d.ts.map +0 -1
  183. package/dist/server/api/src/flightline/ctk.js +0 -114
  184. package/dist/server/api/src/flightline/ctk.js.map +0 -1
  185. package/dist/server/api/src/flightline/tech-orders.d.ts +0 -2
  186. package/dist/server/api/src/flightline/tech-orders.d.ts.map +0 -1
  187. package/dist/server/api/src/flightline/tech-orders.js +0 -74
  188. package/dist/server/api/src/flightline/tech-orders.js.map +0 -1
  189. package/dist/server/api/src/flightline/work-orders.d.ts +0 -2
  190. package/dist/server/api/src/flightline/work-orders.d.ts.map +0 -1
  191. package/dist/server/api/src/flightline/work-orders.js +0 -178
  192. package/dist/server/api/src/flightline/work-orders.js.map +0 -1
  193. package/dist/server/api/src/index.d.ts +0 -3
  194. package/dist/server/api/src/index.d.ts.map +0 -1
  195. package/dist/server/api/src/index.js +0 -192
  196. package/dist/server/api/src/index.js.map +0 -1
  197. package/dist/server/api/src/middleware/agent-validation.d.ts +0 -161
  198. package/dist/server/api/src/middleware/agent-validation.d.ts.map +0 -1
  199. package/dist/server/api/src/middleware/agent-validation.js +0 -112
  200. package/dist/server/api/src/middleware/agent-validation.js.map +0 -1
  201. package/dist/server/api/src/middleware/error-handler.d.ts +0 -8
  202. package/dist/server/api/src/middleware/error-handler.d.ts.map +0 -1
  203. package/dist/server/api/src/middleware/error-handler.js +0 -54
  204. package/dist/server/api/src/middleware/error-handler.js.map +0 -1
  205. package/dist/server/api/src/middleware/logger.d.ts +0 -8
  206. package/dist/server/api/src/middleware/logger.d.ts.map +0 -1
  207. package/dist/server/api/src/middleware/logger.js +0 -31
  208. package/dist/server/api/src/middleware/logger.js.map +0 -1
  209. package/dist/server/api/src/middleware/validation.d.ts +0 -322
  210. package/dist/server/api/src/middleware/validation.d.ts.map +0 -1
  211. package/dist/server/api/src/middleware/validation.js +0 -189
  212. package/dist/server/api/src/middleware/validation.js.map +0 -1
  213. package/dist/server/api/src/squawk/blocker-handler.d.ts +0 -111
  214. package/dist/server/api/src/squawk/blocker-handler.d.ts.map +0 -1
  215. package/dist/server/api/src/squawk/blocker-handler.js +0 -262
  216. package/dist/server/api/src/squawk/blocker-handler.js.map +0 -1
  217. package/dist/server/api/src/squawk/coordinator.d.ts +0 -2
  218. package/dist/server/api/src/squawk/coordinator.d.ts.map +0 -1
  219. package/dist/server/api/src/squawk/coordinator.js +0 -24
  220. package/dist/server/api/src/squawk/coordinator.js.map +0 -1
  221. package/dist/server/api/src/squawk/cursor.d.ts +0 -2
  222. package/dist/server/api/src/squawk/cursor.d.ts.map +0 -1
  223. package/dist/server/api/src/squawk/cursor.js +0 -55
  224. package/dist/server/api/src/squawk/cursor.js.map +0 -1
  225. package/dist/server/api/src/squawk/dependency-resolver.d.ts +0 -107
  226. package/dist/server/api/src/squawk/dependency-resolver.d.ts.map +0 -1
  227. package/dist/server/api/src/squawk/dependency-resolver.js +0 -324
  228. package/dist/server/api/src/squawk/dependency-resolver.js.map +0 -1
  229. package/dist/server/api/src/squawk/dispatch-orchestrator.d.ts +0 -117
  230. package/dist/server/api/src/squawk/dispatch-orchestrator.d.ts.map +0 -1
  231. package/dist/server/api/src/squawk/dispatch-orchestrator.js +0 -296
  232. package/dist/server/api/src/squawk/dispatch-orchestrator.js.map +0 -1
  233. package/dist/server/api/src/squawk/lock-coordinator.d.ts +0 -118
  234. package/dist/server/api/src/squawk/lock-coordinator.d.ts.map +0 -1
  235. package/dist/server/api/src/squawk/lock-coordinator.js +0 -279
  236. package/dist/server/api/src/squawk/lock-coordinator.js.map +0 -1
  237. package/dist/server/api/src/squawk/lock.d.ts +0 -2
  238. package/dist/server/api/src/squawk/lock.d.ts.map +0 -1
  239. package/dist/server/api/src/squawk/lock.js +0 -87
  240. package/dist/server/api/src/squawk/lock.js.map +0 -1
  241. package/dist/server/api/src/squawk/mailbox.d.ts +0 -2
  242. package/dist/server/api/src/squawk/mailbox.d.ts.map +0 -1
  243. package/dist/server/api/src/squawk/mailbox.js +0 -66
  244. package/dist/server/api/src/squawk/mailbox.js.map +0 -1
  245. package/dist/server/api/src/squawk/spawning.d.ts +0 -79
  246. package/dist/server/api/src/squawk/spawning.d.ts.map +0 -1
  247. package/dist/server/api/src/squawk/spawning.js +0 -226
  248. package/dist/server/api/src/squawk/spawning.js.map +0 -1
  249. package/dist/server/api/src/squawk/specialist-tools.d.ts +0 -206
  250. package/dist/server/api/src/squawk/specialist-tools.d.ts.map +0 -1
  251. package/dist/server/api/src/squawk/specialist-tools.js +0 -411
  252. package/dist/server/api/src/squawk/specialist-tools.js.map +0 -1
  253. package/dist/server/api/src/types/api.d.ts +0 -63
  254. package/dist/server/api/src/types/api.d.ts.map +0 -1
  255. package/dist/server/api/src/types/api.js +0 -5
  256. package/dist/server/api/src/types/api.js.map +0 -1
  257. package/dist/squawk/src/db/index.d.ts +0 -30
  258. package/dist/squawk/src/db/index.d.ts.map +0 -1
  259. package/dist/squawk/src/db/index.js +0 -329
  260. package/dist/squawk/src/db/index.js.map +0 -1
  261. package/dist/squawk/src/db/sqlite.d.ts +0 -31
  262. package/dist/squawk/src/db/sqlite.d.ts.map +0 -1
  263. package/dist/squawk/src/db/sqlite.js +0 -558
  264. package/dist/squawk/src/db/sqlite.js.map +0 -1
  265. package/dist/squawk/src/db/types.d.ts +0 -611
  266. package/dist/squawk/src/db/types.d.ts.map +0 -1
  267. package/dist/squawk/src/db/types.js +0 -4
  268. package/dist/squawk/src/db/types.js.map +0 -1
  269. package/dist/task-queue.js +0 -377
  270. package/dist/validation.js +0 -188
  271. package/e2e-integration.test.ts +0 -290
  272. package/integration.test.ts +0 -186
  273. package/phase1-integration.test.ts +0 -455
  274. package/phase2-verification.test.ts +0 -135
  275. package/server.log +0 -58
  276. package/src/agent-runner.js +0 -877
  277. package/src/coordination/agent-lifecycle.ts +0 -13
  278. package/src/coordination/agent-runner.ts +0 -479
  279. package/src/coordination/agent-spawner-routes.ts +0 -340
  280. package/src/coordination/agent-spawner.ts +0 -885
  281. package/src/coordination/agents.ts +0 -525
  282. package/src/coordination/checkpoint-routes.ts +0 -382
  283. package/src/coordination/conflict-resolver.ts +0 -640
  284. package/src/coordination/missions.ts +0 -219
  285. package/src/coordination/monitor.ts +0 -593
  286. package/src/coordination/notifier.ts +0 -547
  287. package/src/coordination/progress-tracker.ts +0 -410
  288. package/src/coordination/recovery-manager.ts +0 -531
  289. package/src/coordination/task-decomposer.ts +0 -491
  290. package/src/coordination/task-queue-routes.ts +0 -284
  291. package/src/coordination/task-queue.ts +0 -480
  292. package/src/coordination/tasks.ts +0 -72
  293. package/src/flightline/ctk.ts +0 -131
  294. package/src/flightline/tech-orders.ts +0 -85
  295. package/src/flightline/work-orders.ts +0 -202
  296. package/src/index.ts +0 -211
  297. package/src/middleware/agent-validation.ts +0 -130
  298. package/src/middleware/error-handler.ts +0 -59
  299. package/src/middleware/logger.ts +0 -37
  300. package/src/middleware/validation.ts +0 -235
  301. package/src/squawk/coordinator.ts +0 -26
  302. package/src/squawk/cursor.ts +0 -62
  303. package/src/squawk/lock.ts +0 -98
  304. package/src/squawk/mailbox.ts +0 -75
  305. package/src/types/api.ts +0 -71
  306. package/test-api.ts +0 -310
  307. package/test-enhanced-agents.ts +0 -428
@@ -1,85 +0,0 @@
1
-
2
- import path from 'path';
3
- import fs from 'fs';
4
- import crypto from 'crypto';
5
-
6
- const FLIGHTLINE_DIR = path.join(process.cwd(), '.flightline');
7
- const TECH_ORDERS_DIR = path.join(FLIGHTLINE_DIR, 'tech-orders');
8
-
9
- function ensureDirectory() {
10
- if (!fs.existsSync(TECH_ORDERS_DIR)) {
11
- fs.mkdirSync(TECH_ORDERS_DIR, { recursive: true });
12
- }
13
- }
14
-
15
- export function registerTechOrdersRoutes(router: any, headers: Record<string, string>) {
16
- ensureDirectory();
17
-
18
-
19
- router.get('/api/v1/tech-orders', async (req: Request) => {
20
- try {
21
- const files = fs.readdirSync(TECH_ORDERS_DIR);
22
- const techOrders: any[] = [];
23
-
24
- for (const file of files) {
25
- if (file.endsWith('.json')) {
26
- const content = fs.readFileSync(path.join(TECH_ORDERS_DIR, file), 'utf-8');
27
- const techOrder = JSON.parse(content);
28
- techOrders.push(techOrder);
29
- }
30
- }
31
-
32
- return new Response(JSON.stringify({ tech_orders: techOrders }), {
33
- headers: { ...headers, 'Content-Type': 'application/json' },
34
- });
35
- } catch (error) {
36
- console.error('Error listing tech orders:', error);
37
- return new Response(JSON.stringify({ error: 'Failed to list tech orders' }), {
38
- status: 500,
39
- headers: { ...headers, 'Content-Type': 'application/json' },
40
- });
41
- }
42
- });
43
-
44
-
45
- router.post('/api/v1/tech-orders', async (req: Request) => {
46
- try {
47
- const body = await req.json() as { name?: string; pattern?: string; context?: any; usage_count?: number };
48
- const { name, pattern, context, usage_count = 0 } = body;
49
-
50
- if (!name || !pattern) {
51
- return new Response(JSON.stringify({ error: 'name and pattern are required' }), {
52
- status: 400,
53
- headers: { ...headers, 'Content-Type': 'application/json' },
54
- });
55
- }
56
-
57
- const techOrder = {
58
- id: 'to_' + crypto.randomUUID(),
59
- name,
60
- pattern,
61
- context,
62
- usage_count,
63
- success_rate: 0,
64
- anti_pattern: false,
65
- created_at: new Date().toISOString(),
66
- last_used: null,
67
- };
68
-
69
- const techOrderPath = path.join(TECH_ORDERS_DIR, `${techOrder.id}.json`);
70
- fs.writeFileSync(techOrderPath, JSON.stringify(techOrder, null, 2));
71
-
72
- console.log(`Created tech order: ${name}`);
73
- return new Response(JSON.stringify({ tech_order: techOrder }), {
74
- status: 201,
75
- headers: { ...headers, 'Content-Type': 'application/json' },
76
- });
77
- } catch (error) {
78
- console.error('Error creating tech order:', error);
79
- return new Response(JSON.stringify({ error: 'Failed to create tech order' }), {
80
- status: 500,
81
- headers: { ...headers, 'Content-Type': 'application/json' },
82
- });
83
- }
84
- });
85
- }
@@ -1,202 +0,0 @@
1
-
2
- import path from 'path';
3
- import fs from 'fs';
4
- import crypto from 'crypto';
5
-
6
- const FLIGHTLINE_DIR = path.join(process.cwd(), '.flightline');
7
- const WORK_ORDERS_DIR = path.join(FLIGHTLINE_DIR, 'work-orders');
8
-
9
- function ensureDirectories() {
10
- if (!fs.existsSync(FLIGHTLINE_DIR)) {
11
- fs.mkdirSync(FLIGHTLINE_DIR, { recursive: true });
12
- }
13
- if (!fs.existsSync(WORK_ORDERS_DIR)) {
14
- fs.mkdirSync(WORK_ORDERS_DIR, { recursive: true });
15
- }
16
- }
17
-
18
- function generateId() {
19
- return 'wo_' + crypto.randomUUID();
20
- }
21
-
22
- function getWorkOrderPath(orderId: string) {
23
- return path.join(WORK_ORDERS_DIR, orderId, 'manifest.json');
24
- }
25
-
26
- export function registerWorkOrdersRoutes(router: any, headers: Record<string, string>) {
27
- ensureDirectories();
28
-
29
-
30
- router.get('/api/v1/work-orders', async (req: Request) => {
31
- try {
32
- if (!fs.existsSync(WORK_ORDERS_DIR)) {
33
- return new Response(JSON.stringify({ work_orders: [] }), {
34
- headers: { ...headers, 'Content-Type': 'application/json' },
35
- });
36
- }
37
-
38
- const directories = fs.readdirSync(WORK_ORDERS_DIR);
39
- const workOrders: any[] = [];
40
-
41
- for (const dirName of directories) {
42
- const manifestPath = path.join(WORK_ORDERS_DIR, dirName, 'manifest.json');
43
- if (!fs.existsSync(manifestPath)) continue;
44
-
45
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
46
- workOrders.push(manifest);
47
- }
48
-
49
- return new Response(JSON.stringify({ work_orders: workOrders }), {
50
- headers: { ...headers, 'Content-Type': 'application/json' },
51
- });
52
- } catch (error) {
53
- console.error('Error listing work orders:', error);
54
- return new Response(JSON.stringify({ error: 'Failed to list work orders' }), {
55
- status: 500,
56
- headers: { ...headers, 'Content-Type': 'application/json' },
57
- });
58
- }
59
- });
60
-
61
-
62
- router.post('/api/v1/work-orders', async (req: Request) => {
63
- try {
64
- const body = await req.json() as { title?: string; description?: string; priority?: string; assigned_to?: string[] };
65
- const { title, description, priority = 'medium', assigned_to = [] } = body;
66
-
67
- if (!title) {
68
- return new Response(JSON.stringify({ error: 'title is required' }), {
69
- status: 400,
70
- headers: { ...headers, 'Content-Type': 'application/json' },
71
- });
72
- }
73
-
74
- const orderId = generateId();
75
- const now = new Date().toISOString();
76
-
77
- const manifest = {
78
- id: orderId,
79
- title,
80
- description: description || '',
81
- status: 'pending',
82
- priority,
83
- created_at: now,
84
- updated_at: now,
85
- assigned_to: assigned_to,
86
- cells: [],
87
- tech_orders: [],
88
- };
89
-
90
- const orderDir = path.join(WORK_ORDERS_DIR, orderId);
91
- const manifestPath = path.join(orderDir, 'manifest.json');
92
-
93
- fs.mkdirSync(orderDir, { recursive: true });
94
- fs.mkdirSync(path.join(orderDir, 'cells'), { recursive: true });
95
- fs.mkdirSync(path.join(orderDir, 'events'), { recursive: true });
96
- fs.mkdirSync(path.join(orderDir, 'artifacts'), { recursive: true });
97
-
98
- fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
99
-
100
- console.log(`Created work order: ${orderId} - ${title}`);
101
-
102
- return new Response(JSON.stringify({ work_order: manifest }), {
103
- status: 201,
104
- headers: { ...headers, 'Content-Type': 'application/json' },
105
- });
106
- } catch (error) {
107
- console.error('Error creating work order:', error);
108
- return new Response(JSON.stringify({ error: 'Failed to create work order' }), {
109
- status: 500,
110
- headers: { ...headers, 'Content-Type': 'application/json' },
111
- });
112
- }
113
- });
114
-
115
-
116
- router.get('/api/v1/work-orders/:id', async (req: Request, params: { id: string }) => {
117
- try {
118
- const manifestPath = getWorkOrderPath(params.id);
119
- if (!fs.existsSync(manifestPath)) {
120
- return new Response(JSON.stringify({ error: 'Work order not found' }), {
121
- status: 404,
122
- headers: { ...headers, 'Content-Type': 'application/json' },
123
- });
124
- }
125
-
126
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
127
- return new Response(JSON.stringify({ work_order: manifest }), {
128
- headers: { ...headers, 'Content-Type': 'application/json' },
129
- });
130
- } catch (error) {
131
- console.error('Error getting work order:', error);
132
- return new Response(JSON.stringify({ error: 'Failed to get work order' }), {
133
- status: 500,
134
- headers: { ...headers, 'Content-Type': 'application/json' },
135
- });
136
- }
137
- });
138
-
139
-
140
- router.patch('/api/v1/work-orders/:id', async (req: Request, params: { id: string }) => {
141
- try {
142
- const body = await req.json() as { title?: string; description?: string; status?: string; priority?: string; assigned_to?: string[] };
143
- const manifestPath = getWorkOrderPath(params.id);
144
- if (!fs.existsSync(manifestPath)) {
145
- return new Response(JSON.stringify({ error: 'Work order not found' }), {
146
- status: 404,
147
- headers: { ...headers, 'Content-Type': 'application/json' },
148
- });
149
- }
150
-
151
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
152
-
153
- if (body.title) manifest.title = body.title;
154
- if (body.description !== undefined) manifest.description = body.description;
155
- if (body.status) manifest.status = body.status;
156
- if (body.priority) manifest.priority = body.priority;
157
- if (body.assigned_to) manifest.assigned_to = body.assigned_to;
158
-
159
- manifest.updated_at = new Date().toISOString();
160
-
161
- fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
162
-
163
- console.log(`Updated work order: ${params.id}`);
164
- return new Response(JSON.stringify({ work_order: manifest }), {
165
- headers: { ...headers, 'Content-Type': 'application/json' },
166
- });
167
- } catch (error) {
168
- console.error('Error updating work order:', error);
169
- return new Response(JSON.stringify({ error: 'Failed to update work order' }), {
170
- status: 500,
171
- headers: { ...headers, 'Content-Type': 'application/json' },
172
- });
173
- }
174
- });
175
-
176
-
177
- router.delete('/api/v1/work-orders/:id', async (req: Request, params: { id: string }) => {
178
- try {
179
- const orderDir = path.join(WORK_ORDERS_DIR, params.id);
180
- if (!fs.existsSync(orderDir)) {
181
- return new Response(JSON.stringify({ error: 'Work order not found' }), {
182
- status: 404,
183
- headers: { ...headers, 'Content-Type': 'application/json' },
184
- });
185
- }
186
-
187
- fs.rmSync(orderDir, { recursive: true, force: true });
188
-
189
- console.log(`Deleted work order: ${params.id}`);
190
- return new Response(null, {
191
- status: 204,
192
- headers: { ...headers },
193
- });
194
- } catch (error) {
195
- console.error('Error deleting work order:', error);
196
- return new Response(JSON.stringify({ error: 'Failed to delete work order' }), {
197
- status: 500,
198
- headers: { ...headers, 'Content-Type': 'application/json' },
199
- });
200
- }
201
- });
202
- }
package/src/index.ts DELETED
@@ -1,211 +0,0 @@
1
-
2
-
3
- import { closeDatabase, initializeDatabase } from '../../../squawk/src/db/index.js';
4
- import { registerWorkOrdersRoutes } from './flightline/work-orders.js';
5
- import { registerCtkRoutes } from './flightline/ctk.js';
6
- import { registerTechOrdersRoutes } from './flightline/tech-orders.js';
7
- import { registerMailboxRoutes } from './squawk/mailbox.js';
8
- import { registerCursorRoutes } from './squawk/cursor.js';
9
- import { registerLockRoutes } from './squawk/lock.js';
10
- import { registerCoordinatorRoutes } from './squawk/coordinator.js';
11
-
12
- const headers: Record<string, string> = {
13
- 'Access-Control-Allow-Origin': '*',
14
- 'Access-Control-Allow-Methods': 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
15
- 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
16
- };
17
-
18
- const routes: Array<{
19
- method: string;
20
- pathPattern: string;
21
- regex: RegExp;
22
- paramNames: string[];
23
- handler: (req: Request, params?: any) => Promise<Response>;
24
- }> = [];
25
-
26
- function parsePathPattern(pathPattern: string): { regex: RegExp; paramNames: string[] } {
27
- const paramNames: string[] = [];
28
- const regexPattern = pathPattern.replace(/:([^/]+)/g, (_, paramName) => {
29
- paramNames.push(paramName);
30
- return '([^/]+)';
31
- });
32
- return {
33
- regex: new RegExp(`^${regexPattern}$`),
34
- paramNames,
35
- };
36
- }
37
-
38
- function createRouter() {
39
- const addRoute = (method: string, path: string, handler: any, paramNames: string[], regex: RegExp) => {
40
- routes.push({ method, pathPattern: path, regex, paramNames, handler });
41
- };
42
-
43
- return {
44
- get: (path: string, handler: any) => {
45
- const { regex, paramNames } = parsePathPattern(path);
46
- if (path.includes(':')) {
47
- addRoute('GET', path, handler, paramNames, regex);
48
- } else {
49
- addRoute('GET', path, handler, [], regex);
50
- }
51
- },
52
- post: (path: string, handler: any) => {
53
- const { regex, paramNames } = parsePathPattern(path);
54
- if (path.includes(':')) {
55
- addRoute('POST', path, handler, paramNames, regex);
56
- } else {
57
- addRoute('POST', path, handler, [], regex);
58
- }
59
- },
60
- patch: (path: string, handler: any) => {
61
- const { regex, paramNames } = parsePathPattern(path);
62
- if (path.includes(':')) {
63
- addRoute('PATCH', path, handler, paramNames, regex);
64
- } else {
65
- addRoute('PATCH', path, handler, [], regex);
66
- }
67
- },
68
- delete: (path: string, handler: any) => {
69
- const { regex, paramNames } = parsePathPattern(path);
70
- if (path.includes(':')) {
71
- addRoute('DELETE', path, handler, paramNames, regex);
72
- } else {
73
- addRoute('DELETE', path, handler, [], regex);
74
- }
75
- },
76
- };
77
- }
78
-
79
- function registerRoutes() {
80
- registerWorkOrdersRoutes(createRouter(), headers);
81
- registerCtkRoutes(createRouter(), headers);
82
- registerTechOrdersRoutes(createRouter(), headers);
83
- registerMailboxRoutes(createRouter(), headers);
84
- registerCursorRoutes(createRouter(), headers);
85
- registerLockRoutes(createRouter(), headers);
86
- registerCoordinatorRoutes(createRouter(), headers);
87
- }
88
-
89
- async function startServer() {
90
- try {
91
- await initializeDatabase();
92
- console.log('Squawk database initialized');
93
- } catch (error) {
94
- console.error('Failed to initialize database:', error);
95
- process.exit(1);
96
- }
97
-
98
- registerRoutes();
99
-
100
- const server = Bun.serve({
101
- port: parseInt(process.env.PORT || '3001', 10),
102
- async fetch(request) {
103
- const url = new URL(request.url);
104
- const path = url.pathname;
105
- const method = request.method;
106
-
107
- if (method === 'OPTIONS') {
108
- return new Response(null, { headers });
109
- }
110
-
111
- if (path === '/health') {
112
- return new Response(JSON.stringify({
113
- status: 'healthy',
114
- service: 'fleettools-consolidated',
115
- timestamp: new Date().toISOString(),
116
- version: '1.0.0',
117
- }), {
118
- headers: { ...headers, 'Content-Type': 'application/json' },
119
- });
120
- }
121
-
122
- for (const route of routes) {
123
- if (route.method !== method) continue;
124
- const match = path.match(route.regex);
125
- if (match) {
126
- try {
127
- const params: any = {};
128
- route.paramNames.forEach((name, i) => {
129
- params[name] = match[i + 1];
130
- });
131
- return await route.handler(request, params);
132
- } catch (error) {
133
- console.error('Route handler error:', error);
134
- return new Response(JSON.stringify({
135
- error: 'Internal server error',
136
- message: error instanceof Error ? error.message : 'Unknown error',
137
- }), {
138
- status: 500,
139
- headers: { ...headers, 'Content-Type': 'application/json' },
140
- });
141
- }
142
- }
143
- }
144
-
145
- // 404
146
- return new Response(JSON.stringify({
147
- error: 'Not found',
148
- path,
149
- method,
150
- }), {
151
- status: 404,
152
- headers: { ...headers, 'Content-Type': 'application/json' },
153
- });
154
- },
155
- });
156
-
157
- setInterval(async () => {
158
- try {
159
- const { lockOps } = await import('../../../squawk/src/db/index.js');
160
- const released = await lockOps.releaseExpired();
161
- if (released > 0) {
162
- console.log(`Released ${released} expired locks`);
163
- }
164
- } catch (error) {
165
- console.error('Error releasing expired locks:', error);
166
- }
167
- }, 30000); // Check every 30 seconds
168
-
169
- console.log(`FleetTools Consolidated API server listening on port ${server.port}`);
170
- console.log(`Health check: http://localhost:${server.port}/health`);
171
- console.log('\nFlightline Endpoints:');
172
- console.log(' GET /api/v1/work-orders - List work orders');
173
- console.log(' POST /api/v1/work-orders - Create work order');
174
- console.log(' GET /api/v1/work-orders/:id - Get work order');
175
- console.log(' PATCH /api/v1/work-orders/:id - Update work order');
176
- console.log(' DELETE /api/v1/work-orders/:id - Delete work order');
177
- console.log(' GET /api/v1/ctk/reservations - List CTK reservations');
178
- console.log(' POST /api/v1/ctk/reserve - Reserve file');
179
- console.log(' POST /api/v1/ctk/release - Release reservation');
180
- console.log(' GET /api/v1/tech-orders - List tech orders');
181
- console.log(' POST /api/v1/tech-orders - Create tech order');
182
- console.log('\nSquawk Endpoints:');
183
- console.log(' POST /api/v1/mailbox/append - Append events to mailbox');
184
- console.log(' GET /api/v1/mailbox/:streamId - Get mailbox contents');
185
- console.log(' POST /api/v1/cursor/advance - Advance cursor position');
186
- console.log(' GET /api/v1/cursor/:cursorId - Get cursor position');
187
- console.log(' POST /api/v1/lock/acquire - Acquire file lock');
188
- console.log(' POST /api/v1/lock/release - Release file lock');
189
- console.log(' GET /api/v1/locks - List all active locks');
190
- console.log(' GET /api/v1/coordinator/status - Get coordinator status');
191
-
192
- process.on('SIGINT', () => {
193
- console.log('\nShutting down...');
194
- closeDatabase();
195
- server.stop();
196
- process.exit(0);
197
- });
198
-
199
- process.on('SIGTERM', () => {
200
- console.log('\nShutting down...');
201
- closeDatabase();
202
- server.stop();
203
- process.exit(0);
204
- });
205
-
206
- return server;
207
- }
208
-
209
- const server = await startServer();
210
-
211
- export { server };
@@ -1,130 +0,0 @@
1
- /**
2
- * Agent Validation Schemas
3
- *
4
- * Zod validation schemas for agent coordination
5
- */
6
-
7
- import { z } from 'zod';
8
-
9
- // Agent Type Schema
10
- export const AgentTypeSchema = z.enum([
11
- 'frontend',
12
- 'backend',
13
- 'testing',
14
- 'documentation',
15
- 'security',
16
- 'performance'
17
- ]);
18
-
19
- // Agent Configuration Schema
20
- export const AgentConfigSchema = z.object({
21
- timeout: z.number().int().positive().optional(),
22
- retries: z.number().int().min(0).max(10).optional(),
23
- resources: z.object({
24
- memory: z.string().optional(),
25
- cpu: z.string().optional(),
26
- }).optional(),
27
- environment: z.record(z.string()).optional(),
28
- });
29
-
30
- // Agent Spawn Request Schema
31
- export const AgentSpawnRequestSchema = z.object({
32
- type: AgentTypeSchema,
33
- task: z.string().optional(),
34
- metadata: z.record(z.unknown()).optional(),
35
- config: AgentConfigSchema.optional(),
36
- });
37
-
38
- // Agent Update Request Schema
39
- export const AgentUpdateRequestSchema = z.object({
40
- status: z.enum(['idle', 'busy', 'error']).optional(),
41
- metadata: z.record(z.unknown()).optional(),
42
- heartbeat: z.boolean().optional(),
43
- });
44
-
45
- // Validation functions
46
- export class AgentValidator {
47
- /**
48
- * Validate agent spawn request
49
- */
50
- static validateSpawnRequest(data: unknown) {
51
- const result = AgentSpawnRequestSchema.safeParse(data);
52
-
53
- if (!result.success) {
54
- throw new Error(`Invalid spawn request: ${result.error.message}`);
55
- }
56
-
57
- return result.data;
58
- }
59
-
60
- /**
61
- * Validate agent configuration
62
- */
63
- static validateConfig(data: unknown) {
64
- const result = AgentConfigSchema.safeParse(data);
65
-
66
- if (!result.success) {
67
- throw new Error(`Invalid agent config: ${result.error.message}`);
68
- }
69
-
70
- return result.data;
71
- }
72
-
73
- /**
74
- * Validate agent type
75
- */
76
- static validateAgentType(type: string) {
77
- const result = AgentTypeSchema.safeParse(type);
78
-
79
- if (!result.success) {
80
- throw new Error(`Invalid agent type: ${result.error.message}`);
81
- }
82
-
83
- return result.data;
84
- }
85
-
86
- /**
87
- * Validate agent ID format
88
- */
89
- static validateAgentId(id: string): boolean {
90
- // Agent IDs should follow pattern: agt_<uuid>
91
- const agentIdPattern = /^agt_[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
92
- return agentIdPattern.test(id);
93
- }
94
-
95
- /**
96
- * Check if agent type is suitable for task type
97
- */
98
- static isAgentSuitableForTask(agentType: string, taskType: string): boolean {
99
- const suitabilityMap: Record<string, string[]> = {
100
- 'frontend': ['ui', 'frontend', 'component', 'interface'],
101
- 'backend': ['api', 'backend', 'server', 'database'],
102
- 'testing': ['test', 'testing', 'qa', 'validation'],
103
- 'documentation': ['docs', 'documentation', 'readme', 'guide'],
104
- 'security': ['security', 'audit', 'vulnerability', 'scan'],
105
- 'performance': ['performance', 'optimization', 'benchmark', 'metrics']
106
- };
107
-
108
- const agentCapabilities = suitabilityMap[agentType] || [];
109
- return agentCapabilities.includes(taskType.toLowerCase());
110
- }
111
-
112
- /**
113
- * Get recommended agents for task type
114
- */
115
- static getRecommendedAgents(taskType: string): string[] {
116
- const taskToAgents: Record<string, string[]> = {
117
- 'ui': ['frontend'],
118
- 'frontend': ['frontend'],
119
- 'api': ['backend'],
120
- 'backend': ['backend'],
121
- 'test': ['testing'],
122
- 'security': ['security'],
123
- 'docs': ['documentation'],
124
- 'performance': ['performance'],
125
- 'general': ['backend', 'frontend'] // General tasks can go to multiple types
126
- };
127
-
128
- return taskToAgents[taskType.toLowerCase()] || ['backend']; // Default to backend
129
- }
130
- }
@@ -1,59 +0,0 @@
1
-
2
-
3
- export class HttpError extends Error {
4
- constructor(
5
- public status: number,
6
- message: string,
7
- public details?: any
8
- ) {
9
- super(message);
10
- this.name = 'HttpError';
11
- }
12
- }
13
-
14
- export function errorHandler(error: unknown): Response {
15
- const timestamp = new Date().toISOString();
16
-
17
- if (error instanceof HttpError) {
18
- console.error(`[${timestamp}] HTTP ${error.status}: ${error.message}`, error.details);
19
- return new Response(JSON.stringify({
20
- error: error.message,
21
- details: error.details,
22
- timestamp,
23
- }), {
24
- status: error.status,
25
- headers: { 'Content-Type': 'application/json' },
26
- });
27
- }
28
-
29
- if (error instanceof SyntaxError && 'status' in error) {
30
- console.error(`[${timestamp}] JSON Parse Error:`, error.message);
31
- return new Response(JSON.stringify({
32
- error: 'Invalid JSON in request body',
33
- timestamp,
34
- }), {
35
- status: 400,
36
- headers: { 'Content-Type': 'application/json' },
37
- });
38
- }
39
-
40
- console.error(`[${timestamp}] Internal Server Error:`, error);
41
- return new Response(JSON.stringify({
42
- error: 'Internal server error',
43
- message: error instanceof Error ? error.message : 'Unknown error',
44
- timestamp,
45
- }), {
46
- status: 500,
47
- headers: { 'Content-Type': 'application/json' },
48
- });
49
- }
50
-
51
- export function withErrorHandler(handler: (request: Request) => Promise<Response>): (request: Request) => Promise<Response> {
52
- return async (request: Request) => {
53
- try {
54
- return await handler(request);
55
- } catch (error) {
56
- return errorHandler(error);
57
- }
58
- };
59
- }