github-issue-tower-defence-management 1.58.1 → 1.58.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +3 -3
  3. package/bin/adapter/entry-points/cli/index.js +1 -3
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +1 -3
  6. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  7. package/bin/adapter/proxy/RateLimitCache.js +94 -3
  8. package/bin/adapter/proxy/RateLimitCache.js.map +1 -1
  9. package/bin/adapter/proxy/proxyEntry.js +19 -0
  10. package/bin/adapter/proxy/proxyEntry.js.map +1 -1
  11. package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js +33 -2
  12. package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js.map +1 -1
  13. package/bin/domain/usecases/StartPreparationUseCase.js +34 -35
  14. package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
  15. package/package.json +1 -1
  16. package/src/adapter/entry-points/cli/index.ts +0 -3
  17. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -3
  18. package/src/adapter/proxy/RateLimitCache.test.ts +190 -0
  19. package/src/adapter/proxy/RateLimitCache.ts +104 -2
  20. package/src/adapter/proxy/proxyEntry.ts +24 -1
  21. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +2 -1
  22. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +354 -7
  23. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +42 -2
  24. package/src/domain/entities/ClaudeTokenUsage.ts +7 -0
  25. package/src/domain/usecases/StartPreparationUseCase.test.ts +1212 -887
  26. package/src/domain/usecases/StartPreparationUseCase.ts +47 -57
  27. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  28. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  29. package/types/adapter/proxy/RateLimitCache.d.ts +11 -0
  30. package/types/adapter/proxy/RateLimitCache.d.ts.map +1 -1
  31. package/types/adapter/proxy/proxyEntry.d.ts.map +1 -1
  32. package/types/adapter/repositories/ProxyClaudeTokenUsageRepository.d.ts.map +1 -1
  33. package/types/domain/entities/ClaudeTokenUsage.d.ts +6 -0
  34. package/types/domain/entities/ClaudeTokenUsage.d.ts.map +1 -1
  35. package/types/domain/usecases/StartPreparationUseCase.d.ts +3 -3
  36. package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
@@ -1,7 +1,6 @@
1
1
  import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
2
  import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
3
  import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
4
- import { ClaudeRepository } from './adapter-interfaces/ClaudeRepository';
5
4
  import { ClaudeTokenUsageRepository } from './adapter-interfaces/ClaudeTokenUsageRepository';
6
5
  import { ClaudeTokenUsage } from '../entities/ClaudeTokenUsage';
7
6
  import {
@@ -22,16 +21,46 @@ export class StartPreparationUseCase {
22
21
  | 'deletePullRequestBranch'
23
22
  | 'createCommentByUrl'
24
23
  >,
25
- private readonly claudeRepository: Pick<ClaudeRepository, 'getUsage'>,
26
24
  private readonly localCommandRunner: LocalCommandRunner,
27
25
  private readonly claudeTokenUsageRepository: ClaudeTokenUsageRepository,
28
26
  ) {}
29
27
 
30
- private selectRotationTokens = (tokenUsages: ClaudeTokenUsage[]): string[] =>
31
- tokenUsages
28
+ private weeklyLimitTypeForModel = (modelName: string | null): string => {
29
+ const normalized = (modelName ?? '').toLowerCase();
30
+ if (normalized.includes('sonnet')) return 'seven_day_sonnet';
31
+ if (normalized.includes('opus')) return 'seven_day_opus';
32
+ return 'seven_day';
33
+ };
34
+
35
+ private isModelWeeklyLimitRejected = (
36
+ usage: ClaudeTokenUsage,
37
+ weeklyLimitType: string,
38
+ ): boolean => {
39
+ const specific = usage.modelWeeklyLimits[weeklyLimitType];
40
+ if (specific !== undefined && specific.rejected) return true;
41
+ const general = usage.modelWeeklyLimits['seven_day'];
42
+ return general !== undefined && general.rejected;
43
+ };
44
+
45
+ private selectRotationTokens = (
46
+ tokenUsages: ClaudeTokenUsage[],
47
+ utilizationPercentageThreshold: number,
48
+ modelName: string | null,
49
+ ): string[] => {
50
+ const weeklyLimitType = this.weeklyLimitTypeForModel(modelName);
51
+ return tokenUsages
32
52
  .filter((usage) => !usage.blocked)
53
+ .filter((usage) => !usage.rejected)
54
+ .filter(
55
+ (usage) => !this.isModelWeeklyLimitRejected(usage, weeklyLimitType),
56
+ )
57
+ .filter(
58
+ (usage) =>
59
+ usage.fiveHourUtilization * 100 < utilizationPercentageThreshold,
60
+ )
33
61
  .sort((a, b) => a.fiveHourUtilization - b.fiveHourUtilization)
34
62
  .map((usage) => usage.token);
63
+ };
35
64
 
36
65
  run = async (params: {
37
66
  projectUrl: string;
@@ -45,66 +74,27 @@ export class StartPreparationUseCase {
45
74
  codexHomeCandidates: string[] | null;
46
75
  allowIssueCacheMinutes: number;
47
76
  }): Promise<void> => {
48
- const claudeUsages = await this.claudeRepository.getUsage();
49
- const weeklyWindowHours = 168;
50
- const nonWeeklyUsages = claudeUsages.filter(
51
- (usage) => usage.hour !== weeklyWindowHours,
52
- );
53
- if (
54
- nonWeeklyUsages.some(
55
- (usage) =>
56
- usage.utilizationPercentage > params.utilizationPercentageThreshold,
57
- )
58
- ) {
59
- console.warn(
60
- 'Claude usage limit exceeded. Skipping starting preparation.',
61
- );
62
- return;
63
- }
64
-
65
- let maximumPreparingIssuesCount = params.maximumPreparingIssuesCount ?? 6;
66
-
67
- const weeklyUsages = claudeUsages.filter(
68
- (usage) => usage.hour === weeklyWindowHours,
69
- );
70
- if (
71
- weeklyUsages.length > 0 &&
72
- params.utilizationPercentageThreshold < 100
73
- ) {
74
- const maxWeeklyUtilization = Math.max(
75
- ...weeklyUsages.map((usage) => usage.utilizationPercentage),
76
- );
77
- if (maxWeeklyUtilization > params.utilizationPercentageThreshold) {
78
- const normalizedUtilizationBeyondThreshold =
79
- (maxWeeklyUtilization - params.utilizationPercentageThreshold) /
80
- (100 - params.utilizationPercentageThreshold);
81
- maximumPreparingIssuesCount = Math.floor(
82
- maximumPreparingIssuesCount *
83
- Math.pow(1 - normalizedUtilizationBeyondThreshold, 2),
84
- );
85
- if (maximumPreparingIssuesCount <= 0) {
86
- console.warn(
87
- `Weekly Claude usage (${maxWeeklyUtilization}%) exceeds threshold (${params.utilizationPercentageThreshold}%). Skipping starting preparation.`,
88
- );
89
- return;
90
- }
91
- console.warn(
92
- `Weekly Claude usage (${maxWeeklyUtilization}%) exceeds threshold (${params.utilizationPercentageThreshold}%). Reducing maximumPreparingIssuesCount to ${maximumPreparingIssuesCount}.`,
93
- );
94
- }
95
- }
77
+ const maximumPreparingIssuesCount = params.maximumPreparingIssuesCount ?? 6;
96
78
 
97
79
  const tokenUsages =
98
80
  await this.claudeTokenUsageRepository.getAvailableTokenUsages();
99
81
  let rotationTokens: string[] | null = null;
100
82
  let proxyBaseUrl: string | null = null;
101
83
  if (tokenUsages.length > 0) {
102
- const ranked = this.selectRotationTokens(tokenUsages);
103
- if (ranked.length > 0) {
104
- await this.claudeTokenUsageRepository.ensureObservable();
105
- rotationTokens = ranked;
106
- proxyBaseUrl = this.claudeTokenUsageRepository.proxyBaseUrl();
84
+ const ranked = this.selectRotationTokens(
85
+ tokenUsages,
86
+ params.utilizationPercentageThreshold,
87
+ params.defaultLlmModelName,
88
+ );
89
+ if (ranked.length === 0) {
90
+ console.warn(
91
+ `All ${tokenUsages.length} configured Claude OAuth token(s) are unavailable (blocked, rejected, weekly limit for ${this.weeklyLimitTypeForModel(params.defaultLlmModelName)} exhausted, or 5h utilization >= ${params.utilizationPercentageThreshold}%). Skipping starting preparation.`,
92
+ );
93
+ return;
107
94
  }
95
+ await this.claudeTokenUsageRepository.ensureObservable();
96
+ rotationTokens = ranked;
97
+ proxyBaseUrl = this.claudeTokenUsageRepository.proxyBaseUrl();
108
98
  }
109
99
 
110
100
  const project = await this.projectRepository.getByUrl(params.projectUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAkEzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAiEzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAyB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAmPP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAwB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAiPP;CACH"}
@@ -1,14 +1,25 @@
1
+ export interface ModelWeeklyLimit {
2
+ rejected: boolean;
3
+ resetsAt: number;
4
+ }
1
5
  export interface RateLimitSnapshot {
2
6
  fiveHourUtilization: number;
3
7
  fiveHourReset: number;
4
8
  sevenDayUtilization: number;
5
9
  sevenDayReset: number;
6
10
  blocked: boolean;
11
+ rejected: boolean;
12
+ unifiedRejected: boolean;
13
+ fiveHourRejected: boolean;
14
+ sevenDayRejected: boolean;
15
+ modelWeeklyLimits: Record<string, ModelWeeklyLimit>;
7
16
  }
8
17
  export declare const PROXY_PORT = 8787;
9
18
  export declare const cacheDir: () => string;
10
19
  export declare const hashToken: (token: string) => string;
11
20
  export declare const cachePathForToken: (token: string) => string;
12
21
  export declare const writeRateLimit: (token: string, headers: Record<string, string | string[] | undefined>) => void;
22
+ export declare const writeModelRateLimit: (token: string, limits: Record<string, ModelWeeklyLimit>) => void;
23
+ export declare const parseModelRateLimitsFromBody: (body: string) => Record<string, ModelWeeklyLimit>;
13
24
  export declare const readRateLimit: (token: string) => RateLimitSnapshot | null;
14
25
  //# sourceMappingURL=RateLimitCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimitCache.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,OAAO,CAAC;AAI/B,eAAO,MAAM,QAAQ,QAAO,MAG3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MACqB,CAAC;AAEhE,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MACC,CAAC;AAEpD,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,KACrD,IAsCF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,iBAAiB,GAAG,IAwCjE,CAAC"}
1
+ {"version":3,"file":"RateLimitCache.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,UAAU,OAAO,CAAC;AAI/B,eAAO,MAAM,QAAQ,QAAO,MAG3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MACqB,CAAC;AAEhE,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MACC,CAAC;AAiCpD,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,KACrD,IAwCF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,QAAQ,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,KACvC,IAkBF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA0BjC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,iBAAiB,GAAG,IA8CjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxyEntry.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/proxyEntry.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,YAAY,GAChB,eAAe,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KAC3C,MAAM,GAAG,IAQX,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,IA0ClC,CAAC;AAMF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"proxyEntry.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/proxyEntry.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,YAAY,GAChB,eAAe,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KAC3C,MAAM,GAAG,IAQX,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,IA0DlC,CAAC;AAMF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyClaudeTokenUsageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAKjH,qBAAa,+BAAgC,YAAW,0BAA0B;IAE9E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAEF,uBAAuB,QAAa,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAgB7D;IAEF,YAAY,QAAO,MAAM,CAAoC;CAC9D"}
1
+ {"version":3,"file":"ProxyClaudeTokenUsageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAKjH,qBAAa,+BAAgC,YAAW,0BAA0B;IAE9E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAEF,uBAAuB,QAAa,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwD7D;IAEF,YAAY,QAAO,MAAM,CAAoC;CAC9D"}
@@ -1,6 +1,12 @@
1
+ export type ClaudeModelWeeklyLimit = {
2
+ rejected: boolean;
3
+ resetsAt: number;
4
+ };
1
5
  export type ClaudeTokenUsage = {
2
6
  token: string;
3
7
  fiveHourUtilization: number;
4
8
  blocked: boolean;
9
+ rejected: boolean;
10
+ modelWeeklyLimits: Record<string, ClaudeModelWeeklyLimit>;
5
11
  };
6
12
  //# sourceMappingURL=ClaudeTokenUsage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeTokenUsage.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeTokenUsage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"ClaudeTokenUsage.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeTokenUsage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAC3D,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
2
  import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
3
  import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
4
- import { ClaudeRepository } from './adapter-interfaces/ClaudeRepository';
5
4
  import { ClaudeTokenUsageRepository } from './adapter-interfaces/ClaudeTokenUsageRepository';
6
5
  export declare class StartPreparationUseCase {
7
6
  private readonly projectRepository;
8
7
  private readonly issueRepository;
9
- private readonly claudeRepository;
10
8
  private readonly localCommandRunner;
11
9
  private readonly claudeTokenUsageRepository;
12
- constructor(projectRepository: Pick<ProjectRepository, 'getByUrl'>, issueRepository: Pick<IssueRepository, 'getStoryObjectMap' | 'updateStatus' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'closePullRequest' | 'deletePullRequestBranch' | 'createCommentByUrl'>, claudeRepository: Pick<ClaudeRepository, 'getUsage'>, localCommandRunner: LocalCommandRunner, claudeTokenUsageRepository: ClaudeTokenUsageRepository);
10
+ constructor(projectRepository: Pick<ProjectRepository, 'getByUrl'>, issueRepository: Pick<IssueRepository, 'getStoryObjectMap' | 'updateStatus' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'closePullRequest' | 'deletePullRequestBranch' | 'createCommentByUrl'>, localCommandRunner: LocalCommandRunner, claudeTokenUsageRepository: ClaudeTokenUsageRepository);
11
+ private weeklyLimitTypeForModel;
12
+ private isModelWeeklyLimitRejected;
13
13
  private selectRotationTokens;
14
14
  run: (params: {
15
15
  projectUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAO7F,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAb1B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,mBAAmB,GACnB,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,yBAAyB,GACzB,oBAAoB,CACvB,EACgB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACpD,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,0BAA0B;IAGzE,OAAO,CAAC,oBAAoB,CAIK;IAEjC,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,sBAAsB,EAAE,MAAM,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CA2Qf;CACH"}
1
+ {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAO7F,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAZ1B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,mBAAmB,GACnB,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,yBAAyB,GACzB,oBAAoB,CACvB,EACgB,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,0BAA0B;IAGzE,OAAO,CAAC,uBAAuB,CAK7B;IAEF,OAAO,CAAC,0BAA0B,CAQhC;IAEF,OAAO,CAAC,oBAAoB,CAkB1B;IAEF,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,sBAAsB,EAAE,MAAM,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CAoOf;CACH"}