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.
Files changed (63) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +4 -4
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +2 -1
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js +1 -0
  6. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js.map +1 -1
  7. package/bin/adapter/repositories/FileSystemKevReportWatermarkRepository.js +126 -0
  8. package/bin/adapter/repositories/FileSystemKevReportWatermarkRepository.js.map +1 -0
  9. package/bin/adapter/repositories/ProcessListSessionSubAgentActivityRepository.js +1 -0
  10. package/bin/adapter/repositories/ProcessListSessionSubAgentActivityRepository.js.map +1 -1
  11. package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +5 -3
  12. package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
  13. package/bin/domain/entities/KevReportWatermark.js +3 -0
  14. package/bin/domain/entities/KevReportWatermark.js.map +1 -0
  15. package/bin/domain/usecases/DailySecurityScanUseCase.js +56 -7
  16. package/bin/domain/usecases/DailySecurityScanUseCase.js.map +1 -1
  17. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js +9 -0
  18. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js.map +1 -1
  19. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +12 -11
  20. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
  21. package/bin/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.js +3 -0
  22. package/bin/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.js.map +1 -0
  23. package/package.json +1 -1
  24. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +2 -0
  25. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +35 -0
  26. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +7 -0
  27. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.test.ts +253 -0
  28. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts +130 -0
  29. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.test.ts +2 -0
  30. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts +1 -0
  31. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +3 -0
  32. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +159 -0
  33. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +7 -1
  34. package/src/domain/entities/KevReportWatermark.ts +4 -0
  35. package/src/domain/entities/LiveSessionActivitySnapshot.ts +1 -0
  36. package/src/domain/usecases/DailySecurityScanUseCase.test.ts +210 -0
  37. package/src/domain/usecases/DailySecurityScanUseCase.ts +84 -7
  38. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +58 -1
  39. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +21 -0
  40. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +146 -8
  41. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +19 -10
  42. package/src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts +11 -0
  43. package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +3 -0
  44. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  45. package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts +2 -0
  46. package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts.map +1 -1
  47. package/types/adapter/repositories/FileSystemKevReportWatermarkRepository.d.ts +10 -0
  48. package/types/adapter/repositories/FileSystemKevReportWatermarkRepository.d.ts.map +1 -0
  49. package/types/adapter/repositories/ProcessListSessionSubAgentActivityRepository.d.ts.map +1 -1
  50. package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
  51. package/types/domain/entities/KevReportWatermark.d.ts +5 -0
  52. package/types/domain/entities/KevReportWatermark.d.ts.map +1 -0
  53. package/types/domain/entities/LiveSessionActivitySnapshot.d.ts +1 -0
  54. package/types/domain/entities/LiveSessionActivitySnapshot.d.ts.map +1 -1
  55. package/types/domain/usecases/DailySecurityScanUseCase.d.ts +3 -1
  56. package/types/domain/usecases/DailySecurityScanUseCase.d.ts.map +1 -1
  57. package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts +2 -0
  58. package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts.map +1 -1
  59. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
  60. package/types/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.d.ts +15 -0
  61. package/types/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.d.ts.map +1 -0
  62. package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts +1 -0
  63. 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('suppresses the long-running section for a sub-agent that produced output recently even past the running threshold', async () => {
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).not.toHaveBeenCalled();
639
+ expect(mockMessageComposer.composeSubAgentSection).toHaveBeenCalledWith({
640
+ idleSubAgents: [],
641
+ longRunningSubAgents: subAgents,
642
+ });
633
643
  expect(
634
644
  mockNotificationRepository.sendSelfCheckNotification,
635
- ).not.toHaveBeenCalled();
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
- it('never selects a waiting sub-agent for the long-running section even when quiet past both thresholds', async () => {
1051
- setupSubAgents([quietLongRunningSubAgent('sub-process-1', true)]);
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(mockMessageComposer.composeSubAgentSection).not.toHaveBeenCalled();
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 long-running sub-agent that produced output within the silent threshold', async () => {
1062
- setupSubAgents([producingLongRunningSubAgent('sub-process-1')]);
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.waitingOnExternalProcess &&
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;AAoD3D,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,CAowBP;CACH"}
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":"AAEA,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,OAAO,CAAC,kBAAkB,CAkBxB;IAEF,OAAO,CAAC,yBAAyB,CAkB/B;CACH"}
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,CAkCzC;CACH"}
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,CAsCvB;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,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,5 @@
1
+ export type KevReportWatermark = {
2
+ lastReportedDateAdded: string;
3
+ reportedCveIdsOnLastReportedDateAdded: string[];
4
+ };
5
+ //# sourceMappingURL=KevReportWatermark.d.ts.map
@@ -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"}
@@ -3,6 +3,7 @@ export type SubAgentActivity = {
3
3
  silentSeconds: number;
4
4
  runningSeconds: number;
5
5
  waitingOnExternalProcess: boolean;
6
+ finishedResultUnconsumed: boolean;
6
7
  };
7
8
  export type LiveSessionActivitySnapshot = {
8
9
  sessionName: string;
@@ -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
- constructor(localCommandRunner: LocalCommandRunner, issueRepository: Pick<IssueRepository, 'createNewIssue' | 'searchIssue' | 'createCommentByUrl'>, httpRepository: HttpRepository);
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;AAkHF,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;gBAL9B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,GAAG,oBAAoB,CACxD,EACQ,cAAc,EAAE,cAAc;IAGzC,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,CAwDxB;CACH"}
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":"AACA,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,mDAAmD,CAAC;AAwC3D,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;CACH"}
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;CACrE"}
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"}