heyio 1.13.0 → 3.0.1

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 (380) hide show
  1. package/README.md +162 -278
  2. package/dist/api/middleware/auth.d.ts +14 -0
  3. package/dist/api/middleware/auth.d.ts.map +1 -0
  4. package/dist/api/middleware/auth.js +66 -0
  5. package/dist/api/middleware/auth.js.map +1 -0
  6. package/dist/api/notifications.d.ts +14 -0
  7. package/dist/api/notifications.d.ts.map +1 -0
  8. package/dist/api/notifications.js +112 -0
  9. package/dist/api/notifications.js.map +1 -0
  10. package/dist/api/routes/activity.d.ts +3 -0
  11. package/dist/api/routes/activity.d.ts.map +1 -0
  12. package/dist/api/routes/activity.js +28 -0
  13. package/dist/api/routes/activity.js.map +1 -0
  14. package/dist/api/routes/attachments.d.ts +3 -0
  15. package/dist/api/routes/attachments.d.ts.map +1 -0
  16. package/dist/api/routes/attachments.js +83 -0
  17. package/dist/api/routes/attachments.js.map +1 -0
  18. package/dist/api/routes/config.d.ts +3 -0
  19. package/dist/api/routes/config.d.ts.map +1 -0
  20. package/dist/api/routes/config.js +106 -0
  21. package/dist/api/routes/config.js.map +1 -0
  22. package/dist/api/routes/conversations.d.ts +3 -0
  23. package/dist/api/routes/conversations.d.ts.map +1 -0
  24. package/dist/api/routes/conversations.js +69 -0
  25. package/dist/api/routes/conversations.js.map +1 -0
  26. package/dist/api/routes/health.d.ts +3 -0
  27. package/dist/api/routes/health.d.ts.map +1 -0
  28. package/dist/api/routes/health.js +16 -0
  29. package/dist/api/routes/health.js.map +1 -0
  30. package/dist/api/routes/inbox.d.ts +3 -0
  31. package/dist/api/routes/inbox.d.ts.map +1 -0
  32. package/dist/api/routes/inbox.js +88 -0
  33. package/dist/api/routes/inbox.js.map +1 -0
  34. package/dist/api/routes/schedules.d.ts +3 -0
  35. package/dist/api/routes/schedules.d.ts.map +1 -0
  36. package/dist/api/routes/schedules.js +96 -0
  37. package/dist/api/routes/schedules.js.map +1 -0
  38. package/dist/api/routes/skills.d.ts +2 -0
  39. package/dist/api/routes/skills.d.ts.map +1 -0
  40. package/dist/api/routes/skills.js +85 -0
  41. package/dist/api/routes/skills.js.map +1 -0
  42. package/dist/api/routes/squads.d.ts +3 -0
  43. package/dist/api/routes/squads.d.ts.map +1 -0
  44. package/dist/api/routes/squads.js +129 -0
  45. package/dist/api/routes/squads.js.map +1 -0
  46. package/dist/api/routes/usage.d.ts +3 -0
  47. package/dist/api/routes/usage.d.ts.map +1 -0
  48. package/dist/api/routes/usage.js +55 -0
  49. package/dist/api/routes/usage.js.map +1 -0
  50. package/dist/api/routes/wiki.d.ts +2 -0
  51. package/dist/api/routes/wiki.d.ts.map +1 -0
  52. package/dist/api/routes/wiki.js +43 -0
  53. package/dist/api/routes/wiki.js.map +1 -0
  54. package/dist/api/server.d.ts +7 -0
  55. package/dist/api/server.d.ts.map +1 -0
  56. package/dist/api/server.js +136 -634
  57. package/dist/api/server.js.map +1 -0
  58. package/dist/config.d.ts +3 -0
  59. package/dist/config.d.ts.map +1 -0
  60. package/dist/config.js +2 -91
  61. package/dist/config.js.map +1 -0
  62. package/dist/copilot/client.d.ts +5 -0
  63. package/dist/copilot/client.d.ts.map +1 -0
  64. package/dist/copilot/client.js +19 -11
  65. package/dist/copilot/client.js.map +1 -0
  66. package/dist/copilot/health-monitor.d.ts +14 -0
  67. package/dist/copilot/health-monitor.d.ts.map +1 -0
  68. package/dist/copilot/health-monitor.js +70 -0
  69. package/dist/copilot/health-monitor.js.map +1 -0
  70. package/dist/copilot/orchestrator.d.ts +5 -0
  71. package/dist/copilot/orchestrator.d.ts.map +1 -0
  72. package/dist/copilot/orchestrator.js +127 -123
  73. package/dist/copilot/orchestrator.js.map +1 -0
  74. package/dist/copilot/tools.d.ts +49 -0
  75. package/dist/copilot/tools.d.ts.map +1 -0
  76. package/dist/copilot/tools.js +545 -321
  77. package/dist/copilot/tools.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +82 -26
  81. package/dist/index.js.map +1 -0
  82. package/dist/logging/logger.d.ts +6 -0
  83. package/dist/logging/logger.d.ts.map +1 -0
  84. package/dist/logging/logger.js +21 -0
  85. package/dist/logging/logger.js.map +1 -0
  86. package/dist/models/index.d.ts +6 -0
  87. package/dist/models/index.d.ts.map +1 -0
  88. package/dist/models/index.js +4 -0
  89. package/dist/models/index.js.map +1 -0
  90. package/dist/models/pricing.d.ts +25 -0
  91. package/dist/models/pricing.d.ts.map +1 -0
  92. package/dist/models/pricing.js +96 -0
  93. package/dist/models/pricing.js.map +1 -0
  94. package/dist/models/registry.d.ts +34 -0
  95. package/dist/models/registry.d.ts.map +1 -0
  96. package/dist/models/registry.js +109 -0
  97. package/dist/models/registry.js.map +1 -0
  98. package/dist/models/token-tracker.d.ts +40 -0
  99. package/dist/models/token-tracker.d.ts.map +1 -0
  100. package/dist/models/token-tracker.js +102 -0
  101. package/dist/models/token-tracker.js.map +1 -0
  102. package/dist/scheduler/engine.d.ts +9 -0
  103. package/dist/scheduler/engine.d.ts.map +1 -0
  104. package/dist/scheduler/engine.js +127 -0
  105. package/dist/scheduler/engine.js.map +1 -0
  106. package/dist/skills/index.d.ts +3 -0
  107. package/dist/skills/index.d.ts.map +1 -0
  108. package/dist/skills/index.js +2 -0
  109. package/dist/skills/index.js.map +1 -0
  110. package/dist/skills/store.d.ts +52 -0
  111. package/dist/skills/store.d.ts.map +1 -0
  112. package/dist/skills/store.js +148 -0
  113. package/dist/skills/store.js.map +1 -0
  114. package/dist/squad/agent.d.ts +46 -0
  115. package/dist/squad/agent.d.ts.map +1 -0
  116. package/dist/squad/agent.js +261 -0
  117. package/dist/squad/agent.js.map +1 -0
  118. package/dist/squad/autonomy.d.ts +16 -0
  119. package/dist/squad/autonomy.d.ts.map +1 -0
  120. package/dist/squad/autonomy.js +63 -0
  121. package/dist/squad/autonomy.js.map +1 -0
  122. package/dist/squad/event-bus.d.ts +22 -0
  123. package/dist/squad/event-bus.d.ts.map +1 -0
  124. package/dist/squad/event-bus.js +56 -0
  125. package/dist/squad/event-bus.js.map +1 -0
  126. package/dist/squad/execution/index.d.ts +12 -0
  127. package/dist/squad/execution/index.d.ts.map +1 -0
  128. package/dist/squad/execution/index.js +7 -0
  129. package/dist/squad/execution/index.js.map +1 -0
  130. package/dist/squad/execution/instance.d.ts +40 -0
  131. package/dist/squad/execution/instance.d.ts.map +1 -0
  132. package/dist/squad/execution/instance.js +138 -0
  133. package/dist/squad/execution/instance.js.map +1 -0
  134. package/dist/squad/execution/meeting.d.ts +25 -0
  135. package/dist/squad/execution/meeting.d.ts.map +1 -0
  136. package/dist/squad/execution/meeting.js +140 -0
  137. package/dist/squad/execution/meeting.js.map +1 -0
  138. package/dist/squad/execution/pr.d.ts +15 -0
  139. package/dist/squad/execution/pr.d.ts.map +1 -0
  140. package/dist/squad/execution/pr.js +93 -0
  141. package/dist/squad/execution/pr.js.map +1 -0
  142. package/dist/squad/execution/runner.d.ts +22 -0
  143. package/dist/squad/execution/runner.d.ts.map +1 -0
  144. package/dist/squad/execution/runner.js +68 -0
  145. package/dist/squad/execution/runner.js.map +1 -0
  146. package/dist/squad/execution/tasks.d.ts +11 -0
  147. package/dist/squad/execution/tasks.d.ts.map +1 -0
  148. package/dist/squad/execution/tasks.js +85 -0
  149. package/dist/squad/execution/tasks.js.map +1 -0
  150. package/dist/squad/execution/worktree.d.ts +26 -0
  151. package/dist/squad/execution/worktree.d.ts.map +1 -0
  152. package/dist/squad/execution/worktree.js +111 -0
  153. package/dist/squad/execution/worktree.js.map +1 -0
  154. package/dist/squad/hiring.d.ts +32 -0
  155. package/dist/squad/hiring.d.ts.map +1 -0
  156. package/dist/squad/hiring.js +200 -0
  157. package/dist/squad/hiring.js.map +1 -0
  158. package/dist/squad/index.d.ts +8 -0
  159. package/dist/squad/index.d.ts.map +1 -0
  160. package/dist/squad/index.js +6 -0
  161. package/dist/squad/index.js.map +1 -0
  162. package/dist/squad/manager.d.ts +48 -0
  163. package/dist/squad/manager.d.ts.map +1 -0
  164. package/dist/squad/manager.js +274 -0
  165. package/dist/squad/manager.js.map +1 -0
  166. package/dist/squad/name-generator.d.ts +16 -0
  167. package/dist/squad/name-generator.d.ts.map +1 -0
  168. package/dist/squad/name-generator.js +113 -0
  169. package/dist/squad/name-generator.js.map +1 -0
  170. package/dist/squad/roles/templates.d.ts +5 -0
  171. package/dist/squad/roles/templates.d.ts.map +1 -0
  172. package/dist/squad/roles/templates.js +102 -0
  173. package/dist/squad/roles/templates.js.map +1 -0
  174. package/dist/squad/skill-parser.d.ts +36 -0
  175. package/dist/squad/skill-parser.d.ts.map +1 -0
  176. package/dist/squad/skill-parser.js +83 -0
  177. package/dist/squad/skill-parser.js.map +1 -0
  178. package/dist/squad/source-resolver.d.ts +20 -0
  179. package/dist/squad/source-resolver.d.ts.map +1 -0
  180. package/dist/squad/source-resolver.js +52 -0
  181. package/dist/squad/source-resolver.js.map +1 -0
  182. package/dist/store/activity.d.ts +43 -0
  183. package/dist/store/activity.d.ts.map +1 -0
  184. package/dist/store/activity.js +131 -0
  185. package/dist/store/activity.js.map +1 -0
  186. package/dist/store/db.d.ts +5 -0
  187. package/dist/store/db.d.ts.map +1 -0
  188. package/dist/store/db.js +209 -248
  189. package/dist/store/db.js.map +1 -0
  190. package/dist/store/inbox.d.ts +53 -0
  191. package/dist/store/inbox.d.ts.map +1 -0
  192. package/dist/store/inbox.js +151 -0
  193. package/dist/store/inbox.js.map +1 -0
  194. package/dist/store/schedules.d.ts +53 -0
  195. package/dist/store/schedules.d.ts.map +1 -0
  196. package/dist/store/schedules.js +149 -54
  197. package/dist/store/schedules.js.map +1 -0
  198. package/dist/wiki/index.d.ts +3 -0
  199. package/dist/wiki/index.d.ts.map +1 -0
  200. package/dist/wiki/index.js +2 -0
  201. package/dist/wiki/index.js.map +1 -0
  202. package/dist/wiki/store.d.ts +49 -0
  203. package/dist/wiki/store.d.ts.map +1 -0
  204. package/dist/wiki/store.js +115 -0
  205. package/dist/wiki/store.js.map +1 -0
  206. package/node_modules/@io/shared/dist/config.d.ts +25 -0
  207. package/node_modules/@io/shared/dist/config.d.ts.map +1 -0
  208. package/node_modules/@io/shared/dist/config.js +47 -0
  209. package/node_modules/@io/shared/dist/config.js.map +1 -0
  210. package/node_modules/@io/shared/dist/constants.d.ts +13 -0
  211. package/node_modules/@io/shared/dist/constants.d.ts.map +1 -0
  212. package/node_modules/@io/shared/dist/constants.js +34 -0
  213. package/node_modules/@io/shared/dist/constants.js.map +1 -0
  214. package/node_modules/@io/shared/dist/index.d.ts +11 -0
  215. package/node_modules/@io/shared/dist/index.d.ts.map +1 -0
  216. package/node_modules/@io/shared/dist/index.js +3 -0
  217. package/node_modules/@io/shared/dist/index.js.map +1 -0
  218. package/node_modules/@io/shared/dist/types/agents.d.ts +3 -0
  219. package/node_modules/@io/shared/dist/types/agents.d.ts.map +1 -0
  220. package/node_modules/@io/shared/dist/types/agents.js +2 -0
  221. package/node_modules/@io/shared/dist/types/agents.js.map +1 -0
  222. package/node_modules/@io/shared/dist/types/api.d.ts +33 -0
  223. package/node_modules/@io/shared/dist/types/api.d.ts.map +1 -0
  224. package/node_modules/@io/shared/dist/types/api.js +2 -0
  225. package/node_modules/@io/shared/dist/types/api.js.map +1 -0
  226. package/node_modules/@io/shared/dist/types/attachments.d.ts +10 -0
  227. package/node_modules/@io/shared/dist/types/attachments.d.ts.map +1 -0
  228. package/node_modules/@io/shared/dist/types/attachments.js +2 -0
  229. package/node_modules/@io/shared/dist/types/attachments.js.map +1 -0
  230. package/node_modules/@io/shared/dist/types/events.d.ts +44 -0
  231. package/node_modules/@io/shared/dist/types/events.d.ts.map +1 -0
  232. package/node_modules/@io/shared/dist/types/events.js +2 -0
  233. package/node_modules/@io/shared/dist/types/events.js.map +1 -0
  234. package/node_modules/@io/shared/dist/types/messages.d.ts +15 -0
  235. package/node_modules/@io/shared/dist/types/messages.d.ts.map +1 -0
  236. package/node_modules/@io/shared/dist/types/messages.js +2 -0
  237. package/node_modules/@io/shared/dist/types/messages.js.map +1 -0
  238. package/node_modules/@io/shared/dist/types/squads.d.ts +43 -0
  239. package/node_modules/@io/shared/dist/types/squads.d.ts.map +1 -0
  240. package/node_modules/@io/shared/dist/types/squads.js +2 -0
  241. package/node_modules/@io/shared/dist/types/squads.js.map +1 -0
  242. package/node_modules/@io/shared/dist/types/tokens.d.ts +19 -0
  243. package/node_modules/@io/shared/dist/types/tokens.d.ts.map +1 -0
  244. package/node_modules/@io/shared/dist/types/tokens.js +2 -0
  245. package/node_modules/@io/shared/dist/types/tokens.js.map +1 -0
  246. package/node_modules/@io/shared/package.json +18 -0
  247. package/node_modules/@io/shared/src/config.ts +74 -0
  248. package/node_modules/@io/shared/src/constants.ts +36 -0
  249. package/node_modules/@io/shared/src/index.ts +37 -0
  250. package/node_modules/@io/shared/src/types/agents.ts +3 -0
  251. package/node_modules/@io/shared/src/types/api.ts +35 -0
  252. package/node_modules/@io/shared/src/types/attachments.ts +9 -0
  253. package/node_modules/@io/shared/src/types/events.ts +81 -0
  254. package/node_modules/@io/shared/src/types/messages.ts +15 -0
  255. package/node_modules/@io/shared/src/types/squads.ts +53 -0
  256. package/node_modules/@io/shared/src/types/tokens.ts +19 -0
  257. package/node_modules/@io/shared/tsconfig.json +9 -0
  258. package/node_modules/@io/shared/tsconfig.tsbuildinfo +1 -0
  259. package/package.json +56 -59
  260. package/src/api/middleware/auth.ts +76 -0
  261. package/src/api/notifications.ts +122 -0
  262. package/src/api/routes/activity.ts +29 -0
  263. package/src/api/routes/attachments.ts +93 -0
  264. package/src/api/routes/config.ts +115 -0
  265. package/src/api/routes/conversations.ts +87 -0
  266. package/src/api/routes/health.ts +18 -0
  267. package/src/api/routes/inbox.ts +98 -0
  268. package/src/api/routes/schedules.ts +121 -0
  269. package/src/api/routes/skills.ts +105 -0
  270. package/src/api/routes/squads.ts +145 -0
  271. package/src/api/routes/usage.ts +57 -0
  272. package/src/api/routes/wiki.ts +49 -0
  273. package/src/api/server.ts +186 -0
  274. package/src/config.ts +3 -0
  275. package/src/copilot/client.ts +42 -0
  276. package/src/copilot/health-monitor.ts +85 -0
  277. package/src/copilot/orchestrator.ts +222 -0
  278. package/src/copilot/tools.ts +707 -0
  279. package/src/index.ts +112 -0
  280. package/src/logging/logger.ts +26 -0
  281. package/src/models/index.ts +11 -0
  282. package/src/models/pricing.ts +121 -0
  283. package/src/models/registry.ts +131 -0
  284. package/src/models/token-tracker.ts +151 -0
  285. package/src/scheduler/engine.ts +146 -0
  286. package/src/skills/index.ts +13 -0
  287. package/src/skills/store.ts +188 -0
  288. package/src/squad/agent.ts +326 -0
  289. package/src/squad/autonomy.ts +78 -0
  290. package/src/squad/event-bus.ts +71 -0
  291. package/src/squad/execution/index.ts +17 -0
  292. package/src/squad/execution/instance.ts +186 -0
  293. package/src/squad/execution/meeting.ts +191 -0
  294. package/src/squad/execution/pr.ts +127 -0
  295. package/src/squad/execution/runner.ts +97 -0
  296. package/src/squad/execution/tasks.ts +111 -0
  297. package/src/squad/execution/worktree.ts +138 -0
  298. package/src/squad/hiring.ts +222 -0
  299. package/src/squad/index.ts +17 -0
  300. package/src/squad/manager.ts +337 -0
  301. package/src/squad/name-generator.ts +135 -0
  302. package/src/squad/roles/templates.ts +104 -0
  303. package/src/squad/skill-parser.ts +120 -0
  304. package/src/squad/source-resolver.ts +57 -0
  305. package/src/store/activity.ts +176 -0
  306. package/src/store/db.ts +237 -0
  307. package/src/store/inbox.ts +199 -0
  308. package/src/store/schedules.ts +199 -0
  309. package/src/wiki/index.ts +12 -0
  310. package/src/wiki/store.ts +139 -0
  311. package/tsconfig.json +9 -0
  312. package/LICENSE +0 -21
  313. package/dist/api/auth.js +0 -46
  314. package/dist/chat/attachments.js +0 -112
  315. package/dist/copilot/agents.js +0 -309
  316. package/dist/copilot/ceremonies.js +0 -174
  317. package/dist/copilot/gh-token.js +0 -64
  318. package/dist/copilot/io-scheduler.js +0 -79
  319. package/dist/copilot/model-router.js +0 -114
  320. package/dist/copilot/scheduler.js +0 -88
  321. package/dist/copilot/skills.js +0 -252
  322. package/dist/copilot/specialist-runner.js +0 -191
  323. package/dist/copilot/squad-tools.js +0 -258
  324. package/dist/copilot/system-message.js +0 -86
  325. package/dist/copilot/token-tracker.js +0 -98
  326. package/dist/copilot/trigger-schedule.js +0 -33
  327. package/dist/daemon.js +0 -67
  328. package/dist/logging.js +0 -27
  329. package/dist/mcp/config.js +0 -29
  330. package/dist/mcp/index.js +0 -3
  331. package/dist/mcp/registry.js +0 -42
  332. package/dist/notify.js +0 -25
  333. package/dist/paths.js +0 -17
  334. package/dist/setup.js +0 -35
  335. package/dist/store/agent-events.js +0 -19
  336. package/dist/store/audit-log.js +0 -71
  337. package/dist/store/conversations.js +0 -164
  338. package/dist/store/feed.js +0 -44
  339. package/dist/store/instances.js +0 -75
  340. package/dist/store/squad-colors.js +0 -23
  341. package/dist/store/squads.js +0 -60
  342. package/dist/store/tasks.js +0 -78
  343. package/dist/store/token-usage.js +0 -94
  344. package/dist/telegram/bot.js +0 -41
  345. package/dist/telegram/handlers.js +0 -42
  346. package/dist/watchdog.js +0 -37
  347. package/dist/wiki/backlinks.js +0 -51
  348. package/dist/wiki/fs.js +0 -108
  349. package/dist/wiki/search.js +0 -47
  350. package/web-dist/assets/AuditLogView-BzfjNXBT.js +0 -6
  351. package/web-dist/assets/ChatView-BdMukPKG.js +0 -1
  352. package/web-dist/assets/FeedView-BfPIabGr.js +0 -6
  353. package/web-dist/assets/HistoryView-BmEEk3Rs.js +0 -1
  354. package/web-dist/assets/LoginView-D7LrkeX7.js +0 -1
  355. package/web-dist/assets/McpView-BAP_ah3T.js +0 -1
  356. package/web-dist/assets/SchedulesView-CAtsUPCZ.js +0 -6
  357. package/web-dist/assets/SettingsView-BovjWZDa.js +0 -1
  358. package/web-dist/assets/SkillsView-DQSMM5LN.js +0 -16
  359. package/web-dist/assets/SquadDetailView-DBscu0m2.js +0 -26
  360. package/web-dist/assets/SquadHealthView-D686BuQo.js +0 -11
  361. package/web-dist/assets/SquadsView-AzMht2NJ.js +0 -6
  362. package/web-dist/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-DtShZAjW.js +0 -1
  363. package/web-dist/assets/UsageView-DiVn97aI.js +0 -16
  364. package/web-dist/assets/WikiView-Cn7KipkZ.js +0 -26
  365. package/web-dist/assets/api-D4mHJ3u0.js +0 -1
  366. package/web-dist/assets/arrow-left-D_qUNUWW.js +0 -6
  367. package/web-dist/assets/git-branch-DOM-orcl.js +0 -6
  368. package/web-dist/assets/index-Bo83B1LR.css +0 -1
  369. package/web-dist/assets/index-ELvnkQjd.js +0 -273
  370. package/web-dist/assets/pencil-CFsi7ufI.js +0 -6
  371. package/web-dist/assets/plus-BAzlGFd_.js +0 -6
  372. package/web-dist/assets/save-BmgCYJ1g.js +0 -6
  373. package/web-dist/assets/search-CS9zSIeW.js +0 -6
  374. package/web-dist/assets/squad-colors-B8B_Y-lz.js +0 -1
  375. package/web-dist/assets/trash-2-DLveUEsd.js +0 -6
  376. package/web-dist/assets/triangle-alert-lj4I30rL.js +0 -6
  377. package/web-dist/assets/x-CjXR97Fa.js +0 -6
  378. package/web-dist/favicon.svg +0 -10
  379. package/web-dist/index.html +0 -14
  380. package/web-dist/logo.svg +0 -10
@@ -0,0 +1,85 @@
1
+ import { createChildLogger } from '../../logging/logger.js';
2
+ import { getEventBus } from '../event-bus.js';
3
+ import { transitionInstance } from './instance.js';
4
+ const logger = () => createChildLogger('task-exec');
5
+ /**
6
+ * Execute all tasks in an instance sequentially.
7
+ * Team lead reviews each completed task before moving to the next.
8
+ */
9
+ export async function executeTasks(params) {
10
+ const log = logger();
11
+ const { instance, runtime } = params;
12
+ await transitionInstance(instance.id, 'working');
13
+ const teamLead = runtime.members.get('team-lead');
14
+ if (!teamLead)
15
+ throw new Error('No team lead for task execution');
16
+ for (const task of instance.tasks) {
17
+ if (task.status === 'done')
18
+ continue;
19
+ log.info({ taskId: task.id, assignedTo: task.assignedTo }, 'Executing task');
20
+ task.status = 'in_progress';
21
+ const agent = runtime.members.get(task.assignedTo);
22
+ if (!agent) {
23
+ log.warn({ role: task.assignedTo }, 'No agent for assigned role, team lead will handle');
24
+ // Reassign to team lead for delegation decision
25
+ task.result = `No agent with role '${task.assignedTo}' available.`;
26
+ task.status = 'failed';
27
+ continue;
28
+ }
29
+ try {
30
+ // Agent executes the task
31
+ const workingDir = instance.worktree?.path ?? '';
32
+ const taskPrompt = buildTaskPrompt(task, workingDir, instance);
33
+ const result = await agent.send(taskPrompt);
34
+ task.result = result;
35
+ // Team lead reviews
36
+ const review = await teamLead.send(`An agent (${task.assignedTo}) completed a task. Review their work:\n\nTask: ${task.description}\n\nAgent's report:\n${result.slice(0, 2000)}\n\nIs this satisfactory? Reply with:\n- "APPROVED" if the work meets requirements\n- "REDO: <feedback>" if it needs changes`);
37
+ if (review.toUpperCase().includes('APPROVED')) {
38
+ task.status = 'done';
39
+ log.info({ taskId: task.id }, 'Task approved');
40
+ }
41
+ else if (review.toUpperCase().includes('REDO:')) {
42
+ // Give agent one more attempt with feedback
43
+ const feedback = review.replace(/^.*REDO:\s*/i, '');
44
+ const retry = await agent.send(`Your work on "${task.description}" needs revision. Feedback from team lead:\n\n${feedback}\n\nPlease address this feedback and report your updated results.`);
45
+ task.result = retry;
46
+ task.status = 'done'; // Accept after one retry
47
+ log.info({ taskId: task.id }, 'Task completed after revision');
48
+ }
49
+ else {
50
+ task.status = 'done';
51
+ }
52
+ }
53
+ catch (err) {
54
+ log.error({ err, taskId: task.id }, 'Task execution failed');
55
+ task.status = 'failed';
56
+ task.result = `Error: ${err instanceof Error ? err.message : String(err)}`;
57
+ }
58
+ }
59
+ // Move to reviewing phase
60
+ await transitionInstance(instance.id, 'reviewing');
61
+ // Team lead does final review
62
+ const taskSummary = instance.tasks
63
+ .map((t) => `- [${t.status}] ${t.description} (${t.assignedTo})`)
64
+ .join('\n');
65
+ const finalReview = await teamLead.send(`All tasks have been executed. Here's the summary:\n\n${taskSummary}\n\nProvide a final assessment. Should we proceed to create a PR, or are there critical issues? Reply with:\n- "READY_FOR_PR: <PR title>" if ready\n- "NEEDS_WORK: <what's missing>" if not ready`);
66
+ if (finalReview.toUpperCase().includes('READY_FOR_PR:')) {
67
+ instance.meetingLog.push(`[team-lead] Final review: ${finalReview}`);
68
+ }
69
+ else {
70
+ // Mark complete anyway — we don't loop indefinitely
71
+ instance.meetingLog.push(`[team-lead] Final review (issues noted): ${finalReview}`);
72
+ }
73
+ }
74
+ function buildTaskPrompt(task, workingDir, instance) {
75
+ const parts = ['You have been assigned the following task:', `\nTask: ${task.description}`];
76
+ if (workingDir) {
77
+ parts.push(`\nWorking directory: ${workingDir}`);
78
+ }
79
+ if (instance.issueRef) {
80
+ parts.push(`\nRelated issue: ${instance.issueRef}`);
81
+ }
82
+ parts.push('\nComplete the task to the best of your ability. Use your available tools to read, edit, and test code as needed. Report back with a summary of what you did.');
83
+ return parts.join('');
84
+ }
85
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/squad/execution/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAoC,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAGlC;IACA,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAErC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAElE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,SAAS;QAErC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAE5B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,mDAAmD,CAAC,CAAC;YACzF,gDAAgD;YAChD,IAAI,CAAC,MAAM,GAAG,uBAAuB,IAAI,CAAC,UAAU,cAAc,CAAC;YACnE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,SAAS;QACV,CAAC;QAED,IAAI,CAAC;YACJ,0BAA0B;YAC1B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAE/D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,oBAAoB;YACpB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CACjC,aAAa,IAAI,CAAC,UAAU,mDAAmD,IAAI,CAAC,WAAW,wBAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,8HAA8H,CAC1Q,CAAC;YAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAC7B,iBAAiB,IAAI,CAAC,WAAW,iDAAiD,QAAQ,mEAAmE,CAC7J,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,yBAAyB;gBAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,+BAA+B,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,CAAC;IACF,CAAC;IAED,0BAA0B;IAC1B,MAAM,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEnD,8BAA8B;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,CACtC,wDAAwD,WAAW,mMAAmM,CACtQ,CAAC;IAEF,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACP,oDAAoD;QACpD,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;IACrF,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,IAAkB,EAAE,UAAkB,EAAE,QAAkB;IAClF,MAAM,KAAK,GAAG,CAAC,4CAA4C,EAAE,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5F,IAAI,UAAU,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CACT,+JAA+J,CAC/J,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface WorktreeInfo {
2
+ path: string;
3
+ branch: string;
4
+ }
5
+ /**
6
+ * Create a git worktree for an instance.
7
+ * Branch naming: io/{squad-name}/{short-id}
8
+ */
9
+ export declare function createWorktree(params: {
10
+ repoPath: string;
11
+ squadName: string;
12
+ instanceId: string;
13
+ }): WorktreeInfo;
14
+ /**
15
+ * Remove a git worktree and delete its branch.
16
+ */
17
+ export declare function removeWorktree(params: {
18
+ repoPath: string;
19
+ worktreePath: string;
20
+ branch: string;
21
+ }): void;
22
+ /**
23
+ * List all IO-managed worktrees for a repository.
24
+ */
25
+ export declare function listWorktrees(repoPath: string): WorktreeInfo[];
26
+ //# sourceMappingURL=worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/squad/execution/worktree.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB,GAAG,YAAY,CAwCf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAkCP;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA6B9D"}
@@ -0,0 +1,111 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync, rmSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { createChildLogger } from '../../logging/logger.js';
5
+ const logger = () => createChildLogger('worktree');
6
+ /**
7
+ * Create a git worktree for an instance.
8
+ * Branch naming: io/{squad-name}/{short-id}
9
+ */
10
+ export function createWorktree(params) {
11
+ const log = logger();
12
+ const shortId = params.instanceId.slice(0, 8);
13
+ const branch = `io/${params.squadName}/${shortId}`;
14
+ const worktreePath = join(params.repoPath, '..', '.io-worktrees', `${params.squadName}-${shortId}`);
15
+ // Ensure the repo is a git repository
16
+ if (!existsSync(join(params.repoPath, '.git'))) {
17
+ throw new Error(`Not a git repository: ${params.repoPath}`);
18
+ }
19
+ // Create the worktree with a new branch from HEAD
20
+ try {
21
+ execSync(`git worktree add -b "${branch}" "${worktreePath}"`, {
22
+ cwd: params.repoPath,
23
+ stdio: 'pipe',
24
+ encoding: 'utf-8',
25
+ });
26
+ }
27
+ catch (err) {
28
+ // Branch might already exist — try without -b
29
+ try {
30
+ execSync(`git worktree add "${worktreePath}" "${branch}"`, {
31
+ cwd: params.repoPath,
32
+ stdio: 'pipe',
33
+ encoding: 'utf-8',
34
+ });
35
+ }
36
+ catch (innerErr) {
37
+ throw new Error(`Failed to create worktree: ${innerErr instanceof Error ? innerErr.message : String(innerErr)}`);
38
+ }
39
+ }
40
+ log.info({ worktreePath, branch }, 'Worktree created');
41
+ return { path: worktreePath, branch };
42
+ }
43
+ /**
44
+ * Remove a git worktree and delete its branch.
45
+ */
46
+ export function removeWorktree(params) {
47
+ const log = logger();
48
+ try {
49
+ execSync(`git worktree remove "${params.worktreePath}" --force`, {
50
+ cwd: params.repoPath,
51
+ stdio: 'pipe',
52
+ encoding: 'utf-8',
53
+ });
54
+ }
55
+ catch {
56
+ // Worktree might already be removed; try cleaning up the directory
57
+ if (existsSync(params.worktreePath)) {
58
+ rmSync(params.worktreePath, { recursive: true, force: true });
59
+ }
60
+ // Prune worktree references
61
+ try {
62
+ execSync('git worktree prune', { cwd: params.repoPath, stdio: 'pipe' });
63
+ }
64
+ catch {
65
+ // ignore
66
+ }
67
+ }
68
+ // Delete the branch
69
+ try {
70
+ execSync(`git branch -D "${params.branch}"`, {
71
+ cwd: params.repoPath,
72
+ stdio: 'pipe',
73
+ encoding: 'utf-8',
74
+ });
75
+ }
76
+ catch {
77
+ // Branch might not exist or be checked out elsewhere
78
+ }
79
+ log.info({ branch: params.branch }, 'Worktree removed');
80
+ }
81
+ /**
82
+ * List all IO-managed worktrees for a repository.
83
+ */
84
+ export function listWorktrees(repoPath) {
85
+ try {
86
+ const output = execSync('git worktree list --porcelain', {
87
+ cwd: repoPath,
88
+ stdio: 'pipe',
89
+ encoding: 'utf-8',
90
+ });
91
+ const worktrees = [];
92
+ const blocks = output.split('\n\n');
93
+ for (const block of blocks) {
94
+ const lines = block.trim().split('\n');
95
+ const pathLine = lines.find((l) => l.startsWith('worktree '));
96
+ const branchLine = lines.find((l) => l.startsWith('branch '));
97
+ if (pathLine && branchLine) {
98
+ const path = pathLine.replace('worktree ', '');
99
+ const branch = branchLine.replace('branch refs/heads/', '');
100
+ if (branch.startsWith('io/')) {
101
+ worktrees.push({ path, branch });
102
+ }
103
+ }
104
+ }
105
+ return worktrees;
106
+ }
107
+ catch {
108
+ return [];
109
+ }
110
+ }
111
+ //# sourceMappingURL=worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/squad/execution/worktree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ interface ProjectAnalysis {
2
+ name: string;
3
+ languages: string[];
4
+ frameworks: string[];
5
+ hasTests: boolean;
6
+ hasCi: boolean;
7
+ suggestedSpecialists: string[];
8
+ }
9
+ /**
10
+ * Analyze a project directory to determine what kind of squad it needs.
11
+ */
12
+ export declare function analyzeProject(projectPath: string): ProjectAnalysis;
13
+ /**
14
+ * Execute the full squad hiring flow:
15
+ * 1. Analyze the project
16
+ * 2. Create the squad in DB
17
+ * 3. Write SKILL.md files to disk
18
+ * 4. Add all members
19
+ */
20
+ export declare function hireSquad(params: {
21
+ projectPath: string;
22
+ repoUrl?: string;
23
+ name?: string;
24
+ universe?: string;
25
+ }): Promise<{
26
+ squadId: string;
27
+ analysis: ProjectAnalysis;
28
+ members: string[];
29
+ universe: string;
30
+ }>;
31
+ export {};
32
+ //# sourceMappingURL=hiring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hiring.d.ts","sourceRoot":"","sources":["../../src/squad/hiring.ts"],"names":[],"mappings":"AAYA,UAAU,eAAe;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAuDnE;AA0CD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6D/F"}
@@ -0,0 +1,200 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { basename, join } from 'node:path';
4
+ import { createChildLogger } from '../logging/logger.js';
5
+ import { ensureSquadWiki } from '../wiki/index.js';
6
+ import { addMember, createSquad } from './manager.js';
7
+ import { generateSquadNames } from './name-generator.js';
8
+ import { QA_TESTER_SKILL, SCRIBE_SKILL, TEAM_LEAD_SKILL } from './roles/templates.js';
9
+ import { parseSkillContent } from './skill-parser.js';
10
+ const logger = () => createChildLogger('hiring');
11
+ /**
12
+ * Analyze a project directory to determine what kind of squad it needs.
13
+ */
14
+ export function analyzeProject(projectPath) {
15
+ const name = basename(projectPath);
16
+ const languages = [];
17
+ const frameworks = [];
18
+ let hasTests = false;
19
+ let hasCi = false;
20
+ // Check for common project indicators
21
+ const files = safeReadDir(projectPath);
22
+ // Language detection
23
+ if (files.includes('package.json')) {
24
+ languages.push('TypeScript/JavaScript');
25
+ const pkg = safeReadJson(join(projectPath, 'package.json'));
26
+ if (pkg) {
27
+ const deps = (pkg.dependencies ?? {});
28
+ const devDeps = (pkg.devDependencies ?? {});
29
+ const allDeps = { ...deps, ...devDeps };
30
+ if (allDeps.react || allDeps['react-dom'])
31
+ frameworks.push('React');
32
+ if (allDeps.vue)
33
+ frameworks.push('Vue');
34
+ if (allDeps.svelte)
35
+ frameworks.push('Svelte');
36
+ if (allDeps.next)
37
+ frameworks.push('Next.js');
38
+ if (allDeps.express || allDeps.fastify || allDeps.koa)
39
+ frameworks.push('Node.js Backend');
40
+ if (allDeps.vitest || allDeps.jest || allDeps.mocha)
41
+ hasTests = true;
42
+ }
43
+ }
44
+ if (files.includes('Cargo.toml'))
45
+ languages.push('Rust');
46
+ if (files.includes('go.mod'))
47
+ languages.push('Go');
48
+ if (files.includes('requirements.txt') || files.includes('pyproject.toml'))
49
+ languages.push('Python');
50
+ if (files.includes('Gemfile'))
51
+ languages.push('Ruby');
52
+ if (files.some((f) => f.endsWith('.csproj') || f.endsWith('.sln')))
53
+ languages.push('C#/.NET');
54
+ // CI detection
55
+ if (files.includes('.github')) {
56
+ const ghDir = safeReadDir(join(projectPath, '.github'));
57
+ if (ghDir.includes('workflows'))
58
+ hasCi = true;
59
+ }
60
+ // Suggest specialists based on detected tech
61
+ const suggestedSpecialists = [];
62
+ if (frameworks.includes('React') || frameworks.includes('Vue') || frameworks.includes('Svelte'))
63
+ suggestedSpecialists.push('frontend-developer');
64
+ if (frameworks.includes('Node.js Backend'))
65
+ suggestedSpecialists.push('backend-developer');
66
+ if (languages.includes('Rust'))
67
+ suggestedSpecialists.push('rust-developer');
68
+ if (languages.includes('Go'))
69
+ suggestedSpecialists.push('go-developer');
70
+ if (languages.includes('Python'))
71
+ suggestedSpecialists.push('python-developer');
72
+ if (languages.includes('C#/.NET'))
73
+ suggestedSpecialists.push('dotnet-developer');
74
+ // If no specialists detected, add a generic one
75
+ if (suggestedSpecialists.length === 0 && languages.length > 0) {
76
+ suggestedSpecialists.push('developer');
77
+ }
78
+ return { name, languages, frameworks, hasTests, hasCi, suggestedSpecialists };
79
+ }
80
+ /**
81
+ * Generate a specialist SKILL.md from a role name and detected context.
82
+ */
83
+ function generateSpecialistSkill(role, analysis) {
84
+ const langContext = analysis.languages.join(', ');
85
+ const frameworkContext = analysis.frameworks.length > 0 ? `\nFrameworks: ${analysis.frameworks.join(', ')}` : '';
86
+ return `---
87
+ role: ${role}
88
+ tools:
89
+ - read_file
90
+ - edit_file
91
+ - run_command
92
+ - search_code
93
+ veto: false
94
+ ---
95
+
96
+ # ${titleCase(role)}
97
+
98
+ ## Identity
99
+ You are a ${titleCase(role)} specializing in ${langContext}.${frameworkContext}
100
+
101
+ ## Responsibilities
102
+ - Implement features and fix bugs assigned by the Team Lead
103
+ - Write clean, well-tested code following project conventions
104
+ - Run tests before submitting work for review
105
+ - Respond to code review feedback promptly
106
+
107
+ ## Boundaries
108
+ - Only work on tasks assigned to you by the Team Lead
109
+ - Do NOT modify files outside your area of expertise unless directed
110
+ - Do NOT merge PRs — submit work for team lead review
111
+ - Always run the test suite before reporting task completion
112
+
113
+ ## Project Context
114
+ Languages: ${langContext}${frameworkContext}
115
+ `;
116
+ }
117
+ /**
118
+ * Execute the full squad hiring flow:
119
+ * 1. Analyze the project
120
+ * 2. Create the squad in DB
121
+ * 3. Write SKILL.md files to disk
122
+ * 4. Add all members
123
+ */
124
+ export async function hireSquad(params) {
125
+ const log = logger();
126
+ // 1. Analyze
127
+ const analysis = analyzeProject(params.projectPath);
128
+ const squadName = params.name ?? analysis.name;
129
+ log.info({ squadName, analysis }, 'Project analyzed');
130
+ // 2. Build skill files
131
+ const skillsDir = join(homedir(), '.io', 'squads', squadName);
132
+ mkdirSync(skillsDir, { recursive: true });
133
+ const skillFiles = [
134
+ { role: 'team-lead', content: TEAM_LEAD_SKILL, veto: true },
135
+ { role: 'scribe', content: SCRIBE_SKILL, veto: false },
136
+ { role: 'qa-tester', content: QA_TESTER_SKILL, veto: true },
137
+ ];
138
+ for (const specialist of analysis.suggestedSpecialists) {
139
+ skillFiles.push({
140
+ role: specialist,
141
+ content: generateSpecialistSkill(specialist, analysis),
142
+ veto: false,
143
+ });
144
+ }
145
+ // 3. Generate character names from universe via LLM
146
+ const allRoles = skillFiles.map((f) => f.role);
147
+ const generated = await generateSquadNames(allRoles, params.universe);
148
+ log.info({ squadName, universe: generated.universe }, 'Universe names generated');
149
+ // 4. Create squad
150
+ const squad = await createSquad({
151
+ name: squadName,
152
+ projectPath: params.projectPath,
153
+ repoUrl: params.repoUrl,
154
+ universe: generated.universe,
155
+ });
156
+ // 5. Create wiki folder for this squad
157
+ ensureSquadWiki(squadName);
158
+ // 6. Write files and add members
159
+ const memberRoles = [];
160
+ for (const { role, content, veto } of skillFiles) {
161
+ const filePath = join(skillsDir, `${role}.skill.md`);
162
+ writeFileSync(filePath, content, 'utf-8');
163
+ const skill = parseSkillContent(content, filePath);
164
+ const assignment = generated.assignments.find((a) => a.role === role);
165
+ const displayName = assignment?.displayName ?? role;
166
+ const persona = assignment?.persona;
167
+ await addMember({ squadId: squad.id, skill, displayName, persona, isVetoMember: veto });
168
+ memberRoles.push(`${displayName} (${role})`);
169
+ }
170
+ log.info({ squadId: squad.id, members: memberRoles, universe: generated.universe }, 'Squad hired successfully');
171
+ return { squadId: squad.id, analysis, members: memberRoles, universe: generated.universe };
172
+ }
173
+ // Helpers
174
+ function safeReadDir(dir) {
175
+ try {
176
+ if (!existsSync(dir))
177
+ return [];
178
+ return readdirSync(dir);
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ }
184
+ function safeReadJson(path) {
185
+ try {
186
+ if (!existsSync(path))
187
+ return null;
188
+ return JSON.parse(readFileSync(path, 'utf-8'));
189
+ }
190
+ catch {
191
+ return null;
192
+ }
193
+ }
194
+ function titleCase(str) {
195
+ return str
196
+ .split('-')
197
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
198
+ .join(' ');
199
+ }
200
+ //# sourceMappingURL=hiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hiring.js","sourceRoot":"","sources":["../../src/squad/hiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { EventBus, getEventBus } from './event-bus.js';
2
+ export { parseSkillFile, parseSkillContent, compileSystemPrompt } from './skill-parser.js';
3
+ export type { SkillDefinition } from './skill-parser.js';
4
+ export { Agent } from './agent.js';
5
+ export type { AgentConfig } from './agent.js';
6
+ export { createSquad, addMember, listSquads, getSquadByName, getSquadMembers, disbandSquad, bootSquad, getSquadRuntime, delegateToSquad, } from './manager.js';
7
+ export { hireSquad, analyzeProject } from './hiring.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/squad/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { EventBus, getEventBus } from './event-bus.js';
2
+ export { parseSkillFile, parseSkillContent, compileSystemPrompt } from './skill-parser.js';
3
+ export { Agent } from './agent.js';
4
+ export { createSquad, addMember, listSquads, getSquadByName, getSquadMembers, disbandSquad, bootSquad, getSquadRuntime, delegateToSquad, } from './manager.js';
5
+ export { hireSquad, analyzeProject } from './hiring.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/squad/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type Squad, type SquadMember } from '@io/shared';
2
+ import type { AutonomyTier } from '@io/shared';
3
+ import { Agent } from './agent.js';
4
+ import { type SkillDefinition } from './skill-parser.js';
5
+ export interface SquadRuntime {
6
+ squad: Squad;
7
+ members: Map<string, Agent>;
8
+ skills: Map<string, SkillDefinition>;
9
+ }
10
+ /** Create a new squad in the database and return it */
11
+ export declare function createSquad(params: {
12
+ name: string;
13
+ projectPath: string;
14
+ repoUrl?: string;
15
+ universe?: string;
16
+ autonomyTier?: AutonomyTier;
17
+ }): Promise<Squad>;
18
+ /** Add a member to a squad */
19
+ export declare function addMember(params: {
20
+ squadId: string;
21
+ skill: SkillDefinition;
22
+ displayName: string;
23
+ persona?: string;
24
+ isVetoMember?: boolean;
25
+ }): Promise<SquadMember>;
26
+ /** List all squads */
27
+ export declare function listSquads(): Promise<Squad[]>;
28
+ /** Get a squad by name */
29
+ export declare function getSquadByName(name: string): Promise<Squad | null>;
30
+ /** Get squad members */
31
+ export declare function getSquadMembers(squadId: string): Promise<SquadMember[]>;
32
+ /** Disband a squad */
33
+ export declare function disbandSquad(squadId: string): Promise<void>;
34
+ /** Retheme a squad with a new universe — updates display names and personas */
35
+ export declare function rethemeSquad(squadId: string, newUniverse: string, assignments: {
36
+ role: string;
37
+ displayName: string;
38
+ persona: string;
39
+ }[]): Promise<void>;
40
+ /** Get squad by ID */
41
+ export declare function getSquadById(squadId: string): Promise<Squad | null>;
42
+ /** Boot a squad's agents (creates sessions for each member) */
43
+ export declare function bootSquad(squad: Squad): Promise<SquadRuntime>;
44
+ /** Get a running squad's runtime */
45
+ export declare function getSquadRuntime(squadId: string): SquadRuntime | undefined;
46
+ /** Delegate a message to a squad's team lead */
47
+ export declare function delegateToSquad(squadId: string, message: string): Promise<string>;
48
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/squad/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,mBAAmB,CAAC;AAO5F,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACrC;AAED,uDAAuD;AACvD,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,KAAK,CAAC,CA2CjB;AAED,8BAA8B;AAC9B,wBAAsB,SAAS,CAAC,MAAM,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCvB;AAED,sBAAsB;AACtB,wBAAsB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAenD;AAED,0BAA0B;AAC1B,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAqBxE;AAED,wBAAwB;AACxB,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAmB7E;AAED,sBAAsB;AACtB,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BjE;AAED,+EAA+E;AAC/E,wBAAsB,YAAY,CACjC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GACnE,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,sBAAsB;AACtB,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAqBzE;AAED,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CA0CnE;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEzE;AAED,gDAAgD;AAChD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvF"}