@fleettools/server 0.1.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 (308) hide show
  1. package/.flightline/checkpoints.db +0 -0
  2. package/.flightline/ctk/04a5510b-1e09-40c6-91c8-399c22138708.json +9 -0
  3. package/.flightline/ctk/0ecde721-7827-4039-995a-974e24493cc5.json +9 -0
  4. package/.flightline/ctk/268bbdbd-ddd7-46b2-845f-56a138aa518a.json +9 -0
  5. package/.flightline/ctk/6f476f2e-776c-407a-b441-b9365c0bae95.json +9 -0
  6. package/.flightline/ctk/7e10d0d5-fbc2-4661-af03-53de89e064db.json +9 -0
  7. package/.flightline/ctk/90783096-b7d4-49c5-8153-3c35018a2e61.json +9 -0
  8. package/.flightline/ctk/9a3b6d18-8a46-4728-90aa-279800a8e397.json +9 -0
  9. package/.flightline/ctk/ae30e192-b386-4ee2-899c-93f86785d3f3.json +9 -0
  10. package/.flightline/ctk/d0e9c49e-10df-413e-8cf7-37232b1838ca.json +9 -0
  11. package/.flightline/ctk/eae1a12b-2e9d-4c3f-8619-dafbb1346e96.json +9 -0
  12. package/.flightline/mailboxes/mbx_00dae6ba-0b5e-4a8d-a86d-93c8640872c3/manifest.json +6 -0
  13. package/.flightline/mailboxes/mbx_05b0bfa9-c4f5-4f68-ba75-6202820f49c3/manifest.json +6 -0
  14. package/.flightline/mailboxes/mbx_0a6b8fb2-729e-4385-8241-839c36b929d7/manifest.json +6 -0
  15. package/.flightline/mailboxes/mbx_0abca4ab-8e34-409c-997f-481e80e450dc/manifest.json +6 -0
  16. package/.flightline/mailboxes/mbx_173e5fb9-8203-418d-93c2-4f8c91f2d842/manifest.json +6 -0
  17. package/.flightline/mailboxes/mbx_22b62201-0570-4ce8-b0a7-0f4b445f6d9e/manifest.json +6 -0
  18. package/.flightline/mailboxes/mbx_2724efb1-76e1-4147-9620-4defcc65510f/manifest.json +6 -0
  19. package/.flightline/mailboxes/mbx_35b8bfcd-5a54-48f1-8759-cb1f8ffe775d/manifest.json +6 -0
  20. package/.flightline/mailboxes/mbx_3bc5193a-604d-4f52-be00-e56277643358/manifest.json +6 -0
  21. package/.flightline/mailboxes/mbx_3bd500f3-c111-427a-8cd7-a004125d6dc1/manifest.json +6 -0
  22. package/.flightline/mailboxes/mbx_45ce9ae8-5299-44dc-a1b5-4d63914a9609/manifest.json +6 -0
  23. package/.flightline/mailboxes/mbx_4779c645-1efc-4c76-ab21-ff93f973ee8f/manifest.json +6 -0
  24. package/.flightline/mailboxes/mbx_482237cf-87c8-486e-a24d-0941be2f480d/manifest.json +6 -0
  25. package/.flightline/mailboxes/mbx_4b7e23c8-5680-4edd-a276-88803dd5fb6f/manifest.json +6 -0
  26. package/.flightline/mailboxes/mbx_4dd3b945-d846-4c7a-94eb-6eeb25a0dc6b/manifest.json +6 -0
  27. package/.flightline/mailboxes/mbx_4ec41a62-62bb-4be4-b3ce-282d5a33acce/manifest.json +6 -0
  28. package/.flightline/mailboxes/mbx_4ff7ee7e-0c8a-43d6-a829-7c62c10af3b0/manifest.json +6 -0
  29. package/.flightline/mailboxes/mbx_7661e4fb-a919-4af1-86f7-3eaef22f1d81/manifest.json +6 -0
  30. package/.flightline/mailboxes/mbx_7ca872bb-69ab-4e7d-a7c6-4888ec8e7749/manifest.json +6 -0
  31. package/.flightline/mailboxes/mbx_7e6d5707-2aa5-4770-a7be-6b1be93d0d87/manifest.json +6 -0
  32. package/.flightline/mailboxes/mbx_87bef50d-3c59-429b-a995-5872f6278c37/manifest.json +6 -0
  33. package/.flightline/mailboxes/mbx_88d1ea56-0b69-48c4-9fcf-ce1e1f7527ba/manifest.json +6 -0
  34. package/.flightline/mailboxes/mbx_8bfb6bd7-07d1-4836-ae9d-3c93668c6dfe/manifest.json +6 -0
  35. package/.flightline/mailboxes/mbx_93355083-e95b-4341-b625-56fcc1e4fc0c/manifest.json +6 -0
  36. package/.flightline/mailboxes/mbx_999fd94c-ca56-4fec-8d30-8b677cf40ad6/manifest.json +6 -0
  37. package/.flightline/mailboxes/mbx_a039fd15-7ee1-4bd6-906d-55dea8d0e489/manifest.json +6 -0
  38. package/.flightline/mailboxes/mbx_a0b7363f-7cc6-4940-8e29-2dc85793a77d/manifest.json +6 -0
  39. package/.flightline/mailboxes/mbx_a31e8b61-9643-4c78-939d-d1696d0420d9/manifest.json +6 -0
  40. package/.flightline/mailboxes/mbx_acc51591-256c-4bed-9a51-514b1811f4cd/manifest.json +6 -0
  41. package/.flightline/mailboxes/mbx_b1efebd9-5981-49fa-8775-20fa00d0c902/manifest.json +6 -0
  42. package/.flightline/mailboxes/mbx_ba9d4c61-39a3-4852-95d7-bd34e3605a43/manifest.json +6 -0
  43. package/.flightline/mailboxes/mbx_c549b60f-65fd-48d5-8cd6-2f053292b112/manifest.json +6 -0
  44. package/.flightline/mailboxes/mbx_d0f839a5-3ab9-42e2-b438-df5825d049fe/manifest.json +6 -0
  45. package/.flightline/mailboxes/mbx_d826d57e-9817-4f3c-ab94-2bfafa352f6d/manifest.json +6 -0
  46. package/.flightline/mailboxes/mbx_da102f37-632c-4c0b-be4c-4270a74c06b9/manifest.json +6 -0
  47. package/.flightline/mailboxes/mbx_df4506f5-67f2-4cf6-9113-93994b76f39b/manifest.json +6 -0
  48. package/.flightline/mailboxes/mbx_e038e93b-87ea-4122-9578-6540018697b7/manifest.json +6 -0
  49. package/.flightline/mailboxes/mbx_e0c171c5-407f-44dc-9ef9-e26e8b99ceac/manifest.json +6 -0
  50. package/.flightline/mailboxes/mbx_e64770bf-7220-4d0f-848c-d751ea1c7376/manifest.json +6 -0
  51. package/.flightline/mailboxes/mbx_e7f0edda-0fab-484d-ab4d-d8a8e363cd14/manifest.json +6 -0
  52. package/.flightline/mailboxes/mbx_ec7d9118-8594-4d79-bf79-f43afdfaf156/manifest.json +6 -0
  53. package/.flightline/mailboxes/mbx_ee06ec01-03e4-485a-ae2b-d8bdb6e7a3a8/manifest.json +6 -0
  54. package/.flightline/mailboxes/mbx_fd467681-f9cf-4a54-b06a-836df6de2ccc/manifest.json +6 -0
  55. package/.flightline/progress.db +0 -0
  56. package/.flightline/recovery.log +1 -0
  57. package/.flightline/tasks.db +0 -0
  58. package/.flightline/tech-orders/to_0c93d981-6b4e-4055-8678-f39c009d1db1.json +11 -0
  59. package/.flightline/tech-orders/to_1862f8ed-c487-4914-9f1e-528af6d4f053.json +11 -0
  60. package/.flightline/tech-orders/to_2335a57d-f400-4efa-b108-e13ece57520d.json +11 -0
  61. package/.flightline/tech-orders/to_2bd8dbdd-ac57-4b84-b977-33a3637d10d1.json +11 -0
  62. package/.flightline/tech-orders/to_37057c01-39b5-403a-991f-afb186abde95.json +11 -0
  63. package/.flightline/tech-orders/to_9e7288bb-c0fd-488a-a83d-1e9337bd0f1f.json +11 -0
  64. package/.flightline/tech-orders/to_aa0fe80b-9de7-40f6-a106-353b5bca10bd.json +11 -0
  65. package/.flightline/tech-orders/to_c1a0f480-c863-4203-a070-76ad77137845.json +11 -0
  66. package/.flightline/tech-orders/to_cf1e882a-cf56-45a4-8d19-494925e5f449.json +11 -0
  67. package/.flightline/work-orders/wo_5a29168d-5fb4-41d7-8dac-1d1151d9248f/manifest.json +15 -0
  68. package/.flightline/work-orders/wo_6c8c38bb-17a1-4885-ada4-dbfc5cc12d7a/manifest.json +15 -0
  69. package/.flightline/work-orders/wo_cadeb9b2-ea42-4491-b429-e2d467942b5c/manifest.json +12 -0
  70. package/.flightline/work-orders/wo_cc7b669c-16c4-4ef7-8a76-d1813219d0be/manifest.json +15 -0
  71. package/AGENTS.md +30 -0
  72. package/dist/agent-lifecycle.js +148 -0
  73. package/dist/agent-spawner.js +460 -0
  74. package/dist/agent-validation.js +111 -0
  75. package/dist/index.js +255 -0
  76. package/dist/server/api/src/coordination/agent-lifecycle.d.ts +12 -0
  77. package/dist/server/api/src/coordination/agent-lifecycle.d.ts.map +1 -0
  78. package/dist/server/api/src/coordination/agent-lifecycle.js +12 -0
  79. package/dist/server/api/src/coordination/agent-lifecycle.js.map +1 -0
  80. package/dist/server/api/src/coordination/agent-runner.d.ts +9 -0
  81. package/dist/server/api/src/coordination/agent-runner.d.ts.map +1 -0
  82. package/dist/server/api/src/coordination/agent-runner.js +416 -0
  83. package/dist/server/api/src/coordination/agent-runner.js.map +1 -0
  84. package/dist/server/api/src/coordination/agent-spawner-routes.d.ts +7 -0
  85. package/dist/server/api/src/coordination/agent-spawner-routes.d.ts.map +1 -0
  86. package/dist/server/api/src/coordination/agent-spawner-routes.js +321 -0
  87. package/dist/server/api/src/coordination/agent-spawner-routes.js.map +1 -0
  88. package/dist/server/api/src/coordination/agent-spawner.d.ts +187 -0
  89. package/dist/server/api/src/coordination/agent-spawner.d.ts.map +1 -0
  90. package/dist/server/api/src/coordination/agent-spawner.js +712 -0
  91. package/dist/server/api/src/coordination/agent-spawner.js.map +1 -0
  92. package/dist/server/api/src/coordination/agents.d.ts +13 -0
  93. package/dist/server/api/src/coordination/agents.d.ts.map +1 -0
  94. package/dist/server/api/src/coordination/agents.js +464 -0
  95. package/dist/server/api/src/coordination/agents.js.map +1 -0
  96. package/dist/server/api/src/coordination/checkpoint-routes.d.ts +33 -0
  97. package/dist/server/api/src/coordination/checkpoint-routes.d.ts.map +1 -0
  98. package/dist/server/api/src/coordination/checkpoint-routes.js +323 -0
  99. package/dist/server/api/src/coordination/checkpoint-routes.js.map +1 -0
  100. package/dist/server/api/src/coordination/conflict-resolver.d.ts +152 -0
  101. package/dist/server/api/src/coordination/conflict-resolver.d.ts.map +1 -0
  102. package/dist/server/api/src/coordination/conflict-resolver.js +502 -0
  103. package/dist/server/api/src/coordination/conflict-resolver.js.map +1 -0
  104. package/dist/server/api/src/coordination/missions.d.ts +9 -0
  105. package/dist/server/api/src/coordination/missions.d.ts.map +1 -0
  106. package/dist/server/api/src/coordination/missions.js +148 -0
  107. package/dist/server/api/src/coordination/missions.js.map +1 -0
  108. package/dist/server/api/src/coordination/monitor.d.ts +175 -0
  109. package/dist/server/api/src/coordination/monitor.d.ts.map +1 -0
  110. package/dist/server/api/src/coordination/monitor.js +410 -0
  111. package/dist/server/api/src/coordination/monitor.js.map +1 -0
  112. package/dist/server/api/src/coordination/notifier.d.ts +160 -0
  113. package/dist/server/api/src/coordination/notifier.d.ts.map +1 -0
  114. package/dist/server/api/src/coordination/notifier.js +422 -0
  115. package/dist/server/api/src/coordination/notifier.js.map +1 -0
  116. package/dist/server/api/src/coordination/progress-tracker.d.ts +98 -0
  117. package/dist/server/api/src/coordination/progress-tracker.d.ts.map +1 -0
  118. package/dist/server/api/src/coordination/progress-tracker.js +323 -0
  119. package/dist/server/api/src/coordination/progress-tracker.js.map +1 -0
  120. package/dist/server/api/src/coordination/recovery-manager.d.ts +135 -0
  121. package/dist/server/api/src/coordination/recovery-manager.d.ts.map +1 -0
  122. package/dist/server/api/src/coordination/recovery-manager.js +435 -0
  123. package/dist/server/api/src/coordination/recovery-manager.js.map +1 -0
  124. package/dist/server/api/src/coordination/task-decomposer.d.ts +90 -0
  125. package/dist/server/api/src/coordination/task-decomposer.d.ts.map +1 -0
  126. package/dist/server/api/src/coordination/task-decomposer.js +412 -0
  127. package/dist/server/api/src/coordination/task-decomposer.js.map +1 -0
  128. package/dist/server/api/src/coordination/task-queue-routes.d.ts +7 -0
  129. package/dist/server/api/src/coordination/task-queue-routes.d.ts.map +1 -0
  130. package/dist/server/api/src/coordination/task-queue-routes.js +266 -0
  131. package/dist/server/api/src/coordination/task-queue-routes.js.map +1 -0
  132. package/dist/server/api/src/coordination/task-queue.d.ts +104 -0
  133. package/dist/server/api/src/coordination/task-queue.d.ts.map +1 -0
  134. package/dist/server/api/src/coordination/task-queue.js +378 -0
  135. package/dist/server/api/src/coordination/task-queue.js.map +1 -0
  136. package/dist/server/api/src/coordination/tasks.d.ts +7 -0
  137. package/dist/server/api/src/coordination/tasks.d.ts.map +1 -0
  138. package/dist/server/api/src/coordination/tasks.js +59 -0
  139. package/dist/server/api/src/coordination/tasks.js.map +1 -0
  140. package/dist/server/api/src/decomposition/cli.d.ts +18 -0
  141. package/dist/server/api/src/decomposition/cli.d.ts.map +1 -0
  142. package/dist/server/api/src/decomposition/cli.js +191 -0
  143. package/dist/server/api/src/decomposition/cli.js.map +1 -0
  144. package/dist/server/api/src/decomposition/codebase-analyzer.d.ts +59 -0
  145. package/dist/server/api/src/decomposition/codebase-analyzer.d.ts.map +1 -0
  146. package/dist/server/api/src/decomposition/codebase-analyzer.js +274 -0
  147. package/dist/server/api/src/decomposition/codebase-analyzer.js.map +1 -0
  148. package/dist/server/api/src/decomposition/dependency-resolver.d.ts +68 -0
  149. package/dist/server/api/src/decomposition/dependency-resolver.d.ts.map +1 -0
  150. package/dist/server/api/src/decomposition/dependency-resolver.js +261 -0
  151. package/dist/server/api/src/decomposition/dependency-resolver.js.map +1 -0
  152. package/dist/server/api/src/decomposition/index.d.ts +17 -0
  153. package/dist/server/api/src/decomposition/index.d.ts.map +1 -0
  154. package/dist/server/api/src/decomposition/index.js +19 -0
  155. package/dist/server/api/src/decomposition/index.js.map +1 -0
  156. package/dist/server/api/src/decomposition/parallelization.d.ts +40 -0
  157. package/dist/server/api/src/decomposition/parallelization.d.ts.map +1 -0
  158. package/dist/server/api/src/decomposition/parallelization.js +144 -0
  159. package/dist/server/api/src/decomposition/parallelization.js.map +1 -0
  160. package/dist/server/api/src/decomposition/planner.d.ts +84 -0
  161. package/dist/server/api/src/decomposition/planner.d.ts.map +1 -0
  162. package/dist/server/api/src/decomposition/planner.js +415 -0
  163. package/dist/server/api/src/decomposition/planner.js.map +1 -0
  164. package/dist/server/api/src/decomposition/routes.d.ts +13 -0
  165. package/dist/server/api/src/decomposition/routes.d.ts.map +1 -0
  166. package/dist/server/api/src/decomposition/routes.js +114 -0
  167. package/dist/server/api/src/decomposition/routes.js.map +1 -0
  168. package/dist/server/api/src/decomposition/strategies.d.ts +43 -0
  169. package/dist/server/api/src/decomposition/strategies.d.ts.map +1 -0
  170. package/dist/server/api/src/decomposition/strategies.js +147 -0
  171. package/dist/server/api/src/decomposition/strategies.js.map +1 -0
  172. package/dist/server/api/src/decomposition/types.d.ts +1090 -0
  173. package/dist/server/api/src/decomposition/types.d.ts.map +1 -0
  174. package/dist/server/api/src/decomposition/types.js +65 -0
  175. package/dist/server/api/src/decomposition/types.js.map +1 -0
  176. package/dist/server/api/src/decomposition/validator.d.ts +84 -0
  177. package/dist/server/api/src/decomposition/validator.d.ts.map +1 -0
  178. package/dist/server/api/src/decomposition/validator.js +314 -0
  179. package/dist/server/api/src/decomposition/validator.js.map +1 -0
  180. package/dist/server/api/src/flightline/ctk.d.ts +2 -0
  181. package/dist/server/api/src/flightline/ctk.d.ts.map +1 -0
  182. package/dist/server/api/src/flightline/ctk.js +114 -0
  183. package/dist/server/api/src/flightline/ctk.js.map +1 -0
  184. package/dist/server/api/src/flightline/tech-orders.d.ts +2 -0
  185. package/dist/server/api/src/flightline/tech-orders.d.ts.map +1 -0
  186. package/dist/server/api/src/flightline/tech-orders.js +74 -0
  187. package/dist/server/api/src/flightline/tech-orders.js.map +1 -0
  188. package/dist/server/api/src/flightline/work-orders.d.ts +2 -0
  189. package/dist/server/api/src/flightline/work-orders.d.ts.map +1 -0
  190. package/dist/server/api/src/flightline/work-orders.js +178 -0
  191. package/dist/server/api/src/flightline/work-orders.js.map +1 -0
  192. package/dist/server/api/src/index.d.ts +3 -0
  193. package/dist/server/api/src/index.d.ts.map +1 -0
  194. package/dist/server/api/src/index.js +192 -0
  195. package/dist/server/api/src/index.js.map +1 -0
  196. package/dist/server/api/src/middleware/agent-validation.d.ts +161 -0
  197. package/dist/server/api/src/middleware/agent-validation.d.ts.map +1 -0
  198. package/dist/server/api/src/middleware/agent-validation.js +112 -0
  199. package/dist/server/api/src/middleware/agent-validation.js.map +1 -0
  200. package/dist/server/api/src/middleware/error-handler.d.ts +8 -0
  201. package/dist/server/api/src/middleware/error-handler.d.ts.map +1 -0
  202. package/dist/server/api/src/middleware/error-handler.js +54 -0
  203. package/dist/server/api/src/middleware/error-handler.js.map +1 -0
  204. package/dist/server/api/src/middleware/logger.d.ts +8 -0
  205. package/dist/server/api/src/middleware/logger.d.ts.map +1 -0
  206. package/dist/server/api/src/middleware/logger.js +31 -0
  207. package/dist/server/api/src/middleware/logger.js.map +1 -0
  208. package/dist/server/api/src/middleware/validation.d.ts +322 -0
  209. package/dist/server/api/src/middleware/validation.d.ts.map +1 -0
  210. package/dist/server/api/src/middleware/validation.js +189 -0
  211. package/dist/server/api/src/middleware/validation.js.map +1 -0
  212. package/dist/server/api/src/squawk/blocker-handler.d.ts +111 -0
  213. package/dist/server/api/src/squawk/blocker-handler.d.ts.map +1 -0
  214. package/dist/server/api/src/squawk/blocker-handler.js +262 -0
  215. package/dist/server/api/src/squawk/blocker-handler.js.map +1 -0
  216. package/dist/server/api/src/squawk/coordinator.d.ts +2 -0
  217. package/dist/server/api/src/squawk/coordinator.d.ts.map +1 -0
  218. package/dist/server/api/src/squawk/coordinator.js +24 -0
  219. package/dist/server/api/src/squawk/coordinator.js.map +1 -0
  220. package/dist/server/api/src/squawk/cursor.d.ts +2 -0
  221. package/dist/server/api/src/squawk/cursor.d.ts.map +1 -0
  222. package/dist/server/api/src/squawk/cursor.js +55 -0
  223. package/dist/server/api/src/squawk/cursor.js.map +1 -0
  224. package/dist/server/api/src/squawk/dependency-resolver.d.ts +107 -0
  225. package/dist/server/api/src/squawk/dependency-resolver.d.ts.map +1 -0
  226. package/dist/server/api/src/squawk/dependency-resolver.js +324 -0
  227. package/dist/server/api/src/squawk/dependency-resolver.js.map +1 -0
  228. package/dist/server/api/src/squawk/dispatch-orchestrator.d.ts +117 -0
  229. package/dist/server/api/src/squawk/dispatch-orchestrator.d.ts.map +1 -0
  230. package/dist/server/api/src/squawk/dispatch-orchestrator.js +296 -0
  231. package/dist/server/api/src/squawk/dispatch-orchestrator.js.map +1 -0
  232. package/dist/server/api/src/squawk/lock-coordinator.d.ts +118 -0
  233. package/dist/server/api/src/squawk/lock-coordinator.d.ts.map +1 -0
  234. package/dist/server/api/src/squawk/lock-coordinator.js +279 -0
  235. package/dist/server/api/src/squawk/lock-coordinator.js.map +1 -0
  236. package/dist/server/api/src/squawk/lock.d.ts +2 -0
  237. package/dist/server/api/src/squawk/lock.d.ts.map +1 -0
  238. package/dist/server/api/src/squawk/lock.js +87 -0
  239. package/dist/server/api/src/squawk/lock.js.map +1 -0
  240. package/dist/server/api/src/squawk/mailbox.d.ts +2 -0
  241. package/dist/server/api/src/squawk/mailbox.d.ts.map +1 -0
  242. package/dist/server/api/src/squawk/mailbox.js +66 -0
  243. package/dist/server/api/src/squawk/mailbox.js.map +1 -0
  244. package/dist/server/api/src/squawk/spawning.d.ts +79 -0
  245. package/dist/server/api/src/squawk/spawning.d.ts.map +1 -0
  246. package/dist/server/api/src/squawk/spawning.js +226 -0
  247. package/dist/server/api/src/squawk/spawning.js.map +1 -0
  248. package/dist/server/api/src/squawk/specialist-tools.d.ts +206 -0
  249. package/dist/server/api/src/squawk/specialist-tools.d.ts.map +1 -0
  250. package/dist/server/api/src/squawk/specialist-tools.js +411 -0
  251. package/dist/server/api/src/squawk/specialist-tools.js.map +1 -0
  252. package/dist/server/api/src/types/api.d.ts +63 -0
  253. package/dist/server/api/src/types/api.d.ts.map +1 -0
  254. package/dist/server/api/src/types/api.js +5 -0
  255. package/dist/server/api/src/types/api.js.map +1 -0
  256. package/dist/squawk/src/db/index.d.ts +30 -0
  257. package/dist/squawk/src/db/index.d.ts.map +1 -0
  258. package/dist/squawk/src/db/index.js +329 -0
  259. package/dist/squawk/src/db/index.js.map +1 -0
  260. package/dist/squawk/src/db/sqlite.d.ts +31 -0
  261. package/dist/squawk/src/db/sqlite.d.ts.map +1 -0
  262. package/dist/squawk/src/db/sqlite.js +558 -0
  263. package/dist/squawk/src/db/sqlite.js.map +1 -0
  264. package/dist/squawk/src/db/types.d.ts +611 -0
  265. package/dist/squawk/src/db/types.d.ts.map +1 -0
  266. package/dist/squawk/src/db/types.js +4 -0
  267. package/dist/squawk/src/db/types.js.map +1 -0
  268. package/dist/task-queue.js +377 -0
  269. package/dist/validation.js +188 -0
  270. package/e2e-integration.test.ts +290 -0
  271. package/integration.test.ts +186 -0
  272. package/package.json +22 -0
  273. package/phase1-integration.test.ts +455 -0
  274. package/phase2-verification.test.ts +135 -0
  275. package/server.log +58 -0
  276. package/src/agent-runner.js +877 -0
  277. package/src/coordination/agent-lifecycle.ts +13 -0
  278. package/src/coordination/agent-runner.ts +479 -0
  279. package/src/coordination/agent-spawner-routes.ts +340 -0
  280. package/src/coordination/agent-spawner.ts +885 -0
  281. package/src/coordination/agents.ts +525 -0
  282. package/src/coordination/checkpoint-routes.ts +382 -0
  283. package/src/coordination/conflict-resolver.ts +640 -0
  284. package/src/coordination/missions.ts +219 -0
  285. package/src/coordination/monitor.ts +593 -0
  286. package/src/coordination/notifier.ts +547 -0
  287. package/src/coordination/progress-tracker.ts +410 -0
  288. package/src/coordination/recovery-manager.ts +531 -0
  289. package/src/coordination/task-decomposer.ts +491 -0
  290. package/src/coordination/task-queue-routes.ts +284 -0
  291. package/src/coordination/task-queue.ts +480 -0
  292. package/src/coordination/tasks.ts +72 -0
  293. package/src/flightline/ctk.ts +131 -0
  294. package/src/flightline/tech-orders.ts +85 -0
  295. package/src/flightline/work-orders.ts +202 -0
  296. package/src/index.ts +211 -0
  297. package/src/middleware/agent-validation.ts +130 -0
  298. package/src/middleware/error-handler.ts +59 -0
  299. package/src/middleware/logger.ts +37 -0
  300. package/src/middleware/validation.ts +235 -0
  301. package/src/squawk/coordinator.ts +26 -0
  302. package/src/squawk/cursor.ts +62 -0
  303. package/src/squawk/lock.ts +98 -0
  304. package/src/squawk/mailbox.ts +75 -0
  305. package/src/types/api.ts +71 -0
  306. package/test-api.ts +310 -0
  307. package/test-enhanced-agents.ts +428 -0
  308. package/tsconfig.json +30 -0
@@ -0,0 +1,525 @@
1
+ /**
2
+ * Agent API Routes
3
+ *
4
+ * RESTful endpoints for agent lifecycle management
5
+ * POST /api/v1/agents/spawn - Spawn new agent
6
+ * GET /api/v1/agents - List all agents
7
+ * GET /api/v1/agents/:id - Get agent details
8
+ * DELETE /api/v1/agents/:id - Terminate agent
9
+ * POST /api/v1/agents/:id/progress - Report agent progress
10
+ * POST /api/v1/agents/:id/heartbeat - Agent heartbeat
11
+ */
12
+
13
+ import { AgentSpawner, AgentType, AgentStatus } from './agent-spawner.js';
14
+
15
+ const spawner = new AgentSpawner();
16
+
17
+ export function registerAgentRoutes(
18
+ router: any,
19
+ headers: Record<string, string>
20
+ ): void {
21
+ router.post('/api/v1/agents/spawn', async (req: Request) => {
22
+ try {
23
+ const body = (await req.json()) as {
24
+ type?: AgentType;
25
+ task?: string;
26
+ metadata?: Record<string, unknown>;
27
+ config?: Record<string, unknown>;
28
+ };
29
+
30
+ const { type, task, metadata, config } = body;
31
+
32
+ if (!type || !Object.values(AgentType).includes(type)) {
33
+ return new Response(JSON.stringify({
34
+ error: 'Invalid agent type',
35
+ validTypes: Object.values(AgentType)
36
+ }), {
37
+ status: 400,
38
+ headers: { ...headers, 'Content-Type': 'application/json' }
39
+ });
40
+ }
41
+
42
+ const agent = await spawner.spawn({
43
+ type,
44
+ task,
45
+ metadata,
46
+ config
47
+ });
48
+
49
+ return new Response(JSON.stringify({
50
+ success: true,
51
+ data: {
52
+ agent: {
53
+ id: agent.id,
54
+ type: agent.type,
55
+ status: agent.status,
56
+ mailboxId: agent.mailboxId,
57
+ pid: agent.pid,
58
+ createdAt: agent.createdAt,
59
+ updatedAt: agent.updatedAt,
60
+ metadata: agent.metadata
61
+ }
62
+ }
63
+ }), {
64
+ headers: { ...headers, 'Content-Type': 'application/json' }
65
+ });
66
+ } catch (error: any) {
67
+ console.error('Agent spawn error:', error);
68
+ return new Response(JSON.stringify({
69
+ error: 'Failed to spawn agent',
70
+ message: error?.message || 'Unknown error'
71
+ }), {
72
+ status: 500,
73
+ headers: { ...headers, 'Content-Type': 'application/json' }
74
+ });
75
+ }
76
+ });
77
+
78
+ router.get('/api/v1/agents', async (req: Request) => {
79
+ try {
80
+ const url = new URL(req.url);
81
+ const typeParam = url.searchParams.get('type');
82
+ const statusParam = url.searchParams.get('status');
83
+
84
+ let agents = spawner.getActiveAgents();
85
+
86
+ if (typeParam && Object.values(AgentType).includes(typeParam as AgentType)) {
87
+ agents = spawner.getAgentsByType(typeParam as AgentType);
88
+ }
89
+
90
+ if (statusParam && Object.values(AgentStatus).includes(statusParam as AgentStatus)) {
91
+ agents = agents.filter(a => a.status === statusParam);
92
+ }
93
+
94
+ const agentsWithStatus = await Promise.all(
95
+ agents.map(async (agent) => {
96
+ const monitor = await spawner.monitor(agent.id);
97
+ return {
98
+ id: agent.id,
99
+ type: agent.type,
100
+ callsign: `${agent.type}-${agent.id.slice(0, 8)}`,
101
+ status: monitor.status,
102
+ pid: agent.pid,
103
+ mailboxId: agent.mailboxId,
104
+ createdAt: agent.createdAt,
105
+ updatedAt: agent.updatedAt,
106
+ uptime: monitor.uptime,
107
+ lastHeartbeat: monitor.lastHeartbeat,
108
+ resourceUsage: monitor.resourceUsage,
109
+ errors: monitor.errors,
110
+ metadata: agent.metadata
111
+ };
112
+ })
113
+ );
114
+
115
+ return new Response(JSON.stringify({
116
+ success: true,
117
+ data: {
118
+ agents: agentsWithStatus,
119
+ total: agentsWithStatus.length
120
+ }
121
+ }), {
122
+ headers: { ...headers, 'Content-Type': 'application/json' }
123
+ });
124
+ } catch (error: any) {
125
+ console.error('List agents error:', error);
126
+ return new Response(JSON.stringify({
127
+ error: 'Failed to list agents',
128
+ message: error?.message || 'Unknown error'
129
+ }), {
130
+ status: 500,
131
+ headers: { ...headers, 'Content-Type': 'application/json' }
132
+ });
133
+ }
134
+ });
135
+
136
+ router.get('/api/v1/agents/:id', async (req: Request, params: { id: string }) => {
137
+ try {
138
+ const agent = spawner.getAgent(params.id);
139
+
140
+ if (!agent) {
141
+ return new Response(JSON.stringify({
142
+ error: 'Agent not found',
143
+ id: params.id
144
+ }), {
145
+ status: 404,
146
+ headers: { ...headers, 'Content-Type': 'application/json' }
147
+ });
148
+ }
149
+
150
+ const monitor = await spawner.monitor(agent.id);
151
+
152
+ return new Response(JSON.stringify({
153
+ success: true,
154
+ data: {
155
+ agent: {
156
+ id: agent.id,
157
+ type: agent.type,
158
+ callsign: `${agent.type}-${agent.id.slice(0, 8)}`,
159
+ status: monitor.status,
160
+ pid: agent.pid,
161
+ mailboxId: agent.mailboxId,
162
+ createdAt: agent.createdAt,
163
+ updatedAt: agent.updatedAt,
164
+ uptime: monitor.uptime,
165
+ lastHeartbeat: monitor.lastHeartbeat,
166
+ resourceUsage: monitor.resourceUsage,
167
+ errors: monitor.errors,
168
+ metadata: agent.metadata
169
+ }
170
+ }
171
+ }), {
172
+ headers: { ...headers, 'Content-Type': 'application/json' }
173
+ });
174
+ } catch (error: any) {
175
+ console.error('Get agent error:', error);
176
+ return new Response(JSON.stringify({
177
+ error: 'Failed to get agent',
178
+ message: error?.message || 'Unknown error'
179
+ }), {
180
+ status: 500,
181
+ headers: { ...headers, 'Content-Type': 'application/json' }
182
+ });
183
+ }
184
+ });
185
+
186
+ router.delete('/api/v1/agents/:id', async (req: Request, params: { id: string }) => {
187
+ try {
188
+ const url = new URL(req.url);
189
+ const forceParam = url.searchParams.get('force');
190
+ const reasonParam = url.searchParams.get('reason') || 'manual';
191
+
192
+ const agent = spawner.getAgent(params.id);
193
+
194
+ if (!agent) {
195
+ return new Response(JSON.stringify({
196
+ error: 'Agent not found',
197
+ id: params.id
198
+ }), {
199
+ status: 404,
200
+ headers: { ...headers, 'Content-Type': 'application/json' }
201
+ });
202
+ }
203
+
204
+ await spawner.terminate(params.id, forceParam === 'true');
205
+
206
+ return new Response(JSON.stringify({
207
+ success: true,
208
+ data: {
209
+ agent: {
210
+ id: agent.id,
211
+ type: agent.type,
212
+ callsign: `${agent.type}-${agent.id.slice(0, 8)}`,
213
+ status: AgentStatus.TERMINATED,
214
+ reason: reasonParam
215
+ }
216
+ }
217
+ }), {
218
+ headers: { ...headers, 'Content-Type': 'application/json' }
219
+ });
220
+ } catch (error: any) {
221
+ console.error('Terminate agent error:', error);
222
+ return new Response(JSON.stringify({
223
+ error: 'Failed to terminate agent',
224
+ message: error?.message || 'Unknown error'
225
+ }), {
226
+ status: 500,
227
+ headers: { ...headers, 'Content-Type': 'application/json' }
228
+ });
229
+ }
230
+ });
231
+
232
+ router.post('/api/v1/agents/:id/progress', async (req: Request, params: { id: string }) => {
233
+ try {
234
+ const body = (await req.json()) as {
235
+ status?: AgentStatus;
236
+ progress?: number;
237
+ message?: string;
238
+ };
239
+ const { status, progress, message } = body;
240
+
241
+ const agent = spawner.getAgent(params.id);
242
+ if (!agent) {
243
+ return new Response(JSON.stringify({
244
+ error: 'Agent not found',
245
+ id: params.id
246
+ }), {
247
+ status: 404,
248
+ headers: { ...headers, 'Content-Type': 'application/json' }
249
+ });
250
+ }
251
+
252
+ if (status && Object.values(AgentStatus).includes(status)) {
253
+ agent.status = status;
254
+ }
255
+
256
+ if (typeof progress === 'number' && progress >= 0 && progress <= 100) {
257
+ agent.metadata = agent.metadata || {};
258
+ agent.metadata.progress = progress;
259
+ }
260
+
261
+ if (message) {
262
+ agent.metadata = agent.metadata || {};
263
+ agent.metadata.lastMessage = message;
264
+ }
265
+
266
+ agent.updatedAt = new Date().toISOString();
267
+
268
+ return new Response(JSON.stringify({
269
+ success: true,
270
+ data: {
271
+ agentId: agent.id,
272
+ status: agent.status,
273
+ progress: agent.metadata?.progress,
274
+ timestamp: new Date().toISOString()
275
+ }
276
+ }), {
277
+ headers: { ...headers, 'Content-Type': 'application/json' }
278
+ });
279
+ } catch (error: any) {
280
+ console.error('Progress update error:', error);
281
+ return new Response(JSON.stringify({
282
+ error: 'Failed to update progress',
283
+ message: error?.message || 'Unknown error'
284
+ }), {
285
+ status: 500,
286
+ headers: { ...headers, 'Content-Type': 'application/json' }
287
+ });
288
+ }
289
+ });
290
+
291
+ router.post('/api/v1/agents/:id/heartbeat', async (req: Request, params: { id: string }) => {
292
+ try {
293
+ const body = (await req.json()) as {
294
+ timestamp?: string;
295
+ resourceUsage?: Record<string, unknown>;
296
+ };
297
+ const { timestamp, resourceUsage } = body;
298
+
299
+ const agent = spawner.getAgent(params.id);
300
+ if (!agent) {
301
+ return new Response(JSON.stringify({
302
+ error: 'Agent not found',
303
+ id: params.id
304
+ }), {
305
+ status: 404,
306
+ headers: { ...headers, 'Content-Type': 'application/json' }
307
+ });
308
+ }
309
+
310
+ await spawner.updateHeartbeat(params.id);
311
+
312
+ if (timestamp) {
313
+ agent.metadata = agent.metadata || {};
314
+ agent.metadata.lastHeartbeat = timestamp;
315
+ }
316
+
317
+ if (resourceUsage) {
318
+ agent.metadata = agent.metadata || {};
319
+ agent.metadata.resourceUsage = resourceUsage;
320
+ }
321
+
322
+ agent.updatedAt = new Date().toISOString();
323
+
324
+ return new Response(JSON.stringify({
325
+ success: true,
326
+ data: {
327
+ agentId: agent.id,
328
+ heartbeatReceived: true,
329
+ timestamp: new Date().toISOString()
330
+ }
331
+ }), {
332
+ headers: { ...headers, 'Content-Type': 'application/json' }
333
+ });
334
+ } catch (error: any) {
335
+ console.error('Heartbeat error:', error);
336
+ return new Response(JSON.stringify({
337
+ error: 'Failed to process heartbeat',
338
+ message: error?.message || 'Unknown error'
339
+ }), {
340
+ status: 500,
341
+ headers: { ...headers, 'Content-Type': 'application/json' }
342
+ });
343
+ }
344
+ });
345
+
346
+ router.get('/api/v1/agents/:id/health', async (req: Request, params: { id: string }) => {
347
+ try {
348
+ const health = await spawner.getAgentHealth(params.id);
349
+
350
+ if (!health) {
351
+ return new Response(JSON.stringify({
352
+ error: 'Agent not found',
353
+ id: params.id
354
+ }), {
355
+ status: 404,
356
+ headers: { ...headers, 'Content-Type': 'application/json' }
357
+ });
358
+ }
359
+
360
+ return new Response(JSON.stringify({
361
+ success: true,
362
+ data: {
363
+ id: params.id,
364
+ ...health
365
+ }
366
+ }), {
367
+ headers: { ...headers, 'Content-Type': 'application/json' }
368
+ });
369
+ } catch (error: any) {
370
+ console.error('Agent health error:', error);
371
+ return new Response(JSON.stringify({
372
+ error: 'Failed to get agent health',
373
+ message: error?.message || 'Unknown error'
374
+ }), {
375
+ status: 500,
376
+ headers: { ...headers, 'Content-Type': 'application/json' }
377
+ });
378
+ }
379
+ });
380
+
381
+ router.get('/api/v1/agents/system-health', async (req: Request) => {
382
+ try {
383
+ const systemHealth = await spawner.getSystemHealth();
384
+
385
+ return new Response(JSON.stringify({
386
+ success: true,
387
+ data: systemHealth
388
+ }), {
389
+ headers: { ...headers, 'Content-Type': 'application/json' }
390
+ });
391
+ } catch (error: any) {
392
+ console.error('System health error:', error);
393
+ return new Response(JSON.stringify({
394
+ error: 'Failed to get system health',
395
+ message: error?.message || 'Unknown error'
396
+ }), {
397
+ status: 500,
398
+ headers: { ...headers, 'Content-Type': 'application/json' }
399
+ });
400
+ }
401
+ });
402
+
403
+ router.get('/api/v1/agents/:id/resource-history', async (req: Request, params: { id: string }) => {
404
+ try {
405
+ const history = await spawner.getResourceHistory(params.id);
406
+
407
+ return new Response(JSON.stringify({
408
+ success: true,
409
+ data: {
410
+ agentId: params.id,
411
+ history
412
+ }
413
+ }), {
414
+ headers: { ...headers, 'Content-Type': 'application/json' }
415
+ });
416
+ } catch (error: any) {
417
+ console.error('Resource history error:', error);
418
+ return new Response(JSON.stringify({
419
+ error: 'Failed to get resource history',
420
+ message: error?.message || 'Unknown error'
421
+ }), {
422
+ status: 500,
423
+ headers: { ...headers, 'Content-Type': 'application/json' }
424
+ });
425
+ }
426
+ });
427
+
428
+ router.get('/api/v1/agents/:id/resource-trends', async (req: Request, params: { id: string }) => {
429
+ try {
430
+ const trends = await spawner.getResourceTrends(params.id);
431
+
432
+ return new Response(JSON.stringify({
433
+ success: true,
434
+ data: {
435
+ agentId: params.id,
436
+ ...trends
437
+ }
438
+ }), {
439
+ headers: { ...headers, 'Content-Type': 'application/json' }
440
+ });
441
+ } catch (error: any) {
442
+ console.error('Resource trends error:', error);
443
+ return new Response(JSON.stringify({
444
+ error: 'Failed to get resource trends',
445
+ message: error?.message || 'Unknown error'
446
+ }), {
447
+ status: 500,
448
+ headers: { ...headers, 'Content-Type': 'application/json' }
449
+ });
450
+ }
451
+ });
452
+
453
+ router.get('/api/v1/agents/:id/logs', async (req: Request, params: { id: string }) => {
454
+ try {
455
+ const url = new URL(req.url);
456
+ const linesParam = url.searchParams.get('lines');
457
+ const eventsOnlyParam = url.searchParams.get('eventsOnly');
458
+
459
+ const lines = linesParam ? parseInt(linesParam) : 50;
460
+ const eventsOnly = eventsOnlyParam === 'true';
461
+
462
+ // In a real implementation, this would query actual logs
463
+ // For now, return mock log data
464
+ const logs = generateMockLogs(params.id, lines, eventsOnly);
465
+
466
+ return new Response(JSON.stringify({
467
+ success: true,
468
+ data: {
469
+ agentId: params.id,
470
+ logs
471
+ }
472
+ }), {
473
+ headers: { ...headers, 'Content-Type': 'application/json' }
474
+ });
475
+ } catch (error: any) {
476
+ console.error('Agent logs error:', error);
477
+ return new Response(JSON.stringify({
478
+ error: 'Failed to get agent logs',
479
+ message: error?.message || 'Unknown error'
480
+ }), {
481
+ status: 500,
482
+ headers: { ...headers, 'Content-Type': 'application/json' }
483
+ });
484
+ }
485
+ });
486
+ }
487
+
488
+ /**
489
+ * Generate mock log data for demonstration
490
+ * In real implementation, this would query actual log storage
491
+ */
492
+ function generateMockLogs(agentId: string, limit: number, eventsOnly: boolean): any[] {
493
+ const logs: any[] = [];
494
+ const now = Date.now();
495
+ const levels = ['INFO', 'DEBUG', 'WARN', 'ERROR'];
496
+ const eventTypes = ['agent_started', 'task_progress', 'heartbeat', 'agent_completed'];
497
+
498
+ for (let i = 0; i < limit; i++) {
499
+ const timestamp = new Date(now - (i * 60000)).toISOString(); // 1 minute intervals
500
+
501
+ if (eventsOnly && Math.random() > 0.3) continue; // Fewer events when filtering
502
+
503
+ const isEvent = eventsOnly || Math.random() > 0.7;
504
+
505
+ const logEntry: any = {
506
+ timestamp,
507
+ level: isEvent ? 'EVENT' : levels[Math.floor(Math.random() * levels.length)],
508
+ message: isEvent
509
+ ? `${eventTypes[Math.floor(Math.random() * eventTypes.length)]} event occurred`
510
+ : `Agent ${agentId} ${['is processing', 'completed task', 'updated status', 'checking resources'][Math.floor(Math.random() * 4)]}`
511
+ };
512
+
513
+ if (isEvent) {
514
+ logEntry.data = {
515
+ agentId,
516
+ progress: Math.floor(Math.random() * 100),
517
+ stage: ['analysis', 'implementation', 'testing', 'completion'][Math.floor(Math.random() * 4)]
518
+ };
519
+ }
520
+
521
+ logs.push(logEntry);
522
+ }
523
+
524
+ return logs.reverse(); // Most recent first
525
+ }