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,128 @@
|
|
|
1
|
+
import { discoverRepositories } from '../core/git.js';
|
|
2
|
+
import { listActiveSessions } from '../core/terminal-sessions.js';
|
|
3
|
+
import { getEventTypes, subscribeToEvents } from '../core/event-bus.js';
|
|
4
|
+
import { listTasks } from '../core/tasks.js';
|
|
5
|
+
const HEARTBEAT_INTERVAL_MS = 15000;
|
|
6
|
+
function writeEvent(res, { event, data }) {
|
|
7
|
+
const payload = typeof data === 'string' ? data : JSON.stringify(data);
|
|
8
|
+
res.write(`event: ${event}\n`);
|
|
9
|
+
res.write(`data: ${payload}\n\n`);
|
|
10
|
+
}
|
|
11
|
+
async function sendInitialSnapshots(res, workdir) {
|
|
12
|
+
const [reposSnapshot, sessionsSnapshot, tasksSnapshot] = await Promise.all([
|
|
13
|
+
discoverRepositories(workdir).catch(() => ({})),
|
|
14
|
+
Promise.resolve(listActiveSessions()).then((sessions) => sessions.map((session) => {
|
|
15
|
+
const lastActivityAtMs = typeof session.lastActivityAt === 'number'
|
|
16
|
+
? session.lastActivityAt
|
|
17
|
+
: session.lastActivityAt instanceof Date
|
|
18
|
+
? session.lastActivityAt.getTime()
|
|
19
|
+
: null;
|
|
20
|
+
return {
|
|
21
|
+
id: session.id,
|
|
22
|
+
org: session.org,
|
|
23
|
+
repo: session.repo,
|
|
24
|
+
branch: session.branch,
|
|
25
|
+
usingTmux: session.usingTmux,
|
|
26
|
+
idle: Boolean(session.idle),
|
|
27
|
+
lastActivityAt: lastActivityAtMs ? new Date(lastActivityAtMs).toISOString() : null,
|
|
28
|
+
};
|
|
29
|
+
})),
|
|
30
|
+
Promise.resolve(listTasks()).catch(() => []),
|
|
31
|
+
]);
|
|
32
|
+
writeEvent(res, { event: getEventTypes().REPOS_UPDATE, data: { data: reposSnapshot } });
|
|
33
|
+
writeEvent(res, { event: getEventTypes().SESSIONS_UPDATE, data: { sessions: sessionsSnapshot } });
|
|
34
|
+
if (Array.isArray(tasksSnapshot) && tasksSnapshot.length > 0) {
|
|
35
|
+
writeEvent(res, { event: getEventTypes().TASKS_UPDATE, data: { tasks: tasksSnapshot } });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function createEventStreamHandler({ authManager, workdir }) {
|
|
39
|
+
if (!authManager) {
|
|
40
|
+
throw new Error('authManager is required');
|
|
41
|
+
}
|
|
42
|
+
if (!workdir) {
|
|
43
|
+
throw new Error('workdir is required');
|
|
44
|
+
}
|
|
45
|
+
return async function handleEventStream(context) {
|
|
46
|
+
const { res, req } = context;
|
|
47
|
+
if (!authManager.isAuthenticated(req)) {
|
|
48
|
+
res.statusCode = 401;
|
|
49
|
+
res.end();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
res.writeHead(200, {
|
|
53
|
+
'Cache-Control': 'no-store',
|
|
54
|
+
Connection: 'keep-alive',
|
|
55
|
+
'Content-Type': 'text/event-stream',
|
|
56
|
+
'X-Accel-Buffering': 'no',
|
|
57
|
+
});
|
|
58
|
+
res.write(': connected\n\n');
|
|
59
|
+
const cleanupFunctions = [];
|
|
60
|
+
const heartbeatInterval = setInterval(() => {
|
|
61
|
+
try {
|
|
62
|
+
res.write(`: ping ${Date.now()}\n\n`);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
clearInterval(heartbeatInterval);
|
|
66
|
+
}
|
|
67
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
68
|
+
cleanupFunctions.push(() => clearInterval(heartbeatInterval));
|
|
69
|
+
const unsubscribeRepos = subscribeToEvents(getEventTypes().REPOS_UPDATE, (payload) => {
|
|
70
|
+
try {
|
|
71
|
+
writeEvent(res, { event: getEventTypes().REPOS_UPDATE, data: { data: payload } });
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
res.end();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
cleanupFunctions.push(unsubscribeRepos);
|
|
78
|
+
const unsubscribeSessions = subscribeToEvents(getEventTypes().SESSIONS_UPDATE, (payload) => {
|
|
79
|
+
try {
|
|
80
|
+
writeEvent(res, {
|
|
81
|
+
event: getEventTypes().SESSIONS_UPDATE,
|
|
82
|
+
data: { sessions: payload },
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
res.end();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
cleanupFunctions.push(unsubscribeSessions);
|
|
90
|
+
const unsubscribeTasks = subscribeToEvents(getEventTypes().TASKS_UPDATE, (payload) => {
|
|
91
|
+
try {
|
|
92
|
+
writeEvent(res, {
|
|
93
|
+
event: getEventTypes().TASKS_UPDATE,
|
|
94
|
+
data: payload,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
res.end();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
cleanupFunctions.push(unsubscribeTasks);
|
|
102
|
+
req.on('close', () => {
|
|
103
|
+
cleanupFunctions.forEach((fn) => {
|
|
104
|
+
try {
|
|
105
|
+
fn();
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// ignore cleanup errors
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
try {
|
|
113
|
+
await sendInitialSnapshots(res, workdir);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const err = error;
|
|
117
|
+
try {
|
|
118
|
+
res.write(`event: error\n`);
|
|
119
|
+
res.write(`data: ${JSON.stringify({ error: err?.message || 'Failed to stream events' })}\n\n`);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// ignore secondary failures
|
|
123
|
+
}
|
|
124
|
+
res.end();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/server/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Server as HttpServer } from 'node:http';
|
|
2
|
+
import { DEFAULT_HOST, DEFAULT_PORT } from '../config/constants.js';
|
|
3
|
+
import { generateRandomPassword } from '../utils/random.js';
|
|
4
|
+
import type { ServerConfig } from '../types/config.js';
|
|
5
|
+
export interface StartServerResult {
|
|
6
|
+
server: HttpServer;
|
|
7
|
+
host: string;
|
|
8
|
+
port: number;
|
|
9
|
+
uiPath: string;
|
|
10
|
+
workdir: string;
|
|
11
|
+
close: () => Promise<void>;
|
|
12
|
+
password: string;
|
|
13
|
+
commands: unknown;
|
|
14
|
+
publicUrl: string | null;
|
|
15
|
+
}
|
|
16
|
+
export declare function startServer({ uiPath, port, host, workdir, password, commandOverrides, ngrok: ngrokConfig, automationApiKey, openaiApiKey, branchNameLlm, planLlm, defaultBranches, cookieSecure, terminalSessionMode, }?: Partial<ServerConfig>): Promise<StartServerResult>;
|
|
17
|
+
export { DEFAULT_HOST, DEFAULT_PORT, generateRandomPassword };
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAW5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,IAAmB,EACnB,IAAmB,EACnB,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,KAAK,EAAE,WAAW,EAClB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,OAAO,EACP,eAAe,EACf,YAAY,EACZ,mBAA4B,GAC7B,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwLzD;AAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import { DEFAULT_HOST, DEFAULT_PORT } from '../config/constants.js';
|
|
3
|
+
import { createAuthManager } from '../core/auth.js';
|
|
4
|
+
import { resolveWorkdir } from '../core/workdir.js';
|
|
5
|
+
import { disposeAllSessions } from '../core/terminal-sessions.js';
|
|
6
|
+
import { generateRandomPassword } from '../utils/random.js';
|
|
7
|
+
import { sendJson } from '../utils/http.js';
|
|
8
|
+
import { createRouter } from './router.js';
|
|
9
|
+
import { attachTerminalWebSockets } from './websocket.js';
|
|
10
|
+
import { createUiProvider } from './ui.js';
|
|
11
|
+
import { createCookieManager } from './cookies.js';
|
|
12
|
+
import { createAgentCommands } from '../config/agent-commands.js';
|
|
13
|
+
import { createBranchNameGenerator } from '../core/branch-name.js';
|
|
14
|
+
import { createPlanService } from '../core/plan.js';
|
|
15
|
+
import { configureTaskPersistence, flushTaskPersistence } from '../core/tasks.js';
|
|
16
|
+
import { createTaskStore } from '../core/task-store.js';
|
|
17
|
+
export async function startServer({ uiPath, port = DEFAULT_PORT, host = DEFAULT_HOST, workdir, password, commandOverrides, ngrok: ngrokConfig, automationApiKey, openaiApiKey, branchNameLlm, planLlm, defaultBranches, cookieSecure, terminalSessionMode = 'auto', } = {}) {
|
|
18
|
+
if (!uiPath) {
|
|
19
|
+
throw new Error('Missing required option: uiPath');
|
|
20
|
+
}
|
|
21
|
+
const uiProvider = await createUiProvider(uiPath);
|
|
22
|
+
const resolvedWorkdir = workdir ? await resolveWorkdir(workdir) : process.cwd();
|
|
23
|
+
const taskStore = createTaskStore({ root: resolvedWorkdir, logger: console });
|
|
24
|
+
await configureTaskPersistence({
|
|
25
|
+
saveSnapshot: (snapshot) => taskStore.saveSnapshot(snapshot),
|
|
26
|
+
logger: console,
|
|
27
|
+
});
|
|
28
|
+
const resolvedPassword = typeof password === 'string' && password.length > 0 ? password : generateRandomPassword();
|
|
29
|
+
const authManager = createAuthManager(resolvedPassword);
|
|
30
|
+
const agentCommands = createAgentCommands(commandOverrides);
|
|
31
|
+
const resolvedOpenAiKey = openaiApiKey ?? process.env['OPENAI_API_KEY'] ?? undefined;
|
|
32
|
+
if (resolvedOpenAiKey && !process.env['OPENAI_API_KEY']) {
|
|
33
|
+
process.env['OPENAI_API_KEY'] = resolvedOpenAiKey;
|
|
34
|
+
}
|
|
35
|
+
const branchNameGenerator = createBranchNameGenerator({
|
|
36
|
+
defaultLlm: branchNameLlm,
|
|
37
|
+
});
|
|
38
|
+
const planService = createPlanService({ defaultLlm: planLlm });
|
|
39
|
+
const cookieManager = createCookieManager({ secureSetting: cookieSecure });
|
|
40
|
+
const router = createRouter({
|
|
41
|
+
authManager,
|
|
42
|
+
workdir: resolvedWorkdir,
|
|
43
|
+
agentCommands,
|
|
44
|
+
automationApiKey,
|
|
45
|
+
branchNameGenerator,
|
|
46
|
+
planService,
|
|
47
|
+
defaultBranches,
|
|
48
|
+
cookieManager,
|
|
49
|
+
terminalSessionMode,
|
|
50
|
+
});
|
|
51
|
+
const server = http.createServer(async (req, res) => {
|
|
52
|
+
try {
|
|
53
|
+
const handled = await router(req, res);
|
|
54
|
+
if (handled) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
|
|
58
|
+
if (url.pathname.startsWith('/api/')) {
|
|
59
|
+
sendJson(res, 404, { error: 'Not Found' });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
await uiProvider.serve(req, res);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('[agentrix] Request handling error:', error);
|
|
66
|
+
if (!res.headersSent) {
|
|
67
|
+
res.statusCode = 500;
|
|
68
|
+
res.end('Internal Server Error');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
res.end();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
const { close: closeWebSockets } = attachTerminalWebSockets(server, authManager);
|
|
76
|
+
const activeSockets = new Set();
|
|
77
|
+
server.on('connection', (socket) => {
|
|
78
|
+
activeSockets.add(socket);
|
|
79
|
+
socket.on('close', () => {
|
|
80
|
+
activeSockets.delete(socket);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
await new Promise((resolve, reject) => {
|
|
84
|
+
server.once('error', reject);
|
|
85
|
+
server.listen(port, host, () => {
|
|
86
|
+
server.off('error', reject);
|
|
87
|
+
resolve();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
let ngrokListener = null;
|
|
91
|
+
let ngrokUrl = null;
|
|
92
|
+
const shouldStartNgrok = Boolean(ngrokConfig?.apiKey) && Boolean(ngrokConfig?.domain);
|
|
93
|
+
if (shouldStartNgrok) {
|
|
94
|
+
try {
|
|
95
|
+
const { forward } = await import('@ngrok/ngrok');
|
|
96
|
+
const listener = await forward({
|
|
97
|
+
addr: port,
|
|
98
|
+
authtoken: ngrokConfig?.apiKey || '',
|
|
99
|
+
domain: ngrokConfig?.domain || '',
|
|
100
|
+
});
|
|
101
|
+
ngrokListener = listener;
|
|
102
|
+
ngrokUrl = listener.url();
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
await disposeAllSessions().catch(() => { });
|
|
106
|
+
await closeWebSockets().catch(() => { });
|
|
107
|
+
try {
|
|
108
|
+
await new Promise((resolve) => {
|
|
109
|
+
server.close(() => resolve());
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// ignore errors during shutdown
|
|
114
|
+
}
|
|
115
|
+
authManager.clear();
|
|
116
|
+
throw new Error(`Failed to establish ngrok tunnel: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
let closing = false;
|
|
120
|
+
async function closeAll() {
|
|
121
|
+
if (closing) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
closing = true;
|
|
125
|
+
activeSockets.forEach((socket) => {
|
|
126
|
+
try {
|
|
127
|
+
socket.destroy();
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// ignore socket destroy errors during shutdown
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
const serverClose = new Promise((resolve) => {
|
|
134
|
+
server.close(() => resolve());
|
|
135
|
+
});
|
|
136
|
+
const closeTasks = [
|
|
137
|
+
flushTaskPersistence(),
|
|
138
|
+
disposeAllSessions(),
|
|
139
|
+
closeWebSockets(),
|
|
140
|
+
serverClose,
|
|
141
|
+
];
|
|
142
|
+
if (branchNameGenerator && typeof branchNameGenerator.dispose === 'function') {
|
|
143
|
+
closeTasks.push(branchNameGenerator
|
|
144
|
+
.dispose()
|
|
145
|
+
.catch((error) => console.error('[agentrix] Failed to dispose branch name generator:', error)));
|
|
146
|
+
}
|
|
147
|
+
if (planService && typeof planService.dispose === 'function') {
|
|
148
|
+
closeTasks.push(planService
|
|
149
|
+
.dispose()
|
|
150
|
+
.catch((error) => console.error('[agentrix] Failed to dispose plan service:', error)));
|
|
151
|
+
}
|
|
152
|
+
if (ngrokListener) {
|
|
153
|
+
closeTasks.push(ngrokListener
|
|
154
|
+
.close()
|
|
155
|
+
.catch((err) => console.error('[agentrix] Failed to close ngrok tunnel:', err)));
|
|
156
|
+
}
|
|
157
|
+
await Promise.allSettled(closeTasks);
|
|
158
|
+
authManager.clear();
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
server,
|
|
162
|
+
host,
|
|
163
|
+
port,
|
|
164
|
+
uiPath: uiProvider.resolvedPath,
|
|
165
|
+
workdir: resolvedWorkdir,
|
|
166
|
+
close: closeAll,
|
|
167
|
+
password: resolvedPassword,
|
|
168
|
+
commands: agentCommands,
|
|
169
|
+
publicUrl: ngrokUrl,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
export { DEFAULT_HOST, DEFAULT_PORT, generateRandomPassword };
|
|
173
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { AuthManager, CookieManager } from '../types/auth.js';
|
|
3
|
+
export interface RouterConfig {
|
|
4
|
+
authManager: AuthManager;
|
|
5
|
+
workdir: string;
|
|
6
|
+
agentCommands: unknown;
|
|
7
|
+
automationApiKey?: string;
|
|
8
|
+
branchNameGenerator: unknown;
|
|
9
|
+
planService: unknown;
|
|
10
|
+
defaultBranches: unknown;
|
|
11
|
+
cookieManager?: CookieManager;
|
|
12
|
+
terminalSessionMode?: 'auto' | 'tmux' | 'pty';
|
|
13
|
+
}
|
|
14
|
+
export type Router = (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
|
|
15
|
+
export declare function createRouter({ authManager, workdir, agentCommands, automationApiKey, branchNameGenerator, planService, defaultBranches, cookieManager, terminalSessionMode, }: RouterConfig): Router;
|
|
16
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/server/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAgBjE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;CAC/C;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAErF,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,aAAa,EACb,mBAA4B,GAC7B,EAAE,YAAY,GAAG,MAAM,CAyPvB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { createAuthHandlers } from '../api/auth.js';
|
|
2
|
+
import { createAutomationHandlers } from '../api/automation.js';
|
|
3
|
+
import { createRepoHandlers } from '../api/repos.js';
|
|
4
|
+
import { createRepoDashboardHandlers } from '../api/repo-dashboard.js';
|
|
5
|
+
import { createRepoIssueHandlers } from '../api/repo-issue.js';
|
|
6
|
+
import { createSessionHandlers } from '../api/sessions.js';
|
|
7
|
+
import { createTerminalHandlers } from '../api/terminal.js';
|
|
8
|
+
import { createWorktreeHandlers } from '../api/worktrees.js';
|
|
9
|
+
import { createGitStatusHandlers } from '../api/git-status.js';
|
|
10
|
+
import { sendJson, readJsonBody } from '../utils/http.js';
|
|
11
|
+
import { createConfigHandlers } from '../api/config.js';
|
|
12
|
+
import { createPlanHandlers } from '../api/create-plan.js';
|
|
13
|
+
import { createPlanArtifactHandlers } from '../api/plans.js';
|
|
14
|
+
import { createEventStreamHandler } from './events.js';
|
|
15
|
+
import { createTaskHandlers } from '../api/tasks.js';
|
|
16
|
+
export function createRouter({ authManager, workdir, agentCommands, automationApiKey, branchNameGenerator, planService, defaultBranches, cookieManager, terminalSessionMode = 'auto', }) {
|
|
17
|
+
if (!authManager) {
|
|
18
|
+
throw new Error('authManager is required');
|
|
19
|
+
}
|
|
20
|
+
if (!agentCommands) {
|
|
21
|
+
throw new Error('agentCommands is required');
|
|
22
|
+
}
|
|
23
|
+
const authHandlers = createAuthHandlers(authManager, { cookieManager });
|
|
24
|
+
const automationHandlers = createAutomationHandlers({
|
|
25
|
+
workdir,
|
|
26
|
+
agentCommands,
|
|
27
|
+
apiKey: automationApiKey,
|
|
28
|
+
branchNameGenerator,
|
|
29
|
+
planService,
|
|
30
|
+
defaultBranches,
|
|
31
|
+
});
|
|
32
|
+
const repoHandlers = createRepoHandlers(workdir);
|
|
33
|
+
const repoDashboardHandlers = createRepoDashboardHandlers(workdir);
|
|
34
|
+
const repoIssueHandlers = createRepoIssueHandlers(workdir);
|
|
35
|
+
const sessionHandlers = createSessionHandlers(workdir);
|
|
36
|
+
const worktreeHandlers = createWorktreeHandlers(workdir, branchNameGenerator, defaultBranches);
|
|
37
|
+
const terminalHandlers = createTerminalHandlers(workdir, { mode: terminalSessionMode });
|
|
38
|
+
const configHandlers = createConfigHandlers(agentCommands);
|
|
39
|
+
const planHandlers = createPlanHandlers({ planService: planService });
|
|
40
|
+
const gitStatusHandlers = createGitStatusHandlers(workdir);
|
|
41
|
+
const planArtifactHandlers = createPlanArtifactHandlers(workdir);
|
|
42
|
+
const eventStreamHandler = createEventStreamHandler({ authManager, workdir });
|
|
43
|
+
const taskHandlers = createTaskHandlers();
|
|
44
|
+
const routes = new Map([
|
|
45
|
+
[
|
|
46
|
+
'/api/auth/login',
|
|
47
|
+
{
|
|
48
|
+
requiresAuth: false,
|
|
49
|
+
handlers: { POST: authHandlers.login },
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
'/api/auth/logout',
|
|
54
|
+
{
|
|
55
|
+
requiresAuth: false,
|
|
56
|
+
handlers: { POST: authHandlers.logout },
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
'/api/auth/status',
|
|
61
|
+
{
|
|
62
|
+
requiresAuth: false,
|
|
63
|
+
handlers: { GET: authHandlers.status, HEAD: authHandlers.status },
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
'/api/repos',
|
|
68
|
+
{
|
|
69
|
+
requiresAuth: true,
|
|
70
|
+
handlers: {
|
|
71
|
+
GET: repoHandlers.list,
|
|
72
|
+
HEAD: repoHandlers.list,
|
|
73
|
+
POST: repoHandlers.create,
|
|
74
|
+
DELETE: repoHandlers.delete,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
'/api/repos/init-command',
|
|
80
|
+
{
|
|
81
|
+
requiresAuth: true,
|
|
82
|
+
handlers: { POST: repoHandlers.updateInitCommand },
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
[
|
|
86
|
+
'/api/repos/dashboard',
|
|
87
|
+
{
|
|
88
|
+
requiresAuth: true,
|
|
89
|
+
handlers: { GET: repoDashboardHandlers.read, HEAD: repoDashboardHandlers.read },
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
[
|
|
93
|
+
'/api/repos/issue',
|
|
94
|
+
{
|
|
95
|
+
requiresAuth: true,
|
|
96
|
+
handlers: { GET: repoIssueHandlers.read, HEAD: repoIssueHandlers.read },
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
'/api/sessions',
|
|
101
|
+
{
|
|
102
|
+
requiresAuth: true,
|
|
103
|
+
handlers: { GET: sessionHandlers.list, HEAD: sessionHandlers.list },
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'/api/worktrees',
|
|
108
|
+
{
|
|
109
|
+
requiresAuth: true,
|
|
110
|
+
handlers: {
|
|
111
|
+
POST: worktreeHandlers.create,
|
|
112
|
+
DELETE: worktreeHandlers.delete,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
'/api/git/status',
|
|
118
|
+
{
|
|
119
|
+
requiresAuth: true,
|
|
120
|
+
handlers: { GET: gitStatusHandlers.read, HEAD: gitStatusHandlers.read },
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
[
|
|
124
|
+
'/api/git/diff',
|
|
125
|
+
{
|
|
126
|
+
requiresAuth: true,
|
|
127
|
+
handlers: { POST: gitStatusHandlers.diff },
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
'/api/terminal/open',
|
|
132
|
+
{
|
|
133
|
+
requiresAuth: true,
|
|
134
|
+
handlers: { POST: terminalHandlers.open },
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
'/api/terminal/send',
|
|
139
|
+
{
|
|
140
|
+
requiresAuth: true,
|
|
141
|
+
handlers: { POST: terminalHandlers.send },
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
[
|
|
145
|
+
'/api/commands',
|
|
146
|
+
{
|
|
147
|
+
requiresAuth: true,
|
|
148
|
+
handlers: { GET: configHandlers.commands, HEAD: configHandlers.commands },
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
[
|
|
152
|
+
'/api/automation/launch',
|
|
153
|
+
{
|
|
154
|
+
requiresAuth: false,
|
|
155
|
+
handlers: { POST: automationHandlers.launch },
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
[
|
|
159
|
+
'/api/create-plan',
|
|
160
|
+
{
|
|
161
|
+
requiresAuth: true,
|
|
162
|
+
handlers: { POST: planHandlers.create },
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
[
|
|
166
|
+
'/api/plans',
|
|
167
|
+
{
|
|
168
|
+
requiresAuth: true,
|
|
169
|
+
handlers: { GET: planArtifactHandlers.list },
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
[
|
|
173
|
+
'/api/plans/content',
|
|
174
|
+
{
|
|
175
|
+
requiresAuth: true,
|
|
176
|
+
handlers: { GET: planArtifactHandlers.read },
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
'/api/events',
|
|
181
|
+
{
|
|
182
|
+
requiresAuth: true,
|
|
183
|
+
handlers: { GET: eventStreamHandler },
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
'/api/tasks',
|
|
188
|
+
{
|
|
189
|
+
requiresAuth: true,
|
|
190
|
+
handlers: { GET: taskHandlers.list, HEAD: taskHandlers.list },
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
]);
|
|
194
|
+
function handleMethodNotAllowed(res, allowedMethods = []) {
|
|
195
|
+
const headerValue = allowedMethods.join(', ');
|
|
196
|
+
if (headerValue) {
|
|
197
|
+
res.setHeader('Allow', headerValue);
|
|
198
|
+
}
|
|
199
|
+
res.statusCode = 405;
|
|
200
|
+
res.end('Method Not Allowed');
|
|
201
|
+
}
|
|
202
|
+
return async function route(req, res) {
|
|
203
|
+
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
|
|
204
|
+
if (url.pathname.startsWith('/api/tasks/')) {
|
|
205
|
+
if (!authManager.isAuthenticated(req)) {
|
|
206
|
+
sendJson(res, 401, { error: 'Authentication required' });
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
if (req.method && !['GET', 'HEAD'].includes(req.method.toUpperCase())) {
|
|
210
|
+
handleMethodNotAllowed(res, ['GET', 'HEAD']);
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
const taskId = url.pathname.slice('/api/tasks/'.length);
|
|
214
|
+
if (!taskId) {
|
|
215
|
+
sendJson(res, 404, { error: 'Task not found' });
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
const context = {
|
|
219
|
+
req,
|
|
220
|
+
res,
|
|
221
|
+
url,
|
|
222
|
+
method: req.method?.toUpperCase() || 'GET',
|
|
223
|
+
params: { id: taskId },
|
|
224
|
+
workdir,
|
|
225
|
+
readJsonBody: () => readJsonBody(req),
|
|
226
|
+
};
|
|
227
|
+
await taskHandlers.read(context, taskId);
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
const route = routes.get(url.pathname);
|
|
231
|
+
if (!route) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
const method = (req.method?.toUpperCase() || 'GET');
|
|
235
|
+
const allowed = route.handlers[method];
|
|
236
|
+
if (!allowed) {
|
|
237
|
+
handleMethodNotAllowed(res, Object.keys(route.handlers));
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
if (route.requiresAuth && !authManager.isAuthenticated(req)) {
|
|
241
|
+
sendJson(res, 401, { error: 'Authentication required' });
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
const context = {
|
|
245
|
+
req,
|
|
246
|
+
res,
|
|
247
|
+
url,
|
|
248
|
+
method,
|
|
249
|
+
workdir,
|
|
250
|
+
readJsonBody: () => readJsonBody(req),
|
|
251
|
+
};
|
|
252
|
+
await allowed(context);
|
|
253
|
+
return true;
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/server/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
export interface UiProvider {
|
|
3
|
+
type?: string;
|
|
4
|
+
resolvedPath: string;
|
|
5
|
+
serve(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createUiProvider(uiPath: string): Promise<UiProvider>;
|
|
8
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/server/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkNjE,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsB1E"}
|