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,151 @@
1
+ import { promisify } from 'node:util';
2
+ import { execFile } from 'node:child_process';
3
+ import { TMUX_BIN, TMUX_SESSION_PREFIX } from '../config/constants.js';
4
+ const execFileAsync = promisify(execFile);
5
+ let tmuxAvailable = false;
6
+ let tmuxVersion = null;
7
+ let tmuxDetection;
8
+ export async function detectTmux() {
9
+ if (!tmuxDetection) {
10
+ tmuxDetection = (async () => {
11
+ try {
12
+ const { stdout } = await execFileAsync(TMUX_BIN, ['-V'], { maxBuffer: 1024 * 1024 });
13
+ tmuxAvailable = true;
14
+ tmuxVersion = stdout ? stdout.trim() : null;
15
+ }
16
+ catch {
17
+ tmuxAvailable = false;
18
+ tmuxVersion = null;
19
+ }
20
+ return { available: tmuxAvailable, version: tmuxVersion };
21
+ })();
22
+ }
23
+ return tmuxDetection;
24
+ }
25
+ export function isTmuxAvailable() {
26
+ return tmuxAvailable;
27
+ }
28
+ export async function runTmux(args, options = {}) {
29
+ return execFileAsync(TMUX_BIN, args, { maxBuffer: 1024 * 1024, ...options });
30
+ }
31
+ export function sanitiseTmuxComponent(value, fallback) {
32
+ if (typeof value !== 'string') {
33
+ return fallback;
34
+ }
35
+ const trimmed = value.trim();
36
+ if (!trimmed) {
37
+ return fallback;
38
+ }
39
+ const cleaned = trimmed
40
+ .replace(/\s+/g, '-')
41
+ .replace(/[^A-Za-z0-9._-]/g, '-')
42
+ .replace(/-+/g, '-')
43
+ .replace(/^-|-$/g, '');
44
+ return cleaned || fallback;
45
+ }
46
+ export function makeTmuxSessionName(org, repo, branch) {
47
+ const orgPart = sanitiseTmuxComponent(org, 'org');
48
+ const repoPart = sanitiseTmuxComponent(repo, 'repo');
49
+ const branchPart = sanitiseTmuxComponent(branch, 'branch');
50
+ return `${TMUX_SESSION_PREFIX}${orgPart}--${repoPart}--${branchPart}`;
51
+ }
52
+ export function parseTmuxSessionName(sessionName) {
53
+ if (typeof sessionName !== 'string' || !sessionName.startsWith(TMUX_SESSION_PREFIX)) {
54
+ return null;
55
+ }
56
+ const remainder = sessionName.slice(TMUX_SESSION_PREFIX.length);
57
+ const parts = remainder.split('--');
58
+ if (parts.length !== 3) {
59
+ return null;
60
+ }
61
+ const [org, repo, branch] = parts;
62
+ if (!org || !repo || !branch) {
63
+ return null;
64
+ }
65
+ return { org, repo, branch };
66
+ }
67
+ export function makeSanitisedSessionKey(org, repo, branch) {
68
+ const orgPart = sanitiseTmuxComponent(org, 'org');
69
+ const repoPart = sanitiseTmuxComponent(repo, 'repo');
70
+ const branchPart = sanitiseTmuxComponent(branch, 'branch');
71
+ return `${orgPart}--${repoPart}--${branchPart}`;
72
+ }
73
+ export function buildSanitisedWorktreeLookup(structure) {
74
+ const map = new Map();
75
+ const struct = structure;
76
+ Object.entries(struct || {}).forEach(([org, repos]) => {
77
+ const repoEntries = repos && typeof repos === 'object' ? repos : {};
78
+ Object.entries(repoEntries).forEach(([repo, info]) => {
79
+ const infoObj = info;
80
+ const branchList = Array.isArray(infoObj?.branches)
81
+ ? infoObj.branches
82
+ : Array.isArray(info)
83
+ ? info
84
+ : [];
85
+ branchList.forEach((branch) => {
86
+ if (!branch) {
87
+ return;
88
+ }
89
+ const key = makeSanitisedSessionKey(org, repo, branch);
90
+ if (!map.has(key)) {
91
+ map.set(key, { org, repo, branch });
92
+ }
93
+ });
94
+ });
95
+ });
96
+ return map;
97
+ }
98
+ function tmuxTarget(sessionName) {
99
+ return `=${sessionName}`;
100
+ }
101
+ export async function tmuxHasSession(sessionName) {
102
+ try {
103
+ await runTmux(['has-session', '-t', tmuxTarget(sessionName)]);
104
+ return true;
105
+ }
106
+ catch (error) {
107
+ const err = error;
108
+ if (typeof err.code === 'number') {
109
+ return false;
110
+ }
111
+ throw error;
112
+ }
113
+ }
114
+ export async function tmuxKillSession(sessionName) {
115
+ try {
116
+ await runTmux(['kill-session', '-t', tmuxTarget(sessionName)]);
117
+ }
118
+ catch (error) {
119
+ const err = error;
120
+ if (typeof err.code === 'number') {
121
+ return;
122
+ }
123
+ throw error;
124
+ }
125
+ }
126
+ export async function tmuxKillSessionsForRepository(org, repo, branches) {
127
+ if (!org || !repo || !Array.isArray(branches) || branches.length === 0) {
128
+ return;
129
+ }
130
+ await detectTmux();
131
+ if (!isTmuxAvailable()) {
132
+ return;
133
+ }
134
+ const tasks = branches
135
+ .filter((branch) => typeof branch === 'string' && branch.length > 0)
136
+ .map(async (branch) => {
137
+ const tmuxSessionName = makeTmuxSessionName(org, repo, branch);
138
+ try {
139
+ await tmuxKillSession(tmuxSessionName);
140
+ }
141
+ catch (error) {
142
+ const err = error;
143
+ console.warn(`[agentrix] Failed to kill tmux session ${tmuxSessionName}:`, err?.message || error);
144
+ }
145
+ });
146
+ if (tasks.length === 0) {
147
+ return;
148
+ }
149
+ await Promise.allSettled(tasks);
150
+ }
151
+ //# sourceMappingURL=tmux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/core/tmux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resolves and validates the work directory path
3
+ * @param workdir - Work directory path
4
+ * @returns Absolute path to work directory
5
+ * @throws {Error} If directory doesn't exist or isn't accessible
6
+ */
7
+ export declare function resolveWorkdir(workdir: string): Promise<string>;
8
+ //# sourceMappingURL=workdir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workdir.d.ts","sourceRoot":"","sources":["../../src/core/workdir.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBrE"}
@@ -0,0 +1,26 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ /**
4
+ * Resolves and validates the work directory path
5
+ * @param workdir - Work directory path
6
+ * @returns Absolute path to work directory
7
+ * @throws {Error} If directory doesn't exist or isn't accessible
8
+ */
9
+ export async function resolveWorkdir(workdir) {
10
+ const absolute = path.resolve(workdir);
11
+ try {
12
+ const stats = await fs.stat(absolute);
13
+ if (!stats.isDirectory()) {
14
+ throw new Error(`Workdir path is not a directory: ${absolute}`);
15
+ }
16
+ }
17
+ catch (error) {
18
+ const err = error;
19
+ if (err.code === 'ENOENT') {
20
+ throw new Error(`Workdir does not exist: ${absolute}`);
21
+ }
22
+ throw new Error(`Unable to access workdir ${absolute}: ${err.message}`);
23
+ }
24
+ return absolute;
25
+ }
26
+ //# sourceMappingURL=workdir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workdir.js","sourceRoot":"","sources":["../../src/core/workdir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA4C,CAAC;QACzD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Branch name validation and normalization
3
+ */
4
+ /**
5
+ * Normalizes a branch name by trimming whitespace
6
+ * @param branch - Branch name to normalize
7
+ * @returns Normalized branch name
8
+ */
9
+ export declare function normalizeBranchName(branch: unknown): string;
10
+ /**
11
+ * Sanitizes a branch name (alias for normalizeBranchName for clarity)
12
+ * @param branch - Branch name to sanitize
13
+ * @returns Sanitized branch name
14
+ */
15
+ export declare function sanitizeBranchName(branch: unknown): string;
16
+ /**
17
+ * Derives a worktree folder name from a branch name
18
+ * Takes the last segment after splitting by '/'
19
+ * @param branch - Branch name
20
+ * @returns Folder name for the worktree
21
+ * @throws {Error} If branch name is invalid or empty
22
+ */
23
+ export declare function deriveWorktreeFolderName(branch: string): string;
24
+ /**
25
+ * Validates that a branch name is not empty
26
+ * @param branch - Branch name to validate
27
+ * @returns Validated branch name
28
+ * @throws {Error} If branch name is invalid
29
+ */
30
+ export declare function validateBranchName(branch: string): string;
31
+ /**
32
+ * Value object representing a branch name
33
+ */
34
+ export declare class BranchName {
35
+ readonly value: string;
36
+ constructor(name: string);
37
+ toString(): string;
38
+ /**
39
+ * Gets the worktree folder name for this branch
40
+ * @returns Folder name
41
+ */
42
+ toFolderName(): string;
43
+ /**
44
+ * Checks if this is the main/default branch
45
+ * @param defaultBranch - The default branch name (default: 'main')
46
+ * @returns True if this is the default branch
47
+ */
48
+ isDefault(defaultBranch?: string): boolean;
49
+ equals(other: BranchName | string): boolean;
50
+ }
51
+ //# sourceMappingURL=branch-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-validator.d.ts","sourceRoot":"","sources":["../../src/domain/branch-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAW/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,MAAM;IAIxB,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACH,SAAS,CAAC,aAAa,GAAE,MAAe,GAAG,OAAO;IAIlD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;CAM5C"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Branch name validation and normalization
3
+ */
4
+ /**
5
+ * Normalizes a branch name by trimming whitespace
6
+ * @param branch - Branch name to normalize
7
+ * @returns Normalized branch name
8
+ */
9
+ export function normalizeBranchName(branch) {
10
+ if (typeof branch !== 'string') {
11
+ return '';
12
+ }
13
+ return branch.trim();
14
+ }
15
+ /**
16
+ * Sanitizes a branch name (alias for normalizeBranchName for clarity)
17
+ * @param branch - Branch name to sanitize
18
+ * @returns Sanitized branch name
19
+ */
20
+ export function sanitizeBranchName(branch) {
21
+ return normalizeBranchName(branch);
22
+ }
23
+ /**
24
+ * Derives a worktree folder name from a branch name
25
+ * Takes the last segment after splitting by '/'
26
+ * @param branch - Branch name
27
+ * @returns Folder name for the worktree
28
+ * @throws {Error} If branch name is invalid or empty
29
+ */
30
+ export function deriveWorktreeFolderName(branch) {
31
+ const trimmed = normalizeBranchName(branch);
32
+ if (!trimmed) {
33
+ throw new Error('Branch name cannot be empty');
34
+ }
35
+ const parts = trimmed.split('/').filter(Boolean);
36
+ const folder = parts[parts.length - 1];
37
+ if (!folder) {
38
+ throw new Error('Unable to derive worktree folder from branch name');
39
+ }
40
+ return folder;
41
+ }
42
+ /**
43
+ * Validates that a branch name is not empty
44
+ * @param branch - Branch name to validate
45
+ * @returns Validated branch name
46
+ * @throws {Error} If branch name is invalid
47
+ */
48
+ export function validateBranchName(branch) {
49
+ const normalized = normalizeBranchName(branch);
50
+ if (!normalized) {
51
+ throw new Error('Branch name cannot be empty');
52
+ }
53
+ return normalized;
54
+ }
55
+ /**
56
+ * Value object representing a branch name
57
+ */
58
+ export class BranchName {
59
+ value;
60
+ constructor(name) {
61
+ this.value = validateBranchName(name);
62
+ }
63
+ toString() {
64
+ return this.value;
65
+ }
66
+ /**
67
+ * Gets the worktree folder name for this branch
68
+ * @returns Folder name
69
+ */
70
+ toFolderName() {
71
+ return deriveWorktreeFolderName(this.value);
72
+ }
73
+ /**
74
+ * Checks if this is the main/default branch
75
+ * @param defaultBranch - The default branch name (default: 'main')
76
+ * @returns True if this is the default branch
77
+ */
78
+ isDefault(defaultBranch = 'main') {
79
+ return this.value.toLowerCase() === defaultBranch.toLowerCase();
80
+ }
81
+ equals(other) {
82
+ if (other instanceof BranchName) {
83
+ return this.value === other.value;
84
+ }
85
+ return this.value === other;
86
+ }
87
+ }
88
+ //# sourceMappingURL=branch-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-validator.js","sourceRoot":"","sources":["../../src/domain/branch-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IACL,KAAK,CAAS;IAE9B,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,gBAAwB,MAAM;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Git URL parsing utilities
3
+ */
4
+ export interface GitUrlParts {
5
+ org: string;
6
+ repo: string;
7
+ url: string;
8
+ }
9
+ /**
10
+ * Parses a Git repository URL into org and repo components
11
+ * @param input - Repository URL (SSH, HTTPS, or path format)
12
+ * @returns Object with {org, repo, url} properties
13
+ * @throws {Error} If URL cannot be parsed
14
+ */
15
+ export declare function parseRepositoryUrl(input: string): GitUrlParts;
16
+ /**
17
+ * Value object representing a parsed Git URL
18
+ */
19
+ export declare class GitUrl {
20
+ readonly org: string;
21
+ readonly repo: string;
22
+ readonly url: string;
23
+ constructor(url: string);
24
+ toString(): string;
25
+ toIdentifier(): string;
26
+ }
27
+ //# sourceMappingURL=git-url-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-url-parser.d.ts","sourceRoot":"","sources":["../../src/domain/git-url-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CA0D7D;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,GAAG,EAAE,MAAM,CAAC;gBAEhB,GAAG,EAAE,MAAM;IAOvB,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Git URL parsing utilities
3
+ */
4
+ /**
5
+ * Parses a Git repository URL into org and repo components
6
+ * @param input - Repository URL (SSH, HTTPS, or path format)
7
+ * @returns Object with {org, repo, url} properties
8
+ * @throws {Error} If URL cannot be parsed
9
+ */
10
+ export function parseRepositoryUrl(input) {
11
+ if (typeof input !== 'string' || !input.trim()) {
12
+ throw new Error('Repository URL is required');
13
+ }
14
+ const trimmed = input.trim();
15
+ let org = '';
16
+ let repo = '';
17
+ // Try SSH format: git@github.com:org/repo.git
18
+ const sshMatch = trimmed.match(/^git@[^:]+:([^/]+)\/(.+)$/);
19
+ if (sshMatch) {
20
+ org = sshMatch[1];
21
+ repo = sshMatch[2];
22
+ }
23
+ else {
24
+ // Try HTTPS/HTTP URL format
25
+ try {
26
+ if (/^[a-z]+:\/\//i.test(trimmed)) {
27
+ const url = new URL(trimmed);
28
+ const parts = url.pathname.replace(/^\//, '').split('/').filter(Boolean);
29
+ if (parts.length >= 2) {
30
+ org = parts[parts.length - 2];
31
+ repo = parts[parts.length - 1];
32
+ }
33
+ }
34
+ }
35
+ catch {
36
+ // ignore URL parsing errors and fall back to manual parsing
37
+ }
38
+ // If not parsed yet, try path-like format
39
+ if (!org || !repo) {
40
+ const cleaned = trimmed.replace(/\.git$/, '');
41
+ const segments = cleaned.split(/[\\/]+/).filter(Boolean);
42
+ if (segments.length >= 2) {
43
+ org = segments[segments.length - 2];
44
+ repo = segments[segments.length - 1];
45
+ }
46
+ }
47
+ // Try colon-separated format (alternate SSH style)
48
+ if ((!org || !repo) && trimmed.includes(':')) {
49
+ const tail = trimmed.split(':').pop() || '';
50
+ const segments = tail.replace(/\.git$/, '').split('/').filter(Boolean);
51
+ if (segments.length >= 2) {
52
+ org = segments[segments.length - 2];
53
+ repo = segments[segments.length - 1];
54
+ }
55
+ }
56
+ }
57
+ // Remove .git extension from repo name
58
+ repo = repo ? repo.replace(/\.git$/, '') : repo;
59
+ if (!org || !repo) {
60
+ throw new Error('Unable to determine repository organisation and name from URL');
61
+ }
62
+ return { org, repo, url: trimmed };
63
+ }
64
+ /**
65
+ * Value object representing a parsed Git URL
66
+ */
67
+ export class GitUrl {
68
+ org;
69
+ repo;
70
+ url;
71
+ constructor(url) {
72
+ const parsed = parseRepositoryUrl(url);
73
+ this.org = parsed.org;
74
+ this.repo = parsed.repo;
75
+ this.url = parsed.url;
76
+ }
77
+ toString() {
78
+ return this.url;
79
+ }
80
+ toIdentifier() {
81
+ return `${this.org}/${this.repo}`;
82
+ }
83
+ }
84
+ //# sourceMappingURL=git-url-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-url-parser.js","sourceRoot":"","sources":["../../src/domain/git-url-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { parseRepositoryUrl, GitUrl } from './git-url-parser.js';
2
+ export type { GitUrlParts } from './git-url-parser.js';
3
+ export { normalizeBranchName, sanitizeBranchName, deriveWorktreeFolderName, validateBranchName, BranchName, } from './branch-validator.js';
4
+ export { Worktree, createWorktree } from './worktree.js';
5
+ export type { WorktreeData } from './worktree.js';
6
+ export { Repository, createRepository } from './repository.js';
7
+ export type { RepositoryData } from './repository.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { parseRepositoryUrl, GitUrl } from './git-url-parser.js';
2
+ export { normalizeBranchName, sanitizeBranchName, deriveWorktreeFolderName, validateBranchName, BranchName, } from './branch-validator.js';
3
+ export { Worktree, createWorktree } from './worktree.js';
4
+ export { Repository, createRepository } from './repository.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Repository domain entity
3
+ */
4
+ export interface RepositoryData {
5
+ org: string;
6
+ repo: string;
7
+ branches?: string[];
8
+ initCommand?: string;
9
+ }
10
+ /**
11
+ * Represents a Git repository
12
+ */
13
+ export declare class Repository {
14
+ readonly org: string;
15
+ readonly repo: string;
16
+ readonly branches: string[];
17
+ readonly initCommand: string;
18
+ constructor({ org, repo, branches, initCommand }: RepositoryData);
19
+ /**
20
+ * Gets the unique identifier for this repository
21
+ * @returns Format: org/repo
22
+ */
23
+ getId(): string;
24
+ /**
25
+ * Gets the repository path within the workdir
26
+ * @param workdir - The work directory root
27
+ * @returns Path to the repository
28
+ */
29
+ getPath(workdir: string): string;
30
+ /**
31
+ * Gets the main repository path (not a worktree)
32
+ * @param workdir - The work directory root
33
+ * @returns Path to the repository directory
34
+ */
35
+ getRepositoryPath(workdir: string): string;
36
+ /**
37
+ * Checks if the repository has any branches
38
+ * @returns True if there are branches
39
+ */
40
+ hasBranches(): boolean;
41
+ /**
42
+ * Checks if a specific branch exists
43
+ * @param branchName - Branch name to check
44
+ * @returns True if the branch exists
45
+ */
46
+ hasBranch(branchName: string): boolean;
47
+ toJSON(): RepositoryData;
48
+ }
49
+ /**
50
+ * Creates a repository instance from raw data
51
+ * @param data - Raw repository data
52
+ * @returns Repository instance
53
+ */
54
+ export declare function createRepository(data: RepositoryData): Repository;
55
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/domain/repository.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,EAAE,GAAG,EAAE,IAAI,EAAE,QAAa,EAAE,WAAgB,EAAE,EAAE,cAAc;IAO1E;;;OAGG;IACH,KAAK,IAAI,MAAM;IAIf;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI1C;;;OAGG;IACH,WAAW,IAAI,OAAO;IAItB;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAItC,MAAM,IAAI,cAAc;CAQzB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAEjE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Repository domain entity
3
+ */
4
+ /**
5
+ * Represents a Git repository
6
+ */
7
+ export class Repository {
8
+ org;
9
+ repo;
10
+ branches;
11
+ initCommand;
12
+ constructor({ org, repo, branches = [], initCommand = '' }) {
13
+ this.org = org;
14
+ this.repo = repo;
15
+ this.branches = branches;
16
+ this.initCommand = initCommand;
17
+ }
18
+ /**
19
+ * Gets the unique identifier for this repository
20
+ * @returns Format: org/repo
21
+ */
22
+ getId() {
23
+ return `${this.org}/${this.repo}`;
24
+ }
25
+ /**
26
+ * Gets the repository path within the workdir
27
+ * @param workdir - The work directory root
28
+ * @returns Path to the repository
29
+ */
30
+ getPath(workdir) {
31
+ return `${workdir}/${this.org}/${this.repo}`;
32
+ }
33
+ /**
34
+ * Gets the main repository path (not a worktree)
35
+ * @param workdir - The work directory root
36
+ * @returns Path to the repository directory
37
+ */
38
+ getRepositoryPath(workdir) {
39
+ return `${this.getPath(workdir)}/repository`;
40
+ }
41
+ /**
42
+ * Checks if the repository has any branches
43
+ * @returns True if there are branches
44
+ */
45
+ hasBranches() {
46
+ return this.branches.length > 0;
47
+ }
48
+ /**
49
+ * Checks if a specific branch exists
50
+ * @param branchName - Branch name to check
51
+ * @returns True if the branch exists
52
+ */
53
+ hasBranch(branchName) {
54
+ return this.branches.includes(branchName);
55
+ }
56
+ toJSON() {
57
+ return {
58
+ org: this.org,
59
+ repo: this.repo,
60
+ branches: this.branches,
61
+ initCommand: this.initCommand,
62
+ };
63
+ }
64
+ }
65
+ /**
66
+ * Creates a repository instance from raw data
67
+ * @param data - Raw repository data
68
+ * @returns Repository instance
69
+ */
70
+ export function createRepository(data) {
71
+ return new Repository(data);
72
+ }
73
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/domain/repository.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,MAAM,OAAO,UAAU;IACL,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,QAAQ,CAAW;IACnB,WAAW,CAAS;IAEpC,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAkB;QACxE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAe;QACrB,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAe;QAC/B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,UAAkB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM;QACJ,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}