github-issue-tower-defence-management 1.185.0 → 1.185.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/CHANGELOG.md +7 -0
- package/bin/adapter/repositories/ProcClaudeHandoverSessionRepository.js +40 -3
- package/bin/adapter/repositories/ProcClaudeHandoverSessionRepository.js.map +1 -1
- package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js +9 -1
- package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.test.ts +48 -0
- package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts +55 -2
- package/src/domain/entities/ClaudeHandoverSession.ts +1 -0
- package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +59 -1
- package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +14 -1
- package/types/adapter/repositories/ProcClaudeHandoverSessionRepository.d.ts +1 -0
- package/types/adapter/repositories/ProcClaudeHandoverSessionRepository.d.ts.map +1 -1
- package/types/domain/entities/ClaudeHandoverSession.d.ts +1 -0
- package/types/domain/entities/ClaudeHandoverSession.d.ts.map +1 -1
- package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts +1 -0
- package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.185.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.185.0...v1.185.1) (2026-08-28)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* skip token exhaustion handover for workspace preparation script sessions ([#1806](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1806)) ([b752892](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/b75289212e3382c355b551d54b903ef3e1357710))
|
|
7
|
+
|
|
1
8
|
# [1.185.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.184.1...v1.185.0) (2026-08-27)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -43,6 +43,7 @@ const NAME_ARGUMENT_PREFIX = '--name=';
|
|
|
43
43
|
const PRINT_ARGUMENTS = ['-p', '--print'];
|
|
44
44
|
const PRINT_ARGUMENT_PREFIXES = ['-p=', '--print='];
|
|
45
45
|
const CLAUDE_COMM_PATTERN = /^claude(-agent)?$/;
|
|
46
|
+
const WORKSPACE_PREPARATION_SCOPE_PATTERN = /\/aw-[^/]*\.scope(\/|$)/;
|
|
46
47
|
const ISSUE_OR_PR_URL_PATTERN = /https:\/\/github\.com\/[^\s\0]+?\/(?:issues|pull)\/\d+/;
|
|
47
48
|
const normalizeName = (value) => value.replace(/[.:]/g, '_');
|
|
48
49
|
const isIssueUrl = (value) => value.startsWith('http://') || value.startsWith('https://');
|
|
@@ -85,7 +86,7 @@ const parseIssueUrlFromPrint = (commandArguments) => {
|
|
|
85
86
|
}
|
|
86
87
|
return extractIssueUrlFromText(commandArguments.join(' '));
|
|
87
88
|
};
|
|
88
|
-
const classifySession = (pid, commandArguments, token) => {
|
|
89
|
+
const classifySession = (pid, commandArguments, token, runsUnderWorkspacePreparationScript) => {
|
|
89
90
|
if (token === null || token.length === 0) {
|
|
90
91
|
return null;
|
|
91
92
|
}
|
|
@@ -101,10 +102,19 @@ const classifySession = (pid, commandArguments, token) => {
|
|
|
101
102
|
sessionName,
|
|
102
103
|
name,
|
|
103
104
|
issueUrl: extractIssueUrlFromText(name),
|
|
105
|
+
runsUnderWorkspacePreparationScript,
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
const kind = 'bareNameLeader';
|
|
107
|
-
return {
|
|
109
|
+
return {
|
|
110
|
+
kind,
|
|
111
|
+
pid,
|
|
112
|
+
token,
|
|
113
|
+
sessionName,
|
|
114
|
+
name,
|
|
115
|
+
issueUrl: null,
|
|
116
|
+
runsUnderWorkspacePreparationScript,
|
|
117
|
+
};
|
|
108
118
|
}
|
|
109
119
|
const issueUrl = parseIssueUrlFromPrint(commandArguments);
|
|
110
120
|
if (issueUrl === null) {
|
|
@@ -117,6 +127,7 @@ const classifySession = (pid, commandArguments, token) => {
|
|
|
117
127
|
sessionName: null,
|
|
118
128
|
name: null,
|
|
119
129
|
issueUrl,
|
|
130
|
+
runsUnderWorkspacePreparationScript,
|
|
120
131
|
};
|
|
121
132
|
};
|
|
122
133
|
class ProcClaudeHandoverSessionRepository {
|
|
@@ -156,7 +167,33 @@ class ProcClaudeHandoverSessionRepository {
|
|
|
156
167
|
return null;
|
|
157
168
|
}
|
|
158
169
|
const token = environ.get(OAUTH_TOKEN_ENVIRON_KEY) ?? null;
|
|
159
|
-
return classifySession(Number(processIdDirectory), commandArguments, token);
|
|
170
|
+
return classifySession(Number(processIdDirectory), commandArguments, token, this.readRunsUnderWorkspacePreparationScript(processIdDirectory));
|
|
171
|
+
};
|
|
172
|
+
this.readRunsUnderWorkspacePreparationScript = (processIdDirectory) => {
|
|
173
|
+
const cgroupPath = path.join(this.procDirectory, processIdDirectory, 'cgroup');
|
|
174
|
+
let raw;
|
|
175
|
+
try {
|
|
176
|
+
raw = fs.readFileSync(cgroupPath, 'utf8');
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
console.error(`ProcClaudeHandoverSessionRepository: could not read ${cgroupPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
for (const line of raw.split('\n')) {
|
|
183
|
+
const firstSeparatorIndex = line.indexOf(':');
|
|
184
|
+
if (firstSeparatorIndex < 0) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const secondSeparatorIndex = line.indexOf(':', firstSeparatorIndex + 1);
|
|
188
|
+
if (secondSeparatorIndex < 0) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const cgroupHierarchyPath = line.slice(secondSeparatorIndex + 1);
|
|
192
|
+
if (WORKSPACE_PREPARATION_SCOPE_PATTERN.test(cgroupHierarchyPath)) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
160
197
|
};
|
|
161
198
|
this.readComm = (processIdDirectory) => {
|
|
162
199
|
const commPath = path.join(this.procDirectory, processIdDirectory, 'comm');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcClaudeHandoverSessionRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProcClaudeHandoverSessionRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,15 @@ class TokenExhaustionHandoverUseCase {
|
|
|
30
30
|
const terminatedPids = [];
|
|
31
31
|
const relaunchedLeaderNames = [];
|
|
32
32
|
const leftAliveSessionNames = [];
|
|
33
|
+
const skippedWorkspacePreparationSessionNames = [];
|
|
33
34
|
for (const session of sessions) {
|
|
34
35
|
try {
|
|
36
|
+
if (session.runsUnderWorkspacePreparationScript) {
|
|
37
|
+
console.log(`Token exhaustion handover: skipping ${this.displayName(session)} kind=${session.kind} (launched by the workspace preparation script, which owns its own lifecycle)`);
|
|
38
|
+
skippedWorkspacePreparationSessionNames.push(this.displayName(session));
|
|
39
|
+
delete nextEntries[this.stateKeyFor(session)];
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
35
42
|
const snapshot = snapshotByToken.get(session.token);
|
|
36
43
|
if (snapshot === undefined) {
|
|
37
44
|
continue;
|
|
@@ -102,13 +109,14 @@ class TokenExhaustionHandoverUseCase {
|
|
|
102
109
|
console.error(`Token exhaustion handover: error processing ${this.displayName(session)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
103
110
|
}
|
|
104
111
|
}
|
|
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}`);
|
|
112
|
+
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} skippedWorkspacePreparation=${skippedWorkspacePreparationSessionNames.length}`);
|
|
106
113
|
return {
|
|
107
114
|
newlyHandoverSentSessionNames,
|
|
108
115
|
killedSessionNames,
|
|
109
116
|
terminatedPids,
|
|
110
117
|
relaunchedLeaderNames,
|
|
111
118
|
leftAliveSessionNames,
|
|
119
|
+
skippedWorkspacePreparationSessionNames,
|
|
112
120
|
state: { entries: nextEntries },
|
|
113
121
|
};
|
|
114
122
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":";;;AAca,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;
|
|
1
|
+
{"version":3,"file":"TokenExhaustionHandoverUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TokenExhaustionHandoverUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,6 +8,7 @@ type FakeProcess = {
|
|
|
8
8
|
comm: string;
|
|
9
9
|
cmdline: string;
|
|
10
10
|
environ: Record<string, string>;
|
|
11
|
+
cgroup?: string;
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
const issueUrl = 'https://github.com/HiromiShikata/example/issues/1';
|
|
@@ -41,6 +42,12 @@ describe('ProcClaudeHandoverSessionRepository', () => {
|
|
|
41
42
|
.map(([key, value]) => `${key}=${value}\0`)
|
|
42
43
|
.join('');
|
|
43
44
|
fs.writeFileSync(path.join(processDirectory, 'environ'), environBuffer);
|
|
45
|
+
if (fakeProcess.cgroup !== undefined) {
|
|
46
|
+
fs.writeFileSync(
|
|
47
|
+
path.join(processDirectory, 'cgroup'),
|
|
48
|
+
`0::${fakeProcess.cgroup}\n`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
44
51
|
};
|
|
45
52
|
|
|
46
53
|
it('classifies an issue-URL leader from a cl --name url launch', () => {
|
|
@@ -61,6 +68,7 @@ describe('ProcClaudeHandoverSessionRepository', () => {
|
|
|
61
68
|
sessionName: issueUrl.replace(/[.:]/g, '_'),
|
|
62
69
|
name: issueUrl,
|
|
63
70
|
issueUrl,
|
|
71
|
+
runsUnderWorkspacePreparationScript: false,
|
|
64
72
|
},
|
|
65
73
|
]);
|
|
66
74
|
});
|
|
@@ -83,6 +91,7 @@ describe('ProcClaudeHandoverSessionRepository', () => {
|
|
|
83
91
|
sessionName: 'app',
|
|
84
92
|
name: 'app',
|
|
85
93
|
issueUrl: null,
|
|
94
|
+
runsUnderWorkspacePreparationScript: false,
|
|
86
95
|
},
|
|
87
96
|
]);
|
|
88
97
|
});
|
|
@@ -110,6 +119,7 @@ describe('ProcClaudeHandoverSessionRepository', () => {
|
|
|
110
119
|
sessionName: null,
|
|
111
120
|
name: null,
|
|
112
121
|
issueUrl,
|
|
122
|
+
runsUnderWorkspacePreparationScript: false,
|
|
113
123
|
},
|
|
114
124
|
]);
|
|
115
125
|
});
|
|
@@ -184,6 +194,44 @@ describe('ProcClaudeHandoverSessionRepository', () => {
|
|
|
184
194
|
});
|
|
185
195
|
});
|
|
186
196
|
|
|
197
|
+
it('marks a session whose cgroup scope is an aw scope as launched by the workspace preparation script', () => {
|
|
198
|
+
writeProcess({
|
|
199
|
+
pid: 209,
|
|
200
|
+
comm: 'claude',
|
|
201
|
+
cmdline: argv(
|
|
202
|
+
'claude',
|
|
203
|
+
'-p',
|
|
204
|
+
`Take ownership of ${issueUrl} and finish it`,
|
|
205
|
+
),
|
|
206
|
+
environ: { CLAUDE_CODE_OAUTH_TOKEN: 'token-h' },
|
|
207
|
+
cgroup:
|
|
208
|
+
'/user.slice/user-1000.slice/user@1000.service/aiagents.slice/aw-HiromiShikata-example-1-4005530.scope',
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const repository = new ProcClaudeHandoverSessionRepository(procDirectory);
|
|
212
|
+
|
|
213
|
+
expect(
|
|
214
|
+
repository.listHandoverSessions()[0].runsUnderWorkspacePreparationScript,
|
|
215
|
+
).toBe(true);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('does not mark a leader session whose cgroup scope is a cl scope as launched by the workspace preparation script', () => {
|
|
219
|
+
writeProcess({
|
|
220
|
+
pid: 210,
|
|
221
|
+
comm: 'claude',
|
|
222
|
+
cmdline: argv('claude', '--name', 'uminopm'),
|
|
223
|
+
environ: { CLAUDE_CODE_OAUTH_TOKEN: 'token-i' },
|
|
224
|
+
cgroup:
|
|
225
|
+
'/user.slice/user-1000.slice/user@1000.service/aiagents.slice/cl-uminopm.scope',
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
const repository = new ProcClaudeHandoverSessionRepository(procDirectory);
|
|
229
|
+
|
|
230
|
+
expect(
|
|
231
|
+
repository.listHandoverSessions()[0].runsUnderWorkspacePreparationScript,
|
|
232
|
+
).toBe(false);
|
|
233
|
+
});
|
|
234
|
+
|
|
187
235
|
it('returns an empty list when the proc directory cannot be read', () => {
|
|
188
236
|
const repository = new ProcClaudeHandoverSessionRepository(
|
|
189
237
|
path.join(procDirectory, 'does-not-exist'),
|
|
@@ -13,6 +13,7 @@ const NAME_ARGUMENT_PREFIX = '--name=';
|
|
|
13
13
|
const PRINT_ARGUMENTS = ['-p', '--print'];
|
|
14
14
|
const PRINT_ARGUMENT_PREFIXES = ['-p=', '--print='];
|
|
15
15
|
const CLAUDE_COMM_PATTERN = /^claude(-agent)?$/;
|
|
16
|
+
const WORKSPACE_PREPARATION_SCOPE_PATTERN = /\/aw-[^/]*\.scope(\/|$)/;
|
|
16
17
|
const ISSUE_OR_PR_URL_PATTERN =
|
|
17
18
|
/https:\/\/github\.com\/[^\s\0]+?\/(?:issues|pull)\/\d+/;
|
|
18
19
|
|
|
@@ -69,6 +70,7 @@ const classifySession = (
|
|
|
69
70
|
pid: number,
|
|
70
71
|
commandArguments: string[],
|
|
71
72
|
token: string | null,
|
|
73
|
+
runsUnderWorkspacePreparationScript: boolean,
|
|
72
74
|
): ClaudeHandoverSession | null => {
|
|
73
75
|
if (token === null || token.length === 0) {
|
|
74
76
|
return null;
|
|
@@ -85,10 +87,19 @@ const classifySession = (
|
|
|
85
87
|
sessionName,
|
|
86
88
|
name,
|
|
87
89
|
issueUrl: extractIssueUrlFromText(name),
|
|
90
|
+
runsUnderWorkspacePreparationScript,
|
|
88
91
|
};
|
|
89
92
|
}
|
|
90
93
|
const kind: ClaudeHandoverSessionKind = 'bareNameLeader';
|
|
91
|
-
return {
|
|
94
|
+
return {
|
|
95
|
+
kind,
|
|
96
|
+
pid,
|
|
97
|
+
token,
|
|
98
|
+
sessionName,
|
|
99
|
+
name,
|
|
100
|
+
issueUrl: null,
|
|
101
|
+
runsUnderWorkspacePreparationScript,
|
|
102
|
+
};
|
|
92
103
|
}
|
|
93
104
|
const issueUrl = parseIssueUrlFromPrint(commandArguments);
|
|
94
105
|
if (issueUrl === null) {
|
|
@@ -101,6 +112,7 @@ const classifySession = (
|
|
|
101
112
|
sessionName: null,
|
|
102
113
|
name: null,
|
|
103
114
|
issueUrl,
|
|
115
|
+
runsUnderWorkspacePreparationScript,
|
|
104
116
|
};
|
|
105
117
|
};
|
|
106
118
|
|
|
@@ -146,7 +158,48 @@ export class ProcClaudeHandoverSessionRepository implements ClaudeHandoverSessio
|
|
|
146
158
|
return null;
|
|
147
159
|
}
|
|
148
160
|
const token = environ.get(OAUTH_TOKEN_ENVIRON_KEY) ?? null;
|
|
149
|
-
return classifySession(
|
|
161
|
+
return classifySession(
|
|
162
|
+
Number(processIdDirectory),
|
|
163
|
+
commandArguments,
|
|
164
|
+
token,
|
|
165
|
+
this.readRunsUnderWorkspacePreparationScript(processIdDirectory),
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
private readRunsUnderWorkspacePreparationScript = (
|
|
170
|
+
processIdDirectory: string,
|
|
171
|
+
): boolean => {
|
|
172
|
+
const cgroupPath = path.join(
|
|
173
|
+
this.procDirectory,
|
|
174
|
+
processIdDirectory,
|
|
175
|
+
'cgroup',
|
|
176
|
+
);
|
|
177
|
+
let raw: string;
|
|
178
|
+
try {
|
|
179
|
+
raw = fs.readFileSync(cgroupPath, 'utf8');
|
|
180
|
+
} catch (error) {
|
|
181
|
+
console.error(
|
|
182
|
+
`ProcClaudeHandoverSessionRepository: could not read ${cgroupPath}: ${
|
|
183
|
+
error instanceof Error ? error.message : String(error)
|
|
184
|
+
}`,
|
|
185
|
+
);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
for (const line of raw.split('\n')) {
|
|
189
|
+
const firstSeparatorIndex = line.indexOf(':');
|
|
190
|
+
if (firstSeparatorIndex < 0) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const secondSeparatorIndex = line.indexOf(':', firstSeparatorIndex + 1);
|
|
194
|
+
if (secondSeparatorIndex < 0) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const cgroupHierarchyPath = line.slice(secondSeparatorIndex + 1);
|
|
198
|
+
if (WORKSPACE_PREPARATION_SCOPE_PATTERN.test(cgroupHierarchyPath)) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
150
203
|
};
|
|
151
204
|
|
|
152
205
|
private readComm = (processIdDirectory: string): string | null => {
|
|
@@ -55,6 +55,7 @@ const issueUrlLeaderSession = (): ClaudeHandoverSession => ({
|
|
|
55
55
|
sessionName: ISSUE_URL_SESSION,
|
|
56
56
|
name: ISSUE_URL,
|
|
57
57
|
issueUrl: ISSUE_URL,
|
|
58
|
+
runsUnderWorkspacePreparationScript: false,
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
const bareNameLeaderSession = (): ClaudeHandoverSession => ({
|
|
@@ -64,6 +65,7 @@ const bareNameLeaderSession = (): ClaudeHandoverSession => ({
|
|
|
64
65
|
sessionName: BARE_NAME,
|
|
65
66
|
name: BARE_NAME,
|
|
66
67
|
issueUrl: null,
|
|
68
|
+
runsUnderWorkspacePreparationScript: false,
|
|
67
69
|
});
|
|
68
70
|
|
|
69
71
|
const implSubagentSession = (): ClaudeHandoverSession => ({
|
|
@@ -73,6 +75,12 @@ const implSubagentSession = (): ClaudeHandoverSession => ({
|
|
|
73
75
|
sessionName: null,
|
|
74
76
|
name: null,
|
|
75
77
|
issueUrl: ISSUE_URL,
|
|
78
|
+
runsUnderWorkspacePreparationScript: false,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const workspacePreparationSession = (): ClaudeHandoverSession => ({
|
|
82
|
+
...implSubagentSession(),
|
|
83
|
+
runsUnderWorkspacePreparationScript: true,
|
|
76
84
|
});
|
|
77
85
|
|
|
78
86
|
const defaultInput = (
|
|
@@ -161,7 +169,7 @@ describe('TokenExhaustionHandoverUseCase', () => {
|
|
|
161
169
|
await useCase.run(defaultInput({ enabled: false }));
|
|
162
170
|
|
|
163
171
|
expect(logSpy).toHaveBeenCalledWith(
|
|
164
|
-
'Token exhaustion handover: cycle summary evaluated=0 enabled=false signaled=0 killed=0 terminatedPids=0 relaunched=0 leftAlive=0',
|
|
172
|
+
'Token exhaustion handover: cycle summary evaluated=0 enabled=false signaled=0 killed=0 terminatedPids=0 relaunched=0 leftAlive=0 skippedWorkspacePreparation=0',
|
|
165
173
|
);
|
|
166
174
|
});
|
|
167
175
|
|
|
@@ -343,6 +351,56 @@ describe('TokenExhaustionHandoverUseCase', () => {
|
|
|
343
351
|
});
|
|
344
352
|
});
|
|
345
353
|
|
|
354
|
+
it('leaves a session launched by the workspace preparation script untouched instead of terminating it', async () => {
|
|
355
|
+
handoverSessionRepository.listHandoverSessions.mockReturnValue([
|
|
356
|
+
workspacePreparationSession(),
|
|
357
|
+
]);
|
|
358
|
+
snapshotRepository.listSnapshots.mockReturnValue([
|
|
359
|
+
snapshot(TOKEN_EXHAUSTED, { fiveHourUtilization: 0.95 }),
|
|
360
|
+
snapshot(TOKEN_FRESH),
|
|
361
|
+
]);
|
|
362
|
+
|
|
363
|
+
const result = await useCase.run(defaultInput());
|
|
364
|
+
|
|
365
|
+
expect(processSignalRepository.terminateProcess).not.toHaveBeenCalled();
|
|
366
|
+
expect(processSignalRepository.killProcess).not.toHaveBeenCalled();
|
|
367
|
+
expect(result.newlyHandoverSentSessionNames).toEqual([]);
|
|
368
|
+
expect(result.skippedWorkspacePreparationSessionNames).toEqual([
|
|
369
|
+
`pid:${IMPL_PID}`,
|
|
370
|
+
]);
|
|
371
|
+
expect(result.state.entries).toEqual({});
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
it('does not force-kill a workspace preparation session whose grace period has elapsed', async () => {
|
|
375
|
+
handoverSessionRepository.listHandoverSessions.mockReturnValue([
|
|
376
|
+
workspacePreparationSession(),
|
|
377
|
+
]);
|
|
378
|
+
snapshotRepository.listSnapshots.mockReturnValue([
|
|
379
|
+
snapshot(TOKEN_EXHAUSTED, { fiveHourUtilization: 0.95 }),
|
|
380
|
+
snapshot(TOKEN_FRESH),
|
|
381
|
+
]);
|
|
382
|
+
processSignalRepository.isProcessAlive.mockReturnValue(true);
|
|
383
|
+
|
|
384
|
+
const result = await useCase.run(
|
|
385
|
+
defaultInput({
|
|
386
|
+
state: {
|
|
387
|
+
entries: {
|
|
388
|
+
[`pid:${IMPL_PID}`]: {
|
|
389
|
+
signaledAtEpoch:
|
|
390
|
+
nowEpochSeconds -
|
|
391
|
+
DEFAULT_TOKEN_EXHAUSTION_GRACE_PERIOD_SECONDS -
|
|
392
|
+
1,
|
|
393
|
+
pid: IMPL_PID,
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
}),
|
|
398
|
+
);
|
|
399
|
+
|
|
400
|
+
expect(processSignalRepository.killProcess).not.toHaveBeenCalled();
|
|
401
|
+
expect(result.terminatedPids).toEqual([]);
|
|
402
|
+
});
|
|
403
|
+
|
|
346
404
|
it('does not treat an impl subagent as exhausted on seven-day utilization alone', async () => {
|
|
347
405
|
handoverSessionRepository.listHandoverSessions.mockReturnValue([
|
|
348
406
|
implSubagentSession(),
|
|
@@ -51,6 +51,7 @@ export type TokenExhaustionHandoverResult = {
|
|
|
51
51
|
terminatedPids: number[];
|
|
52
52
|
relaunchedLeaderNames: string[];
|
|
53
53
|
leftAliveSessionNames: string[];
|
|
54
|
+
skippedWorkspacePreparationSessionNames: string[];
|
|
54
55
|
state: TokenExhaustionHandoverState;
|
|
55
56
|
};
|
|
56
57
|
|
|
@@ -95,9 +96,20 @@ export class TokenExhaustionHandoverUseCase {
|
|
|
95
96
|
const terminatedPids: number[] = [];
|
|
96
97
|
const relaunchedLeaderNames: string[] = [];
|
|
97
98
|
const leftAliveSessionNames: string[] = [];
|
|
99
|
+
const skippedWorkspacePreparationSessionNames: string[] = [];
|
|
98
100
|
|
|
99
101
|
for (const session of sessions) {
|
|
100
102
|
try {
|
|
103
|
+
if (session.runsUnderWorkspacePreparationScript) {
|
|
104
|
+
console.log(
|
|
105
|
+
`Token exhaustion handover: skipping ${this.displayName(session)} kind=${session.kind} (launched by the workspace preparation script, which owns its own lifecycle)`,
|
|
106
|
+
);
|
|
107
|
+
skippedWorkspacePreparationSessionNames.push(
|
|
108
|
+
this.displayName(session),
|
|
109
|
+
);
|
|
110
|
+
delete nextEntries[this.stateKeyFor(session)];
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
101
113
|
const snapshot = snapshotByToken.get(session.token);
|
|
102
114
|
if (snapshot === undefined) {
|
|
103
115
|
continue;
|
|
@@ -200,7 +212,7 @@ export class TokenExhaustionHandoverUseCase {
|
|
|
200
212
|
}
|
|
201
213
|
|
|
202
214
|
console.log(
|
|
203
|
-
`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}`,
|
|
215
|
+
`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} skippedWorkspacePreparation=${skippedWorkspacePreparationSessionNames.length}`,
|
|
204
216
|
);
|
|
205
217
|
|
|
206
218
|
return {
|
|
@@ -209,6 +221,7 @@ export class TokenExhaustionHandoverUseCase {
|
|
|
209
221
|
terminatedPids,
|
|
210
222
|
relaunchedLeaderNames,
|
|
211
223
|
leftAliveSessionNames,
|
|
224
|
+
skippedWorkspacePreparationSessionNames,
|
|
212
225
|
state: { entries: nextEntries },
|
|
213
226
|
};
|
|
214
227
|
};
|
|
@@ -6,6 +6,7 @@ export declare class ProcClaudeHandoverSessionRepository implements ClaudeHandov
|
|
|
6
6
|
listHandoverSessions: () => ClaudeHandoverSession[];
|
|
7
7
|
private listProcessIdDirectories;
|
|
8
8
|
private readHandoverSession;
|
|
9
|
+
private readRunsUnderWorkspacePreparationScript;
|
|
9
10
|
private readComm;
|
|
10
11
|
private readCommandArguments;
|
|
11
12
|
private readEnviron;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcClaudeHandoverSessionRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAEtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;
|
|
1
|
+
{"version":3,"file":"ProcClaudeHandoverSessionRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAEtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAgH3H,qBAAa,mCAAoC,YAAW,+BAA+B;IAEvF,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,GAAE,MAA+B;IAGjE,oBAAoB,QAAO,qBAAqB,EAAE,CAShD;IAEF,OAAO,CAAC,wBAAwB,CAQ9B;IAEF,OAAO,CAAC,mBAAmB,CAsBzB;IAEF,OAAO,CAAC,uCAAuC,CAkC7C;IAEF,OAAO,CAAC,QAAQ,CAOd;IAEF,OAAO,CAAC,oBAAoB,CAe1B;IAEF,OAAO,CAAC,WAAW,CA6BjB;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeHandoverSession.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeHandoverSession.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACnC,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,yBAAyB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ClaudeHandoverSession.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeHandoverSession.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACnC,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,yBAAyB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mCAAmC,EAAE,OAAO,CAAC;CAC9C,CAAC"}
|
|
@@ -26,6 +26,7 @@ export type TokenExhaustionHandoverResult = {
|
|
|
26
26
|
terminatedPids: number[];
|
|
27
27
|
relaunchedLeaderNames: string[];
|
|
28
28
|
leftAliveSessionNames: string[];
|
|
29
|
+
skippedWorkspacePreparationSessionNames: string[];
|
|
29
30
|
state: TokenExhaustionHandoverState;
|
|
30
31
|
};
|
|
31
32
|
export declare class TokenExhaustionHandoverUseCase {
|
|
@@ -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,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,yCAAyC,ubACgY,CAAC;AAEvb,eAAO,MAAM,0DAA0D,yjBACif,CAAC;AAEzjB,eAAO,MAAM,6CAA6C,MAAM,CAAC;AACjE,eAAO,MAAM,iDAAiD,MAAM,CAAC;AACrE,eAAO,MAAM,sDAAsD,OAAO,CAAC;AAC3E,eAAO,MAAM,yCAAyC,MAAM,CAAC;AAC7D,eAAO,MAAM,yCAAyC,OAAO,CAAC;AAC9D,eAAO,MAAM,iDAAiD,OAAO,CAAC;AACtE,eAAO,MAAM,iDAAiD,OAAO,CAAC;AAYtE,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,4BAA4B,CAAC;IACpC,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,6BAA6B,EAAE,MAAM,EAAE,CAAC;IACxC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,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;gBAfvB,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;IAGnE,GAAG,GACD,OAAO,4BAA4B,KAClC,OAAO,CAAC,6BAA6B,CAAC,
|
|
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,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,yCAAyC,ubACgY,CAAC;AAEvb,eAAO,MAAM,0DAA0D,yjBACif,CAAC;AAEzjB,eAAO,MAAM,6CAA6C,MAAM,CAAC;AACjE,eAAO,MAAM,iDAAiD,MAAM,CAAC;AACrE,eAAO,MAAM,sDAAsD,OAAO,CAAC;AAC3E,eAAO,MAAM,yCAAyC,MAAM,CAAC;AAC7D,eAAO,MAAM,yCAAyC,OAAO,CAAC;AAC9D,eAAO,MAAM,iDAAiD,OAAO,CAAC;AACtE,eAAO,MAAM,iDAAiD,OAAO,CAAC;AAYtE,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,4BAA4B,CAAC;IACpC,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,6BAA6B,EAAE,MAAM,EAAE,CAAC;IACxC,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;gBAfvB,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;IAGnE,GAAG,GACD,OAAO,4BAA4B,KAClC,OAAO,CAAC,6BAA6B,CAAC,CAmJvC;IAEF,OAAO,CAAC,aAAa,CACwC;IAE7D,OAAO,CAAC,sBAAsB,CAS5B;IAEF,OAAO,CAAC,YAAY,CAgBlB;IAEF,OAAO,CAAC,SAAS,CAoBf;IAEF,OAAO,CAAC,WAAW,CAGiC;IAEpD,OAAO,CAAC,WAAW,CAC2B;IAE9C,OAAO,CAAC,uBAAuB,CAe7B;IAEF,OAAO,CAAC,gBAAgB,CAgFtB;IAEF,OAAO,CAAC,SAAS,CASf;IAEF,OAAO,CAAC,OAAO,CAQb;IAEF,OAAO,CAAC,cAAc,CAcpB;CACH"}
|