heyio 3.3.5 → 4.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 (289) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -151
  4. package/dist/daemon/cli.js +7153 -0
  5. package/dist/daemon/index.js +6421 -0
  6. package/dist/web/assets/index-CbptHIYU.js +520 -0
  7. package/{public → dist/web}/index.html +1 -1
  8. package/package.json +45 -48
  9. package/dist/api/middleware/auth.d.ts +0 -14
  10. package/dist/api/middleware/auth.d.ts.map +0 -1
  11. package/dist/api/middleware/auth.js +0 -130
  12. package/dist/api/middleware/auth.js.map +0 -1
  13. package/dist/api/notifications.d.ts +0 -14
  14. package/dist/api/notifications.d.ts.map +0 -1
  15. package/dist/api/notifications.js +0 -114
  16. package/dist/api/notifications.js.map +0 -1
  17. package/dist/api/routes/activity.d.ts +0 -3
  18. package/dist/api/routes/activity.d.ts.map +0 -1
  19. package/dist/api/routes/activity.js +0 -28
  20. package/dist/api/routes/activity.js.map +0 -1
  21. package/dist/api/routes/attachments.d.ts +0 -3
  22. package/dist/api/routes/attachments.d.ts.map +0 -1
  23. package/dist/api/routes/attachments.js +0 -83
  24. package/dist/api/routes/attachments.js.map +0 -1
  25. package/dist/api/routes/config.d.ts +0 -3
  26. package/dist/api/routes/config.d.ts.map +0 -1
  27. package/dist/api/routes/config.js +0 -107
  28. package/dist/api/routes/config.js.map +0 -1
  29. package/dist/api/routes/conversations.d.ts +0 -3
  30. package/dist/api/routes/conversations.d.ts.map +0 -1
  31. package/dist/api/routes/conversations.js +0 -25
  32. package/dist/api/routes/conversations.js.map +0 -1
  33. package/dist/api/routes/health.d.ts +0 -3
  34. package/dist/api/routes/health.d.ts.map +0 -1
  35. package/dist/api/routes/health.js +0 -39
  36. package/dist/api/routes/health.js.map +0 -1
  37. package/dist/api/routes/inbox.d.ts +0 -3
  38. package/dist/api/routes/inbox.d.ts.map +0 -1
  39. package/dist/api/routes/inbox.js +0 -139
  40. package/dist/api/routes/inbox.js.map +0 -1
  41. package/dist/api/routes/schedules.d.ts +0 -3
  42. package/dist/api/routes/schedules.d.ts.map +0 -1
  43. package/dist/api/routes/schedules.js +0 -116
  44. package/dist/api/routes/schedules.js.map +0 -1
  45. package/dist/api/routes/skills.d.ts +0 -2
  46. package/dist/api/routes/skills.d.ts.map +0 -1
  47. package/dist/api/routes/skills.js +0 -127
  48. package/dist/api/routes/skills.js.map +0 -1
  49. package/dist/api/routes/squads.d.ts +0 -3
  50. package/dist/api/routes/squads.d.ts.map +0 -1
  51. package/dist/api/routes/squads.js +0 -578
  52. package/dist/api/routes/squads.js.map +0 -1
  53. package/dist/api/routes/usage.d.ts +0 -3
  54. package/dist/api/routes/usage.d.ts.map +0 -1
  55. package/dist/api/routes/usage.js +0 -55
  56. package/dist/api/routes/usage.js.map +0 -1
  57. package/dist/api/routes/wiki.d.ts +0 -2
  58. package/dist/api/routes/wiki.d.ts.map +0 -1
  59. package/dist/api/routes/wiki.js +0 -75
  60. package/dist/api/routes/wiki.js.map +0 -1
  61. package/dist/api/server.d.ts +0 -7
  62. package/dist/api/server.d.ts.map +0 -1
  63. package/dist/api/server.js +0 -183
  64. package/dist/api/server.js.map +0 -1
  65. package/dist/config.d.ts +0 -3
  66. package/dist/config.d.ts.map +0 -1
  67. package/dist/config.js +0 -3
  68. package/dist/config.js.map +0 -1
  69. package/dist/copilot/client.d.ts +0 -5
  70. package/dist/copilot/client.d.ts.map +0 -1
  71. package/dist/copilot/client.js +0 -38
  72. package/dist/copilot/client.js.map +0 -1
  73. package/dist/copilot/health-monitor.d.ts +0 -14
  74. package/dist/copilot/health-monitor.d.ts.map +0 -1
  75. package/dist/copilot/health-monitor.js +0 -70
  76. package/dist/copilot/health-monitor.js.map +0 -1
  77. package/dist/copilot/orchestrator.d.ts +0 -5
  78. package/dist/copilot/orchestrator.d.ts.map +0 -1
  79. package/dist/copilot/orchestrator.js +0 -227
  80. package/dist/copilot/orchestrator.js.map +0 -1
  81. package/dist/copilot/tools.d.ts +0 -80
  82. package/dist/copilot/tools.d.ts.map +0 -1
  83. package/dist/copilot/tools.js +0 -1067
  84. package/dist/copilot/tools.js.map +0 -1
  85. package/dist/index.d.ts +0 -3
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js +0 -94
  88. package/dist/index.js.map +0 -1
  89. package/dist/logging/logger.d.ts +0 -6
  90. package/dist/logging/logger.d.ts.map +0 -1
  91. package/dist/logging/logger.js +0 -33
  92. package/dist/logging/logger.js.map +0 -1
  93. package/dist/models/index.d.ts +0 -6
  94. package/dist/models/index.d.ts.map +0 -1
  95. package/dist/models/index.js +0 -4
  96. package/dist/models/index.js.map +0 -1
  97. package/dist/models/pricing.d.ts +0 -25
  98. package/dist/models/pricing.d.ts.map +0 -1
  99. package/dist/models/pricing.js +0 -96
  100. package/dist/models/pricing.js.map +0 -1
  101. package/dist/models/registry.d.ts +0 -34
  102. package/dist/models/registry.d.ts.map +0 -1
  103. package/dist/models/registry.js +0 -109
  104. package/dist/models/registry.js.map +0 -1
  105. package/dist/models/token-tracker.d.ts +0 -41
  106. package/dist/models/token-tracker.d.ts.map +0 -1
  107. package/dist/models/token-tracker.js +0 -103
  108. package/dist/models/token-tracker.js.map +0 -1
  109. package/dist/scheduler/engine.d.ts +0 -12
  110. package/dist/scheduler/engine.d.ts.map +0 -1
  111. package/dist/scheduler/engine.js +0 -128
  112. package/dist/scheduler/engine.js.map +0 -1
  113. package/dist/skills/discover.d.ts +0 -22
  114. package/dist/skills/discover.d.ts.map +0 -1
  115. package/dist/skills/discover.js +0 -228
  116. package/dist/skills/discover.js.map +0 -1
  117. package/dist/skills/index.d.ts +0 -5
  118. package/dist/skills/index.d.ts.map +0 -1
  119. package/dist/skills/index.js +0 -3
  120. package/dist/skills/index.js.map +0 -1
  121. package/dist/skills/store.d.ts +0 -56
  122. package/dist/skills/store.d.ts.map +0 -1
  123. package/dist/skills/store.js +0 -154
  124. package/dist/skills/store.js.map +0 -1
  125. package/dist/squad/agent.d.ts +0 -65
  126. package/dist/squad/agent.d.ts.map +0 -1
  127. package/dist/squad/agent.js +0 -544
  128. package/dist/squad/agent.js.map +0 -1
  129. package/dist/squad/autonomy.d.ts +0 -16
  130. package/dist/squad/autonomy.d.ts.map +0 -1
  131. package/dist/squad/autonomy.js +0 -63
  132. package/dist/squad/autonomy.js.map +0 -1
  133. package/dist/squad/event-bus.d.ts +0 -22
  134. package/dist/squad/event-bus.d.ts.map +0 -1
  135. package/dist/squad/event-bus.js +0 -56
  136. package/dist/squad/event-bus.js.map +0 -1
  137. package/dist/squad/execution/index.d.ts +0 -14
  138. package/dist/squad/execution/index.d.ts.map +0 -1
  139. package/dist/squad/execution/index.js +0 -8
  140. package/dist/squad/execution/index.js.map +0 -1
  141. package/dist/squad/execution/instance.d.ts +0 -45
  142. package/dist/squad/execution/instance.d.ts.map +0 -1
  143. package/dist/squad/execution/instance.js +0 -171
  144. package/dist/squad/execution/instance.js.map +0 -1
  145. package/dist/squad/execution/planning.d.ts +0 -20
  146. package/dist/squad/execution/planning.d.ts.map +0 -1
  147. package/dist/squad/execution/planning.js +0 -62
  148. package/dist/squad/execution/planning.js.map +0 -1
  149. package/dist/squad/execution/pr.d.ts +0 -15
  150. package/dist/squad/execution/pr.d.ts.map +0 -1
  151. package/dist/squad/execution/pr.js +0 -109
  152. package/dist/squad/execution/pr.js.map +0 -1
  153. package/dist/squad/execution/review.d.ts +0 -21
  154. package/dist/squad/execution/review.d.ts.map +0 -1
  155. package/dist/squad/execution/review.js +0 -151
  156. package/dist/squad/execution/review.js.map +0 -1
  157. package/dist/squad/execution/runner.d.ts +0 -52
  158. package/dist/squad/execution/runner.d.ts.map +0 -1
  159. package/dist/squad/execution/runner.js +0 -93
  160. package/dist/squad/execution/runner.js.map +0 -1
  161. package/dist/squad/execution/tasks.d.ts +0 -22
  162. package/dist/squad/execution/tasks.d.ts.map +0 -1
  163. package/dist/squad/execution/tasks.js +0 -108
  164. package/dist/squad/execution/tasks.js.map +0 -1
  165. package/dist/squad/execution/worktree.d.ts +0 -27
  166. package/dist/squad/execution/worktree.d.ts.map +0 -1
  167. package/dist/squad/execution/worktree.js +0 -141
  168. package/dist/squad/execution/worktree.js.map +0 -1
  169. package/dist/squad/hiring.d.ts +0 -57
  170. package/dist/squad/hiring.d.ts.map +0 -1
  171. package/dist/squad/hiring.js +0 -588
  172. package/dist/squad/hiring.js.map +0 -1
  173. package/dist/squad/index.d.ts +0 -8
  174. package/dist/squad/index.d.ts.map +0 -1
  175. package/dist/squad/index.js +0 -6
  176. package/dist/squad/index.js.map +0 -1
  177. package/dist/squad/manager.d.ts +0 -58
  178. package/dist/squad/manager.d.ts.map +0 -1
  179. package/dist/squad/manager.js +0 -351
  180. package/dist/squad/manager.js.map +0 -1
  181. package/dist/squad/model-selector.d.ts +0 -29
  182. package/dist/squad/model-selector.d.ts.map +0 -1
  183. package/dist/squad/model-selector.js +0 -64
  184. package/dist/squad/model-selector.js.map +0 -1
  185. package/dist/squad/name-generator.d.ts +0 -16
  186. package/dist/squad/name-generator.d.ts.map +0 -1
  187. package/dist/squad/name-generator.js +0 -111
  188. package/dist/squad/name-generator.js.map +0 -1
  189. package/dist/squad/roles/templates.d.ts +0 -7
  190. package/dist/squad/roles/templates.d.ts.map +0 -1
  191. package/dist/squad/roles/templates.js +0 -104
  192. package/dist/squad/roles/templates.js.map +0 -1
  193. package/dist/squad/skill-parser.d.ts +0 -36
  194. package/dist/squad/skill-parser.d.ts.map +0 -1
  195. package/dist/squad/skill-parser.js +0 -90
  196. package/dist/squad/skill-parser.js.map +0 -1
  197. package/dist/squad/source-resolver.d.ts +0 -20
  198. package/dist/squad/source-resolver.d.ts.map +0 -1
  199. package/dist/squad/source-resolver.js +0 -51
  200. package/dist/squad/source-resolver.js.map +0 -1
  201. package/dist/store/activity.d.ts +0 -51
  202. package/dist/store/activity.d.ts.map +0 -1
  203. package/dist/store/activity.js +0 -197
  204. package/dist/store/activity.js.map +0 -1
  205. package/dist/store/conversations.d.ts +0 -25
  206. package/dist/store/conversations.d.ts.map +0 -1
  207. package/dist/store/conversations.js +0 -76
  208. package/dist/store/conversations.js.map +0 -1
  209. package/dist/store/db.d.ts +0 -5
  210. package/dist/store/db.d.ts.map +0 -1
  211. package/dist/store/db.js +0 -290
  212. package/dist/store/db.js.map +0 -1
  213. package/dist/store/inbox.d.ts +0 -67
  214. package/dist/store/inbox.d.ts.map +0 -1
  215. package/dist/store/inbox.js +0 -192
  216. package/dist/store/inbox.js.map +0 -1
  217. package/dist/store/schedules.d.ts +0 -53
  218. package/dist/store/schedules.d.ts.map +0 -1
  219. package/dist/store/schedules.js +0 -160
  220. package/dist/store/schedules.js.map +0 -1
  221. package/dist/wiki/index.d.ts +0 -3
  222. package/dist/wiki/index.d.ts.map +0 -1
  223. package/dist/wiki/index.js +0 -2
  224. package/dist/wiki/index.js.map +0 -1
  225. package/dist/wiki/store.d.ts +0 -81
  226. package/dist/wiki/store.d.ts.map +0 -1
  227. package/dist/wiki/store.js +0 -270
  228. package/dist/wiki/store.js.map +0 -1
  229. package/node_modules/@io/shared/dist/config.d.ts +0 -26
  230. package/node_modules/@io/shared/dist/config.d.ts.map +0 -1
  231. package/node_modules/@io/shared/dist/config.js +0 -53
  232. package/node_modules/@io/shared/dist/config.js.map +0 -1
  233. package/node_modules/@io/shared/dist/constants.d.ts +0 -19
  234. package/node_modules/@io/shared/dist/constants.d.ts.map +0 -1
  235. package/node_modules/@io/shared/dist/constants.js +0 -51
  236. package/node_modules/@io/shared/dist/constants.js.map +0 -1
  237. package/node_modules/@io/shared/dist/index.d.ts +0 -12
  238. package/node_modules/@io/shared/dist/index.d.ts.map +0 -1
  239. package/node_modules/@io/shared/dist/index.js +0 -3
  240. package/node_modules/@io/shared/dist/index.js.map +0 -1
  241. package/node_modules/@io/shared/dist/types/agents.d.ts +0 -3
  242. package/node_modules/@io/shared/dist/types/agents.d.ts.map +0 -1
  243. package/node_modules/@io/shared/dist/types/agents.js +0 -2
  244. package/node_modules/@io/shared/dist/types/agents.js.map +0 -1
  245. package/node_modules/@io/shared/dist/types/api.d.ts +0 -33
  246. package/node_modules/@io/shared/dist/types/api.d.ts.map +0 -1
  247. package/node_modules/@io/shared/dist/types/api.js +0 -2
  248. package/node_modules/@io/shared/dist/types/api.js.map +0 -1
  249. package/node_modules/@io/shared/dist/types/attachments.d.ts +0 -10
  250. package/node_modules/@io/shared/dist/types/attachments.d.ts.map +0 -1
  251. package/node_modules/@io/shared/dist/types/attachments.js +0 -2
  252. package/node_modules/@io/shared/dist/types/attachments.js.map +0 -1
  253. package/node_modules/@io/shared/dist/types/events.d.ts +0 -44
  254. package/node_modules/@io/shared/dist/types/events.d.ts.map +0 -1
  255. package/node_modules/@io/shared/dist/types/events.js +0 -2
  256. package/node_modules/@io/shared/dist/types/events.js.map +0 -1
  257. package/node_modules/@io/shared/dist/types/history.d.ts +0 -33
  258. package/node_modules/@io/shared/dist/types/history.d.ts.map +0 -1
  259. package/node_modules/@io/shared/dist/types/history.js +0 -2
  260. package/node_modules/@io/shared/dist/types/history.js.map +0 -1
  261. package/node_modules/@io/shared/dist/types/messages.d.ts +0 -15
  262. package/node_modules/@io/shared/dist/types/messages.d.ts.map +0 -1
  263. package/node_modules/@io/shared/dist/types/messages.js +0 -2
  264. package/node_modules/@io/shared/dist/types/messages.js.map +0 -1
  265. package/node_modules/@io/shared/dist/types/squads.d.ts +0 -46
  266. package/node_modules/@io/shared/dist/types/squads.d.ts.map +0 -1
  267. package/node_modules/@io/shared/dist/types/squads.js +0 -2
  268. package/node_modules/@io/shared/dist/types/squads.js.map +0 -1
  269. package/node_modules/@io/shared/dist/types/tokens.d.ts +0 -19
  270. package/node_modules/@io/shared/dist/types/tokens.d.ts.map +0 -1
  271. package/node_modules/@io/shared/dist/types/tokens.js +0 -2
  272. package/node_modules/@io/shared/dist/types/tokens.js.map +0 -1
  273. package/node_modules/@io/shared/package.json +0 -18
  274. package/node_modules/@io/shared/src/config.ts +0 -85
  275. package/node_modules/@io/shared/src/constants.ts +0 -54
  276. package/node_modules/@io/shared/src/index.ts +0 -46
  277. package/node_modules/@io/shared/src/types/agents.ts +0 -3
  278. package/node_modules/@io/shared/src/types/api.ts +0 -35
  279. package/node_modules/@io/shared/src/types/attachments.ts +0 -9
  280. package/node_modules/@io/shared/src/types/events.ts +0 -86
  281. package/node_modules/@io/shared/src/types/history.ts +0 -37
  282. package/node_modules/@io/shared/src/types/messages.ts +0 -15
  283. package/node_modules/@io/shared/src/types/squads.ts +0 -56
  284. package/node_modules/@io/shared/src/types/tokens.ts +0 -19
  285. package/node_modules/@io/shared/tsconfig.json +0 -9
  286. package/node_modules/@io/shared/tsconfig.tsbuildinfo +0 -1
  287. package/public/assets/index-BywBQCtu.js +0 -510
  288. package/public/assets/index-BywBQCtu.js.map +0 -1
  289. /package/{public → dist/web}/assets/index-B6F0UZkW.css +0 -0
@@ -1,57 +0,0 @@
1
- export interface ProposedMember {
2
- role: string;
3
- title: string;
4
- justification: string;
5
- isCore: boolean;
6
- veto: boolean;
7
- displayName?: string;
8
- persona?: string;
9
- }
10
- export interface SquadProposal {
11
- id: string;
12
- repoUrl: string;
13
- projectPath: string;
14
- projectName: string;
15
- universe: string;
16
- members: ProposedMember[];
17
- createdAt: number;
18
- }
19
- export declare function getProposal(id: string): SquadProposal | undefined;
20
- export declare function getProposalByRepo(repoUrl: string): SquadProposal | undefined;
21
- export declare function deleteProposal(id: string): void;
22
- /**
23
- * Propose a squad: clone, analyze, generate names, store proposal for review.
24
- */
25
- export declare function proposeSquad(params: {
26
- projectPath: string;
27
- repoUrl?: string;
28
- name?: string;
29
- universe?: string;
30
- }): Promise<SquadProposal>;
31
- /**
32
- * Confirm a squad proposal and create the actual squad.
33
- */
34
- export declare function confirmSquad(params: {
35
- proposalId: string;
36
- name?: string;
37
- removedRoles?: string[];
38
- }): Promise<{
39
- squadId: string;
40
- members: string[];
41
- universe: string;
42
- }>;
43
- /**
44
- * Add a new member to an existing squad.
45
- * Generates a skill file and optionally themes the name to the squad's universe.
46
- */
47
- export declare function addMemberToExistingSquad(params: {
48
- squadId: string;
49
- squadName: string;
50
- role: string;
51
- projectPath: string;
52
- universe?: string;
53
- }): Promise<{
54
- displayName: string;
55
- role: string;
56
- }>;
57
- //# sourceMappingURL=hiring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hiring.d.ts","sourceRoot":"","sources":["../../src/squad/hiring.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAK5E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE/C;AAsLD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAC1C,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,aAAa,CAAC,CAqGzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDpE;AAID;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCjD"}
@@ -1,588 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { basename, join } from 'node:path';
4
- import { getClient } from '../copilot/client.js';
5
- import { createChildLogger } from '../logging/logger.js';
6
- import { ensureSquadWiki } from '../wiki/index.js';
7
- import { addMember, createSquad } from './manager.js';
8
- import { generateSquadNames } from './name-generator.js';
9
- import { QA_TESTER_SKILL, SCRIBE_SKILL, TECHNICAL_PM_SKILL } from './roles/templates.js';
10
- import { parseSkillContent } from './skill-parser.js';
11
- const logger = () => createChildLogger('hiring');
12
- const proposals = new Map();
13
- export function getProposal(id) {
14
- return proposals.get(id);
15
- }
16
- export function getProposalByRepo(repoUrl) {
17
- for (const proposal of proposals.values()) {
18
- if (proposal.repoUrl === repoUrl)
19
- return proposal;
20
- }
21
- return undefined;
22
- }
23
- export function deleteProposal(id) {
24
- proposals.delete(id);
25
- }
26
- // ─── LLM Codebase Analyzer ─────────────────────────────────────────────────
27
- const ANALYZER_PROMPT = `You are a senior engineering hiring manager. Given a codebase summary, recommend the specialist roles needed for a high-performing engineering squad.
28
-
29
- Rules:
30
- - Roles must be SENIOR or PRINCIPAL level — no junior, mid-level, or generic titles
31
- - Roles must be SPECIFIC to the technology stack (e.g., "Senior React/Vite Engineer", not "Frontend Developer")
32
- - Recommend 2-5 specialist roles depending on project complexity
33
- - Consider: languages, frameworks, architecture patterns, testing needs, deployment complexity
34
- - Include a justification for each role explaining WHY the project needs that specific specialist
35
- - Decide whether QA and Testing should be separate roles based on project size/complexity. For small projects, one QA/Test Engineer suffices. For large projects with multiple test layers (unit, integration, e2e, performance), recommend separate QA Engineer and Tester.
36
- - Return ONLY valid JSON, no markdown fencing
37
-
38
- Respond with this exact JSON structure:
39
- {
40
- "specialists": [
41
- { "role": "<kebab-case-role-id>", "title": "<Senior/Principal Level Title>", "justification": "<why this project needs this role>" }
42
- ],
43
- "separateQaAndTester": true/false,
44
- "qaJustification": "<why QA and Tester should or should not be separate>"
45
- }`;
46
- /**
47
- * Sample key files from the project to build a codebase summary for the LLM.
48
- */
49
- function sampleCodebase(projectPath) {
50
- const name = basename(projectPath);
51
- const files = safeReadDir(projectPath);
52
- const readmeFile = files.find((f) => f.toLowerCase().startsWith('readme'));
53
- const readme = readmeFile ? safeReadFile(join(projectPath, readmeFile), 4000) : '';
54
- const manifests = collectManifests(projectPath, files);
55
- const configFiles = detectConfigFiles(files);
56
- const directoryTree = buildDirectoryTree(projectPath, 2, 60);
57
- const ciFiles = collectCiFiles(projectPath);
58
- return { name, readme, manifests, configFiles, directoryTree, ciFiles };
59
- }
60
- const MANIFEST_FILES = [
61
- 'package.json',
62
- 'Cargo.toml',
63
- 'go.mod',
64
- 'pyproject.toml',
65
- 'requirements.txt',
66
- 'Gemfile',
67
- 'pom.xml',
68
- 'build.gradle',
69
- ];
70
- function collectManifests(projectPath, files) {
71
- const manifests = {};
72
- for (const mf of MANIFEST_FILES) {
73
- if (files.includes(mf)) {
74
- manifests[mf] = safeReadFile(join(projectPath, mf), 2000);
75
- }
76
- }
77
- // Check for workspace/monorepo manifests
78
- for (const sub of ['packages', 'apps', 'libs']) {
79
- const subPath = join(projectPath, sub);
80
- if (!existsSync(subPath))
81
- continue;
82
- const subContents = safeReadDir(subPath);
83
- for (const pkg of subContents.slice(0, 8)) {
84
- const pkgManifest = join(subPath, pkg, 'package.json');
85
- if (existsSync(pkgManifest)) {
86
- manifests[`${sub}/${pkg}/package.json`] = safeReadFile(pkgManifest, 1000);
87
- }
88
- }
89
- }
90
- return manifests;
91
- }
92
- const CONFIG_PATTERNS = [
93
- 'tsconfig.json',
94
- 'vite.config',
95
- 'webpack.config',
96
- 'next.config',
97
- 'tailwind.config',
98
- 'docker-compose',
99
- 'Dockerfile',
100
- '.env.example',
101
- 'biome.json',
102
- 'eslint',
103
- ];
104
- function detectConfigFiles(files) {
105
- return files.filter((f) => CONFIG_PATTERNS.some((p) => f.toLowerCase().includes(p.toLowerCase())));
106
- }
107
- function collectCiFiles(projectPath) {
108
- const ciFiles = [];
109
- const ghWorkflows = join(projectPath, '.github', 'workflows');
110
- if (existsSync(ghWorkflows)) {
111
- const workflows = safeReadDir(ghWorkflows);
112
- for (const wf of workflows.slice(0, 3)) {
113
- ciFiles.push(safeReadFile(join(ghWorkflows, wf), 1000));
114
- }
115
- }
116
- return ciFiles;
117
- }
118
- /**
119
- * Use the LLM to analyze a codebase and recommend specialist roles.
120
- */
121
- async function analyzeCodebase(projectPath) {
122
- const log = logger();
123
- const summary = sampleCodebase(projectPath);
124
- const userMessage = `Here is a summary of the "${summary.name}" project:
125
-
126
- ## README (truncated)
127
- ${summary.readme || '(no README found)'}
128
-
129
- ## Package Manifests
130
- ${Object.entries(summary.manifests)
131
- .map(([f, content]) => `### ${f}\n\`\`\`\n${content}\n\`\`\``)
132
- .join('\n\n')}
133
-
134
- ## Config Files Present
135
- ${summary.configFiles.join(', ') || '(none detected)'}
136
-
137
- ## Directory Structure
138
- \`\`\`
139
- ${summary.directoryTree}
140
- \`\`\`
141
-
142
- ## CI/CD Workflows
143
- ${summary.ciFiles.length > 0 ? summary.ciFiles.map((c) => `\`\`\`yaml\n${c}\n\`\`\``).join('\n') : '(none found)'}
144
-
145
- Based on this codebase, what senior/principal-level specialist roles does this project need?`;
146
- try {
147
- const client = await getClient();
148
- const session = await client.createSession({
149
- systemMessage: { mode: 'replace', content: ANALYZER_PROMPT },
150
- });
151
- const result = await session.sendAndWait({ prompt: userMessage }, 90_000);
152
- const accumulated = result?.data?.content ?? '';
153
- const parsed = extractJson(accumulated);
154
- if (!parsed || !Array.isArray(parsed.specialists)) {
155
- throw new Error('Invalid LLM response for codebase analysis');
156
- }
157
- log.info({
158
- project: summary.name,
159
- specialists: parsed.specialists.map((s) => s.title),
160
- separateQa: parsed.separateQaAndTester,
161
- }, 'Codebase analyzed');
162
- return {
163
- specialists: parsed.specialists,
164
- separateQaAndTester: !!parsed.separateQaAndTester,
165
- };
166
- }
167
- catch (err) {
168
- log.error({ err }, 'LLM codebase analysis failed, using fallback heuristics');
169
- return fallbackAnalysis(projectPath);
170
- }
171
- }
172
- // ─── Propose / Confirm Flow ────────────────────────────────────────────────
173
- /**
174
- * Propose a squad: clone, analyze, generate names, store proposal for review.
175
- */
176
- export async function proposeSquad(params) {
177
- const log = logger();
178
- const projectName = params.name ?? basename(params.projectPath);
179
- // 1. Analyze with LLM
180
- const analysis = await analyzeCodebase(params.projectPath);
181
- // 2. Build member list — core roles + specialists
182
- const members = [
183
- {
184
- role: 'technical-pm',
185
- title: 'Technical PM',
186
- justification: 'Coordinates the team, makes architectural decisions, reviews all work',
187
- isCore: true,
188
- veto: true,
189
- },
190
- {
191
- role: 'scribe',
192
- title: 'Scribe',
193
- justification: 'Records decisions, maintains documentation, writes PR descriptions',
194
- isCore: true,
195
- veto: false,
196
- },
197
- ];
198
- if (analysis.separateQaAndTester) {
199
- members.push({
200
- role: 'qa-engineer',
201
- title: 'QA Engineer',
202
- justification: 'Quality gate — reviews code for edge cases, security issues, and test coverage',
203
- isCore: true,
204
- veto: true,
205
- });
206
- members.push({
207
- role: 'tester',
208
- title: 'Tester',
209
- justification: 'Functional/integration testing, CI/CD pipeline verification, test automation',
210
- isCore: true,
211
- veto: false,
212
- });
213
- }
214
- else {
215
- members.push({
216
- role: 'qa-tester',
217
- title: 'QA/Test Engineer',
218
- justification: 'Quality gate — writes tests, reviews for edge cases, blocks bad merges',
219
- isCore: true,
220
- veto: true,
221
- });
222
- }
223
- for (const spec of analysis.specialists) {
224
- members.push({
225
- role: spec.role,
226
- title: spec.title,
227
- justification: spec.justification,
228
- isCore: false,
229
- veto: false,
230
- });
231
- }
232
- // 3. Generate character names
233
- const allRoles = members.map((m) => m.title);
234
- const generated = await generateSquadNames(allRoles, params.universe);
235
- // Assign names to members
236
- for (const member of members) {
237
- const assignment = generated.assignments.find((a) => a.role.toLowerCase() === member.title.toLowerCase());
238
- if (assignment) {
239
- member.displayName = assignment.displayName;
240
- member.persona = assignment.persona;
241
- }
242
- }
243
- // 4. Store proposal
244
- const proposalId = crypto.randomUUID();
245
- const resolvedUniverse = params.universe ?? generated.universe;
246
- const proposal = {
247
- id: proposalId,
248
- repoUrl: params.repoUrl ?? '',
249
- projectPath: params.projectPath,
250
- projectName,
251
- universe: resolvedUniverse,
252
- members,
253
- createdAt: Date.now(),
254
- };
255
- proposals.set(proposalId, proposal);
256
- log.info({
257
- proposalId,
258
- projectName,
259
- universe: resolvedUniverse,
260
- memberCount: members.length,
261
- }, 'Squad proposal created');
262
- return proposal;
263
- }
264
- /**
265
- * Confirm a squad proposal and create the actual squad.
266
- */
267
- export async function confirmSquad(params) {
268
- const log = logger();
269
- const proposal = proposals.get(params.proposalId);
270
- if (!proposal) {
271
- throw new Error(`Proposal '${params.proposalId}' not found or has expired.`);
272
- }
273
- const squadName = params.name ?? proposal.projectName;
274
- const removedSet = new Set(params.removedRoles?.map((r) => r.toLowerCase()) ?? []);
275
- const finalMembers = proposal.members.filter((m) => !removedSet.has(m.role.toLowerCase()));
276
- // 1. Create skill files directory
277
- const skillsDir = join(homedir(), '.io', 'squads', squadName);
278
- mkdirSync(skillsDir, { recursive: true });
279
- // 2. Create the squad
280
- const squad = await createSquad({
281
- name: squadName,
282
- projectPath: proposal.projectPath,
283
- repoUrl: proposal.repoUrl || undefined,
284
- universe: proposal.universe,
285
- });
286
- // 3. Create wiki
287
- ensureSquadWiki(squadName);
288
- // 4. Write skill files and add members
289
- const memberRoles = [];
290
- for (const member of finalMembers) {
291
- const skillContent = generateSkillForMember(member, proposal.projectPath);
292
- const filePath = join(skillsDir, `${member.role}.skill.md`);
293
- writeFileSync(filePath, skillContent, 'utf-8');
294
- const skill = parseSkillContent(skillContent, filePath);
295
- await addMember({
296
- squadId: squad.id,
297
- skill,
298
- displayName: member.displayName ?? member.title,
299
- persona: member.persona,
300
- isVetoMember: member.veto,
301
- });
302
- memberRoles.push(`${member.displayName ?? member.title} (${member.title})`);
303
- }
304
- // 5. Clean up proposal
305
- proposals.delete(params.proposalId);
306
- log.info({ squadId: squad.id, members: memberRoles, universe: proposal.universe }, 'Squad confirmed and created');
307
- return { squadId: squad.id, members: memberRoles, universe: proposal.universe };
308
- }
309
- // ─── Legacy API (kept for addMemberToExistingSquad) ─────────────────────────
310
- /**
311
- * Add a new member to an existing squad.
312
- * Generates a skill file and optionally themes the name to the squad's universe.
313
- */
314
- export async function addMemberToExistingSquad(params) {
315
- const log = logger();
316
- const member = {
317
- role: params.role,
318
- title: titleCase(params.role),
319
- justification: '',
320
- isCore: false,
321
- veto: params.role.includes('qa'),
322
- };
323
- const skillContent = generateSkillForMember(member, params.projectPath);
324
- const skillsDir = join(homedir(), '.io', 'squads', params.squadName);
325
- mkdirSync(skillsDir, { recursive: true });
326
- const filePath = join(skillsDir, `${params.role}.skill.md`);
327
- writeFileSync(filePath, skillContent, 'utf-8');
328
- const skill = parseSkillContent(skillContent, filePath);
329
- // Generate themed name if universe is set
330
- let displayName = member.title;
331
- let persona;
332
- if (params.universe) {
333
- const generated = await generateSquadNames([params.role], params.universe);
334
- const assignment = generated.assignments[0];
335
- if (assignment) {
336
- displayName = assignment.displayName;
337
- persona = assignment.persona;
338
- }
339
- }
340
- await addMember({
341
- squadId: params.squadId,
342
- skill,
343
- displayName,
344
- persona,
345
- isVetoMember: member.veto,
346
- });
347
- log.info({ squadId: params.squadId, role: params.role, displayName }, 'Member added to squad');
348
- return { displayName, role: params.role };
349
- }
350
- // ─── Skill Generation ───────────────────────────────────────────────────────
351
- function generateSkillForMember(member, projectPath) {
352
- // Core roles use built-in templates
353
- if (member.role === 'technical-pm')
354
- return TECHNICAL_PM_SKILL;
355
- if (member.role === 'scribe')
356
- return SCRIBE_SKILL;
357
- if (member.role === 'qa-tester' || member.role === 'qa-engineer')
358
- return QA_TESTER_SKILL;
359
- // Tester role (separate from QA)
360
- if (member.role === 'tester') {
361
- return generateTesterSkill();
362
- }
363
- // Specialist roles get generated skills
364
- return generateSpecialistSkill(member, projectPath);
365
- }
366
- function generateTesterSkill() {
367
- return `---
368
- role: tester
369
- tools:
370
- - read_file
371
- - edit_file
372
- - run_command
373
- - search_code
374
- veto: false
375
- ---
376
-
377
- # Tester
378
-
379
- ## Identity
380
- You are the Tester — responsible for functional testing, integration testing, and CI/CD pipeline health.
381
-
382
- ## Responsibilities
383
- - Write and maintain integration and end-to-end tests
384
- - Verify feature implementations against acceptance criteria
385
- - Run test suites and report failures with clear reproduction steps
386
- - Monitor CI/CD pipeline health and investigate flaky tests
387
- - Set up test infrastructure (fixtures, mocks, test databases)
388
-
389
- ## Boundaries
390
- - You focus on test code and test infrastructure
391
- - You do NOT write production features
392
- - You work alongside the QA Engineer but focus on automation over manual review
393
- - You ensure CI stays green before any merge
394
-
395
- ## Standards
396
- - All new features must have integration tests
397
- - Flaky tests must be identified and either fixed or quarantined
398
- - Test runs must be reproducible and fast
399
- - CI/CD pipeline failures are your top priority
400
- `;
401
- }
402
- function generateSpecialistSkill(member, projectPath) {
403
- const summary = sampleCodebase(projectPath);
404
- const langContext = Object.keys(summary.manifests)
405
- .map((f) => {
406
- if (f.includes('package.json'))
407
- return 'TypeScript/JavaScript';
408
- if (f.includes('Cargo.toml'))
409
- return 'Rust';
410
- if (f.includes('go.mod'))
411
- return 'Go';
412
- if (f.includes('pyproject.toml') || f.includes('requirements.txt'))
413
- return 'Python';
414
- return null;
415
- })
416
- .filter(Boolean)
417
- .join(', ');
418
- return `---
419
- role: ${member.role}
420
- tools:
421
- - read_file
422
- - edit_file
423
- - run_command
424
- - search_code
425
- veto: false
426
- ---
427
-
428
- # ${member.title}
429
-
430
- ## Identity
431
- You are a ${member.title} — a senior/principal-level specialist.
432
- ${member.justification ? `Hired because: ${member.justification}` : ''}
433
-
434
- ## Responsibilities
435
- - Implement features and fix bugs within your area of expertise
436
- - Write clean, well-tested code following project conventions
437
- - Provide expert-level guidance on your specialty area during team discussions
438
- - Run tests before submitting work for review
439
- - Mentor other team members on best practices in your domain
440
-
441
- ## Boundaries
442
- - Only work on tasks assigned to you by the Technical PM
443
- - Do NOT modify files outside your area of expertise unless directed
444
- - Do NOT merge PRs — submit work for Technical PM review
445
- - Always run the test suite before reporting task completion
446
-
447
- ## Project Context
448
- ${langContext ? `Languages: ${langContext}` : ''}
449
- `;
450
- }
451
- // ─── Helpers ────────────────────────────────────────────────────────────────
452
- function safeReadDir(dir) {
453
- try {
454
- if (!existsSync(dir))
455
- return [];
456
- return readdirSync(dir);
457
- }
458
- catch {
459
- return [];
460
- }
461
- }
462
- function safeReadFile(path, maxLength) {
463
- try {
464
- if (!existsSync(path))
465
- return '';
466
- const content = readFileSync(path, 'utf-8');
467
- return content.length > maxLength ? `${content.slice(0, maxLength)}\n...(truncated)` : content;
468
- }
469
- catch {
470
- return '';
471
- }
472
- }
473
- function buildDirectoryTree(rootPath, maxDepth, maxEntries) {
474
- const lines = [];
475
- function walk(dir, prefix, depth) {
476
- if (depth > maxDepth || lines.length >= maxEntries)
477
- return;
478
- const entries = safeReadDir(dir).filter((e) => !e.startsWith('.') && e !== 'node_modules' && e !== 'dist' && e !== 'target');
479
- for (const entry of entries.slice(0, 20)) {
480
- if (lines.length >= maxEntries) {
481
- lines.push(`${prefix}... (truncated)`);
482
- return;
483
- }
484
- lines.push(`${prefix}${entry}`);
485
- const fullPath = join(dir, entry);
486
- try {
487
- const stat = statSync(fullPath);
488
- if (stat.isDirectory()) {
489
- walk(fullPath, `${prefix} `, depth + 1);
490
- }
491
- }
492
- catch {
493
- // skip
494
- }
495
- }
496
- }
497
- walk(rootPath, '', 0);
498
- return lines.join('\n');
499
- }
500
- function extractJson(text) {
501
- try {
502
- return JSON.parse(text.trim());
503
- }
504
- catch {
505
- const match = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
506
- if (match) {
507
- try {
508
- return JSON.parse(match[1].trim());
509
- }
510
- catch {
511
- return null;
512
- }
513
- }
514
- const braceMatch = text.match(/\{[\s\S]*\}/);
515
- if (braceMatch) {
516
- try {
517
- return JSON.parse(braceMatch[0]);
518
- }
519
- catch {
520
- return null;
521
- }
522
- }
523
- return null;
524
- }
525
- }
526
- function fallbackAnalysis(projectPath) {
527
- const files = safeReadDir(projectPath);
528
- const specialists = [];
529
- if (files.includes('package.json')) {
530
- const pkg = safeReadJson(join(projectPath, 'package.json'));
531
- if (pkg) {
532
- const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
533
- if (deps.react) {
534
- specialists.push({
535
- role: 'senior-react-engineer',
536
- title: 'Senior React Engineer',
537
- justification: 'Project uses React for frontend',
538
- });
539
- }
540
- if (deps.express || deps.fastify || deps.koa) {
541
- specialists.push({
542
- role: 'senior-node-backend-engineer',
543
- title: 'Senior Node.js Backend Engineer',
544
- justification: 'Project has Node.js backend',
545
- });
546
- }
547
- }
548
- }
549
- if (files.includes('Cargo.toml')) {
550
- specialists.push({
551
- role: 'senior-rust-engineer',
552
- title: 'Senior Rust Engineer',
553
- justification: 'Project uses Rust',
554
- });
555
- }
556
- if (files.includes('go.mod')) {
557
- specialists.push({
558
- role: 'senior-go-engineer',
559
- title: 'Senior Go Engineer',
560
- justification: 'Project uses Go',
561
- });
562
- }
563
- if (specialists.length === 0) {
564
- specialists.push({
565
- role: 'senior-software-engineer',
566
- title: 'Senior Software Engineer',
567
- justification: 'General development work',
568
- });
569
- }
570
- return { specialists, separateQaAndTester: false };
571
- }
572
- function safeReadJson(path) {
573
- try {
574
- if (!existsSync(path))
575
- return null;
576
- return JSON.parse(readFileSync(path, 'utf-8'));
577
- }
578
- catch {
579
- return null;
580
- }
581
- }
582
- function titleCase(str) {
583
- return str
584
- .split('-')
585
- .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
586
- .join(' ');
587
- }
588
- //# sourceMappingURL=hiring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hiring.js","sourceRoot":"","sources":["../../src/squad/hiring.ts"],"names":[],"mappings":"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"}