heyio 1.12.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/dist/api/middleware/auth.d.ts +14 -0
  2. package/dist/api/middleware/auth.d.ts.map +1 -0
  3. package/dist/api/middleware/auth.js +66 -0
  4. package/dist/api/middleware/auth.js.map +1 -0
  5. package/dist/api/notifications.d.ts +14 -0
  6. package/dist/api/notifications.d.ts.map +1 -0
  7. package/dist/api/notifications.js +112 -0
  8. package/dist/api/notifications.js.map +1 -0
  9. package/dist/api/routes/activity.d.ts +3 -0
  10. package/dist/api/routes/activity.d.ts.map +1 -0
  11. package/dist/api/routes/activity.js +28 -0
  12. package/dist/api/routes/activity.js.map +1 -0
  13. package/dist/api/routes/attachments.d.ts +3 -0
  14. package/dist/api/routes/attachments.d.ts.map +1 -0
  15. package/dist/api/routes/attachments.js +83 -0
  16. package/dist/api/routes/attachments.js.map +1 -0
  17. package/dist/api/routes/config.d.ts +3 -0
  18. package/dist/api/routes/config.d.ts.map +1 -0
  19. package/dist/api/routes/config.js +106 -0
  20. package/dist/api/routes/config.js.map +1 -0
  21. package/dist/api/routes/conversations.d.ts +3 -0
  22. package/dist/api/routes/conversations.d.ts.map +1 -0
  23. package/dist/api/routes/conversations.js +69 -0
  24. package/dist/api/routes/conversations.js.map +1 -0
  25. package/dist/api/routes/health.d.ts +3 -0
  26. package/dist/api/routes/health.d.ts.map +1 -0
  27. package/dist/api/routes/health.js +16 -0
  28. package/dist/api/routes/health.js.map +1 -0
  29. package/dist/api/routes/inbox.d.ts +3 -0
  30. package/dist/api/routes/inbox.d.ts.map +1 -0
  31. package/dist/api/routes/inbox.js +88 -0
  32. package/dist/api/routes/inbox.js.map +1 -0
  33. package/dist/api/routes/schedules.d.ts +3 -0
  34. package/dist/api/routes/schedules.d.ts.map +1 -0
  35. package/dist/api/routes/schedules.js +96 -0
  36. package/dist/api/routes/schedules.js.map +1 -0
  37. package/dist/api/routes/skills.d.ts +2 -0
  38. package/dist/api/routes/skills.d.ts.map +1 -0
  39. package/dist/api/routes/skills.js +85 -0
  40. package/dist/api/routes/skills.js.map +1 -0
  41. package/dist/api/routes/squads.d.ts +3 -0
  42. package/dist/api/routes/squads.d.ts.map +1 -0
  43. package/dist/api/routes/squads.js +129 -0
  44. package/dist/api/routes/squads.js.map +1 -0
  45. package/dist/api/routes/usage.d.ts +3 -0
  46. package/dist/api/routes/usage.d.ts.map +1 -0
  47. package/dist/api/routes/usage.js +55 -0
  48. package/dist/api/routes/usage.js.map +1 -0
  49. package/dist/api/routes/wiki.d.ts +2 -0
  50. package/dist/api/routes/wiki.d.ts.map +1 -0
  51. package/dist/api/routes/wiki.js +43 -0
  52. package/dist/api/routes/wiki.js.map +1 -0
  53. package/dist/api/server.d.ts +7 -0
  54. package/dist/api/server.d.ts.map +1 -0
  55. package/dist/api/server.js +136 -634
  56. package/dist/api/server.js.map +1 -0
  57. package/dist/config.d.ts +3 -0
  58. package/dist/config.d.ts.map +1 -0
  59. package/dist/config.js +2 -91
  60. package/dist/config.js.map +1 -0
  61. package/dist/copilot/client.d.ts +5 -0
  62. package/dist/copilot/client.d.ts.map +1 -0
  63. package/dist/copilot/client.js +19 -11
  64. package/dist/copilot/client.js.map +1 -0
  65. package/dist/copilot/health-monitor.d.ts +14 -0
  66. package/dist/copilot/health-monitor.d.ts.map +1 -0
  67. package/dist/copilot/health-monitor.js +70 -0
  68. package/dist/copilot/health-monitor.js.map +1 -0
  69. package/dist/copilot/orchestrator.d.ts +5 -0
  70. package/dist/copilot/orchestrator.d.ts.map +1 -0
  71. package/dist/copilot/orchestrator.js +127 -123
  72. package/dist/copilot/orchestrator.js.map +1 -0
  73. package/dist/copilot/tools.d.ts +49 -0
  74. package/dist/copilot/tools.d.ts.map +1 -0
  75. package/dist/copilot/tools.js +545 -321
  76. package/dist/copilot/tools.js.map +1 -0
  77. package/dist/index.d.ts +3 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +82 -26
  80. package/dist/index.js.map +1 -0
  81. package/dist/logging/logger.d.ts +6 -0
  82. package/dist/logging/logger.d.ts.map +1 -0
  83. package/dist/logging/logger.js +21 -0
  84. package/dist/logging/logger.js.map +1 -0
  85. package/dist/models/index.d.ts +6 -0
  86. package/dist/models/index.d.ts.map +1 -0
  87. package/dist/models/index.js +4 -0
  88. package/dist/models/index.js.map +1 -0
  89. package/dist/models/pricing.d.ts +25 -0
  90. package/dist/models/pricing.d.ts.map +1 -0
  91. package/dist/models/pricing.js +96 -0
  92. package/dist/models/pricing.js.map +1 -0
  93. package/dist/models/registry.d.ts +34 -0
  94. package/dist/models/registry.d.ts.map +1 -0
  95. package/dist/models/registry.js +109 -0
  96. package/dist/models/registry.js.map +1 -0
  97. package/dist/models/token-tracker.d.ts +40 -0
  98. package/dist/models/token-tracker.d.ts.map +1 -0
  99. package/dist/models/token-tracker.js +102 -0
  100. package/dist/models/token-tracker.js.map +1 -0
  101. package/dist/scheduler/engine.d.ts +9 -0
  102. package/dist/scheduler/engine.d.ts.map +1 -0
  103. package/dist/scheduler/engine.js +127 -0
  104. package/dist/scheduler/engine.js.map +1 -0
  105. package/dist/skills/index.d.ts +3 -0
  106. package/dist/skills/index.d.ts.map +1 -0
  107. package/dist/skills/index.js +2 -0
  108. package/dist/skills/index.js.map +1 -0
  109. package/dist/skills/store.d.ts +52 -0
  110. package/dist/skills/store.d.ts.map +1 -0
  111. package/dist/skills/store.js +148 -0
  112. package/dist/skills/store.js.map +1 -0
  113. package/dist/squad/agent.d.ts +46 -0
  114. package/dist/squad/agent.d.ts.map +1 -0
  115. package/dist/squad/agent.js +261 -0
  116. package/dist/squad/agent.js.map +1 -0
  117. package/dist/squad/autonomy.d.ts +16 -0
  118. package/dist/squad/autonomy.d.ts.map +1 -0
  119. package/dist/squad/autonomy.js +63 -0
  120. package/dist/squad/autonomy.js.map +1 -0
  121. package/dist/squad/event-bus.d.ts +22 -0
  122. package/dist/squad/event-bus.d.ts.map +1 -0
  123. package/dist/squad/event-bus.js +56 -0
  124. package/dist/squad/event-bus.js.map +1 -0
  125. package/dist/squad/execution/index.d.ts +12 -0
  126. package/dist/squad/execution/index.d.ts.map +1 -0
  127. package/dist/squad/execution/index.js +7 -0
  128. package/dist/squad/execution/index.js.map +1 -0
  129. package/dist/squad/execution/instance.d.ts +40 -0
  130. package/dist/squad/execution/instance.d.ts.map +1 -0
  131. package/dist/squad/execution/instance.js +138 -0
  132. package/dist/squad/execution/instance.js.map +1 -0
  133. package/dist/squad/execution/meeting.d.ts +25 -0
  134. package/dist/squad/execution/meeting.d.ts.map +1 -0
  135. package/dist/squad/execution/meeting.js +140 -0
  136. package/dist/squad/execution/meeting.js.map +1 -0
  137. package/dist/squad/execution/pr.d.ts +15 -0
  138. package/dist/squad/execution/pr.d.ts.map +1 -0
  139. package/dist/squad/execution/pr.js +93 -0
  140. package/dist/squad/execution/pr.js.map +1 -0
  141. package/dist/squad/execution/runner.d.ts +22 -0
  142. package/dist/squad/execution/runner.d.ts.map +1 -0
  143. package/dist/squad/execution/runner.js +68 -0
  144. package/dist/squad/execution/runner.js.map +1 -0
  145. package/dist/squad/execution/tasks.d.ts +11 -0
  146. package/dist/squad/execution/tasks.d.ts.map +1 -0
  147. package/dist/squad/execution/tasks.js +85 -0
  148. package/dist/squad/execution/tasks.js.map +1 -0
  149. package/dist/squad/execution/worktree.d.ts +26 -0
  150. package/dist/squad/execution/worktree.d.ts.map +1 -0
  151. package/dist/squad/execution/worktree.js +111 -0
  152. package/dist/squad/execution/worktree.js.map +1 -0
  153. package/dist/squad/hiring.d.ts +32 -0
  154. package/dist/squad/hiring.d.ts.map +1 -0
  155. package/dist/squad/hiring.js +200 -0
  156. package/dist/squad/hiring.js.map +1 -0
  157. package/dist/squad/index.d.ts +8 -0
  158. package/dist/squad/index.d.ts.map +1 -0
  159. package/dist/squad/index.js +6 -0
  160. package/dist/squad/index.js.map +1 -0
  161. package/dist/squad/manager.d.ts +48 -0
  162. package/dist/squad/manager.d.ts.map +1 -0
  163. package/dist/squad/manager.js +274 -0
  164. package/dist/squad/manager.js.map +1 -0
  165. package/dist/squad/name-generator.d.ts +16 -0
  166. package/dist/squad/name-generator.d.ts.map +1 -0
  167. package/dist/squad/name-generator.js +113 -0
  168. package/dist/squad/name-generator.js.map +1 -0
  169. package/dist/squad/roles/templates.d.ts +5 -0
  170. package/dist/squad/roles/templates.d.ts.map +1 -0
  171. package/dist/squad/roles/templates.js +102 -0
  172. package/dist/squad/roles/templates.js.map +1 -0
  173. package/dist/squad/skill-parser.d.ts +36 -0
  174. package/dist/squad/skill-parser.d.ts.map +1 -0
  175. package/dist/squad/skill-parser.js +83 -0
  176. package/dist/squad/skill-parser.js.map +1 -0
  177. package/dist/squad/source-resolver.d.ts +20 -0
  178. package/dist/squad/source-resolver.d.ts.map +1 -0
  179. package/dist/squad/source-resolver.js +52 -0
  180. package/dist/squad/source-resolver.js.map +1 -0
  181. package/dist/store/activity.d.ts +43 -0
  182. package/dist/store/activity.d.ts.map +1 -0
  183. package/dist/store/activity.js +131 -0
  184. package/dist/store/activity.js.map +1 -0
  185. package/dist/store/db.d.ts +5 -0
  186. package/dist/store/db.d.ts.map +1 -0
  187. package/dist/store/db.js +209 -248
  188. package/dist/store/db.js.map +1 -0
  189. package/dist/store/inbox.d.ts +53 -0
  190. package/dist/store/inbox.d.ts.map +1 -0
  191. package/dist/store/inbox.js +151 -0
  192. package/dist/store/inbox.js.map +1 -0
  193. package/dist/store/schedules.d.ts +53 -0
  194. package/dist/store/schedules.d.ts.map +1 -0
  195. package/dist/store/schedules.js +149 -54
  196. package/dist/store/schedules.js.map +1 -0
  197. package/dist/wiki/index.d.ts +3 -0
  198. package/dist/wiki/index.d.ts.map +1 -0
  199. package/dist/wiki/index.js +2 -0
  200. package/dist/wiki/index.js.map +1 -0
  201. package/dist/wiki/store.d.ts +49 -0
  202. package/dist/wiki/store.d.ts.map +1 -0
  203. package/dist/wiki/store.js +115 -0
  204. package/dist/wiki/store.js.map +1 -0
  205. package/package.json +52 -56
  206. package/src/api/middleware/auth.ts +76 -0
  207. package/src/api/notifications.ts +122 -0
  208. package/src/api/routes/activity.ts +29 -0
  209. package/src/api/routes/attachments.ts +93 -0
  210. package/src/api/routes/config.ts +115 -0
  211. package/src/api/routes/conversations.ts +87 -0
  212. package/src/api/routes/health.ts +18 -0
  213. package/src/api/routes/inbox.ts +98 -0
  214. package/src/api/routes/schedules.ts +121 -0
  215. package/src/api/routes/skills.ts +105 -0
  216. package/src/api/routes/squads.ts +145 -0
  217. package/src/api/routes/usage.ts +57 -0
  218. package/src/api/routes/wiki.ts +49 -0
  219. package/src/api/server.ts +186 -0
  220. package/src/config.ts +3 -0
  221. package/src/copilot/client.ts +42 -0
  222. package/src/copilot/health-monitor.ts +85 -0
  223. package/src/copilot/orchestrator.ts +222 -0
  224. package/src/copilot/tools.ts +707 -0
  225. package/src/index.ts +112 -0
  226. package/src/logging/logger.ts +26 -0
  227. package/src/models/index.ts +11 -0
  228. package/src/models/pricing.ts +121 -0
  229. package/src/models/registry.ts +131 -0
  230. package/src/models/token-tracker.ts +151 -0
  231. package/src/scheduler/engine.ts +146 -0
  232. package/src/skills/index.ts +13 -0
  233. package/src/skills/store.ts +188 -0
  234. package/src/squad/agent.ts +326 -0
  235. package/src/squad/autonomy.ts +78 -0
  236. package/src/squad/event-bus.ts +71 -0
  237. package/src/squad/execution/index.ts +17 -0
  238. package/src/squad/execution/instance.ts +186 -0
  239. package/src/squad/execution/meeting.ts +191 -0
  240. package/src/squad/execution/pr.ts +127 -0
  241. package/src/squad/execution/runner.ts +97 -0
  242. package/src/squad/execution/tasks.ts +111 -0
  243. package/src/squad/execution/worktree.ts +138 -0
  244. package/src/squad/hiring.ts +222 -0
  245. package/src/squad/index.ts +17 -0
  246. package/src/squad/manager.ts +337 -0
  247. package/src/squad/name-generator.ts +135 -0
  248. package/src/squad/roles/templates.ts +104 -0
  249. package/src/squad/skill-parser.ts +120 -0
  250. package/src/squad/source-resolver.ts +57 -0
  251. package/src/store/activity.ts +176 -0
  252. package/src/store/db.ts +237 -0
  253. package/src/store/inbox.ts +199 -0
  254. package/src/store/schedules.ts +199 -0
  255. package/src/wiki/index.ts +12 -0
  256. package/src/wiki/store.ts +139 -0
  257. package/tsconfig.json +9 -0
  258. package/LICENSE +0 -21
  259. package/README.md +0 -333
  260. package/dist/api/auth.js +0 -46
  261. package/dist/chat/attachments.js +0 -112
  262. package/dist/copilot/agents.js +0 -309
  263. package/dist/copilot/ceremonies.js +0 -174
  264. package/dist/copilot/gh-token.js +0 -64
  265. package/dist/copilot/io-scheduler.js +0 -79
  266. package/dist/copilot/model-router.js +0 -114
  267. package/dist/copilot/scheduler.js +0 -88
  268. package/dist/copilot/skills.js +0 -246
  269. package/dist/copilot/specialist-runner.js +0 -191
  270. package/dist/copilot/squad-tools.js +0 -258
  271. package/dist/copilot/system-message.js +0 -86
  272. package/dist/copilot/token-tracker.js +0 -98
  273. package/dist/copilot/trigger-schedule.js +0 -33
  274. package/dist/daemon.js +0 -67
  275. package/dist/logging.js +0 -27
  276. package/dist/mcp/config.js +0 -29
  277. package/dist/mcp/index.js +0 -3
  278. package/dist/mcp/registry.js +0 -42
  279. package/dist/notify.js +0 -25
  280. package/dist/paths.js +0 -17
  281. package/dist/setup.js +0 -35
  282. package/dist/store/agent-events.js +0 -19
  283. package/dist/store/audit-log.js +0 -71
  284. package/dist/store/conversations.js +0 -164
  285. package/dist/store/feed.js +0 -44
  286. package/dist/store/instances.js +0 -75
  287. package/dist/store/squad-colors.js +0 -23
  288. package/dist/store/squads.js +0 -60
  289. package/dist/store/tasks.js +0 -78
  290. package/dist/store/token-usage.js +0 -94
  291. package/dist/telegram/bot.js +0 -41
  292. package/dist/telegram/handlers.js +0 -42
  293. package/dist/watchdog.js +0 -37
  294. package/dist/wiki/backlinks.js +0 -51
  295. package/dist/wiki/fs.js +0 -108
  296. package/dist/wiki/search.js +0 -47
  297. package/web-dist/assets/AuditLogView-C5QtUQBq.js +0 -6
  298. package/web-dist/assets/ChatView-DLu9BMg8.js +0 -1
  299. package/web-dist/assets/FeedView-6OV-l6Gl.js +0 -6
  300. package/web-dist/assets/HistoryView-DizPqv0y.js +0 -1
  301. package/web-dist/assets/LoginView-CG1O9fmR.js +0 -1
  302. package/web-dist/assets/McpView-TJN-fZvI.js +0 -1
  303. package/web-dist/assets/SchedulesView-BDFpImX6.js +0 -6
  304. package/web-dist/assets/SettingsView-D-K1iC1c.js +0 -1
  305. package/web-dist/assets/SkillsView-DnNmO192.js +0 -15
  306. package/web-dist/assets/SquadDetailView-BBvrgHzn.js +0 -26
  307. package/web-dist/assets/SquadHealthView-DF2zF9D3.js +0 -11
  308. package/web-dist/assets/SquadsView-CPVzko7k.js +0 -6
  309. package/web-dist/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js +0 -1
  310. package/web-dist/assets/UsageView-OcyM5k14.js +0 -16
  311. package/web-dist/assets/WikiView-KhFqBZI0.js +0 -26
  312. package/web-dist/assets/api-BiDVwQrs.js +0 -1
  313. package/web-dist/assets/arrow-left-DFbf2tii.js +0 -6
  314. package/web-dist/assets/git-branch-BLstr_Gr.js +0 -6
  315. package/web-dist/assets/index-B-o45ao1.css +0 -1
  316. package/web-dist/assets/index-DCJUYZtV.js +0 -269
  317. package/web-dist/assets/pencil-D4Zz_t0y.js +0 -6
  318. package/web-dist/assets/plus-gmwiZVfr.js +0 -6
  319. package/web-dist/assets/save-BvtAs5WB.js +0 -6
  320. package/web-dist/assets/search-BabUvoGD.js +0 -6
  321. package/web-dist/assets/squad-colors-B8B_Y-lz.js +0 -1
  322. package/web-dist/assets/trash-2-C21cNLJl.js +0 -6
  323. package/web-dist/assets/triangle-alert-BrzY_E1n.js +0 -6
  324. package/web-dist/assets/x-xgLSmc9e.js +0 -6
  325. package/web-dist/favicon.svg +0 -10
  326. package/web-dist/index.html +0 -14
  327. package/web-dist/logo.svg +0 -10
@@ -0,0 +1,274 @@
1
+ import { AUTONOMY_TIERS } from '@io/shared';
2
+ import { createChildLogger } from '../logging/logger.js';
3
+ import { getDatabase } from '../store/db.js';
4
+ import { Agent } from './agent.js';
5
+ import { getEventBus } from './event-bus.js';
6
+ import { parseSkillContent, parseSkillFile } from './skill-parser.js';
7
+ const logger = () => createChildLogger('squad-manager');
8
+ // Active squads keyed by squad ID
9
+ const activeSquads = new Map();
10
+ /** Create a new squad in the database and return it */
11
+ export async function createSquad(params) {
12
+ const db = getDatabase();
13
+ const id = crypto.randomUUID();
14
+ const tier = params.autonomyTier ?? 'medium';
15
+ const autonomyConfig = AUTONOMY_TIERS[tier];
16
+ await db.execute({
17
+ sql: `INSERT INTO squads (id, name, project_path, repo_url, universe, autonomy_tier, autonomy_config, status)
18
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'active')`,
19
+ args: [
20
+ id,
21
+ params.name,
22
+ params.projectPath,
23
+ params.repoUrl ?? null,
24
+ params.universe ?? null,
25
+ tier,
26
+ JSON.stringify(autonomyConfig),
27
+ ],
28
+ });
29
+ const squad = {
30
+ id,
31
+ name: params.name,
32
+ projectPath: params.projectPath,
33
+ repoUrl: params.repoUrl,
34
+ universe: params.universe,
35
+ autonomyTier: tier,
36
+ autonomyConfig,
37
+ status: 'active',
38
+ createdAt: new Date(),
39
+ };
40
+ await getEventBus().emit({
41
+ id: crypto.randomUUID(),
42
+ timestamp: new Date(),
43
+ type: 'squad:created',
44
+ squadId: id,
45
+ squadName: params.name,
46
+ data: { projectPath: params.projectPath, tier },
47
+ });
48
+ logger().info({ squadId: id, name: params.name }, 'Squad created');
49
+ return squad;
50
+ }
51
+ /** Add a member to a squad */
52
+ export async function addMember(params) {
53
+ const db = getDatabase();
54
+ const id = crypto.randomUUID();
55
+ await db.execute({
56
+ sql: `INSERT INTO squad_members (id, squad_id, display_name, role_name, persona, skill_file_path, tools_allowed, is_veto_member, status)
57
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'active')`,
58
+ args: [
59
+ id,
60
+ params.squadId,
61
+ params.displayName,
62
+ params.skill.role,
63
+ params.persona ?? null,
64
+ params.skill.filePath,
65
+ JSON.stringify(params.skill.tools),
66
+ params.isVetoMember ? 1 : 0,
67
+ ],
68
+ });
69
+ const member = {
70
+ id,
71
+ squadId: params.squadId,
72
+ displayName: params.displayName,
73
+ roleName: params.skill.role,
74
+ persona: params.persona,
75
+ skillFilePath: params.skill.filePath,
76
+ toolsAllowed: params.skill.tools,
77
+ isVetoMember: params.isVetoMember ?? false,
78
+ status: 'active',
79
+ createdAt: new Date(),
80
+ };
81
+ return member;
82
+ }
83
+ /** List all squads */
84
+ export async function listSquads() {
85
+ const db = getDatabase();
86
+ const result = await db.execute("SELECT * FROM squads WHERE status = 'active'");
87
+ return result.rows.map((row) => ({
88
+ id: row.id,
89
+ name: row.name,
90
+ projectPath: row.project_path,
91
+ repoUrl: row.repo_url || undefined,
92
+ universe: row.universe || undefined,
93
+ autonomyTier: row.autonomy_tier,
94
+ autonomyConfig: JSON.parse(row.autonomy_config || '{}'),
95
+ status: row.status,
96
+ createdAt: new Date(row.created_at),
97
+ }));
98
+ }
99
+ /** Get a squad by name */
100
+ export async function getSquadByName(name) {
101
+ const db = getDatabase();
102
+ const result = await db.execute({
103
+ sql: "SELECT * FROM squads WHERE name = ? AND status = 'active'",
104
+ args: [name],
105
+ });
106
+ if (result.rows.length === 0)
107
+ return null;
108
+ const row = result.rows[0];
109
+ return {
110
+ id: row.id,
111
+ name: row.name,
112
+ projectPath: row.project_path,
113
+ repoUrl: row.repo_url || undefined,
114
+ universe: row.universe || undefined,
115
+ autonomyTier: row.autonomy_tier,
116
+ autonomyConfig: JSON.parse(row.autonomy_config || '{}'),
117
+ status: row.status,
118
+ createdAt: new Date(row.created_at),
119
+ };
120
+ }
121
+ /** Get squad members */
122
+ export async function getSquadMembers(squadId) {
123
+ const db = getDatabase();
124
+ const result = await db.execute({
125
+ sql: "SELECT * FROM squad_members WHERE squad_id = ? AND status = 'active'",
126
+ args: [squadId],
127
+ });
128
+ return result.rows.map((row) => ({
129
+ id: row.id,
130
+ squadId: row.squad_id,
131
+ displayName: row.display_name || row.role_name,
132
+ roleName: row.role_name,
133
+ persona: row.persona || undefined,
134
+ skillFilePath: row.skill_file_path || undefined,
135
+ toolsAllowed: JSON.parse(row.tools_allowed || '[]'),
136
+ isVetoMember: Boolean(row.is_veto_member),
137
+ status: row.status,
138
+ createdAt: new Date(row.created_at),
139
+ }));
140
+ }
141
+ /** Disband a squad */
142
+ export async function disbandSquad(squadId) {
143
+ const db = getDatabase();
144
+ await db.execute({
145
+ sql: "UPDATE squads SET status = 'disbanded' WHERE id = ?",
146
+ args: [squadId],
147
+ });
148
+ await db.execute({
149
+ sql: "UPDATE squad_members SET status = 'retired' WHERE squad_id = ?",
150
+ args: [squadId],
151
+ });
152
+ // Destroy any running agents
153
+ const runtime = activeSquads.get(squadId);
154
+ if (runtime) {
155
+ for (const agent of runtime.members.values()) {
156
+ await agent.destroy().catch(() => { });
157
+ }
158
+ activeSquads.delete(squadId);
159
+ }
160
+ await getEventBus().emit({
161
+ id: crypto.randomUUID(),
162
+ timestamp: new Date(),
163
+ type: 'squad:disbanded',
164
+ squadId,
165
+ squadName: '',
166
+ });
167
+ logger().info({ squadId }, 'Squad disbanded');
168
+ }
169
+ /** Retheme a squad with a new universe — updates display names and personas */
170
+ export async function rethemeSquad(squadId, newUniverse, assignments) {
171
+ const db = getDatabase();
172
+ // Update squad universe
173
+ await db.execute({
174
+ sql: 'UPDATE squads SET universe = ? WHERE id = ?',
175
+ args: [newUniverse, squadId],
176
+ });
177
+ // Update each member
178
+ for (const assignment of assignments) {
179
+ await db.execute({
180
+ sql: 'UPDATE squad_members SET display_name = ?, persona = ? WHERE squad_id = ? AND role_name = ?',
181
+ args: [assignment.displayName, assignment.persona, squadId, assignment.role],
182
+ });
183
+ }
184
+ // If squad is running, destroy and reboot agents
185
+ const runtime = activeSquads.get(squadId);
186
+ if (runtime) {
187
+ for (const agent of runtime.members.values()) {
188
+ await agent.destroy().catch(() => { });
189
+ }
190
+ activeSquads.delete(squadId);
191
+ // Reload squad data and reboot
192
+ const squad = await getSquadById(squadId);
193
+ if (squad) {
194
+ await bootSquad(squad);
195
+ }
196
+ }
197
+ logger().info({ squadId, universe: newUniverse }, 'Squad rethemed');
198
+ }
199
+ /** Get squad by ID */
200
+ export async function getSquadById(squadId) {
201
+ const db = getDatabase();
202
+ const result = await db.execute({
203
+ sql: 'SELECT * FROM squads WHERE id = ?',
204
+ args: [squadId],
205
+ });
206
+ if (result.rows.length === 0)
207
+ return null;
208
+ const row = result.rows[0];
209
+ return {
210
+ id: row.id,
211
+ name: row.name,
212
+ projectPath: row.project_path,
213
+ repoUrl: row.repo_url || undefined,
214
+ universe: row.universe || undefined,
215
+ autonomyTier: row.autonomy_tier,
216
+ autonomyConfig: JSON.parse(row.autonomy_config || '{}'),
217
+ status: row.status,
218
+ createdAt: new Date(row.created_at),
219
+ };
220
+ }
221
+ /** Boot a squad's agents (creates sessions for each member) */
222
+ export async function bootSquad(squad) {
223
+ const members = await getSquadMembers(squad.id);
224
+ const runtime = {
225
+ squad,
226
+ members: new Map(),
227
+ skills: new Map(),
228
+ };
229
+ const squadContext = `Project: ${squad.name}\nPath: ${squad.projectPath}${squad.repoUrl ? `\nRepo: ${squad.repoUrl}` : ''}`;
230
+ for (const member of members) {
231
+ let skill;
232
+ if (member.skillFilePath) {
233
+ skill = parseSkillFile(member.skillFilePath);
234
+ }
235
+ else {
236
+ // Fallback: generate a minimal skill
237
+ skill = parseSkillContent(`---\nrole: ${member.roleName}\ntools: []\nveto: false\n---\nYou are the ${member.roleName}.`);
238
+ }
239
+ runtime.skills.set(member.roleName, skill);
240
+ const agent = new Agent({
241
+ skill,
242
+ squadId: squad.id,
243
+ squadName: squad.name,
244
+ model: 'claude-opus-4.6',
245
+ identity: {
246
+ displayName: member.displayName,
247
+ persona: member.persona,
248
+ universe: squad.universe,
249
+ },
250
+ });
251
+ await agent.init(squadContext);
252
+ runtime.members.set(member.roleName, agent);
253
+ }
254
+ activeSquads.set(squad.id, runtime);
255
+ logger().info({ squadId: squad.id, memberCount: members.length }, 'Squad booted');
256
+ return runtime;
257
+ }
258
+ /** Get a running squad's runtime */
259
+ export function getSquadRuntime(squadId) {
260
+ return activeSquads.get(squadId);
261
+ }
262
+ /** Delegate a message to a squad's team lead */
263
+ export async function delegateToSquad(squadId, message) {
264
+ const runtime = activeSquads.get(squadId);
265
+ if (!runtime) {
266
+ throw new Error(`Squad ${squadId} is not running`);
267
+ }
268
+ const teamLead = runtime.members.get('team-lead');
269
+ if (!teamLead) {
270
+ throw new Error(`Squad ${squadId} has no team lead`);
271
+ }
272
+ return teamLead.send(message);
273
+ }
274
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/squad/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface NameAssignment {
2
+ role: string;
3
+ displayName: string;
4
+ persona: string;
5
+ }
6
+ export interface GeneratedNames {
7
+ universe: string;
8
+ assignments: NameAssignment[];
9
+ }
10
+ /**
11
+ * Generate character names and persona blurbs for squad members using the LLM.
12
+ * If a universe is provided, names come from that universe.
13
+ * If not, the LLM picks a fun universe on its own.
14
+ */
15
+ export declare function generateSquadNames(roles: string[], universe?: string): Promise<GeneratedNames>;
16
+ //# sourceMappingURL=name-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name-generator.d.ts","sourceRoot":"","sources":["../../src/squad/name-generator.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,cAAc,EAAE,CAAC;CAC9B;AAmBD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CA0DzB"}
@@ -0,0 +1,113 @@
1
+ import { getClient } from '../copilot/client.js';
2
+ import { createChildLogger } from '../logging/logger.js';
3
+ const logger = () => createChildLogger('name-generator');
4
+ const NAME_GENERATION_PROMPT = `You are a creative naming assistant. Your job is to assign pop-culture character names to a team of AI agents based on their technical roles.
5
+
6
+ Rules:
7
+ - Each character name must be UNIQUE within the team
8
+ - Match character personalities to the technical role's nature (e.g. a methodical character for QA, a creative character for frontend)
9
+ - The persona should be 1-2 sentences describing how this character communicates — their tone, quirks, and style
10
+ - Keep personas fun but professional — they should enhance communication, not distract from technical work
11
+ - Return ONLY valid JSON, no markdown fencing
12
+
13
+ Respond with this exact JSON structure:
14
+ {
15
+ "universe": "<the universe name>",
16
+ "assignments": [
17
+ { "role": "<technical role>", "displayName": "<character name>", "persona": "<1-2 sentence persona description>" }
18
+ ]
19
+ }`;
20
+ /**
21
+ * Generate character names and persona blurbs for squad members using the LLM.
22
+ * If a universe is provided, names come from that universe.
23
+ * If not, the LLM picks a fun universe on its own.
24
+ */
25
+ export async function generateSquadNames(roles, universe) {
26
+ const log = logger();
27
+ const userPrompt = universe
28
+ ? `Assign character names from the "${universe}" universe to these team roles: ${roles.join(', ')}`
29
+ : `Pick a fun pop-culture universe of your choice and assign character names to these team roles: ${roles.join(', ')}`;
30
+ try {
31
+ const client = await getClient();
32
+ const session = await client.createSession({
33
+ systemMessage: { mode: 'replace', content: NAME_GENERATION_PROMPT },
34
+ });
35
+ let accumulated = '';
36
+ const unsubDelta = session.on('assistant.message_delta', (event) => {
37
+ accumulated += event.data.deltaContent;
38
+ });
39
+ try {
40
+ await session.sendAndWait({ prompt: userPrompt }, 60_000);
41
+ }
42
+ finally {
43
+ unsubDelta();
44
+ }
45
+ // Parse the JSON response
46
+ const parsed = extractJson(accumulated);
47
+ if (!parsed || !parsed.universe || !Array.isArray(parsed.assignments)) {
48
+ throw new Error('Invalid response structure from LLM');
49
+ }
50
+ // Validate all roles are covered
51
+ const result = {
52
+ universe: parsed.universe,
53
+ assignments: [],
54
+ };
55
+ for (const role of roles) {
56
+ const match = parsed.assignments.find((a) => a.role?.toLowerCase() === role.toLowerCase());
57
+ if (match) {
58
+ result.assignments.push({
59
+ role,
60
+ displayName: match.displayName || match.display_name || role,
61
+ persona: match.persona || '',
62
+ });
63
+ }
64
+ else {
65
+ // Role wasn't in LLM response — use role name as fallback
66
+ result.assignments.push({ role, displayName: role, persona: '' });
67
+ }
68
+ }
69
+ log.info({ universe: result.universe, count: result.assignments.length }, 'Names generated');
70
+ return result;
71
+ }
72
+ catch (err) {
73
+ log.error({ err, roles, universe }, 'Failed to generate names, falling back to role names');
74
+ return fallback(roles);
75
+ }
76
+ }
77
+ /** Fallback: use role names as display names with no persona */
78
+ function fallback(roles) {
79
+ return {
80
+ universe: 'none',
81
+ assignments: roles.map((role) => ({ role, displayName: role, persona: '' })),
82
+ };
83
+ }
84
+ /** Extract JSON from LLM response (handles possible markdown fencing) */
85
+ function extractJson(text) {
86
+ try {
87
+ return JSON.parse(text.trim());
88
+ }
89
+ catch {
90
+ // Try extracting from markdown code fence
91
+ const match = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
92
+ if (match) {
93
+ try {
94
+ return JSON.parse(match[1].trim());
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ // Try finding JSON object in text
101
+ const braceMatch = text.match(/\{[\s\S]*\}/);
102
+ if (braceMatch) {
103
+ try {
104
+ return JSON.parse(braceMatch[0]);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ }
113
+ //# sourceMappingURL=name-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name-generator.js","sourceRoot":"","sources":["../../src/squad/name-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Built-in SKILL.md templates for core squad roles */
2
+ export declare const TEAM_LEAD_SKILL = "---\nrole: team-lead\ntools:\n - read_file\n - search_code\nveto: true\n---\n\n# Team Lead\n\n## Identity\nYou are the Team Lead \u2014 a senior engineering manager and project coordinator.\n\n## Responsibilities\n- Analyze incoming tasks and break them into actionable work items\n- Assign tasks to the appropriate specialist agents\n- Coordinate round-table meetings for complex decisions\n- Review completed work before it becomes a PR\n- Maintain project direction and consistency\n- Report progress and blockers back to the orchestrator\n\n## Boundaries\n- You do NOT write or edit code directly\n- You do NOT run commands\n- You delegate all implementation work to specialists\n- You focus on planning, coordination, and quality assurance\n\n## Communication Style\n- Be concise and structured in task descriptions\n- Include acceptance criteria for every task\n- Reference relevant files and code patterns when assigning work\n";
3
+ export declare const SCRIBE_SKILL = "---\nrole: scribe\ntools:\n - read_file\n - edit_file\nveto: false\n---\n\n# Scribe\n\n## Identity\nYou are the Scribe \u2014 responsible for recording decisions, meeting notes, and project documentation.\n\n## Responsibilities\n- Record all key decisions made during meetings with rationale\n- Maintain a decisions log that all team members can reference\n- Document architectural choices and trade-offs\n- Write clear commit messages and PR descriptions\n- Update project README and docs when changes warrant it\n\n## Boundaries\n- You do NOT make technical decisions \u2014 you record them\n- You do NOT modify source code \u2014 only documentation files\n- You ask clarifying questions when decisions are ambiguous\n- You ensure decisions are searchable and well-categorized\n\n## Output Format\nDecisions should follow this format:\n- **Decision**: What was decided\n- **Context**: Why this was needed\n- **Rationale**: Why this option was chosen over alternatives\n- **Consequences**: What this means going forward\n";
4
+ export declare const QA_TESTER_SKILL = "---\nrole: qa-tester\ntools:\n - read_file\n - edit_file\n - run_command\n - search_code\nveto: true\n---\n\n# QA / Test Engineer\n\n## Identity\nYou are the QA/Test Engineer \u2014 the quality gate for all code changes.\n\n## Responsibilities\n- Write comprehensive tests for new features (unit, integration)\n- Run existing test suites and report failures\n- Review code for edge cases, error handling, and security issues\n- Verify changes don't break existing functionality\n- Block merges that don't meet quality standards\n\n## Boundaries\n- You focus on test code, not feature implementation\n- You veto changes that reduce test coverage or break tests\n- You report issues clearly with reproduction steps\n- You suggest fixes but don't implement production features\n\n## Quality Standards\n- All new code must have corresponding tests\n- No PR should reduce overall test coverage\n- All tests must pass before approval\n- Edge cases (empty inputs, null values, errors) must be covered\n- Async code must have timeout and error handling tests\n";
5
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/squad/roles/templates.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,eAAO,MAAM,eAAe,66BA+B3B,CAAC;AAEF,eAAO,MAAM,YAAY,qgCAgCxB,CAAC;AAEF,eAAO,MAAM,eAAe,qiCAkC3B,CAAC"}
@@ -0,0 +1,102 @@
1
+ /** Built-in SKILL.md templates for core squad roles */
2
+ export const TEAM_LEAD_SKILL = `---
3
+ role: team-lead
4
+ tools:
5
+ - read_file
6
+ - search_code
7
+ veto: true
8
+ ---
9
+
10
+ # Team Lead
11
+
12
+ ## Identity
13
+ You are the Team Lead — a senior engineering manager and project coordinator.
14
+
15
+ ## Responsibilities
16
+ - Analyze incoming tasks and break them into actionable work items
17
+ - Assign tasks to the appropriate specialist agents
18
+ - Coordinate round-table meetings for complex decisions
19
+ - Review completed work before it becomes a PR
20
+ - Maintain project direction and consistency
21
+ - Report progress and blockers back to the orchestrator
22
+
23
+ ## Boundaries
24
+ - You do NOT write or edit code directly
25
+ - You do NOT run commands
26
+ - You delegate all implementation work to specialists
27
+ - You focus on planning, coordination, and quality assurance
28
+
29
+ ## Communication Style
30
+ - Be concise and structured in task descriptions
31
+ - Include acceptance criteria for every task
32
+ - Reference relevant files and code patterns when assigning work
33
+ `;
34
+ export const SCRIBE_SKILL = `---
35
+ role: scribe
36
+ tools:
37
+ - read_file
38
+ - edit_file
39
+ veto: false
40
+ ---
41
+
42
+ # Scribe
43
+
44
+ ## Identity
45
+ You are the Scribe — responsible for recording decisions, meeting notes, and project documentation.
46
+
47
+ ## Responsibilities
48
+ - Record all key decisions made during meetings with rationale
49
+ - Maintain a decisions log that all team members can reference
50
+ - Document architectural choices and trade-offs
51
+ - Write clear commit messages and PR descriptions
52
+ - Update project README and docs when changes warrant it
53
+
54
+ ## Boundaries
55
+ - You do NOT make technical decisions — you record them
56
+ - You do NOT modify source code — only documentation files
57
+ - You ask clarifying questions when decisions are ambiguous
58
+ - You ensure decisions are searchable and well-categorized
59
+
60
+ ## Output Format
61
+ Decisions should follow this format:
62
+ - **Decision**: What was decided
63
+ - **Context**: Why this was needed
64
+ - **Rationale**: Why this option was chosen over alternatives
65
+ - **Consequences**: What this means going forward
66
+ `;
67
+ export const QA_TESTER_SKILL = `---
68
+ role: qa-tester
69
+ tools:
70
+ - read_file
71
+ - edit_file
72
+ - run_command
73
+ - search_code
74
+ veto: true
75
+ ---
76
+
77
+ # QA / Test Engineer
78
+
79
+ ## Identity
80
+ You are the QA/Test Engineer — the quality gate for all code changes.
81
+
82
+ ## Responsibilities
83
+ - Write comprehensive tests for new features (unit, integration)
84
+ - Run existing test suites and report failures
85
+ - Review code for edge cases, error handling, and security issues
86
+ - Verify changes don't break existing functionality
87
+ - Block merges that don't meet quality standards
88
+
89
+ ## Boundaries
90
+ - You focus on test code, not feature implementation
91
+ - You veto changes that reduce test coverage or break tests
92
+ - You report issues clearly with reproduction steps
93
+ - You suggest fixes but don't implement production features
94
+
95
+ ## Quality Standards
96
+ - All new code must have corresponding tests
97
+ - No PR should reduce overall test coverage
98
+ - All tests must pass before approval
99
+ - Edge cases (empty inputs, null values, errors) must be covered
100
+ - Async code must have timeout and error handling tests
101
+ `;
102
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/squad/roles/templates.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC9B,CAAC"}
@@ -0,0 +1,36 @@
1
+ export interface SkillDefinition {
2
+ role: string;
3
+ tools: string[];
4
+ veto: boolean;
5
+ systemPrompt: string;
6
+ rawMarkdown: string;
7
+ filePath: string;
8
+ }
9
+ /**
10
+ * Parse a SKILL.md file into a structured SkillDefinition.
11
+ * Format:
12
+ * ---
13
+ * role: react-developer
14
+ * tools:
15
+ * - edit_file
16
+ * - read_file
17
+ * veto: false
18
+ * ---
19
+ * # Role Name
20
+ * System prompt markdown content...
21
+ */
22
+ export declare function parseSkillFile(filePath: string): SkillDefinition;
23
+ /**
24
+ * Parse SKILL.md content string into a SkillDefinition.
25
+ */
26
+ export declare function parseSkillContent(content: string, filePath?: string): SkillDefinition;
27
+ /**
28
+ * Compile a SkillDefinition into a full system message string for the LLM.
29
+ * Injects role identity, boundaries, and tool context.
30
+ */
31
+ export declare function compileSystemPrompt(skill: SkillDefinition, squadContext?: string, squadName?: string, squadId?: string, identity?: {
32
+ displayName: string;
33
+ persona?: string;
34
+ universe?: string;
35
+ }): Promise<string>;
36
+ //# sourceMappingURL=skill-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-parser.d.ts","sourceRoot":"","sources":["../../src/squad/skill-parser.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAOhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,eAAe,CAgBzF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,eAAe,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,OAAO,CAAC,MAAM,CAAC,CA8CjB"}