github-issue-tower-defence-management 1.195.0 → 1.196.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/codeql.yml +2 -2
- package/CHANGELOG.md +19 -0
- package/README.md +2 -2
- package/bin/adapter/entry-points/cli/fleetConfig.js +2 -0
- package/bin/adapter/entry-points/cli/fleetConfig.js.map +1 -1
- package/bin/adapter/entry-points/handlers/OauthTokenSelectHandler.js +1 -1
- package/bin/adapter/entry-points/handlers/OauthTokenSelectHandler.js.map +1 -1
- package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js +17 -2
- package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js.map +1 -1
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +3 -8
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
- package/bin/domain/usecases/OauthTokenSelectUseCase.js +18 -10
- package/bin/domain/usecases/OauthTokenSelectUseCase.js.map +1 -1
- package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +2 -3
- package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -1
- package/bin/domain/usecases/awaitingOwnerApprovalMessage.js +1 -1
- package/bin/domain/usecases/awaitingOwnerApprovalMessage.js.map +1 -1
- package/package.json +2 -2
- package/src/adapter/entry-points/cli/fleetConfig.test.ts +33 -1
- package/src/adapter/entry-points/cli/fleetConfig.ts +16 -0
- package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.test.ts +78 -0
- package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts +2 -0
- package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.test.ts +137 -17
- package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts +30 -2
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +11 -18
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +3 -15
- package/src/domain/usecases/OauthTokenSelectUseCase.test.ts +99 -0
- package/src/domain/usecases/OauthTokenSelectUseCase.ts +30 -5
- package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +2 -2
- package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +2 -7
- package/src/domain/usecases/awaitingOwnerApprovalMessage.ts +1 -1
- package/types/adapter/entry-points/cli/fleetConfig.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/OauthTokenSelectHandler.d.ts.map +1 -1
- package/types/domain/usecases/LiveSessionOauthTokenSelectUseCase.d.ts +3 -0
- package/types/domain/usecases/LiveSessionOauthTokenSelectUseCase.d.ts.map +1 -1
- package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
- package/types/domain/usecases/OauthTokenSelectUseCase.d.ts +7 -1
- package/types/domain/usecases/OauthTokenSelectUseCase.d.ts.map +1 -1
- package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -1
- package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts +1 -1
- package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts.map +1 -1
|
@@ -39,12 +39,29 @@ export type OauthTokenSelectResult = {
|
|
|
39
39
|
metrics: OauthTokenCandidateMetrics[];
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
+
export type OauthTokenSelectionThresholds = {
|
|
43
|
+
fiveHourMinFreeRatio: number;
|
|
44
|
+
sevenDayMinFreeRatio: number;
|
|
45
|
+
};
|
|
46
|
+
|
|
42
47
|
const SECONDS_PER_DAY = 86400;
|
|
43
48
|
const SEVEN_DAYS_IN_SECONDS = 7 * SECONDS_PER_DAY;
|
|
44
49
|
|
|
45
50
|
export const FIVE_HOUR_MIN_FREE_RATIO = 0.25;
|
|
46
51
|
export const SEVEN_DAY_MIN_FREE_RATIO = 0.03;
|
|
47
52
|
|
|
53
|
+
export const DEFAULT_OAUTH_TOKEN_SELECTION_THRESHOLDS: OauthTokenSelectionThresholds =
|
|
54
|
+
{
|
|
55
|
+
fiveHourMinFreeRatio: FIVE_HOUR_MIN_FREE_RATIO,
|
|
56
|
+
sevenDayMinFreeRatio: SEVEN_DAY_MIN_FREE_RATIO,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const CL_SCRIPT_OAUTH_TOKEN_SELECTION_THRESHOLDS: OauthTokenSelectionThresholds =
|
|
60
|
+
{
|
|
61
|
+
fiveHourMinFreeRatio: 0.6,
|
|
62
|
+
sevenDayMinFreeRatio: 0.14,
|
|
63
|
+
};
|
|
64
|
+
|
|
48
65
|
export const SEVEN_DAY_WINDOW_HOURS = 168;
|
|
49
66
|
export const MIN_HOURS_TO_RESET = 1;
|
|
50
67
|
const SECONDS_PER_HOUR = 3600;
|
|
@@ -91,9 +108,14 @@ export class OauthTokenSelectUseCase {
|
|
|
91
108
|
candidates: OauthTokenCandidate[],
|
|
92
109
|
nowEpochSeconds: number,
|
|
93
110
|
random: SelectionRandom = Math.random,
|
|
111
|
+
thresholds: OauthTokenSelectionThresholds = DEFAULT_OAUTH_TOKEN_SELECTION_THRESHOLDS,
|
|
94
112
|
): OauthTokenSelectResult => {
|
|
95
113
|
const evaluated = candidates.map((candidate) => {
|
|
96
|
-
const evaluatedMetric = this.evaluate(
|
|
114
|
+
const evaluatedMetric = this.evaluate(
|
|
115
|
+
candidate,
|
|
116
|
+
nowEpochSeconds,
|
|
117
|
+
thresholds,
|
|
118
|
+
);
|
|
97
119
|
return {
|
|
98
120
|
candidate,
|
|
99
121
|
metric: {
|
|
@@ -136,6 +158,7 @@ export class OauthTokenSelectUseCase {
|
|
|
136
158
|
private evaluate = (
|
|
137
159
|
candidate: OauthTokenCandidate,
|
|
138
160
|
nowEpochSeconds: number,
|
|
161
|
+
thresholds: OauthTokenSelectionThresholds,
|
|
139
162
|
): Omit<OauthTokenCandidateMetrics, 'drawWeight'> => {
|
|
140
163
|
const fiveHourFreeRatio = this.fiveHourFreeRatio(
|
|
141
164
|
candidate.snapshot,
|
|
@@ -156,6 +179,7 @@ export class OauthTokenSelectUseCase {
|
|
|
156
179
|
candidate.fableRejected,
|
|
157
180
|
fiveHourFreeRatio,
|
|
158
181
|
sevenDayFreeRatio,
|
|
182
|
+
thresholds,
|
|
159
183
|
);
|
|
160
184
|
|
|
161
185
|
return {
|
|
@@ -174,6 +198,7 @@ export class OauthTokenSelectUseCase {
|
|
|
174
198
|
fableRejected: boolean,
|
|
175
199
|
fiveHourFreeRatio: number,
|
|
176
200
|
sevenDayFreeRatio: number,
|
|
201
|
+
thresholds: OauthTokenSelectionThresholds,
|
|
177
202
|
): string | null => {
|
|
178
203
|
if (subscriptionDisabled) {
|
|
179
204
|
return 'organization has disabled Claude subscription access for Claude Code';
|
|
@@ -184,11 +209,11 @@ export class OauthTokenSelectUseCase {
|
|
|
184
209
|
if (fableRejected) {
|
|
185
210
|
return 'fable weekly limit exhausted (a fable request was rejected with HTTP 429)';
|
|
186
211
|
}
|
|
187
|
-
if (fiveHourFreeRatio <
|
|
188
|
-
return `5h window only ${this.toPercent(fiveHourFreeRatio)}% free (requires >= ${this.toPercent(
|
|
212
|
+
if (fiveHourFreeRatio < thresholds.fiveHourMinFreeRatio) {
|
|
213
|
+
return `5h window only ${this.toPercent(fiveHourFreeRatio)}% free (requires >= ${this.toPercent(thresholds.fiveHourMinFreeRatio)}%)`;
|
|
189
214
|
}
|
|
190
|
-
if (sevenDayFreeRatio <
|
|
191
|
-
return `7d window only ${this.toPercent(sevenDayFreeRatio)}% free (requires >= ${this.toPercent(
|
|
215
|
+
if (sevenDayFreeRatio < thresholds.sevenDayMinFreeRatio) {
|
|
216
|
+
return `7d window only ${this.toPercent(sevenDayFreeRatio)}% free (requires >= ${this.toPercent(thresholds.sevenDayMinFreeRatio)}%)`;
|
|
192
217
|
}
|
|
193
218
|
return null;
|
|
194
219
|
};
|
|
@@ -2565,7 +2565,7 @@ describe('RevertOrphanedPreparationUseCase', () => {
|
|
|
2565
2565
|
);
|
|
2566
2566
|
});
|
|
2567
2567
|
|
|
2568
|
-
it('should move an orphaned issue to
|
|
2568
|
+
it('should move an orphaned issue to Awaiting Quality Check with AWAITING_OWNER_APPROVAL when last report declares waitingForOwnerApproval', async () => {
|
|
2569
2569
|
const stuckIssue = createMockIssue({
|
|
2570
2570
|
url: 'https://github.com/user/repo/issues/10',
|
|
2571
2571
|
status: 'Preparation',
|
|
@@ -2598,7 +2598,7 @@ describe('RevertOrphanedPreparationUseCase', () => {
|
|
|
2598
2598
|
});
|
|
2599
2599
|
|
|
2600
2600
|
expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(1);
|
|
2601
|
-
expect(mockIssueRepository.updateStatus.mock.calls[0][2]).toBe('
|
|
2601
|
+
expect(mockIssueRepository.updateStatus.mock.calls[0][2]).toBe('4');
|
|
2602
2602
|
expect(mockIssueCommentRepository.createComment.mock.calls).toHaveLength(1);
|
|
2603
2603
|
expect(mockIssueCommentRepository.createComment.mock.calls[0][1]).toContain(
|
|
2604
2604
|
'Auto Status Check: AWAITING_OWNER_APPROVAL',
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
AWAITING_WORKSPACE_STATUS_NAME,
|
|
14
14
|
FAILED_PREPARATION_STATUS_NAME,
|
|
15
15
|
PREPARATION_STATUS_NAME,
|
|
16
|
-
TODO_STATUS_NAME,
|
|
17
16
|
} from '../entities/WorkflowStatus';
|
|
18
17
|
import { resolveLabelsNotRequiringPullRequest } from './resolveLabelsNotRequiringPullRequest';
|
|
19
18
|
import { isPullRequestDeclaredUnnecessary } from './isPullRequestDeclaredUnnecessary';
|
|
@@ -122,10 +121,6 @@ export class RevertOrphanedPreparationUseCase {
|
|
|
122
121
|
(s) => s.name === FAILED_PREPARATION_STATUS_NAME,
|
|
123
122
|
);
|
|
124
123
|
|
|
125
|
-
const todoStatusOption = project.status.statuses.find(
|
|
126
|
-
(s) => s.name === TODO_STATUS_NAME,
|
|
127
|
-
);
|
|
128
|
-
|
|
129
124
|
for (const issue of preparationIssues) {
|
|
130
125
|
const isOrphaned = await this.isOrphanedIssue(issue, params);
|
|
131
126
|
if (!isOrphaned) {
|
|
@@ -221,12 +216,12 @@ export class RevertOrphanedPreparationUseCase {
|
|
|
221
216
|
).length;
|
|
222
217
|
if (
|
|
223
218
|
awaitingOwnerApprovalCount < ownerApprovalTimeoutCycles &&
|
|
224
|
-
|
|
219
|
+
awaitingQualityCheckStatusOption
|
|
225
220
|
) {
|
|
226
221
|
await this.issueRepository.updateStatus(
|
|
227
222
|
project,
|
|
228
223
|
issue,
|
|
229
|
-
|
|
224
|
+
awaitingQualityCheckStatusOption.id,
|
|
230
225
|
);
|
|
231
226
|
await this.issueCommentRepository.createComment(
|
|
232
227
|
issue,
|
|
@@ -2,4 +2,4 @@ export const AWAITING_OWNER_APPROVAL_MESSAGE_HEAD =
|
|
|
2
2
|
'Auto Status Check: AWAITING_OWNER_APPROVAL';
|
|
3
3
|
|
|
4
4
|
export const AWAITING_OWNER_APPROVAL_MESSAGE = `${AWAITING_OWNER_APPROVAL_MESSAGE_HEAD}
|
|
5
|
-
The last report declared that this task is waiting for owner approval. Moving it to
|
|
5
|
+
The last report declared that this task is waiting for owner approval. Moving it to Awaiting Quality Check so that it waits for the owner's judgement instead of being dispatched again.`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleetConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/fleetConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,sCAAsC,EACvC,MAAM,6DAA6D,CAAC;AAErE,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAE/E,eAAO,MAAM,8CAA8C,mCACzB,CAAC;AAEnC,eAAO,MAAM,0BAA0B,GACrC,UAAU,MAAM,GAAG,IAAI,KACtB,MAAM,GAAG,IAUX,CAAC;AAwDF,eAAO,MAAM,0CAA0C,GACrD,qBAAqB,MAAM,GAAG,IAAI,KACjC,
|
|
1
|
+
{"version":3,"file":"fleetConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/fleetConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,sCAAsC,EACvC,MAAM,6DAA6D,CAAC;AAErE,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAE/E,eAAO,MAAM,8CAA8C,mCACzB,CAAC;AAEnC,eAAO,MAAM,0BAA0B,GACrC,UAAU,MAAM,GAAG,IAAI,KACtB,MAAM,GAAG,IAUX,CAAC;AAwDF,eAAO,MAAM,0CAA0C,GACrD,qBAAqB,MAAM,GAAG,IAAI,KACjC,sCA0CF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OauthTokenSelectHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"OauthTokenSelectHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,uBAAuB,EACvB,KAAK,eAAe,EACrB,MAAM,kDAAkD,CAAC;AAQ1D,MAAM,MAAM,4BAA4B,GAAG;IACzC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAKF,eAAO,MAAM,wBAAwB,GACnC,cAAc,MAAM,GAAG,IAAI,KAC1B,MAAM,GAAG,IASX,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,mBAAmB,MAAM,GAAG,IAAI,KAC/B,MASF,CAAC;AAEF,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,GAAE,uBAAuD,EAChE,MAAM,GAAE,eAA6B;IAGxD,MAAM,GACJ,OAAO,4BAA4B,KAClC,6BAA6B,CAiE9B;IAEF,OAAO,CAAC,iBAAiB,CAuBvB;CACH"}
|
|
@@ -3,6 +3,8 @@ import { type OauthTokenCandidate, OauthTokenSelectUseCase } from './OauthTokenS
|
|
|
3
3
|
export type LiveSessionOauthTokenSelectionSettings = {
|
|
4
4
|
maxConcurrentSessionCount: number;
|
|
5
5
|
fullSpeedFiveHourFreeRatio: number;
|
|
6
|
+
minFiveHourFreeRatio: number;
|
|
7
|
+
minSevenDayFreeRatio: number;
|
|
6
8
|
};
|
|
7
9
|
export declare const DEFAULT_LIVE_SESSION_OAUTH_TOKEN_SELECTION_SETTINGS: LiveSessionOauthTokenSelectionSettings;
|
|
8
10
|
export declare const liveSessionConcurrentLimitOf: (fiveHourFreeRatio: number, selectionWeight: number, settings: LiveSessionOauthTokenSelectionSettings) => number;
|
|
@@ -26,6 +28,7 @@ export declare class LiveSessionOauthTokenSelectUseCase {
|
|
|
26
28
|
private readonly rateLimitSelectUseCase;
|
|
27
29
|
constructor(rateLimitSelectUseCase?: OauthTokenSelectUseCase);
|
|
28
30
|
run: (candidates: OauthTokenCandidate[], liveSessions: ClaudeLiveSession[], nowEpochSeconds: number, settings: LiveSessionOauthTokenSelectionSettings) => LiveSessionOauthTokenSelectResult;
|
|
31
|
+
private liveSessionExclusionReason;
|
|
29
32
|
private preferred;
|
|
30
33
|
private liveSessionCountByToken;
|
|
31
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveSessionOauthTokenSelectUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EAExB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,sCAAsC,GAAG;IACnD,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LiveSessionOauthTokenSelectUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EAExB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,sCAAsC,GAAG;IACnD,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,mDAAmD,EAAE,sCAM/D,CAAC;AAEJ,eAAO,MAAM,4BAA4B,GACvC,mBAAmB,MAAM,EACzB,iBAAiB,MAAM,EACvB,UAAU,sCAAsC,KAC/C,MAaF,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,qCAAqC,EAAE,CAAC;CAClD,CAAC;AAEF,qBAAa,kCAAkC;IAE3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAAtB,sBAAsB,GAAE,uBAAuD;IAGlG,GAAG,GACD,YAAY,mBAAmB,EAAE,EACjC,cAAc,iBAAiB,EAAE,EACjC,iBAAiB,MAAM,EACvB,UAAU,sCAAsC,KAC/C,iCAAiC,CAsDlC;IAEF,OAAO,CAAC,0BAA0B,CAgBhC;IAEF,OAAO,CAAC,SAAS,CAgBf;IAEF,OAAO,CAAC,uBAAuB,CAe7B;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,14 +29,20 @@ export type OauthTokenSelectResult = {
|
|
|
29
29
|
selected: OauthTokenCandidate | null;
|
|
30
30
|
metrics: OauthTokenCandidateMetrics[];
|
|
31
31
|
};
|
|
32
|
+
export type OauthTokenSelectionThresholds = {
|
|
33
|
+
fiveHourMinFreeRatio: number;
|
|
34
|
+
sevenDayMinFreeRatio: number;
|
|
35
|
+
};
|
|
32
36
|
export declare const FIVE_HOUR_MIN_FREE_RATIO = 0.25;
|
|
33
37
|
export declare const SEVEN_DAY_MIN_FREE_RATIO = 0.03;
|
|
38
|
+
export declare const DEFAULT_OAUTH_TOKEN_SELECTION_THRESHOLDS: OauthTokenSelectionThresholds;
|
|
39
|
+
export declare const CL_SCRIPT_OAUTH_TOKEN_SELECTION_THRESHOLDS: OauthTokenSelectionThresholds;
|
|
34
40
|
export declare const SEVEN_DAY_WINDOW_HOURS = 168;
|
|
35
41
|
export declare const MIN_HOURS_TO_RESET = 1;
|
|
36
42
|
export declare const sevenDayUrgencyFactor: (sevenDayFreeRatio: number, sevenDayEndEpoch: number, nowEpochSeconds: number) => number;
|
|
37
43
|
export declare const selectWeightedCandidate: <Entry>(eligible: Entry[], weightOf: (entry: Entry) => number, deterministicBest: Entry, random: SelectionRandom) => Entry;
|
|
38
44
|
export declare class OauthTokenSelectUseCase {
|
|
39
|
-
run: (candidates: OauthTokenCandidate[], nowEpochSeconds: number, random?: SelectionRandom) => OauthTokenSelectResult;
|
|
45
|
+
run: (candidates: OauthTokenCandidate[], nowEpochSeconds: number, random?: SelectionRandom, thresholds?: OauthTokenSelectionThresholds) => OauthTokenSelectResult;
|
|
40
46
|
private evaluate;
|
|
41
47
|
private exclusionReason;
|
|
42
48
|
private fiveHourFreeRatio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OauthTokenSelectUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/OauthTokenSelectUseCase.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC1C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC;AAE3C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,iBAAiB,GAAI,WAAW,mBAAmB,KAAG,MAGlE,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC,CAAC;AAKF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAGpC,eAAO,MAAM,qBAAqB,GAChC,mBAAmB,MAAM,EACzB,kBAAkB,MAAM,EACxB,iBAAiB,MAAM,KACtB,MAMF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,KAAK,EAC3C,UAAU,KAAK,EAAE,EACjB,UAAU,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,EAClC,mBAAmB,KAAK,EACxB,QAAQ,eAAe,KACtB,KAkBF,CAAC;AAEF,qBAAa,uBAAuB;IAClC,GAAG,GACD,YAAY,mBAAmB,EAAE,EACjC,iBAAiB,MAAM,EACvB,SAAQ,eAA6B,
|
|
1
|
+
{"version":3,"file":"OauthTokenSelectUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/OauthTokenSelectUseCase.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC1C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC;AAE3C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,iBAAiB,GAAI,WAAW,mBAAmB,KAAG,MAGlE,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAKF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,wCAAwC,EAAE,6BAIpD,CAAC;AAEJ,eAAO,MAAM,0CAA0C,EAAE,6BAItD,CAAC;AAEJ,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAGpC,eAAO,MAAM,qBAAqB,GAChC,mBAAmB,MAAM,EACzB,kBAAkB,MAAM,EACxB,iBAAiB,MAAM,KACtB,MAMF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,KAAK,EAC3C,UAAU,KAAK,EAAE,EACjB,UAAU,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,EAClC,mBAAmB,KAAK,EACxB,QAAQ,eAAe,KACtB,KAkBF,CAAC;AAEF,qBAAa,uBAAuB;IAClC,GAAG,GACD,YAAY,mBAAmB,EAAE,EACjC,iBAAiB,MAAM,EACvB,SAAQ,eAA6B,EACrC,aAAY,6BAAwE,KACnF,sBAAsB,CA4CvB;IAEF,OAAO,CAAC,QAAQ,CAmCd;IAEF,OAAO,CAAC,eAAe,CAwBrB;IAEF,OAAO,CAAC,iBAAiB,CAWvB;IAEF,OAAO,CAAC,iBAAiB,CAWvB;IAEF,OAAO,CAAC,gBAAgB,CActB;IAEF,OAAO,CAAC,aAAa,CAGwC;IAE7D,OAAO,CAAC,wBAAwB,CAG9B;IAEF,OAAO,CAAC,SAAS,CAAsD;CACxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevertOrphanedPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertOrphanedPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"RevertOrphanedPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertOrphanedPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AA0C7E,qBAAa,gCAAgC;IAEzC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAC9B,iBAAiB,EACf,oBAAoB,GACpB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,iBAAiB,CACpB;IACD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,KAAK,GACL,oBAAoB,CACvB;IACD,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CACnC,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC;IACD,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;gBArBtC,iBAAiB,EAAE,IAAI,CAC9B,iBAAiB,EACf,oBAAoB,GACpB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,iBAAiB,CACpB,EACQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,KAAK,GACL,oBAAoB,CACvB,EACQ,sBAAsB,EAAE,IAAI,CACnC,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACQ,kBAAkB,EAAE,kBAAkB;IAGjD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,EAAE,MAAM,CAAC;QACvC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,6BAA6B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACtC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC,KAAG,OAAO,CAAC,IAAI,CAAC,CA0Pf;IAEF,OAAO,CAAC,oBAAoB,CAqB1B;IAEF,OAAO,CAAC,eAAe,CAoHrB;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;IAEF,OAAO,CAAC,eAAe,CA6BrB;IAEF,OAAO,CAAC,YAAY,CA+BlB;CACH"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const AWAITING_OWNER_APPROVAL_MESSAGE_HEAD = "Auto Status Check: AWAITING_OWNER_APPROVAL";
|
|
2
|
-
export declare const AWAITING_OWNER_APPROVAL_MESSAGE = "Auto Status Check: AWAITING_OWNER_APPROVAL\nThe last report declared that this task is waiting for owner approval. Moving it to
|
|
2
|
+
export declare const AWAITING_OWNER_APPROVAL_MESSAGE = "Auto Status Check: AWAITING_OWNER_APPROVAL\nThe last report declared that this task is waiting for owner approval. Moving it to Awaiting Quality Check so that it waits for the owner's judgement instead of being dispatched again.";
|
|
3
3
|
//# sourceMappingURL=awaitingOwnerApprovalMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awaitingOwnerApprovalMessage.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/awaitingOwnerApprovalMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAE/C,eAAO,MAAM,+BAA+B,
|
|
1
|
+
{"version":3,"file":"awaitingOwnerApprovalMessage.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/awaitingOwnerApprovalMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAE/C,eAAO,MAAM,+BAA+B,yOAC6I,CAAC"}
|