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 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAkB,eAAe,EAAE,MAAM,IAAI,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,qDAAqD;AACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE/C,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,wDAAwD;IACxD,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,SAAS;IACT,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,IAI7C,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACvD,OAAO;QACR,CAAC;QAED,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElE,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAE,IAAa,EAAE,EAAE;YACtD,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;gBACrC,EAAE,CAAC,IAAI,CACN,IAAI,CAAC,SAAS,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;oBAChC,OAAO,EAAE,WAAW;iBACpB,CAAC,CACF,CAAC;YACH,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;YACtE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,uDAAuD;QACvD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEjC,iCAAiC;IACjC,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAChC,uDAAuD;QACvD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC/B,OAAO;QACR,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAChC,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE,4BAA4B,CAAC,CAAC;QAE5D,uCAAuC;QACvC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAE7D,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAIxC,CAAC;gBAEF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAI,MAAM,CAAC,MAAqC,IAAI,KAAK,CAAC;oBAEtE,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAE,IAAa,EAAE,EAAE;wBACtD,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;4BAC/B,EAAE,CAAC,IAAI,CACN,IAAI,CAAC,SAAS,CAAC;gCACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gCAChC,OAAO,EAAE,WAAW;6BACpB,CAAC,CACF,CAAC;wBACH,CAAC;oBACF,CAAC,CAAC;oBAEF,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBAC1D,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;wBAC5D,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;4BAC/B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC;wBAClF,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/B,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,KAAK,CAAC,KAAK;YACV,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;oBAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;oBAC9D,OAAO,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI;YACT,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5C,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;oBACrC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACZ,CAAC;gBACD,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACpB,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBAChB,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { loadConfig } from '@io/shared';
2
+ export type { IOConfig } from '@io/shared';
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
package/dist/config.js CHANGED
@@ -1,92 +1,3 @@
1
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
2
- import { dirname } from "node:path";
3
- import { z } from "zod";
4
- import { PATHS } from "./paths.js";
5
- const ModelPriceSchema = z.object({
6
- inputPer1M: z.number(),
7
- outputPer1M: z.number(),
8
- });
9
- const ConfigSchema = z.object({
10
- telegramBotToken: z.string().optional(),
11
- authorizedUserId: z.number().optional(),
12
- telegramEnabled: z.boolean().default(false),
13
- selfEditEnabled: z.boolean().default(false),
14
- defaultModel: z.string().default("gpt-4.1"),
15
- port: z.number().default(3170),
16
- supabaseUrl: z.string().optional(),
17
- supabaseAnonKey: z.string().optional(),
18
- authorizedEmail: z.string().optional(),
19
- githubToken: z.string().optional(),
20
- backgroundNotifyMode: z
21
- .enum(["all", "meaningful", "off"])
22
- .default("meaningful"),
23
- backgroundNotifyTelegram: z.boolean().default(true),
24
- watchdogEnabled: z.boolean().default(true),
25
- modelPricing: z.record(z.string(), ModelPriceSchema).optional(),
26
- tokenAlertThreshold: z.number().optional(),
27
- });
28
- let cachedConfig;
29
- let configWarning;
30
- /** Returns a warning message if config fell back to defaults on last load. */
31
- export function getConfigWarning() {
32
- return configWarning;
33
- }
34
- export function loadConfig() {
35
- if (cachedConfig)
36
- return cachedConfig;
37
- if (!existsSync(PATHS.config)) {
38
- configWarning = `Config file not found at ${PATHS.config} — using defaults. Run "io setup" or create the file manually.`;
39
- console.warn(`[io] ⚠️ ${configWarning}`);
40
- const defaults = ConfigSchema.parse({});
41
- cachedConfig = defaults;
42
- return defaults;
43
- }
44
- let raw;
45
- try {
46
- raw = JSON.parse(readFileSync(PATHS.config, "utf-8"));
47
- }
48
- catch (err) {
49
- configWarning = `Config file at ${PATHS.config} is corrupted or unreadable — using defaults. Please restore your config.`;
50
- console.warn(`[io] ⚠️ ${configWarning}`);
51
- const defaults = ConfigSchema.parse({});
52
- cachedConfig = defaults;
53
- return defaults;
54
- }
55
- // Migrate old apiPort field
56
- if ("apiPort" in raw && !("port" in raw)) {
57
- raw.port = raw.apiPort;
58
- delete raw.apiPort;
59
- saveConfig(raw);
60
- }
61
- configWarning = undefined;
62
- cachedConfig = ConfigSchema.parse(raw);
63
- return cachedConfig;
64
- }
65
- export function saveConfig(config) {
66
- const dir = dirname(PATHS.config);
67
- if (!existsSync(dir))
68
- mkdirSync(dir, { recursive: true });
69
- let current = {};
70
- if (existsSync(PATHS.config)) {
71
- try {
72
- current = JSON.parse(readFileSync(PATHS.config, "utf-8"));
73
- }
74
- catch {
75
- // If file is corrupted, use cached config as baseline to avoid data loss
76
- if (cachedConfig) {
77
- current = JSON.parse(JSON.stringify(cachedConfig));
78
- }
79
- }
80
- }
81
- else if (cachedConfig) {
82
- // File doesn't exist but we have a cached config (from earlier load) — use it as baseline
83
- current = JSON.parse(JSON.stringify(cachedConfig));
84
- }
85
- const merged = { ...current, ...config };
86
- writeFileSync(PATHS.config, JSON.stringify(merged, null, 2) + "\n");
87
- cachedConfig = ConfigSchema.parse(merged);
88
- }
89
- export function resetConfigCache() {
90
- cachedConfig = undefined;
91
- }
1
+ // Re-export shared config loader
2
+ export { loadConfig } from '@io/shared';
92
3
  //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { CopilotClient } from '@github/copilot-sdk';
2
+ export declare function getClient(): Promise<CopilotClient>;
3
+ export declare function resetClient(): Promise<void>;
4
+ export declare function stopClient(): Promise<void>;
5
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/copilot/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAcpD,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAOxD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAUjD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD"}
@@ -1,30 +1,38 @@
1
- import { CopilotClient } from "@github/copilot-sdk";
2
- import { getGhToken } from "./gh-token.js";
1
+ import { CopilotClient } from '@github/copilot-sdk';
2
+ import { createChildLogger } from '../logging/logger.js';
3
3
  let client;
4
- export function getCopilotClientOptions() {
5
- const githubToken = getGhToken();
6
- return githubToken ? { githubToken } : {};
4
+ let logger;
5
+ function getLogger() {
6
+ if (!logger) {
7
+ logger = createChildLogger('copilot-client');
8
+ }
9
+ return logger;
7
10
  }
8
11
  export async function getClient() {
9
12
  if (!client) {
10
- client = new CopilotClient(getCopilotClientOptions());
13
+ client = new CopilotClient();
11
14
  await client.start();
15
+ getLogger().info('Copilot client started');
12
16
  }
13
17
  return client;
14
18
  }
15
19
  export async function resetClient() {
16
20
  if (client) {
21
+ getLogger().warn('Resetting Copilot client');
17
22
  try {
18
23
  await client.stop();
19
24
  }
20
- catch {
21
- // ignore stop errors during reset
25
+ catch (err) {
26
+ getLogger().error({ err }, 'Error stopping client during reset');
22
27
  }
23
28
  client = undefined;
24
29
  }
25
- return getClient();
26
30
  }
27
- export function getClientInstance() {
28
- return client;
31
+ export async function stopClient() {
32
+ if (client) {
33
+ await client.stop();
34
+ client = undefined;
35
+ getLogger().info('Copilot client stopped');
36
+ }
29
37
  }
30
38
  //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/copilot/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,IAAI,MAAiC,CAAC;AACtC,IAAI,MAAc,CAAC;AAEnB,SAAS,SAAS;IACjB,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,SAAS,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAChC,IAAI,MAAM,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7C,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,GAAG,SAAS,CAAC;IACpB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC/B,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,SAAS,CAAC;QACnB,SAAS,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;AACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface HealthStatus {
2
+ status: 'healthy' | 'degraded' | 'unhealthy';
3
+ uptime: number;
4
+ copilotConnected: boolean;
5
+ lastCheck: Date;
6
+ }
7
+ /**
8
+ * Start periodic health monitoring of the Copilot SDK connection.
9
+ * Attempts reconnect if connection is lost.
10
+ */
11
+ export declare function startHealthMonitor(intervalMs?: number): void;
12
+ export declare function stopHealthMonitor(): void;
13
+ export declare function getHealthStatus(): HealthStatus;
14
+ //# sourceMappingURL=health-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.d.ts","sourceRoot":"","sources":["../../src/copilot/health-monitor.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;CAChB;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,SAAS,GAAG,IAAI,CAS5D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
@@ -0,0 +1,70 @@
1
+ import { createChildLogger } from '../logging/logger.js';
2
+ import { getClient, resetClient } from './client.js';
3
+ const logger = () => createChildLogger('health-monitor');
4
+ let healthCheckInterval = null;
5
+ let startTime = Date.now();
6
+ let lastStatus = {
7
+ status: 'healthy',
8
+ uptime: 0,
9
+ copilotConnected: false,
10
+ lastCheck: new Date(),
11
+ };
12
+ /**
13
+ * Start periodic health monitoring of the Copilot SDK connection.
14
+ * Attempts reconnect if connection is lost.
15
+ */
16
+ export function startHealthMonitor(intervalMs = 30_000) {
17
+ startTime = Date.now();
18
+ healthCheckInterval = setInterval(async () => {
19
+ await checkHealth();
20
+ }, intervalMs);
21
+ // Initial check
22
+ checkHealth();
23
+ }
24
+ export function stopHealthMonitor() {
25
+ if (healthCheckInterval) {
26
+ clearInterval(healthCheckInterval);
27
+ healthCheckInterval = null;
28
+ }
29
+ }
30
+ export function getHealthStatus() {
31
+ return {
32
+ ...lastStatus,
33
+ uptime: Math.floor((Date.now() - startTime) / 1000),
34
+ };
35
+ }
36
+ async function checkHealth() {
37
+ const log = logger();
38
+ try {
39
+ // Verify we can get the client (it auto-starts if needed)
40
+ const client = await getClient();
41
+ lastStatus = {
42
+ status: 'healthy',
43
+ uptime: Math.floor((Date.now() - startTime) / 1000),
44
+ copilotConnected: true,
45
+ lastCheck: new Date(),
46
+ };
47
+ }
48
+ catch (err) {
49
+ log.warn({ err }, 'Health check failed — Copilot client unavailable');
50
+ lastStatus = {
51
+ status: 'unhealthy',
52
+ uptime: Math.floor((Date.now() - startTime) / 1000),
53
+ copilotConnected: false,
54
+ lastCheck: new Date(),
55
+ };
56
+ // Attempt reconnect
57
+ try {
58
+ log.info('Attempting Copilot client reconnect...');
59
+ await resetClient();
60
+ await getClient();
61
+ log.info('Copilot client reconnected successfully');
62
+ lastStatus.status = 'healthy';
63
+ lastStatus.copilotConnected = true;
64
+ }
65
+ catch (reconnectErr) {
66
+ log.error({ err: reconnectErr }, 'Reconnect failed');
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=health-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../src/copilot/health-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AAEzD,IAAI,mBAAmB,GAA0C,IAAI,CAAC;AACtE,IAAI,SAAS,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;AASnC,IAAI,UAAU,GAAiB;IAC9B,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,CAAC;IACT,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,IAAI,IAAI,EAAE;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAU,GAAG,MAAM;IACrD,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,mBAAmB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,MAAM,WAAW,EAAE,CAAC;IACrB,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,gBAAgB;IAChB,WAAW,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,IAAI,mBAAmB,EAAE,CAAC;QACzB,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnC,mBAAmB,GAAG,IAAI,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,OAAO;QACN,GAAG,UAAU;QACb,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;KACnD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACzB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,IAAI,CAAC;QACJ,0DAA0D;QAC1D,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,UAAU,GAAG;YACZ,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YACnD,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE;SACrB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,kDAAkD,CAAC,CAAC;QACtE,UAAU,GAAG;YACZ,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YACnD,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;SACrB,CAAC;QAEF,oBAAoB;QACpB,IAAI,CAAC;YACJ,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACnD,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM,SAAS,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;YAC9B,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACpC,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { IOConfig } from '../config.js';
2
+ export declare function initOrchestrator(config: IOConfig): Promise<void>;
3
+ export declare function sendMessage(prompt: string, source: 'tui' | 'telegram' | 'web', onDelta: (accumulated: string, done: boolean) => void): Promise<string>;
4
+ export declare function destroyOrchestrator(): Promise<void>;
5
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/copilot/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA6E7C,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCtE;AAED,wBAAgB,WAAW,CAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,EAClC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GACnD,OAAO,CAAC,MAAM,CAAC,CAKjB;AAmDD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGzD"}
@@ -1,55 +1,67 @@
1
- import { approveAll } from "@github/copilot-sdk";
2
- import { getDb } from "../store/db.js";
3
- import { loadConfig } from "../config.js";
4
- import { buildSystemMessage } from "./system-message.js";
5
- import { createTools } from "./tools.js";
6
- import { loadSkillDirectories } from "./skills.js";
7
- import { getMcpServersForSession } from "../mcp/registry.js";
8
- import { resetClient } from "./client.js";
9
- import { addAuditEntry } from "../store/audit-log.js";
10
- import { buildAttachmentSummary, buildAttachmentPathSummary, saveAttachmentsToDisk, toCopilotBlobAttachments, } from "../chat/attachments.js";
11
- import { attachTokenTracker } from "./token-tracker.js";
12
- let orchestratorSession;
13
- let sessionCreatePromise;
14
- let healthCheckInterval;
15
- let activeMessageAttachments = [];
1
+ import { approveAll } from '@github/copilot-sdk';
2
+ import { createChildLogger } from '../logging/logger.js';
3
+ import { getActiveSkillsContent } from '../skills/index.js';
4
+ import { listSquads } from '../squad/manager.js';
5
+ import { getDatabase } from '../store/db.js';
6
+ import { getOrchestratorScopes, getPageListing } from '../wiki/index.js';
7
+ import { getClient } from './client.js';
8
+ import { createOrchestratorTools } from './tools.js';
9
+ let logger;
10
+ let session;
11
+ let sessionId;
16
12
  const messageQueue = [];
17
13
  let processing = false;
18
- export async function initOrchestrator(client, opts) {
19
- await ensureOrchestratorSession(client, opts);
20
- startHealthCheck(client, opts);
21
- }
22
- async function ensureOrchestratorSession(client, opts) {
23
- if (orchestratorSession)
24
- return orchestratorSession;
25
- if (sessionCreatePromise)
26
- return sessionCreatePromise;
27
- sessionCreatePromise = createOrResumeSession(client, opts);
14
+ const SYSTEM_MESSAGE_BASE = `You are IO, an AI orchestrator daemon. You help users manage their software projects through intelligent conversation and by coordinating specialized agent squads.
15
+
16
+ ## Your Capabilities
17
+ - Answer general questions directly
18
+ - Manage squads: create, monitor, and coordinate teams of AI agents for specific projects
19
+ - Delegate project-specific work to the appropriate squad's team lead
20
+ - Track token usage and costs across all squads
21
+ - Manage the inbox: squads send you deliverables and questions that need user attention
22
+
23
+ ## Routing Rules
24
+ - If the user's message relates to a project that has an assigned squad, ALWAYS delegate to that squad using the delegate_to_squad tool
25
+ - If the user asks about squad status, use the appropriate squad tools
26
+ - For general questions unrelated to any squad's project, answer directly
27
+ - NEVER answer project-specific questions yourself if a squad exists for that project
28
+
29
+ ## Inbox Rules
30
+ - When a squad has a pending question, proactively tell the user about it
31
+ - Use list_inbox to check for unread items when the user asks about notifications or inbox
32
+ - When the user answers a squad's question, use respond_to_inbox to deliver their response and unblock the squad
33
+ - Summarize deliverables in a friendly, readable way when presenting them to the user
34
+ `;
35
+ /**
36
+ * Build the system message with current squad registry context.
37
+ */
38
+ async function buildSystemMessage() {
28
39
  try {
29
- orchestratorSession = await sessionCreatePromise;
30
- return orchestratorSession;
40
+ const squads = await listSquads();
41
+ const wikiListing = getPageListing(getOrchestratorScopes());
42
+ const skillsContent = await getActiveSkillsContent('orchestrator');
43
+ const wikiSection = `\n## Wiki Knowledge\n${wikiListing}\n\nUse read_wiki to access page content. Use write_wiki to record important knowledge.\n`;
44
+ if (squads.length === 0) {
45
+ return `${SYSTEM_MESSAGE_BASE}\n## Active Squads\n(No squads currently active)${wikiSection}${skillsContent}`;
46
+ }
47
+ const squadList = squads
48
+ .map((s) => `- **${s.name}**: project at \`${s.projectPath}\`${s.repoUrl ? ` (${s.repoUrl})` : ''} [autonomy: ${s.autonomyTier}]`)
49
+ .join('\n');
50
+ return `${SYSTEM_MESSAGE_BASE}\n## Active Squads\n${squadList}\n\nWhen a user's message mentions any of the above projects (by name, path, or related topic), delegate to the corresponding squad.${wikiSection}${skillsContent}`;
31
51
  }
32
- finally {
33
- sessionCreatePromise = undefined;
52
+ catch {
53
+ return `${SYSTEM_MESSAGE_BASE}\n## Active Squads\n(Unable to load squad registry)\n`;
34
54
  }
35
55
  }
36
- async function createOrResumeSession(client, opts) {
37
- const config = loadConfig();
38
- const db = getDb();
39
- const tools = createTools();
40
- const skillDirs = await loadSkillDirectories();
41
- const systemMessage = buildSystemMessage(opts.selfEdit);
42
- const savedId = db
43
- .prepare("SELECT value FROM session_state WHERE key = 'orchestrator_session_id'")
44
- .get();
45
- const sessionConfig = {
56
+ export async function initOrchestrator(config) {
57
+ logger = createChildLogger('orchestrator');
58
+ const client = await getClient();
59
+ const systemMessage = await buildSystemMessage();
60
+ const sessionOptions = {
46
61
  model: config.defaultModel,
47
62
  streaming: true,
48
- workingDirectory: process.cwd(),
49
- systemMessage: { content: systemMessage },
50
- tools,
51
- skillDirectories: skillDirs,
52
- mcpServers: getMcpServersForSession(),
63
+ tools: createOrchestratorTools(),
64
+ systemMessage: { mode: 'replace', content: systemMessage },
53
65
  onPermissionRequest: approveAll,
54
66
  infiniteSessions: {
55
67
  enabled: true,
@@ -57,112 +69,104 @@ async function createOrResumeSession(client, opts) {
57
69
  bufferExhaustionThreshold: 0.95,
58
70
  },
59
71
  };
60
- let session;
61
- if (savedId?.value) {
72
+ // Try to resume existing session
73
+ const savedSessionId = await getSavedSessionId();
74
+ if (savedSessionId) {
62
75
  try {
63
- session = await client.resumeSession(savedId.value, sessionConfig);
76
+ session = await client.resumeSession(savedSessionId, sessionOptions);
77
+ sessionId = savedSessionId;
78
+ logger.info({ sessionId }, 'Resumed orchestrator session');
79
+ return;
64
80
  }
65
- catch {
66
- session = await client.createSession(sessionConfig);
81
+ catch (err) {
82
+ logger.warn({ err, sessionId: savedSessionId }, 'Failed to resume session, creating new one');
67
83
  }
68
84
  }
69
- else {
70
- session = await client.createSession(sessionConfig);
71
- }
72
- // Persist session ID
73
- db.prepare("INSERT OR REPLACE INTO session_state (key, value) VALUES ('orchestrator_session_id', ?)").run(session.sessionId);
74
- return session;
75
- }
76
- function startHealthCheck(client, opts) {
77
- healthCheckInterval = setInterval(async () => {
78
- try {
79
- await client.ping();
80
- }
81
- catch {
82
- console.warn("[io] Health check failed, resetting client...");
83
- orchestratorSession = undefined;
84
- const newClient = await resetClient();
85
- await ensureOrchestratorSession(newClient, opts);
86
- }
87
- }, 30_000);
88
- healthCheckInterval.unref();
85
+ // Create new session
86
+ session = await client.createSession(sessionOptions);
87
+ sessionId = session.sessionId;
88
+ await saveSessionId(sessionId);
89
+ logger.info({ sessionId }, 'Created new orchestrator session');
89
90
  }
90
- export async function sendToOrchestrator(prompt, source, callback, attachments = []) {
91
- addAuditEntry("message_received", `Message from ${source}: ${prompt.slice(0, 200)}`, {
92
- source,
93
- prompt: prompt.slice(0, 1000),
94
- attachments: attachments.map((attachment) => ({
95
- name: attachment.name,
96
- mimeType: attachment.mimeType,
97
- size: attachment.size,
98
- })),
99
- });
100
- messageQueue.push({ prompt, source, callback, attachments });
101
- if (!processing)
91
+ export function sendMessage(prompt, source, onDelta) {
92
+ return new Promise((resolve, reject) => {
93
+ messageQueue.push({ prompt, source, onDelta, resolve, reject });
102
94
  processQueue();
95
+ });
103
96
  }
104
97
  async function processQueue() {
105
- if (processing)
98
+ if (processing || messageQueue.length === 0)
106
99
  return;
107
100
  processing = true;
108
101
  while (messageQueue.length > 0) {
109
102
  const msg = messageQueue.shift();
110
103
  try {
111
- await executeOnSession(msg);
104
+ const response = await processMessage(msg);
105
+ msg.resolve(response);
112
106
  }
113
107
  catch (err) {
114
- const errMsg = err instanceof Error ? err.message : "Unknown error";
115
- msg.callback(`Error: ${errMsg}`, true);
108
+ logger.error({ err }, 'Error processing message');
109
+ msg.reject(err);
116
110
  }
117
111
  }
118
112
  processing = false;
119
113
  }
120
- async function executeOnSession(msg) {
121
- if (!orchestratorSession) {
122
- msg.callback("Error: Orchestrator session not initialized.", true);
123
- return;
114
+ async function processMessage(msg) {
115
+ if (!session) {
116
+ throw new Error('Orchestrator session not initialized');
124
117
  }
125
- activeMessageAttachments = msg.attachments;
126
- const flushTokens = attachTokenTracker(orchestratorSession, {
127
- agentId: "orchestrator",
118
+ let accumulated = '';
119
+ // Subscribe to streaming deltas
120
+ const unsubDelta = session.on('assistant.message_delta', (event) => {
121
+ accumulated += event.data.deltaContent;
122
+ msg.onDelta(accumulated, false);
128
123
  });
129
124
  try {
130
- // Save attachments to disk so orchestrator/squads can access them via filesystem tools
131
- const savedAttachments = saveAttachmentsToDisk(msg.attachments);
132
- const pathSummary = buildAttachmentPathSummary(savedAttachments);
133
- const taggedPrompt = `[via ${msg.source}] ${msg.prompt}${pathSummary || buildAttachmentSummary(msg.attachments)}`;
134
- let accumulated = "";
135
- const unsubscribe = orchestratorSession.on("assistant.message_delta", (event) => {
136
- const delta = event.data?.deltaContent ?? "";
137
- accumulated += delta;
138
- msg.callback(accumulated, false);
139
- });
140
- try {
141
- const response = await orchestratorSession.sendAndWait({
142
- prompt: taggedPrompt,
143
- attachments: toCopilotBlobAttachments(msg.attachments),
144
- }, 7_200_000 // 2 hours — watchdog handles stale detection
145
- );
146
- const finalContent = response?.data?.content ?? accumulated;
147
- msg.callback(finalContent, true);
148
- }
149
- finally {
150
- activeMessageAttachments = [];
151
- unsubscribe();
152
- }
125
+ const result = await session.sendAndWait({ prompt: msg.prompt }, 600_000);
126
+ const finalContent = result?.data?.content || accumulated || '(No response)';
127
+ msg.onDelta(finalContent, true);
128
+ // Persist conversation (fire-and-forget)
129
+ persistConversation(msg.prompt, finalContent, msg.source);
130
+ return finalContent;
153
131
  }
154
132
  finally {
155
- flushTokens();
133
+ unsubDelta();
156
134
  }
157
135
  }
158
- export function feedAgentResult(taskId, agentName, result, callback) {
159
- const prompt = `[Agent task completed] @${agentName} finished task ${taskId}:\n\n${result}`;
160
- sendToOrchestrator(prompt, "background", callback);
136
+ export async function destroyOrchestrator() {
137
+ session = undefined;
138
+ sessionId = undefined;
161
139
  }
162
- export function getOrchestratorSession() {
163
- return orchestratorSession;
140
+ async function getSavedSessionId() {
141
+ try {
142
+ const db = getDatabase();
143
+ const result = await db.execute("SELECT value FROM io_state WHERE key = 'orchestrator_session_id'");
144
+ if (result.rows.length > 0) {
145
+ return result.rows[0].value;
146
+ }
147
+ return undefined;
148
+ }
149
+ catch {
150
+ return undefined;
151
+ }
152
+ }
153
+ async function saveSessionId(id) {
154
+ const db = getDatabase();
155
+ await db.execute({
156
+ sql: "INSERT OR REPLACE INTO io_state (key, value) VALUES ('orchestrator_session_id', ?)",
157
+ args: [id],
158
+ });
164
159
  }
165
- export function getActiveMessageAttachments() {
166
- return activeMessageAttachments;
160
+ function persistConversation(userMessage, assistantResponse, source) {
161
+ const db = getDatabase();
162
+ const now = new Date().toISOString();
163
+ db.execute({
164
+ sql: "INSERT INTO conversations (id, role, content, source, created_at) VALUES (?, 'user', ?, ?, ?)",
165
+ args: [crypto.randomUUID(), userMessage, source ?? null, now],
166
+ });
167
+ db.execute({
168
+ sql: "INSERT INTO conversations (id, role, content, source, created_at) VALUES (?, 'assistant', ?, ?, ?)",
169
+ args: [crypto.randomUUID(), assistantResponse, source ?? null, now],
170
+ });
167
171
  }
168
172
  //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/copilot/orchestrator.ts"],"names":[],"mappings":"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"}