agor-live 0.9.1 → 0.9.3

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 (322) hide show
  1. package/dist/cli/commands/admin/add-to-worktree-group.d.ts +16 -0
  2. package/dist/cli/commands/admin/add-to-worktree-group.js +55 -0
  3. package/dist/cli/commands/admin/create-symlink.d.ts +18 -0
  4. package/dist/cli/commands/admin/create-symlink.js +87 -0
  5. package/dist/cli/commands/admin/create-worktree-group.d.ts +15 -0
  6. package/dist/cli/commands/admin/create-worktree-group.js +60 -0
  7. package/dist/cli/commands/admin/delete-user.d.ts +16 -0
  8. package/dist/cli/commands/admin/delete-user.js +64 -0
  9. package/dist/cli/commands/admin/delete-worktree-group.d.ts +15 -0
  10. package/dist/cli/commands/admin/delete-worktree-group.js +50 -0
  11. package/dist/cli/commands/admin/ensure-user.d.ts +16 -0
  12. package/dist/cli/commands/admin/ensure-user.js +73 -0
  13. package/dist/cli/commands/admin/remove-from-worktree-group.d.ts +16 -0
  14. package/dist/cli/commands/admin/remove-from-worktree-group.js +55 -0
  15. package/dist/cli/commands/admin/remove-symlink.d.ts +17 -0
  16. package/dist/cli/commands/admin/remove-symlink.js +71 -0
  17. package/dist/cli/commands/admin/sync-unix.d.ts +65 -0
  18. package/dist/cli/commands/admin/sync-unix.js +913 -0
  19. package/dist/cli/commands/admin/sync-user-symlinks.d.ts +16 -0
  20. package/dist/cli/commands/admin/sync-user-symlinks.js +65 -0
  21. package/dist/cli/commands/board/add-session.js +4 -3
  22. package/dist/cli/commands/board/list.d.ts +4 -4
  23. package/dist/cli/commands/board/list.js +23 -8
  24. package/dist/cli/commands/daemon/start.js +4 -4
  25. package/dist/cli/commands/db/status.js +11 -11
  26. package/dist/cli/commands/repo/list.js +2 -1
  27. package/dist/cli/commands/session/list.js +2 -1
  28. package/dist/cli/commands/user/create.js +7 -1
  29. package/dist/cli/commands/worktree/list.d.ts +1 -0
  30. package/dist/cli/commands/worktree/list.js +24 -5
  31. package/dist/core/api/index.d.cts +8 -8
  32. package/dist/core/api/index.d.ts +8 -8
  33. package/dist/core/{board-B2Z7GiJs.d.cts → board-BGkmgUH3.d.cts} +1 -1
  34. package/dist/core/{board-C_w2_4Zm.d.ts → board-CKJQAhxz.d.ts} +1 -1
  35. package/dist/core/{board-comment-CaUiaZB5.d.cts → board-comment-D9NA4gOJ.d.cts} +1 -1
  36. package/dist/core/{board-comment-BCrDUioT.d.ts → board-comment-rH4c6eVl.d.ts} +1 -1
  37. package/dist/core/claude/index.cjs +66 -0
  38. package/dist/core/claude/index.d.cts +3 -3
  39. package/dist/core/claude/index.d.ts +3 -3
  40. package/dist/core/claude/index.js +70 -3
  41. package/dist/core/{client-CmbZana3.d.ts → client-By3Q6aQA.d.ts} +346 -7
  42. package/dist/core/{client-Dw-WpF2X.d.cts → client-KDgnPBwr.d.cts} +346 -7
  43. package/dist/core/config/browser.cjs +13 -5
  44. package/dist/core/config/browser.d.cts +29 -7
  45. package/dist/core/config/browser.d.ts +29 -7
  46. package/dist/core/config/browser.js +12 -5
  47. package/dist/core/config/index.cjs +125 -6
  48. package/dist/core/config/index.d.cts +51 -9
  49. package/dist/core/config/index.d.ts +51 -9
  50. package/dist/core/config/index.js +125 -9
  51. package/dist/core/db/index.cjs +203 -9
  52. package/dist/core/db/index.d.cts +371 -13
  53. package/dist/core/db/index.d.ts +371 -13
  54. package/dist/core/db/index.js +206 -13
  55. package/dist/core/drizzle/postgres/0006_lonely_kid_colt.sql +13 -0
  56. package/dist/core/drizzle/postgres/0007_backfill_session_unix_username.sql +10 -0
  57. package/dist/core/drizzle/postgres/0008_add_repos_unix_group.sql +6 -0
  58. package/dist/core/drizzle/postgres/meta/0006_snapshot.json +1913 -0
  59. package/dist/core/drizzle/postgres/meta/0007_snapshot.json +1913 -0
  60. package/dist/core/drizzle/postgres/meta/_journal.json +21 -0
  61. package/dist/core/drizzle/sqlite/0016_gorgeous_talkback.sql +15 -0
  62. package/dist/core/drizzle/sqlite/0017_backfill_worktree_owners.sql +17 -0
  63. package/dist/core/drizzle/sqlite/0018_fantastic_bruce_banner.sql +11 -0
  64. package/dist/core/drizzle/sqlite/0019_backfill_session_unix_username.sql +10 -0
  65. package/dist/core/drizzle/sqlite/0020_add_repos_unix_group.sql +6 -0
  66. package/dist/core/drizzle/sqlite/meta/0018_snapshot.json +1491 -0
  67. package/dist/core/drizzle/sqlite/meta/_journal.json +35 -0
  68. package/dist/core/environment/variable-resolver.d.cts +2 -2
  69. package/dist/core/environment/variable-resolver.d.ts +2 -2
  70. package/dist/core/git/index.cjs +181 -22
  71. package/dist/core/git/index.d.cts +3 -0
  72. package/dist/core/git/index.d.ts +3 -0
  73. package/dist/core/git/index.js +171 -12
  74. package/dist/core/{id-DMqyogFB.d.cts → id-BwPJtWxW.d.cts} +10 -1
  75. package/dist/core/{id-DMqyogFB.d.ts → id-BwPJtWxW.d.ts} +10 -1
  76. package/dist/core/index.cjs +2633 -324
  77. package/dist/core/index.d.cts +14 -13
  78. package/dist/core/index.d.ts +14 -13
  79. package/dist/core/index.js +2592 -333
  80. package/dist/core/lib/feathers-validation.cjs +22 -0
  81. package/dist/core/lib/feathers-validation.d.cts +7 -0
  82. package/dist/core/lib/feathers-validation.d.ts +7 -0
  83. package/dist/core/lib/feathers-validation.js +22 -0
  84. package/dist/core/{mcp-DSOuQVMG.d.ts → mcp-C-LwrhHt.d.ts} +1 -1
  85. package/dist/core/{mcp-DkU4JIC7.d.cts → mcp-oU9TGu_S.d.cts} +1 -1
  86. package/dist/core/{message-CAbh3Khf.d.ts → message-BFjPtffm.d.cts} +2 -1
  87. package/dist/core/{message-C_1y_b7x.d.cts → message-Di6ZwIjG.d.ts} +2 -1
  88. package/dist/core/models/index.cjs +12 -1
  89. package/dist/core/models/index.d.cts +4 -1
  90. package/dist/core/models/index.d.ts +4 -1
  91. package/dist/core/models/index.js +12 -1
  92. package/dist/core/package.json +5 -0
  93. package/dist/core/permissions/index.d.cts +2 -2
  94. package/dist/core/permissions/index.d.ts +2 -2
  95. package/dist/core/{repo-B0KNo4W_.d.ts → repo-DbOIBw1c.d.cts} +48 -2
  96. package/dist/core/{repo-0YtK09JC.d.cts → repo-DkEPOBbI.d.ts} +48 -2
  97. package/dist/core/seed/index.cjs +2749 -109
  98. package/dist/core/seed/index.d.cts +1 -1
  99. package/dist/core/seed/index.d.ts +1 -1
  100. package/dist/core/seed/index.js +2740 -100
  101. package/dist/core/{session-R4RTxPVT.d.cts → session-DE9tT7Cm.d.cts} +16 -1
  102. package/dist/core/{session-DfGoKd8r.d.ts → session-DrzT_Csl.d.ts} +16 -1
  103. package/dist/core/{task-Ct74zwxQ.d.ts → task-D0i_mU9u.d.ts} +1 -1
  104. package/dist/core/{task-aE2IEwMQ.d.cts → task-D5cWUcAY.d.cts} +1 -1
  105. package/dist/core/templates/session-context.d.cts +3 -3
  106. package/dist/core/templates/session-context.d.ts +3 -3
  107. package/dist/core/tools/mcp/jwt-auth.d.cts +2 -2
  108. package/dist/core/tools/mcp/jwt-auth.d.ts +2 -2
  109. package/dist/core/types/index.d.cts +11 -11
  110. package/dist/core/types/index.d.ts +11 -11
  111. package/dist/core/unix/index.cjs +4445 -0
  112. package/dist/core/unix/index.d.cts +1351 -0
  113. package/dist/core/unix/index.d.ts +1351 -0
  114. package/dist/core/unix/index.js +4383 -0
  115. package/dist/core/{user-DRaair5H.d.ts → user-CMQOATsn.d.ts} +2 -2
  116. package/dist/core/{user-B6hR_eUg.d.cts → user-zv1BTkAp.d.cts} +2 -2
  117. package/dist/core/utils/permission-mode-mapper.d.cts +2 -2
  118. package/dist/core/utils/permission-mode-mapper.d.ts +2 -2
  119. package/dist/daemon/index.d.ts +1 -23
  120. package/dist/daemon/index.js +1913 -594
  121. package/dist/daemon/mcp/routes.js +17 -19
  122. package/dist/daemon/mcp/tokens.js +17 -19
  123. package/dist/daemon/services/board-comments.js +5 -4
  124. package/dist/daemon/services/boards.js +3 -2
  125. package/dist/daemon/services/config.d.ts +21 -2
  126. package/dist/daemon/services/config.js +37 -3
  127. package/dist/daemon/services/mcp-servers.d.ts +2 -7
  128. package/dist/daemon/services/mcp-servers.js +3 -2
  129. package/dist/daemon/services/messages.js +3 -3
  130. package/dist/daemon/services/repos.d.ts +7 -0
  131. package/dist/daemon/services/repos.js +46 -5
  132. package/dist/daemon/services/sessions.js +3 -3
  133. package/dist/daemon/services/tasks.js +12 -14
  134. package/dist/daemon/services/terminals.js +209 -91
  135. package/dist/daemon/services/unix-integration.d.ts +38 -0
  136. package/dist/daemon/services/unix-integration.js +15 -0
  137. package/dist/daemon/services/worktree-owners.d.ts +34 -0
  138. package/dist/daemon/services/worktree-owners.js +185 -0
  139. package/dist/daemon/services/worktrees.d.ts +2 -13
  140. package/dist/daemon/services/worktrees.js +3 -3
  141. package/dist/daemon/setup/cors.d.ts +38 -0
  142. package/dist/daemon/setup/cors.js +44 -0
  143. package/dist/daemon/setup/credentials.d.ts +54 -0
  144. package/dist/daemon/setup/credentials.js +39 -0
  145. package/dist/daemon/setup/database.d.ts +28 -0
  146. package/dist/daemon/setup/database.js +60 -0
  147. package/dist/daemon/setup/index.d.ts +9 -0
  148. package/dist/daemon/setup/index.js +339 -0
  149. package/dist/daemon/setup/socketio.d.ts +61 -0
  150. package/dist/daemon/setup/socketio.js +135 -0
  151. package/dist/daemon/setup/swagger.d.ts +30 -0
  152. package/dist/daemon/setup/swagger.js +35 -0
  153. package/dist/daemon/setup/version.d.ts +19 -0
  154. package/dist/daemon/setup/version.js +31 -0
  155. package/dist/daemon/utils/worktree-authorization.d.ts +211 -0
  156. package/dist/daemon/utils/worktree-authorization.js +389 -0
  157. package/dist/executor/handlers/sdk/base-executor.d.ts +16 -1
  158. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  159. package/dist/executor/handlers/sdk/base-executor.js +51 -45
  160. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  161. package/dist/executor/handlers/sdk/codex.js +1 -2
  162. package/dist/executor/handlers/sdk/gemini.d.ts.map +1 -1
  163. package/dist/executor/handlers/sdk/gemini.js +0 -1
  164. package/dist/executor/index.d.ts.map +1 -1
  165. package/dist/executor/index.js +2 -1
  166. package/dist/executor/sdk-handlers/base/index.d.ts +2 -0
  167. package/dist/executor/sdk-handlers/base/index.d.ts.map +1 -1
  168. package/dist/executor/sdk-handlers/base/index.js +3 -0
  169. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +11 -9
  170. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
  171. package/dist/executor/sdk-handlers/base/mcp-scoping.js +37 -35
  172. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +27 -9
  173. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  174. package/dist/executor/sdk-handlers/claude/claude-tool.js +162 -30
  175. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +1 -1
  176. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +1 -0
  177. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +6 -35
  178. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +1 -1
  179. package/dist/executor/sdk-handlers/claude/prompt-service.js +18 -149
  180. package/dist/executor/sdk-handlers/claude/query-builder.d.ts +1 -0
  181. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  182. package/dist/executor/sdk-handlers/claude/query-builder.js +9 -3
  183. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +1 -3
  184. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  185. package/dist/executor/sdk-handlers/codex/codex-tool.js +2 -3
  186. package/dist/executor/sdk-handlers/codex/models.d.ts +5 -1
  187. package/dist/executor/sdk-handlers/codex/models.d.ts.map +1 -1
  188. package/dist/executor/sdk-handlers/codex/models.js +12 -2
  189. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +1 -9
  190. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  191. package/dist/executor/sdk-handlers/codex/prompt-service.js +8 -59
  192. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +1 -3
  193. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
  194. package/dist/executor/sdk-handlers/gemini/gemini-tool.js +2 -3
  195. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +1 -7
  196. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
  197. package/dist/executor/sdk-handlers/gemini/prompt-service.js +2 -4
  198. package/dist/executor/sdk-handlers/normalizer-factory.d.ts +20 -0
  199. package/dist/executor/sdk-handlers/normalizer-factory.d.ts.map +1 -0
  200. package/dist/executor/sdk-handlers/normalizer-factory.js +50 -0
  201. package/dist/ui/assets/{_basePickBy-CSKUfP7j.js → _basePickBy-CSYiZMse.js} +1 -1
  202. package/dist/ui/assets/_basePickBy-CSYiZMse.js.gz +0 -0
  203. package/dist/ui/assets/{_baseUniq-DIKTEiNL.js → _baseUniq-DvtGUhEt.js} +1 -1
  204. package/dist/ui/assets/_baseUniq-DvtGUhEt.js.gz +0 -0
  205. package/dist/ui/assets/{arc-sbYOJBrJ.js → arc-BRr5j3D1.js} +1 -1
  206. package/dist/ui/assets/arc-BRr5j3D1.js.gz +0 -0
  207. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-5ryI022m.js → architectureDiagram-VXUJARFQ-ebBOi_gK.js} +1 -1
  208. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-5ryI022m.js.gz → architectureDiagram-VXUJARFQ-ebBOi_gK.js.gz} +0 -0
  209. package/dist/ui/assets/{blockDiagram-VD42YOAC-CoRqNSHt.js → blockDiagram-VD42YOAC-DxejLyQ-.js} +1 -1
  210. package/dist/ui/assets/blockDiagram-VD42YOAC-DxejLyQ-.js.gz +0 -0
  211. package/dist/ui/assets/{c4Diagram-YG6GDRKO-BNUpZ9b4.js → c4Diagram-YG6GDRKO-DFKl-efs.js} +1 -1
  212. package/dist/ui/assets/c4Diagram-YG6GDRKO-DFKl-efs.js.gz +0 -0
  213. package/dist/ui/assets/channel-D2mEA-Bx.js +1 -0
  214. package/dist/ui/assets/{chunk-4BX2VUAB-CcbmxtyM.js → chunk-4BX2VUAB-jMOQ1WDz.js} +1 -1
  215. package/dist/ui/assets/{chunk-55IACEB6-DyVNi0C9.js → chunk-55IACEB6-D1M6UwZY.js} +1 -1
  216. package/dist/ui/assets/{chunk-B4BG7PRW-aFbcnJA9.js → chunk-B4BG7PRW-COzn6OFE.js} +1 -1
  217. package/dist/ui/assets/chunk-B4BG7PRW-COzn6OFE.js.gz +0 -0
  218. package/dist/ui/assets/{chunk-DI55MBZ5-CjBPJlKS.js → chunk-DI55MBZ5-6QssijTz.js} +1 -1
  219. package/dist/ui/assets/chunk-DI55MBZ5-6QssijTz.js.gz +0 -0
  220. package/dist/ui/assets/{chunk-FMBD7UC4-CgQsLuEk.js → chunk-FMBD7UC4-BnG1D5CH.js} +1 -1
  221. package/dist/ui/assets/{chunk-QN33PNHL-B4s4cFua.js → chunk-QN33PNHL-C6hCjMzw.js} +1 -1
  222. package/dist/ui/assets/{chunk-QZHKN3VN-Dcr26kTo.js → chunk-QZHKN3VN-CKLJgdZH.js} +1 -1
  223. package/dist/ui/assets/{chunk-TZMSLE5B-DyLZcsIh.js → chunk-TZMSLE5B-DYJXqHip.js} +1 -1
  224. package/dist/ui/assets/chunk-TZMSLE5B-DYJXqHip.js.gz +0 -0
  225. package/dist/ui/assets/classDiagram-2ON5EDUG-CQUXqjFU.js +1 -0
  226. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CQUXqjFU.js +1 -0
  227. package/dist/ui/assets/clone-DLz_t3PG.js +1 -0
  228. package/dist/ui/assets/{cose-bilkent-S5V4N54A-B35Z62lC.js → cose-bilkent-S5V4N54A-DBdRhd2a.js} +1 -1
  229. package/dist/ui/assets/cose-bilkent-S5V4N54A-DBdRhd2a.js.gz +0 -0
  230. package/dist/ui/assets/{dagre-6UL2VRFP-CgjwdHKI.js → dagre-6UL2VRFP-BURrt6xz.js} +1 -1
  231. package/dist/ui/assets/dagre-6UL2VRFP-BURrt6xz.js.gz +0 -0
  232. package/dist/ui/assets/{diagram-PSM6KHXK-Dqsjy4In.js → diagram-PSM6KHXK-yPFDWvxo.js} +1 -1
  233. package/dist/ui/assets/diagram-PSM6KHXK-yPFDWvxo.js.gz +0 -0
  234. package/dist/ui/assets/{diagram-QEK2KX5R-H0JyTjAC.js → diagram-QEK2KX5R-DQP7GvBM.js} +1 -1
  235. package/dist/ui/assets/diagram-QEK2KX5R-DQP7GvBM.js.gz +0 -0
  236. package/dist/ui/assets/{diagram-S2PKOQOG-cGTKsSdf.js → diagram-S2PKOQOG-Ceh9L5Ft.js} +1 -1
  237. package/dist/ui/assets/diagram-S2PKOQOG-Ceh9L5Ft.js.gz +0 -0
  238. package/dist/ui/assets/{erDiagram-Q2GNP2WA-CMhD618Z.js → erDiagram-Q2GNP2WA-BGBdyrlr.js} +1 -1
  239. package/dist/ui/assets/erDiagram-Q2GNP2WA-BGBdyrlr.js.gz +0 -0
  240. package/dist/ui/assets/{flowDiagram-NV44I4VS-BBWrSv9f.js → flowDiagram-NV44I4VS-BXuoem71.js} +1 -1
  241. package/dist/ui/assets/flowDiagram-NV44I4VS-BXuoem71.js.gz +0 -0
  242. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-COTsahhy.js → ganttDiagram-LVOFAZNH-D96TAOYN.js} +1 -1
  243. package/dist/ui/assets/ganttDiagram-LVOFAZNH-D96TAOYN.js.gz +0 -0
  244. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CpPcbhL4.js → gitGraphDiagram-NY62KEGX-CsUtGEJW.js} +1 -1
  245. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CsUtGEJW.js.gz +0 -0
  246. package/dist/ui/assets/{graph-CaUUuk2b.js → graph-DmuZZZ0O.js} +1 -1
  247. package/dist/ui/assets/graph-DmuZZZ0O.js.gz +0 -0
  248. package/dist/ui/assets/{index-BFSIFisK.js → index-DPUzz4vA.js} +227 -227
  249. package/dist/ui/assets/index-DPUzz4vA.js.gz +0 -0
  250. package/dist/ui/assets/{infoDiagram-ER5ION4S-D9bYXwgs.js → infoDiagram-ER5ION4S-DcxAd1Yp.js} +1 -1
  251. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-D-fQyBX6.js → journeyDiagram-XKPGCS4Q-CFtlwkTr.js} +1 -1
  252. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CFtlwkTr.js.gz +0 -0
  253. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-Bsrta5Q0.js → kanban-definition-3W4ZIXB7-B74pWt6y.js} +1 -1
  254. package/dist/ui/assets/kanban-definition-3W4ZIXB7-B74pWt6y.js.gz +0 -0
  255. package/dist/ui/assets/{layout-CvUnICud.js → layout-DpFHdru9.js} +1 -1
  256. package/dist/ui/assets/layout-DpFHdru9.js.gz +0 -0
  257. package/dist/ui/assets/{linear-JQRjU_O2.js → linear-yVuUIGbC.js} +1 -1
  258. package/dist/ui/assets/linear-yVuUIGbC.js.gz +0 -0
  259. package/dist/ui/assets/{mermaid.core-l2pRFxg2.js → mermaid.core-CbMbakdH.js} +5 -5
  260. package/dist/ui/assets/mermaid.core-CbMbakdH.js.gz +0 -0
  261. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-BE9OTGAL.js → mindmap-definition-VGOIOE7T-XYo0CUDk.js} +1 -1
  262. package/dist/ui/assets/mindmap-definition-VGOIOE7T-XYo0CUDk.js.gz +0 -0
  263. package/dist/ui/assets/{pieDiagram-ADFJNKIX-Du11lDYa.js → pieDiagram-ADFJNKIX-b64mzYsL.js} +1 -1
  264. package/dist/ui/assets/pieDiagram-ADFJNKIX-b64mzYsL.js.gz +0 -0
  265. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C5VnaKT4.js → quadrantDiagram-AYHSOK5B-CzbNszXu.js} +1 -1
  266. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CzbNszXu.js.gz +0 -0
  267. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-Di5WX35O.js → requirementDiagram-UZGBJVZJ-ftflJl3O.js} +1 -1
  268. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-ftflJl3O.js.gz +0 -0
  269. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BEmt-BaF.js → sankeyDiagram-TZEHDZUN-8PGribEE.js} +1 -1
  270. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-8PGribEE.js.gz +0 -0
  271. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-CcpImmbu.js → sequenceDiagram-WL72ISMW-B14pbZEr.js} +1 -1
  272. package/dist/ui/assets/sequenceDiagram-WL72ISMW-B14pbZEr.js.gz +0 -0
  273. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-du-BIRKS.js → stateDiagram-FKZM4ZOC-Ddx2Kkc3.js} +1 -1
  274. package/dist/ui/assets/stateDiagram-FKZM4ZOC-Ddx2Kkc3.js.gz +0 -0
  275. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-ppKXpQQ4.js +1 -0
  276. package/dist/ui/assets/{timeline-definition-IT6M3QCI-KCTVxIDH.js → timeline-definition-IT6M3QCI-bS_0u_jC.js} +1 -1
  277. package/dist/ui/assets/timeline-definition-IT6M3QCI-bS_0u_jC.js.gz +0 -0
  278. package/dist/ui/assets/{treemap-KMMF4GRG-BSn0TM49.js → treemap-KMMF4GRG-CZHIJMKL.js} +1 -1
  279. package/dist/ui/assets/treemap-KMMF4GRG-CZHIJMKL.js.gz +0 -0
  280. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BFUjOdrD.js → xychartDiagram-PRI3JC2R-DOTWxgqQ.js} +1 -1
  281. package/dist/ui/assets/xychartDiagram-PRI3JC2R-DOTWxgqQ.js.gz +0 -0
  282. package/dist/ui/index.html +2 -2
  283. package/package.json +4 -4
  284. package/dist/ui/assets/_basePickBy-CSKUfP7j.js.gz +0 -0
  285. package/dist/ui/assets/_baseUniq-DIKTEiNL.js.gz +0 -0
  286. package/dist/ui/assets/arc-sbYOJBrJ.js.gz +0 -0
  287. package/dist/ui/assets/blockDiagram-VD42YOAC-CoRqNSHt.js.gz +0 -0
  288. package/dist/ui/assets/c4Diagram-YG6GDRKO-BNUpZ9b4.js.gz +0 -0
  289. package/dist/ui/assets/channel-B54XPW_W.js +0 -1
  290. package/dist/ui/assets/chunk-B4BG7PRW-aFbcnJA9.js.gz +0 -0
  291. package/dist/ui/assets/chunk-DI55MBZ5-CjBPJlKS.js.gz +0 -0
  292. package/dist/ui/assets/chunk-TZMSLE5B-DyLZcsIh.js.gz +0 -0
  293. package/dist/ui/assets/classDiagram-2ON5EDUG-CIlZ92XI.js +0 -1
  294. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CIlZ92XI.js +0 -1
  295. package/dist/ui/assets/clone-FME9bcXD.js +0 -1
  296. package/dist/ui/assets/cose-bilkent-S5V4N54A-B35Z62lC.js.gz +0 -0
  297. package/dist/ui/assets/dagre-6UL2VRFP-CgjwdHKI.js.gz +0 -0
  298. package/dist/ui/assets/diagram-PSM6KHXK-Dqsjy4In.js.gz +0 -0
  299. package/dist/ui/assets/diagram-QEK2KX5R-H0JyTjAC.js.gz +0 -0
  300. package/dist/ui/assets/diagram-S2PKOQOG-cGTKsSdf.js.gz +0 -0
  301. package/dist/ui/assets/erDiagram-Q2GNP2WA-CMhD618Z.js.gz +0 -0
  302. package/dist/ui/assets/flowDiagram-NV44I4VS-BBWrSv9f.js.gz +0 -0
  303. package/dist/ui/assets/ganttDiagram-LVOFAZNH-COTsahhy.js.gz +0 -0
  304. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CpPcbhL4.js.gz +0 -0
  305. package/dist/ui/assets/graph-CaUUuk2b.js.gz +0 -0
  306. package/dist/ui/assets/index-BFSIFisK.js.gz +0 -0
  307. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-D-fQyBX6.js.gz +0 -0
  308. package/dist/ui/assets/kanban-definition-3W4ZIXB7-Bsrta5Q0.js.gz +0 -0
  309. package/dist/ui/assets/layout-CvUnICud.js.gz +0 -0
  310. package/dist/ui/assets/linear-JQRjU_O2.js.gz +0 -0
  311. package/dist/ui/assets/mermaid.core-l2pRFxg2.js.gz +0 -0
  312. package/dist/ui/assets/mindmap-definition-VGOIOE7T-BE9OTGAL.js.gz +0 -0
  313. package/dist/ui/assets/pieDiagram-ADFJNKIX-Du11lDYa.js.gz +0 -0
  314. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C5VnaKT4.js.gz +0 -0
  315. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Di5WX35O.js.gz +0 -0
  316. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BEmt-BaF.js.gz +0 -0
  317. package/dist/ui/assets/sequenceDiagram-WL72ISMW-CcpImmbu.js.gz +0 -0
  318. package/dist/ui/assets/stateDiagram-FKZM4ZOC-du-BIRKS.js.gz +0 -0
  319. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BrFSQTTM.js +0 -1
  320. package/dist/ui/assets/timeline-definition-IT6M3QCI-KCTVxIDH.js.gz +0 -0
  321. package/dist/ui/assets/treemap-KMMF4GRG-BSn0TM49.js.gz +0 -0
  322. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BFUjOdrD.js.gz +0 -0
@@ -0,0 +1,16 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class AddToWorktreeGroup extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ group: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
10
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+
16
+ export { AddToWorktreeGroup as default };
@@ -0,0 +1,55 @@
1
+ // src/commands/admin/add-to-worktree-group.ts
2
+ import { createAdminExecutor, UnixGroupCommands } from "@agor/core/unix";
3
+ import { Command, Flags } from "@oclif/core";
4
+ var AddToWorktreeGroup = class _AddToWorktreeGroup extends Command {
5
+ static description = "Add a user to a worktree Unix group (admin only)";
6
+ static examples = [
7
+ "<%= config.bin %> <%= command.id %> --username alice --group agor_wt_03b62447",
8
+ "<%= config.bin %> <%= command.id %> --username alice --group agor_wt_03b62447 --dry-run"
9
+ ];
10
+ static flags = {
11
+ username: Flags.string({
12
+ char: "u",
13
+ description: "Unix username to add",
14
+ required: true
15
+ }),
16
+ group: Flags.string({
17
+ char: "g",
18
+ description: "Unix group name (e.g., agor_wt_03b62447)",
19
+ required: true
20
+ }),
21
+ "dry-run": Flags.boolean({
22
+ char: "n",
23
+ description: "Show what would be done without making changes",
24
+ default: false
25
+ }),
26
+ verbose: Flags.boolean({
27
+ char: "v",
28
+ description: "Show detailed output including command stdout/stderr",
29
+ default: false
30
+ })
31
+ };
32
+ async run() {
33
+ const { flags } = await this.parse(_AddToWorktreeGroup);
34
+ const { username, group, verbose } = flags;
35
+ const dryRun = flags["dry-run"];
36
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
37
+ if (dryRun) {
38
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
39
+ }
40
+ const isInGroup = await executor.check(UnixGroupCommands.isUserInGroup(username, group));
41
+ if (isInGroup) {
42
+ this.log(`\u2705 User ${username} is already in group ${group}`);
43
+ return;
44
+ }
45
+ try {
46
+ await executor.exec(UnixGroupCommands.addUserToGroup(username, group));
47
+ this.log(`\u2705 Added user ${username} to group ${group}`);
48
+ } catch (error) {
49
+ this.error(`Failed to add user ${username} to group ${group}: ${error}`);
50
+ }
51
+ }
52
+ };
53
+ export {
54
+ AddToWorktreeGroup as default
55
+ };
@@ -0,0 +1,18 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class CreateSymlink extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'worktree-name': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
10
+ 'worktree-path': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
11
+ 'home-base': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
12
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
13
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+
18
+ export { CreateSymlink as default };
@@ -0,0 +1,87 @@
1
+ // src/commands/admin/create-symlink.ts
2
+ import {
3
+ AGOR_HOME_BASE,
4
+ createAdminExecutor,
5
+ getWorktreeSymlinkPath,
6
+ isValidUnixUsername,
7
+ SymlinkCommands
8
+ } from "@agor/core/unix";
9
+ import { Command, Flags } from "@oclif/core";
10
+ var CreateSymlink = class _CreateSymlink extends Command {
11
+ static description = "Create a worktree symlink in user home directory (admin only)";
12
+ static examples = [
13
+ "<%= config.bin %> <%= command.id %> --username alice --worktree-name my-feature --worktree-path /var/agor/worktrees/abc123",
14
+ "<%= config.bin %> <%= command.id %> --username alice --worktree-name my-feature --worktree-path /var/agor/worktrees/abc123 --dry-run"
15
+ ];
16
+ static flags = {
17
+ username: Flags.string({
18
+ char: "u",
19
+ description: "Unix username (owner of symlink)",
20
+ required: true
21
+ }),
22
+ "worktree-name": Flags.string({
23
+ char: "w",
24
+ description: "Worktree name/slug (symlink name)",
25
+ required: true
26
+ }),
27
+ "worktree-path": Flags.string({
28
+ char: "p",
29
+ description: "Absolute path to worktree directory (symlink target)",
30
+ required: true
31
+ }),
32
+ "home-base": Flags.string({
33
+ description: "Base directory for home directories",
34
+ default: AGOR_HOME_BASE
35
+ }),
36
+ "dry-run": Flags.boolean({
37
+ char: "n",
38
+ description: "Show what would be done without making changes",
39
+ default: false
40
+ }),
41
+ verbose: Flags.boolean({
42
+ char: "v",
43
+ description: "Show detailed output including command stdout/stderr",
44
+ default: false
45
+ })
46
+ };
47
+ async run() {
48
+ const { flags } = await this.parse(_CreateSymlink);
49
+ const { username, verbose } = flags;
50
+ const worktreeName = flags["worktree-name"];
51
+ const worktreePath = flags["worktree-path"];
52
+ const homeBase = flags["home-base"];
53
+ const dryRun = flags["dry-run"];
54
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
55
+ if (dryRun) {
56
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
57
+ }
58
+ if (!isValidUnixUsername(username)) {
59
+ this.error(`Invalid Unix username format: ${username}`);
60
+ }
61
+ if (!worktreePath.startsWith("/")) {
62
+ this.error(`Worktree path must be absolute: ${worktreePath}`);
63
+ }
64
+ const linkPath = getWorktreeSymlinkPath(username, worktreeName, homeBase);
65
+ try {
66
+ const result = await executor.exec(SymlinkCommands.readSymlink(linkPath));
67
+ const existingTarget = result.stdout.trim();
68
+ if (existingTarget === worktreePath) {
69
+ this.log(`\u2705 Symlink already exists: ${linkPath} -> ${worktreePath}`);
70
+ return;
71
+ }
72
+ this.log(`\u2139\uFE0F Updating symlink (was: ${existingTarget})`);
73
+ } catch {
74
+ }
75
+ try {
76
+ await executor.execAll(
77
+ SymlinkCommands.createSymlinkWithOwnership(worktreePath, linkPath, username)
78
+ );
79
+ this.log(`\u2705 Created symlink: ${linkPath} -> ${worktreePath}`);
80
+ } catch (error) {
81
+ this.error(`Failed to create symlink: ${error}`);
82
+ }
83
+ }
84
+ };
85
+ export {
86
+ CreateSymlink as default
87
+ };
@@ -0,0 +1,15 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class CreateWorktreeGroup extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ 'worktree-id': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
10
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+
15
+ export { CreateWorktreeGroup as default };
@@ -0,0 +1,60 @@
1
+ // src/commands/admin/create-worktree-group.ts
2
+ import {
3
+ createAdminExecutor,
4
+ generateWorktreeGroupName,
5
+ isValidWorktreeGroupName,
6
+ UnixGroupCommands
7
+ } from "@agor/core/unix";
8
+ import { Command, Flags } from "@oclif/core";
9
+ var CreateWorktreeGroup = class _CreateWorktreeGroup extends Command {
10
+ static description = "Create a Unix group for a worktree (admin only)";
11
+ static examples = [
12
+ "<%= config.bin %> <%= command.id %> --worktree-id 03b62447-f2c6-4259-997b-d38ed1ddafed",
13
+ "<%= config.bin %> <%= command.id %> --worktree-id 03b62447-f2c6-4259-997b-d38ed1ddafed --dry-run"
14
+ ];
15
+ static flags = {
16
+ "worktree-id": Flags.string({
17
+ char: "w",
18
+ description: "Worktree ID (full UUID)",
19
+ required: true
20
+ }),
21
+ "dry-run": Flags.boolean({
22
+ char: "n",
23
+ description: "Show what would be done without making changes",
24
+ default: false
25
+ }),
26
+ verbose: Flags.boolean({
27
+ char: "v",
28
+ description: "Show detailed output including command stdout/stderr",
29
+ default: false
30
+ })
31
+ };
32
+ async run() {
33
+ const { flags } = await this.parse(_CreateWorktreeGroup);
34
+ const worktreeId = flags["worktree-id"];
35
+ const dryRun = flags["dry-run"];
36
+ const verbose = flags.verbose;
37
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
38
+ if (dryRun) {
39
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
40
+ }
41
+ const groupName = generateWorktreeGroupName(worktreeId);
42
+ if (!isValidWorktreeGroupName(groupName)) {
43
+ this.error(`Invalid group name format: ${groupName}`);
44
+ }
45
+ const groupExists = await executor.check(UnixGroupCommands.groupExists(groupName));
46
+ if (groupExists) {
47
+ this.log(`\u2705 Group ${groupName} already exists`);
48
+ return;
49
+ }
50
+ try {
51
+ await executor.exec(UnixGroupCommands.createGroup(groupName));
52
+ this.log(`\u2705 Created Unix group: ${groupName}`);
53
+ } catch (error) {
54
+ this.error(`Failed to create group ${groupName}: ${error}`);
55
+ }
56
+ }
57
+ };
58
+ export {
59
+ CreateWorktreeGroup as default
60
+ };
@@ -0,0 +1,16 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class DeleteUser extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'delete-home': _oclif_core_interfaces.BooleanFlag<boolean>;
10
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+
16
+ export { DeleteUser as default };
@@ -0,0 +1,64 @@
1
+ // src/commands/admin/delete-user.ts
2
+ import { createAdminExecutor, isValidUnixUsername, UnixUserCommands } from "@agor/core/unix";
3
+ import { Command, Flags } from "@oclif/core";
4
+ var DeleteUser = class _DeleteUser extends Command {
5
+ static description = "Delete a Unix user (admin only)";
6
+ static examples = [
7
+ "<%= config.bin %> <%= command.id %> --username agor_03b62447",
8
+ "<%= config.bin %> <%= command.id %> --username agor_03b62447 --delete-home",
9
+ "<%= config.bin %> <%= command.id %> --username agor_03b62447 --dry-run"
10
+ ];
11
+ static flags = {
12
+ username: Flags.string({
13
+ char: "u",
14
+ description: "Unix username to delete",
15
+ required: true
16
+ }),
17
+ "delete-home": Flags.boolean({
18
+ description: "Also delete the user home directory",
19
+ default: false
20
+ }),
21
+ "dry-run": Flags.boolean({
22
+ char: "n",
23
+ description: "Show what would be done without making changes",
24
+ default: false
25
+ }),
26
+ verbose: Flags.boolean({
27
+ char: "v",
28
+ description: "Show detailed output including command stdout/stderr",
29
+ default: false
30
+ })
31
+ };
32
+ async run() {
33
+ const { flags } = await this.parse(_DeleteUser);
34
+ const { username, verbose } = flags;
35
+ const deleteHome = flags["delete-home"];
36
+ const dryRun = flags["dry-run"];
37
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
38
+ if (dryRun) {
39
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
40
+ }
41
+ if (!isValidUnixUsername(username)) {
42
+ this.error(`Invalid Unix username format: ${username}`);
43
+ }
44
+ const userExists = await executor.check(UnixUserCommands.userExists(username));
45
+ if (!userExists) {
46
+ this.log(`\u2705 Unix user ${username} does not exist (nothing to do)`);
47
+ return;
48
+ }
49
+ try {
50
+ if (deleteHome) {
51
+ await executor.exec(UnixUserCommands.deleteUserWithHome(username));
52
+ this.log(`\u2705 Deleted Unix user ${username} and home directory`);
53
+ } else {
54
+ await executor.exec(UnixUserCommands.deleteUser(username));
55
+ this.log(`\u2705 Deleted Unix user ${username} (home directory preserved)`);
56
+ }
57
+ } catch (error) {
58
+ this.error(`Failed to delete user ${username}: ${error}`);
59
+ }
60
+ }
61
+ };
62
+ export {
63
+ DeleteUser as default
64
+ };
@@ -0,0 +1,15 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class DeleteWorktreeGroup extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ group: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
10
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+
15
+ export { DeleteWorktreeGroup as default };
@@ -0,0 +1,50 @@
1
+ // src/commands/admin/delete-worktree-group.ts
2
+ import { createAdminExecutor, UnixGroupCommands } from "@agor/core/unix";
3
+ import { Command, Flags } from "@oclif/core";
4
+ var DeleteWorktreeGroup = class _DeleteWorktreeGroup extends Command {
5
+ static description = "Delete a worktree Unix group (admin only)";
6
+ static examples = [
7
+ "<%= config.bin %> <%= command.id %> --group agor_wt_03b62447",
8
+ "<%= config.bin %> <%= command.id %> --group agor_wt_03b62447 --dry-run"
9
+ ];
10
+ static flags = {
11
+ group: Flags.string({
12
+ char: "g",
13
+ description: "Unix group name to delete (e.g., agor_wt_03b62447)",
14
+ required: true
15
+ }),
16
+ "dry-run": Flags.boolean({
17
+ char: "n",
18
+ description: "Show what would be done without making changes",
19
+ default: false
20
+ }),
21
+ verbose: Flags.boolean({
22
+ char: "v",
23
+ description: "Show detailed output including command stdout/stderr",
24
+ default: false
25
+ })
26
+ };
27
+ async run() {
28
+ const { flags } = await this.parse(_DeleteWorktreeGroup);
29
+ const { group, verbose } = flags;
30
+ const dryRun = flags["dry-run"];
31
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
32
+ if (dryRun) {
33
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
34
+ }
35
+ const groupExists = await executor.check(UnixGroupCommands.groupExists(group));
36
+ if (!groupExists) {
37
+ this.log(`\u2705 Group ${group} doesn't exist (nothing to do)`);
38
+ return;
39
+ }
40
+ try {
41
+ await executor.exec(UnixGroupCommands.deleteGroup(group));
42
+ this.log(`\u2705 Deleted Unix group: ${group}`);
43
+ } catch (error) {
44
+ this.error(`Failed to delete group ${group}: ${error}`);
45
+ }
46
+ }
47
+ };
48
+ export {
49
+ DeleteWorktreeGroup as default
50
+ };
@@ -0,0 +1,16 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class EnsureUser extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'home-base': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
10
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+
16
+ export { EnsureUser as default };
@@ -0,0 +1,73 @@
1
+ // src/commands/admin/ensure-user.ts
2
+ import {
3
+ AGOR_HOME_BASE,
4
+ createAdminExecutor,
5
+ isValidUnixUsername,
6
+ UnixUserCommands
7
+ } from "@agor/core/unix";
8
+ import { Command, Flags } from "@oclif/core";
9
+ var EnsureUser = class _EnsureUser extends Command {
10
+ static description = "Ensure a Unix user exists with proper Agor setup (admin only)";
11
+ static examples = [
12
+ "<%= config.bin %> <%= command.id %> --username agor_03b62447",
13
+ "<%= config.bin %> <%= command.id %> --username alice --home-base /home",
14
+ "<%= config.bin %> <%= command.id %> --username alice --dry-run"
15
+ ];
16
+ static flags = {
17
+ username: Flags.string({
18
+ char: "u",
19
+ description: "Unix username to create/ensure",
20
+ required: true
21
+ }),
22
+ "home-base": Flags.string({
23
+ description: "Base directory for home directories",
24
+ default: AGOR_HOME_BASE
25
+ }),
26
+ "dry-run": Flags.boolean({
27
+ char: "n",
28
+ description: "Show what would be done without making changes",
29
+ default: false
30
+ }),
31
+ verbose: Flags.boolean({
32
+ char: "v",
33
+ description: "Show detailed output including command stdout/stderr",
34
+ default: false
35
+ })
36
+ };
37
+ async run() {
38
+ const { flags } = await this.parse(_EnsureUser);
39
+ const { username, verbose } = flags;
40
+ const homeBase = flags["home-base"];
41
+ const dryRun = flags["dry-run"];
42
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
43
+ if (dryRun) {
44
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
45
+ }
46
+ if (!isValidUnixUsername(username)) {
47
+ this.error(`Invalid Unix username format: ${username}`);
48
+ }
49
+ const userExists = await executor.check(UnixUserCommands.userExists(username));
50
+ if (userExists) {
51
+ this.log(`\u2705 Unix user ${username} already exists`);
52
+ try {
53
+ await executor.execAll(UnixUserCommands.setupWorktreesDir(username, homeBase));
54
+ this.log(`\u2705 Ensured ~/agor/worktrees directory for ${username}`);
55
+ } catch (error) {
56
+ this.warn(`Failed to setup worktrees directory: ${error}`);
57
+ }
58
+ return;
59
+ }
60
+ try {
61
+ this.log(`Creating Unix user: ${username}`);
62
+ await executor.exec(UnixUserCommands.createUser(username, "/bin/bash", homeBase));
63
+ this.log(`\u2705 Created Unix user: ${username}`);
64
+ await executor.execAll(UnixUserCommands.setupWorktreesDir(username, homeBase));
65
+ this.log(`\u2705 Created ~/agor/worktrees directory for ${username}`);
66
+ } catch (error) {
67
+ this.error(`Failed to create user ${username}: ${error}`);
68
+ }
69
+ }
70
+ };
71
+ export {
72
+ EnsureUser as default
73
+ };
@@ -0,0 +1,16 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class RemoveFromWorktreeGroup extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ group: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
10
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
11
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+
16
+ export { RemoveFromWorktreeGroup as default };
@@ -0,0 +1,55 @@
1
+ // src/commands/admin/remove-from-worktree-group.ts
2
+ import { createAdminExecutor, UnixGroupCommands } from "@agor/core/unix";
3
+ import { Command, Flags } from "@oclif/core";
4
+ var RemoveFromWorktreeGroup = class _RemoveFromWorktreeGroup extends Command {
5
+ static description = "Remove a user from a worktree Unix group (admin only)";
6
+ static examples = [
7
+ "<%= config.bin %> <%= command.id %> --username alice --group agor_wt_03b62447",
8
+ "<%= config.bin %> <%= command.id %> --username alice --group agor_wt_03b62447 --dry-run"
9
+ ];
10
+ static flags = {
11
+ username: Flags.string({
12
+ char: "u",
13
+ description: "Unix username to remove",
14
+ required: true
15
+ }),
16
+ group: Flags.string({
17
+ char: "g",
18
+ description: "Unix group name (e.g., agor_wt_03b62447)",
19
+ required: true
20
+ }),
21
+ "dry-run": Flags.boolean({
22
+ char: "n",
23
+ description: "Show what would be done without making changes",
24
+ default: false
25
+ }),
26
+ verbose: Flags.boolean({
27
+ char: "v",
28
+ description: "Show detailed output including command stdout/stderr",
29
+ default: false
30
+ })
31
+ };
32
+ async run() {
33
+ const { flags } = await this.parse(_RemoveFromWorktreeGroup);
34
+ const { username, group, verbose } = flags;
35
+ const dryRun = flags["dry-run"];
36
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
37
+ if (dryRun) {
38
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
39
+ }
40
+ const isInGroup = await executor.check(UnixGroupCommands.isUserInGroup(username, group));
41
+ if (!isInGroup) {
42
+ this.log(`\u2705 User ${username} is not in group ${group} (nothing to do)`);
43
+ return;
44
+ }
45
+ try {
46
+ await executor.exec(UnixGroupCommands.removeUserFromGroup(username, group));
47
+ this.log(`\u2705 Removed user ${username} from group ${group}`);
48
+ } catch (error) {
49
+ this.error(`Failed to remove user ${username} from group ${group}: ${error}`);
50
+ }
51
+ }
52
+ };
53
+ export {
54
+ RemoveFromWorktreeGroup as default
55
+ };
@@ -0,0 +1,17 @@
1
+ import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
+ import { Command } from '@oclif/core';
3
+
4
+ declare class RemoveSymlink extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ username: _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
9
+ 'worktree-name': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
10
+ 'home-base': _oclif_core_interfaces.OptionFlag<string, _oclif_core_interfaces.CustomOptions>;
11
+ 'dry-run': _oclif_core_interfaces.BooleanFlag<boolean>;
12
+ verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+
17
+ export { RemoveSymlink as default };
@@ -0,0 +1,71 @@
1
+ // src/commands/admin/remove-symlink.ts
2
+ import {
3
+ AGOR_HOME_BASE,
4
+ createAdminExecutor,
5
+ getWorktreeSymlinkPath,
6
+ isValidUnixUsername,
7
+ SymlinkCommands
8
+ } from "@agor/core/unix";
9
+ import { Command, Flags } from "@oclif/core";
10
+ var RemoveSymlink = class _RemoveSymlink extends Command {
11
+ static description = "Remove a worktree symlink from user home directory (admin only)";
12
+ static examples = [
13
+ "<%= config.bin %> <%= command.id %> --username alice --worktree-name my-feature",
14
+ "<%= config.bin %> <%= command.id %> --username alice --worktree-name my-feature --dry-run"
15
+ ];
16
+ static flags = {
17
+ username: Flags.string({
18
+ char: "u",
19
+ description: "Unix username (owner of symlink)",
20
+ required: true
21
+ }),
22
+ "worktree-name": Flags.string({
23
+ char: "w",
24
+ description: "Worktree name/slug (symlink name)",
25
+ required: true
26
+ }),
27
+ "home-base": Flags.string({
28
+ description: "Base directory for home directories",
29
+ default: AGOR_HOME_BASE
30
+ }),
31
+ "dry-run": Flags.boolean({
32
+ char: "n",
33
+ description: "Show what would be done without making changes",
34
+ default: false
35
+ }),
36
+ verbose: Flags.boolean({
37
+ char: "v",
38
+ description: "Show detailed output including command stdout/stderr",
39
+ default: false
40
+ })
41
+ };
42
+ async run() {
43
+ const { flags } = await this.parse(_RemoveSymlink);
44
+ const { username, verbose } = flags;
45
+ const worktreeName = flags["worktree-name"];
46
+ const homeBase = flags["home-base"];
47
+ const dryRun = flags["dry-run"];
48
+ const executor = createAdminExecutor({ "dry-run": dryRun, verbose });
49
+ if (dryRun) {
50
+ this.log("\u{1F50D} Dry run mode - no changes will be made\n");
51
+ }
52
+ if (!isValidUnixUsername(username)) {
53
+ this.error(`Invalid Unix username format: ${username}`);
54
+ }
55
+ const linkPath = getWorktreeSymlinkPath(username, worktreeName, homeBase);
56
+ const symlinkExists = await executor.check(SymlinkCommands.symlinkExists(linkPath));
57
+ if (!symlinkExists) {
58
+ this.log(`\u2705 Symlink does not exist: ${linkPath} (nothing to do)`);
59
+ return;
60
+ }
61
+ try {
62
+ await executor.exec(SymlinkCommands.removeSymlink(linkPath));
63
+ this.log(`\u2705 Removed symlink: ${linkPath}`);
64
+ } catch (error) {
65
+ this.error(`Failed to remove symlink: ${error}`);
66
+ }
67
+ }
68
+ };
69
+ export {
70
+ RemoveSymlink as default
71
+ };