agentrix 0.6.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/api/auth.d.ts +12 -3
  2. package/dist/api/auth.d.ts.map +1 -1
  3. package/dist/api/auth.js +46 -2
  4. package/dist/api/auth.js.map +1 -1
  5. package/dist/api/automation.d.ts +5 -1
  6. package/dist/api/automation.d.ts.map +1 -1
  7. package/dist/api/automation.js +44 -3
  8. package/dist/api/automation.js.map +1 -1
  9. package/dist/api/codex-sdk.d.ts +11 -0
  10. package/dist/api/codex-sdk.d.ts.map +1 -0
  11. package/dist/api/codex-sdk.js +38 -0
  12. package/dist/api/codex-sdk.js.map +1 -0
  13. package/dist/api/repos.d.ts.map +1 -1
  14. package/dist/api/repos.js +2 -5
  15. package/dist/api/repos.js.map +1 -1
  16. package/dist/config/constants.d.ts +7 -0
  17. package/dist/config/constants.d.ts.map +1 -1
  18. package/dist/config/constants.js +7 -0
  19. package/dist/config/constants.js.map +1 -1
  20. package/dist/core/codex-sdk-sessions.d.ts +47 -0
  21. package/dist/core/codex-sdk-sessions.d.ts.map +1 -0
  22. package/dist/core/codex-sdk-sessions.js +427 -0
  23. package/dist/core/codex-sdk-sessions.js.map +1 -0
  24. package/dist/core/codex-sdk-storage.d.ts +17 -0
  25. package/dist/core/codex-sdk-storage.d.ts.map +1 -0
  26. package/dist/core/codex-sdk-storage.js +87 -0
  27. package/dist/core/codex-sdk-storage.js.map +1 -0
  28. package/dist/core/ports.d.ts +1 -0
  29. package/dist/core/ports.d.ts.map +1 -1
  30. package/dist/core/ports.js +23 -2
  31. package/dist/core/ports.js.map +1 -1
  32. package/dist/core/security/rate-limiter.d.ts +17 -0
  33. package/dist/core/security/rate-limiter.d.ts.map +1 -0
  34. package/dist/core/security/rate-limiter.js +98 -0
  35. package/dist/core/security/rate-limiter.js.map +1 -0
  36. package/dist/domain/git-url-parser.d.ts.map +1 -1
  37. package/dist/domain/git-url-parser.js +4 -1
  38. package/dist/domain/git-url-parser.js.map +1 -1
  39. package/dist/domain/index.d.ts +1 -0
  40. package/dist/domain/index.d.ts.map +1 -1
  41. package/dist/domain/index.js +1 -0
  42. package/dist/domain/index.js.map +1 -1
  43. package/dist/domain/repository-identifiers.d.ts +19 -0
  44. package/dist/domain/repository-identifiers.d.ts.map +1 -0
  45. package/dist/domain/repository-identifiers.js +43 -0
  46. package/dist/domain/repository-identifiers.js.map +1 -0
  47. package/dist/repositories/repository-paths.d.ts +6 -0
  48. package/dist/repositories/repository-paths.d.ts.map +1 -0
  49. package/dist/repositories/repository-paths.js +27 -0
  50. package/dist/repositories/repository-paths.js.map +1 -0
  51. package/dist/repositories/repository-repository.d.ts +2 -5
  52. package/dist/repositories/repository-repository.d.ts.map +1 -1
  53. package/dist/repositories/repository-repository.js +3 -7
  54. package/dist/repositories/repository-repository.js.map +1 -1
  55. package/dist/repositories/worktree-repository.d.ts.map +1 -1
  56. package/dist/repositories/worktree-repository.js +7 -6
  57. package/dist/repositories/worktree-repository.js.map +1 -1
  58. package/dist/server/codex-sdk-websocket.d.ts +22 -0
  59. package/dist/server/codex-sdk-websocket.d.ts.map +1 -0
  60. package/dist/server/codex-sdk-websocket.js +134 -0
  61. package/dist/server/codex-sdk-websocket.js.map +1 -0
  62. package/dist/server/events.d.ts.map +1 -1
  63. package/dist/server/events.js +3 -1
  64. package/dist/server/events.js.map +1 -1
  65. package/dist/server/index.d.ts.map +1 -1
  66. package/dist/server/index.js +3 -0
  67. package/dist/server/index.js.map +1 -1
  68. package/dist/server/router.d.ts +2 -0
  69. package/dist/server/router.d.ts.map +1 -1
  70. package/dist/server/router.js +42 -0
  71. package/dist/server/router.js.map +1 -1
  72. package/dist/server/websocket.d.ts.map +1 -1
  73. package/dist/server/websocket.js +3 -0
  74. package/dist/server/websocket.js.map +1 -1
  75. package/dist/services/codex-sdk-service.d.ts +25 -0
  76. package/dist/services/codex-sdk-service.d.ts.map +1 -0
  77. package/dist/services/codex-sdk-service.js +28 -0
  78. package/dist/services/codex-sdk-service.js.map +1 -0
  79. package/dist/services/index.d.ts +2 -0
  80. package/dist/services/index.d.ts.map +1 -1
  81. package/dist/services/index.js +1 -0
  82. package/dist/services/index.js.map +1 -1
  83. package/dist/types/codex-sdk.d.ts +45 -0
  84. package/dist/types/codex-sdk.d.ts.map +1 -0
  85. package/dist/types/codex-sdk.js +2 -0
  86. package/dist/types/codex-sdk.js.map +1 -0
  87. package/dist/utils/http.d.ts +1 -0
  88. package/dist/utils/http.d.ts.map +1 -1
  89. package/dist/utils/http.js +20 -0
  90. package/dist/utils/http.js.map +1 -1
  91. package/dist/utils/repository-cache.d.ts +8 -0
  92. package/dist/utils/repository-cache.d.ts.map +1 -1
  93. package/dist/utils/repository-cache.js +23 -3
  94. package/dist/utils/repository-cache.js.map +1 -1
  95. package/dist/validation/index.d.ts +2 -0
  96. package/dist/validation/index.d.ts.map +1 -1
  97. package/dist/validation/index.js +1 -0
  98. package/dist/validation/index.js.map +1 -1
  99. package/dist/validation/schemas/codex-sdk-schema.d.ts +15 -0
  100. package/dist/validation/schemas/codex-sdk-schema.d.ts.map +1 -0
  101. package/dist/validation/schemas/codex-sdk-schema.js +17 -0
  102. package/dist/validation/schemas/codex-sdk-schema.js.map +1 -0
  103. package/package.json +8 -7
  104. package/ui/dist/assets/index-D3NYbc0T.css +41 -0
  105. package/ui/dist/assets/{index-f7A3y2vp.js → index-DR4f3mAT.js} +109 -109
  106. package/ui/dist/index.html +2 -2
  107. package/ui/dist/assets/index-DQsVJ2id.css +0 -41
@@ -1,18 +1,27 @@
1
1
  import { sendJson } from '../utils/http.js';
2
2
  import { createAuthService } from '../services/index.js';
3
+ import { createRateLimiter } from '../core/security/rate-limiter.js';
4
+ import { createLogger } from '../infrastructure/logging/index.js';
5
+ import type { RateLimiter } from '../core/security/rate-limiter.js';
6
+ import type { Logger } from '../infrastructure/logging/index.js';
3
7
  import type { RequestContext } from '../types/http.js';
4
8
  import type { AuthManager, CookieManager } from '../types/auth.js';
5
9
  interface AuthDependencies {
6
10
  createAuthService: typeof createAuthService;
7
11
  sendJson: typeof sendJson;
12
+ createRateLimiter: typeof createRateLimiter;
13
+ createLogger: typeof createLogger;
14
+ }
15
+ interface AuthHandlersOptions {
16
+ cookieManager?: CookieManager;
17
+ rateLimiter?: RateLimiter;
18
+ logger?: Logger;
8
19
  }
9
20
  /**
10
21
  * @internal Test hook to override auth handler dependencies
11
22
  */
12
23
  export declare function __setAuthTestOverrides(overrides?: Partial<AuthDependencies>): void;
13
- export declare function createAuthHandlers(authManager: AuthManager, { cookieManager }?: {
14
- cookieManager?: CookieManager;
15
- }): {
24
+ export declare function createAuthHandlers(authManager: AuthManager, options?: AuthHandlersOptions): {
16
25
  login: (context: RequestContext) => Promise<void>;
17
26
  logout: (context: RequestContext) => Promise<void>;
18
27
  status: (context: RequestContext) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B;AASD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAMlF;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,EAAE,aAAa,EAAE,GAAE;IAAE,aAAa,CAAC,EAAE,aAAa,CAAA;CAAO;;;;EA+B1D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AAWD,UAAU,mBAAmB;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAMlF;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB;;;;EAyE7F"}
package/dist/api/auth.js CHANGED
@@ -1,10 +1,15 @@
1
- import { sendJson } from '../utils/http.js';
1
+ import { getClientIp, sendJson } from '../utils/http.js';
2
2
  import { createAuthService } from '../services/index.js';
3
3
  import { asyncHandler } from '../infrastructure/errors/index.js';
4
4
  import { createSimpleHandler } from './base-handler.js';
5
+ import { createRateLimiter } from '../core/security/rate-limiter.js';
6
+ import { createLogger } from '../infrastructure/logging/index.js';
7
+ import { AUTH_RATE_LIMIT_MAX_ATTEMPTS, AUTH_RATE_LIMIT_WINDOW_MS, ERROR_MESSAGES, HTTP_STATUS, } from '../config/constants.js';
5
8
  const defaultDependencies = {
6
9
  createAuthService,
7
10
  sendJson,
11
+ createRateLimiter,
12
+ createLogger,
8
13
  };
9
14
  let activeDependencies = { ...defaultDependencies };
10
15
  /**
@@ -17,20 +22,59 @@ export function __setAuthTestOverrides(overrides) {
17
22
  }
18
23
  activeDependencies = { ...activeDependencies, ...overrides };
19
24
  }
20
- export function createAuthHandlers(authManager, { cookieManager } = {}) {
25
+ export function createAuthHandlers(authManager, options = {}) {
26
+ const { cookieManager, rateLimiter, logger } = options;
21
27
  const authService = activeDependencies.createAuthService(authManager, cookieManager);
28
+ const log = activeDependencies.createLogger(logger);
29
+ const loginRateLimiter = rateLimiter ||
30
+ activeDependencies.createRateLimiter({
31
+ windowMs: AUTH_RATE_LIMIT_WINDOW_MS,
32
+ maxAttempts: AUTH_RATE_LIMIT_MAX_ATTEMPTS,
33
+ });
22
34
  // Login requires special error handling for status codes
23
35
  const login = asyncHandler(async (context) => {
24
36
  const payload = await context.readJsonBody();
25
37
  const password = typeof payload['password'] === 'string' ? payload['password'].trim() : '';
38
+ const username = typeof payload['username'] === 'string' ? payload['username'].trim() : '';
39
+ const clientIp = getClientIp(context.req);
40
+ const limiterKey = clientIp;
41
+ const limiterStatus = loginRateLimiter.check(limiterKey);
42
+ if (limiterStatus.limited) {
43
+ log.warn('[agentrix] Login attempt throttled', {
44
+ clientIp,
45
+ username: username || 'n/a',
46
+ attempts: limiterStatus.attempts,
47
+ retryAfterMs: limiterStatus.retryAfterMs,
48
+ });
49
+ activeDependencies.sendJson(context.res, HTTP_STATUS.TOO_MANY_REQUESTS, {
50
+ error: ERROR_MESSAGES.TOO_MANY_LOGIN_ATTEMPTS,
51
+ });
52
+ return;
53
+ }
26
54
  try {
27
55
  const result = await authService.login(context.req, context.res, password);
56
+ loginRateLimiter.reset(limiterKey);
28
57
  activeDependencies.sendJson(context.res, 200, result);
29
58
  }
30
59
  catch (error) {
31
60
  // Auth errors need special handling for status codes
32
61
  const err = error;
33
62
  const statusCode = err.statusCode || (err.message === 'Invalid password' ? 401 : 400);
63
+ if (err.message === 'Invalid password') {
64
+ const failure = loginRateLimiter.recordFailure(limiterKey);
65
+ if (failure.limited) {
66
+ log.warn('[agentrix] Login rate limit triggered', {
67
+ clientIp,
68
+ username: username || 'n/a',
69
+ attempts: failure.attempts,
70
+ retryAfterMs: failure.retryAfterMs,
71
+ });
72
+ activeDependencies.sendJson(context.res, HTTP_STATUS.TOO_MANY_REQUESTS, {
73
+ error: ERROR_MESSAGES.TOO_MANY_LOGIN_ATTEMPTS,
74
+ });
75
+ return;
76
+ }
77
+ }
34
78
  activeDependencies.sendJson(context.res, statusCode, { error: err.message });
35
79
  }
36
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AASxD,MAAM,mBAAmB,GAAqB;IAC5C,iBAAiB;IACjB,QAAQ;CACT,CAAC;AAEF,IAAI,kBAAkB,GAAqB,EAAE,GAAG,mBAAmB,EAAE,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAqC;IAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,kBAAkB,GAAG,EAAE,GAAG,mBAAmB,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IACD,kBAAkB,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,SAAS,EAAsB,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAwB,EACxB,EAAE,aAAa,KAAwC,EAAE;IAEzD,MAAM,WAAW,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAErF,yDAAyD;IACzD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3E,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qDAAqD;YACrD,MAAM,GAAG,GAAG,KAAiD,CAAC;YAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtF,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpH,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EAAE,OAAuB,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CACtE,CAAC;IAEF,OAAO;QACL,KAAK;QACL,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,9 @@ import { generatePlanText } from '../core/automation/plan.js';
7
7
  import { createGitOrchestrator } from '../core/automation/git-orchestration.js';
8
8
  import { runAutomationTask } from '../core/automation/task-runner.js';
9
9
  import { createLogger } from '../infrastructure/logging/index.js';
10
+ import { createRateLimiter } from '../core/security/rate-limiter.js';
10
11
  import type { Logger } from '../infrastructure/logging/index.js';
12
+ import type { RateLimiter } from '../core/security/rate-limiter.js';
11
13
  interface AutomationModuleDependencies {
12
14
  cloneRepository: typeof cloneRepository;
13
15
  ensureRepository: typeof ensureRepository;
@@ -21,6 +23,7 @@ interface AutomationModuleDependencies {
21
23
  createGitOrchestrator: typeof createGitOrchestrator;
22
24
  runAutomationTask: typeof runAutomationTask;
23
25
  createLogger: typeof createLogger;
26
+ createRateLimiter: typeof createRateLimiter;
24
27
  }
25
28
  /**
26
29
  * @internal Test hook to override automation dependencies
@@ -65,8 +68,9 @@ export interface AutomationHandlersDependencies {
65
68
  runTaskImpl?: typeof runTask;
66
69
  now?: () => number;
67
70
  createRequestId?: () => string;
71
+ rateLimiter?: RateLimiter;
68
72
  }
69
- export declare function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }: AutomationHandlersConfig, { ensureRepositoryExists: ensureRepoExists, ensureWorktreeExists: ensureWorktree, launchAgentProcess: launchAgent, runTaskImpl, now, createRequestId, }?: AutomationHandlersDependencies): {
73
+ export declare function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }: AutomationHandlersConfig, { ensureRepositoryExists: ensureRepoExists, ensureWorktreeExists: ensureWorktree, launchAgentProcess: launchAgent, runTaskImpl, now, createRequestId, rateLimiter: injectedRateLimiter, }?: AutomationHandlersDependencies): {
70
74
  launch: (context: {
71
75
  req: unknown;
72
76
  res: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,15 @@ import { randomUUID } from 'node:crypto';
2
2
  import { cloneRepository, createWorktree, ensureRepository, getWorktreePath, } from '../core/git.js';
3
3
  import { launchAgentProcess } from '../core/agents.js';
4
4
  import { runTask } from '../core/tasks.js';
5
- import { sendJson } from '../utils/http.js';
6
- import { validateAutomationRequest, AutomationRequestError, } from '../core/automation/request-validation.js';
5
+ import { getClientIp, sendJson } from '../utils/http.js';
6
+ import { validateAutomationRequest, AutomationRequestError, extractApiKey, } from '../core/automation/request-validation.js';
7
7
  import { resolveBranchName } from '../core/automation/branch.js';
8
8
  import { generatePlanText } from '../core/automation/plan.js';
9
9
  import { createGitOrchestrator } from '../core/automation/git-orchestration.js';
10
10
  import { runAutomationTask } from '../core/automation/task-runner.js';
11
11
  import { createLogger } from '../infrastructure/logging/index.js';
12
+ import { createRateLimiter } from '../core/security/rate-limiter.js';
13
+ import { AUTOMATION_RATE_LIMIT_MAX_ATTEMPTS, AUTOMATION_RATE_LIMIT_WINDOW_MS, ERROR_MESSAGES, HTTP_STATUS, } from '../config/constants.js';
12
14
  const defaultAutomationDependencies = {
13
15
  cloneRepository,
14
16
  ensureRepository,
@@ -22,6 +24,7 @@ const defaultAutomationDependencies = {
22
24
  createGitOrchestrator,
23
25
  runAutomationTask,
24
26
  createLogger,
27
+ createRateLimiter,
25
28
  };
26
29
  let activeAutomationDependencies = { ...defaultAutomationDependencies };
27
30
  /**
@@ -103,14 +106,36 @@ function finishMetrics(key, success, durationMs) {
103
106
  }
104
107
  bucket.totalLatencyMs += durationMs;
105
108
  }
106
- export function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }, { ensureRepositoryExists: ensureRepoExists = ensureRepositoryExists, ensureWorktreeExists: ensureWorktree = ensureWorktreeExists, launchAgentProcess: launchAgent = activeAutomationDependencies.launchAgentProcess, runTaskImpl = activeAutomationDependencies.runTask, now = () => Date.now(), createRequestId = () => randomUUID(), } = {}) {
109
+ export function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }, { ensureRepositoryExists: ensureRepoExists = ensureRepositoryExists, ensureWorktreeExists: ensureWorktree = ensureWorktreeExists, launchAgentProcess: launchAgent = activeAutomationDependencies.launchAgentProcess, runTaskImpl = activeAutomationDependencies.runTask, now = () => Date.now(), createRequestId = () => randomUUID(), rateLimiter: injectedRateLimiter, } = {}) {
107
110
  const gitOrchestrator = activeAutomationDependencies.createGitOrchestrator({
108
111
  ensureRepositoryExists: ensureRepoExists,
109
112
  ensureWorktreeExists: ensureWorktree,
110
113
  });
111
114
  const log = activeAutomationDependencies.createLogger(logger);
115
+ const automationRateLimiter = injectedRateLimiter ||
116
+ activeAutomationDependencies.createRateLimiter({
117
+ windowMs: AUTOMATION_RATE_LIMIT_WINDOW_MS,
118
+ maxAttempts: AUTOMATION_RATE_LIMIT_MAX_ATTEMPTS,
119
+ });
112
120
  async function launch(context) {
121
+ const req = context.req;
113
122
  const ctx = context;
123
+ const providedApiKey = extractApiKey(req);
124
+ const clientIp = getClientIp(req);
125
+ const limiterKey = clientIp;
126
+ const limiterStatus = automationRateLimiter.check(limiterKey);
127
+ if (limiterStatus.limited) {
128
+ log.warn('[agentrix] Automation request throttled', {
129
+ clientIp,
130
+ apiKeyProvided: Boolean(providedApiKey),
131
+ attempts: limiterStatus.attempts,
132
+ retryAfterMs: limiterStatus.retryAfterMs,
133
+ });
134
+ sendJson(ctx.res, HTTP_STATUS.TOO_MANY_REQUESTS, {
135
+ error: ERROR_MESSAGES.TOO_MANY_AUTOMATION_ATTEMPTS,
136
+ });
137
+ return;
138
+ }
114
139
  let validation;
115
140
  try {
116
141
  validation = await activeAutomationDependencies.validateAutomationRequest({
@@ -122,6 +147,21 @@ export function createAutomationHandlers({ workdir, agentCommands, apiKey, branc
122
147
  }
123
148
  catch (error) {
124
149
  if (error instanceof AutomationRequestError) {
150
+ if (error.status === 401) {
151
+ const failure = automationRateLimiter.recordFailure(limiterKey);
152
+ if (failure.limited) {
153
+ log.warn('[agentrix] Automation rate limit triggered', {
154
+ clientIp,
155
+ apiKeyProvided: Boolean(providedApiKey),
156
+ attempts: failure.attempts,
157
+ retryAfterMs: failure.retryAfterMs,
158
+ });
159
+ sendJson(ctx.res, HTTP_STATUS.TOO_MANY_REQUESTS, {
160
+ error: ERROR_MESSAGES.TOO_MANY_AUTOMATION_ATTEMPTS,
161
+ });
162
+ return;
163
+ }
164
+ }
125
165
  sendJson(ctx.res, error.status, { error: error.message });
126
166
  return;
127
167
  }
@@ -129,6 +169,7 @@ export function createAutomationHandlers({ workdir, agentCommands, apiKey, branc
129
169
  sendJson(ctx.res, 500, { error: 'Unexpected error while validating automation request' });
130
170
  return;
131
171
  }
172
+ automationRateLimiter.reset(limiterKey);
132
173
  const { planEnabled, prompt, org, repo, worktreeInput, agent, routeLabel } = validation;
133
174
  const metricsKey = planEnabled ? 'planTrue' : 'planFalse';
134
175
  automationPlanMetrics[metricsKey].requests += 1;
@@ -1 +1 @@
1
- {"version":3,"file":"automation.js","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation.js","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type CodexSdkService } from '../services/index.js';
2
+ export interface CodexSdkHandlerOverrides {
3
+ codexSdkService?: CodexSdkService;
4
+ }
5
+ export declare function createCodexSdkHandlers(workdir: string, overrides?: CodexSdkHandlerOverrides): {
6
+ listSessions: (context: import("../types/http.js").RequestContext) => Promise<void>;
7
+ createSession: (context: import("../types/http.js").RequestContext) => Promise<void>;
8
+ readSession: (context: import("../types/http.js").RequestContext) => Promise<void>;
9
+ deleteSession: (context: import("../types/http.js").RequestContext) => Promise<void>;
10
+ };
11
+ //# sourceMappingURL=codex-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-sdk.d.ts","sourceRoot":"","sources":["../../src/api/codex-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAUnF,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,wBAA6B;;;;;EAoC/F"}
@@ -0,0 +1,38 @@
1
+ import { createCodexSdkService } from '../services/index.js';
2
+ import { createHandler } from './base-handler.js';
3
+ import { asyncHandler, NotFoundError } from '../infrastructure/errors/index.js';
4
+ import { sendJson } from '../utils/http.js';
5
+ import { validateCodexSessionList, validateCodexSessionCreate, validateCodexSessionId, } from '../validation/index.js';
6
+ export function createCodexSdkHandlers(workdir, overrides = {}) {
7
+ const codexSdkService = overrides.codexSdkService ?? createCodexSdkService(workdir);
8
+ const listSessions = asyncHandler(async (context) => {
9
+ const paramsObject = Object.fromEntries(context.url.searchParams.entries());
10
+ const input = validateCodexSessionList(paramsObject);
11
+ const sessions = await codexSdkService.listSessions(input);
12
+ sendJson(context.res, 200, { sessions });
13
+ });
14
+ const createSession = createHandler({
15
+ validator: validateCodexSessionCreate,
16
+ handler: async (input) => codexSdkService.createSession(input),
17
+ });
18
+ const readSession = asyncHandler(async (context) => {
19
+ const { sessionId } = validateCodexSessionId({ sessionId: context.params?.['id'] });
20
+ const detail = await codexSdkService.getSession(sessionId);
21
+ if (!detail) {
22
+ throw new NotFoundError('Codex session not found');
23
+ }
24
+ sendJson(context.res, 200, detail);
25
+ });
26
+ const deleteSession = asyncHandler(async (context) => {
27
+ const { sessionId } = validateCodexSessionId({ sessionId: context.params?.['id'] });
28
+ await codexSdkService.deleteSession(sessionId);
29
+ sendJson(context.res, 200, { ok: true });
30
+ });
31
+ return {
32
+ listSessions,
33
+ createSession,
34
+ readSession,
35
+ deleteSession,
36
+ };
37
+ }
38
+ //# sourceMappingURL=codex-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-sdk.js","sourceRoot":"","sources":["../../src/api/codex-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAMhC,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,YAAsC,EAAE;IAC9F,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEpF,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3D,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,aAAa,CAAC;QAClC,SAAS,EAAE,0BAA0B;QACrC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,aAAa,CAAC,yBAAyB,CAAC,CAAC;QACrD,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACnD,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/C,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,YAAY;QACZ,aAAa;QACb,WAAW;QACX,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,qBAA0B;;;;;;EA8CxF"}
1
+ {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,qBAA0B;;;;;;EA2CxF"}
package/dist/api/repos.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createRepositoryService } from '../services/index.js';
2
- import { handleHeadRequest } from '../utils/http.js';
2
+ import { handleHeadRequest, sendJson } from '../utils/http.js';
3
3
  import { asyncHandler } from '../infrastructure/errors/index.js';
4
4
  import { createHandler } from './base-handler.js';
5
5
  import { validateRepositoryCreate, validateRepositoryDelete, validateInitCommandUpdate, } from '../validation/index.js';
@@ -11,10 +11,7 @@ export function createRepoHandlers(workdir, overrides = {}) {
11
11
  return;
12
12
  }
13
13
  const data = await repositoryService.listRepositories();
14
- context.res.setHeader('Cache-Control', 'no-store');
15
- context.res.statusCode = 200;
16
- context.res.setHeader('Content-Type', 'application/json; charset=utf-8');
17
- context.res.end(JSON.stringify({ data }));
14
+ sendJson(context.res, 200, { data });
18
15
  });
19
16
  const create = createHandler({
20
17
  validator: validateRepositoryCreate,
@@ -1 +1 @@
1
- {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAA0B,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,YAAmC,EAAE;IACvF,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,KAAK,EAAE,KAA2C,EAAE,EAAE,CAC7D,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;KAChE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,KAAK,EAAE,KAAoC,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,aAAa,CAAC;QACtC,SAAS,EAAE,yBAAyB;QACpC,OAAO,EAAE,KAAK,EAAE,KAAyD,EAAE,EAAE;YAC3E,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACjG,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,UAAU;QAClB,8CAA8C;QAC9C,OAAO,EAAE,UAAU;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAA0B,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,YAAmC,EAAE;IACvF,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;QACxD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,KAAK,EAAE,KAA2C,EAAE,EAAE,CAC7D,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;KAChE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,KAAK,EAAE,KAAoC,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,aAAa,CAAC;QACtC,SAAS,EAAE,yBAAyB;QACpC,OAAO,EAAE,KAAK,EAAE,KAAyD,EAAE,EAAE;YAC3E,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACjG,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,UAAU;QAClB,8CAA8C;QAC9C,OAAO,EAAE,UAAU;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -7,6 +7,10 @@ export declare const SESSION_MAX_AGE_SECONDS: number;
7
7
  export declare const TMUX_BIN = "tmux";
8
8
  export declare const TMUX_SESSION_PREFIX = "tw-";
9
9
  export declare const MAX_REQUEST_BODY_SIZE: number;
10
+ export declare const AUTH_RATE_LIMIT_WINDOW_MS: number;
11
+ export declare const AUTH_RATE_LIMIT_MAX_ATTEMPTS = 5;
12
+ export declare const AUTOMATION_RATE_LIMIT_WINDOW_MS: number;
13
+ export declare const AUTOMATION_RATE_LIMIT_MAX_ATTEMPTS = 5;
10
14
  /** HTTP Status Codes */
11
15
  export declare const HTTP_STATUS: {
12
16
  readonly OK: 200;
@@ -18,6 +22,7 @@ export declare const HTTP_STATUS: {
18
22
  readonly FORBIDDEN: 403;
19
23
  readonly NOT_FOUND: 404;
20
24
  readonly METHOD_NOT_ALLOWED: 405;
25
+ readonly TOO_MANY_REQUESTS: 429;
21
26
  readonly INTERNAL_SERVER_ERROR: 500;
22
27
  readonly BAD_GATEWAY: 502;
23
28
  readonly SERVICE_UNAVAILABLE: 503;
@@ -27,6 +32,8 @@ export declare const ERROR_MESSAGES: {
27
32
  readonly AUTH_REQUIRED: "Authentication required";
28
33
  readonly INVALID_PASSWORD: "Invalid password";
29
34
  readonly INVALID_PAYLOAD: "Invalid request payload";
35
+ readonly TOO_MANY_LOGIN_ATTEMPTS: "Too many failed login attempts. Try again later.";
36
+ readonly TOO_MANY_AUTOMATION_ATTEMPTS: "Automation requests are temporarily blocked. Try again later.";
30
37
  readonly REPOSITORY_NOT_FOUND: "Repository not found";
31
38
  readonly WORKTREE_NOT_FOUND: "Worktree not found";
32
39
  readonly SESSION_NOT_FOUND: "Terminal session not found";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAC/D,eAAO,MAAM,uBAAuB,QAAc,CAAC;AACnD,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,wBAAwB;AACxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAad,CAAC;AAEX,4BAA4B;AAC5B,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAC/D,eAAO,MAAM,uBAAuB,QAAc,CAAC;AACnD,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,eAAO,MAAM,yBAAyB,QAAgB,CAAC;AACvD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,+BAA+B,QAAY,CAAC;AACzD,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAEpD,wBAAwB;AACxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcd,CAAC;AAEX,4BAA4B;AAC5B,eAAO,MAAM,cAAc;;;;;;;;;;CAUjB,CAAC"}
@@ -7,6 +7,10 @@ export const SESSION_MAX_AGE_SECONDS = 60 * 60 * 8;
7
7
  export const TMUX_BIN = 'tmux';
8
8
  export const TMUX_SESSION_PREFIX = 'tw-';
9
9
  export const MAX_REQUEST_BODY_SIZE = 1024 * 1024;
10
+ export const AUTH_RATE_LIMIT_WINDOW_MS = 5 * 60 * 1000;
11
+ export const AUTH_RATE_LIMIT_MAX_ATTEMPTS = 5;
12
+ export const AUTOMATION_RATE_LIMIT_WINDOW_MS = 60 * 1000;
13
+ export const AUTOMATION_RATE_LIMIT_MAX_ATTEMPTS = 5;
10
14
  /** HTTP Status Codes */
11
15
  export const HTTP_STATUS = {
12
16
  OK: 200,
@@ -18,6 +22,7 @@ export const HTTP_STATUS = {
18
22
  FORBIDDEN: 403,
19
23
  NOT_FOUND: 404,
20
24
  METHOD_NOT_ALLOWED: 405,
25
+ TOO_MANY_REQUESTS: 429,
21
26
  INTERNAL_SERVER_ERROR: 500,
22
27
  BAD_GATEWAY: 502,
23
28
  SERVICE_UNAVAILABLE: 503,
@@ -27,6 +32,8 @@ export const ERROR_MESSAGES = {
27
32
  AUTH_REQUIRED: 'Authentication required',
28
33
  INVALID_PASSWORD: 'Invalid password',
29
34
  INVALID_PAYLOAD: 'Invalid request payload',
35
+ TOO_MANY_LOGIN_ATTEMPTS: 'Too many failed login attempts. Try again later.',
36
+ TOO_MANY_AUTOMATION_ATTEMPTS: 'Automation requests are temporarily blocked. Try again later.',
30
37
  REPOSITORY_NOT_FOUND: 'Repository not found',
31
38
  WORKTREE_NOT_FOUND: 'Worktree not found',
32
39
  SESSION_NOT_FOUND: 'Terminal session not found',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,kBAAkB,EAAE,GAAG;IACvB,qBAAqB,EAAE,GAAG;IAC1B,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;CAChB,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,EAAE,yBAAyB;IACxC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,yBAAyB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,4BAA4B;IAC/C,kBAAkB,EAAE,oBAAoB;CAChC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,GAAG,IAAI,CAAC;AACzD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,kBAAkB,EAAE,GAAG;IACvB,iBAAiB,EAAE,GAAG;IACtB,qBAAqB,EAAE,GAAG;IAC1B,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;CAChB,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,EAAE,yBAAyB;IACxC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,yBAAyB;IAC1C,uBAAuB,EAAE,kDAAkD;IAC3E,4BAA4B,EAAE,+DAA+D;IAC7F,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,4BAA4B;IAC/C,kBAAkB,EAAE,oBAAoB;CAChC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { EventEmitter } from 'node:events';
3
+ import { Codex, type ThreadOptions } from '@openai/codex-sdk';
4
+ import { getWorktreePath } from './git.js';
5
+ import { listStoredSessions, writeStoredSession, deleteStoredSession } from './codex-sdk-storage.js';
6
+ import type { CodexSdkEvent, CodexSdkSessionSummary } from '../types/codex-sdk.js';
7
+ interface CodexSessionDependencies {
8
+ codexFactory: () => Codex;
9
+ getWorktreePath: typeof getWorktreePath;
10
+ randomUUID: typeof randomUUID;
11
+ now: () => Date;
12
+ createEventEmitter: () => EventEmitter;
13
+ listStoredSessions: typeof listStoredSessions;
14
+ writeStoredSession: typeof writeStoredSession;
15
+ deleteStoredSession: typeof deleteStoredSession;
16
+ isVerboseLoggingEnabled: () => boolean;
17
+ }
18
+ export declare function listCodexSdkSessions({ workdir, org, repo, branch, }: {
19
+ workdir: string;
20
+ org: string;
21
+ repo: string;
22
+ branch: string;
23
+ }): Promise<CodexSdkSessionSummary[]>;
24
+ export declare function createCodexSdkSession({ workdir, org, repo, branch, label, threadOptions, }: {
25
+ workdir: string;
26
+ org: string;
27
+ repo: string;
28
+ branch: string;
29
+ label?: string;
30
+ threadOptions?: ThreadOptions;
31
+ }): Promise<{
32
+ summary: CodexSdkSessionSummary;
33
+ events: CodexSdkEvent[];
34
+ }>;
35
+ export declare function getCodexSdkSessionDetails(sessionId: string): {
36
+ summary: CodexSdkSessionSummary;
37
+ events: CodexSdkEvent[];
38
+ } | null;
39
+ export declare function deleteCodexSdkSession(sessionId: string): Promise<void>;
40
+ export declare function getCodexSdkSession(sessionId: string): CodexSdkSessionSummary | null;
41
+ export declare function getCodexSdkSessionEvents(sessionId: string): CodexSdkEvent[];
42
+ export declare function sendCodexSdkUserMessage(sessionId: string, text: string): Promise<void>;
43
+ export declare function subscribeToCodexSdkEvents(sessionId: string, handler: (event: CodexSdkEvent) => void): () => void;
44
+ export declare function __setCodexSdkSessionOverrides(overrides?: Partial<CodexSessionDependencies>): void;
45
+ export declare function resetCodexSdkSessions(): void;
46
+ export {};
47
+ //# sourceMappingURL=codex-sdk-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-sdk-sessions.d.ts","sourceRoot":"","sources":["../../src/core/codex-sdk-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,KAAK,EAEL,KAAK,aAAa,EASnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAoBnF,UAAU,wBAAwB;IAChC,YAAY,EAAE,MAAM,KAAK,CAAC;IAC1B,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,kBAAkB,EAAE,MAAM,YAAY,CAAC;IACvC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,uBAAuB,EAAE,MAAM,OAAO,CAAC;CACxC;AAoVD,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,GAAG,EACH,IAAI,EACJ,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAWpC;AAED,wBAAsB,qBAAqB,CAAC,EAC1C,OAAO,EACP,GAAG,EACH,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,GACd,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAiCxE;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG,IAAI,CAMhI;AAED,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAGnF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAE3E;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5F;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GACtC,MAAM,IAAI,CAKZ;AAcD,wBAAgB,6BAA6B,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAGjG;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}