github-issue-tower-defence-management 1.135.0 → 1.135.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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.135.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.135.1...v1.135.2) (2026-07-25)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **use-case:** clear past nextActionHour on every sweep without minute-45 dependency ([#1234](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1234)) ([54d6b8f](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/54d6b8fecbd94c6068ae5c85f6d347ad38378725)), closes [HiromiShikata/secretary#2794](https://github.com/HiromiShikata/secretary/issues/2794)
7
+
8
+ ## [1.135.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.135.0...v1.135.1) (2026-07-25)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **silent-session:** exclude TaskStop-killed and crashed subagents from false-positive alerts ([#1107](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1107)) ([024e59c](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/024e59ca765c248e991f8dea7d4a4806593785d1)), closes [#1105](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1105)
14
+
1
15
  # [1.135.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.134.0...v1.135.0) (2026-07-25)
2
16
 
3
17
 
@@ -186,6 +186,45 @@ const parseTranscript = (content) => {
186
186
  };
187
187
  };
188
188
  const clampToZero = (value) => (value > 0 ? value : 0);
189
+ const parseKilledOrFailedAgentIds = (content) => {
190
+ const result = new Set();
191
+ for (const line of content.split('\n')) {
192
+ const trimmed = line.trim();
193
+ if (trimmed.length === 0) {
194
+ continue;
195
+ }
196
+ let parsed;
197
+ try {
198
+ parsed = JSON.parse(trimmed);
199
+ }
200
+ catch {
201
+ continue;
202
+ }
203
+ if (!isRecord(parsed)) {
204
+ continue;
205
+ }
206
+ if (readString(parsed, 'type') !== 'queue-operation') {
207
+ continue;
208
+ }
209
+ if (readString(parsed, 'operation') !== 'enqueue') {
210
+ continue;
211
+ }
212
+ const notifContent = readString(parsed, 'content');
213
+ if (notifContent === null) {
214
+ continue;
215
+ }
216
+ const taskIdMatch = notifContent.match(/<task-id>(a[0-9a-f]+)<\/task-id>/);
217
+ const statusMatch = notifContent.match(/<status>([^<]+)<\/status>/);
218
+ if (!taskIdMatch || !statusMatch) {
219
+ continue;
220
+ }
221
+ const status = statusMatch[1];
222
+ if (status === 'killed' || status === 'failed') {
223
+ result.add(taskIdMatch[1]);
224
+ }
225
+ }
226
+ return result;
227
+ };
189
228
  class TranscriptSessionSubAgentActivityRepository {
190
229
  constructor(directoryResolver, processLister, now) {
191
230
  this.directoryResolver = directoryResolver;
@@ -208,14 +247,28 @@ class TranscriptSessionSubAgentActivityRepository {
208
247
  if (directory === null) {
209
248
  continue;
210
249
  }
211
- const activities = await this.collectActivities(directory, nowEpochSeconds, loadNormalizedProcessCommandLines);
250
+ const killedOrFailedAgentIds = this.loadKilledOrFailedAgentIds(mainTranscriptPath);
251
+ const activities = await this.collectActivities(directory, nowEpochSeconds, killedOrFailedAgentIds, loadNormalizedProcessCommandLines);
212
252
  if (activities.length > 0) {
213
253
  result.set(sessionName, activities);
214
254
  }
215
255
  }
216
256
  return result;
217
257
  };
218
- this.collectActivities = async (directory, nowEpochSeconds, loadNormalizedProcessCommandLines) => {
258
+ this.loadKilledOrFailedAgentIds = (mainTranscriptPath) => {
259
+ if (mainTranscriptPath === null) {
260
+ return new Set();
261
+ }
262
+ let content;
263
+ try {
264
+ content = fs.readFileSync(mainTranscriptPath, 'utf8');
265
+ }
266
+ catch {
267
+ return new Set();
268
+ }
269
+ return parseKilledOrFailedAgentIds(content);
270
+ };
271
+ this.collectActivities = async (directory, nowEpochSeconds, killedOrFailedAgentIds, loadNormalizedProcessCommandLines) => {
219
272
  let entries;
220
273
  try {
221
274
  entries = fs.readdirSync(directory, { withFileTypes: true });
@@ -229,6 +282,10 @@ class TranscriptSessionSubAgentActivityRepository {
229
282
  if (!fileName.startsWith('agent-') || !fileName.endsWith('.jsonl')) {
230
283
  continue;
231
284
  }
285
+ const agentId = fileName.slice('agent-'.length, -'.jsonl'.length);
286
+ if (killedOrFailedAgentIds.has(agentId)) {
287
+ continue;
288
+ }
232
289
  const filePath = path.join(directory, fileName);
233
290
  const activity = await this.toActivity(filePath, fileName, nowEpochSeconds, loadNormalizedProcessCommandLines);
234
291
  if (activity !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
@@ -9,32 +9,25 @@ class ClearPastNextActionDateHourUseCase {
9
9
  return;
10
10
  }
11
11
  const now = input.targetDates[input.targetDates.length - 1];
12
- const nextActionHour = input.project.nextActionHour;
13
- if (nextActionHour) {
14
- const nextActionDate = input.project.nextActionDate;
15
- const targetDatesAtHour45 = input.targetDates
16
- .filter((targetDate) => targetDate.getMinutes() === 45)
17
- .reverse();
18
- if (targetDatesAtHour45.length > 0) {
19
- const targetDate = new Date(targetDatesAtHour45[targetDatesAtHour45.length - 1].getTime() +
20
- 5 * 60 * 1000);
21
- const targetHour = targetDate.getHours() + 1;
22
- for (const issue of input.issues) {
23
- if (issue.nextActionHour === null ||
24
- issue.nextActionHour > targetHour ||
25
- (issue.nextActionDate !== null &&
26
- issue.nextActionDate.getTime() > targetDate.getTime()) ||
27
- issue.state !== 'OPEN') {
28
- continue;
29
- }
30
- await this.issueRepository.clearProjectField(input.project, nextActionHour.fieldId, issue);
31
- await new Promise((resolve) => setTimeout(resolve, 5000));
32
- if (!nextActionDate) {
33
- continue;
34
- }
35
- await this.issueRepository.clearProjectField(input.project, nextActionDate.fieldId, issue);
36
- await new Promise((resolve) => setTimeout(resolve, 5000));
12
+ const nextActionHourField = input.project.nextActionHour;
13
+ if (nextActionHourField) {
14
+ const nextActionDateField = input.project.nextActionDate;
15
+ for (const issue of input.issues) {
16
+ if (issue.nextActionHour === null || issue.state !== 'OPEN') {
17
+ continue;
37
18
  }
19
+ const scheduledDate = issue.nextActionDate ?? now;
20
+ const scheduledTime = new Date(scheduledDate.getFullYear(), scheduledDate.getMonth(), scheduledDate.getDate(), issue.nextActionHour);
21
+ if (scheduledTime.getTime() > now.getTime()) {
22
+ continue;
23
+ }
24
+ await this.issueRepository.clearProjectField(input.project, nextActionHourField.fieldId, issue);
25
+ await new Promise((resolve) => setTimeout(resolve, 5000));
26
+ if (!nextActionDateField) {
27
+ continue;
28
+ }
29
+ await this.issueRepository.clearProjectField(input.project, nextActionDateField.fieldId, issue);
30
+ await new Promise((resolve) => setTimeout(resolve, 5000));
38
31
  }
39
32
  }
40
33
  const nextActionDate = input.project.nextActionDate;
@@ -1 +1 @@
1
- {"version":3,"file":"ClearPastNextActionDateHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClearPastNextActionDateHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.135.0",
3
+ "version": "1.135.2",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -1044,4 +1044,200 @@ describe('TranscriptSessionSubAgentActivityRepository', () => {
1044
1044
  expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(true);
1045
1045
  });
1046
1046
  });
1047
+
1048
+ const writeMainTranscript = (sessionName: string, lines: object[]): void => {
1049
+ const filePath = mainTranscriptPathFor(sessionName);
1050
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
1051
+ fs.writeFileSync(
1052
+ filePath,
1053
+ lines.map((line) => JSON.stringify(line)).join('\n'),
1054
+ 'utf8',
1055
+ );
1056
+ };
1057
+
1058
+ const killedNotificationEntry = (
1059
+ agentId: string,
1060
+ timestamp: string,
1061
+ ): object => ({
1062
+ type: 'queue-operation',
1063
+ operation: 'enqueue',
1064
+ timestamp,
1065
+ content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>killed</status>\n</task-notification>`,
1066
+ });
1067
+
1068
+ const failedNotificationEntry = (
1069
+ agentId: string,
1070
+ timestamp: string,
1071
+ ): object => ({
1072
+ type: 'queue-operation',
1073
+ operation: 'enqueue',
1074
+ timestamp,
1075
+ content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>failed</status>\n</task-notification>`,
1076
+ });
1077
+
1078
+ const completedNotificationEntry = (
1079
+ agentId: string,
1080
+ timestamp: string,
1081
+ ): object => ({
1082
+ type: 'queue-operation',
1083
+ operation: 'enqueue',
1084
+ timestamp,
1085
+ content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>completed</status>\n</task-notification>`,
1086
+ });
1087
+
1088
+ it('excludes a sub-agent killed via TaskStop when the parent transcript records a killed notification for its id', async () => {
1089
+ const sessionName = 'https_//github_com/owner/repo/issues/9';
1090
+ const killedAgentId = 'aaabbbbcccc00001';
1091
+ writeAgentTranscript(
1092
+ sessionName,
1093
+ killedAgentId,
1094
+ pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1095
+ nowEpochSeconds - 300,
1096
+ );
1097
+ writeMainTranscript(sessionName, [
1098
+ killedNotificationEntry(killedAgentId, '2026-06-27T11:55:00.000Z'),
1099
+ ]);
1100
+ const repository = new TranscriptSessionSubAgentActivityRepository(
1101
+ createResolver(),
1102
+ emptyProcessLister(),
1103
+ now,
1104
+ );
1105
+
1106
+ const result = await repository.listSubAgentActivitiesBySessionName(
1107
+ [sessionName],
1108
+ transcriptMapFor([sessionName]),
1109
+ );
1110
+
1111
+ expect(result.size).toBe(0);
1112
+ });
1113
+
1114
+ it('excludes a sub-agent whose process crashed when the parent transcript records a failed notification for its id', async () => {
1115
+ const sessionName = 'https_//github_com/owner/repo/issues/9';
1116
+ const failedAgentId = 'aaabbbbcccc00002';
1117
+ writeAgentTranscript(
1118
+ sessionName,
1119
+ failedAgentId,
1120
+ pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1121
+ nowEpochSeconds - 300,
1122
+ );
1123
+ writeMainTranscript(sessionName, [
1124
+ failedNotificationEntry(failedAgentId, '2026-06-27T11:55:00.000Z'),
1125
+ ]);
1126
+ const repository = new TranscriptSessionSubAgentActivityRepository(
1127
+ createResolver(),
1128
+ emptyProcessLister(),
1129
+ now,
1130
+ );
1131
+
1132
+ const result = await repository.listSubAgentActivitiesBySessionName(
1133
+ [sessionName],
1134
+ transcriptMapFor([sessionName]),
1135
+ );
1136
+
1137
+ expect(result.size).toBe(0);
1138
+ });
1139
+
1140
+ it('does not exclude a sub-agent whose parent transcript records only a completed notification for its id', async () => {
1141
+ const sessionName = 'https_//github_com/owner/repo/issues/9';
1142
+ const startTimestamp = '2026-06-27T11:45:00.000Z';
1143
+ const completedAgentId = 'aaabbbbcccc00003';
1144
+ writeAgentTranscript(
1145
+ sessionName,
1146
+ completedAgentId,
1147
+ pendingToolUseEntries(startTimestamp),
1148
+ nowEpochSeconds - 120,
1149
+ );
1150
+ writeMainTranscript(sessionName, [
1151
+ completedNotificationEntry(completedAgentId, '2026-06-27T11:58:00.000Z'),
1152
+ ]);
1153
+ const repository = new TranscriptSessionSubAgentActivityRepository(
1154
+ createResolver(),
1155
+ emptyProcessLister(),
1156
+ now,
1157
+ );
1158
+
1159
+ const result = await repository.listSubAgentActivitiesBySessionName(
1160
+ [sessionName],
1161
+ transcriptMapFor([sessionName]),
1162
+ );
1163
+
1164
+ expect(result.get(sessionName)).toEqual([
1165
+ {
1166
+ label: `agent-${completedAgentId}`,
1167
+ silentSeconds: 120,
1168
+ runningSeconds: 900,
1169
+ waitingOnExternalProcess: false,
1170
+ },
1171
+ ]);
1172
+ });
1173
+
1174
+ it('excludes a killed sub-agent but reports a still-active sibling in the same session', async () => {
1175
+ const sessionName = 'https_//github_com/owner/repo/issues/9';
1176
+ const killedAgentId = 'aaabbbbcccc00004';
1177
+ const aliveAgentId = 'aaabbbbcccc00005';
1178
+ writeAgentTranscript(
1179
+ sessionName,
1180
+ killedAgentId,
1181
+ pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1182
+ nowEpochSeconds - 600,
1183
+ );
1184
+ writeAgentTranscript(
1185
+ sessionName,
1186
+ aliveAgentId,
1187
+ runningEntries('2026-06-27T11:45:00.000Z'),
1188
+ nowEpochSeconds - 120,
1189
+ );
1190
+ writeMainTranscript(sessionName, [
1191
+ killedNotificationEntry(killedAgentId, '2026-06-27T11:55:00.000Z'),
1192
+ ]);
1193
+ const repository = new TranscriptSessionSubAgentActivityRepository(
1194
+ createResolver(),
1195
+ emptyProcessLister(),
1196
+ now,
1197
+ );
1198
+
1199
+ const result = await repository.listSubAgentActivitiesBySessionName(
1200
+ [sessionName],
1201
+ transcriptMapFor([sessionName]),
1202
+ );
1203
+
1204
+ expect(result.get(sessionName)).toEqual([
1205
+ {
1206
+ label: `agent-${aliveAgentId}`,
1207
+ silentSeconds: 120,
1208
+ runningSeconds: 900,
1209
+ waitingOnExternalProcess: false,
1210
+ },
1211
+ ]);
1212
+ });
1213
+
1214
+ it('reports a sub-agent even when the parent transcript path does not exist', async () => {
1215
+ const sessionName = 'https_//github_com/owner/repo/issues/9';
1216
+ const startTimestamp = '2026-06-27T11:45:00.000Z';
1217
+ writeAgentTranscript(
1218
+ sessionName,
1219
+ 'aabb1122cc3344ee',
1220
+ runningEntries(startTimestamp),
1221
+ nowEpochSeconds - 120,
1222
+ );
1223
+ const repository = new TranscriptSessionSubAgentActivityRepository(
1224
+ createResolver(),
1225
+ emptyProcessLister(),
1226
+ now,
1227
+ );
1228
+
1229
+ const result = await repository.listSubAgentActivitiesBySessionName(
1230
+ [sessionName],
1231
+ transcriptMapFor([sessionName]),
1232
+ );
1233
+
1234
+ expect(result.get(sessionName)).toEqual([
1235
+ {
1236
+ label: 'agent-aabb1122cc3344ee',
1237
+ silentSeconds: 120,
1238
+ runningSeconds: 900,
1239
+ waitingOnExternalProcess: false,
1240
+ },
1241
+ ]);
1242
+ });
1047
1243
  });
@@ -190,6 +190,45 @@ const parseTranscript = (content: string): ParsedTranscript => {
190
190
 
191
191
  const clampToZero = (value: number): number => (value > 0 ? value : 0);
192
192
 
193
+ const parseKilledOrFailedAgentIds = (content: string): Set<string> => {
194
+ const result = new Set<string>();
195
+ for (const line of content.split('\n')) {
196
+ const trimmed = line.trim();
197
+ if (trimmed.length === 0) {
198
+ continue;
199
+ }
200
+ let parsed: unknown;
201
+ try {
202
+ parsed = JSON.parse(trimmed);
203
+ } catch {
204
+ continue;
205
+ }
206
+ if (!isRecord(parsed)) {
207
+ continue;
208
+ }
209
+ if (readString(parsed, 'type') !== 'queue-operation') {
210
+ continue;
211
+ }
212
+ if (readString(parsed, 'operation') !== 'enqueue') {
213
+ continue;
214
+ }
215
+ const notifContent = readString(parsed, 'content');
216
+ if (notifContent === null) {
217
+ continue;
218
+ }
219
+ const taskIdMatch = notifContent.match(/<task-id>(a[0-9a-f]+)<\/task-id>/);
220
+ const statusMatch = notifContent.match(/<status>([^<]+)<\/status>/);
221
+ if (!taskIdMatch || !statusMatch) {
222
+ continue;
223
+ }
224
+ const status = statusMatch[1];
225
+ if (status === 'killed' || status === 'failed') {
226
+ result.add(taskIdMatch[1]);
227
+ }
228
+ }
229
+ return result;
230
+ };
231
+
193
232
  export class TranscriptSessionSubAgentActivityRepository implements SessionSubAgentActivityRepository {
194
233
  constructor(
195
234
  private readonly directoryResolver: SubAgentTranscriptDirectoryResolver,
@@ -223,9 +262,12 @@ export class TranscriptSessionSubAgentActivityRepository implements SessionSubAg
223
262
  if (directory === null) {
224
263
  continue;
225
264
  }
265
+ const killedOrFailedAgentIds =
266
+ this.loadKilledOrFailedAgentIds(mainTranscriptPath);
226
267
  const activities = await this.collectActivities(
227
268
  directory,
228
269
  nowEpochSeconds,
270
+ killedOrFailedAgentIds,
229
271
  loadNormalizedProcessCommandLines,
230
272
  );
231
273
  if (activities.length > 0) {
@@ -235,9 +277,25 @@ export class TranscriptSessionSubAgentActivityRepository implements SessionSubAg
235
277
  return result;
236
278
  };
237
279
 
280
+ private loadKilledOrFailedAgentIds = (
281
+ mainTranscriptPath: string | null,
282
+ ): Set<string> => {
283
+ if (mainTranscriptPath === null) {
284
+ return new Set();
285
+ }
286
+ let content: string;
287
+ try {
288
+ content = fs.readFileSync(mainTranscriptPath, 'utf8');
289
+ } catch {
290
+ return new Set();
291
+ }
292
+ return parseKilledOrFailedAgentIds(content);
293
+ };
294
+
238
295
  private collectActivities = async (
239
296
  directory: string,
240
297
  nowEpochSeconds: number,
298
+ killedOrFailedAgentIds: Set<string>,
241
299
  loadNormalizedProcessCommandLines: () => Promise<string[]>,
242
300
  ): Promise<SubAgentActivity[]> => {
243
301
  let entries: fs.Dirent[];
@@ -252,6 +310,10 @@ export class TranscriptSessionSubAgentActivityRepository implements SessionSubAg
252
310
  if (!fileName.startsWith('agent-') || !fileName.endsWith('.jsonl')) {
253
311
  continue;
254
312
  }
313
+ const agentId = fileName.slice('agent-'.length, -'.jsonl'.length);
314
+ if (killedOrFailedAgentIds.has(agentId)) {
315
+ continue;
316
+ }
255
317
  const filePath = path.join(directory, fileName);
256
318
  const activity = await this.toActivity(
257
319
  filePath,
@@ -201,7 +201,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
201
201
  expectedClearProjectFieldCalls: [],
202
202
  },
203
203
  {
204
- name: 'should clear nextActionHour and nextActionDate for issue with past nextActionHour at HH:45 target',
204
+ name: 'should not clear nextActionHour at 09:45 when scheduled hour 10 has not yet arrived',
205
205
  input: {
206
206
  targetDates: [
207
207
  new Date('2026-04-02T09:45:00'),
@@ -217,6 +217,25 @@ describe('ClearPastNextActionDateHourUseCase', () => {
217
217
  ],
218
218
  cacheUsed: false,
219
219
  },
220
+ expectedClearProjectFieldCalls: [],
221
+ },
222
+ {
223
+ name: 'should clear nextActionHour when sweep has no minute-45 tick but scheduled hour has already passed',
224
+ input: {
225
+ targetDates: [
226
+ new Date('2026-04-02T10:05:00'),
227
+ new Date('2026-04-02T10:15:00'),
228
+ ],
229
+ project: basicProject,
230
+ issues: [
231
+ {
232
+ ...openIssueWithHour,
233
+ nextActionHour: 10,
234
+ nextActionDate: null,
235
+ },
236
+ ],
237
+ cacheUsed: false,
238
+ },
220
239
  expectedClearProjectFieldCalls: [
221
240
  [
222
241
  basicProject,
@@ -239,7 +258,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
239
258
  ],
240
259
  },
241
260
  {
242
- name: 'should not clear nextActionHour when no HH:45 in targetDates',
261
+ name: 'should not clear nextActionHour when scheduled hour has not yet arrived',
243
262
  input: {
244
263
  targetDates: [
245
264
  new Date('2026-04-02T09:00:00'),
@@ -268,7 +287,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
268
287
  issues: [
269
288
  {
270
289
  ...openIssueWithHour,
271
- nextActionHour: 10,
290
+ nextActionHour: 9,
272
291
  nextActionDate: null,
273
292
  },
274
293
  {
@@ -284,7 +303,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
284
303
  'hourFieldId',
285
304
  {
286
305
  ...openIssueWithHour,
287
- nextActionHour: 10,
306
+ nextActionHour: 9,
288
307
  nextActionDate: null,
289
308
  },
290
309
  ],
@@ -293,7 +312,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
293
312
  'dateFieldId',
294
313
  {
295
314
  ...openIssueWithHour,
296
- nextActionHour: 10,
315
+ nextActionHour: 9,
297
316
  nextActionDate: null,
298
317
  },
299
318
  ],
@@ -18,44 +18,38 @@ export class ClearPastNextActionDateHourUseCase {
18
18
  }
19
19
  const now = input.targetDates[input.targetDates.length - 1];
20
20
 
21
- const nextActionHour = input.project.nextActionHour;
22
- if (nextActionHour) {
23
- const nextActionDate = input.project.nextActionDate;
24
- const targetDatesAtHour45 = input.targetDates
25
- .filter((targetDate) => targetDate.getMinutes() === 45)
26
- .reverse();
27
- if (targetDatesAtHour45.length > 0) {
28
- const targetDate = new Date(
29
- targetDatesAtHour45[targetDatesAtHour45.length - 1].getTime() +
30
- 5 * 60 * 1000,
21
+ const nextActionHourField = input.project.nextActionHour;
22
+ if (nextActionHourField) {
23
+ const nextActionDateField = input.project.nextActionDate;
24
+ for (const issue of input.issues) {
25
+ if (issue.nextActionHour === null || issue.state !== 'OPEN') {
26
+ continue;
27
+ }
28
+ const scheduledDate = issue.nextActionDate ?? now;
29
+ const scheduledTime = new Date(
30
+ scheduledDate.getFullYear(),
31
+ scheduledDate.getMonth(),
32
+ scheduledDate.getDate(),
33
+ issue.nextActionHour,
34
+ );
35
+ if (scheduledTime.getTime() > now.getTime()) {
36
+ continue;
37
+ }
38
+ await this.issueRepository.clearProjectField(
39
+ input.project,
40
+ nextActionHourField.fieldId,
41
+ issue,
31
42
  );
32
- const targetHour = targetDate.getHours() + 1;
33
- for (const issue of input.issues) {
34
- if (
35
- issue.nextActionHour === null ||
36
- issue.nextActionHour > targetHour ||
37
- (issue.nextActionDate !== null &&
38
- issue.nextActionDate.getTime() > targetDate.getTime()) ||
39
- issue.state !== 'OPEN'
40
- ) {
41
- continue;
42
- }
43
- await this.issueRepository.clearProjectField(
44
- input.project,
45
- nextActionHour.fieldId,
46
- issue,
47
- );
48
- await new Promise((resolve) => setTimeout(resolve, 5000));
49
- if (!nextActionDate) {
50
- continue;
51
- }
52
- await this.issueRepository.clearProjectField(
53
- input.project,
54
- nextActionDate.fieldId,
55
- issue,
56
- );
57
- await new Promise((resolve) => setTimeout(resolve, 5000));
43
+ await new Promise((resolve) => setTimeout(resolve, 5000));
44
+ if (!nextActionDateField) {
45
+ continue;
58
46
  }
47
+ await this.issueRepository.clearProjectField(
48
+ input.project,
49
+ nextActionDateField.fieldId,
50
+ issue,
51
+ );
52
+ await new Promise((resolve) => setTimeout(resolve, 5000));
59
53
  }
60
54
  }
61
55
 
@@ -9,6 +9,7 @@ export declare class TranscriptSessionSubAgentActivityRepository implements Sess
9
9
  private readonly now;
10
10
  constructor(directoryResolver: SubAgentTranscriptDirectoryResolver, processLister: SubAgentProcessLister, now: Date);
11
11
  listSubAgentActivitiesBySessionName: (sessionNames: string[], transcriptPathBySessionName: Map<string, string>) => Promise<Map<string, SubAgentActivity[]>>;
12
+ private loadKilledOrFailedAgentIds;
12
13
  private collectActivities;
13
14
  private toActivity;
14
15
  private hasLiveMatchingProcess;
@@ -1 +1 @@
1
- {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4EAA4E,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AAuBnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;AAgKpD,qBAAa,2CAA4C,YAAW,iCAAiC;IAEjG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,iBAAiB,EAAE,mCAAmC,EACtD,aAAa,EAAE,qBAAqB,EACpC,GAAG,EAAE,IAAI;IAG5B,mCAAmC,GACjC,cAAc,MAAM,EAAE,EACtB,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAiCzC;IAEF,OAAO,CAAC,iBAAiB,CA6BvB;IAEF,OAAO,CAAC,UAAU,CAoChB;IAEF,OAAO,CAAC,sBAAsB,CAiB5B;CACH"}
1
+ {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,4EAA4E,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AAuBnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;AAuMpD,qBAAa,2CAA4C,YAAW,iCAAiC;IAEjG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,iBAAiB,EAAE,mCAAmC,EACtD,aAAa,EAAE,qBAAqB,EACpC,GAAG,EAAE,IAAI;IAG5B,mCAAmC,GACjC,cAAc,MAAM,EAAE,EACtB,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAoCzC;IAEF,OAAO,CAAC,0BAA0B,CAahC;IAEF,OAAO,CAAC,iBAAiB,CAkCvB;IAEF,OAAO,CAAC,UAAU,CAoChB;IAEF,OAAO,CAAC,sBAAsB,CAiB5B;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClearPastNextActionDateHourUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,kCAAkC;IAE3C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;gBAA3D,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAGtE,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,KAAG,OAAO,CAAC,IAAI,CAAC,CAwEf;CACH"}
1
+ {"version":3,"file":"ClearPastNextActionDateHourUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,kCAAkC;IAE3C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;gBAA3D,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAGtE,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,KAAG,OAAO,CAAC,IAAI,CAAC,CAkEf;CACH"}