agentrix 0.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 (402) hide show
  1. package/README.md +235 -0
  2. package/bin/agentrix.js +5 -0
  3. package/dist/api/auth.d.ts +10 -0
  4. package/dist/api/auth.d.ts.map +1 -0
  5. package/dist/api/auth.js +30 -0
  6. package/dist/api/auth.js.map +1 -0
  7. package/dist/api/automation.d.ts +52 -0
  8. package/dist/api/automation.d.ts.map +1 -0
  9. package/dist/api/automation.js +181 -0
  10. package/dist/api/automation.js.map +1 -0
  11. package/dist/api/base-handler.d.ts +62 -0
  12. package/dist/api/base-handler.d.ts.map +1 -0
  13. package/dist/api/base-handler.js +55 -0
  14. package/dist/api/base-handler.js.map +1 -0
  15. package/dist/api/config.d.ts +5 -0
  16. package/dist/api/config.d.ts.map +1 -0
  17. package/dist/api/config.js +14 -0
  18. package/dist/api/config.js.map +1 -0
  19. package/dist/api/create-plan.d.ts +8 -0
  20. package/dist/api/create-plan.d.ts.map +1 -0
  21. package/dist/api/create-plan.js +77 -0
  22. package/dist/api/create-plan.js.map +1 -0
  23. package/dist/api/git-status.d.ts +6 -0
  24. package/dist/api/git-status.d.ts.map +1 -0
  25. package/dist/api/git-status.js +57 -0
  26. package/dist/api/git-status.js.map +1 -0
  27. package/dist/api/plans.d.ts +6 -0
  28. package/dist/api/plans.d.ts.map +1 -0
  29. package/dist/api/plans.js +75 -0
  30. package/dist/api/plans.js.map +1 -0
  31. package/dist/api/repo-dashboard.d.ts +13 -0
  32. package/dist/api/repo-dashboard.d.ts.map +1 -0
  33. package/dist/api/repo-dashboard.js +47 -0
  34. package/dist/api/repo-dashboard.js.map +1 -0
  35. package/dist/api/repo-issue.d.ts +12 -0
  36. package/dist/api/repo-issue.d.ts.map +1 -0
  37. package/dist/api/repo-issue.js +47 -0
  38. package/dist/api/repo-issue.js.map +1 -0
  39. package/dist/api/repos.d.ts +9 -0
  40. package/dist/api/repos.d.ts.map +1 -0
  41. package/dist/api/repos.js +46 -0
  42. package/dist/api/repos.js.map +1 -0
  43. package/dist/api/sessions.d.ts +5 -0
  44. package/dist/api/sessions.d.ts.map +1 -0
  45. package/dist/api/sessions.js +19 -0
  46. package/dist/api/sessions.js.map +1 -0
  47. package/dist/api/tasks.d.ts +6 -0
  48. package/dist/api/tasks.d.ts.map +1 -0
  49. package/dist/api/tasks.js +22 -0
  50. package/dist/api/tasks.js.map +1 -0
  51. package/dist/api/terminal.d.ts +7 -0
  52. package/dist/api/terminal.d.ts.map +1 -0
  53. package/dist/api/terminal.js +16 -0
  54. package/dist/api/terminal.js.map +1 -0
  55. package/dist/api/worktrees.d.ts +7 -0
  56. package/dist/api/worktrees.d.ts.map +1 -0
  57. package/dist/api/worktrees.js +26 -0
  58. package/dist/api/worktrees.js.map +1 -0
  59. package/dist/cli/arg-parser.d.ts +3 -0
  60. package/dist/cli/arg-parser.d.ts.map +1 -0
  61. package/dist/cli/arg-parser.js +243 -0
  62. package/dist/cli/arg-parser.js.map +1 -0
  63. package/dist/cli/config-resolver.d.ts +29 -0
  64. package/dist/cli/config-resolver.d.ts.map +1 -0
  65. package/dist/cli/config-resolver.js +139 -0
  66. package/dist/cli/config-resolver.js.map +1 -0
  67. package/dist/cli/config.d.ts +5 -0
  68. package/dist/cli/config.d.ts.map +1 -0
  69. package/dist/cli/config.js +224 -0
  70. package/dist/cli/config.js.map +1 -0
  71. package/dist/cli/constants.d.ts +7 -0
  72. package/dist/cli/constants.d.ts.map +1 -0
  73. package/dist/cli/constants.js +15 -0
  74. package/dist/cli/constants.js.map +1 -0
  75. package/dist/cli/help.d.ts +3 -0
  76. package/dist/cli/help.d.ts.map +1 -0
  77. package/dist/cli/help.js +35 -0
  78. package/dist/cli/help.js.map +1 -0
  79. package/dist/cli/index.d.ts +23 -0
  80. package/dist/cli/index.d.ts.map +1 -0
  81. package/dist/cli/index.js +23 -0
  82. package/dist/cli/index.js.map +1 -0
  83. package/dist/cli/plans-command.d.ts +3 -0
  84. package/dist/cli/plans-command.d.ts.map +1 -0
  85. package/dist/cli/plans-command.js +151 -0
  86. package/dist/cli/plans-command.js.map +1 -0
  87. package/dist/cli/server-starter.d.ts +26 -0
  88. package/dist/cli/server-starter.d.ts.map +1 -0
  89. package/dist/cli/server-starter.js +72 -0
  90. package/dist/cli/server-starter.js.map +1 -0
  91. package/dist/cli/types.d.ts +46 -0
  92. package/dist/cli/types.d.ts.map +1 -0
  93. package/dist/cli/types.js +2 -0
  94. package/dist/cli/types.js.map +1 -0
  95. package/dist/cli/validation.d.ts +14 -0
  96. package/dist/cli/validation.d.ts.map +1 -0
  97. package/dist/cli/validation.js +99 -0
  98. package/dist/cli/validation.js.map +1 -0
  99. package/dist/cli.d.ts +5 -0
  100. package/dist/cli.d.ts.map +1 -0
  101. package/dist/cli.js +73 -0
  102. package/dist/cli.js.map +1 -0
  103. package/dist/config/agent-commands.d.ts +27 -0
  104. package/dist/config/agent-commands.d.ts.map +1 -0
  105. package/dist/config/agent-commands.js +56 -0
  106. package/dist/config/agent-commands.js.map +1 -0
  107. package/dist/config/constants.d.ts +35 -0
  108. package/dist/config/constants.d.ts.map +1 -0
  109. package/dist/config/constants.js +35 -0
  110. package/dist/config/constants.js.map +1 -0
  111. package/dist/config/developer-messages.d.ts +2 -0
  112. package/dist/config/developer-messages.d.ts.map +1 -0
  113. package/dist/config/developer-messages.js +43 -0
  114. package/dist/config/developer-messages.js.map +1 -0
  115. package/dist/core/agents.d.ts +23 -0
  116. package/dist/core/agents.d.ts.map +1 -0
  117. package/dist/core/agents.js +91 -0
  118. package/dist/core/agents.js.map +1 -0
  119. package/dist/core/auth.d.ts +3 -0
  120. package/dist/core/auth.d.ts.map +1 -0
  121. package/dist/core/auth.js +69 -0
  122. package/dist/core/auth.js.map +1 -0
  123. package/dist/core/automation/branch.d.ts +18 -0
  124. package/dist/core/automation/branch.d.ts.map +1 -0
  125. package/dist/core/automation/branch.js +29 -0
  126. package/dist/core/automation/branch.js.map +1 -0
  127. package/dist/core/automation/git-orchestration.d.ts +51 -0
  128. package/dist/core/automation/git-orchestration.d.ts.map +1 -0
  129. package/dist/core/automation/git-orchestration.js +25 -0
  130. package/dist/core/automation/git-orchestration.js.map +1 -0
  131. package/dist/core/automation/plan.d.ts +15 -0
  132. package/dist/core/automation/plan.d.ts.map +1 -0
  133. package/dist/core/automation/plan.js +25 -0
  134. package/dist/core/automation/plan.js.map +1 -0
  135. package/dist/core/automation/request-validation.d.ts +45 -0
  136. package/dist/core/automation/request-validation.d.ts.map +1 -0
  137. package/dist/core/automation/request-validation.js +144 -0
  138. package/dist/core/automation/request-validation.js.map +1 -0
  139. package/dist/core/automation/task-runner.d.ts +42 -0
  140. package/dist/core/automation/task-runner.d.ts.map +1 -0
  141. package/dist/core/automation/task-runner.js +215 -0
  142. package/dist/core/automation/task-runner.js.map +1 -0
  143. package/dist/core/branch-name.d.ts +13 -0
  144. package/dist/core/branch-name.d.ts.map +1 -0
  145. package/dist/core/branch-name.js +429 -0
  146. package/dist/core/branch-name.js.map +1 -0
  147. package/dist/core/default-branch.d.ts +12 -0
  148. package/dist/core/default-branch.d.ts.map +1 -0
  149. package/dist/core/default-branch.js +78 -0
  150. package/dist/core/default-branch.js.map +1 -0
  151. package/dist/core/event-bus.d.ts +73 -0
  152. package/dist/core/event-bus.d.ts.map +1 -0
  153. package/dist/core/event-bus.js +127 -0
  154. package/dist/core/event-bus.js.map +1 -0
  155. package/dist/core/git.d.ts +13 -0
  156. package/dist/core/git.d.ts.map +1 -0
  157. package/dist/core/git.js +15 -0
  158. package/dist/core/git.js.map +1 -0
  159. package/dist/core/github.d.ts +10 -0
  160. package/dist/core/github.d.ts.map +1 -0
  161. package/dist/core/github.js +245 -0
  162. package/dist/core/github.js.map +1 -0
  163. package/dist/core/plan-storage.d.ts +46 -0
  164. package/dist/core/plan-storage.d.ts.map +1 -0
  165. package/dist/core/plan-storage.js +237 -0
  166. package/dist/core/plan-storage.js.map +1 -0
  167. package/dist/core/plan.d.ts +23 -0
  168. package/dist/core/plan.d.ts.map +1 -0
  169. package/dist/core/plan.js +445 -0
  170. package/dist/core/plan.js.map +1 -0
  171. package/dist/core/repositories.d.ts +2 -0
  172. package/dist/core/repositories.d.ts.map +1 -0
  173. package/dist/core/repositories.js +58 -0
  174. package/dist/core/repositories.js.map +1 -0
  175. package/dist/core/repository-config.d.ts +9 -0
  176. package/dist/core/repository-config.d.ts.map +1 -0
  177. package/dist/core/repository-config.js +65 -0
  178. package/dist/core/repository-config.js.map +1 -0
  179. package/dist/core/task-store.d.ts +14 -0
  180. package/dist/core/task-store.d.ts.map +1 -0
  181. package/dist/core/task-store.js +105 -0
  182. package/dist/core/task-store.js.map +1 -0
  183. package/dist/core/tasks.d.ts +62 -0
  184. package/dist/core/tasks.d.ts.map +1 -0
  185. package/dist/core/tasks.js +582 -0
  186. package/dist/core/tasks.js.map +1 -0
  187. package/dist/core/terminal-sessions.d.ts +18 -0
  188. package/dist/core/terminal-sessions.d.ts.map +1 -0
  189. package/dist/core/terminal-sessions.js +539 -0
  190. package/dist/core/terminal-sessions.js.map +1 -0
  191. package/dist/core/tmux.d.ts +29 -0
  192. package/dist/core/tmux.d.ts.map +1 -0
  193. package/dist/core/tmux.js +151 -0
  194. package/dist/core/tmux.js.map +1 -0
  195. package/dist/core/workdir.d.ts +8 -0
  196. package/dist/core/workdir.d.ts.map +1 -0
  197. package/dist/core/workdir.js +26 -0
  198. package/dist/core/workdir.js.map +1 -0
  199. package/dist/domain/branch-validator.d.ts +51 -0
  200. package/dist/domain/branch-validator.d.ts.map +1 -0
  201. package/dist/domain/branch-validator.js +88 -0
  202. package/dist/domain/branch-validator.js.map +1 -0
  203. package/dist/domain/git-url-parser.d.ts +27 -0
  204. package/dist/domain/git-url-parser.d.ts.map +1 -0
  205. package/dist/domain/git-url-parser.js +84 -0
  206. package/dist/domain/git-url-parser.js.map +1 -0
  207. package/dist/domain/index.d.ts +8 -0
  208. package/dist/domain/index.d.ts.map +1 -0
  209. package/dist/domain/index.js +5 -0
  210. package/dist/domain/index.js.map +1 -0
  211. package/dist/domain/repository.d.ts +55 -0
  212. package/dist/domain/repository.d.ts.map +1 -0
  213. package/dist/domain/repository.js +73 -0
  214. package/dist/domain/repository.js.map +1 -0
  215. package/dist/domain/worktree.d.ts +43 -0
  216. package/dist/domain/worktree.d.ts.map +1 -0
  217. package/dist/domain/worktree.js +57 -0
  218. package/dist/domain/worktree.js.map +1 -0
  219. package/dist/infrastructure/cookies/cookie-manager.d.ts +18 -0
  220. package/dist/infrastructure/cookies/cookie-manager.d.ts.map +1 -0
  221. package/dist/infrastructure/cookies/cookie-manager.js +20 -0
  222. package/dist/infrastructure/cookies/cookie-manager.js.map +1 -0
  223. package/dist/infrastructure/cookies/cookie-parser.d.ts +43 -0
  224. package/dist/infrastructure/cookies/cookie-parser.d.ts.map +1 -0
  225. package/dist/infrastructure/cookies/cookie-parser.js +88 -0
  226. package/dist/infrastructure/cookies/cookie-parser.js.map +1 -0
  227. package/dist/infrastructure/cookies/cookie-security.d.ts +15 -0
  228. package/dist/infrastructure/cookies/cookie-security.d.ts.map +1 -0
  229. package/dist/infrastructure/cookies/cookie-security.js +35 -0
  230. package/dist/infrastructure/cookies/cookie-security.js.map +1 -0
  231. package/dist/infrastructure/cookies/index.d.ts +7 -0
  232. package/dist/infrastructure/cookies/index.d.ts.map +1 -0
  233. package/dist/infrastructure/cookies/index.js +4 -0
  234. package/dist/infrastructure/cookies/index.js.map +1 -0
  235. package/dist/infrastructure/errors/error-handler.d.ts +22 -0
  236. package/dist/infrastructure/errors/error-handler.d.ts.map +1 -0
  237. package/dist/infrastructure/errors/error-handler.js +89 -0
  238. package/dist/infrastructure/errors/error-handler.js.map +1 -0
  239. package/dist/infrastructure/errors/http-error.d.ts +30 -0
  240. package/dist/infrastructure/errors/http-error.d.ts.map +1 -0
  241. package/dist/infrastructure/errors/http-error.js +46 -0
  242. package/dist/infrastructure/errors/http-error.js.map +1 -0
  243. package/dist/infrastructure/errors/index.d.ts +5 -0
  244. package/dist/infrastructure/errors/index.d.ts.map +1 -0
  245. package/dist/infrastructure/errors/index.js +5 -0
  246. package/dist/infrastructure/errors/index.js.map +1 -0
  247. package/dist/infrastructure/errors/not-found-error.d.ts +8 -0
  248. package/dist/infrastructure/errors/not-found-error.d.ts.map +1 -0
  249. package/dist/infrastructure/errors/not-found-error.js +13 -0
  250. package/dist/infrastructure/errors/not-found-error.js.map +1 -0
  251. package/dist/infrastructure/errors/validation-error.d.ts +21 -0
  252. package/dist/infrastructure/errors/validation-error.d.ts.map +1 -0
  253. package/dist/infrastructure/errors/validation-error.js +31 -0
  254. package/dist/infrastructure/errors/validation-error.js.map +1 -0
  255. package/dist/infrastructure/logging/index.d.ts +3 -0
  256. package/dist/infrastructure/logging/index.d.ts.map +1 -0
  257. package/dist/infrastructure/logging/index.js +2 -0
  258. package/dist/infrastructure/logging/index.js.map +1 -0
  259. package/dist/infrastructure/logging/logger.d.ts +21 -0
  260. package/dist/infrastructure/logging/logger.d.ts.map +1 -0
  261. package/dist/infrastructure/logging/logger.js +49 -0
  262. package/dist/infrastructure/logging/logger.js.map +1 -0
  263. package/dist/repositories/git-repository.d.ts +67 -0
  264. package/dist/repositories/git-repository.d.ts.map +1 -0
  265. package/dist/repositories/git-repository.js +111 -0
  266. package/dist/repositories/git-repository.js.map +1 -0
  267. package/dist/repositories/git-status-repository.d.ts +22 -0
  268. package/dist/repositories/git-status-repository.d.ts.map +1 -0
  269. package/dist/repositories/git-status-repository.js +620 -0
  270. package/dist/repositories/git-status-repository.js.map +1 -0
  271. package/dist/repositories/repository-repository.d.ts +44 -0
  272. package/dist/repositories/repository-repository.d.ts.map +1 -0
  273. package/dist/repositories/repository-repository.js +155 -0
  274. package/dist/repositories/repository-repository.js.map +1 -0
  275. package/dist/repositories/worktree-repository.d.ts +66 -0
  276. package/dist/repositories/worktree-repository.d.ts.map +1 -0
  277. package/dist/repositories/worktree-repository.js +330 -0
  278. package/dist/repositories/worktree-repository.js.map +1 -0
  279. package/dist/server/cookies.d.ts +6 -0
  280. package/dist/server/cookies.d.ts.map +1 -0
  281. package/dist/server/cookies.js +6 -0
  282. package/dist/server/cookies.js.map +1 -0
  283. package/dist/server/events.d.ts +8 -0
  284. package/dist/server/events.d.ts.map +1 -0
  285. package/dist/server/events.js +128 -0
  286. package/dist/server/events.js.map +1 -0
  287. package/dist/server/index.d.ts +18 -0
  288. package/dist/server/index.d.ts.map +1 -0
  289. package/dist/server/index.js +173 -0
  290. package/dist/server/index.js.map +1 -0
  291. package/dist/server/router.d.ts +16 -0
  292. package/dist/server/router.d.ts.map +1 -0
  293. package/dist/server/router.js +256 -0
  294. package/dist/server/router.js.map +1 -0
  295. package/dist/server/ui.d.ts +8 -0
  296. package/dist/server/ui.d.ts.map +1 -0
  297. package/dist/server/ui.js +211 -0
  298. package/dist/server/ui.js.map +1 -0
  299. package/dist/server/websocket.d.ts +9 -0
  300. package/dist/server/websocket.d.ts.map +1 -0
  301. package/dist/server/websocket.js +116 -0
  302. package/dist/server/websocket.js.map +1 -0
  303. package/dist/services/auth-service.d.ts +49 -0
  304. package/dist/services/auth-service.d.ts.map +1 -0
  305. package/dist/services/auth-service.js +53 -0
  306. package/dist/services/auth-service.js.map +1 -0
  307. package/dist/services/index.d.ts +11 -0
  308. package/dist/services/index.d.ts.map +1 -0
  309. package/dist/services/index.js +6 -0
  310. package/dist/services/index.js.map +1 -0
  311. package/dist/services/repository-service.d.ts +57 -0
  312. package/dist/services/repository-service.d.ts.map +1 -0
  313. package/dist/services/repository-service.js +62 -0
  314. package/dist/services/repository-service.js.map +1 -0
  315. package/dist/services/session-service.d.ts +31 -0
  316. package/dist/services/session-service.d.ts.map +1 -0
  317. package/dist/services/session-service.js +134 -0
  318. package/dist/services/session-service.js.map +1 -0
  319. package/dist/services/terminal-service.d.ts +43 -0
  320. package/dist/services/terminal-service.d.ts.map +1 -0
  321. package/dist/services/terminal-service.js +85 -0
  322. package/dist/services/terminal-service.js.map +1 -0
  323. package/dist/services/worktree-service.d.ts +39 -0
  324. package/dist/services/worktree-service.d.ts.map +1 -0
  325. package/dist/services/worktree-service.js +208 -0
  326. package/dist/services/worktree-service.js.map +1 -0
  327. package/dist/types/auth.d.ts +35 -0
  328. package/dist/types/auth.d.ts.map +1 -0
  329. package/dist/types/auth.js +2 -0
  330. package/dist/types/auth.js.map +1 -0
  331. package/dist/types/config.d.ts +46 -0
  332. package/dist/types/config.d.ts.map +1 -0
  333. package/dist/types/config.js +5 -0
  334. package/dist/types/config.js.map +1 -0
  335. package/dist/types/git.d.ts +190 -0
  336. package/dist/types/git.d.ts.map +1 -0
  337. package/dist/types/git.js +5 -0
  338. package/dist/types/git.js.map +1 -0
  339. package/dist/types/http.d.ts +46 -0
  340. package/dist/types/http.d.ts.map +1 -0
  341. package/dist/types/http.js +2 -0
  342. package/dist/types/http.js.map +1 -0
  343. package/dist/types/index.d.ts +8 -0
  344. package/dist/types/index.d.ts.map +1 -0
  345. package/dist/types/index.js +2 -0
  346. package/dist/types/index.js.map +1 -0
  347. package/dist/types/plan.d.ts +31 -0
  348. package/dist/types/plan.d.ts.map +1 -0
  349. package/dist/types/plan.js +5 -0
  350. package/dist/types/plan.js.map +1 -0
  351. package/dist/types/services.d.ts +99 -0
  352. package/dist/types/services.d.ts.map +1 -0
  353. package/dist/types/services.js +2 -0
  354. package/dist/types/services.js.map +1 -0
  355. package/dist/types/tasks.d.ts +68 -0
  356. package/dist/types/tasks.d.ts.map +1 -0
  357. package/dist/types/tasks.js +5 -0
  358. package/dist/types/tasks.js.map +1 -0
  359. package/dist/types/terminal.d.ts +60 -0
  360. package/dist/types/terminal.d.ts.map +1 -0
  361. package/dist/types/terminal.js +2 -0
  362. package/dist/types/terminal.js.map +1 -0
  363. package/dist/utils/cookies.d.ts +7 -0
  364. package/dist/utils/cookies.d.ts.map +1 -0
  365. package/dist/utils/cookies.js +6 -0
  366. package/dist/utils/cookies.js.map +1 -0
  367. package/dist/utils/http.d.ts +23 -0
  368. package/dist/utils/http.d.ts.map +1 -0
  369. package/dist/utils/http.js +58 -0
  370. package/dist/utils/http.js.map +1 -0
  371. package/dist/utils/random.d.ts +12 -0
  372. package/dist/utils/random.d.ts.map +1 -0
  373. package/dist/utils/random.js +25 -0
  374. package/dist/utils/random.js.map +1 -0
  375. package/dist/utils/repository-cache.d.ts +8 -0
  376. package/dist/utils/repository-cache.d.ts.map +1 -0
  377. package/dist/utils/repository-cache.js +13 -0
  378. package/dist/utils/repository-cache.js.map +1 -0
  379. package/dist/validation/index.d.ts +9 -0
  380. package/dist/validation/index.d.ts.map +1 -0
  381. package/dist/validation/index.js +6 -0
  382. package/dist/validation/index.js.map +1 -0
  383. package/dist/validation/request-validator.d.ts +99 -0
  384. package/dist/validation/request-validator.d.ts.map +1 -0
  385. package/dist/validation/request-validator.js +189 -0
  386. package/dist/validation/request-validator.js.map +1 -0
  387. package/dist/validation/schemas/repository-schema.d.ts +26 -0
  388. package/dist/validation/schemas/repository-schema.d.ts.map +1 -0
  389. package/dist/validation/schemas/repository-schema.js +31 -0
  390. package/dist/validation/schemas/repository-schema.js.map +1 -0
  391. package/dist/validation/schemas/terminal-schema.d.ts +21 -0
  392. package/dist/validation/schemas/terminal-schema.d.ts.map +1 -0
  393. package/dist/validation/schemas/terminal-schema.js +38 -0
  394. package/dist/validation/schemas/terminal-schema.js.map +1 -0
  395. package/dist/validation/schemas/worktree-schema.d.ts +21 -0
  396. package/dist/validation/schemas/worktree-schema.d.ts.map +1 -0
  397. package/dist/validation/schemas/worktree-schema.js +29 -0
  398. package/dist/validation/schemas/worktree-schema.js.map +1 -0
  399. package/package.json +79 -0
  400. package/ui/dist/assets/index-BDDrbP3l.js +354 -0
  401. package/ui/dist/assets/index-CwB7gOl4.css +41 -0
  402. package/ui/dist/index.html +13 -0
@@ -0,0 +1,31 @@
1
+ export interface SessionInfo {
2
+ org: string;
3
+ repo: string;
4
+ branch: string;
5
+ idle: boolean;
6
+ lastActivityAt: string | null;
7
+ }
8
+ /**
9
+ * Service for session discovery and management
10
+ */
11
+ export declare class SessionService {
12
+ private readonly workdir;
13
+ constructor(workdir: string);
14
+ /**
15
+ * Lists all active terminal sessions, including both in-memory and orphaned tmux sessions
16
+ * @returns List of session information
17
+ */
18
+ listSessions(): Promise<SessionInfo[]>;
19
+ /**
20
+ * Discovers tmux sessions
21
+ * @returns List of parsed tmux session names
22
+ */
23
+ private discoverTmuxSessions;
24
+ }
25
+ /**
26
+ * Creates a session service instance
27
+ * @param workdir - Work directory root
28
+ * @returns SessionService instance
29
+ */
30
+ export declare function createSessionService(workdir: string): SessionService;
31
+ //# sourceMappingURL=session-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-service.d.ts","sourceRoot":"","sources":["../../src/services/session-service.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AASD;;GAEG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAyF5C;;;OAGG;YACW,oBAAoB;CAwBnC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAEpE"}
@@ -0,0 +1,134 @@
1
+ import { discoverRepositories } from '../repositories/repository-repository.js';
2
+ import { buildSanitisedWorktreeLookup, detectTmux, isTmuxAvailable, parseTmuxSessionName, runTmux, } from '../core/tmux.js';
3
+ import { listActiveSessions, makeSessionKey } from '../core/terminal-sessions.js';
4
+ /**
5
+ * Type guard for finite numbers
6
+ */
7
+ function isFiniteNumber(value) {
8
+ return typeof value === 'number' && Number.isFinite(value);
9
+ }
10
+ /**
11
+ * Service for session discovery and management
12
+ */
13
+ export class SessionService {
14
+ workdir;
15
+ constructor(workdir) {
16
+ this.workdir = workdir;
17
+ }
18
+ /**
19
+ * Lists all active terminal sessions, including both in-memory and orphaned tmux sessions
20
+ * @returns List of session information
21
+ */
22
+ async listSessions() {
23
+ const sessionLookup = new Map();
24
+ // Gather in-memory sessions
25
+ listActiveSessions().forEach((session) => {
26
+ if (!session || !session.org || !session.repo || !session.branch) {
27
+ return;
28
+ }
29
+ const key = makeSessionKey(session.org, session.repo, session.branch);
30
+ const lastActivityAtMs = typeof session.lastActivityAt === 'number'
31
+ ? session.lastActivityAt
32
+ : session.lastActivityAt instanceof Date
33
+ ? session.lastActivityAt.getTime()
34
+ : null;
35
+ const idle = Boolean(session.idle);
36
+ const existing = sessionLookup.get(key);
37
+ if (!existing) {
38
+ sessionLookup.set(key, {
39
+ org: session.org,
40
+ repo: session.repo,
41
+ branch: session.branch,
42
+ idle,
43
+ lastActivityAtMs,
44
+ });
45
+ return;
46
+ }
47
+ existing.idle = existing.idle && idle;
48
+ if (isFiniteNumber(lastActivityAtMs) &&
49
+ (!isFiniteNumber(existing.lastActivityAtMs) || lastActivityAtMs > existing.lastActivityAtMs)) {
50
+ existing.lastActivityAtMs = lastActivityAtMs;
51
+ }
52
+ });
53
+ // Discover orphaned tmux sessions
54
+ await detectTmux();
55
+ if (isTmuxAvailable()) {
56
+ const tmuxSessions = await this.discoverTmuxSessions();
57
+ if (tmuxSessions.length > 0) {
58
+ let lookup;
59
+ try {
60
+ const structure = await discoverRepositories(this.workdir);
61
+ lookup = buildSanitisedWorktreeLookup(structure);
62
+ }
63
+ catch (error) {
64
+ lookup = new Map();
65
+ }
66
+ tmuxSessions.forEach((parsed) => {
67
+ const sanitisedKey = `${parsed.org}--${parsed.repo}--${parsed.branch}`;
68
+ const actual = lookup.get(sanitisedKey);
69
+ if (!actual) {
70
+ return;
71
+ }
72
+ const key = makeSessionKey(actual.org, actual.repo, actual.branch);
73
+ if (sessionLookup.has(key)) {
74
+ return;
75
+ }
76
+ sessionLookup.set(key, {
77
+ org: actual.org,
78
+ repo: actual.repo,
79
+ branch: actual.branch,
80
+ idle: false,
81
+ lastActivityAtMs: null,
82
+ });
83
+ });
84
+ }
85
+ }
86
+ // Convert to output format
87
+ return Array.from(sessionLookup.values()).map((entry) => ({
88
+ org: entry.org,
89
+ repo: entry.repo,
90
+ branch: entry.branch,
91
+ idle: Boolean(entry.idle),
92
+ lastActivityAt: isFiniteNumber(entry.lastActivityAtMs)
93
+ ? new Date(entry.lastActivityAtMs).toISOString()
94
+ : null,
95
+ }));
96
+ }
97
+ /**
98
+ * Discovers tmux sessions
99
+ * @returns List of parsed tmux session names
100
+ */
101
+ async discoverTmuxSessions() {
102
+ let stdout = '';
103
+ try {
104
+ const result = await runTmux(['list-sessions', '-F', '#S']);
105
+ stdout = result && typeof result.stdout === 'string' ? result.stdout : '';
106
+ }
107
+ catch (error) {
108
+ const err = error;
109
+ if (typeof err.code === 'number') {
110
+ stdout = '';
111
+ }
112
+ else {
113
+ console.error('Failed to list tmux sessions', error);
114
+ stdout = '';
115
+ }
116
+ }
117
+ const names = stdout
118
+ .split('\n')
119
+ .map((line) => line.trim())
120
+ .filter(Boolean);
121
+ return names
122
+ .map((name) => parseTmuxSessionName(name))
123
+ .filter((parsed) => parsed !== null);
124
+ }
125
+ }
126
+ /**
127
+ * Creates a session service instance
128
+ * @param workdir - Work directory root
129
+ * @returns SessionService instance
130
+ */
131
+ export function createSessionService(workdir) {
132
+ return new SessionService(workdir);
133
+ }
134
+ //# sourceMappingURL=session-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../src/services/session-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { TerminalOpenInput, TerminalSendInput } from '../validation/index.js';
2
+ import type { ITerminalService } from '../types/services.js';
3
+ export interface TerminalOpenResult {
4
+ sessionId: string;
5
+ log: string;
6
+ closed: boolean;
7
+ created: boolean;
8
+ }
9
+ export interface TerminalSendResult {
10
+ ok: boolean;
11
+ }
12
+ /**
13
+ * Service for terminal session orchestration
14
+ */
15
+ export declare class TerminalService implements ITerminalService {
16
+ private readonly workdir;
17
+ private readonly mode;
18
+ constructor(workdir: string, options?: {
19
+ mode?: string;
20
+ });
21
+ /**
22
+ * Opens or creates a terminal session
23
+ * @param params - Session parameters
24
+ * @returns Session information
25
+ */
26
+ openTerminal(params: TerminalOpenInput): Promise<TerminalOpenResult>;
27
+ /**
28
+ * Sends input to a terminal session
29
+ * @param params - Input parameters
30
+ * @returns Success result
31
+ */
32
+ sendInput(params: TerminalSendInput): Promise<TerminalSendResult>;
33
+ }
34
+ /**
35
+ * Creates a terminal service instance
36
+ * @param workdir - Work directory root
37
+ * @param options - Service options
38
+ * @returns TerminalService instance
39
+ */
40
+ export declare function createTerminalService(workdir: string, options?: {
41
+ mode?: string;
42
+ }): TerminalService;
43
+ //# sourceMappingURL=terminal-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-service.d.ts","sourceRoot":"","sources":["../../src/services/terminal-service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAED,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO;IAI7E;;;;OAIG;IACG,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0D1E;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAWxE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAEvG"}
@@ -0,0 +1,85 @@
1
+ import { getOrCreateTerminalSession, getSessionById, queueSessionInput, } from '../core/terminal-sessions.js';
2
+ import { launchAgentProcess } from '../core/agents.js';
3
+ import { ValidationError } from '../infrastructure/errors/index.js';
4
+ /**
5
+ * Service for terminal session orchestration
6
+ */
7
+ export class TerminalService {
8
+ workdir;
9
+ mode;
10
+ constructor(workdir, options = {}) {
11
+ this.workdir = workdir;
12
+ this.mode = typeof options.mode === 'string' ? options.mode : 'auto';
13
+ }
14
+ /**
15
+ * Opens or creates a terminal session
16
+ * @param params - Session parameters
17
+ * @returns Session information
18
+ */
19
+ async openTerminal(params) {
20
+ const { org, repo, branch, command = '', hasPrompt, prompt } = params;
21
+ if (branch.toLowerCase() === 'main') {
22
+ throw new ValidationError('Terminal access to the main branch is disabled');
23
+ }
24
+ if (hasPrompt) {
25
+ if (!command) {
26
+ throw new ValidationError('command must be provided when prompt is included');
27
+ }
28
+ const { sessionId, createdSession } = await launchAgentProcess({
29
+ command,
30
+ workdir: this.workdir,
31
+ org,
32
+ repo,
33
+ branch,
34
+ prompt: prompt ?? '',
35
+ });
36
+ const session = getSessionById(sessionId);
37
+ if (!session) {
38
+ throw new Error('Terminal session not found after launch');
39
+ }
40
+ return {
41
+ sessionId,
42
+ log: session.log || '',
43
+ closed: Boolean(session.closed),
44
+ created: Boolean(createdSession),
45
+ };
46
+ }
47
+ const result = await getOrCreateTerminalSession(this.workdir, org, repo, branch, { mode: this.mode });
48
+ const session = 'session' in result ? result.session : result;
49
+ const created = 'created' in result ? result.created : false;
50
+ if (command) {
51
+ const commandInput = /[\r\n]$/.test(command) ? command : `${command}\r`;
52
+ queueSessionInput(session, commandInput);
53
+ }
54
+ return {
55
+ sessionId: session.id,
56
+ log: session.log || '',
57
+ closed: Boolean(session.closed),
58
+ created,
59
+ };
60
+ }
61
+ /**
62
+ * Sends input to a terminal session
63
+ * @param params - Input parameters
64
+ * @returns Success result
65
+ */
66
+ async sendInput(params) {
67
+ const { sessionId, input } = params;
68
+ const session = getSessionById(sessionId);
69
+ if (!session || session.closed) {
70
+ throw new ValidationError('Terminal session not found');
71
+ }
72
+ queueSessionInput(session, input);
73
+ return { ok: true };
74
+ }
75
+ }
76
+ /**
77
+ * Creates a terminal service instance
78
+ * @param workdir - Work directory root
79
+ * @param options - Service options
80
+ * @returns TerminalService instance
81
+ */
82
+ export function createTerminalService(workdir, options = {}) {
83
+ return new TerminalService(workdir, options);
84
+ }
85
+ //# sourceMappingURL=terminal-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-service.js","sourceRoot":"","sources":["../../src/services/terminal-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { WorktreeCreateInput, WorktreeDeleteInput } from '../validation/index.js';
2
+ import type { RepositoriesData } from './repository-service.js';
3
+ import type { IWorktreeService } from '../types/services.js';
4
+ export interface CreateWorktreeResult {
5
+ taskId: string;
6
+ org: string;
7
+ repo: string;
8
+ branch: string | null;
9
+ }
10
+ /**
11
+ * Service for worktree lifecycle management
12
+ */
13
+ export declare class WorktreeService implements IWorktreeService {
14
+ private readonly workdir;
15
+ private readonly branchNameGenerator;
16
+ private readonly defaultBranchConfig;
17
+ constructor(workdir: string, branchNameGenerator: unknown, defaultBranchConfig: unknown);
18
+ /**
19
+ * Creates a new worktree
20
+ * @param params - Creation parameters
21
+ * @returns Result with task ID and repository info
22
+ */
23
+ createWorktree(params: WorktreeCreateInput): Promise<CreateWorktreeResult>;
24
+ /**
25
+ * Deletes a worktree
26
+ * @param params - Deletion parameters
27
+ * @returns Updated repository data
28
+ */
29
+ deleteWorktree(params: WorktreeDeleteInput): Promise<RepositoriesData>;
30
+ }
31
+ /**
32
+ * Creates a worktree service instance
33
+ * @param workdir - Work directory root
34
+ * @param branchNameGenerator - Branch name generator
35
+ * @param defaultBranchConfig - Default branch configuration
36
+ * @returns WorktreeService instance
37
+ */
38
+ export declare function createWorktreeService(workdir: string, branchNameGenerator: unknown, defaultBranchConfig: unknown): WorktreeService;
39
+ //# sourceMappingURL=worktree-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-service.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAFnB,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,OAAO,EAC5B,mBAAmB,EAAE,OAAO;IAG/C;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmKhF;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuC7E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,OAAO,EAC5B,mBAAmB,EAAE,OAAO,GAC3B,eAAe,CAEjB"}
@@ -0,0 +1,208 @@
1
+ import { createWorktree, getWorktreePath, normalizeBranchName, removeWorktree, } from '../core/git.js';
2
+ import { selectDefaultBranchOverride } from '../core/default-branch.js';
3
+ import { detectTmux, isTmuxAvailable, makeTmuxSessionName, tmuxKillSession, } from '../core/tmux.js';
4
+ import { disposeSessionByKey, makeSessionKey } from '../core/terminal-sessions.js';
5
+ import { savePlanToWorktree } from '../core/plan-storage.js';
6
+ import { runTask } from '../core/tasks.js';
7
+ import { refreshRepositoryCache } from '../utils/repository-cache.js';
8
+ const TASK_TYPE_CREATE_WORKTREE = 'worktree:create';
9
+ const STEP_IDS = Object.freeze({
10
+ GENERATE_BRANCH: 'generate-branch',
11
+ SYNC_DEFAULT_BRANCH: 'sync-default-branch',
12
+ CREATE_WORKTREE: 'create-worktree',
13
+ RUN_INIT_SCRIPT: 'run-init-script',
14
+ SAVE_PLAN: 'save-plan',
15
+ REFRESH_REPOSITORIES: 'refresh-repositories',
16
+ });
17
+ /**
18
+ * Service for worktree lifecycle management
19
+ */
20
+ export class WorktreeService {
21
+ workdir;
22
+ branchNameGenerator;
23
+ defaultBranchConfig;
24
+ constructor(workdir, branchNameGenerator, defaultBranchConfig) {
25
+ this.workdir = workdir;
26
+ this.branchNameGenerator = branchNameGenerator;
27
+ this.defaultBranchConfig = defaultBranchConfig;
28
+ }
29
+ /**
30
+ * Creates a new worktree
31
+ * @param params - Creation parameters
32
+ * @returns Result with task ID and repository info
33
+ */
34
+ async createWorktree(params) {
35
+ const { org, repo, branch, prompt, hasPrompt } = params;
36
+ let normalisedBranch = normalizeBranchName(branch);
37
+ const generator = this.branchNameGenerator;
38
+ if (!normalisedBranch && (!generator || !generator.isConfigured)) {
39
+ throw new Error('Branch name generation is not configured. Provide a branch or configure a local LLM command (set branchNameLlm in config.json).');
40
+ }
41
+ const defaultBranchOverride = selectDefaultBranchOverride(this.defaultBranchConfig, org, repo);
42
+ const { id: taskId } = runTask({
43
+ type: TASK_TYPE_CREATE_WORKTREE,
44
+ title: `Create worktree for ${org}/${repo}`,
45
+ metadata: {
46
+ org,
47
+ repo,
48
+ requestedBranch: normalisedBranch || null,
49
+ promptProvided: hasPrompt,
50
+ },
51
+ }, async (context) => {
52
+ const ctx = context;
53
+ const { progress, updateMetadata, setResult } = ctx;
54
+ const prog = progress;
55
+ const updateMeta = updateMetadata;
56
+ const setRes = setResult;
57
+ let targetBranch = normalisedBranch;
58
+ prog.ensureStep(STEP_IDS.GENERATE_BRANCH, 'Generate branch name');
59
+ if (!targetBranch) {
60
+ prog.startStep(STEP_IDS.GENERATE_BRANCH, {
61
+ label: 'Generate branch name',
62
+ message: 'Generating branch name from prompt.',
63
+ });
64
+ try {
65
+ const generated = await generator.generateBranchName({
66
+ prompt,
67
+ org,
68
+ repo,
69
+ });
70
+ const trimmed = normalizeBranchName(generated);
71
+ if (!trimmed) {
72
+ throw new Error('Branch name generator returned an empty branch name.');
73
+ }
74
+ targetBranch = trimmed;
75
+ updateMeta({ branch: targetBranch });
76
+ prog.completeStep(STEP_IDS.GENERATE_BRANCH, {
77
+ label: 'Generate branch name',
78
+ message: `Generated branch ${targetBranch}.`,
79
+ });
80
+ }
81
+ catch (error) {
82
+ const message = error?.message || 'Failed to generate branch name.';
83
+ prog.failStep(STEP_IDS.GENERATE_BRANCH, {
84
+ label: 'Generate branch name',
85
+ message,
86
+ });
87
+ throw new Error(`Failed to generate branch name: ${message}`);
88
+ }
89
+ }
90
+ else {
91
+ prog.skipStep(STEP_IDS.GENERATE_BRANCH, {
92
+ label: 'Generate branch name',
93
+ message: `Using provided branch ${targetBranch}.`,
94
+ });
95
+ updateMeta({ branch: targetBranch });
96
+ }
97
+ prog.ensureStep(STEP_IDS.SYNC_DEFAULT_BRANCH, 'Sync default branch');
98
+ prog.ensureStep(STEP_IDS.CREATE_WORKTREE, 'Create worktree');
99
+ prog.ensureStep(STEP_IDS.RUN_INIT_SCRIPT, 'Run init script');
100
+ await createWorktree(this.workdir, org, repo, targetBranch, {
101
+ defaultBranchOverride,
102
+ progress: prog,
103
+ });
104
+ if (hasPrompt) {
105
+ prog.ensureStep(STEP_IDS.SAVE_PLAN, 'Save plan prompt');
106
+ prog.startStep(STEP_IDS.SAVE_PLAN, {
107
+ label: 'Save plan prompt',
108
+ message: 'Persisting plan to the new worktree.',
109
+ });
110
+ try {
111
+ const { worktreePath } = await getWorktreePath(this.workdir, org, repo, targetBranch);
112
+ await savePlanToWorktree({
113
+ worktreePath,
114
+ branch: targetBranch,
115
+ planText: prompt,
116
+ });
117
+ prog.completeStep(STEP_IDS.SAVE_PLAN, {
118
+ label: 'Save plan prompt',
119
+ message: 'Plan saved to worktree.',
120
+ });
121
+ }
122
+ catch (error) {
123
+ const message = error?.message || 'Failed to persist plan for worktree.';
124
+ prog.failStep(STEP_IDS.SAVE_PLAN, {
125
+ label: 'Save plan prompt',
126
+ message,
127
+ });
128
+ console.warn('[agentrix] Failed to persist plan for worktree:', error?.message || error);
129
+ }
130
+ }
131
+ prog.ensureStep(STEP_IDS.REFRESH_REPOSITORIES, 'Refresh repositories');
132
+ prog.startStep(STEP_IDS.REFRESH_REPOSITORIES, {
133
+ label: 'Refresh repositories',
134
+ message: 'Refreshing repository cache.',
135
+ });
136
+ try {
137
+ await refreshRepositoryCache(this.workdir);
138
+ prog.completeStep(STEP_IDS.REFRESH_REPOSITORIES, {
139
+ label: 'Refresh repositories',
140
+ message: 'Repository cache refreshed.',
141
+ });
142
+ }
143
+ catch (error) {
144
+ const message = error?.message || 'Failed to refresh repository list.';
145
+ prog.failStep(STEP_IDS.REFRESH_REPOSITORIES, {
146
+ label: 'Refresh repositories',
147
+ message,
148
+ });
149
+ throw new Error(`Failed to refresh repositories: ${message}`);
150
+ }
151
+ setRes({
152
+ org,
153
+ repo,
154
+ branch: targetBranch,
155
+ promptProvided: hasPrompt,
156
+ });
157
+ });
158
+ return {
159
+ taskId,
160
+ org,
161
+ repo,
162
+ branch: normalisedBranch || null,
163
+ };
164
+ }
165
+ /**
166
+ * Deletes a worktree
167
+ * @param params - Deletion parameters
168
+ * @returns Updated repository data
169
+ */
170
+ async deleteWorktree(params) {
171
+ const { org, repo, branch } = params;
172
+ const normalised = normalizeBranchName(branch);
173
+ if (!normalised) {
174
+ throw new Error('Branch name cannot be empty');
175
+ }
176
+ const config = this.defaultBranchConfig;
177
+ const overrideDefault = selectDefaultBranchOverride(config, org, repo);
178
+ const protectedBranch = overrideDefault ? overrideDefault.toLowerCase() : 'main';
179
+ if (normalised.toLowerCase() === protectedBranch) {
180
+ throw new Error(`Cannot remove the default worktree (${overrideDefault || 'main'})`);
181
+ }
182
+ const sessionKey = makeSessionKey(org, repo, normalised);
183
+ await disposeSessionByKey(sessionKey);
184
+ await detectTmux();
185
+ if (isTmuxAvailable()) {
186
+ const tmuxSessionName = makeTmuxSessionName(org, repo, normalised);
187
+ try {
188
+ await tmuxKillSession(tmuxSessionName);
189
+ }
190
+ catch (error) {
191
+ console.warn(`[agentrix] Failed to kill tmux session ${tmuxSessionName}:`, error.message);
192
+ }
193
+ }
194
+ await removeWorktree(this.workdir, org, repo, normalised);
195
+ return await refreshRepositoryCache(this.workdir);
196
+ }
197
+ }
198
+ /**
199
+ * Creates a worktree service instance
200
+ * @param workdir - Work directory root
201
+ * @param branchNameGenerator - Branch name generator
202
+ * @param defaultBranchConfig - Default branch configuration
203
+ * @returns WorktreeService instance
204
+ */
205
+ export function createWorktreeService(workdir, branchNameGenerator, defaultBranchConfig) {
206
+ return new WorktreeService(workdir, branchNameGenerator, defaultBranchConfig);
207
+ }
208
+ //# sourceMappingURL=worktree-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-service.js","sourceRoot":"","sources":["../../src/services/worktree-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ /**
3
+ * Cookie options for authentication
4
+ */
5
+ export interface CookieOptions {
6
+ maxAge?: number;
7
+ expires?: Date;
8
+ path?: string;
9
+ domain?: string;
10
+ secure?: boolean;
11
+ httpOnly?: boolean;
12
+ sameSite?: 'Strict' | 'Lax' | 'None';
13
+ }
14
+ /**
15
+ * Authentication manager interface
16
+ */
17
+ export interface AuthManager {
18
+ login(req: IncomingMessage, res: ServerResponse, password: string, options?: {
19
+ secure?: boolean;
20
+ }): string;
21
+ logout(req: IncomingMessage, res: ServerResponse, options?: {
22
+ secure?: boolean;
23
+ }): void;
24
+ isAuthenticated(req: IncomingMessage): boolean;
25
+ hasToken(token: string): boolean;
26
+ clear(): void;
27
+ getTokenFromRequest(req: IncomingMessage): string;
28
+ }
29
+ /**
30
+ * Cookie manager interface
31
+ */
32
+ export interface CookieManager {
33
+ resolveSecure(req: IncomingMessage): boolean;
34
+ }
35
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3G,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;CAC9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":""}