github-issue-tower-defence-management 1.148.25 → 1.149.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.
- package/CHANGELOG.md +13 -0
- package/README.md +4 -4
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +2 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js +1 -0
- package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js.map +1 -1
- package/bin/adapter/repositories/FileSystemKevReportWatermarkRepository.js +126 -0
- package/bin/adapter/repositories/FileSystemKevReportWatermarkRepository.js.map +1 -0
- package/bin/adapter/repositories/ProcessListSessionSubAgentActivityRepository.js +1 -0
- package/bin/adapter/repositories/ProcessListSessionSubAgentActivityRepository.js.map +1 -1
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +5 -3
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
- package/bin/domain/entities/KevReportWatermark.js +3 -0
- package/bin/domain/entities/KevReportWatermark.js.map +1 -0
- package/bin/domain/usecases/DailySecurityScanUseCase.js +56 -7
- package/bin/domain/usecases/DailySecurityScanUseCase.js.map +1 -1
- package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js +9 -0
- package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js.map +1 -1
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +12 -11
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
- package/bin/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +2 -0
- package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +35 -0
- package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +7 -0
- package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.test.ts +253 -0
- package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts +130 -0
- package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.test.ts +2 -0
- package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts +1 -0
- package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +3 -0
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +159 -0
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +7 -1
- package/src/domain/entities/KevReportWatermark.ts +4 -0
- package/src/domain/entities/LiveSessionActivitySnapshot.ts +1 -0
- package/src/domain/usecases/DailySecurityScanUseCase.test.ts +210 -0
- package/src/domain/usecases/DailySecurityScanUseCase.ts +84 -7
- package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +58 -1
- package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +21 -0
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +146 -8
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +19 -10
- package/src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts +11 -0
- package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +3 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts +2 -0
- package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts.map +1 -1
- package/types/adapter/repositories/FileSystemKevReportWatermarkRepository.d.ts +10 -0
- package/types/adapter/repositories/FileSystemKevReportWatermarkRepository.d.ts.map +1 -0
- package/types/adapter/repositories/ProcessListSessionSubAgentActivityRepository.d.ts.map +1 -1
- package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
- package/types/domain/entities/KevReportWatermark.d.ts +5 -0
- package/types/domain/entities/KevReportWatermark.d.ts.map +1 -0
- package/types/domain/entities/LiveSessionActivitySnapshot.d.ts +1 -0
- package/types/domain/entities/LiveSessionActivitySnapshot.d.ts.map +1 -1
- package/types/domain/usecases/DailySecurityScanUseCase.d.ts +3 -1
- package/types/domain/usecases/DailySecurityScanUseCase.d.ts.map +1 -1
- package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts +2 -0
- package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts.map +1 -1
- package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.d.ts +15 -0
- package/types/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts +1 -0
- package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts.map +1 -1
|
@@ -33,6 +33,7 @@ const MAIN_STALLED_SECTION = 'MAIN_STALLED_SECTION';
|
|
|
33
33
|
const MAIN_STALLED_STALE_OWNER_CALL_SECTION =
|
|
34
34
|
'MAIN_STALLED_STALE_OWNER_CALL_SECTION';
|
|
35
35
|
const SUBAGENT_SECTION = 'SUBAGENT_SECTION';
|
|
36
|
+
const SUBAGENT_UNCONSUMED_RESULT_SECTION = 'SUBAGENT_UNCONSUMED_RESULT_SECTION';
|
|
36
37
|
|
|
37
38
|
class EveryNameRecentSet extends Set<string> {
|
|
38
39
|
override has = (): boolean => true;
|
|
@@ -176,6 +177,9 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
176
177
|
.fn()
|
|
177
178
|
.mockReturnValue(MAIN_STALLED_STALE_OWNER_CALL_SECTION),
|
|
178
179
|
composeSubAgentSection: jest.fn().mockReturnValue(SUBAGENT_SECTION),
|
|
180
|
+
composeSubAgentUnconsumedResultSection: jest
|
|
181
|
+
.fn()
|
|
182
|
+
.mockReturnValue(SUBAGENT_UNCONSUMED_RESULT_SECTION),
|
|
179
183
|
};
|
|
180
184
|
mockSleeper = {
|
|
181
185
|
sleep: jest.fn().mockResolvedValue(undefined),
|
|
@@ -571,6 +575,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
571
575
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
572
576
|
runningSeconds: 60,
|
|
573
577
|
waitingOnExternalProcess: false,
|
|
578
|
+
finishedResultUnconsumed: false,
|
|
574
579
|
},
|
|
575
580
|
];
|
|
576
581
|
mockSubAgentActivityRepository.listSubAgentActivitiesBySessionName.mockResolvedValue(
|
|
@@ -596,6 +601,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
596
601
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
597
602
|
runningSeconds: 600,
|
|
598
603
|
waitingOnExternalProcess: false,
|
|
604
|
+
finishedResultUnconsumed: false,
|
|
599
605
|
},
|
|
600
606
|
];
|
|
601
607
|
mockSubAgentActivityRepository.listSubAgentActivitiesBySessionName.mockResolvedValue(
|
|
@@ -613,7 +619,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
613
619
|
});
|
|
614
620
|
});
|
|
615
621
|
|
|
616
|
-
it('
|
|
622
|
+
it('reports a sub-agent past the running threshold that produced output moments ago', async () => {
|
|
617
623
|
setupLiveInteractiveSession(GITHUB_SESSION);
|
|
618
624
|
const subAgents: SubAgentActivity[] = [
|
|
619
625
|
{
|
|
@@ -621,6 +627,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
621
627
|
silentSeconds: 10,
|
|
622
628
|
runningSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
|
|
623
629
|
waitingOnExternalProcess: false,
|
|
630
|
+
finishedResultUnconsumed: false,
|
|
624
631
|
},
|
|
625
632
|
];
|
|
626
633
|
mockSubAgentActivityRepository.listSubAgentActivitiesBySessionName.mockResolvedValue(
|
|
@@ -629,10 +636,13 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
629
636
|
|
|
630
637
|
await useCase.run(runParams());
|
|
631
638
|
|
|
632
|
-
expect(mockMessageComposer.composeSubAgentSection).
|
|
639
|
+
expect(mockMessageComposer.composeSubAgentSection).toHaveBeenCalledWith({
|
|
640
|
+
idleSubAgents: [],
|
|
641
|
+
longRunningSubAgents: subAgents,
|
|
642
|
+
});
|
|
633
643
|
expect(
|
|
634
644
|
mockNotificationRepository.sendSelfCheckNotification,
|
|
635
|
-
).
|
|
645
|
+
).toHaveBeenCalledWith(GITHUB_SESSION, SUBAGENT_SECTION);
|
|
636
646
|
});
|
|
637
647
|
|
|
638
648
|
it('excludes an owner-handover spawn from selection so no notification is sent', async () => {
|
|
@@ -981,12 +991,14 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
981
991
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
982
992
|
runningSeconds: 60,
|
|
983
993
|
waitingOnExternalProcess: false,
|
|
994
|
+
finishedResultUnconsumed: false,
|
|
984
995
|
});
|
|
985
996
|
const waitingSubAgent = (label: string): SubAgentActivity => ({
|
|
986
997
|
label,
|
|
987
998
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
988
999
|
runningSeconds: 60,
|
|
989
1000
|
waitingOnExternalProcess: true,
|
|
1001
|
+
finishedResultUnconsumed: false,
|
|
990
1002
|
});
|
|
991
1003
|
const quietLongRunningSubAgent = (
|
|
992
1004
|
label: string,
|
|
@@ -996,12 +1008,14 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
996
1008
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
997
1009
|
runningSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
|
|
998
1010
|
waitingOnExternalProcess,
|
|
1011
|
+
finishedResultUnconsumed: false,
|
|
999
1012
|
});
|
|
1000
1013
|
const producingLongRunningSubAgent = (label: string): SubAgentActivity => ({
|
|
1001
1014
|
label,
|
|
1002
1015
|
silentSeconds: 30,
|
|
1003
1016
|
runningSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
|
|
1004
1017
|
waitingOnExternalProcess: false,
|
|
1018
|
+
finishedResultUnconsumed: false,
|
|
1005
1019
|
});
|
|
1006
1020
|
|
|
1007
1021
|
const setupSubAgents = (subAgents: SubAgentActivity[]): void => {
|
|
@@ -1011,6 +1025,26 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
1011
1025
|
);
|
|
1012
1026
|
};
|
|
1013
1027
|
|
|
1028
|
+
it('reports every long-running sub-agent on runtime alone, whether it keeps producing output or waits on an external process', async () => {
|
|
1029
|
+
setupSubAgents([
|
|
1030
|
+
producingLongRunningSubAgent('sub-process-producing-output'),
|
|
1031
|
+
quietLongRunningSubAgent('sub-process-waiting-on-external', true),
|
|
1032
|
+
]);
|
|
1033
|
+
|
|
1034
|
+
await useCase.run(runParams());
|
|
1035
|
+
|
|
1036
|
+
expect(mockMessageComposer.composeSubAgentSection).toHaveBeenCalledWith({
|
|
1037
|
+
idleSubAgents: [],
|
|
1038
|
+
longRunningSubAgents: [
|
|
1039
|
+
producingLongRunningSubAgent('sub-process-producing-output'),
|
|
1040
|
+
quietLongRunningSubAgent('sub-process-waiting-on-external', true),
|
|
1041
|
+
],
|
|
1042
|
+
});
|
|
1043
|
+
expect(
|
|
1044
|
+
mockNotificationRepository.sendSelfCheckNotification,
|
|
1045
|
+
).toHaveBeenCalledWith(GITHUB_SESSION, SUBAGENT_SECTION);
|
|
1046
|
+
});
|
|
1047
|
+
|
|
1014
1048
|
it('never selects a waiting sub-agent as a silent-reminder candidate', async () => {
|
|
1015
1049
|
setupSubAgents([waitingSubAgent('sub-process-1')]);
|
|
1016
1050
|
|
|
@@ -1047,19 +1081,119 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
1047
1081
|
).toHaveBeenCalledTimes(2);
|
|
1048
1082
|
});
|
|
1049
1083
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1084
|
+
const unconsumedResultSubAgent = (label: string): SubAgentActivity => ({
|
|
1085
|
+
label,
|
|
1086
|
+
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
1087
|
+
runningSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS + 60,
|
|
1088
|
+
waitingOnExternalProcess: false,
|
|
1089
|
+
finishedResultUnconsumed: true,
|
|
1090
|
+
});
|
|
1091
|
+
const justFinishedSubAgent = (label: string): SubAgentActivity => ({
|
|
1092
|
+
label,
|
|
1093
|
+
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS - 1,
|
|
1094
|
+
runningSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS + 60,
|
|
1095
|
+
waitingOnExternalProcess: false,
|
|
1096
|
+
finishedResultUnconsumed: true,
|
|
1097
|
+
});
|
|
1098
|
+
|
|
1099
|
+
const setupRecentlyProducingMainSession = (sessionName: string): void => {
|
|
1100
|
+
mockSessionOutputActivityRepository.listSessionOutputActivities.mockResolvedValue(
|
|
1101
|
+
[{ sessionName, lastOutputEpochSeconds: nowEpochSeconds - 60 }],
|
|
1102
|
+
);
|
|
1103
|
+
};
|
|
1104
|
+
|
|
1105
|
+
it('notifies a session whose finished sub-agent result stayed unconsumed past the threshold while the main session keeps producing output', async () => {
|
|
1106
|
+
setupSubAgents([unconsumedResultSubAgent('agent-aaabbbbcccc30001')]);
|
|
1107
|
+
setupRecentlyProducingMainSession(GITHUB_SESSION);
|
|
1108
|
+
|
|
1109
|
+
await useCase.run(runParams());
|
|
1110
|
+
|
|
1111
|
+
expect(
|
|
1112
|
+
mockMessageComposer.composeSubAgentUnconsumedResultSection,
|
|
1113
|
+
).toHaveBeenCalledWith([
|
|
1114
|
+
unconsumedResultSubAgent('agent-aaabbbbcccc30001'),
|
|
1115
|
+
]);
|
|
1116
|
+
expect(
|
|
1117
|
+
mockNotificationRepository.sendSelfCheckNotification,
|
|
1118
|
+
).toHaveBeenCalledWith(
|
|
1119
|
+
GITHUB_SESSION,
|
|
1120
|
+
SUBAGENT_UNCONSUMED_RESULT_SECTION,
|
|
1121
|
+
);
|
|
1122
|
+
});
|
|
1123
|
+
|
|
1124
|
+
it('never selects a finished sub-agent whose result has been unconsumed for less than the threshold', async () => {
|
|
1125
|
+
setupSubAgents([justFinishedSubAgent('agent-aaabbbbcccc30002')]);
|
|
1126
|
+
setupRecentlyProducingMainSession(GITHUB_SESSION);
|
|
1052
1127
|
|
|
1053
1128
|
await useCase.run(runParams());
|
|
1054
1129
|
|
|
1055
|
-
expect(
|
|
1130
|
+
expect(
|
|
1131
|
+
mockMessageComposer.composeSubAgentUnconsumedResultSection,
|
|
1132
|
+
).not.toHaveBeenCalled();
|
|
1056
1133
|
expect(
|
|
1057
1134
|
mockNotificationRepository.sendSelfCheckNotification,
|
|
1058
1135
|
).not.toHaveBeenCalled();
|
|
1059
1136
|
});
|
|
1060
1137
|
|
|
1061
|
-
it('never selects a
|
|
1062
|
-
setupSubAgents([
|
|
1138
|
+
it('never selects a still-working idle sub-agent as an unconsumed result', async () => {
|
|
1139
|
+
setupSubAgents([hungSubAgent('sub-process-1')]);
|
|
1140
|
+
|
|
1141
|
+
await useCase.run(runParams());
|
|
1142
|
+
|
|
1143
|
+
expect(
|
|
1144
|
+
mockMessageComposer.composeSubAgentUnconsumedResultSection,
|
|
1145
|
+
).not.toHaveBeenCalled();
|
|
1146
|
+
expect(mockMessageComposer.composeSubAgentSection).toHaveBeenCalledWith({
|
|
1147
|
+
idleSubAgents: [hungSubAgent('sub-process-1')],
|
|
1148
|
+
longRunningSubAgents: [],
|
|
1149
|
+
});
|
|
1150
|
+
});
|
|
1151
|
+
|
|
1152
|
+
it('keeps an unconsumed finished sub-agent out of the idle and long-running sections', async () => {
|
|
1153
|
+
setupSubAgents([unconsumedResultSubAgent('agent-aaabbbbcccc30003')]);
|
|
1154
|
+
|
|
1155
|
+
await useCase.run(runParams());
|
|
1156
|
+
|
|
1157
|
+
expect(mockMessageComposer.composeSubAgentSection).not.toHaveBeenCalled();
|
|
1158
|
+
});
|
|
1159
|
+
|
|
1160
|
+
it('delivers the idle section and the unconsumed-result section together when both conditions hold', async () => {
|
|
1161
|
+
setupSubAgents([
|
|
1162
|
+
hungSubAgent('sub-process-1'),
|
|
1163
|
+
unconsumedResultSubAgent('agent-aaabbbbcccc30004'),
|
|
1164
|
+
]);
|
|
1165
|
+
|
|
1166
|
+
await useCase.run(runParams());
|
|
1167
|
+
|
|
1168
|
+
expect(
|
|
1169
|
+
mockNotificationRepository.sendSelfCheckNotification,
|
|
1170
|
+
).toHaveBeenCalledWith(
|
|
1171
|
+
GITHUB_SESSION,
|
|
1172
|
+
`${SUBAGENT_SECTION}\n\n${SUBAGENT_UNCONSUMED_RESULT_SECTION}`,
|
|
1173
|
+
);
|
|
1174
|
+
});
|
|
1175
|
+
|
|
1176
|
+
it('reports a waiting long-running sub-agent as long-running while keeping it out of the idle section', async () => {
|
|
1177
|
+
setupSubAgents([quietLongRunningSubAgent('sub-process-1', true)]);
|
|
1178
|
+
|
|
1179
|
+
await useCase.run(runParams());
|
|
1180
|
+
|
|
1181
|
+
expect(mockMessageComposer.composeSubAgentSection).toHaveBeenCalledWith({
|
|
1182
|
+
idleSubAgents: [],
|
|
1183
|
+
longRunningSubAgents: [quietLongRunningSubAgent('sub-process-1', true)],
|
|
1184
|
+
});
|
|
1185
|
+
expect(
|
|
1186
|
+
mockNotificationRepository.sendSelfCheckNotification,
|
|
1187
|
+
).toHaveBeenCalledWith(GITHUB_SESSION, SUBAGENT_SECTION);
|
|
1188
|
+
});
|
|
1189
|
+
|
|
1190
|
+
it('never selects a producing sub-agent that is one second short of the running threshold', async () => {
|
|
1191
|
+
setupSubAgents([
|
|
1192
|
+
{
|
|
1193
|
+
...producingLongRunningSubAgent('sub-process-1'),
|
|
1194
|
+
runningSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS - 1,
|
|
1195
|
+
},
|
|
1196
|
+
]);
|
|
1063
1197
|
|
|
1064
1198
|
await useCase.run(runParams());
|
|
1065
1199
|
|
|
@@ -1677,6 +1811,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
1677
1811
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
1678
1812
|
runningSeconds: 60,
|
|
1679
1813
|
waitingOnExternalProcess: false,
|
|
1814
|
+
finishedResultUnconsumed: false,
|
|
1680
1815
|
},
|
|
1681
1816
|
];
|
|
1682
1817
|
mockSubAgentActivityRepository.listSubAgentActivitiesBySessionName.mockResolvedValue(
|
|
@@ -1806,12 +1941,14 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
1806
1941
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
1807
1942
|
runningSeconds: 60,
|
|
1808
1943
|
waitingOnExternalProcess: false,
|
|
1944
|
+
finishedResultUnconsumed: false,
|
|
1809
1945
|
};
|
|
1810
1946
|
const quietLongRunningSubAgent: SubAgentActivity = {
|
|
1811
1947
|
label: 'agent-long-1',
|
|
1812
1948
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
1813
1949
|
runningSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
|
|
1814
1950
|
waitingOnExternalProcess: false,
|
|
1951
|
+
finishedResultUnconsumed: false,
|
|
1815
1952
|
};
|
|
1816
1953
|
mockSubAgentActivityRepository.listSubAgentActivitiesBySessionName.mockResolvedValue(
|
|
1817
1954
|
new Map([
|
|
@@ -1838,6 +1975,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
|
|
|
1838
1975
|
silentSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
|
|
1839
1976
|
runningSeconds: 60,
|
|
1840
1977
|
waitingOnExternalProcess: false,
|
|
1978
|
+
finishedResultUnconsumed: false,
|
|
1841
1979
|
},
|
|
1842
1980
|
],
|
|
1843
1981
|
],
|
|
@@ -437,21 +437,14 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
437
437
|
|
|
438
438
|
const idleSubAgents = snapshot.subAgents.filter(
|
|
439
439
|
(subAgent) =>
|
|
440
|
+
!subAgent.finishedResultUnconsumed &&
|
|
440
441
|
!subAgent.waitingOnExternalProcess &&
|
|
441
442
|
subAgent.silentSeconds >= thresholds.subAgentSilentThresholdSeconds,
|
|
442
443
|
);
|
|
443
|
-
// The long-running advisory is gated on output recency, mirroring the
|
|
444
|
-
// idle branch: a sub-agent that produced output recently is working, no
|
|
445
|
-
// matter how long it has been running, so it is never selected. Only a
|
|
446
|
-
// sub-agent that is BOTH long-running and quiet (and not waiting on a
|
|
447
|
-
// live external process) qualifies, and it is re-selected on EVERY cycle
|
|
448
|
-
// while the condition holds — there is intentionally no fire-once state
|
|
449
|
-
// and no time-window suppression, matching the idle-branch semantics.
|
|
450
444
|
const longRunningSubAgents = snapshot.subAgents.filter(
|
|
451
445
|
(subAgent) =>
|
|
452
|
-
!subAgent.
|
|
453
|
-
subAgent.runningSeconds >= thresholds.subAgentRunningThresholdSeconds
|
|
454
|
-
subAgent.silentSeconds >= thresholds.subAgentSilentThresholdSeconds,
|
|
446
|
+
!subAgent.finishedResultUnconsumed &&
|
|
447
|
+
subAgent.runningSeconds >= thresholds.subAgentRunningThresholdSeconds,
|
|
455
448
|
);
|
|
456
449
|
if (idleSubAgents.length > 0 || longRunningSubAgents.length > 0) {
|
|
457
450
|
sections.push(
|
|
@@ -468,6 +461,22 @@ export class NotifySilentLiveSessionsUseCase {
|
|
|
468
461
|
}
|
|
469
462
|
}
|
|
470
463
|
|
|
464
|
+
const unconsumedResultSubAgents = snapshot.subAgents.filter(
|
|
465
|
+
(subAgent) =>
|
|
466
|
+
subAgent.finishedResultUnconsumed &&
|
|
467
|
+
subAgent.silentSeconds >= thresholds.subAgentSilentThresholdSeconds,
|
|
468
|
+
);
|
|
469
|
+
if (unconsumedResultSubAgents.length > 0) {
|
|
470
|
+
sections.push(
|
|
471
|
+
this.messageComposer.composeSubAgentUnconsumedResultSection(
|
|
472
|
+
unconsumedResultSubAgents,
|
|
473
|
+
),
|
|
474
|
+
);
|
|
475
|
+
for (const subAgent of unconsumedResultSubAgents) {
|
|
476
|
+
sectionLabels.push(`sub-agent-result-unconsumed:${subAgent.label}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
471
480
|
if (sections.length === 0) {
|
|
472
481
|
return null;
|
|
473
482
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KevReportWatermark } from '../../entities/KevReportWatermark';
|
|
2
|
+
|
|
3
|
+
export type KevReportWatermarkLoadResult =
|
|
4
|
+
| { type: 'absent' }
|
|
5
|
+
| { type: 'stored'; watermark: KevReportWatermark }
|
|
6
|
+
| { type: 'unreadable'; reason: string };
|
|
7
|
+
|
|
8
|
+
export interface KevReportWatermarkRepository {
|
|
9
|
+
load: () => Promise<KevReportWatermarkLoadResult>;
|
|
10
|
+
save: (watermark: KevReportWatermark) => Promise<void>;
|
|
11
|
+
}
|
|
@@ -12,4 +12,7 @@ export interface SilentSessionMessageComposer {
|
|
|
12
12
|
unansweredOwnerCallAgeSeconds: number,
|
|
13
13
|
) => string;
|
|
14
14
|
composeSubAgentSection: (sections: SubAgentStallSections) => string;
|
|
15
|
+
composeSubAgentUnconsumedResultSection: (
|
|
16
|
+
unconsumedResultSubAgents: SubAgentActivity[],
|
|
17
|
+
) => string;
|
|
15
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAqD3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,EACjB,6BAA4B,MAAM,EAAE,GAAG,IAAW,KACjD,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,CAqwBP;CACH"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SubAgentActivity } from '../../domain/entities/LiveSessionActivitySnapshot';
|
|
1
2
|
import { SilentSessionMessageComposer, SubAgentStallSections } from '../../domain/usecases/adapter-interfaces/SilentSessionMessageComposer';
|
|
2
3
|
export type SilentSessionMessageTemplates = {
|
|
3
4
|
mainStalledMessage: string | null;
|
|
@@ -14,6 +15,7 @@ export declare class ConfigurableSilentSessionMessageComposer implements SilentS
|
|
|
14
15
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
15
16
|
composeMainStalledWithStaleOwnerCallSection: (mainSilentSeconds: number, unansweredOwnerCallAgeSeconds: number) => string;
|
|
16
17
|
composeSubAgentSection: (stallSections: SubAgentStallSections) => string;
|
|
18
|
+
composeSubAgentUnconsumedResultSection: (unconsumedResultSubAgents: SubAgentActivity[]) => string;
|
|
17
19
|
private composeIdleSection;
|
|
18
20
|
private composeLongRunningSection;
|
|
19
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigurableSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConfigurableSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAErF,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,uEAAuE,CAAC;AAQ/E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,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,2CAA2C,GACzC,mBAAmB,MAAM,EACzB,+BAA+B,MAAM,KACpC,MAAM,CAUP;IAEF,sBAAsB,GAAI,eAAe,qBAAqB,KAAG,MAAM,CA4CrE;IAEF,sCAAsC,GACpC,2BAA2B,gBAAgB,EAAE,KAC5C,MAAM,CAGL;IAEJ,OAAO,CAAC,kBAAkB,CAkBxB;IAEF,OAAO,CAAC,yBAAyB,CAkB/B;CACH"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { KevReportWatermark } from '../../domain/entities/KevReportWatermark';
|
|
2
|
+
import { KevReportWatermarkLoadResult, KevReportWatermarkRepository } from '../../domain/usecases/adapter-interfaces/KevReportWatermarkRepository';
|
|
3
|
+
export declare class FileSystemKevReportWatermarkRepository implements KevReportWatermarkRepository {
|
|
4
|
+
private readonly stateFilePath;
|
|
5
|
+
constructor(stateFilePath?: string);
|
|
6
|
+
load: () => Promise<KevReportWatermarkLoadResult>;
|
|
7
|
+
save: (watermark: KevReportWatermark) => Promise<void>;
|
|
8
|
+
private unreadable;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=FileSystemKevReportWatermarkRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemKevReportWatermarkRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,uEAAuE,CAAC;AA6B/E,qBAAa,sCAAuC,YAAW,4BAA4B;IAEvF,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,GAAE,MAA+B;IAGjE,IAAI,QAAa,OAAO,CAAC,4BAA4B,CAAC,CAiEpD;IAEF,IAAI,GAAU,WAAW,kBAAkB,KAAG,OAAO,CAAC,IAAI,CAAC,CAazD;IAEF,OAAO,CAAC,UAAU,CAKhB;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessListSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAAA,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,6BAA6B,EAAE,MAAM,wEAAwE,CAAC;AAEvH,qBAAa,4CAA6C,YAAW,iCAAiC;IAKlG,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IALxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;gBAG1C,YAAY,EAAE,MAAM,GAAG,IAAI,EACV,aAAa,EAAE,qBAAqB,EACpC,qBAAqB,EAAE,6BAA6B;IAQvE,mCAAmC,GACjC,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"ProcessListSessionSubAgentActivityRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"AAAA,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,6BAA6B,EAAE,MAAM,wEAAwE,CAAC;AAEvH,qBAAa,4CAA6C,YAAW,iCAAiC;IAKlG,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IALxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;gBAG1C,YAAY,EAAE,MAAM,GAAG,IAAI,EACV,aAAa,EAAE,qBAAqB,EACpC,qBAAqB,EAAE,6BAA6B;IAQvE,mCAAmC,GACjC,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAmCzC;CACH"}
|
|
@@ -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,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AA2BnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;AAiNpD,qBAAa,2CAA4C,YAAW,iCAAiC;IAEjG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,iBAAiB,EAAE,mCAAmC,EACtD,aAAa,EAAE,qBAAqB,EACpC,GAAG,EAAE,IAAI,EACT,gBAAgB,GAAE,wBAA8D;IAGnG,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,CAyCzC;IAEF,OAAO,CAAC,oBAAoB,CAa1B;IAEF,OAAO,CAAC,iBAAiB,
|
|
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,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAC;AACvG,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AA2BnI,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAIR,CAAC;AAiNpD,qBAAa,2CAA4C,YAAW,iCAAiC;IAEjG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,iBAAiB,EAAE,mCAAmC,EACtD,aAAa,EAAE,qBAAqB,EACpC,GAAG,EAAE,IAAI,EACT,gBAAgB,GAAE,wBAA8D;IAGnG,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,CAyCzC;IAEF,OAAO,CAAC,oBAAoB,CAa1B;IAEF,OAAO,CAAC,iBAAiB,CAuCvB;IAEF,OAAO,CAAC,UAAU,CAyChB;IAEF,OAAO,CAAC,sBAAsB,CAiB5B;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KevReportWatermark.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/KevReportWatermark.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qCAAqC,EAAE,MAAM,EAAE,CAAC;CACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveSessionActivitySnapshot.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/LiveSessionActivitySnapshot.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C,CAAC"}
|
|
1
|
+
{"version":3,"file":"LiveSessionActivitySnapshot.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/LiveSessionActivitySnapshot.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,wBAAwB,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
|
|
2
2
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
3
3
|
import { HttpRepository } from './adapter-interfaces/HttpRepository';
|
|
4
|
+
import { KevReportWatermarkRepository } from './adapter-interfaces/KevReportWatermarkRepository';
|
|
4
5
|
import { Member } from '../entities/Member';
|
|
5
6
|
export type DailySecurityScanConfig = {
|
|
6
7
|
scanBaseDirectory: string;
|
|
@@ -12,7 +13,8 @@ export declare class DailySecurityScanUseCase {
|
|
|
12
13
|
readonly localCommandRunner: LocalCommandRunner;
|
|
13
14
|
readonly issueRepository: Pick<IssueRepository, 'createNewIssue' | 'searchIssue' | 'createCommentByUrl'>;
|
|
14
15
|
readonly httpRepository: HttpRepository;
|
|
15
|
-
|
|
16
|
+
readonly kevReportWatermarkRepository: KevReportWatermarkRepository;
|
|
17
|
+
constructor(localCommandRunner: LocalCommandRunner, issueRepository: Pick<IssueRepository, 'createNewIssue' | 'searchIssue' | 'createCommentByUrl'>, httpRepository: HttpRepository, kevReportWatermarkRepository: KevReportWatermarkRepository);
|
|
16
18
|
run: (input: {
|
|
17
19
|
targetDates: Date[];
|
|
18
20
|
org: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DailySecurityScanUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DailySecurityScanUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"DailySecurityScanUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DailySecurityScanUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AAEjG,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAoJF,qBAAa,wBAAwB;IAEjC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IAC/C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,GAAG,oBAAoB,CACxD;IACD,QAAQ,CAAC,cAAc,EAAE,cAAc;IACvC,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B;gBAN1D,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,GAAG,oBAAoB,CACxD,EACQ,cAAc,EAAE,cAAc,EAC9B,4BAA4B,EAAE,4BAA4B;IAGrE,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,iBAAiB,EAAE,uBAAuB,CAAC;KAC5C,KAAG,OAAO,CAAC,IAAI,CAAC,CA2Bf;IAEF,OAAO,CAAC,gBAAgB,CA+HtB;IAEF,OAAO,CAAC,qBAAqB,CAoC3B;IAEF,OAAO,CAAC,kBAAkB,CAgGxB;CACH"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { SubAgentActivity } from '../entities/LiveSessionActivitySnapshot';
|
|
1
2
|
import { SilentSessionMessageComposer, SubAgentStallSections } from './adapter-interfaces/SilentSessionMessageComposer';
|
|
2
3
|
export declare const composeOwnerCallFormatGuidance: () => string;
|
|
3
4
|
export declare class DefaultSilentSessionMessageComposer implements SilentSessionMessageComposer {
|
|
4
5
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
5
6
|
composeMainStalledWithStaleOwnerCallSection: (mainSilentSeconds: number, unansweredOwnerCallAgeSeconds: number) => string;
|
|
6
7
|
composeSubAgentSection: (stallSections: SubAgentStallSections) => string;
|
|
8
|
+
composeSubAgentUnconsumedResultSection: (unconsumedResultSubAgents: SubAgentActivity[]) => string;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=DefaultSilentSessionMessageComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"
|
|
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,qBAAqB,EACtB,MAAM,mDAAmD,CAAC;AAwD3D,eAAO,MAAM,8BAA8B,QAAO,MAEjD,CAAC;AA2BF,qBAAa,mCAAoC,YAAW,4BAA4B;IACtF,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAE7D;IAEF,2CAA2C,GACzC,mBAAmB,MAAM,EACzB,+BAA+B,MAAM,KACpC,MAAM,CAKP;IAEF,sBAAsB,GAAI,eAAe,qBAAqB,KAAG,MAAM,CAWrE;IAEF,sCAAsC,GACpC,2BAA2B,gBAAgB,EAAE,KAC5C,MAAM,CAC2D;CACrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { KevReportWatermark } from '../../entities/KevReportWatermark';
|
|
2
|
+
export type KevReportWatermarkLoadResult = {
|
|
3
|
+
type: 'absent';
|
|
4
|
+
} | {
|
|
5
|
+
type: 'stored';
|
|
6
|
+
watermark: KevReportWatermark;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'unreadable';
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
export interface KevReportWatermarkRepository {
|
|
12
|
+
load: () => Promise<KevReportWatermarkLoadResult>;
|
|
13
|
+
save: (watermark: KevReportWatermark) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=KevReportWatermarkRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KevReportWatermarkRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,MAAM,4BAA4B,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAClD,IAAI,EAAE,CAAC,SAAS,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
|
|
@@ -7,5 +7,6 @@ export interface SilentSessionMessageComposer {
|
|
|
7
7
|
composeMainStalledSection: (mainSilentSeconds: number) => string;
|
|
8
8
|
composeMainStalledWithStaleOwnerCallSection: (mainSilentSeconds: number, unansweredOwnerCallAgeSeconds: number) => string;
|
|
9
9
|
composeSubAgentSection: (sections: SubAgentStallSections) => string;
|
|
10
|
+
composeSubAgentUnconsumedResultSection: (unconsumedResultSubAgents: SubAgentActivity[]) => string;
|
|
10
11
|
}
|
|
11
12
|
//# 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,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,MAAM,CAAC;IACjE,2CAA2C,EAAE,CAC3C,iBAAiB,EAAE,MAAM,EACzB,6BAA6B,EAAE,MAAM,KAClC,MAAM,CAAC;IACZ,sBAAsB,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,MAAM,CAAC;
|
|
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,qBAAqB,GAAG;IAClC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,MAAM,CAAC;IACjE,2CAA2C,EAAE,CAC3C,iBAAiB,EAAE,MAAM,EACzB,6BAA6B,EAAE,MAAM,KAClC,MAAM,CAAC;IACZ,sBAAsB,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACpE,sCAAsC,EAAE,CACtC,yBAAyB,EAAE,gBAAgB,EAAE,KAC1C,MAAM,CAAC;CACb"}
|