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.
- package/CHANGELOG.md +16 -0
- package/README.md +3 -3
- package/bin/adapter/entry-points/cli/index.js +1 -3
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +1 -3
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/proxy/RateLimitCache.js +94 -3
- package/bin/adapter/proxy/RateLimitCache.js.map +1 -1
- package/bin/adapter/proxy/proxyEntry.js +19 -0
- package/bin/adapter/proxy/proxyEntry.js.map +1 -1
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js +33 -2
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js.map +1 -1
- package/bin/domain/usecases/StartPreparationUseCase.js +34 -35
- package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/cli/index.ts +0 -3
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -3
- package/src/adapter/proxy/RateLimitCache.test.ts +190 -0
- package/src/adapter/proxy/RateLimitCache.ts +104 -2
- package/src/adapter/proxy/proxyEntry.ts +24 -1
- package/src/adapter/repositories/GraphqlProjectRepository.test.ts +2 -1
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +354 -7
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +42 -2
- package/src/domain/entities/ClaudeTokenUsage.ts +7 -0
- package/src/domain/usecases/StartPreparationUseCase.test.ts +1212 -887
- package/src/domain/usecases/StartPreparationUseCase.ts +47 -57
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/proxy/RateLimitCache.d.ts +11 -0
- package/types/adapter/proxy/RateLimitCache.d.ts.map +1 -1
- package/types/adapter/proxy/proxyEntry.d.ts.map +1 -1
- package/types/adapter/repositories/ProxyClaudeTokenUsageRepository.d.ts.map +1 -1
- package/types/domain/entities/ClaudeTokenUsage.d.ts +6 -0
- package/types/domain/entities/ClaudeTokenUsage.d.ts.map +1 -1
- package/types/domain/usecases/StartPreparationUseCase.d.ts +3 -3
- 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
|
|
31
|
-
|
|
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
|
|
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(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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;
|
|
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;
|
|
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;
|
|
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":"
|
|
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,
|
|
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;
|
|
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'>,
|
|
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,
|
|
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"}
|