github-issue-tower-defence-management 2.152.0 → 2.152.2
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/bin/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.js +4 -4
- package/bin/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.js.map +1 -1
- package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js +1 -5
- package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js.map +1 -1
- package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js +49 -58
- package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js.map +1 -1
- package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js +16 -93
- package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js.map +1 -1
- package/package.json +1 -1
- package/types/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/tokenExhaustionHandover.d.ts.map +1 -1
- package/types/domain/usecases/LiveSessionOauthTokenSelectUseCase.d.ts +5 -3
- package/types/domain/usecases/LiveSessionOauthTokenSelectUseCase.d.ts.map +1 -1
- package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts +0 -10
- package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts.map +1 -1
|
@@ -71,19 +71,19 @@ class LiveSessionOauthTokenSelectHandler {
|
|
|
71
71
|
const status = metric.eligible
|
|
72
72
|
? 'eligible'
|
|
73
73
|
: `excluded (${metric.exclusionReason})`;
|
|
74
|
-
return `${metric.name}: ${metric.liveSessionCount}/${metric.concurrentSessionLimit} live session(s), 5h ${Math.round(metric.fiveHourFreeRatio * 100)}% free, 7d ${Math.round(metric.sevenDayFreeRatio * 100)}% free, 7d-end in ${secondsUntilSevenDayEnd}s, weight ${metric.selectionWeight} -> ${status}`;
|
|
74
|
+
return `${metric.name}: ${metric.liveSessionCount}/${metric.concurrentSessionLimit} live session(s), 5h ${Math.round(metric.fiveHourFreeRatio * 100)}% free, 7d ${Math.round(metric.sevenDayFreeRatio * 100)}% free, 7d-end in ${secondsUntilSevenDayEnd}s, 7d budget drainable by 48h before reset: ${metric.sevenDayBudgetUndrainableBeforeSpendDeadline ? 'no' : 'yes'}, weight ${metric.selectionWeight} -> ${status}`;
|
|
75
75
|
});
|
|
76
76
|
if (result.selected === null) {
|
|
77
|
-
lines.push(
|
|
77
|
+
lines.push('No eligible token: every token is disabled for Claude Code subscription access or rejected by the API (unified status rejected or fable weekly limit exhausted), so no token can take a live session.');
|
|
78
78
|
}
|
|
79
79
|
else {
|
|
80
80
|
const selectedMetric = result.metrics.find((m) => m.name === result.selected?.name);
|
|
81
81
|
const usedFallback = selectedMetric !== undefined && !selectedMetric.eligible;
|
|
82
82
|
if (usedFallback) {
|
|
83
|
-
lines.push(`Selected ${result.selected.name} via fallback (
|
|
83
|
+
lines.push(`Selected ${result.selected.name} via fallback (every token is excluded; ${result.selected.name} has the highest 5h free ratio among the tokens excluded only by an HTTP 401 auth failure).`);
|
|
84
84
|
}
|
|
85
85
|
else {
|
|
86
|
-
lines.push(`Selected ${result.selected.name} (the
|
|
86
|
+
lines.push(`Selected ${result.selected.name} (eligible tokens are ordered with the tokens whose remaining 7d budget cannot be spent by 48h before the 7d reset at maxConcurrentSessionCount (${settings.maxConcurrentSessionCount}) sessions, one fully spent 5h window consuming 14% of the 7d window, moved to the front, then by 7d free ratio ascending; the first token still under its concurrent session limit is chosen, or the token least over its limit when none is under it; each limit is the lower of the 5h free-share throttle and the number of sessions the free 5h share sustains until the window resets at ${settings.fiveHourShareConsumedPerSessionHour} of the window per session-hour).`);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
return lines;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveSessionOauthTokenSelectHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"LiveSessionOauthTokenSelectHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ const ProcClaudeHandoverSessionRepository_1 = require("../../repositories/ProcCl
|
|
|
9
9
|
const NodeProcessSignalRepository_1 = require("../../repositories/NodeProcessSignalRepository");
|
|
10
10
|
const FileHandoverStateRepository_1 = require("../../repositories/FileHandoverStateRepository");
|
|
11
11
|
const handleTokenExhaustionHandover = async (params) => {
|
|
12
|
-
const { enabled, tokenListJsonPath,
|
|
12
|
+
const { enabled, tokenListJsonPath, tokenRateLimitSnapshotBaseDir, stateFilePath, localCommandRunner, now, } = params;
|
|
13
13
|
if (tokenListJsonPath === null) {
|
|
14
14
|
console.log('Token exhaustion handover: skipped (no claudeCodeOauthTokenListJsonPath configured).');
|
|
15
15
|
return;
|
|
@@ -19,10 +19,6 @@ const handleTokenExhaustionHandover = async (params) => {
|
|
|
19
19
|
const useCase = new TokenExhaustionHandoverUseCase_1.TokenExhaustionHandoverUseCase(new ProcClaudeHandoverSessionRepository_1.ProcClaudeHandoverSessionRepository(), snapshotRepository, new NodeTmuxSessionRepository_1.NodeTmuxSessionRepository(localCommandRunner), new NodeProcessSignalRepository_1.NodeProcessSignalRepository(), new GitHubIssueCheckpointRepository_1.GitHubIssueCheckpointRepository(process.env.GH_TOKEN ?? ''));
|
|
20
20
|
const result = await useCase.run({
|
|
21
21
|
enabled,
|
|
22
|
-
issueUrlLeaderMessage: handoverMessage ?? TokenExhaustionHandoverUseCase_1.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE,
|
|
23
|
-
bareNameLeaderMessage: bareNameLeaderHandoverMessage ??
|
|
24
|
-
TokenExhaustionHandoverUseCase_1.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE_BARE_NAME_LEADER,
|
|
25
|
-
gracePeriodSeconds: gracePeriodSeconds ?? TokenExhaustionHandoverUseCase_1.DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS,
|
|
26
22
|
state: stateRepository.load(),
|
|
27
23
|
now,
|
|
28
24
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenExhaustionHandover.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/tokenExhaustionHandover.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"tokenExhaustionHandover.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/tokenExhaustionHandover.ts"],"names":[],"mappings":";;;AACA,4GAAyG;AACzG,wGAAqG;AACrG,4FAAyF;AACzF,gGAA6F;AAC7F,gHAA6G;AAC7G,gGAA6F;AAC7F,gGAGwD;AAcjD,MAAM,6BAA6B,GAAG,KAAK,EAChD,MAAqC,EACtB,EAAE;IACjB,MAAM,EACJ,OAAO,EACP,iBAAiB,EACjB,6BAA6B,EAC7B,aAAa,EACb,kBAAkB,EAClB,GAAG,GACJ,GAAG,MAAM,CAAC;IAEX,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,sFAAsF,CACvF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,yDAA2B,CACxD,iBAAiB,EACjB,6BAA6B,IAAI,SAAS,CAC3C,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,yDAA2B,CACrD,aAAa,IAAI,IAAA,0DAA4B,GAAE,CAChD,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,+DAA8B,CAChD,IAAI,yEAAmC,EAAE,EACzC,kBAAkB,EAClB,IAAI,qDAAyB,CAAC,kBAAkB,CAAC,EACjD,IAAI,yDAA2B,EAAE,EACjC,IAAI,iEAA+B,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,OAAO;QACP,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE;QAC7B,GAAG;KACJ,CAAC,CAAC;IAEH,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC;AAzCW,QAAA,6BAA6B,iCAyCxC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LiveSessionOauthTokenSelectUseCase = exports.liveSessionConcurrentLimitOf = exports.fiveHourSustainableSessionCountOf = exports.DEFAULT_LIVE_SESSION_OAUTH_TOKEN_SELECTION_SETTINGS = exports.
|
|
3
|
+
exports.LiveSessionOauthTokenSelectUseCase = exports.liveSessionOauthTokenCandidateMetricsInSelectionOrder = exports.sevenDayBudgetUndrainableBeforeSpendDeadlineOf = exports.sevenDayShareDrainableBeforeSpendDeadlineOf = exports.liveSessionConcurrentLimitOf = exports.fiveHourSustainableSessionCountOf = exports.DEFAULT_LIVE_SESSION_OAUTH_TOKEN_SELECTION_SETTINGS = exports.SEVEN_DAY_SHARE_CONSUMED_PER_FULLY_SPENT_FIVE_HOUR_WINDOW = void 0;
|
|
4
4
|
const OauthTokenSelectUseCase_1 = require("./OauthTokenSelectUseCase");
|
|
5
|
-
exports.
|
|
5
|
+
exports.SEVEN_DAY_SHARE_CONSUMED_PER_FULLY_SPENT_FIVE_HOUR_WINDOW = 0.14;
|
|
6
|
+
const RATE_LIMIT_SELECTION_THRESHOLDS_THAT_EXCLUDE_NO_FREE_RATIO = {
|
|
7
|
+
fiveHourMinFreeRatio: 0,
|
|
8
|
+
sevenDayMinFreeRatio: 0,
|
|
9
|
+
};
|
|
6
10
|
exports.DEFAULT_LIVE_SESSION_OAUTH_TOKEN_SELECTION_SETTINGS = {
|
|
7
11
|
maxConcurrentSessionCount: 10,
|
|
8
12
|
fullSpeedFiveHourFreeRatio: 0.5,
|
|
@@ -40,27 +44,45 @@ const liveSessionConcurrentLimitOf = (fiveHourFreeRatio, selectionWeight, settin
|
|
|
40
44
|
return Math.min(Math.floor(base * sevenDayUrgencyBoost), settings.maxConcurrentSessionCount);
|
|
41
45
|
};
|
|
42
46
|
exports.liveSessionConcurrentLimitOf = liveSessionConcurrentLimitOf;
|
|
47
|
+
const sevenDayShareDrainableBeforeSpendDeadlineOf = (sevenDayEndEpoch, nowEpochSeconds, settings) => {
|
|
48
|
+
const hoursUntilSevenDaySpendDeadline = Math.max((sevenDayEndEpoch - nowEpochSeconds) / SECONDS_PER_HOUR -
|
|
49
|
+
OauthTokenSelectUseCase_1.SEVEN_DAY_SPEND_DEADLINE_HOURS, 0);
|
|
50
|
+
const fiveHourShareSpentPerHourAtMaxConcurrency = Math.min(settings.maxConcurrentSessionCount *
|
|
51
|
+
settings.fiveHourShareConsumedPerSessionHour, 1 / FIVE_HOUR_WINDOW_LENGTH_HOURS);
|
|
52
|
+
return (hoursUntilSevenDaySpendDeadline *
|
|
53
|
+
fiveHourShareSpentPerHourAtMaxConcurrency *
|
|
54
|
+
exports.SEVEN_DAY_SHARE_CONSUMED_PER_FULLY_SPENT_FIVE_HOUR_WINDOW);
|
|
55
|
+
};
|
|
56
|
+
exports.sevenDayShareDrainableBeforeSpendDeadlineOf = sevenDayShareDrainableBeforeSpendDeadlineOf;
|
|
57
|
+
const sevenDayBudgetUndrainableBeforeSpendDeadlineOf = (sevenDayFreeRatio, sevenDayEndEpoch, nowEpochSeconds, settings) => sevenDayFreeRatio >
|
|
58
|
+
(0, exports.sevenDayShareDrainableBeforeSpendDeadlineOf)(sevenDayEndEpoch, nowEpochSeconds, settings);
|
|
59
|
+
exports.sevenDayBudgetUndrainableBeforeSpendDeadlineOf = sevenDayBudgetUndrainableBeforeSpendDeadlineOf;
|
|
60
|
+
const liveSessionOauthTokenCandidateMetricsInSelectionOrder = (metrics) => [...metrics].sort((left, right) => {
|
|
61
|
+
if (left.sevenDayBudgetUndrainableBeforeSpendDeadline !==
|
|
62
|
+
right.sevenDayBudgetUndrainableBeforeSpendDeadline) {
|
|
63
|
+
return left.sevenDayBudgetUndrainableBeforeSpendDeadline ? -1 : 1;
|
|
64
|
+
}
|
|
65
|
+
if (left.sevenDayFreeRatio !== right.sevenDayFreeRatio) {
|
|
66
|
+
return left.sevenDayFreeRatio - right.sevenDayFreeRatio;
|
|
67
|
+
}
|
|
68
|
+
if (left.sevenDayEndEpoch !== right.sevenDayEndEpoch) {
|
|
69
|
+
return left.sevenDayEndEpoch - right.sevenDayEndEpoch;
|
|
70
|
+
}
|
|
71
|
+
return left.liveSessionCount - right.liveSessionCount;
|
|
72
|
+
});
|
|
73
|
+
exports.liveSessionOauthTokenCandidateMetricsInSelectionOrder = liveSessionOauthTokenCandidateMetricsInSelectionOrder;
|
|
43
74
|
class LiveSessionOauthTokenSelectUseCase {
|
|
44
75
|
constructor(rateLimitSelectUseCase = new OauthTokenSelectUseCase_1.OauthTokenSelectUseCase()) {
|
|
45
76
|
this.rateLimitSelectUseCase = rateLimitSelectUseCase;
|
|
46
77
|
this.run = (candidates, liveSessions, nowEpochSeconds, settings) => {
|
|
47
|
-
const rateLimitResult = this.rateLimitSelectUseCase.run(candidates, nowEpochSeconds, () => 0);
|
|
78
|
+
const rateLimitResult = this.rateLimitSelectUseCase.run(candidates, nowEpochSeconds, () => 0, RATE_LIMIT_SELECTION_THRESHOLDS_THAT_EXCLUDE_NO_FREE_RATIO);
|
|
48
79
|
const liveSessionCountByToken = this.liveSessionCountByToken(liveSessions);
|
|
49
80
|
const evaluated = candidates.map((candidate, index) => {
|
|
50
81
|
const rateLimitMetric = rateLimitResult.metrics[index];
|
|
51
82
|
const liveSessionCount = liveSessionCountByToken.get(candidate.token) ?? 0;
|
|
52
83
|
const urgencyBoost = (0, OauthTokenSelectUseCase_1.sevenDayUrgencyFactor)(rateLimitMetric.sevenDayFreeRatio, rateLimitMetric.sevenDayEndEpoch, nowEpochSeconds);
|
|
53
84
|
const concurrentSessionLimit = Math.min((0, exports.liveSessionConcurrentLimitOf)(rateLimitMetric.fiveHourFreeRatio, (0, OauthTokenSelectUseCase_1.selectionWeightOf)(candidate), settings, urgencyBoost), (0, exports.fiveHourSustainableSessionCountOf)(rateLimitMetric.fiveHourFreeRatio, hoursUntilFiveHourResetOf(candidate.snapshot, nowEpochSeconds), settings));
|
|
54
|
-
const
|
|
55
|
-
const sevenDayDeadlinePassed = snapshot !== null &&
|
|
56
|
-
snapshot.sevenDayReset > 0 &&
|
|
57
|
-
nowEpochSeconds >=
|
|
58
|
-
snapshot.sevenDayReset - OauthTokenSelectUseCase_1.SEVEN_DAY_SPEND_DEADLINE_HOURS * 3600;
|
|
59
|
-
const fiveHourDeadlinePassed = snapshot !== null &&
|
|
60
|
-
snapshot.fiveHourReset > 0 &&
|
|
61
|
-
nowEpochSeconds >=
|
|
62
|
-
snapshot.fiveHourReset - OauthTokenSelectUseCase_1.FIVE_HOUR_SPEND_DEADLINE_HOURS * 3600;
|
|
63
|
-
const exclusionReason = this.liveSessionExclusionReason(rateLimitMetric.exclusionReason, rateLimitMetric.fiveHourFreeRatio, rateLimitMetric.sevenDayFreeRatio, settings, fiveHourDeadlinePassed, sevenDayDeadlinePassed);
|
|
85
|
+
const exclusionReason = rateLimitMetric.exclusionReason;
|
|
64
86
|
return {
|
|
65
87
|
candidate,
|
|
66
88
|
metric: {
|
|
@@ -68,6 +90,7 @@ class LiveSessionOauthTokenSelectUseCase {
|
|
|
68
90
|
fiveHourFreeRatio: rateLimitMetric.fiveHourFreeRatio,
|
|
69
91
|
sevenDayFreeRatio: rateLimitMetric.sevenDayFreeRatio,
|
|
70
92
|
sevenDayEndEpoch: rateLimitMetric.sevenDayEndEpoch,
|
|
93
|
+
sevenDayBudgetUndrainableBeforeSpendDeadline: (0, exports.sevenDayBudgetUndrainableBeforeSpendDeadlineOf)(rateLimitMetric.sevenDayFreeRatio, rateLimitMetric.sevenDayEndEpoch, nowEpochSeconds, settings),
|
|
71
94
|
liveSessionCount,
|
|
72
95
|
concurrentSessionLimit,
|
|
73
96
|
hasConcurrencyHeadroom: liveSessionCount < concurrentSessionLimit,
|
|
@@ -78,13 +101,12 @@ class LiveSessionOauthTokenSelectUseCase {
|
|
|
78
101
|
};
|
|
79
102
|
});
|
|
80
103
|
const metrics = evaluated.map((entry) => entry.metric);
|
|
81
|
-
const
|
|
82
|
-
|
|
104
|
+
const candidateByMetric = new Map(evaluated.map((entry) => [entry.metric, entry.candidate]));
|
|
105
|
+
const eligibleMetricsInSelectionOrder = (0, exports.liveSessionOauthTokenCandidateMetricsInSelectionOrder)(metrics.filter((metric) => metric.eligible));
|
|
106
|
+
if (eligibleMetricsInSelectionOrder.length === 0) {
|
|
83
107
|
const fallbackEligible = evaluated.filter((entry) => !entry.candidate.subscriptionDisabled &&
|
|
84
108
|
!entry.candidate.unifiedRejected &&
|
|
85
|
-
!entry.candidate.fableRejected
|
|
86
|
-
Math.round(entry.metric.sevenDayFreeRatio * 100) >
|
|
87
|
-
Math.round(exports.LIVE_SESSION_FALLBACK_SEVEN_DAY_MIN_FREE_RATIO * 100));
|
|
109
|
+
!entry.candidate.fableRejected);
|
|
88
110
|
if (fallbackEligible.length === 0) {
|
|
89
111
|
return { selected: null, metrics };
|
|
90
112
|
}
|
|
@@ -103,46 +125,15 @@ class LiveSessionOauthTokenSelectUseCase {
|
|
|
103
125
|
});
|
|
104
126
|
return { selected: fallbackSelected.candidate, metrics };
|
|
105
127
|
}
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
if (!fiveHourDeadlinePassed &&
|
|
116
|
-
fiveHourFreeRatio < settings.minFiveHourFreeRatio) {
|
|
117
|
-
return `5h window only ${Math.round(fiveHourFreeRatio * 100)}% free (requires >= ${Math.round(settings.minFiveHourFreeRatio * 100)}% for live session selection)`;
|
|
118
|
-
}
|
|
119
|
-
if (!sevenDayDeadlinePassed &&
|
|
120
|
-
sevenDayFreeRatio < settings.minSevenDayFreeRatio) {
|
|
121
|
-
return `7d window only ${Math.round(sevenDayFreeRatio * 100)}% free (requires >= ${Math.round(settings.minSevenDayFreeRatio * 100)}% for live session selection)`;
|
|
122
|
-
}
|
|
123
|
-
if (sevenDayDeadlinePassed &&
|
|
124
|
-
Math.round(sevenDayFreeRatio * 100) <=
|
|
125
|
-
Math.round(exports.LIVE_SESSION_FALLBACK_SEVEN_DAY_MIN_FREE_RATIO * 100)) {
|
|
126
|
-
return `7d window only ${Math.round(sevenDayFreeRatio * 100)}% free (budget exhausted; token ineligible even within 48-hour deadline window)`;
|
|
127
|
-
}
|
|
128
|
-
return null;
|
|
129
|
-
};
|
|
130
|
-
this.preferred = (candidateMetric, incumbentMetric) => {
|
|
131
|
-
if (candidateMetric.hasConcurrencyHeadroom !==
|
|
132
|
-
incumbentMetric.hasConcurrencyHeadroom) {
|
|
133
|
-
return candidateMetric.hasConcurrencyHeadroom;
|
|
134
|
-
}
|
|
135
|
-
if (!candidateMetric.hasConcurrencyHeadroom) {
|
|
136
|
-
const candidateOccupancyRatio = occupancyRatioAfterOneMoreSessionOf(candidateMetric);
|
|
137
|
-
const incumbentOccupancyRatio = occupancyRatioAfterOneMoreSessionOf(incumbentMetric);
|
|
138
|
-
if (candidateOccupancyRatio !== incumbentOccupancyRatio) {
|
|
139
|
-
return candidateOccupancyRatio < incumbentOccupancyRatio;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (candidateMetric.sevenDayEndEpoch !== incumbentMetric.sevenDayEndEpoch) {
|
|
143
|
-
return (candidateMetric.sevenDayEndEpoch < incumbentMetric.sevenDayEndEpoch);
|
|
144
|
-
}
|
|
145
|
-
return candidateMetric.liveSessionCount < incumbentMetric.liveSessionCount;
|
|
128
|
+
const selectedMetric = eligibleMetricsInSelectionOrder.find((metric) => metric.hasConcurrencyHeadroom) ??
|
|
129
|
+
eligibleMetricsInSelectionOrder.reduce((leastOccupied, current) => occupancyRatioAfterOneMoreSessionOf(current) <
|
|
130
|
+
occupancyRatioAfterOneMoreSessionOf(leastOccupied)
|
|
131
|
+
? current
|
|
132
|
+
: leastOccupied);
|
|
133
|
+
return {
|
|
134
|
+
selected: candidateByMetric.get(selectedMetric) ?? null,
|
|
135
|
+
metrics,
|
|
136
|
+
};
|
|
146
137
|
};
|
|
147
138
|
this.liveSessionCountByToken = (liveSessions) => {
|
|
148
139
|
const sessionKeysByToken = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveSessionOauthTokenSelectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts"],"names":[],"mappings":";;;AACA,uEAQmC;AAEtB,QAAA,
|
|
1
|
+
{"version":3,"file":"LiveSessionOauthTokenSelectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TokenExhaustionHandoverUseCase = exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = exports.
|
|
4
|
-
exports.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE = 'TOKEN NEAR EXHAUSTION. Within 2 minutes, write a CHECKPOINT to your assigned task issue: the in-flight subagents and what each is doing, their durable refs (branch and pull request URLs), the working directory and branch, the single concrete next action to resume, and the reason (token near exhaustion). Do this WITHOUT waiting for long-running or CI-watching subagents. Then self-kill your own tmux session with `tmux kill-session`.';
|
|
5
|
-
exports.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE_BARE_NAME_LEADER = 'TOKEN NEAR EXHAUSTION. You are a resident leader with no assigned task issue. Within 2 minutes, write a CHECKPOINT for every in-flight subagent (what each is doing and its durable refs = branch and pull request URLs, plus the single concrete next action to resume and the working directory and branch) into the GitHub issue that each subagent is working on, WITHOUT waiting for long-running or CI-watching subagents. Then stop and stay idle; do NOT self-kill. This session will be terminated and relaunched on a token that still has quota so its work is preserved.';
|
|
6
|
-
exports.DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS = 180;
|
|
3
|
+
exports.TokenExhaustionHandoverUseCase = exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = exports.TOKEN_EXHAUSTION_SNAPSHOT_HARD_STALE_THRESHOLD_SECONDS = exports.TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS = void 0;
|
|
7
4
|
exports.TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS = 900;
|
|
8
5
|
exports.TOKEN_EXHAUSTION_SNAPSHOT_HARD_STALE_THRESHOLD_SECONDS = 3600;
|
|
9
|
-
exports.TOKEN_EXHAUSTION_FIVE_HOUR_FREE_THRESHOLD = 0.1;
|
|
10
|
-
exports.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD = 0.05;
|
|
11
6
|
exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = 0.25;
|
|
12
7
|
exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = 0.15;
|
|
13
8
|
class TokenExhaustionHandoverUseCase {
|
|
@@ -22,11 +17,9 @@ class TokenExhaustionHandoverUseCase {
|
|
|
22
17
|
const sessions = this.handoverSessionRepository.listHandoverSessions();
|
|
23
18
|
const snapshots = this.snapshotRepository.listSnapshots();
|
|
24
19
|
const snapshotByToken = new Map(snapshots.map((snapshot) => [snapshot.token, snapshot]));
|
|
25
|
-
const liveSessionNames = new Set(await this.tmuxSessionRepository.listLiveSessionNames());
|
|
26
20
|
const nextEntries = {
|
|
27
21
|
...input.state.entries,
|
|
28
22
|
};
|
|
29
|
-
const newlyHandoverSentSessionNames = [];
|
|
30
23
|
const killedSessionNames = [];
|
|
31
24
|
const terminatedPids = [];
|
|
32
25
|
const relaunchedLeaderNames = [];
|
|
@@ -45,7 +38,7 @@ class TokenExhaustionHandoverUseCase {
|
|
|
45
38
|
continue;
|
|
46
39
|
}
|
|
47
40
|
const hasTmux = session.kind !== 'implSubagent';
|
|
48
|
-
const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds
|
|
41
|
+
const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds);
|
|
49
42
|
const stateKey = this.stateKeyFor(session);
|
|
50
43
|
if (verdict.stale) {
|
|
51
44
|
continue;
|
|
@@ -59,77 +52,33 @@ class TokenExhaustionHandoverUseCase {
|
|
|
59
52
|
leftAliveSessionNames.push(this.displayName(session));
|
|
60
53
|
continue;
|
|
61
54
|
}
|
|
62
|
-
if (session.kind === 'bareNameLeader') {
|
|
63
|
-
if (!input.enabled) {
|
|
64
|
-
console.log(`Token exhaustion handover: would kill and relaunch ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} (dry-run, enabled=false)`);
|
|
65
|
-
delete nextEntries[stateKey];
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
await this.forceKill(session, {
|
|
69
|
-
signaledAtEpoch: nowEpochSeconds,
|
|
70
|
-
pid: session.pid,
|
|
71
|
-
});
|
|
72
|
-
await this.relaunchBareNameLeader(session, relaunchedLeaderNames);
|
|
73
|
-
killedSessionNames.push(this.displayName(session));
|
|
74
|
-
console.log(`Token exhaustion handover: killed and relaunched ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} enabled=${input.enabled}`);
|
|
75
|
-
delete nextEntries[stateKey];
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
const entry = nextEntries[stateKey];
|
|
79
|
-
if (entry === undefined) {
|
|
80
|
-
if (input.enabled) {
|
|
81
|
-
await this.sendHandover(session, input);
|
|
82
|
-
}
|
|
83
|
-
console.log(`Token exhaustion handover: signaled ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} enabled=${input.enabled}`);
|
|
84
|
-
nextEntries[stateKey] = {
|
|
85
|
-
signaledAtEpoch: nowEpochSeconds,
|
|
86
|
-
pid: session.pid,
|
|
87
|
-
};
|
|
88
|
-
newlyHandoverSentSessionNames.push(this.displayName(session));
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (nowEpochSeconds - entry.signaledAtEpoch <
|
|
92
|
-
input.gracePeriodSeconds) {
|
|
93
|
-
console.log(`Token exhaustion handover: waiting for grace period for ${this.displayName(session)} remainingSeconds=${input.gracePeriodSeconds - (nowEpochSeconds - entry.signaledAtEpoch)}`);
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
const alive = hasTmux
|
|
97
|
-
? session.sessionName !== null &&
|
|
98
|
-
liveSessionNames.has(session.sessionName) &&
|
|
99
|
-
session.pid === entry.pid
|
|
100
|
-
: this.processSignalRepository.isProcessAlive(entry.pid);
|
|
101
|
-
if (!alive) {
|
|
102
|
-
if (input.enabled && this.needsRelaunch(session)) {
|
|
103
|
-
await this.relaunchBareNameLeader(session, relaunchedLeaderNames);
|
|
104
|
-
}
|
|
105
|
-
delete nextEntries[stateKey];
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
55
|
if (!input.enabled) {
|
|
109
|
-
console.log(`Token exhaustion handover: would
|
|
56
|
+
console.log(`Token exhaustion handover: would kill${this.needsRelaunch(session) ? ' and relaunch' : ''} ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} (dry-run, enabled=false)`);
|
|
110
57
|
delete nextEntries[stateKey];
|
|
111
58
|
continue;
|
|
112
59
|
}
|
|
113
|
-
await this.forceKill(session,
|
|
60
|
+
await this.forceKill(session, {
|
|
61
|
+
signaledAtEpoch: nowEpochSeconds,
|
|
62
|
+
pid: session.pid,
|
|
63
|
+
});
|
|
114
64
|
if (this.needsRelaunch(session)) {
|
|
115
65
|
await this.relaunchBareNameLeader(session, relaunchedLeaderNames);
|
|
116
66
|
}
|
|
117
|
-
console.log(`Token exhaustion handover: force-killed ${this.displayName(session)} kind=${session.kind}`);
|
|
118
67
|
if (hasTmux) {
|
|
119
68
|
killedSessionNames.push(this.displayName(session));
|
|
120
69
|
}
|
|
121
70
|
else {
|
|
122
|
-
terminatedPids.push(
|
|
71
|
+
terminatedPids.push(session.pid);
|
|
123
72
|
}
|
|
73
|
+
console.log(`Token exhaustion handover: killed${this.needsRelaunch(session) ? ' and relaunched' : ''} ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} enabled=${input.enabled}`);
|
|
124
74
|
delete nextEntries[stateKey];
|
|
125
75
|
}
|
|
126
76
|
catch (error) {
|
|
127
77
|
console.error(`Token exhaustion handover: error processing ${this.displayName(session)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
78
|
}
|
|
129
79
|
}
|
|
130
|
-
console.log(`Token exhaustion handover: cycle summary evaluated=${sessions.length} enabled=${input.enabled}
|
|
80
|
+
console.log(`Token exhaustion handover: cycle summary evaluated=${sessions.length} enabled=${input.enabled} killed=${killedSessionNames.length} terminatedPids=${terminatedPids.length} relaunched=${relaunchedLeaderNames.length} leftAlive=${leftAliveSessionNames.length} skippedWorkspacePreparation=${skippedWorkspacePreparationSessionNames.length}`);
|
|
131
81
|
return {
|
|
132
|
-
newlyHandoverSentSessionNames,
|
|
133
82
|
killedSessionNames,
|
|
134
83
|
terminatedPids,
|
|
135
84
|
relaunchedLeaderNames,
|
|
@@ -146,25 +95,6 @@ class TokenExhaustionHandoverUseCase {
|
|
|
146
95
|
await this.tmuxSessionRepository.launchBareNameLeaderSession(session.name);
|
|
147
96
|
relaunchedLeaderNames.push(session.name);
|
|
148
97
|
};
|
|
149
|
-
this.sendHandover = async (session, input) => {
|
|
150
|
-
if (session.kind === 'implSubagent') {
|
|
151
|
-
if (session.issueUrl !== null) {
|
|
152
|
-
await this.issueCheckpointRepository.postCheckpoint(session.issueUrl);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
console.log(`Token exhaustion handover: sending SIGTERM to impl subagent pid=${session.pid} (no issue URL, cannot post checkpoint)`);
|
|
156
|
-
this.processSignalRepository.terminateProcess(session.pid);
|
|
157
|
-
}
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
if (session.sessionName === null) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const message = session.kind === 'issueUrlLeader'
|
|
164
|
-
? input.issueUrlLeaderMessage
|
|
165
|
-
: input.bareNameLeaderMessage;
|
|
166
|
-
await this.tmuxSessionRepository.sendKeys(session.sessionName, message);
|
|
167
|
-
};
|
|
168
98
|
this.forceKill = async (session, entry) => {
|
|
169
99
|
if (session.kind === 'implSubagent') {
|
|
170
100
|
this.processSignalRepository.terminateProcess(entry.pid);
|
|
@@ -190,14 +120,14 @@ class TokenExhaustionHandoverUseCase {
|
|
|
190
120
|
if (snapshot.token === currentToken) {
|
|
191
121
|
continue;
|
|
192
122
|
}
|
|
193
|
-
const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds
|
|
123
|
+
const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds);
|
|
194
124
|
if (!verdict.stale && !verdict.exhausted) {
|
|
195
125
|
return true;
|
|
196
126
|
}
|
|
197
127
|
}
|
|
198
128
|
return false;
|
|
199
129
|
};
|
|
200
|
-
this.evaluateSnapshot = (snapshot, nowEpochSeconds
|
|
130
|
+
this.evaluateSnapshot = (snapshot, nowEpochSeconds) => {
|
|
201
131
|
const age = nowEpochSeconds - snapshot.lastUpdatedEpoch;
|
|
202
132
|
const fiveHourFree = this.freeRatio(snapshot.fiveHourUtilization, snapshot.fiveHourReset, nowEpochSeconds);
|
|
203
133
|
const sevenDayFree = this.freeRatio(snapshot.sevenDayUtilization, snapshot.sevenDayReset, nowEpochSeconds);
|
|
@@ -232,19 +162,12 @@ class TokenExhaustionHandoverUseCase {
|
|
|
232
162
|
weeklyCapped,
|
|
233
163
|
};
|
|
234
164
|
}
|
|
235
|
-
const exhausted =
|
|
236
|
-
(hasTmux && sevenDayFree < exports.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD) ||
|
|
237
|
-
blocked ||
|
|
238
|
-
weeklyCapped;
|
|
165
|
+
const exhausted = blocked || weeklyCapped;
|
|
239
166
|
const reason = weeklyCapped
|
|
240
167
|
? 'weekly_hard_cap_rejected'
|
|
241
|
-
:
|
|
242
|
-
? '
|
|
243
|
-
:
|
|
244
|
-
? 'seven_day_free_below_threshold'
|
|
245
|
-
: blocked
|
|
246
|
-
? 'blocked_or_rejected'
|
|
247
|
-
: 'healthy';
|
|
168
|
+
: blocked
|
|
169
|
+
? 'blocked_or_rejected'
|
|
170
|
+
: 'healthy';
|
|
248
171
|
return {
|
|
249
172
|
stale: false,
|
|
250
173
|
exhausted,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":";;;AAea,QAAA,yCAAyC,GACpD,obAAob,CAAC;AAE1a,QAAA,0DAA0D,GACrE,sjBAAsjB,CAAC;AAE5iB,QAAA,6CAA6C,GAAG,GAAG,CAAC;AACpD,QAAA,iDAAiD,GAAG,GAAG,CAAC;AACxD,QAAA,sDAAsD,GAAG,IAAI,CAAC;AAC9D,QAAA,yCAAyC,GAAG,GAAG,CAAC;AAChD,QAAA,yCAAyC,GAAG,IAAI,CAAC;AACjD,QAAA,iDAAiD,GAAG,IAAI,CAAC;AACzD,QAAA,iDAAiD,GAAG,IAAI,CAAC;AA+BtE,MAAa,8BAA8B;IACzC,YACmB,yBAGhB,EACgB,kBAGhB,EACgB,qBAMhB,EACgB,uBAAgD,EAChD,yBAGhB;QAnBgB,8BAAyB,GAAzB,yBAAyB,CAGzC;QACgB,uBAAkB,GAAlB,kBAAkB,CAGlC;QACgB,0BAAqB,GAArB,qBAAqB,CAMrC;QACgB,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,8BAAyB,GAAzB,yBAAyB,CAGzC;QAGH,QAAG,GAAG,KAAK,EACT,KAAmC,EACK,EAAE;YAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,CAAC;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CACxD,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CACxD,CAAC;YAEF,MAAM,WAAW,GAAsD;gBACrE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO;aACvB,CAAC;YACF,MAAM,6BAA6B,GAAa,EAAE,CAAC;YACnD,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,MAAM,qBAAqB,GAAa,EAAE,CAAC;YAC3C,MAAM,qBAAqB,GAAa,EAAE,CAAC;YAC3C,MAAM,uCAAuC,GAAa,EAAE,CAAC;YAE7D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,IAAI,OAAO,CAAC,mCAAmC,EAAE,CAAC;wBAChD,OAAO,CAAC,GAAG,CACT,uCAAuC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,+EAA+E,CACrK,CAAC;wBACF,uCAAuC,CAAC,IAAI,CAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAC1B,CAAC;wBACF,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC9C,SAAS;oBACX,CAAC;oBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACpD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAC3B,SAAS;oBACX,CAAC;oBACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC;oBAChD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CACnC,QAAQ,EACR,eAAe,EACf,OAAO,CACR,CAAC;oBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAE3C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAClB,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;wBACvB,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBACD,IACE,CAAC,IAAI,CAAC,uBAAuB,CAC3B,OAAO,CAAC,KAAK,EACb,SAAS,EACT,eAAe,CAChB,EACD,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,sCAAsC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,oEAAoE,CACpI,CAAC;wBACF,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;wBACtD,SAAS;oBACX,CAAC;oBAED,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;4BACnB,OAAO,CAAC,GAAG,CACT,sDAAsD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,MAAM,2BAA2B,CACzJ,CAAC;4BACF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;4BAC7B,SAAS;wBACX,CAAC;wBACD,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;4BAC5B,eAAe,EAAE,eAAe;4BAChC,GAAG,EAAE,OAAO,CAAC,GAAG;yBACjB,CAAC,CAAC;wBACH,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;wBAClE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;wBACnD,OAAO,CAAC,GAAG,CACT,oDAAoD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,MAAM,YAAY,KAAK,CAAC,OAAO,EAAE,CACvJ,CAAC;wBACF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC1C,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,uCAAuC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,MAAM,YAAY,KAAK,CAAC,OAAO,EAAE,CAC1I,CAAC;wBACF,WAAW,CAAC,QAAQ,CAAC,GAAG;4BACtB,eAAe,EAAE,eAAe;4BAChC,GAAG,EAAE,OAAO,CAAC,GAAG;yBACjB,CAAC;wBACF,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC9D,SAAS;oBACX,CAAC;oBAED,IACE,eAAe,GAAG,KAAK,CAAC,eAAe;wBACvC,KAAK,CAAC,kBAAkB,EACxB,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,2DAA2D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,qBAAqB,KAAK,CAAC,kBAAkB,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAChL,CAAC;wBACF,SAAS;oBACX,CAAC;oBAED,MAAM,KAAK,GAAG,OAAO;wBACnB,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI;4BAC5B,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;4BACzC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;wBAC3B,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;4BACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;wBACpE,CAAC;wBACD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBACnB,OAAO,CAAC,GAAG,CACT,+CAA+C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,2BAA2B,CACzH,CAAC;wBACF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChC,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;oBACpE,CAAC;oBACD,OAAO,CAAC,GAAG,CACT,2CAA2C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAC5F,CAAC;oBACF,IAAI,OAAO,EAAE,CAAC;wBACZ,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,CAAC;oBACD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CACX,+CAA+C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KACtE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CACT,sDAAsD,QAAQ,CAAC,MAAM,YAAY,KAAK,CAAC,OAAO,aAAa,6BAA6B,CAAC,MAAM,WAAW,kBAAkB,CAAC,MAAM,mBAAmB,cAAc,CAAC,MAAM,eAAe,qBAAqB,CAAC,MAAM,cAAc,qBAAqB,CAAC,MAAM,gCAAgC,uCAAuC,CAAC,MAAM,EAAE,CACjY,CAAC;YAEF,OAAO;gBACL,6BAA6B;gBAC7B,kBAAkB;gBAClB,cAAc;gBACd,qBAAqB;gBACrB,qBAAqB;gBACrB,uCAAuC;gBACvC,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;aAChC,CAAC;QACJ,CAAC,CAAC;QAEM,kBAAa,GAAG,CAAC,OAA8B,EAAW,EAAE,CAClE,OAAO,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QAErD,2BAAsB,GAAG,KAAK,EACpC,OAA8B,EAC9B,qBAA+B,EAChB,EAAE;YACjB,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3E,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEM,iBAAY,GAAG,KAAK,EAC1B,OAA8B,EAC9B,KAAmC,EACpB,EAAE;YACjB,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CACT,mEAAmE,OAAO,CAAC,GAAG,yCAAyC,CACxH,CAAC;oBACF,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,KAAK,gBAAgB;gBAC/B,CAAC,CAAC,KAAK,CAAC,qBAAqB;gBAC7B,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;YAClC,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEM,cAAS,GAAG,KAAK,EACvB,OAA8B,EAC9B,KAAwC,EACzB,EAAE;YACjB,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACpC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzD,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACpE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CACX,qDAAqD,OAAO,CAAC,WAAW,KACtE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC;QAEM,gBAAW,GAAG,CAAC,OAA8B,EAAU,EAAE,CAC/D,OAAO,CAAC,IAAI,KAAK,cAAc;YAC7B,CAAC,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE;YACtB,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAE5C,gBAAW,GAAG,CAAC,OAA8B,EAAU,EAAE,CAC/D,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;QAEtC,4BAAuB,GAAG,CAChC,YAAoB,EACpB,SAAmC,EACnC,eAAuB,EACd,EAAE;YACX,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,QAAQ,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBACvE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACzC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEM,qBAAgB,GAAG,CACzB,QAAgC,EAChC,eAAuB,EACvB,OAAgB,EACC,EAAE;YACnB,MAAM,GAAG,GAAG,eAAe,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CACjC,QAAQ,CAAC,mBAAmB,EAC5B,QAAQ,CAAC,aAAa,EACtB,eAAe,CAChB,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CACjC,QAAQ,CAAC,mBAAmB,EAC5B,QAAQ,CAAC,aAAa,EACtB,eAAe,CAChB,CAAC;YACF,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO;gBAChB,QAAQ,CAAC,QAAQ;gBACjB,QAAQ,CAAC,iBAAiB,GAAG,eAAe,CAAC;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CACtC,QAAQ,CAAC,iBAAiB,EAC1B,eAAe,CAChB,CAAC;YAEF,IAAI,GAAG,GAAG,8DAAsD,EAAE,CAAC;gBACjE,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,YAAY;oBACpB,YAAY;oBACZ,YAAY;oBACZ,OAAO;oBACP,YAAY;iBACb,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GACjB,YAAY,GAAG,yDAAiD;gBAChE,YAAY,GAAG,yDAAiD;gBAChE,OAAO;gBACP,YAAY,CAAC;YACf,IACE,GAAG,GAAG,yDAAiD;gBACvD,CAAC,aAAa,EACd,CAAC;gBACD,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,eAAe;oBACvB,YAAY;oBACZ,YAAY;oBACZ,OAAO;oBACP,YAAY;iBACb,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GACb,YAAY,GAAG,iDAAyC;gBACxD,CAAC,OAAO,IAAI,YAAY,GAAG,iDAAyC,CAAC;gBACrE,OAAO;gBACP,YAAY,CAAC;YACf,MAAM,MAAM,GAAG,YAAY;gBACzB,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,YAAY,GAAG,iDAAyC;oBACxD,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,OAAO,IAAI,YAAY,GAAG,iDAAyC;wBACnE,CAAC,CAAC,gCAAgC;wBAClC,CAAC,CAAC,OAAO;4BACP,CAAC,CAAC,qBAAqB;4BACvB,CAAC,CAAC,SAAS,CAAC;YACpB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,YAAY;gBACZ,OAAO;gBACP,YAAY;aACb,CAAC;QACJ,CAAC,CAAC;QAEM,cAAS,GAAG,CAClB,WAAmB,EACnB,UAAkB,EAClB,eAAuB,EACf,EAAE;YACV,IAAI,UAAU,GAAG,CAAC,IAAI,eAAe,GAAG,UAAU,EAAE,CAAC;gBACnD,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC,CAAC;QAEM,YAAO,GAAG,CAAC,KAAa,EAAU,EAAE;YAC1C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEM,mBAAc,GAAG,CACvB,iBAA0C,EAC1C,eAAuB,EACd,EAAE;YACX,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACpB,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC3D,SAAS;gBACX,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;IA3XC,CAAC;CA4XL;AAlZD,wEAkZC"}
|
|
1
|
+
{"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveSessionOauthTokenSelectHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yEAAyE,CAAC;AAC3H,OAAO,
|
|
1
|
+
{"version":3,"file":"LiveSessionOauthTokenSelectHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yEAAyE,CAAC;AAC3H,OAAO,EACL,KAAK,sCAAsC,EAE3C,kCAAkC,EACnC,MAAM,6DAA6D,CAAC;AAarE,MAAM,MAAM,uCAAuC,GAAG;IACpD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,sCAAsC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,qBAAa,kCAAkC;IAE3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBADrB,OAAO,GAAE,kCAA6E,EACtF,qBAAqB,GAAE,2BAAmE;IAG7G,MAAM,GACJ,OAAO,uCAAuC,KAC7C,wCAAwC,CAwEzC;IAEF,OAAO,CAAC,iBAAiB,CAqCvB;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenExhaustionHandover.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/tokenExhaustionHandover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenExhaustionHandover.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/tokenExhaustionHandover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAYpG,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,6BAA6B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,6BAA6B,KACpC,OAAO,CAAC,IAAI,CAuCd,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ClaudeLiveSession } from './adapter-interfaces/ClaudeLiveSessionRepository';
|
|
2
2
|
import { type OauthTokenCandidate, OauthTokenSelectUseCase } from './OauthTokenSelectUseCase';
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const SEVEN_DAY_SHARE_CONSUMED_PER_FULLY_SPENT_FIVE_HOUR_WINDOW = 0.14;
|
|
4
4
|
export type LiveSessionOauthTokenSelectionSettings = {
|
|
5
5
|
maxConcurrentSessionCount: number;
|
|
6
6
|
fullSpeedFiveHourFreeRatio: number;
|
|
@@ -11,11 +11,14 @@ export type LiveSessionOauthTokenSelectionSettings = {
|
|
|
11
11
|
export declare const DEFAULT_LIVE_SESSION_OAUTH_TOKEN_SELECTION_SETTINGS: LiveSessionOauthTokenSelectionSettings;
|
|
12
12
|
export declare const fiveHourSustainableSessionCountOf: (fiveHourFreeRatio: number, hoursUntilFiveHourReset: number, settings: LiveSessionOauthTokenSelectionSettings) => number;
|
|
13
13
|
export declare const liveSessionConcurrentLimitOf: (fiveHourFreeRatio: number, selectionWeight: number, settings: LiveSessionOauthTokenSelectionSettings, sevenDayUrgencyBoost?: number) => number;
|
|
14
|
+
export declare const sevenDayShareDrainableBeforeSpendDeadlineOf: (sevenDayEndEpoch: number, nowEpochSeconds: number, settings: LiveSessionOauthTokenSelectionSettings) => number;
|
|
15
|
+
export declare const sevenDayBudgetUndrainableBeforeSpendDeadlineOf: (sevenDayFreeRatio: number, sevenDayEndEpoch: number, nowEpochSeconds: number, settings: LiveSessionOauthTokenSelectionSettings) => boolean;
|
|
14
16
|
export type LiveSessionOauthTokenCandidateMetrics = {
|
|
15
17
|
name: string;
|
|
16
18
|
fiveHourFreeRatio: number;
|
|
17
19
|
sevenDayFreeRatio: number;
|
|
18
20
|
sevenDayEndEpoch: number;
|
|
21
|
+
sevenDayBudgetUndrainableBeforeSpendDeadline: boolean;
|
|
19
22
|
liveSessionCount: number;
|
|
20
23
|
concurrentSessionLimit: number;
|
|
21
24
|
hasConcurrencyHeadroom: boolean;
|
|
@@ -23,6 +26,7 @@ export type LiveSessionOauthTokenCandidateMetrics = {
|
|
|
23
26
|
exclusionReason: string | null;
|
|
24
27
|
selectionWeight: number;
|
|
25
28
|
};
|
|
29
|
+
export declare const liveSessionOauthTokenCandidateMetricsInSelectionOrder: (metrics: LiveSessionOauthTokenCandidateMetrics[]) => LiveSessionOauthTokenCandidateMetrics[];
|
|
26
30
|
export type LiveSessionOauthTokenSelectResult = {
|
|
27
31
|
selected: OauthTokenCandidate | null;
|
|
28
32
|
metrics: LiveSessionOauthTokenCandidateMetrics[];
|
|
@@ -31,8 +35,6 @@ export declare class LiveSessionOauthTokenSelectUseCase {
|
|
|
31
35
|
private readonly rateLimitSelectUseCase;
|
|
32
36
|
constructor(rateLimitSelectUseCase?: OauthTokenSelectUseCase);
|
|
33
37
|
run: (candidates: OauthTokenCandidate[], liveSessions: ClaudeLiveSession[], nowEpochSeconds: number, settings: LiveSessionOauthTokenSelectionSettings) => LiveSessionOauthTokenSelectResult;
|
|
34
|
-
private liveSessionExclusionReason;
|
|
35
|
-
private preferred;
|
|
36
38
|
private liveSessionCountByToken;
|
|
37
39
|
}
|
|
38
40
|
//# sourceMappingURL=LiveSessionOauthTokenSelectUseCase.d.ts.map
|
|
@@ -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,
|
|
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,EAMxB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,yDAAyD,OAAO,CAAC;AAQ9E,MAAM,MAAM,sCAAsC,GAAG;IACnD,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mCAAmC,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,mDAAmD,EAAE,sCAO/D,CAAC;AAKJ,eAAO,MAAM,iCAAiC,GAC5C,mBAAmB,MAAM,EACzB,yBAAyB,MAAM,EAC/B,UAAU,sCAAsC,KAC/C,MAYF,CAAC;AAgBF,eAAO,MAAM,4BAA4B,GACvC,mBAAmB,MAAM,EACzB,iBAAiB,MAAM,EACvB,UAAU,sCAAsC,EAChD,6BAAwB,KACvB,MAoBF,CAAC;AAEF,eAAO,MAAM,2CAA2C,GACtD,kBAAkB,MAAM,EACxB,iBAAiB,MAAM,EACvB,UAAU,sCAAsC,KAC/C,MAgBF,CAAC;AAEF,eAAO,MAAM,8CAA8C,GACzD,mBAAmB,MAAM,EACzB,kBAAkB,MAAM,EACxB,iBAAiB,MAAM,EACvB,UAAU,sCAAsC,KAC/C,OAMA,CAAC;AAEJ,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,4CAA4C,EAAE,OAAO,CAAC;IACtD,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,eAAO,MAAM,qDAAqD,GAChE,SAAS,qCAAqC,EAAE,KAC/C,qCAAqC,EAepC,CAAC;AAEL,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,CAmHlC;IAEF,OAAO,CAAC,uBAAuB,CAe7B;CACH"}
|
|
@@ -4,25 +4,16 @@ import { IssueCheckpointRepository } from './adapter-interfaces/IssueCheckpointR
|
|
|
4
4
|
import { ProcessSignalRepository } from './adapter-interfaces/ProcessSignalRepository';
|
|
5
5
|
import { TmuxSessionRepository } from './adapter-interfaces/TmuxSessionRepository';
|
|
6
6
|
import { TokenRateLimitSnapshotRepository } from './adapter-interfaces/TokenRateLimitSnapshotRepository';
|
|
7
|
-
export declare const DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE = "TOKEN NEAR EXHAUSTION. Within 2 minutes, write a CHECKPOINT to your assigned task issue: the in-flight subagents and what each is doing, their durable refs (branch and pull request URLs), the working directory and branch, the single concrete next action to resume, and the reason (token near exhaustion). Do this WITHOUT waiting for long-running or CI-watching subagents. Then self-kill your own tmux session with `tmux kill-session`.";
|
|
8
|
-
export declare const DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE_BARE_NAME_LEADER = "TOKEN NEAR EXHAUSTION. You are a resident leader with no assigned task issue. Within 2 minutes, write a CHECKPOINT for every in-flight subagent (what each is doing and its durable refs = branch and pull request URLs, plus the single concrete next action to resume and the working directory and branch) into the GitHub issue that each subagent is working on, WITHOUT waiting for long-running or CI-watching subagents. Then stop and stay idle; do NOT self-kill. This session will be terminated and relaunched on a token that still has quota so its work is preserved.";
|
|
9
|
-
export declare const DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS = 180;
|
|
10
7
|
export declare const TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS = 900;
|
|
11
8
|
export declare const TOKEN_EXHAUSTION_SNAPSHOT_HARD_STALE_THRESHOLD_SECONDS = 3600;
|
|
12
|
-
export declare const TOKEN_EXHAUSTION_FIVE_HOUR_FREE_THRESHOLD = 0.1;
|
|
13
|
-
export declare const TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD = 0.05;
|
|
14
9
|
export declare const TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = 0.25;
|
|
15
10
|
export declare const TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = 0.15;
|
|
16
11
|
export type TokenExhaustionHandoverInput = {
|
|
17
12
|
enabled: boolean;
|
|
18
|
-
issueUrlLeaderMessage: string;
|
|
19
|
-
bareNameLeaderMessage: string;
|
|
20
|
-
gracePeriodSeconds: number;
|
|
21
13
|
state: TokenExhaustionHandoverState;
|
|
22
14
|
now: Date;
|
|
23
15
|
};
|
|
24
16
|
export type TokenExhaustionHandoverResult = {
|
|
25
|
-
newlyHandoverSentSessionNames: string[];
|
|
26
17
|
killedSessionNames: string[];
|
|
27
18
|
terminatedPids: number[];
|
|
28
19
|
relaunchedLeaderNames: string[];
|
|
@@ -40,7 +31,6 @@ export declare class TokenExhaustionHandoverUseCase {
|
|
|
40
31
|
run: (input: TokenExhaustionHandoverInput) => Promise<TokenExhaustionHandoverResult>;
|
|
41
32
|
private needsRelaunch;
|
|
42
33
|
private relaunchBareNameLeader;
|
|
43
|
-
private sendHandover;
|
|
44
34
|
private forceKill;
|
|
45
35
|
private stateKeyFor;
|
|
46
36
|
private displayName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenExhaustionHandoverUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAE7B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAGL,gCAAgC,EACjC,MAAM,uDAAuD,CAAC;AAE/D,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"TokenExhaustionHandoverUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAE7B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAGL,gCAAgC,EACjC,MAAM,uDAAuD,CAAC;AAE/D,eAAO,MAAM,iDAAiD,MAAM,CAAC;AACrE,eAAO,MAAM,sDAAsD,OAAO,CAAC;AAC3E,eAAO,MAAM,iDAAiD,OAAO,CAAC;AACtE,eAAO,MAAM,iDAAiD,OAAO,CAAC;AAYtE,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,4BAA4B,CAAC;IACpC,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,uCAAuC,EAAE,MAAM,EAAE,CAAC;IAClD,KAAK,EAAE,4BAA4B,CAAC;CACrC,CAAC;AAEF,qBAAa,8BAA8B;IAEvC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAI1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAInC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAOtC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;gBAhBzB,yBAAyB,EAAE,IAAI,CAC9C,+BAA+B,EAC/B,sBAAsB,CACvB,EACgB,kBAAkB,EAAE,IAAI,CACvC,gCAAgC,EAChC,eAAe,CAChB,EACgB,qBAAqB,EAAE,IAAI,CAC1C,qBAAqB,EACnB,UAAU,GACV,aAAa,GACb,sBAAsB,GACtB,6BAA6B,CAChC,EACgB,uBAAuB,EAAE,uBAAuB,EAChD,yBAAyB,EAAE,IAAI,CAC9C,yBAAyB,EACzB,gBAAgB,CACjB;IAGH,GAAG,GACD,OAAO,4BAA4B,KAClC,OAAO,CAAC,6BAA6B,CAAC,CAsGvC;IAEF,OAAO,CAAC,aAAa,CACwC;IAE7D,OAAO,CAAC,sBAAsB,CAS5B;IAEF,OAAO,CAAC,SAAS,CAqBf;IAEF,OAAO,CAAC,WAAW,CAGiC;IAEpD,OAAO,CAAC,WAAW,CAC2B;IAE9C,OAAO,CAAC,uBAAuB,CAe7B;IAEF,OAAO,CAAC,gBAAgB,CAuEtB;IAEF,OAAO,CAAC,SAAS,CASf;IAEF,OAAO,CAAC,OAAO,CAQb;IAEF,OAAO,CAAC,cAAc,CAcpB;CACH"}
|