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.
- package/dist/cli/commands/admin/add-to-worktree-group.d.ts +16 -0
- package/dist/cli/commands/admin/add-to-worktree-group.js +55 -0
- package/dist/cli/commands/admin/create-symlink.d.ts +18 -0
- package/dist/cli/commands/admin/create-symlink.js +87 -0
- package/dist/cli/commands/admin/create-worktree-group.d.ts +15 -0
- package/dist/cli/commands/admin/create-worktree-group.js +60 -0
- package/dist/cli/commands/admin/delete-user.d.ts +16 -0
- package/dist/cli/commands/admin/delete-user.js +64 -0
- package/dist/cli/commands/admin/delete-worktree-group.d.ts +15 -0
- package/dist/cli/commands/admin/delete-worktree-group.js +50 -0
- package/dist/cli/commands/admin/ensure-user.d.ts +16 -0
- package/dist/cli/commands/admin/ensure-user.js +73 -0
- package/dist/cli/commands/admin/remove-from-worktree-group.d.ts +16 -0
- package/dist/cli/commands/admin/remove-from-worktree-group.js +55 -0
- package/dist/cli/commands/admin/remove-symlink.d.ts +17 -0
- package/dist/cli/commands/admin/remove-symlink.js +71 -0
- package/dist/cli/commands/admin/sync-unix.d.ts +65 -0
- package/dist/cli/commands/admin/sync-unix.js +913 -0
- package/dist/cli/commands/admin/sync-user-symlinks.d.ts +16 -0
- package/dist/cli/commands/admin/sync-user-symlinks.js +65 -0
- package/dist/cli/commands/board/add-session.js +4 -3
- package/dist/cli/commands/board/list.d.ts +4 -4
- package/dist/cli/commands/board/list.js +23 -8
- package/dist/cli/commands/daemon/start.js +4 -4
- package/dist/cli/commands/db/status.js +11 -11
- package/dist/cli/commands/repo/list.js +2 -1
- package/dist/cli/commands/session/list.js +2 -1
- package/dist/cli/commands/user/create.js +7 -1
- package/dist/cli/commands/worktree/list.d.ts +1 -0
- package/dist/cli/commands/worktree/list.js +24 -5
- package/dist/core/api/index.d.cts +8 -8
- package/dist/core/api/index.d.ts +8 -8
- package/dist/core/{board-B2Z7GiJs.d.cts → board-BGkmgUH3.d.cts} +1 -1
- package/dist/core/{board-C_w2_4Zm.d.ts → board-CKJQAhxz.d.ts} +1 -1
- package/dist/core/{board-comment-CaUiaZB5.d.cts → board-comment-D9NA4gOJ.d.cts} +1 -1
- package/dist/core/{board-comment-BCrDUioT.d.ts → board-comment-rH4c6eVl.d.ts} +1 -1
- package/dist/core/claude/index.cjs +66 -0
- package/dist/core/claude/index.d.cts +3 -3
- package/dist/core/claude/index.d.ts +3 -3
- package/dist/core/claude/index.js +70 -3
- package/dist/core/{client-CmbZana3.d.ts → client-By3Q6aQA.d.ts} +346 -7
- package/dist/core/{client-Dw-WpF2X.d.cts → client-KDgnPBwr.d.cts} +346 -7
- package/dist/core/config/browser.cjs +13 -5
- package/dist/core/config/browser.d.cts +29 -7
- package/dist/core/config/browser.d.ts +29 -7
- package/dist/core/config/browser.js +12 -5
- package/dist/core/config/index.cjs +125 -6
- package/dist/core/config/index.d.cts +51 -9
- package/dist/core/config/index.d.ts +51 -9
- package/dist/core/config/index.js +125 -9
- package/dist/core/db/index.cjs +203 -9
- package/dist/core/db/index.d.cts +371 -13
- package/dist/core/db/index.d.ts +371 -13
- package/dist/core/db/index.js +206 -13
- package/dist/core/drizzle/postgres/0006_lonely_kid_colt.sql +13 -0
- package/dist/core/drizzle/postgres/0007_backfill_session_unix_username.sql +10 -0
- package/dist/core/drizzle/postgres/0008_add_repos_unix_group.sql +6 -0
- package/dist/core/drizzle/postgres/meta/0006_snapshot.json +1913 -0
- package/dist/core/drizzle/postgres/meta/0007_snapshot.json +1913 -0
- package/dist/core/drizzle/postgres/meta/_journal.json +21 -0
- package/dist/core/drizzle/sqlite/0016_gorgeous_talkback.sql +15 -0
- package/dist/core/drizzle/sqlite/0017_backfill_worktree_owners.sql +17 -0
- package/dist/core/drizzle/sqlite/0018_fantastic_bruce_banner.sql +11 -0
- package/dist/core/drizzle/sqlite/0019_backfill_session_unix_username.sql +10 -0
- package/dist/core/drizzle/sqlite/0020_add_repos_unix_group.sql +6 -0
- package/dist/core/drizzle/sqlite/meta/0018_snapshot.json +1491 -0
- package/dist/core/drizzle/sqlite/meta/_journal.json +35 -0
- package/dist/core/environment/variable-resolver.d.cts +2 -2
- package/dist/core/environment/variable-resolver.d.ts +2 -2
- package/dist/core/git/index.cjs +181 -22
- package/dist/core/git/index.d.cts +3 -0
- package/dist/core/git/index.d.ts +3 -0
- package/dist/core/git/index.js +171 -12
- package/dist/core/{id-DMqyogFB.d.cts → id-BwPJtWxW.d.cts} +10 -1
- package/dist/core/{id-DMqyogFB.d.ts → id-BwPJtWxW.d.ts} +10 -1
- package/dist/core/index.cjs +2633 -324
- package/dist/core/index.d.cts +14 -13
- package/dist/core/index.d.ts +14 -13
- package/dist/core/index.js +2592 -333
- package/dist/core/lib/feathers-validation.cjs +22 -0
- package/dist/core/lib/feathers-validation.d.cts +7 -0
- package/dist/core/lib/feathers-validation.d.ts +7 -0
- package/dist/core/lib/feathers-validation.js +22 -0
- package/dist/core/{mcp-DSOuQVMG.d.ts → mcp-C-LwrhHt.d.ts} +1 -1
- package/dist/core/{mcp-DkU4JIC7.d.cts → mcp-oU9TGu_S.d.cts} +1 -1
- package/dist/core/{message-CAbh3Khf.d.ts → message-BFjPtffm.d.cts} +2 -1
- package/dist/core/{message-C_1y_b7x.d.cts → message-Di6ZwIjG.d.ts} +2 -1
- package/dist/core/models/index.cjs +12 -1
- package/dist/core/models/index.d.cts +4 -1
- package/dist/core/models/index.d.ts +4 -1
- package/dist/core/models/index.js +12 -1
- package/dist/core/package.json +5 -0
- package/dist/core/permissions/index.d.cts +2 -2
- package/dist/core/permissions/index.d.ts +2 -2
- package/dist/core/{repo-B0KNo4W_.d.ts → repo-DbOIBw1c.d.cts} +48 -2
- package/dist/core/{repo-0YtK09JC.d.cts → repo-DkEPOBbI.d.ts} +48 -2
- package/dist/core/seed/index.cjs +2749 -109
- package/dist/core/seed/index.d.cts +1 -1
- package/dist/core/seed/index.d.ts +1 -1
- package/dist/core/seed/index.js +2740 -100
- package/dist/core/{session-R4RTxPVT.d.cts → session-DE9tT7Cm.d.cts} +16 -1
- package/dist/core/{session-DfGoKd8r.d.ts → session-DrzT_Csl.d.ts} +16 -1
- package/dist/core/{task-Ct74zwxQ.d.ts → task-D0i_mU9u.d.ts} +1 -1
- package/dist/core/{task-aE2IEwMQ.d.cts → task-D5cWUcAY.d.cts} +1 -1
- package/dist/core/templates/session-context.d.cts +3 -3
- package/dist/core/templates/session-context.d.ts +3 -3
- package/dist/core/tools/mcp/jwt-auth.d.cts +2 -2
- package/dist/core/tools/mcp/jwt-auth.d.ts +2 -2
- package/dist/core/types/index.d.cts +11 -11
- package/dist/core/types/index.d.ts +11 -11
- package/dist/core/unix/index.cjs +4445 -0
- package/dist/core/unix/index.d.cts +1351 -0
- package/dist/core/unix/index.d.ts +1351 -0
- package/dist/core/unix/index.js +4383 -0
- package/dist/core/{user-DRaair5H.d.ts → user-CMQOATsn.d.ts} +2 -2
- package/dist/core/{user-B6hR_eUg.d.cts → user-zv1BTkAp.d.cts} +2 -2
- package/dist/core/utils/permission-mode-mapper.d.cts +2 -2
- package/dist/core/utils/permission-mode-mapper.d.ts +2 -2
- package/dist/daemon/index.d.ts +1 -23
- package/dist/daemon/index.js +1913 -594
- package/dist/daemon/mcp/routes.js +17 -19
- package/dist/daemon/mcp/tokens.js +17 -19
- package/dist/daemon/services/board-comments.js +5 -4
- package/dist/daemon/services/boards.js +3 -2
- package/dist/daemon/services/config.d.ts +21 -2
- package/dist/daemon/services/config.js +37 -3
- package/dist/daemon/services/mcp-servers.d.ts +2 -7
- package/dist/daemon/services/mcp-servers.js +3 -2
- package/dist/daemon/services/messages.js +3 -3
- package/dist/daemon/services/repos.d.ts +7 -0
- package/dist/daemon/services/repos.js +46 -5
- package/dist/daemon/services/sessions.js +3 -3
- package/dist/daemon/services/tasks.js +12 -14
- package/dist/daemon/services/terminals.js +209 -91
- package/dist/daemon/services/unix-integration.d.ts +38 -0
- package/dist/daemon/services/unix-integration.js +15 -0
- package/dist/daemon/services/worktree-owners.d.ts +34 -0
- package/dist/daemon/services/worktree-owners.js +185 -0
- package/dist/daemon/services/worktrees.d.ts +2 -13
- package/dist/daemon/services/worktrees.js +3 -3
- package/dist/daemon/setup/cors.d.ts +38 -0
- package/dist/daemon/setup/cors.js +44 -0
- package/dist/daemon/setup/credentials.d.ts +54 -0
- package/dist/daemon/setup/credentials.js +39 -0
- package/dist/daemon/setup/database.d.ts +28 -0
- package/dist/daemon/setup/database.js +60 -0
- package/dist/daemon/setup/index.d.ts +9 -0
- package/dist/daemon/setup/index.js +339 -0
- package/dist/daemon/setup/socketio.d.ts +61 -0
- package/dist/daemon/setup/socketio.js +135 -0
- package/dist/daemon/setup/swagger.d.ts +30 -0
- package/dist/daemon/setup/swagger.js +35 -0
- package/dist/daemon/setup/version.d.ts +19 -0
- package/dist/daemon/setup/version.js +31 -0
- package/dist/daemon/utils/worktree-authorization.d.ts +211 -0
- package/dist/daemon/utils/worktree-authorization.js +389 -0
- package/dist/executor/handlers/sdk/base-executor.d.ts +16 -1
- package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/base-executor.js +51 -45
- package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/codex.js +1 -2
- package/dist/executor/handlers/sdk/gemini.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/gemini.js +0 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +2 -1
- package/dist/executor/sdk-handlers/base/index.d.ts +2 -0
- package/dist/executor/sdk-handlers/base/index.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/base/index.js +3 -0
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +11 -9
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/base/mcp-scoping.js +37 -35
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +27 -9
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/claude-tool.js +162 -30
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +1 -0
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +6 -35
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/prompt-service.js +18 -149
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts +1 -0
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/query-builder.js +9 -3
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +1 -3
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.js +2 -3
- package/dist/executor/sdk-handlers/codex/models.d.ts +5 -1
- package/dist/executor/sdk-handlers/codex/models.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/models.js +12 -2
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +1 -9
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +8 -59
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +1 -3
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/gemini-tool.js +2 -3
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +1 -7
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/prompt-service.js +2 -4
- package/dist/executor/sdk-handlers/normalizer-factory.d.ts +20 -0
- package/dist/executor/sdk-handlers/normalizer-factory.d.ts.map +1 -0
- package/dist/executor/sdk-handlers/normalizer-factory.js +50 -0
- package/dist/ui/assets/{_basePickBy-CSKUfP7j.js → _basePickBy-CSYiZMse.js} +1 -1
- package/dist/ui/assets/_basePickBy-CSYiZMse.js.gz +0 -0
- package/dist/ui/assets/{_baseUniq-DIKTEiNL.js → _baseUniq-DvtGUhEt.js} +1 -1
- package/dist/ui/assets/_baseUniq-DvtGUhEt.js.gz +0 -0
- package/dist/ui/assets/{arc-sbYOJBrJ.js → arc-BRr5j3D1.js} +1 -1
- package/dist/ui/assets/arc-BRr5j3D1.js.gz +0 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-5ryI022m.js → architectureDiagram-VXUJARFQ-ebBOi_gK.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-5ryI022m.js.gz → architectureDiagram-VXUJARFQ-ebBOi_gK.js.gz} +0 -0
- package/dist/ui/assets/{blockDiagram-VD42YOAC-CoRqNSHt.js → blockDiagram-VD42YOAC-DxejLyQ-.js} +1 -1
- package/dist/ui/assets/blockDiagram-VD42YOAC-DxejLyQ-.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-BNUpZ9b4.js → c4Diagram-YG6GDRKO-DFKl-efs.js} +1 -1
- package/dist/ui/assets/c4Diagram-YG6GDRKO-DFKl-efs.js.gz +0 -0
- package/dist/ui/assets/channel-D2mEA-Bx.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-CcbmxtyM.js → chunk-4BX2VUAB-jMOQ1WDz.js} +1 -1
- package/dist/ui/assets/{chunk-55IACEB6-DyVNi0C9.js → chunk-55IACEB6-D1M6UwZY.js} +1 -1
- package/dist/ui/assets/{chunk-B4BG7PRW-aFbcnJA9.js → chunk-B4BG7PRW-COzn6OFE.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-COzn6OFE.js.gz +0 -0
- package/dist/ui/assets/{chunk-DI55MBZ5-CjBPJlKS.js → chunk-DI55MBZ5-6QssijTz.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-6QssijTz.js.gz +0 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-CgQsLuEk.js → chunk-FMBD7UC4-BnG1D5CH.js} +1 -1
- package/dist/ui/assets/{chunk-QN33PNHL-B4s4cFua.js → chunk-QN33PNHL-C6hCjMzw.js} +1 -1
- package/dist/ui/assets/{chunk-QZHKN3VN-Dcr26kTo.js → chunk-QZHKN3VN-CKLJgdZH.js} +1 -1
- package/dist/ui/assets/{chunk-TZMSLE5B-DyLZcsIh.js → chunk-TZMSLE5B-DYJXqHip.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-DYJXqHip.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-CQUXqjFU.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CQUXqjFU.js +1 -0
- package/dist/ui/assets/clone-DLz_t3PG.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-B35Z62lC.js → cose-bilkent-S5V4N54A-DBdRhd2a.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-DBdRhd2a.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-CgjwdHKI.js → dagre-6UL2VRFP-BURrt6xz.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-BURrt6xz.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-Dqsjy4In.js → diagram-PSM6KHXK-yPFDWvxo.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-yPFDWvxo.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-H0JyTjAC.js → diagram-QEK2KX5R-DQP7GvBM.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-DQP7GvBM.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-cGTKsSdf.js → diagram-S2PKOQOG-Ceh9L5Ft.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-Ceh9L5Ft.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-CMhD618Z.js → erDiagram-Q2GNP2WA-BGBdyrlr.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-BGBdyrlr.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-BBWrSv9f.js → flowDiagram-NV44I4VS-BXuoem71.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-BXuoem71.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-COTsahhy.js → ganttDiagram-LVOFAZNH-D96TAOYN.js} +1 -1
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-D96TAOYN.js.gz +0 -0
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CpPcbhL4.js → gitGraphDiagram-NY62KEGX-CsUtGEJW.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CsUtGEJW.js.gz +0 -0
- package/dist/ui/assets/{graph-CaUUuk2b.js → graph-DmuZZZ0O.js} +1 -1
- package/dist/ui/assets/graph-DmuZZZ0O.js.gz +0 -0
- package/dist/ui/assets/{index-BFSIFisK.js → index-DPUzz4vA.js} +227 -227
- package/dist/ui/assets/index-DPUzz4vA.js.gz +0 -0
- package/dist/ui/assets/{infoDiagram-ER5ION4S-D9bYXwgs.js → infoDiagram-ER5ION4S-DcxAd1Yp.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-D-fQyBX6.js → journeyDiagram-XKPGCS4Q-CFtlwkTr.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CFtlwkTr.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-Bsrta5Q0.js → kanban-definition-3W4ZIXB7-B74pWt6y.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-B74pWt6y.js.gz +0 -0
- package/dist/ui/assets/{layout-CvUnICud.js → layout-DpFHdru9.js} +1 -1
- package/dist/ui/assets/layout-DpFHdru9.js.gz +0 -0
- package/dist/ui/assets/{linear-JQRjU_O2.js → linear-yVuUIGbC.js} +1 -1
- package/dist/ui/assets/linear-yVuUIGbC.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-l2pRFxg2.js → mermaid.core-CbMbakdH.js} +5 -5
- package/dist/ui/assets/mermaid.core-CbMbakdH.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-BE9OTGAL.js → mindmap-definition-VGOIOE7T-XYo0CUDk.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-XYo0CUDk.js.gz +0 -0
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-Du11lDYa.js → pieDiagram-ADFJNKIX-b64mzYsL.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-b64mzYsL.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C5VnaKT4.js → quadrantDiagram-AYHSOK5B-CzbNszXu.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CzbNszXu.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-Di5WX35O.js → requirementDiagram-UZGBJVZJ-ftflJl3O.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-ftflJl3O.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BEmt-BaF.js → sankeyDiagram-TZEHDZUN-8PGribEE.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-8PGribEE.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-CcpImmbu.js → sequenceDiagram-WL72ISMW-B14pbZEr.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-B14pbZEr.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-du-BIRKS.js → stateDiagram-FKZM4ZOC-Ddx2Kkc3.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-Ddx2Kkc3.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-ppKXpQQ4.js +1 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-KCTVxIDH.js → timeline-definition-IT6M3QCI-bS_0u_jC.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-bS_0u_jC.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-BSn0TM49.js → treemap-KMMF4GRG-CZHIJMKL.js} +1 -1
- package/dist/ui/assets/treemap-KMMF4GRG-CZHIJMKL.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BFUjOdrD.js → xychartDiagram-PRI3JC2R-DOTWxgqQ.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-DOTWxgqQ.js.gz +0 -0
- package/dist/ui/index.html +2 -2
- package/package.json +4 -4
- package/dist/ui/assets/_basePickBy-CSKUfP7j.js.gz +0 -0
- package/dist/ui/assets/_baseUniq-DIKTEiNL.js.gz +0 -0
- package/dist/ui/assets/arc-sbYOJBrJ.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-CoRqNSHt.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-BNUpZ9b4.js.gz +0 -0
- package/dist/ui/assets/channel-B54XPW_W.js +0 -1
- package/dist/ui/assets/chunk-B4BG7PRW-aFbcnJA9.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-CjBPJlKS.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-DyLZcsIh.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-CIlZ92XI.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CIlZ92XI.js +0 -1
- package/dist/ui/assets/clone-FME9bcXD.js +0 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-B35Z62lC.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-CgjwdHKI.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-Dqsjy4In.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-H0JyTjAC.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-cGTKsSdf.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-CMhD618Z.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-BBWrSv9f.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-COTsahhy.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CpPcbhL4.js.gz +0 -0
- package/dist/ui/assets/graph-CaUUuk2b.js.gz +0 -0
- package/dist/ui/assets/index-BFSIFisK.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-D-fQyBX6.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-Bsrta5Q0.js.gz +0 -0
- package/dist/ui/assets/layout-CvUnICud.js.gz +0 -0
- package/dist/ui/assets/linear-JQRjU_O2.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-l2pRFxg2.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-BE9OTGAL.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-Du11lDYa.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C5VnaKT4.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Di5WX35O.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BEmt-BaF.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-CcpImmbu.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-du-BIRKS.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BrFSQTTM.js +0 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-KCTVxIDH.js.gz +0 -0
- package/dist/ui/assets/treemap-KMMF4GRG-BSn0TM49.js.gz +0 -0
- 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
|
+
};
|