github-issue-tower-defence-management 1.139.1 → 1.140.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +6 -0
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +43 -2
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js +31 -0
  6. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js.map +1 -0
  7. package/bin/adapter/repositories/FileHandoverStateRepository.js +99 -0
  8. package/bin/adapter/repositories/FileHandoverStateRepository.js.map +1 -0
  9. package/bin/adapter/repositories/NodeProcessSignalRepository.js +44 -0
  10. package/bin/adapter/repositories/NodeProcessSignalRepository.js.map +1 -0
  11. package/bin/adapter/repositories/NodeTmuxSessionRepository.js +67 -1
  12. package/bin/adapter/repositories/NodeTmuxSessionRepository.js.map +1 -1
  13. package/bin/adapter/repositories/ProcClaudeHandoverSessionRepository.js +206 -0
  14. package/bin/adapter/repositories/ProcClaudeHandoverSessionRepository.js.map +1 -0
  15. package/bin/adapter/repositories/RateLimitSnapshotRepository.js +44 -0
  16. package/bin/adapter/repositories/RateLimitSnapshotRepository.js.map +1 -0
  17. package/bin/domain/entities/ClaudeHandoverSession.js +3 -0
  18. package/bin/domain/entities/ClaudeHandoverSession.js.map +1 -0
  19. package/bin/domain/entities/TokenExhaustionHandoverState.js +3 -0
  20. package/bin/domain/entities/TokenExhaustionHandoverState.js.map +1 -0
  21. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js +255 -0
  22. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js.map +1 -0
  23. package/bin/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.js +3 -0
  24. package/bin/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.js.map +1 -0
  25. package/bin/domain/usecases/adapter-interfaces/ProcessSignalRepository.js +3 -0
  26. package/bin/domain/usecases/adapter-interfaces/ProcessSignalRepository.js.map +1 -0
  27. package/bin/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.js +3 -0
  28. package/bin/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.js.map +1 -0
  29. package/bin/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.js +3 -0
  30. package/bin/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.js.map +1 -0
  31. package/package.json +1 -1
  32. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +32 -0
  33. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +79 -0
  34. package/src/adapter/repositories/FileHandoverStateRepository.test.ts +114 -0
  35. package/src/adapter/repositories/FileHandoverStateRepository.ts +76 -0
  36. package/src/adapter/repositories/NodeProcessSignalRepository.test.ts +82 -0
  37. package/src/adapter/repositories/NodeProcessSignalRepository.ts +47 -0
  38. package/src/adapter/repositories/NodeTmuxSessionRepository.test.ts +132 -0
  39. package/src/adapter/repositories/NodeTmuxSessionRepository.ts +100 -0
  40. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.test.ts +194 -0
  41. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts +208 -0
  42. package/src/adapter/repositories/RateLimitSnapshotRepository.ts +50 -0
  43. package/src/domain/entities/ClaudeHandoverSession.ts +11 -0
  44. package/src/domain/entities/TokenExhaustionHandoverState.ts +8 -0
  45. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +696 -0
  46. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +413 -0
  47. package/src/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.ts +5 -0
  48. package/src/domain/usecases/adapter-interfaces/ProcessSignalRepository.ts +5 -0
  49. package/src/domain/usecases/adapter-interfaces/TmuxSessionRepository.ts +2 -0
  50. package/src/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.ts +6 -0
  51. package/src/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.ts +22 -0
  52. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +2 -0
  53. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  54. package/types/adapter/entry-points/handlers/tokenExhaustionHandover.d.ts +14 -0
  55. package/types/adapter/entry-points/handlers/tokenExhaustionHandover.d.ts.map +1 -0
  56. package/types/adapter/repositories/FileHandoverStateRepository.d.ts +11 -0
  57. package/types/adapter/repositories/FileHandoverStateRepository.d.ts.map +1 -0
  58. package/types/adapter/repositories/NodeProcessSignalRepository.d.ts +8 -0
  59. package/types/adapter/repositories/NodeProcessSignalRepository.d.ts.map +1 -0
  60. package/types/adapter/repositories/NodeTmuxSessionRepository.d.ts +7 -1
  61. package/types/adapter/repositories/NodeTmuxSessionRepository.d.ts.map +1 -1
  62. package/types/adapter/repositories/ProcClaudeHandoverSessionRepository.d.ts +13 -0
  63. package/types/adapter/repositories/ProcClaudeHandoverSessionRepository.d.ts.map +1 -0
  64. package/types/adapter/repositories/RateLimitSnapshotRepository.d.ts +9 -0
  65. package/types/adapter/repositories/RateLimitSnapshotRepository.d.ts.map +1 -0
  66. package/types/domain/entities/ClaudeHandoverSession.d.ts +10 -0
  67. package/types/domain/entities/ClaudeHandoverSession.d.ts.map +1 -0
  68. package/types/domain/entities/TokenExhaustionHandoverState.d.ts +8 -0
  69. package/types/domain/entities/TokenExhaustionHandoverState.d.ts.map +1 -0
  70. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts +50 -0
  71. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts.map +1 -0
  72. package/types/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.d.ts +5 -0
  73. package/types/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.d.ts.map +1 -0
  74. package/types/domain/usecases/adapter-interfaces/ProcessSignalRepository.d.ts +6 -0
  75. package/types/domain/usecases/adapter-interfaces/ProcessSignalRepository.d.ts.map +1 -0
  76. package/types/domain/usecases/adapter-interfaces/TmuxSessionRepository.d.ts +2 -0
  77. package/types/domain/usecases/adapter-interfaces/TmuxSessionRepository.d.ts.map +1 -1
  78. package/types/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.d.ts +6 -0
  79. package/types/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.d.ts.map +1 -0
  80. package/types/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.d.ts +21 -0
  81. package/types/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.d.ts.map +1 -0
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ProcClaudeHandoverSessionRepository = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const DEFAULT_PROC_DIRECTORY = '/proc';
40
+ const OAUTH_TOKEN_ENVIRON_KEY = 'CLAUDE_CODE_OAUTH_TOKEN';
41
+ const NAME_ARGUMENT = '--name';
42
+ const NAME_ARGUMENT_PREFIX = '--name=';
43
+ const PRINT_ARGUMENTS = ['-p', '--print'];
44
+ const PRINT_ARGUMENT_PREFIXES = ['-p=', '--print='];
45
+ const CLAUDE_COMM_PATTERN = /^claude(-agent)?$/;
46
+ const ISSUE_OR_PR_URL_PATTERN = /https:\/\/github\.com\/[^\s\0]+?\/(?:issues|pull)\/\d+/;
47
+ const normalizeName = (value) => value.replace(/[.:]/g, '_');
48
+ const isIssueUrl = (value) => value.startsWith('http://') || value.startsWith('https://');
49
+ const extractIssueUrlFromText = (text) => {
50
+ const match = text.match(ISSUE_OR_PR_URL_PATTERN);
51
+ return match ? match[0] : null;
52
+ };
53
+ const parseName = (commandArguments) => {
54
+ for (let index = 0; index < commandArguments.length; index += 1) {
55
+ const argument = commandArguments[index];
56
+ if (argument === NAME_ARGUMENT && index + 1 < commandArguments.length) {
57
+ const value = commandArguments[index + 1];
58
+ return value.length > 0 ? value : null;
59
+ }
60
+ if (argument.startsWith(NAME_ARGUMENT_PREFIX)) {
61
+ const value = argument.slice(NAME_ARGUMENT_PREFIX.length);
62
+ return value.length > 0 ? value : null;
63
+ }
64
+ }
65
+ return null;
66
+ };
67
+ const parseIssueUrlFromPrint = (commandArguments) => {
68
+ for (let index = 0; index < commandArguments.length; index += 1) {
69
+ const argument = commandArguments[index];
70
+ if (PRINT_ARGUMENTS.includes(argument) &&
71
+ index + 1 < commandArguments.length) {
72
+ const url = extractIssueUrlFromText(commandArguments[index + 1]);
73
+ if (url !== null) {
74
+ return url;
75
+ }
76
+ }
77
+ for (const prefix of PRINT_ARGUMENT_PREFIXES) {
78
+ if (argument.startsWith(prefix)) {
79
+ const url = extractIssueUrlFromText(argument.slice(prefix.length));
80
+ if (url !== null) {
81
+ return url;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return extractIssueUrlFromText(commandArguments.join(' '));
87
+ };
88
+ const classifySession = (pid, commandArguments, token) => {
89
+ if (token === null || token.length === 0) {
90
+ return null;
91
+ }
92
+ const name = parseName(commandArguments);
93
+ if (name !== null) {
94
+ const sessionName = normalizeName(name);
95
+ if (isIssueUrl(name)) {
96
+ const kind = 'issueUrlLeader';
97
+ return {
98
+ kind,
99
+ pid,
100
+ token,
101
+ sessionName,
102
+ name,
103
+ issueUrl: extractIssueUrlFromText(name),
104
+ };
105
+ }
106
+ const kind = 'bareNameLeader';
107
+ return { kind, pid, token, sessionName, name, issueUrl: null };
108
+ }
109
+ const issueUrl = parseIssueUrlFromPrint(commandArguments);
110
+ if (issueUrl === null) {
111
+ return null;
112
+ }
113
+ return {
114
+ kind: 'implSubagent',
115
+ pid,
116
+ token,
117
+ sessionName: null,
118
+ name: null,
119
+ issueUrl,
120
+ };
121
+ };
122
+ class ProcClaudeHandoverSessionRepository {
123
+ constructor(procDirectory = DEFAULT_PROC_DIRECTORY) {
124
+ this.procDirectory = procDirectory;
125
+ this.listHandoverSessions = () => {
126
+ const sessions = [];
127
+ for (const processIdDirectory of this.listProcessIdDirectories()) {
128
+ const session = this.readHandoverSession(processIdDirectory);
129
+ if (session !== null) {
130
+ sessions.push(session);
131
+ }
132
+ }
133
+ return sessions;
134
+ };
135
+ this.listProcessIdDirectories = () => {
136
+ let entries;
137
+ try {
138
+ entries = fs.readdirSync(this.procDirectory);
139
+ }
140
+ catch {
141
+ return [];
142
+ }
143
+ return entries.filter((entry) => /^\d+$/.test(entry));
144
+ };
145
+ this.readHandoverSession = (processIdDirectory) => {
146
+ const comm = this.readComm(processIdDirectory);
147
+ if (comm === null || !CLAUDE_COMM_PATTERN.test(comm)) {
148
+ return null;
149
+ }
150
+ const commandArguments = this.readCommandArguments(processIdDirectory);
151
+ if (commandArguments === null) {
152
+ return null;
153
+ }
154
+ const environ = this.readEnviron(processIdDirectory);
155
+ if (environ === null) {
156
+ return null;
157
+ }
158
+ const token = environ.get(OAUTH_TOKEN_ENVIRON_KEY) ?? null;
159
+ return classifySession(Number(processIdDirectory), commandArguments, token);
160
+ };
161
+ this.readComm = (processIdDirectory) => {
162
+ const commPath = path.join(this.procDirectory, processIdDirectory, 'comm');
163
+ try {
164
+ return fs.readFileSync(commPath, 'utf8').trim();
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ };
170
+ this.readCommandArguments = (processIdDirectory) => {
171
+ const cmdlinePath = path.join(this.procDirectory, processIdDirectory, 'cmdline');
172
+ let raw;
173
+ try {
174
+ raw = fs.readFileSync(cmdlinePath, 'utf8');
175
+ }
176
+ catch {
177
+ return null;
178
+ }
179
+ return raw.split('\0').filter((argument) => argument.length > 0);
180
+ };
181
+ this.readEnviron = (processIdDirectory) => {
182
+ const environPath = path.join(this.procDirectory, processIdDirectory, 'environ');
183
+ let raw;
184
+ try {
185
+ raw = fs.readFileSync(environPath, 'utf8');
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ const environ = new Map();
191
+ for (const entry of raw.split('\0')) {
192
+ if (entry.length === 0) {
193
+ continue;
194
+ }
195
+ const separatorIndex = entry.indexOf('=');
196
+ if (separatorIndex <= 0) {
197
+ continue;
198
+ }
199
+ environ.set(entry.slice(0, separatorIndex), entry.slice(separatorIndex + 1));
200
+ }
201
+ return environ;
202
+ };
203
+ }
204
+ }
205
+ exports.ProcClaudeHandoverSessionRepository = ProcClaudeHandoverSessionRepository;
206
+ //# sourceMappingURL=ProcClaudeHandoverSessionRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcClaudeHandoverSessionRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateLimitSnapshotRepository = void 0;
4
+ const TokenListLoader_1 = require("../proxy/TokenListLoader");
5
+ const RateLimitCache_1 = require("../proxy/RateLimitCache");
6
+ class RateLimitSnapshotRepository {
7
+ constructor(tokenListJsonPath, baseDir = (0, RateLimitCache_1.cacheDir)()) {
8
+ this.tokenListJsonPath = tokenListJsonPath;
9
+ this.baseDir = baseDir;
10
+ this.listSnapshots = () => {
11
+ const entries = (0, TokenListLoader_1.loadTokenEntries)(this.tokenListJsonPath);
12
+ if (entries === null) {
13
+ return [];
14
+ }
15
+ const snapshots = [];
16
+ for (const { name, token } of entries) {
17
+ const snapshot = (0, RateLimitCache_1.readRateLimit)(token, this.baseDir);
18
+ if (snapshot === null) {
19
+ continue;
20
+ }
21
+ snapshots.push({
22
+ token,
23
+ name,
24
+ fiveHourUtilization: snapshot.fiveHourUtilization,
25
+ fiveHourReset: snapshot.fiveHourReset,
26
+ sevenDayUtilization: snapshot.sevenDayUtilization,
27
+ sevenDayReset: snapshot.sevenDayReset,
28
+ blocked: snapshot.blocked,
29
+ rejected: snapshot.rejected,
30
+ blockedUntilEpoch: snapshot.blockedUntilEpoch,
31
+ modelWeeklyLimits: this.toModelWeeklyLimits(snapshot.modelWeeklyLimits),
32
+ lastUpdatedEpoch: snapshot.lastUpdatedEpoch,
33
+ });
34
+ }
35
+ return snapshots;
36
+ };
37
+ this.toModelWeeklyLimits = (modelWeeklyLimits) => Object.values(modelWeeklyLimits).map((limit) => ({
38
+ rejected: limit.rejected,
39
+ resetsAt: limit.resetsAt,
40
+ }));
41
+ }
42
+ }
43
+ exports.RateLimitSnapshotRepository = RateLimitSnapshotRepository;
44
+ //# sourceMappingURL=RateLimitSnapshotRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimitSnapshotRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/RateLimitSnapshotRepository.ts"],"names":[],"mappings":";;;AAKA,8DAA4D;AAC5D,4DAAkE;AAElE,MAAa,2BAA2B;IACtC,YACmB,iBAAyB,EACzB,UAAkB,IAAA,yBAAQ,GAAE;QAD5B,sBAAiB,GAAjB,iBAAiB,CAAQ;QACzB,YAAO,GAAP,OAAO,CAAqB;QAG/C,kBAAa,GAAG,GAA6B,EAAE;YAC7C,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,SAAS,GAA6B,EAAE,CAAC;YAC/C,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAA,8BAAa,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC;oBACb,KAAK;oBACL,IAAI;oBACJ,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;oBACjD,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;oBACjD,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;oBAC7C,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBACvE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;iBAC5C,CAAC,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEM,wBAAmB,GAAG,CAC5B,iBAA0E,EACjD,EAAE,CAC3B,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC,CAAC;IApCH,CAAC;CAqCL;AAzCD,kEAyCC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ClaudeHandoverSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeHandoverSession.js","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeHandoverSession.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=TokenExhaustionHandoverState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenExhaustionHandoverState.js","sourceRoot":"","sources":["../../../src/domain/entities/TokenExhaustionHandoverState.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ "use strict";
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.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD = exports.TOKEN_EXHAUSTION_FIVE_HOUR_FREE_THRESHOLD = exports.TOKEN_EXHAUSTION_SNAPSHOT_HARD_STALE_THRESHOLD_SECONDS = exports.TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS = exports.DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS = exports.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE_BARE_NAME_LEADER = exports.DEFAULT_TOKEN_EXHAUSTION_HANDOVER_MESSAGE = void 0;
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;
7
+ exports.TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS = 900;
8
+ 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
+ exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD = 0.25;
12
+ exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD = 0.15;
13
+ class TokenExhaustionHandoverUseCase {
14
+ constructor(handoverSessionRepository, snapshotRepository, tmuxSessionRepository, processSignalRepository) {
15
+ this.handoverSessionRepository = handoverSessionRepository;
16
+ this.snapshotRepository = snapshotRepository;
17
+ this.tmuxSessionRepository = tmuxSessionRepository;
18
+ this.processSignalRepository = processSignalRepository;
19
+ this.run = async (input) => {
20
+ const nowEpochSeconds = Math.floor(input.now.getTime() / 1000);
21
+ const sessions = this.handoverSessionRepository.listHandoverSessions();
22
+ const snapshots = this.snapshotRepository.listSnapshots();
23
+ const snapshotByToken = new Map(snapshots.map((snapshot) => [snapshot.token, snapshot]));
24
+ const liveSessionNames = new Set(await this.tmuxSessionRepository.listLiveSessionNames());
25
+ const nextEntries = {
26
+ ...input.state.entries,
27
+ };
28
+ const newlyHandoverSentSessionNames = [];
29
+ const killedSessionNames = [];
30
+ const terminatedPids = [];
31
+ const relaunchedLeaderNames = [];
32
+ const leftAliveSessionNames = [];
33
+ for (const session of sessions) {
34
+ try {
35
+ const snapshot = snapshotByToken.get(session.token);
36
+ if (snapshot === undefined) {
37
+ continue;
38
+ }
39
+ const hasTmux = session.kind !== 'implSubagent';
40
+ const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds, hasTmux);
41
+ const stateKey = this.stateKeyFor(session);
42
+ if (verdict.stale) {
43
+ continue;
44
+ }
45
+ if (!verdict.exhausted) {
46
+ delete nextEntries[stateKey];
47
+ continue;
48
+ }
49
+ if (!this.isFresherTokenAvailable(session.token, snapshots, nowEpochSeconds)) {
50
+ console.log(`Token exhaustion handover: leaving ${this.displayName(session)} alive (token pool globally exhausted, no fresher token available)`);
51
+ leftAliveSessionNames.push(this.displayName(session));
52
+ continue;
53
+ }
54
+ const entry = nextEntries[stateKey];
55
+ if (entry === undefined) {
56
+ if (input.enabled) {
57
+ await this.sendHandover(session, input);
58
+ }
59
+ console.log(`Token exhaustion handover: signaled ${this.displayName(session)} kind=${session.kind} reason=${verdict.reason} enabled=${input.enabled}`);
60
+ nextEntries[stateKey] = {
61
+ signaledAtEpoch: nowEpochSeconds,
62
+ pid: session.pid,
63
+ };
64
+ newlyHandoverSentSessionNames.push(this.displayName(session));
65
+ continue;
66
+ }
67
+ if (nowEpochSeconds - entry.signaledAtEpoch <
68
+ input.gracePeriodSeconds) {
69
+ console.log(`Token exhaustion handover: waiting for grace period for ${this.displayName(session)} remainingSeconds=${input.gracePeriodSeconds - (nowEpochSeconds - entry.signaledAtEpoch)}`);
70
+ continue;
71
+ }
72
+ const alive = hasTmux
73
+ ? session.sessionName !== null &&
74
+ liveSessionNames.has(session.sessionName)
75
+ : this.processSignalRepository.isProcessAlive(entry.pid);
76
+ if (!alive) {
77
+ if (input.enabled && this.needsRelaunch(session)) {
78
+ await this.relaunchBareNameLeader(session, relaunchedLeaderNames);
79
+ }
80
+ delete nextEntries[stateKey];
81
+ continue;
82
+ }
83
+ if (!input.enabled) {
84
+ console.log(`Token exhaustion handover: would force-kill ${this.displayName(session)} kind=${session.kind} (dry-run, enabled=false)`);
85
+ delete nextEntries[stateKey];
86
+ continue;
87
+ }
88
+ await this.forceKill(session, entry);
89
+ if (this.needsRelaunch(session)) {
90
+ await this.relaunchBareNameLeader(session, relaunchedLeaderNames);
91
+ }
92
+ console.log(`Token exhaustion handover: force-killed ${this.displayName(session)} kind=${session.kind}`);
93
+ if (hasTmux) {
94
+ killedSessionNames.push(this.displayName(session));
95
+ }
96
+ else {
97
+ terminatedPids.push(entry.pid);
98
+ }
99
+ delete nextEntries[stateKey];
100
+ }
101
+ catch (error) {
102
+ console.error(`Token exhaustion handover: error processing ${this.displayName(session)}: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ }
105
+ console.log(`Token exhaustion handover: cycle summary evaluated=${sessions.length} enabled=${input.enabled} signaled=${newlyHandoverSentSessionNames.length} killed=${killedSessionNames.length} terminatedPids=${terminatedPids.length} relaunched=${relaunchedLeaderNames.length} leftAlive=${leftAliveSessionNames.length}`);
106
+ return {
107
+ newlyHandoverSentSessionNames,
108
+ killedSessionNames,
109
+ terminatedPids,
110
+ relaunchedLeaderNames,
111
+ leftAliveSessionNames,
112
+ state: { entries: nextEntries },
113
+ };
114
+ };
115
+ this.needsRelaunch = (session) => session.kind === 'bareNameLeader' && session.name !== null;
116
+ this.relaunchBareNameLeader = async (session, relaunchedLeaderNames) => {
117
+ if (session.name === null) {
118
+ return;
119
+ }
120
+ await this.tmuxSessionRepository.launchBareNameLeaderSession(session.name);
121
+ relaunchedLeaderNames.push(session.name);
122
+ };
123
+ this.sendHandover = async (session, input) => {
124
+ if (session.kind === 'implSubagent') {
125
+ this.processSignalRepository.terminateProcess(session.pid);
126
+ return;
127
+ }
128
+ if (session.sessionName === null) {
129
+ return;
130
+ }
131
+ const message = session.kind === 'issueUrlLeader'
132
+ ? input.issueUrlLeaderMessage
133
+ : input.bareNameLeaderMessage;
134
+ await this.tmuxSessionRepository.sendKeys(session.sessionName, message);
135
+ };
136
+ this.forceKill = async (session, entry) => {
137
+ if (session.kind === 'implSubagent') {
138
+ this.processSignalRepository.killProcess(entry.pid);
139
+ return;
140
+ }
141
+ if (session.sessionName !== null) {
142
+ try {
143
+ await this.tmuxSessionRepository.killSession(session.sessionName);
144
+ }
145
+ catch (error) {
146
+ console.error(`Token exhaustion handover: killSession failed for ${session.sessionName}: ${error instanceof Error ? error.message : String(error)}`);
147
+ }
148
+ }
149
+ this.processSignalRepository.killProcess(entry.pid);
150
+ };
151
+ this.stateKeyFor = (session) => session.kind === 'implSubagent'
152
+ ? `pid:${session.pid}`
153
+ : (session.sessionName ?? `pid:${session.pid}`);
154
+ this.displayName = (session) => session.sessionName ?? `pid:${session.pid}`;
155
+ this.isFresherTokenAvailable = (currentToken, snapshots, nowEpochSeconds) => {
156
+ for (const snapshot of snapshots) {
157
+ if (snapshot.token === currentToken) {
158
+ continue;
159
+ }
160
+ const verdict = this.evaluateSnapshot(snapshot, nowEpochSeconds, true);
161
+ if (!verdict.stale && !verdict.exhausted) {
162
+ return true;
163
+ }
164
+ }
165
+ return false;
166
+ };
167
+ this.evaluateSnapshot = (snapshot, nowEpochSeconds, hasTmux) => {
168
+ const age = nowEpochSeconds - snapshot.lastUpdatedEpoch;
169
+ const fiveHourFree = this.freeRatio(snapshot.fiveHourUtilization, snapshot.fiveHourReset, nowEpochSeconds);
170
+ const sevenDayFree = this.freeRatio(snapshot.sevenDayUtilization, snapshot.sevenDayReset, nowEpochSeconds);
171
+ const blocked = snapshot.blocked ||
172
+ snapshot.rejected ||
173
+ snapshot.blockedUntilEpoch > nowEpochSeconds;
174
+ const weeklyCapped = this.isWeeklyCapped(snapshot.modelWeeklyLimits, nowEpochSeconds);
175
+ if (age > exports.TOKEN_EXHAUSTION_SNAPSHOT_HARD_STALE_THRESHOLD_SECONDS) {
176
+ return {
177
+ stale: true,
178
+ exhausted: false,
179
+ reason: 'hard_stale',
180
+ fiveHourFree,
181
+ sevenDayFree,
182
+ blocked,
183
+ weeklyCapped,
184
+ };
185
+ }
186
+ const inWarningBand = fiveHourFree < exports.TOKEN_EXHAUSTION_FIVE_HOUR_WARNING_FREE_THRESHOLD ||
187
+ sevenDayFree < exports.TOKEN_EXHAUSTION_SEVEN_DAY_WARNING_FREE_THRESHOLD ||
188
+ blocked ||
189
+ weeklyCapped;
190
+ if (age > exports.TOKEN_EXHAUSTION_SNAPSHOT_STALE_THRESHOLD_SECONDS &&
191
+ !inWarningBand) {
192
+ return {
193
+ stale: true,
194
+ exhausted: false,
195
+ reason: 'stale_healthy',
196
+ fiveHourFree,
197
+ sevenDayFree,
198
+ blocked,
199
+ weeklyCapped,
200
+ };
201
+ }
202
+ const exhausted = fiveHourFree < exports.TOKEN_EXHAUSTION_FIVE_HOUR_FREE_THRESHOLD ||
203
+ (hasTmux && sevenDayFree < exports.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD) ||
204
+ blocked ||
205
+ weeklyCapped;
206
+ const reason = weeklyCapped
207
+ ? 'weekly_hard_cap_rejected'
208
+ : fiveHourFree < exports.TOKEN_EXHAUSTION_FIVE_HOUR_FREE_THRESHOLD
209
+ ? 'five_hour_free_below_threshold'
210
+ : hasTmux && sevenDayFree < exports.TOKEN_EXHAUSTION_SEVEN_DAY_FREE_THRESHOLD
211
+ ? 'seven_day_free_below_threshold'
212
+ : blocked
213
+ ? 'blocked_or_rejected'
214
+ : 'healthy';
215
+ return {
216
+ stale: false,
217
+ exhausted,
218
+ reason,
219
+ fiveHourFree,
220
+ sevenDayFree,
221
+ blocked,
222
+ weeklyCapped,
223
+ };
224
+ };
225
+ this.freeRatio = (utilization, resetEpoch, nowEpochSeconds) => {
226
+ if (resetEpoch > 0 && nowEpochSeconds > resetEpoch) {
227
+ return 1;
228
+ }
229
+ return 1 - this.clamp01(utilization);
230
+ };
231
+ this.clamp01 = (value) => {
232
+ if (value < 0) {
233
+ return 0;
234
+ }
235
+ if (value > 1) {
236
+ return 1;
237
+ }
238
+ return value;
239
+ };
240
+ this.isWeeklyCapped = (modelWeeklyLimits, nowEpochSeconds) => {
241
+ for (const limit of modelWeeklyLimits) {
242
+ if (!limit.rejected) {
243
+ continue;
244
+ }
245
+ if (limit.resetsAt > 0 && nowEpochSeconds > limit.resetsAt) {
246
+ continue;
247
+ }
248
+ return true;
249
+ }
250
+ return false;
251
+ };
252
+ }
253
+ }
254
+ exports.TokenExhaustionHandoverUseCase = TokenExhaustionHandoverUseCase;
255
+ //# sourceMappingURL=TokenExhaustionHandoverUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ClaudeHandoverSessionRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeHandoverSessionRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ProcessSignalRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessSignalRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/ProcessSignalRepository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=TokenExhaustionHandoverStateRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenExhaustionHandoverStateRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=TokenRateLimitSnapshotRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenRateLimitSnapshotRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.139.1",
3
+ "version": "1.140.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {