agentrix 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +235 -0
- package/bin/agentrix.js +5 -0
- package/dist/api/auth.d.ts +10 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +30 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/automation.d.ts +52 -0
- package/dist/api/automation.d.ts.map +1 -0
- package/dist/api/automation.js +181 -0
- package/dist/api/automation.js.map +1 -0
- package/dist/api/base-handler.d.ts +62 -0
- package/dist/api/base-handler.d.ts.map +1 -0
- package/dist/api/base-handler.js +55 -0
- package/dist/api/base-handler.js.map +1 -0
- package/dist/api/config.d.ts +5 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +14 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/create-plan.d.ts +8 -0
- package/dist/api/create-plan.d.ts.map +1 -0
- package/dist/api/create-plan.js +77 -0
- package/dist/api/create-plan.js.map +1 -0
- package/dist/api/git-status.d.ts +6 -0
- package/dist/api/git-status.d.ts.map +1 -0
- package/dist/api/git-status.js +57 -0
- package/dist/api/git-status.js.map +1 -0
- package/dist/api/plans.d.ts +6 -0
- package/dist/api/plans.d.ts.map +1 -0
- package/dist/api/plans.js +75 -0
- package/dist/api/plans.js.map +1 -0
- package/dist/api/repo-dashboard.d.ts +13 -0
- package/dist/api/repo-dashboard.d.ts.map +1 -0
- package/dist/api/repo-dashboard.js +47 -0
- package/dist/api/repo-dashboard.js.map +1 -0
- package/dist/api/repo-issue.d.ts +12 -0
- package/dist/api/repo-issue.d.ts.map +1 -0
- package/dist/api/repo-issue.js +47 -0
- package/dist/api/repo-issue.js.map +1 -0
- package/dist/api/repos.d.ts +9 -0
- package/dist/api/repos.d.ts.map +1 -0
- package/dist/api/repos.js +46 -0
- package/dist/api/repos.js.map +1 -0
- package/dist/api/sessions.d.ts +5 -0
- package/dist/api/sessions.d.ts.map +1 -0
- package/dist/api/sessions.js +19 -0
- package/dist/api/sessions.js.map +1 -0
- package/dist/api/tasks.d.ts +6 -0
- package/dist/api/tasks.d.ts.map +1 -0
- package/dist/api/tasks.js +22 -0
- package/dist/api/tasks.js.map +1 -0
- package/dist/api/terminal.d.ts +7 -0
- package/dist/api/terminal.d.ts.map +1 -0
- package/dist/api/terminal.js +16 -0
- package/dist/api/terminal.js.map +1 -0
- package/dist/api/worktrees.d.ts +7 -0
- package/dist/api/worktrees.d.ts.map +1 -0
- package/dist/api/worktrees.js +26 -0
- package/dist/api/worktrees.js.map +1 -0
- package/dist/cli/arg-parser.d.ts +3 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +243 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/config-resolver.d.ts +29 -0
- package/dist/cli/config-resolver.d.ts.map +1 -0
- package/dist/cli/config-resolver.js +139 -0
- package/dist/cli/config-resolver.js.map +1 -0
- package/dist/cli/config.d.ts +5 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +224 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/constants.d.ts +7 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +15 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +35 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +23 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +23 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/plans-command.d.ts +3 -0
- package/dist/cli/plans-command.d.ts.map +1 -0
- package/dist/cli/plans-command.js +151 -0
- package/dist/cli/plans-command.js.map +1 -0
- package/dist/cli/server-starter.d.ts +26 -0
- package/dist/cli/server-starter.d.ts.map +1 -0
- package/dist/cli/server-starter.js +72 -0
- package/dist/cli/server-starter.js.map +1 -0
- package/dist/cli/types.d.ts +46 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/validation.d.ts +14 -0
- package/dist/cli/validation.d.ts.map +1 -0
- package/dist/cli/validation.js +99 -0
- package/dist/cli/validation.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +73 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/agent-commands.d.ts +27 -0
- package/dist/config/agent-commands.d.ts.map +1 -0
- package/dist/config/agent-commands.js +56 -0
- package/dist/config/agent-commands.js.map +1 -0
- package/dist/config/constants.d.ts +35 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +35 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/developer-messages.d.ts +2 -0
- package/dist/config/developer-messages.d.ts.map +1 -0
- package/dist/config/developer-messages.js +43 -0
- package/dist/config/developer-messages.js.map +1 -0
- package/dist/core/agents.d.ts +23 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/core/agents.js +91 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/auth.d.ts +3 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +69 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/automation/branch.d.ts +18 -0
- package/dist/core/automation/branch.d.ts.map +1 -0
- package/dist/core/automation/branch.js +29 -0
- package/dist/core/automation/branch.js.map +1 -0
- package/dist/core/automation/git-orchestration.d.ts +51 -0
- package/dist/core/automation/git-orchestration.d.ts.map +1 -0
- package/dist/core/automation/git-orchestration.js +25 -0
- package/dist/core/automation/git-orchestration.js.map +1 -0
- package/dist/core/automation/plan.d.ts +15 -0
- package/dist/core/automation/plan.d.ts.map +1 -0
- package/dist/core/automation/plan.js +25 -0
- package/dist/core/automation/plan.js.map +1 -0
- package/dist/core/automation/request-validation.d.ts +45 -0
- package/dist/core/automation/request-validation.d.ts.map +1 -0
- package/dist/core/automation/request-validation.js +144 -0
- package/dist/core/automation/request-validation.js.map +1 -0
- package/dist/core/automation/task-runner.d.ts +42 -0
- package/dist/core/automation/task-runner.d.ts.map +1 -0
- package/dist/core/automation/task-runner.js +215 -0
- package/dist/core/automation/task-runner.js.map +1 -0
- package/dist/core/branch-name.d.ts +13 -0
- package/dist/core/branch-name.d.ts.map +1 -0
- package/dist/core/branch-name.js +429 -0
- package/dist/core/branch-name.js.map +1 -0
- package/dist/core/default-branch.d.ts +12 -0
- package/dist/core/default-branch.d.ts.map +1 -0
- package/dist/core/default-branch.js +78 -0
- package/dist/core/default-branch.js.map +1 -0
- package/dist/core/event-bus.d.ts +73 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +127 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/git.d.ts +13 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +15 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/github.d.ts +10 -0
- package/dist/core/github.d.ts.map +1 -0
- package/dist/core/github.js +245 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/plan-storage.d.ts +46 -0
- package/dist/core/plan-storage.d.ts.map +1 -0
- package/dist/core/plan-storage.js +237 -0
- package/dist/core/plan-storage.js.map +1 -0
- package/dist/core/plan.d.ts +23 -0
- package/dist/core/plan.d.ts.map +1 -0
- package/dist/core/plan.js +445 -0
- package/dist/core/plan.js.map +1 -0
- package/dist/core/repositories.d.ts +2 -0
- package/dist/core/repositories.d.ts.map +1 -0
- package/dist/core/repositories.js +58 -0
- package/dist/core/repositories.js.map +1 -0
- package/dist/core/repository-config.d.ts +9 -0
- package/dist/core/repository-config.d.ts.map +1 -0
- package/dist/core/repository-config.js +65 -0
- package/dist/core/repository-config.js.map +1 -0
- package/dist/core/task-store.d.ts +14 -0
- package/dist/core/task-store.d.ts.map +1 -0
- package/dist/core/task-store.js +105 -0
- package/dist/core/task-store.js.map +1 -0
- package/dist/core/tasks.d.ts +62 -0
- package/dist/core/tasks.d.ts.map +1 -0
- package/dist/core/tasks.js +582 -0
- package/dist/core/tasks.js.map +1 -0
- package/dist/core/terminal-sessions.d.ts +18 -0
- package/dist/core/terminal-sessions.d.ts.map +1 -0
- package/dist/core/terminal-sessions.js +539 -0
- package/dist/core/terminal-sessions.js.map +1 -0
- package/dist/core/tmux.d.ts +29 -0
- package/dist/core/tmux.d.ts.map +1 -0
- package/dist/core/tmux.js +151 -0
- package/dist/core/tmux.js.map +1 -0
- package/dist/core/workdir.d.ts +8 -0
- package/dist/core/workdir.d.ts.map +1 -0
- package/dist/core/workdir.js +26 -0
- package/dist/core/workdir.js.map +1 -0
- package/dist/domain/branch-validator.d.ts +51 -0
- package/dist/domain/branch-validator.d.ts.map +1 -0
- package/dist/domain/branch-validator.js +88 -0
- package/dist/domain/branch-validator.js.map +1 -0
- package/dist/domain/git-url-parser.d.ts +27 -0
- package/dist/domain/git-url-parser.d.ts.map +1 -0
- package/dist/domain/git-url-parser.js +84 -0
- package/dist/domain/git-url-parser.js.map +1 -0
- package/dist/domain/index.d.ts +8 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +5 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/repository.d.ts +55 -0
- package/dist/domain/repository.d.ts.map +1 -0
- package/dist/domain/repository.js +73 -0
- package/dist/domain/repository.js.map +1 -0
- package/dist/domain/worktree.d.ts +43 -0
- package/dist/domain/worktree.d.ts.map +1 -0
- package/dist/domain/worktree.js +57 -0
- package/dist/domain/worktree.js.map +1 -0
- package/dist/infrastructure/cookies/cookie-manager.d.ts +18 -0
- package/dist/infrastructure/cookies/cookie-manager.d.ts.map +1 -0
- package/dist/infrastructure/cookies/cookie-manager.js +20 -0
- package/dist/infrastructure/cookies/cookie-manager.js.map +1 -0
- package/dist/infrastructure/cookies/cookie-parser.d.ts +43 -0
- package/dist/infrastructure/cookies/cookie-parser.d.ts.map +1 -0
- package/dist/infrastructure/cookies/cookie-parser.js +88 -0
- package/dist/infrastructure/cookies/cookie-parser.js.map +1 -0
- package/dist/infrastructure/cookies/cookie-security.d.ts +15 -0
- package/dist/infrastructure/cookies/cookie-security.d.ts.map +1 -0
- package/dist/infrastructure/cookies/cookie-security.js +35 -0
- package/dist/infrastructure/cookies/cookie-security.js.map +1 -0
- package/dist/infrastructure/cookies/index.d.ts +7 -0
- package/dist/infrastructure/cookies/index.d.ts.map +1 -0
- package/dist/infrastructure/cookies/index.js +4 -0
- package/dist/infrastructure/cookies/index.js.map +1 -0
- package/dist/infrastructure/errors/error-handler.d.ts +22 -0
- package/dist/infrastructure/errors/error-handler.d.ts.map +1 -0
- package/dist/infrastructure/errors/error-handler.js +89 -0
- package/dist/infrastructure/errors/error-handler.js.map +1 -0
- package/dist/infrastructure/errors/http-error.d.ts +30 -0
- package/dist/infrastructure/errors/http-error.d.ts.map +1 -0
- package/dist/infrastructure/errors/http-error.js +46 -0
- package/dist/infrastructure/errors/http-error.js.map +1 -0
- package/dist/infrastructure/errors/index.d.ts +5 -0
- package/dist/infrastructure/errors/index.d.ts.map +1 -0
- package/dist/infrastructure/errors/index.js +5 -0
- package/dist/infrastructure/errors/index.js.map +1 -0
- package/dist/infrastructure/errors/not-found-error.d.ts +8 -0
- package/dist/infrastructure/errors/not-found-error.d.ts.map +1 -0
- package/dist/infrastructure/errors/not-found-error.js +13 -0
- package/dist/infrastructure/errors/not-found-error.js.map +1 -0
- package/dist/infrastructure/errors/validation-error.d.ts +21 -0
- package/dist/infrastructure/errors/validation-error.d.ts.map +1 -0
- package/dist/infrastructure/errors/validation-error.js +31 -0
- package/dist/infrastructure/errors/validation-error.js.map +1 -0
- package/dist/infrastructure/logging/index.d.ts +3 -0
- package/dist/infrastructure/logging/index.d.ts.map +1 -0
- package/dist/infrastructure/logging/index.js +2 -0
- package/dist/infrastructure/logging/index.js.map +1 -0
- package/dist/infrastructure/logging/logger.d.ts +21 -0
- package/dist/infrastructure/logging/logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/logger.js +49 -0
- package/dist/infrastructure/logging/logger.js.map +1 -0
- package/dist/repositories/git-repository.d.ts +67 -0
- package/dist/repositories/git-repository.d.ts.map +1 -0
- package/dist/repositories/git-repository.js +111 -0
- package/dist/repositories/git-repository.js.map +1 -0
- package/dist/repositories/git-status-repository.d.ts +22 -0
- package/dist/repositories/git-status-repository.d.ts.map +1 -0
- package/dist/repositories/git-status-repository.js +620 -0
- package/dist/repositories/git-status-repository.js.map +1 -0
- package/dist/repositories/repository-repository.d.ts +44 -0
- package/dist/repositories/repository-repository.d.ts.map +1 -0
- package/dist/repositories/repository-repository.js +155 -0
- package/dist/repositories/repository-repository.js.map +1 -0
- package/dist/repositories/worktree-repository.d.ts +66 -0
- package/dist/repositories/worktree-repository.d.ts.map +1 -0
- package/dist/repositories/worktree-repository.js +330 -0
- package/dist/repositories/worktree-repository.js.map +1 -0
- package/dist/server/cookies.d.ts +6 -0
- package/dist/server/cookies.d.ts.map +1 -0
- package/dist/server/cookies.js +6 -0
- package/dist/server/cookies.js.map +1 -0
- package/dist/server/events.d.ts +8 -0
- package/dist/server/events.d.ts.map +1 -0
- package/dist/server/events.js +128 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +173 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/router.d.ts +16 -0
- package/dist/server/router.d.ts.map +1 -0
- package/dist/server/router.js +256 -0
- package/dist/server/router.js.map +1 -0
- package/dist/server/ui.d.ts +8 -0
- package/dist/server/ui.d.ts.map +1 -0
- package/dist/server/ui.js +211 -0
- package/dist/server/ui.js.map +1 -0
- package/dist/server/websocket.d.ts +9 -0
- package/dist/server/websocket.d.ts.map +1 -0
- package/dist/server/websocket.js +116 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/services/auth-service.d.ts +49 -0
- package/dist/services/auth-service.d.ts.map +1 -0
- package/dist/services/auth-service.js +53 -0
- package/dist/services/auth-service.js.map +1 -0
- package/dist/services/index.d.ts +11 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/repository-service.d.ts +57 -0
- package/dist/services/repository-service.d.ts.map +1 -0
- package/dist/services/repository-service.js +62 -0
- package/dist/services/repository-service.js.map +1 -0
- package/dist/services/session-service.d.ts +31 -0
- package/dist/services/session-service.d.ts.map +1 -0
- package/dist/services/session-service.js +134 -0
- package/dist/services/session-service.js.map +1 -0
- package/dist/services/terminal-service.d.ts +43 -0
- package/dist/services/terminal-service.d.ts.map +1 -0
- package/dist/services/terminal-service.js +85 -0
- package/dist/services/terminal-service.js.map +1 -0
- package/dist/services/worktree-service.d.ts +39 -0
- package/dist/services/worktree-service.d.ts.map +1 -0
- package/dist/services/worktree-service.js +208 -0
- package/dist/services/worktree-service.js.map +1 -0
- package/dist/types/auth.d.ts +35 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/config.d.ts +46 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/git.d.ts +190 -0
- package/dist/types/git.d.ts.map +1 -0
- package/dist/types/git.js +5 -0
- package/dist/types/git.js.map +1 -0
- package/dist/types/http.d.ts +46 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +2 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plan.d.ts +31 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +5 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/services.d.ts +99 -0
- package/dist/types/services.d.ts.map +1 -0
- package/dist/types/services.js +2 -0
- package/dist/types/services.js.map +1 -0
- package/dist/types/tasks.d.ts +68 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +5 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/types/terminal.d.ts +60 -0
- package/dist/types/terminal.d.ts.map +1 -0
- package/dist/types/terminal.js +2 -0
- package/dist/types/terminal.js.map +1 -0
- package/dist/utils/cookies.d.ts +7 -0
- package/dist/utils/cookies.d.ts.map +1 -0
- package/dist/utils/cookies.js +6 -0
- package/dist/utils/cookies.js.map +1 -0
- package/dist/utils/http.d.ts +23 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +58 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/random.d.ts +12 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/random.js +25 -0
- package/dist/utils/random.js.map +1 -0
- package/dist/utils/repository-cache.d.ts +8 -0
- package/dist/utils/repository-cache.d.ts.map +1 -0
- package/dist/utils/repository-cache.js +13 -0
- package/dist/utils/repository-cache.js.map +1 -0
- package/dist/validation/index.d.ts +9 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +6 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/request-validator.d.ts +99 -0
- package/dist/validation/request-validator.d.ts.map +1 -0
- package/dist/validation/request-validator.js +189 -0
- package/dist/validation/request-validator.js.map +1 -0
- package/dist/validation/schemas/repository-schema.d.ts +26 -0
- package/dist/validation/schemas/repository-schema.d.ts.map +1 -0
- package/dist/validation/schemas/repository-schema.js +31 -0
- package/dist/validation/schemas/repository-schema.js.map +1 -0
- package/dist/validation/schemas/terminal-schema.d.ts +21 -0
- package/dist/validation/schemas/terminal-schema.d.ts.map +1 -0
- package/dist/validation/schemas/terminal-schema.js +38 -0
- package/dist/validation/schemas/terminal-schema.js.map +1 -0
- package/dist/validation/schemas/worktree-schema.d.ts +21 -0
- package/dist/validation/schemas/worktree-schema.d.ts.map +1 -0
- package/dist/validation/schemas/worktree-schema.js +29 -0
- package/dist/validation/schemas/worktree-schema.js.map +1 -0
- package/package.json +79 -0
- package/ui/dist/assets/index-BDDrbP3l.js +354 -0
- package/ui/dist/assets/index-CwB7gOl4.css +41 -0
- package/ui/dist/index.html +13 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface SessionInfo {
|
|
2
|
+
org: string;
|
|
3
|
+
repo: string;
|
|
4
|
+
branch: string;
|
|
5
|
+
idle: boolean;
|
|
6
|
+
lastActivityAt: string | null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Service for session discovery and management
|
|
10
|
+
*/
|
|
11
|
+
export declare class SessionService {
|
|
12
|
+
private readonly workdir;
|
|
13
|
+
constructor(workdir: string);
|
|
14
|
+
/**
|
|
15
|
+
* Lists all active terminal sessions, including both in-memory and orphaned tmux sessions
|
|
16
|
+
* @returns List of session information
|
|
17
|
+
*/
|
|
18
|
+
listSessions(): Promise<SessionInfo[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Discovers tmux sessions
|
|
21
|
+
* @returns List of parsed tmux session names
|
|
22
|
+
*/
|
|
23
|
+
private discoverTmuxSessions;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates a session service instance
|
|
27
|
+
* @param workdir - Work directory root
|
|
28
|
+
* @returns SessionService instance
|
|
29
|
+
*/
|
|
30
|
+
export declare function createSessionService(workdir: string): SessionService;
|
|
31
|
+
//# sourceMappingURL=session-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-service.d.ts","sourceRoot":"","sources":["../../src/services/session-service.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AASD;;GAEG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAyF5C;;;OAGG;YACW,oBAAoB;CAwBnC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAEpE"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { discoverRepositories } from '../repositories/repository-repository.js';
|
|
2
|
+
import { buildSanitisedWorktreeLookup, detectTmux, isTmuxAvailable, parseTmuxSessionName, runTmux, } from '../core/tmux.js';
|
|
3
|
+
import { listActiveSessions, makeSessionKey } from '../core/terminal-sessions.js';
|
|
4
|
+
/**
|
|
5
|
+
* Type guard for finite numbers
|
|
6
|
+
*/
|
|
7
|
+
function isFiniteNumber(value) {
|
|
8
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Service for session discovery and management
|
|
12
|
+
*/
|
|
13
|
+
export class SessionService {
|
|
14
|
+
workdir;
|
|
15
|
+
constructor(workdir) {
|
|
16
|
+
this.workdir = workdir;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lists all active terminal sessions, including both in-memory and orphaned tmux sessions
|
|
20
|
+
* @returns List of session information
|
|
21
|
+
*/
|
|
22
|
+
async listSessions() {
|
|
23
|
+
const sessionLookup = new Map();
|
|
24
|
+
// Gather in-memory sessions
|
|
25
|
+
listActiveSessions().forEach((session) => {
|
|
26
|
+
if (!session || !session.org || !session.repo || !session.branch) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const key = makeSessionKey(session.org, session.repo, session.branch);
|
|
30
|
+
const lastActivityAtMs = typeof session.lastActivityAt === 'number'
|
|
31
|
+
? session.lastActivityAt
|
|
32
|
+
: session.lastActivityAt instanceof Date
|
|
33
|
+
? session.lastActivityAt.getTime()
|
|
34
|
+
: null;
|
|
35
|
+
const idle = Boolean(session.idle);
|
|
36
|
+
const existing = sessionLookup.get(key);
|
|
37
|
+
if (!existing) {
|
|
38
|
+
sessionLookup.set(key, {
|
|
39
|
+
org: session.org,
|
|
40
|
+
repo: session.repo,
|
|
41
|
+
branch: session.branch,
|
|
42
|
+
idle,
|
|
43
|
+
lastActivityAtMs,
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
existing.idle = existing.idle && idle;
|
|
48
|
+
if (isFiniteNumber(lastActivityAtMs) &&
|
|
49
|
+
(!isFiniteNumber(existing.lastActivityAtMs) || lastActivityAtMs > existing.lastActivityAtMs)) {
|
|
50
|
+
existing.lastActivityAtMs = lastActivityAtMs;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// Discover orphaned tmux sessions
|
|
54
|
+
await detectTmux();
|
|
55
|
+
if (isTmuxAvailable()) {
|
|
56
|
+
const tmuxSessions = await this.discoverTmuxSessions();
|
|
57
|
+
if (tmuxSessions.length > 0) {
|
|
58
|
+
let lookup;
|
|
59
|
+
try {
|
|
60
|
+
const structure = await discoverRepositories(this.workdir);
|
|
61
|
+
lookup = buildSanitisedWorktreeLookup(structure);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
lookup = new Map();
|
|
65
|
+
}
|
|
66
|
+
tmuxSessions.forEach((parsed) => {
|
|
67
|
+
const sanitisedKey = `${parsed.org}--${parsed.repo}--${parsed.branch}`;
|
|
68
|
+
const actual = lookup.get(sanitisedKey);
|
|
69
|
+
if (!actual) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const key = makeSessionKey(actual.org, actual.repo, actual.branch);
|
|
73
|
+
if (sessionLookup.has(key)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
sessionLookup.set(key, {
|
|
77
|
+
org: actual.org,
|
|
78
|
+
repo: actual.repo,
|
|
79
|
+
branch: actual.branch,
|
|
80
|
+
idle: false,
|
|
81
|
+
lastActivityAtMs: null,
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Convert to output format
|
|
87
|
+
return Array.from(sessionLookup.values()).map((entry) => ({
|
|
88
|
+
org: entry.org,
|
|
89
|
+
repo: entry.repo,
|
|
90
|
+
branch: entry.branch,
|
|
91
|
+
idle: Boolean(entry.idle),
|
|
92
|
+
lastActivityAt: isFiniteNumber(entry.lastActivityAtMs)
|
|
93
|
+
? new Date(entry.lastActivityAtMs).toISOString()
|
|
94
|
+
: null,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Discovers tmux sessions
|
|
99
|
+
* @returns List of parsed tmux session names
|
|
100
|
+
*/
|
|
101
|
+
async discoverTmuxSessions() {
|
|
102
|
+
let stdout = '';
|
|
103
|
+
try {
|
|
104
|
+
const result = await runTmux(['list-sessions', '-F', '#S']);
|
|
105
|
+
stdout = result && typeof result.stdout === 'string' ? result.stdout : '';
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const err = error;
|
|
109
|
+
if (typeof err.code === 'number') {
|
|
110
|
+
stdout = '';
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.error('Failed to list tmux sessions', error);
|
|
114
|
+
stdout = '';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const names = stdout
|
|
118
|
+
.split('\n')
|
|
119
|
+
.map((line) => line.trim())
|
|
120
|
+
.filter(Boolean);
|
|
121
|
+
return names
|
|
122
|
+
.map((name) => parseTmuxSessionName(name))
|
|
123
|
+
.filter((parsed) => parsed !== null);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Creates a session service instance
|
|
128
|
+
* @param workdir - Work directory root
|
|
129
|
+
* @returns SessionService instance
|
|
130
|
+
*/
|
|
131
|
+
export function createSessionService(workdir) {
|
|
132
|
+
return new SessionService(workdir);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=session-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../src/services/session-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { TerminalOpenInput, TerminalSendInput } from '../validation/index.js';
|
|
2
|
+
import type { ITerminalService } from '../types/services.js';
|
|
3
|
+
export interface TerminalOpenResult {
|
|
4
|
+
sessionId: string;
|
|
5
|
+
log: string;
|
|
6
|
+
closed: boolean;
|
|
7
|
+
created: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface TerminalSendResult {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Service for terminal session orchestration
|
|
14
|
+
*/
|
|
15
|
+
export declare class TerminalService implements ITerminalService {
|
|
16
|
+
private readonly workdir;
|
|
17
|
+
private readonly mode;
|
|
18
|
+
constructor(workdir: string, options?: {
|
|
19
|
+
mode?: string;
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Opens or creates a terminal session
|
|
23
|
+
* @param params - Session parameters
|
|
24
|
+
* @returns Session information
|
|
25
|
+
*/
|
|
26
|
+
openTerminal(params: TerminalOpenInput): Promise<TerminalOpenResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Sends input to a terminal session
|
|
29
|
+
* @param params - Input parameters
|
|
30
|
+
* @returns Success result
|
|
31
|
+
*/
|
|
32
|
+
sendInput(params: TerminalSendInput): Promise<TerminalSendResult>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates a terminal service instance
|
|
36
|
+
* @param workdir - Work directory root
|
|
37
|
+
* @param options - Service options
|
|
38
|
+
* @returns TerminalService instance
|
|
39
|
+
*/
|
|
40
|
+
export declare function createTerminalService(workdir: string, options?: {
|
|
41
|
+
mode?: string;
|
|
42
|
+
}): TerminalService;
|
|
43
|
+
//# sourceMappingURL=terminal-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-service.d.ts","sourceRoot":"","sources":["../../src/services/terminal-service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAED,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO;IAI7E;;;;OAIG;IACG,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0D1E;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAWxE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAEvG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { getOrCreateTerminalSession, getSessionById, queueSessionInput, } from '../core/terminal-sessions.js';
|
|
2
|
+
import { launchAgentProcess } from '../core/agents.js';
|
|
3
|
+
import { ValidationError } from '../infrastructure/errors/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Service for terminal session orchestration
|
|
6
|
+
*/
|
|
7
|
+
export class TerminalService {
|
|
8
|
+
workdir;
|
|
9
|
+
mode;
|
|
10
|
+
constructor(workdir, options = {}) {
|
|
11
|
+
this.workdir = workdir;
|
|
12
|
+
this.mode = typeof options.mode === 'string' ? options.mode : 'auto';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Opens or creates a terminal session
|
|
16
|
+
* @param params - Session parameters
|
|
17
|
+
* @returns Session information
|
|
18
|
+
*/
|
|
19
|
+
async openTerminal(params) {
|
|
20
|
+
const { org, repo, branch, command = '', hasPrompt, prompt } = params;
|
|
21
|
+
if (branch.toLowerCase() === 'main') {
|
|
22
|
+
throw new ValidationError('Terminal access to the main branch is disabled');
|
|
23
|
+
}
|
|
24
|
+
if (hasPrompt) {
|
|
25
|
+
if (!command) {
|
|
26
|
+
throw new ValidationError('command must be provided when prompt is included');
|
|
27
|
+
}
|
|
28
|
+
const { sessionId, createdSession } = await launchAgentProcess({
|
|
29
|
+
command,
|
|
30
|
+
workdir: this.workdir,
|
|
31
|
+
org,
|
|
32
|
+
repo,
|
|
33
|
+
branch,
|
|
34
|
+
prompt: prompt ?? '',
|
|
35
|
+
});
|
|
36
|
+
const session = getSessionById(sessionId);
|
|
37
|
+
if (!session) {
|
|
38
|
+
throw new Error('Terminal session not found after launch');
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
sessionId,
|
|
42
|
+
log: session.log || '',
|
|
43
|
+
closed: Boolean(session.closed),
|
|
44
|
+
created: Boolean(createdSession),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const result = await getOrCreateTerminalSession(this.workdir, org, repo, branch, { mode: this.mode });
|
|
48
|
+
const session = 'session' in result ? result.session : result;
|
|
49
|
+
const created = 'created' in result ? result.created : false;
|
|
50
|
+
if (command) {
|
|
51
|
+
const commandInput = /[\r\n]$/.test(command) ? command : `${command}\r`;
|
|
52
|
+
queueSessionInput(session, commandInput);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
sessionId: session.id,
|
|
56
|
+
log: session.log || '',
|
|
57
|
+
closed: Boolean(session.closed),
|
|
58
|
+
created,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Sends input to a terminal session
|
|
63
|
+
* @param params - Input parameters
|
|
64
|
+
* @returns Success result
|
|
65
|
+
*/
|
|
66
|
+
async sendInput(params) {
|
|
67
|
+
const { sessionId, input } = params;
|
|
68
|
+
const session = getSessionById(sessionId);
|
|
69
|
+
if (!session || session.closed) {
|
|
70
|
+
throw new ValidationError('Terminal session not found');
|
|
71
|
+
}
|
|
72
|
+
queueSessionInput(session, input);
|
|
73
|
+
return { ok: true };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Creates a terminal service instance
|
|
78
|
+
* @param workdir - Work directory root
|
|
79
|
+
* @param options - Service options
|
|
80
|
+
* @returns TerminalService instance
|
|
81
|
+
*/
|
|
82
|
+
export function createTerminalService(workdir, options = {}) {
|
|
83
|
+
return new TerminalService(workdir, options);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=terminal-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-service.js","sourceRoot":"","sources":["../../src/services/terminal-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { WorktreeCreateInput, WorktreeDeleteInput } from '../validation/index.js';
|
|
2
|
+
import type { RepositoriesData } from './repository-service.js';
|
|
3
|
+
import type { IWorktreeService } from '../types/services.js';
|
|
4
|
+
export interface CreateWorktreeResult {
|
|
5
|
+
taskId: string;
|
|
6
|
+
org: string;
|
|
7
|
+
repo: string;
|
|
8
|
+
branch: string | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Service for worktree lifecycle management
|
|
12
|
+
*/
|
|
13
|
+
export declare class WorktreeService implements IWorktreeService {
|
|
14
|
+
private readonly workdir;
|
|
15
|
+
private readonly branchNameGenerator;
|
|
16
|
+
private readonly defaultBranchConfig;
|
|
17
|
+
constructor(workdir: string, branchNameGenerator: unknown, defaultBranchConfig: unknown);
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new worktree
|
|
20
|
+
* @param params - Creation parameters
|
|
21
|
+
* @returns Result with task ID and repository info
|
|
22
|
+
*/
|
|
23
|
+
createWorktree(params: WorktreeCreateInput): Promise<CreateWorktreeResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Deletes a worktree
|
|
26
|
+
* @param params - Deletion parameters
|
|
27
|
+
* @returns Updated repository data
|
|
28
|
+
*/
|
|
29
|
+
deleteWorktree(params: WorktreeDeleteInput): Promise<RepositoriesData>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creates a worktree service instance
|
|
33
|
+
* @param workdir - Work directory root
|
|
34
|
+
* @param branchNameGenerator - Branch name generator
|
|
35
|
+
* @param defaultBranchConfig - Default branch configuration
|
|
36
|
+
* @returns WorktreeService instance
|
|
37
|
+
*/
|
|
38
|
+
export declare function createWorktreeService(workdir: string, branchNameGenerator: unknown, defaultBranchConfig: unknown): WorktreeService;
|
|
39
|
+
//# sourceMappingURL=worktree-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-service.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAFnB,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,OAAO,EAC5B,mBAAmB,EAAE,OAAO;IAG/C;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmKhF;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuC7E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,OAAO,EAC5B,mBAAmB,EAAE,OAAO,GAC3B,eAAe,CAEjB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { createWorktree, getWorktreePath, normalizeBranchName, removeWorktree, } from '../core/git.js';
|
|
2
|
+
import { selectDefaultBranchOverride } from '../core/default-branch.js';
|
|
3
|
+
import { detectTmux, isTmuxAvailable, makeTmuxSessionName, tmuxKillSession, } from '../core/tmux.js';
|
|
4
|
+
import { disposeSessionByKey, makeSessionKey } from '../core/terminal-sessions.js';
|
|
5
|
+
import { savePlanToWorktree } from '../core/plan-storage.js';
|
|
6
|
+
import { runTask } from '../core/tasks.js';
|
|
7
|
+
import { refreshRepositoryCache } from '../utils/repository-cache.js';
|
|
8
|
+
const TASK_TYPE_CREATE_WORKTREE = 'worktree:create';
|
|
9
|
+
const STEP_IDS = Object.freeze({
|
|
10
|
+
GENERATE_BRANCH: 'generate-branch',
|
|
11
|
+
SYNC_DEFAULT_BRANCH: 'sync-default-branch',
|
|
12
|
+
CREATE_WORKTREE: 'create-worktree',
|
|
13
|
+
RUN_INIT_SCRIPT: 'run-init-script',
|
|
14
|
+
SAVE_PLAN: 'save-plan',
|
|
15
|
+
REFRESH_REPOSITORIES: 'refresh-repositories',
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Service for worktree lifecycle management
|
|
19
|
+
*/
|
|
20
|
+
export class WorktreeService {
|
|
21
|
+
workdir;
|
|
22
|
+
branchNameGenerator;
|
|
23
|
+
defaultBranchConfig;
|
|
24
|
+
constructor(workdir, branchNameGenerator, defaultBranchConfig) {
|
|
25
|
+
this.workdir = workdir;
|
|
26
|
+
this.branchNameGenerator = branchNameGenerator;
|
|
27
|
+
this.defaultBranchConfig = defaultBranchConfig;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new worktree
|
|
31
|
+
* @param params - Creation parameters
|
|
32
|
+
* @returns Result with task ID and repository info
|
|
33
|
+
*/
|
|
34
|
+
async createWorktree(params) {
|
|
35
|
+
const { org, repo, branch, prompt, hasPrompt } = params;
|
|
36
|
+
let normalisedBranch = normalizeBranchName(branch);
|
|
37
|
+
const generator = this.branchNameGenerator;
|
|
38
|
+
if (!normalisedBranch && (!generator || !generator.isConfigured)) {
|
|
39
|
+
throw new Error('Branch name generation is not configured. Provide a branch or configure a local LLM command (set branchNameLlm in config.json).');
|
|
40
|
+
}
|
|
41
|
+
const defaultBranchOverride = selectDefaultBranchOverride(this.defaultBranchConfig, org, repo);
|
|
42
|
+
const { id: taskId } = runTask({
|
|
43
|
+
type: TASK_TYPE_CREATE_WORKTREE,
|
|
44
|
+
title: `Create worktree for ${org}/${repo}`,
|
|
45
|
+
metadata: {
|
|
46
|
+
org,
|
|
47
|
+
repo,
|
|
48
|
+
requestedBranch: normalisedBranch || null,
|
|
49
|
+
promptProvided: hasPrompt,
|
|
50
|
+
},
|
|
51
|
+
}, async (context) => {
|
|
52
|
+
const ctx = context;
|
|
53
|
+
const { progress, updateMetadata, setResult } = ctx;
|
|
54
|
+
const prog = progress;
|
|
55
|
+
const updateMeta = updateMetadata;
|
|
56
|
+
const setRes = setResult;
|
|
57
|
+
let targetBranch = normalisedBranch;
|
|
58
|
+
prog.ensureStep(STEP_IDS.GENERATE_BRANCH, 'Generate branch name');
|
|
59
|
+
if (!targetBranch) {
|
|
60
|
+
prog.startStep(STEP_IDS.GENERATE_BRANCH, {
|
|
61
|
+
label: 'Generate branch name',
|
|
62
|
+
message: 'Generating branch name from prompt.',
|
|
63
|
+
});
|
|
64
|
+
try {
|
|
65
|
+
const generated = await generator.generateBranchName({
|
|
66
|
+
prompt,
|
|
67
|
+
org,
|
|
68
|
+
repo,
|
|
69
|
+
});
|
|
70
|
+
const trimmed = normalizeBranchName(generated);
|
|
71
|
+
if (!trimmed) {
|
|
72
|
+
throw new Error('Branch name generator returned an empty branch name.');
|
|
73
|
+
}
|
|
74
|
+
targetBranch = trimmed;
|
|
75
|
+
updateMeta({ branch: targetBranch });
|
|
76
|
+
prog.completeStep(STEP_IDS.GENERATE_BRANCH, {
|
|
77
|
+
label: 'Generate branch name',
|
|
78
|
+
message: `Generated branch ${targetBranch}.`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const message = error?.message || 'Failed to generate branch name.';
|
|
83
|
+
prog.failStep(STEP_IDS.GENERATE_BRANCH, {
|
|
84
|
+
label: 'Generate branch name',
|
|
85
|
+
message,
|
|
86
|
+
});
|
|
87
|
+
throw new Error(`Failed to generate branch name: ${message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
prog.skipStep(STEP_IDS.GENERATE_BRANCH, {
|
|
92
|
+
label: 'Generate branch name',
|
|
93
|
+
message: `Using provided branch ${targetBranch}.`,
|
|
94
|
+
});
|
|
95
|
+
updateMeta({ branch: targetBranch });
|
|
96
|
+
}
|
|
97
|
+
prog.ensureStep(STEP_IDS.SYNC_DEFAULT_BRANCH, 'Sync default branch');
|
|
98
|
+
prog.ensureStep(STEP_IDS.CREATE_WORKTREE, 'Create worktree');
|
|
99
|
+
prog.ensureStep(STEP_IDS.RUN_INIT_SCRIPT, 'Run init script');
|
|
100
|
+
await createWorktree(this.workdir, org, repo, targetBranch, {
|
|
101
|
+
defaultBranchOverride,
|
|
102
|
+
progress: prog,
|
|
103
|
+
});
|
|
104
|
+
if (hasPrompt) {
|
|
105
|
+
prog.ensureStep(STEP_IDS.SAVE_PLAN, 'Save plan prompt');
|
|
106
|
+
prog.startStep(STEP_IDS.SAVE_PLAN, {
|
|
107
|
+
label: 'Save plan prompt',
|
|
108
|
+
message: 'Persisting plan to the new worktree.',
|
|
109
|
+
});
|
|
110
|
+
try {
|
|
111
|
+
const { worktreePath } = await getWorktreePath(this.workdir, org, repo, targetBranch);
|
|
112
|
+
await savePlanToWorktree({
|
|
113
|
+
worktreePath,
|
|
114
|
+
branch: targetBranch,
|
|
115
|
+
planText: prompt,
|
|
116
|
+
});
|
|
117
|
+
prog.completeStep(STEP_IDS.SAVE_PLAN, {
|
|
118
|
+
label: 'Save plan prompt',
|
|
119
|
+
message: 'Plan saved to worktree.',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const message = error?.message || 'Failed to persist plan for worktree.';
|
|
124
|
+
prog.failStep(STEP_IDS.SAVE_PLAN, {
|
|
125
|
+
label: 'Save plan prompt',
|
|
126
|
+
message,
|
|
127
|
+
});
|
|
128
|
+
console.warn('[agentrix] Failed to persist plan for worktree:', error?.message || error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
prog.ensureStep(STEP_IDS.REFRESH_REPOSITORIES, 'Refresh repositories');
|
|
132
|
+
prog.startStep(STEP_IDS.REFRESH_REPOSITORIES, {
|
|
133
|
+
label: 'Refresh repositories',
|
|
134
|
+
message: 'Refreshing repository cache.',
|
|
135
|
+
});
|
|
136
|
+
try {
|
|
137
|
+
await refreshRepositoryCache(this.workdir);
|
|
138
|
+
prog.completeStep(STEP_IDS.REFRESH_REPOSITORIES, {
|
|
139
|
+
label: 'Refresh repositories',
|
|
140
|
+
message: 'Repository cache refreshed.',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
const message = error?.message || 'Failed to refresh repository list.';
|
|
145
|
+
prog.failStep(STEP_IDS.REFRESH_REPOSITORIES, {
|
|
146
|
+
label: 'Refresh repositories',
|
|
147
|
+
message,
|
|
148
|
+
});
|
|
149
|
+
throw new Error(`Failed to refresh repositories: ${message}`);
|
|
150
|
+
}
|
|
151
|
+
setRes({
|
|
152
|
+
org,
|
|
153
|
+
repo,
|
|
154
|
+
branch: targetBranch,
|
|
155
|
+
promptProvided: hasPrompt,
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
return {
|
|
159
|
+
taskId,
|
|
160
|
+
org,
|
|
161
|
+
repo,
|
|
162
|
+
branch: normalisedBranch || null,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Deletes a worktree
|
|
167
|
+
* @param params - Deletion parameters
|
|
168
|
+
* @returns Updated repository data
|
|
169
|
+
*/
|
|
170
|
+
async deleteWorktree(params) {
|
|
171
|
+
const { org, repo, branch } = params;
|
|
172
|
+
const normalised = normalizeBranchName(branch);
|
|
173
|
+
if (!normalised) {
|
|
174
|
+
throw new Error('Branch name cannot be empty');
|
|
175
|
+
}
|
|
176
|
+
const config = this.defaultBranchConfig;
|
|
177
|
+
const overrideDefault = selectDefaultBranchOverride(config, org, repo);
|
|
178
|
+
const protectedBranch = overrideDefault ? overrideDefault.toLowerCase() : 'main';
|
|
179
|
+
if (normalised.toLowerCase() === protectedBranch) {
|
|
180
|
+
throw new Error(`Cannot remove the default worktree (${overrideDefault || 'main'})`);
|
|
181
|
+
}
|
|
182
|
+
const sessionKey = makeSessionKey(org, repo, normalised);
|
|
183
|
+
await disposeSessionByKey(sessionKey);
|
|
184
|
+
await detectTmux();
|
|
185
|
+
if (isTmuxAvailable()) {
|
|
186
|
+
const tmuxSessionName = makeTmuxSessionName(org, repo, normalised);
|
|
187
|
+
try {
|
|
188
|
+
await tmuxKillSession(tmuxSessionName);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.warn(`[agentrix] Failed to kill tmux session ${tmuxSessionName}:`, error.message);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
await removeWorktree(this.workdir, org, repo, normalised);
|
|
195
|
+
return await refreshRepositoryCache(this.workdir);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Creates a worktree service instance
|
|
200
|
+
* @param workdir - Work directory root
|
|
201
|
+
* @param branchNameGenerator - Branch name generator
|
|
202
|
+
* @param defaultBranchConfig - Default branch configuration
|
|
203
|
+
* @returns WorktreeService instance
|
|
204
|
+
*/
|
|
205
|
+
export function createWorktreeService(workdir, branchNameGenerator, defaultBranchConfig) {
|
|
206
|
+
return new WorktreeService(workdir, branchNameGenerator, defaultBranchConfig);
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=worktree-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-service.js","sourceRoot":"","sources":["../../src/services/worktree-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Cookie options for authentication
|
|
4
|
+
*/
|
|
5
|
+
export interface CookieOptions {
|
|
6
|
+
maxAge?: number;
|
|
7
|
+
expires?: Date;
|
|
8
|
+
path?: string;
|
|
9
|
+
domain?: string;
|
|
10
|
+
secure?: boolean;
|
|
11
|
+
httpOnly?: boolean;
|
|
12
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Authentication manager interface
|
|
16
|
+
*/
|
|
17
|
+
export interface AuthManager {
|
|
18
|
+
login(req: IncomingMessage, res: ServerResponse, password: string, options?: {
|
|
19
|
+
secure?: boolean;
|
|
20
|
+
}): string;
|
|
21
|
+
logout(req: IncomingMessage, res: ServerResponse, options?: {
|
|
22
|
+
secure?: boolean;
|
|
23
|
+
}): void;
|
|
24
|
+
isAuthenticated(req: IncomingMessage): boolean;
|
|
25
|
+
hasToken(token: string): boolean;
|
|
26
|
+
clear(): void;
|
|
27
|
+
getTokenFromRequest(req: IncomingMessage): string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Cookie manager interface
|
|
31
|
+
*/
|
|
32
|
+
export interface CookieManager {
|
|
33
|
+
resolveSecure(req: IncomingMessage): boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3G,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":""}
|