github-issue-tower-defence-management 1.66.0 → 1.67.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.
- package/CHANGELOG.md +7 -0
- package/README.md +5 -5
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js +5 -0
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js.map +1 -1
- package/bin/domain/usecases/StartPreparationUseCase.js +59 -121
- package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +14 -0
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +5 -0
- package/src/domain/entities/ClaudeTokenUsage.ts +1 -0
- package/src/domain/usecases/StartPreparationUseCase.test.ts +87 -306
- package/src/domain/usecases/StartPreparationUseCase.ts +80 -175
- package/types/adapter/repositories/ProxyClaudeTokenUsageRepository.d.ts.map +1 -1
- package/types/domain/entities/ClaudeTokenUsage.d.ts +1 -0
- package/types/domain/entities/ClaudeTokenUsage.d.ts.map +1 -1
- package/types/domain/usecases/StartPreparationUseCase.d.ts +2 -6
- package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [1.67.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.66.0...v1.67.0) (2026-05-26)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* replace 85% 7d hard cutoff with adaptive per-token concurrent limit ([e3aa2ff](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/e3aa2ff63b76e2278ea4e1b8c0332a49b02c7000))
|
|
7
|
+
|
|
1
8
|
# [1.66.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.65.0...v1.66.0) (2026-05-26)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Options for startDaemon:
|
|
|
35
35
|
--defaultLlmAgentName <name> Default LLM agent name
|
|
36
36
|
--maximumPreparingIssuesCount <count> Maximum number of issues in preparation status (default: 6 per available Claude OAuth token, otherwise 6)
|
|
37
37
|
--allowIssueCacheMinutes <minutes> Allow cache for issues in minutes (default: 10)
|
|
38
|
-
--utilizationPercentageThreshold <percent>
|
|
38
|
+
--utilizationPercentageThreshold <percent> 5-hour utilization hard threshold; tokens at or above this percentage are excluded from rotation (default: 90)
|
|
39
39
|
--allowedIssueAuthors <authors> Comma-separated list of allowed issue authors
|
|
40
40
|
--preparationProcessCheckCommand <template> Shell command template with {URL} placeholder to check if a preparation process is alive
|
|
41
41
|
|
|
@@ -97,7 +97,7 @@ startPreparation?: # Optional: Enable automatic issue preparation workflow
|
|
|
97
97
|
defaultLlmModelName?: string | null # Optional: Default LLM model name (overridable via llm-model: label)
|
|
98
98
|
defaultLlmAgentName?: string | null # Optional: Default LLM agent name (overridable via llm-agent: label)
|
|
99
99
|
maximumPreparingIssuesCount: number | null # Max concurrent preparing issues. When token rotation is active, effective concurrency is also capped at 6 per available token. When null, the default is 6 per available token, or 6 without token rotation
|
|
100
|
-
utilizationPercentageThreshold?: number # Optional:
|
|
100
|
+
utilizationPercentageThreshold?: number # Optional: 5-hour utilization hard threshold (percentage, default 90). Tokens at or above this value are excluded from rotation
|
|
101
101
|
allowedIssueAuthors?: string[] | null # Optional: Only start preparation for issues from these authors (null = all authors)
|
|
102
102
|
preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. When set, orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Quality Check; otherwise they fall back to Awaiting Workspace
|
|
103
103
|
awaitingQualityCheckStatus?: string | null # Optional: Project status name for issues awaiting quality check. When set with preparationProcessCheckCommand, orphaned issues with no rejections advance to this status instead of awaitingWorkspaceStatus
|
|
@@ -159,7 +159,7 @@ defaultLlmModelName?: string # Optional: Default LLM model name
|
|
|
159
159
|
defaultLlmAgentName?: string # Optional: Default LLM agent name
|
|
160
160
|
maximumPreparingIssuesCount?: number # Optional: Max concurrent preparing issues. When token rotation is active, effective concurrency is also capped at 6 per available token. Omitted defaults to 6 per available token, or 6 without token rotation
|
|
161
161
|
allowIssueCacheMinutes?: number # Optional: Allow cache for issues in minutes (default: 10)
|
|
162
|
-
utilizationPercentageThreshold?: number # Optional:
|
|
162
|
+
utilizationPercentageThreshold?: number # Optional: 5-hour utilization hard threshold (percentage, default 90). Tokens at or above this value are excluded from rotation
|
|
163
163
|
allowedIssueAuthors?: string # Optional: Comma-separated list of allowed issue authors
|
|
164
164
|
thresholdForAutoReject?: number # Optional: Consecutive rejections before escalation (default: 3)
|
|
165
165
|
workflowBlockerResolvedWebhookUrl?: string # Optional: Webhook URL. Supports {URL} and {MESSAGE} placeholders
|
|
@@ -213,7 +213,7 @@ When `claudeCodeOauthTokenListJsonPath` is set, `startDaemon` distributes prepar
|
|
|
213
213
|
|
|
214
214
|
2. Local reverse proxy (`127.0.0.1:8787`): on each `startDaemon` run, the daemon TCP-probes the port. If nothing responds, it spawns a detached child running `bin/adapter/proxy/proxyEntry.js`. The proxy forwards every request to `api.anthropic.com`, observes the `anthropic-ratelimit-unified-*` response headers, and writes them to a per-token cache file at `${XDG_CACHE_HOME:-~/.cache}/tdpm/ratelimit/<sha256-of-token>.json`. The cache file stores the latest 5-hour and 7-day utilization, reset epochs, and the unified, 5-hour, and 7-day statuses (used to detect `blocked` and `rejected` state per window). In addition to the unified headers, the proxy inspects the streamed response body for `rate_limit` events (objects carrying `rateLimitType`, `status`, and `resetsAt`) and records the model-specific weekly limits — at minimum `seven_day_sonnet` and `seven_day` — per token. These model-specific weekly limits are exposed only in the response body, never in the unified headers, so a token can appear healthy on `anthropic-ratelimit-unified-7d-*` while its Sonnet weekly limit is exhausted.
|
|
215
215
|
|
|
216
|
-
3. Selection: before spawning each `aw` job, the daemon reads every token's cache file. A cached observation is treated as expired once its reset epoch has passed: when the current time is past the 5-hour reset, that token's 5-hour utilization is treated as `0` and any 5-hour-window rejection is cleared;
|
|
216
|
+
3. Selection: before spawning each `aw` job, the daemon reads every token's cache file. A cached observation is treated as expired once its reset epoch has passed: when the current time is past the 5-hour reset, that token's 5-hour utilization is treated as `0` and any 5-hour-window rejection is cleared; likewise, when the 7-day reset has passed, the 7-day utilization is treated as `0` and any 7-day-window rejection is cleared; a model-specific weekly limit rejection is cleared once that limit's `resetsAt` has passed. This stale-reset expiry prevents a token that has actually recovered from being locked out of rotation forever (an excluded token receives no new requests, so the proxy never re-observes it). After expiry normalization, tokens whose status is `blocked`, whose remaining (non-expired) rejection is still active, whose 5-hour utilization meets or exceeds the configured threshold, or whose weekly limit for the model that will be used is rejected are excluded. The model name maps to a limit type: a model name containing `sonnet` maps to `seven_day_sonnet`, one containing `opus` maps to `seven_day_opus`, otherwise `seven_day`; the generic `seven_day` rejection also excludes regardless of model. The remaining eligible tokens are sorted by 7-day utilization ascending (lowest weekly load first). Each token's per-run concurrent preparation slot count is determined by its 7-day utilization: at or below 80%, the token receives the full six concurrent slots; above 80%, the slot count is reduced proportionally — specifically `ceil(6 × (1 − 7d_util) / 0.2)` — with a minimum of 1 slot at any utilization level, so near-exhausted tokens still participate rather than being cut off entirely. Tokens are dispatched round-robin across their available slots, with the token that has the lowest 7-day utilization selected preferentially. The effective preparation limit for a run is the lesser of the sum of all eligible tokens' slot counts and the explicit `maximumPreparingIssuesCount` (which defaults to 6). When a token list is configured but no eligible token remains after filtering, preparation is skipped for that run. The selected token and the proxy URL (`http://127.0.0.1:8787`) are passed to the child `aw` process as `CLAUDE_CODE_OAUTH_TOKEN` and `ANTHROPIC_BASE_URL` environment variables. The child inherits the parent process's environment, so no further wiring is required inside `aw`.
|
|
217
217
|
|
|
218
218
|
When `claudeCodeOauthTokenListJsonPath` is unset, no proxy is started and `aw` runs with whatever `CLAUDE_CODE_OAUTH_TOKEN` and `ANTHROPIC_BASE_URL` are already in the environment.
|
|
219
219
|
|
|
@@ -282,7 +282,7 @@ This file is written atomically (written to a `.tmp` file then renamed) so exter
|
|
|
282
282
|
|
|
283
283
|
- `capturedAt`: ISO 8601 timestamp when the snapshot was captured.
|
|
284
284
|
- `config.maximumPreparingIssuesCount`: Resolved maximum number of issues allowed in preparation status (`null` if unconfigured).
|
|
285
|
-
- `config.utilizationPercentageThreshold`: Resolved
|
|
285
|
+
- `config.utilizationPercentageThreshold`: Resolved 5-hour utilization hard threshold (percentage). Tokens at or above this value are excluded from rotation.
|
|
286
286
|
- `config.allowIssueCacheMinutes`: Resolved issue cache duration in minutes.
|
|
287
287
|
- `config.thresholdForAutoReject`: Resolved consecutive rejection count before auto-escalation.
|
|
288
288
|
- `status.awaitingQualityCheckImmediatelyActionable`: Count of issues in the awaiting quality check status with no dependency URL, next action date, or next action hour set.
|
|
@@ -27,6 +27,7 @@ class ProxyClaudeTokenUsageRepository {
|
|
|
27
27
|
name,
|
|
28
28
|
token,
|
|
29
29
|
fiveHourUtilization: 0,
|
|
30
|
+
sevenDayUtilization: 0,
|
|
30
31
|
blocked: false,
|
|
31
32
|
rejected: false,
|
|
32
33
|
modelWeeklyLimits: {},
|
|
@@ -37,6 +38,9 @@ class ProxyClaudeTokenUsageRepository {
|
|
|
37
38
|
const fiveHourUtilization = fiveHourExpired
|
|
38
39
|
? 0
|
|
39
40
|
: snapshot.fiveHourUtilization;
|
|
41
|
+
const sevenDayUtilization = sevenDayExpired
|
|
42
|
+
? 0
|
|
43
|
+
: snapshot.sevenDayUtilization;
|
|
40
44
|
const fiveHourRejectionActive = snapshot.fiveHourRejected && !fiveHourExpired;
|
|
41
45
|
const sevenDayRejectionActive = snapshot.sevenDayRejected && !sevenDayExpired;
|
|
42
46
|
const unifiedRejectionActive = snapshot.unifiedRejected && !fiveHourExpired;
|
|
@@ -55,6 +59,7 @@ class ProxyClaudeTokenUsageRepository {
|
|
|
55
59
|
name,
|
|
56
60
|
token,
|
|
57
61
|
fiveHourUtilization,
|
|
62
|
+
sevenDayUtilization,
|
|
58
63
|
blocked: snapshot.blocked,
|
|
59
64
|
rejected,
|
|
60
65
|
modelWeeklyLimits,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyClaudeTokenUsageRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":";;;AAEA,oEAAiE;AACjE,4DAAoE;AACpE,8DAA4D;AAE5D,MAAa,+BAA+B;IAC1C,YACmB,iBAAgC,EAChC,OAAe,2BAAU;QADzB,sBAAiB,GAAjB,iBAAiB,CAAe;QAChC,SAAI,GAAJ,IAAI,CAAqB;QAG5C,qBAAgB,GAAG,KAAK,IAAmB,EAAE;YAC3C,MAAM,IAAA,uCAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,4BAAuB,GAAG,KAAK,IAAiC,EAAE;YAChE,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,OAAO,GAAG,IAAA,kCAAgB,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACrC,MAAM,QAAQ,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,OAAO;wBACL,IAAI;wBACJ,KAAK;wBACL,mBAAmB,EAAE,CAAC;wBACtB,OAAO,EAAE,KAAK;wBACd,QAAQ,EAAE,KAAK;wBACf,iBAAiB,EAAE,EAAE;qBACtB,CAAC;gBACJ,CAAC;gBACD,MAAM,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACjE,MAAM,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACjE,MAAM,mBAAmB,GAAG,eAAe;oBACzC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjC,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,gBAAgB,IAAI,CAAC,eAAe,CAAC;gBAChD,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,gBAAgB,IAAI,CAAC,eAAe,CAAC;gBAChD,MAAM,sBAAsB,GAC1B,QAAQ,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC;gBAC/C,MAAM,QAAQ,GACZ,sBAAsB;oBACtB,uBAAuB;oBACvB,uBAAuB,CAAC;gBAC1B,MAAM,iBAAiB,GAGnB,EAAE,CAAC;gBACP,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAC7C,QAAQ,CAAC,iBAAiB,CAC3B,EAAE,CAAC;oBACF,MAAM,OAAO,GAAG,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACjD,iBAAiB,CAAC,SAAS,CAAC,GAAG;wBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO;wBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,IAAI;oBACJ,KAAK;oBACL,mBAAmB;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,QAAQ;oBACR,iBAAiB;iBAClB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAW,EAAE,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ProxyClaudeTokenUsageRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":";;;AAEA,oEAAiE;AACjE,4DAAoE;AACpE,8DAA4D;AAE5D,MAAa,+BAA+B;IAC1C,YACmB,iBAAgC,EAChC,OAAe,2BAAU;QADzB,sBAAiB,GAAjB,iBAAiB,CAAe;QAChC,SAAI,GAAJ,IAAI,CAAqB;QAG5C,qBAAgB,GAAG,KAAK,IAAmB,EAAE;YAC3C,MAAM,IAAA,uCAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,4BAAuB,GAAG,KAAK,IAAiC,EAAE;YAChE,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,OAAO,GAAG,IAAA,kCAAgB,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACrC,MAAM,QAAQ,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,OAAO;wBACL,IAAI;wBACJ,KAAK;wBACL,mBAAmB,EAAE,CAAC;wBACtB,mBAAmB,EAAE,CAAC;wBACtB,OAAO,EAAE,KAAK;wBACd,QAAQ,EAAE,KAAK;wBACf,iBAAiB,EAAE,EAAE;qBACtB,CAAC;gBACJ,CAAC;gBACD,MAAM,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACjE,MAAM,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACjE,MAAM,mBAAmB,GAAG,eAAe;oBACzC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjC,MAAM,mBAAmB,GAAG,eAAe;oBACzC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjC,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,gBAAgB,IAAI,CAAC,eAAe,CAAC;gBAChD,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,gBAAgB,IAAI,CAAC,eAAe,CAAC;gBAChD,MAAM,sBAAsB,GAC1B,QAAQ,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC;gBAC/C,MAAM,QAAQ,GACZ,sBAAsB;oBACtB,uBAAuB;oBACvB,uBAAuB,CAAC;gBAC1B,MAAM,iBAAiB,GAGnB,EAAE,CAAC;gBACP,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAC7C,QAAQ,CAAC,iBAAiB,CAC3B,EAAE,CAAC;oBACF,MAAM,OAAO,GAAG,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACjD,iBAAiB,CAAC,SAAS,CAAC,GAAG;wBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO;wBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,IAAI;oBACJ,KAAK;oBACL,mBAAmB;oBACnB,mBAAmB;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,QAAQ;oBACR,iBAAiB;iBAClB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAW,EAAE,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IAvE1D,CAAC;CAwEL;AA5ED,0EA4EC"}
|
|
@@ -2,20 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StartPreparationUseCase = void 0;
|
|
4
4
|
const WorkflowStatus_1 = require("../entities/WorkflowStatus");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const PROCESS_COUNT_ZERO_UTILIZATION = 0.95;
|
|
8
|
-
const PROCESS_COUNT_DECAY_STEEPNESS = 2;
|
|
5
|
+
const SEVEN_DAY_NORMAL_CONCURRENT_LIMIT = 6;
|
|
6
|
+
const SEVEN_DAY_THROTTLE_START_THRESHOLD = 0.8;
|
|
9
7
|
class StartPreparationUseCase {
|
|
10
8
|
constructor(projectRepository, issueRepository, localCommandRunner, claudeTokenUsageRepository) {
|
|
11
9
|
this.projectRepository = projectRepository;
|
|
12
10
|
this.issueRepository = issueRepository;
|
|
13
11
|
this.localCommandRunner = localCommandRunner;
|
|
14
12
|
this.claudeTokenUsageRepository = claudeTokenUsageRepository;
|
|
15
|
-
this.KNOWN_MODEL_SPECIFIC_LIMIT_TYPES = [
|
|
16
|
-
'seven_day_sonnet',
|
|
17
|
-
'seven_day_opus',
|
|
18
|
-
];
|
|
19
13
|
this.weeklyLimitTypeForModel = (modelName) => {
|
|
20
14
|
const normalized = (modelName ?? '').toLowerCase();
|
|
21
15
|
if (normalized.includes('sonnet'))
|
|
@@ -24,106 +18,56 @@ class StartPreparationUseCase {
|
|
|
24
18
|
return 'seven_day_opus';
|
|
25
19
|
return 'seven_day';
|
|
26
20
|
};
|
|
27
|
-
this.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return defaultModelName.replace(/sonnet/gi, 'opus');
|
|
34
|
-
}
|
|
35
|
-
if (limitType === 'seven_day_sonnet' &&
|
|
36
|
-
defaultModelName.toLowerCase().includes('opus')) {
|
|
37
|
-
return defaultModelName.replace(/opus/gi, 'sonnet');
|
|
38
|
-
}
|
|
39
|
-
return defaultModelName;
|
|
40
|
-
};
|
|
41
|
-
this.selectModelForToken = (usage, defaultModelName) => {
|
|
42
|
-
const generalLimit = usage.modelWeeklyLimits['seven_day'];
|
|
43
|
-
if (generalLimit !== undefined && generalLimit.rejected)
|
|
44
|
-
return null;
|
|
45
|
-
if (defaultModelName === null)
|
|
46
|
-
return null;
|
|
47
|
-
const defaultLimitType = this.weeklyLimitTypeForModel(defaultModelName);
|
|
48
|
-
const candidateLimitTypes = [
|
|
49
|
-
defaultLimitType,
|
|
50
|
-
...this.KNOWN_MODEL_SPECIFIC_LIMIT_TYPES.filter((t) => t !== defaultLimitType),
|
|
51
|
-
];
|
|
52
|
-
for (const limitType of candidateLimitTypes) {
|
|
53
|
-
const limit = usage.modelWeeklyLimits[limitType];
|
|
54
|
-
if (limit === undefined || !limit.rejected) {
|
|
55
|
-
return this.deriveFallbackModelName(limitType, defaultModelName);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
21
|
+
this.isModelWeeklyLimitRejected = (usage, weeklyLimitType) => {
|
|
22
|
+
const specific = usage.modelWeeklyLimits[weeklyLimitType];
|
|
23
|
+
if (specific !== undefined && specific.rejected)
|
|
24
|
+
return true;
|
|
25
|
+
const general = usage.modelWeeklyLimits['seven_day'];
|
|
26
|
+
return general !== undefined && general.rejected;
|
|
59
27
|
};
|
|
60
|
-
this.
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
28
|
+
this.getTokenConcurrentLimit = (sevenDayUtilization) => {
|
|
29
|
+
if (sevenDayUtilization < SEVEN_DAY_THROTTLE_START_THRESHOLD) {
|
|
30
|
+
return SEVEN_DAY_NORMAL_CONCURRENT_LIMIT;
|
|
63
31
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
const decayProgress = (fiveHourUtilization - PROCESS_COUNT_DECAY_START_UTILIZATION) /
|
|
68
|
-
(PROCESS_COUNT_ZERO_UTILIZATION - PROCESS_COUNT_DECAY_START_UTILIZATION);
|
|
69
|
-
const minimumMultiplier = Math.exp(-PROCESS_COUNT_DECAY_STEEPNESS);
|
|
70
|
-
const remainingRatio = (Math.exp(-PROCESS_COUNT_DECAY_STEEPNESS * decayProgress) -
|
|
71
|
-
minimumMultiplier) /
|
|
72
|
-
(1 - minimumMultiplier);
|
|
73
|
-
return Math.max(1, Math.floor(MAXIMUM_PREPARING_PROCESS_COUNT_PER_TOKEN * remainingRatio));
|
|
32
|
+
const remaining = (1 - sevenDayUtilization) / (1 - SEVEN_DAY_THROTTLE_START_THRESHOLD);
|
|
33
|
+
return Math.max(1, Math.ceil(SEVEN_DAY_NORMAL_CONCURRENT_LIMIT * remaining));
|
|
74
34
|
};
|
|
75
|
-
this.selectRotationTokens = (tokenUsages, modelName) => {
|
|
76
|
-
|
|
35
|
+
this.selectRotationTokens = (tokenUsages, utilizationPercentageThreshold, modelName, maxConcurrent) => {
|
|
36
|
+
const weeklyLimitType = this.weeklyLimitTypeForModel(modelName);
|
|
37
|
+
const eligibleTokens = tokenUsages
|
|
77
38
|
.filter((usage) => !usage.blocked)
|
|
78
39
|
.filter((usage) => !usage.rejected)
|
|
79
|
-
.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
model: selectedModel,
|
|
87
|
-
fiveHourUtilization: usage.fiveHourUtilization,
|
|
88
|
-
maximumPreparingProcessCount: this.maximumPreparingProcessCountForToken(usage.fiveHourUtilization),
|
|
89
|
-
},
|
|
90
|
-
];
|
|
91
|
-
})
|
|
92
|
-
.filter((usage) => usage.maximumPreparingProcessCount > 0)
|
|
93
|
-
.sort((a, b) => a.fiveHourUtilization - b.fiveHourUtilization)
|
|
94
|
-
.map((usage) => ({
|
|
40
|
+
.filter((usage) => !this.isModelWeeklyLimitRejected(usage, weeklyLimitType))
|
|
41
|
+
.filter((usage) => usage.fiveHourUtilization * 100 < utilizationPercentageThreshold)
|
|
42
|
+
.sort((a, b) => a.sevenDayUtilization - b.sevenDayUtilization);
|
|
43
|
+
if (eligibleTokens.length === 0) {
|
|
44
|
+
return { tokens: [], effectiveCap: 0 };
|
|
45
|
+
}
|
|
46
|
+
const tokensWithLimits = eligibleTokens.map((usage) => ({
|
|
95
47
|
token: usage.token,
|
|
96
|
-
|
|
97
|
-
maximumPreparingProcessCount: usage.maximumPreparingProcessCount,
|
|
48
|
+
limit: this.getTokenConcurrentLimit(usage.sevenDayUtilization),
|
|
98
49
|
}));
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
for (let
|
|
104
|
-
|
|
105
|
-
.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
this.resolveMaximumPreparingIssuesCount = (configuredMaximumPreparingIssuesCount, rotationTokenSlots) => {
|
|
111
|
-
if (rotationTokenSlots === null) {
|
|
112
|
-
return configuredMaximumPreparingIssuesCount ?? 6;
|
|
50
|
+
const totalCapacity = tokensWithLimits.reduce((sum, t) => sum + t.limit, 0);
|
|
51
|
+
const effectiveCap = Math.min(maxConcurrent, totalCapacity);
|
|
52
|
+
const maxLimit = Math.max(...tokensWithLimits.map((t) => t.limit));
|
|
53
|
+
const rotationList = [];
|
|
54
|
+
for (let round = 0; round < maxLimit; round++) {
|
|
55
|
+
for (const t of tokensWithLimits) {
|
|
56
|
+
if (t.limit > round) {
|
|
57
|
+
rotationList.push(t.token);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
113
60
|
}
|
|
114
|
-
return
|
|
61
|
+
return { tokens: rotationList, effectiveCap };
|
|
115
62
|
};
|
|
116
63
|
this.buildRotationOrder = (tokenUsages, utilizationPercentageThreshold, modelName) => {
|
|
117
64
|
const weeklyLimitType = this.weeklyLimitTypeForModel(modelName);
|
|
118
|
-
const isWeeklyLimitRejected = (usage) => usage.modelWeeklyLimits[weeklyLimitType]?.rejected === true ||
|
|
119
|
-
usage.modelWeeklyLimits['seven_day']?.rejected === true;
|
|
120
65
|
const selectedTokens = tokenUsages
|
|
121
66
|
.filter((usage) => !usage.blocked)
|
|
122
67
|
.filter((usage) => !usage.rejected)
|
|
123
|
-
.filter((usage) => !
|
|
124
|
-
.filter((usage) =>
|
|
125
|
-
|
|
126
|
-
.sort((a, b) => a.fiveHourUtilization - b.fiveHourUtilization);
|
|
68
|
+
.filter((usage) => !this.isModelWeeklyLimitRejected(usage, weeklyLimitType))
|
|
69
|
+
.filter((usage) => usage.fiveHourUtilization * 100 < utilizationPercentageThreshold)
|
|
70
|
+
.sort((a, b) => a.sevenDayUtilization - b.sevenDayUtilization);
|
|
127
71
|
const selectedTokenValues = new Set(selectedTokens.map((u) => u.token));
|
|
128
72
|
const excluded = tokenUsages
|
|
129
73
|
.filter((usage) => !selectedTokenValues.has(usage.token))
|
|
@@ -134,8 +78,8 @@ class StartPreparationUseCase {
|
|
|
134
78
|
rejected: usage.rejected,
|
|
135
79
|
thresholdExcluded: !usage.blocked &&
|
|
136
80
|
!usage.rejected &&
|
|
137
|
-
!
|
|
138
|
-
|
|
81
|
+
!this.isModelWeeklyLimitRejected(usage, weeklyLimitType) &&
|
|
82
|
+
usage.fiveHourUtilization * 100 >= utilizationPercentageThreshold,
|
|
139
83
|
}));
|
|
140
84
|
const selectedEntries = selectedTokens.map((usage) => ({
|
|
141
85
|
name: usage.name ?? '',
|
|
@@ -148,22 +92,24 @@ class StartPreparationUseCase {
|
|
|
148
92
|
};
|
|
149
93
|
this.run = async (params) => {
|
|
150
94
|
const tokenUsages = await this.claudeTokenUsageRepository.getAvailableTokenUsages();
|
|
151
|
-
let
|
|
95
|
+
let rotationTokens = null;
|
|
152
96
|
let proxyBaseUrl = null;
|
|
153
97
|
const rotationOrder = tokenUsages.length > 0
|
|
154
98
|
? this.buildRotationOrder(tokenUsages, params.utilizationPercentageThreshold, params.defaultLlmModelName)
|
|
155
99
|
: null;
|
|
100
|
+
const maximumPreparingIssuesCount = params.maximumPreparingIssuesCount ?? SEVEN_DAY_NORMAL_CONCURRENT_LIMIT;
|
|
101
|
+
let effectiveMaxPreparingIssuesCount = maximumPreparingIssuesCount;
|
|
156
102
|
if (tokenUsages.length > 0) {
|
|
157
|
-
const ranked = this.selectRotationTokens(tokenUsages, params.defaultLlmModelName);
|
|
103
|
+
const { tokens: ranked, effectiveCap } = this.selectRotationTokens(tokenUsages, params.utilizationPercentageThreshold, params.defaultLlmModelName, maximumPreparingIssuesCount);
|
|
158
104
|
if (ranked.length === 0) {
|
|
159
|
-
console.warn(`All ${tokenUsages.length} configured Claude OAuth token(s) are unavailable (blocked, rejected,
|
|
105
|
+
console.warn(`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.`);
|
|
160
106
|
return { rotationOrder };
|
|
161
107
|
}
|
|
162
108
|
await this.claudeTokenUsageRepository.ensureObservable();
|
|
163
|
-
|
|
109
|
+
rotationTokens = ranked;
|
|
110
|
+
effectiveMaxPreparingIssuesCount = effectiveCap;
|
|
164
111
|
proxyBaseUrl = this.claudeTokenUsageRepository.proxyBaseUrl();
|
|
165
112
|
}
|
|
166
|
-
const maximumPreparingIssuesCount = this.resolveMaximumPreparingIssuesCount(params.maximumPreparingIssuesCount, rotationTokenSlots);
|
|
167
113
|
const project = await this.projectRepository.getByUrl(params.projectUrl);
|
|
168
114
|
const storyObjectMap = await this.issueRepository.getStoryObjectMap(project, params.allowIssueCacheMinutes);
|
|
169
115
|
const allOpenedIssues = Array.from(storyObjectMap.values()).flatMap((storyObject) => storyObject.issues);
|
|
@@ -183,7 +129,7 @@ class StartPreparationUseCase {
|
|
|
183
129
|
const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
184
130
|
const tomorrowStart = new Date(todayStart.getFullYear(), todayStart.getMonth(), todayStart.getDate() + 1);
|
|
185
131
|
for (let i = 0; i < awaitingWorkspaceIssues.length &&
|
|
186
|
-
updatedCurrentPreparationIssueCount <
|
|
132
|
+
updatedCurrentPreparationIssueCount < effectiveMaxPreparingIssuesCount; i++) {
|
|
187
133
|
const issue = awaitingWorkspaceIssues[i];
|
|
188
134
|
if (issue.dependedIssueUrls.length > 0) {
|
|
189
135
|
continue;
|
|
@@ -197,12 +143,6 @@ class StartPreparationUseCase {
|
|
|
197
143
|
}
|
|
198
144
|
if (params.allowedIssueAuthors !== null &&
|
|
199
145
|
!params.allowedIssueAuthors.includes(issue.author)) {
|
|
200
|
-
if (issue.author === '') {
|
|
201
|
-
console.warn(`Skipping issue ${issue.url}: author is unknown (empty string); deny-by-default when allowedIssueAuthors is configured.`);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
console.warn(`Skipping issue ${issue.url}: author '${issue.author}' is not in the allowedIssueAuthors list.`);
|
|
205
|
-
}
|
|
206
146
|
continue;
|
|
207
147
|
}
|
|
208
148
|
const agent = issue.labels
|
|
@@ -219,7 +159,7 @@ class StartPreparationUseCase {
|
|
|
219
159
|
.find((label) => label.startsWith('llm-model:'))
|
|
220
160
|
?.replace('llm-model:', '')
|
|
221
161
|
.trim() || params.defaultLlmModelName;
|
|
222
|
-
if (!model
|
|
162
|
+
if (!model) {
|
|
223
163
|
console.error(`No LLM model configured for issue ${issue.url}. Provide --defaultLlmModelName or add an llm-model: label.`);
|
|
224
164
|
continue;
|
|
225
165
|
}
|
|
@@ -275,21 +215,10 @@ class StartPreparationUseCase {
|
|
|
275
215
|
}
|
|
276
216
|
await this.issueRepository.updateStatus(project, issue, preparationStatusOption.id);
|
|
277
217
|
issue.status = WorkflowStatus_1.PREPARATION_STATUS_NAME;
|
|
278
|
-
let spawnEnv;
|
|
279
|
-
let spawnModel = model ?? '';
|
|
280
|
-
if (rotationTokenSlots !== null && proxyBaseUrl !== null) {
|
|
281
|
-
const selected = rotationTokenSlots[(currentPreparationIssueCount + startedInThisRunCount) %
|
|
282
|
-
rotationTokenSlots.length];
|
|
283
|
-
spawnModel = selected.model;
|
|
284
|
-
spawnEnv = {
|
|
285
|
-
CLAUDE_CODE_OAUTH_TOKEN: selected.token,
|
|
286
|
-
ANTHROPIC_BASE_URL: proxyBaseUrl,
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
218
|
const awArgs = [
|
|
290
219
|
issue.url,
|
|
291
220
|
agent,
|
|
292
|
-
|
|
221
|
+
model,
|
|
293
222
|
'--configFilePath',
|
|
294
223
|
params.configFilePath,
|
|
295
224
|
'--branch',
|
|
@@ -300,6 +229,15 @@ class StartPreparationUseCase {
|
|
|
300
229
|
const codexHome = params.codexHomeCandidates[startedInThisRunCount % params.codexHomeCandidates.length];
|
|
301
230
|
awArgs.push('--codexHome', codexHome);
|
|
302
231
|
}
|
|
232
|
+
let spawnEnv;
|
|
233
|
+
if (rotationTokens !== null && proxyBaseUrl !== null) {
|
|
234
|
+
const selected = rotationTokens[(currentPreparationIssueCount + startedInThisRunCount) %
|
|
235
|
+
rotationTokens.length];
|
|
236
|
+
spawnEnv = {
|
|
237
|
+
CLAUDE_CODE_OAUTH_TOKEN: selected,
|
|
238
|
+
ANTHROPIC_BASE_URL: proxyBaseUrl,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
303
241
|
await this.localCommandRunner.runCommand('aw', awArgs, spawnEnv ? { env: spawnEnv } : undefined);
|
|
304
242
|
startedInThisRunCount++;
|
|
305
243
|
updatedCurrentPreparationIssueCount++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -99,6 +99,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
99
99
|
name: 'alice',
|
|
100
100
|
token: 'token-a',
|
|
101
101
|
fiveHourUtilization: 42,
|
|
102
|
+
sevenDayUtilization: 0,
|
|
102
103
|
blocked: false,
|
|
103
104
|
rejected: false,
|
|
104
105
|
modelWeeklyLimits: {},
|
|
@@ -107,6 +108,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
107
108
|
name: 'bob',
|
|
108
109
|
token: 'token-b',
|
|
109
110
|
fiveHourUtilization: 0,
|
|
111
|
+
sevenDayUtilization: 0,
|
|
110
112
|
blocked: false,
|
|
111
113
|
rejected: false,
|
|
112
114
|
modelWeeklyLimits: {},
|
|
@@ -139,6 +141,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
139
141
|
name: 'alice',
|
|
140
142
|
token: 'token-a',
|
|
141
143
|
fiveHourUtilization: 5,
|
|
144
|
+
sevenDayUtilization: 0,
|
|
142
145
|
blocked: true,
|
|
143
146
|
rejected: false,
|
|
144
147
|
modelWeeklyLimits: {},
|
|
@@ -171,6 +174,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
171
174
|
name: 'alice',
|
|
172
175
|
token: 'token-a',
|
|
173
176
|
fiveHourUtilization: 100,
|
|
177
|
+
sevenDayUtilization: 0,
|
|
174
178
|
blocked: false,
|
|
175
179
|
rejected: true,
|
|
176
180
|
modelWeeklyLimits: {},
|
|
@@ -203,6 +207,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
203
207
|
name: 'alice',
|
|
204
208
|
token: 'token-a',
|
|
205
209
|
fiveHourUtilization: 0,
|
|
210
|
+
sevenDayUtilization: 30,
|
|
206
211
|
blocked: false,
|
|
207
212
|
rejected: false,
|
|
208
213
|
modelWeeklyLimits: {},
|
|
@@ -235,6 +240,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
235
240
|
name: 'alice',
|
|
236
241
|
token: 'token-a',
|
|
237
242
|
fiveHourUtilization: 95,
|
|
243
|
+
sevenDayUtilization: 0,
|
|
238
244
|
blocked: false,
|
|
239
245
|
rejected: false,
|
|
240
246
|
modelWeeklyLimits: {},
|
|
@@ -267,6 +273,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
267
273
|
name: 'alice',
|
|
268
274
|
token: 'token-a',
|
|
269
275
|
fiveHourUtilization: 0,
|
|
276
|
+
sevenDayUtilization: 0,
|
|
270
277
|
blocked: false,
|
|
271
278
|
rejected: false,
|
|
272
279
|
modelWeeklyLimits: {},
|
|
@@ -299,6 +306,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
299
306
|
name: 'alice',
|
|
300
307
|
token: 'token-a',
|
|
301
308
|
fiveHourUtilization: 10,
|
|
309
|
+
sevenDayUtilization: 0,
|
|
302
310
|
blocked: false,
|
|
303
311
|
rejected: false,
|
|
304
312
|
modelWeeklyLimits: {},
|
|
@@ -331,6 +339,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
331
339
|
name: 'alice',
|
|
332
340
|
token: 'token-a',
|
|
333
341
|
fiveHourUtilization: 100,
|
|
342
|
+
sevenDayUtilization: 0,
|
|
334
343
|
blocked: false,
|
|
335
344
|
rejected: true,
|
|
336
345
|
modelWeeklyLimits: {},
|
|
@@ -363,6 +372,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
363
372
|
name: 'alice',
|
|
364
373
|
token: 'token-a',
|
|
365
374
|
fiveHourUtilization: 0,
|
|
375
|
+
sevenDayUtilization: 100,
|
|
366
376
|
blocked: false,
|
|
367
377
|
rejected: true,
|
|
368
378
|
modelWeeklyLimits: {},
|
|
@@ -395,6 +405,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
395
405
|
name: 'alice',
|
|
396
406
|
token: 'token-a',
|
|
397
407
|
fiveHourUtilization: 0,
|
|
408
|
+
sevenDayUtilization: 0,
|
|
398
409
|
blocked: false,
|
|
399
410
|
rejected: false,
|
|
400
411
|
modelWeeklyLimits: {},
|
|
@@ -416,6 +427,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
416
427
|
name: 'alice',
|
|
417
428
|
token: 'token-a',
|
|
418
429
|
fiveHourUtilization: 0,
|
|
430
|
+
sevenDayUtilization: 0,
|
|
419
431
|
blocked: false,
|
|
420
432
|
rejected: false,
|
|
421
433
|
modelWeeklyLimits: {},
|
|
@@ -450,6 +462,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
450
462
|
name: 'alice',
|
|
451
463
|
token: 'token-a',
|
|
452
464
|
fiveHourUtilization: 5,
|
|
465
|
+
sevenDayUtilization: 10,
|
|
453
466
|
blocked: false,
|
|
454
467
|
rejected: false,
|
|
455
468
|
modelWeeklyLimits: {
|
|
@@ -486,6 +499,7 @@ describe('ProxyClaudeTokenUsageRepository', () => {
|
|
|
486
499
|
name: 'alice',
|
|
487
500
|
token: 'token-a',
|
|
488
501
|
fiveHourUtilization: 5,
|
|
502
|
+
sevenDayUtilization: 10,
|
|
489
503
|
blocked: false,
|
|
490
504
|
rejected: false,
|
|
491
505
|
modelWeeklyLimits: {
|
|
@@ -30,6 +30,7 @@ export class ProxyClaudeTokenUsageRepository implements ClaudeTokenUsageReposito
|
|
|
30
30
|
name,
|
|
31
31
|
token,
|
|
32
32
|
fiveHourUtilization: 0,
|
|
33
|
+
sevenDayUtilization: 0,
|
|
33
34
|
blocked: false,
|
|
34
35
|
rejected: false,
|
|
35
36
|
modelWeeklyLimits: {},
|
|
@@ -40,6 +41,9 @@ export class ProxyClaudeTokenUsageRepository implements ClaudeTokenUsageReposito
|
|
|
40
41
|
const fiveHourUtilization = fiveHourExpired
|
|
41
42
|
? 0
|
|
42
43
|
: snapshot.fiveHourUtilization;
|
|
44
|
+
const sevenDayUtilization = sevenDayExpired
|
|
45
|
+
? 0
|
|
46
|
+
: snapshot.sevenDayUtilization;
|
|
43
47
|
const fiveHourRejectionActive =
|
|
44
48
|
snapshot.fiveHourRejected && !fiveHourExpired;
|
|
45
49
|
const sevenDayRejectionActive =
|
|
@@ -67,6 +71,7 @@ export class ProxyClaudeTokenUsageRepository implements ClaudeTokenUsageReposito
|
|
|
67
71
|
name,
|
|
68
72
|
token,
|
|
69
73
|
fiveHourUtilization,
|
|
74
|
+
sevenDayUtilization,
|
|
70
75
|
blocked: snapshot.blocked,
|
|
71
76
|
rejected,
|
|
72
77
|
modelWeeklyLimits,
|