github-issue-tower-defence-management 1.117.10 → 1.118.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 +14 -0
- package/README.md +11 -7
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +38 -12
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +7 -2
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
- package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js +44 -11
- package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js.map +1 -1
- package/bin/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.js +128 -0
- package/bin/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.js.map +1 -0
- package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js +27 -7
- package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js.map +1 -1
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +65 -17
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
- package/bin/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +29 -8
- package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +14 -4
- package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +13 -0
- package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +81 -28
- package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +91 -19
- package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.test.ts +251 -0
- package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.ts +121 -0
- package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +91 -15
- package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +54 -11
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +252 -9
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +111 -20
- package/src/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.ts +20 -0
- package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +9 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +3 -0
- package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
- package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts +8 -4
- package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts.map +1 -1
- package/types/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.d.ts +20 -0
- package/types/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.d.ts.map +1 -0
- package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts +2 -2
- package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts.map +1 -1
- package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts +7 -1
- package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.d.ts +19 -0
- package/types/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts +5 -1
- package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts.map +1 -1
|
@@ -8,6 +8,7 @@ import { SessionSubAgentActivityRepository } from './adapter-interfaces/SessionS
|
|
|
8
8
|
import { SilentSessionMessageComposer } from './adapter-interfaces/SilentSessionMessageComposer';
|
|
9
9
|
import { SilentSessionNotificationRepository } from './adapter-interfaces/SilentSessionNotificationRepository';
|
|
10
10
|
import { SilentSessionCandidateStateRepository } from './adapter-interfaces/SilentSessionCandidateStateRepository';
|
|
11
|
+
import { SilentSessionHubTaskStatusCacheRepository } from './adapter-interfaces/SilentSessionHubTaskStatusCacheRepository';
|
|
11
12
|
import { Sleeper } from './adapter-interfaces/Sleeper';
|
|
12
13
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
13
14
|
import { ResolveInteractiveLiveSessionsUseCase } from './ResolveInteractiveLiveSessionsUseCase';
|
|
@@ -17,6 +18,7 @@ export const DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = 5 * 60;
|
|
|
17
18
|
export const DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = 15 * 60;
|
|
18
19
|
export const DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
|
|
19
20
|
export const DEFAULT_CANDIDATE_DEBOUNCE_RECENCY_WINDOW_SECONDS = 15 * 60;
|
|
21
|
+
export const DEFAULT_HUB_TASK_STATUS_CACHE_TTL_SECONDS = 5 * 60;
|
|
20
22
|
|
|
21
23
|
const GITHUB_ISSUE_OR_PULL_URL_PATTERN =
|
|
22
24
|
/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)$/;
|
|
@@ -69,6 +71,7 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
69
71
|
private readonly messageComposer: SilentSessionMessageComposer,
|
|
70
72
|
private readonly sleeper: Sleeper,
|
|
71
73
|
private readonly hubTaskStatusResolver: HubTaskStatusResolver | null = null,
|
|
74
|
+
private readonly hubTaskStatusCacheRepository: SilentSessionHubTaskStatusCacheRepository | null = null,
|
|
72
75
|
) {}
|
|
73
76
|
|
|
74
77
|
run = async (params: {
|
|
@@ -78,6 +81,7 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
78
81
|
staggerSeconds: number;
|
|
79
82
|
candidateDebounceRecencyWindowSeconds: number;
|
|
80
83
|
activeHubTaskStatus: string | null;
|
|
84
|
+
hubTaskStatusCacheTtlSeconds: number;
|
|
81
85
|
now: Date;
|
|
82
86
|
}): Promise<void> => {
|
|
83
87
|
const snapshot =
|
|
@@ -146,6 +150,8 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
146
150
|
!(await this.isHubTaskActive(
|
|
147
151
|
candidate.sessionName,
|
|
148
152
|
params.activeHubTaskStatus,
|
|
153
|
+
params.hubTaskStatusCacheTtlSeconds,
|
|
154
|
+
params.now,
|
|
149
155
|
))
|
|
150
156
|
) {
|
|
151
157
|
continue;
|
|
@@ -165,6 +171,8 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
165
171
|
private isHubTaskActive = async (
|
|
166
172
|
sessionName: string,
|
|
167
173
|
activeHubTaskStatus: string | null,
|
|
174
|
+
hubTaskStatusCacheTtlSeconds: number,
|
|
175
|
+
now: Date,
|
|
168
176
|
): Promise<boolean> => {
|
|
169
177
|
if (activeHubTaskStatus === null || this.hubTaskStatusResolver === null) {
|
|
170
178
|
return true;
|
|
@@ -173,32 +181,110 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
173
181
|
if (hubTaskIssueUrl === null) {
|
|
174
182
|
return true;
|
|
175
183
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
184
|
+
|
|
185
|
+
const cachedEntry =
|
|
186
|
+
this.hubTaskStatusCacheRepository === null
|
|
187
|
+
? null
|
|
188
|
+
: await this.hubTaskStatusCacheRepository.loadHubTaskStatus({
|
|
189
|
+
url: hubTaskIssueUrl,
|
|
190
|
+
});
|
|
191
|
+
const nowEpochSeconds = Math.floor(now.getTime() / 1000);
|
|
192
|
+
if (cachedEntry !== null) {
|
|
193
|
+
const cacheAgeSeconds =
|
|
194
|
+
nowEpochSeconds - cachedEntry.recordedEpochSeconds;
|
|
195
|
+
if (cacheAgeSeconds <= hubTaskStatusCacheTtlSeconds) {
|
|
196
|
+
const active = this.isResolvedStatusActive(
|
|
197
|
+
cachedEntry.state,
|
|
198
|
+
cachedEntry.status,
|
|
199
|
+
activeHubTaskStatus,
|
|
188
200
|
);
|
|
189
|
-
|
|
201
|
+
if (!active) {
|
|
202
|
+
console.log(
|
|
203
|
+
`Skipping ${sessionName}: hub task ${hubTaskIssueUrl} is no longer active per cached status (state "${cachedEntry.state}", status "${cachedEntry.status ?? 'null'}", active status "${activeHubTaskStatus}").`,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
return active;
|
|
190
207
|
}
|
|
191
|
-
|
|
192
|
-
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const resolution = await this.tryResolveAndCacheHubTask(
|
|
211
|
+
hubTaskIssueUrl,
|
|
212
|
+
activeHubTaskStatus,
|
|
213
|
+
sessionName,
|
|
214
|
+
now,
|
|
215
|
+
);
|
|
216
|
+
if (resolution.resolved) {
|
|
217
|
+
return resolution.active;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (cachedEntry !== null) {
|
|
221
|
+
const active = this.isResolvedStatusActive(
|
|
222
|
+
cachedEntry.state,
|
|
223
|
+
cachedEntry.status,
|
|
224
|
+
activeHubTaskStatus,
|
|
225
|
+
);
|
|
193
226
|
console.warn(
|
|
194
|
-
`
|
|
195
|
-
error instanceof Error ? error.message : String(error)
|
|
196
|
-
}`,
|
|
227
|
+
`Hub task ${hubTaskIssueUrl} for session ${sessionName} could not be resolved (${resolution.reason}); falling back to expired cached status (state "${cachedEntry.state}", status "${cachedEntry.status ?? 'null'}"), so the notification is ${active ? 'sent' : 'suppressed'}.`,
|
|
197
228
|
);
|
|
198
|
-
return
|
|
229
|
+
return active;
|
|
199
230
|
}
|
|
231
|
+
|
|
232
|
+
console.warn(
|
|
233
|
+
`Hub task ${hubTaskIssueUrl} for session ${sessionName} is not resolvable and has no cached status (${resolution.reason}); sending notification (fail-open).`,
|
|
234
|
+
);
|
|
235
|
+
return true;
|
|
200
236
|
};
|
|
201
237
|
|
|
238
|
+
private tryResolveAndCacheHubTask = async (
|
|
239
|
+
hubTaskIssueUrl: string,
|
|
240
|
+
activeHubTaskStatus: string,
|
|
241
|
+
sessionName: string,
|
|
242
|
+
now: Date,
|
|
243
|
+
): Promise<
|
|
244
|
+
{ resolved: true; active: boolean } | { resolved: false; reason: string }
|
|
245
|
+
> => {
|
|
246
|
+
if (this.hubTaskStatusResolver === null) {
|
|
247
|
+
return { resolved: false, reason: 'resolver is not configured' };
|
|
248
|
+
}
|
|
249
|
+
let issue: Awaited<ReturnType<HubTaskStatusResolver['getIssueByUrl']>>;
|
|
250
|
+
try {
|
|
251
|
+
issue = await this.hubTaskStatusResolver.getIssueByUrl(hubTaskIssueUrl);
|
|
252
|
+
} catch (error) {
|
|
253
|
+
return {
|
|
254
|
+
resolved: false,
|
|
255
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
if (issue === null) {
|
|
259
|
+
return { resolved: false, reason: 'resolver returned no tracked task' };
|
|
260
|
+
}
|
|
261
|
+
if (this.hubTaskStatusCacheRepository !== null) {
|
|
262
|
+
await this.hubTaskStatusCacheRepository.saveHubTaskStatus({
|
|
263
|
+
url: hubTaskIssueUrl,
|
|
264
|
+
state: issue.state,
|
|
265
|
+
status: issue.status,
|
|
266
|
+
now,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
const active = this.isResolvedStatusActive(
|
|
270
|
+
issue.state,
|
|
271
|
+
issue.status,
|
|
272
|
+
activeHubTaskStatus,
|
|
273
|
+
);
|
|
274
|
+
if (!active) {
|
|
275
|
+
console.log(
|
|
276
|
+
`Skipping ${sessionName}: hub task ${hubTaskIssueUrl} is no longer active (state "${issue.state}", status "${issue.status ?? 'null'}", active status "${activeHubTaskStatus}").`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
return { resolved: true, active };
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
private isResolvedStatusActive = (
|
|
283
|
+
state: 'OPEN' | 'CLOSED' | 'MERGED',
|
|
284
|
+
status: string | null,
|
|
285
|
+
activeHubTaskStatus: string,
|
|
286
|
+
): boolean => state === 'OPEN' && status === activeHubTaskStatus;
|
|
287
|
+
|
|
202
288
|
private collectSnapshots = async (
|
|
203
289
|
interactiveSessions: InteractiveLiveSession[],
|
|
204
290
|
transcriptPathBySessionName: Map<string, string>,
|
|
@@ -277,7 +363,12 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
277
363
|
);
|
|
278
364
|
if (stalledSubAgents.length > 0) {
|
|
279
365
|
sections.push(
|
|
280
|
-
this.messageComposer.composeSubAgentSection(stalledSubAgents
|
|
366
|
+
this.messageComposer.composeSubAgentSection(stalledSubAgents, {
|
|
367
|
+
subAgentSilentThresholdSeconds:
|
|
368
|
+
thresholds.subAgentSilentThresholdSeconds,
|
|
369
|
+
subAgentRunningThresholdSeconds:
|
|
370
|
+
thresholds.subAgentRunningThresholdSeconds,
|
|
371
|
+
}),
|
|
281
372
|
);
|
|
282
373
|
}
|
|
283
374
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Issue } from '../../entities/Issue';
|
|
2
|
+
|
|
3
|
+
export type SilentSessionHubTaskStatusCacheEntry = {
|
|
4
|
+
url: string;
|
|
5
|
+
state: Issue['state'];
|
|
6
|
+
status: string | null;
|
|
7
|
+
recordedEpochSeconds: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export interface SilentSessionHubTaskStatusCacheRepository {
|
|
11
|
+
loadHubTaskStatus: (params: {
|
|
12
|
+
url: string;
|
|
13
|
+
}) => Promise<SilentSessionHubTaskStatusCacheEntry | null>;
|
|
14
|
+
saveHubTaskStatus: (params: {
|
|
15
|
+
url: string;
|
|
16
|
+
state: Issue['state'];
|
|
17
|
+
status: string | null;
|
|
18
|
+
now: Date;
|
|
19
|
+
}) => Promise<void>;
|
|
20
|
+
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { SubAgentActivity } from '../../entities/LiveSessionActivitySnapshot';
|
|
2
2
|
|
|
3
|
+
export type SubAgentStallThresholds = {
|
|
4
|
+
subAgentSilentThresholdSeconds: number;
|
|
5
|
+
subAgentRunningThresholdSeconds: number;
|
|
6
|
+
};
|
|
7
|
+
|
|
3
8
|
export interface SilentSessionMessageComposer {
|
|
4
9
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
5
|
-
composeSubAgentSection: (
|
|
10
|
+
composeSubAgentSection: (
|
|
11
|
+
subAgents: SubAgentActivity[],
|
|
12
|
+
thresholds: SubAgentStallThresholds,
|
|
13
|
+
) => string;
|
|
6
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAiD3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAiD3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAmkBP;CACH"}
|
|
@@ -18,6 +18,8 @@ export type NotifySilentTmuxSessionsParams = {
|
|
|
18
18
|
candidateDebounceStateFilePath: string | null;
|
|
19
19
|
activeHubTaskStatus: string | null;
|
|
20
20
|
hubTaskStatusResolver: HubTaskStatusResolver | null;
|
|
21
|
+
hubTaskStatusCacheStateFilePath: string | null;
|
|
22
|
+
hubTaskStatusCacheTtlSeconds: number;
|
|
21
23
|
messageTemplates: SilentSessionMessageTemplates;
|
|
22
24
|
now: Date;
|
|
23
25
|
};
|
|
@@ -28,5 +30,6 @@ export declare const DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS: {
|
|
|
28
30
|
readonly subAgentRunningThresholdSeconds: number;
|
|
29
31
|
readonly staggerSeconds: 25;
|
|
30
32
|
readonly candidateDebounceRecencyWindowSeconds: number;
|
|
33
|
+
readonly hubTaskStatusCacheTtlSeconds: number;
|
|
31
34
|
};
|
|
32
35
|
//# sourceMappingURL=notifySilentTmuxSessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifySilentTmuxSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kEAAkE,CAAC;AACxG,OAAO,EAEL,qBAAqB,
|
|
1
|
+
{"version":3,"file":"notifySilentTmuxSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kEAAkE,CAAC;AACxG,OAAO,EAEL,qBAAqB,EAOtB,MAAM,0DAA0D,CAAC;AAclE,OAAO,EAEL,6BAA6B,EAC9B,MAAM,6DAA6D,CAAC;AAKrE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC,EAAE,MAAM,CAAC;IAC9C,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpD,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,4BAA4B,EAAE,MAAM,CAAC;IACrC,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAoCF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,8BAA8B,KACrC,OAAO,CAAC,IAAI,CAwEd,CAAC;AAEF,eAAO,MAAM,0CAA0C;;;;;;;CAQ7C,CAAC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { SubAgentActivity } from '../../domain/entities/LiveSessionActivitySnapshot';
|
|
2
|
-
import { SilentSessionMessageComposer } from '../../domain/usecases/adapter-interfaces/SilentSessionMessageComposer';
|
|
2
|
+
import { SilentSessionMessageComposer, SubAgentStallThresholds } from '../../domain/usecases/adapter-interfaces/SilentSessionMessageComposer';
|
|
3
3
|
export type SilentSessionMessageTemplates = {
|
|
4
4
|
mainStalledMessage: string | null;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
subAgentIdleMessageHeader: string | null;
|
|
6
|
+
subAgentIdleMessageFooter: string | null;
|
|
7
|
+
subAgentLongRunningMessageHeader: string | null;
|
|
8
|
+
subAgentLongRunningMessageFooter: string | null;
|
|
7
9
|
};
|
|
8
10
|
export declare class ConfigurableSilentSessionMessageComposer implements SilentSessionMessageComposer {
|
|
9
11
|
private readonly templates;
|
|
10
12
|
private readonly fallback;
|
|
11
13
|
constructor(templates: SilentSessionMessageTemplates, fallback: SilentSessionMessageComposer);
|
|
12
14
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
13
|
-
composeSubAgentSection: (subAgents: SubAgentActivity[]) => string;
|
|
15
|
+
composeSubAgentSection: (subAgents: SubAgentActivity[], thresholds: SubAgentStallThresholds) => string;
|
|
16
|
+
private composeIdleSection;
|
|
17
|
+
private composeLongRunningSection;
|
|
14
18
|
}
|
|
15
19
|
//# sourceMappingURL=ConfigurableSilentSessionMessageComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigurableSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"ConfigurableSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,uEAAuE,CAAC;AAQ/E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD,CAAC;AAOF,qBAAa,wCAAyC,YAAW,4BAA4B;IAEzF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,SAAS,EAAE,6BAA6B,EACxC,QAAQ,EAAE,4BAA4B;IAGzD,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAK7D;IAEF,sBAAsB,GACpB,WAAW,gBAAgB,EAAE,EAC7B,YAAY,uBAAuB,KAClC,MAAM,CA8CP;IAEF,OAAO,CAAC,kBAAkB,CAkBxB;IAEF,OAAO,CAAC,yBAAyB,CAkB/B;CACH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Issue } from '../../domain/entities/Issue';
|
|
2
|
+
import { SilentSessionHubTaskStatusCacheEntry, SilentSessionHubTaskStatusCacheRepository } from '../../domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository';
|
|
3
|
+
export declare const DEFAULT_HUB_TASK_STATUS_RETENTION_WINDOW_SECONDS: number;
|
|
4
|
+
export declare class FileSystemSilentSessionHubTaskStatusCacheRepository implements SilentSessionHubTaskStatusCacheRepository {
|
|
5
|
+
private readonly stateFilePath;
|
|
6
|
+
private readonly retentionWindowSeconds;
|
|
7
|
+
constructor(stateFilePath?: string, retentionWindowSeconds?: number);
|
|
8
|
+
loadHubTaskStatus: (params: {
|
|
9
|
+
url: string;
|
|
10
|
+
}) => Promise<SilentSessionHubTaskStatusCacheEntry | null>;
|
|
11
|
+
saveHubTaskStatus: (params: {
|
|
12
|
+
url: string;
|
|
13
|
+
state: Issue["state"];
|
|
14
|
+
status: string | null;
|
|
15
|
+
now: Date;
|
|
16
|
+
}) => Promise<void>;
|
|
17
|
+
private readEntries;
|
|
18
|
+
private writeEntries;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=FileSystemSilentSessionHubTaskStatusCacheRepository.d.ts.map
|
package/types/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemSilentSessionHubTaskStatusCacheRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EACL,oCAAoC,EACpC,yCAAyC,EAC1C,MAAM,oFAAoF,CAAC;AAQ5F,eAAO,MAAM,gDAAgD,QAAU,CAAC;AAOxE,qBAAa,mDAAoD,YAAW,yCAAyC;IAEjH,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBADtB,aAAa,GAAE,MAA+B,EAC9C,sBAAsB,GAAE,MAAyD;IAGpG,iBAAiB,GAAU,QAAQ;QACjC,GAAG,EAAE,MAAM,CAAC;KACb,KAAG,OAAO,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAOtD;IAEF,iBAAiB,GAAU,QAAQ;QACjC,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,GAAG,EAAE,IAAI,CAAC;KACX,KAAG,OAAO,CAAC,IAAI,CAAC,CAoBf;IAEF,OAAO,CAAC,WAAW,CAwCjB;IAEF,OAAO,CAAC,YAAY,CAWlB;CACH"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { SubAgentActivity } from '../entities/LiveSessionActivitySnapshot';
|
|
2
|
-
import { SilentSessionMessageComposer } from './adapter-interfaces/SilentSessionMessageComposer';
|
|
2
|
+
import { SilentSessionMessageComposer, SubAgentStallThresholds } from './adapter-interfaces/SilentSessionMessageComposer';
|
|
3
3
|
export declare class DefaultSilentSessionMessageComposer implements SilentSessionMessageComposer {
|
|
4
4
|
private readonly ownerCallMarker;
|
|
5
5
|
constructor(ownerCallMarker?: string | null);
|
|
6
6
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
7
|
-
composeSubAgentSection: (subAgents: SubAgentActivity[]) => string;
|
|
7
|
+
composeSubAgentSection: (subAgents: SubAgentActivity[], thresholds: SubAgentStallThresholds) => string;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=DefaultSilentSessionMessageComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"DefaultSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,mDAAmD,CAAC;AAiE3D,qBAAa,mCAAoC,YAAW,4BAA4B;IAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,GAAE,MAAM,GAAG,IAAW;IAElE,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAE7D;IAEF,sBAAsB,GACpB,WAAW,gBAAgB,EAAE,EAC7B,YAAY,uBAAuB,KAClC,MAAM,CAiBP;CACH"}
|
|
@@ -6,6 +6,7 @@ import { SessionSubAgentActivityRepository } from './adapter-interfaces/SessionS
|
|
|
6
6
|
import { SilentSessionMessageComposer } from './adapter-interfaces/SilentSessionMessageComposer';
|
|
7
7
|
import { SilentSessionNotificationRepository } from './adapter-interfaces/SilentSessionNotificationRepository';
|
|
8
8
|
import { SilentSessionCandidateStateRepository } from './adapter-interfaces/SilentSessionCandidateStateRepository';
|
|
9
|
+
import { SilentSessionHubTaskStatusCacheRepository } from './adapter-interfaces/SilentSessionHubTaskStatusCacheRepository';
|
|
9
10
|
import { Sleeper } from './adapter-interfaces/Sleeper';
|
|
10
11
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
11
12
|
export declare const DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS: number;
|
|
@@ -13,6 +14,7 @@ export declare const DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS: number;
|
|
|
13
14
|
export declare const DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS: number;
|
|
14
15
|
export declare const DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
|
|
15
16
|
export declare const DEFAULT_CANDIDATE_DEBOUNCE_RECENCY_WINDOW_SECONDS: number;
|
|
17
|
+
export declare const DEFAULT_HUB_TASK_STATUS_CACHE_TTL_SECONDS: number;
|
|
16
18
|
export declare const parseHubTaskIssueUrlFromSessionName: (sessionName: string) => string | null;
|
|
17
19
|
export declare const isGitHubIssueOrPullRequestSessionName: (sessionName: string) => boolean;
|
|
18
20
|
export type HubTaskStatusResolver = Pick<IssueRepository, 'getIssueByUrl'>;
|
|
@@ -27,8 +29,9 @@ export declare class NotifySilentLiveSessionsUseCase {
|
|
|
27
29
|
private readonly messageComposer;
|
|
28
30
|
private readonly sleeper;
|
|
29
31
|
private readonly hubTaskStatusResolver;
|
|
32
|
+
private readonly hubTaskStatusCacheRepository;
|
|
30
33
|
private readonly resolveInteractiveLiveSessions;
|
|
31
|
-
constructor(liveSessionProcessSnapshotProvider: LiveSessionProcessSnapshotProvider, interactiveLiveSessionTranscriptResolver: InteractiveLiveSessionTranscriptResolver, sessionOutputActivityRepository: SessionOutputActivityRepository, subAgentActivityRepository: SessionSubAgentActivityRepository, ownerCallStatusProvider: OwnerCallStatusProvider, notificationRepository: SilentSessionNotificationRepository, candidateStateRepository: SilentSessionCandidateStateRepository, messageComposer: SilentSessionMessageComposer, sleeper: Sleeper, hubTaskStatusResolver?: HubTaskStatusResolver | null);
|
|
34
|
+
constructor(liveSessionProcessSnapshotProvider: LiveSessionProcessSnapshotProvider, interactiveLiveSessionTranscriptResolver: InteractiveLiveSessionTranscriptResolver, sessionOutputActivityRepository: SessionOutputActivityRepository, subAgentActivityRepository: SessionSubAgentActivityRepository, ownerCallStatusProvider: OwnerCallStatusProvider, notificationRepository: SilentSessionNotificationRepository, candidateStateRepository: SilentSessionCandidateStateRepository, messageComposer: SilentSessionMessageComposer, sleeper: Sleeper, hubTaskStatusResolver?: HubTaskStatusResolver | null, hubTaskStatusCacheRepository?: SilentSessionHubTaskStatusCacheRepository | null);
|
|
32
35
|
run: (params: {
|
|
33
36
|
mainSilentThresholdSeconds: number;
|
|
34
37
|
subAgentSilentThresholdSeconds: number;
|
|
@@ -36,9 +39,12 @@ export declare class NotifySilentLiveSessionsUseCase {
|
|
|
36
39
|
staggerSeconds: number;
|
|
37
40
|
candidateDebounceRecencyWindowSeconds: number;
|
|
38
41
|
activeHubTaskStatus: string | null;
|
|
42
|
+
hubTaskStatusCacheTtlSeconds: number;
|
|
39
43
|
now: Date;
|
|
40
44
|
}) => Promise<void>;
|
|
41
45
|
private isHubTaskActive;
|
|
46
|
+
private tryResolveAndCacheHubTask;
|
|
47
|
+
private isResolvedStatusActive;
|
|
42
48
|
private collectSnapshots;
|
|
43
49
|
private composeMessage;
|
|
44
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAC7G,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AACvG,OAAO,EAAE,iCAAiC,EAAE,MAAM,wDAAwD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AAC/G,OAAO,EAAE,qCAAqC,EAAE,MAAM,4DAA4D,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,eAAO,MAAM,qCAAqC,QAAU,CAAC;AAC7D,eAAO,MAAM,yCAAyC,QAAS,CAAC;AAChE,eAAO,MAAM,0CAA0C,QAAU,CAAC;AAClE,eAAO,MAAM,oCAAoC,KAAK,CAAC;AACvD,eAAO,MAAM,iDAAiD,QAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
|
package/types/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Issue } from '../../entities/Issue';
|
|
2
|
+
export type SilentSessionHubTaskStatusCacheEntry = {
|
|
3
|
+
url: string;
|
|
4
|
+
state: Issue['state'];
|
|
5
|
+
status: string | null;
|
|
6
|
+
recordedEpochSeconds: number;
|
|
7
|
+
};
|
|
8
|
+
export interface SilentSessionHubTaskStatusCacheRepository {
|
|
9
|
+
loadHubTaskStatus: (params: {
|
|
10
|
+
url: string;
|
|
11
|
+
}) => Promise<SilentSessionHubTaskStatusCacheEntry | null>;
|
|
12
|
+
saveHubTaskStatus: (params: {
|
|
13
|
+
url: string;
|
|
14
|
+
state: Issue['state'];
|
|
15
|
+
status: string | null;
|
|
16
|
+
now: Date;
|
|
17
|
+
}) => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=SilentSessionHubTaskStatusCacheRepository.d.ts.map
|
package/types/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SilentSessionHubTaskStatusCacheRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,MAAM,oCAAoC,GAAG;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,yCAAyC;IACxD,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,MAAM,CAAC;KACb,KAAK,OAAO,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;IAC3D,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,GAAG,EAAE,IAAI,CAAC;KACX,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { SubAgentActivity } from '../../entities/LiveSessionActivitySnapshot';
|
|
2
|
+
export type SubAgentStallThresholds = {
|
|
3
|
+
subAgentSilentThresholdSeconds: number;
|
|
4
|
+
subAgentRunningThresholdSeconds: number;
|
|
5
|
+
};
|
|
2
6
|
export interface SilentSessionMessageComposer {
|
|
3
7
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
4
|
-
composeSubAgentSection: (subAgents: SubAgentActivity[]) => string;
|
|
8
|
+
composeSubAgentSection: (subAgents: SubAgentActivity[], thresholds: SubAgentStallThresholds) => string;
|
|
5
9
|
}
|
|
6
10
|
//# sourceMappingURL=SilentSessionMessageComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAE9E,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,MAAM,CAAC;IACjE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"SilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAAG;IACpC,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,MAAM,CAAC;IACjE,sBAAsB,EAAE,CACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,UAAU,EAAE,uBAAuB,KAChC,MAAM,CAAC;CACb"}
|