github-issue-tower-defence-management 1.122.4 → 1.122.6

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 (53) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +5 -1
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +14 -2
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +3 -1
  6. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
  7. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js +6 -0
  8. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js.map +1 -1
  9. package/bin/adapter/repositories/NoUnansweredOwnerCallStatusProvider.js +2 -2
  10. package/bin/adapter/repositories/NoUnansweredOwnerCallStatusProvider.js.map +1 -1
  11. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js +14 -11
  12. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js.map +1 -1
  13. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js +18 -5
  14. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js.map +1 -1
  15. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +15 -5
  16. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
  17. package/package.json +1 -1
  18. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +11 -0
  19. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +47 -8
  20. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +5 -0
  21. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +44 -2
  22. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +16 -0
  23. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.test.ts +1 -1
  24. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.test.ts +7 -6
  25. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts +3 -3
  26. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +99 -49
  27. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +24 -14
  28. package/src/domain/entities/LiveSessionActivitySnapshot.ts +1 -1
  29. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +117 -9
  30. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +31 -5
  31. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +106 -10
  32. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +24 -6
  33. package/src/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.ts +2 -2
  34. package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +4 -0
  35. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  36. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +2 -0
  37. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
  38. package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts +2 -0
  39. package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts.map +1 -1
  40. package/types/adapter/repositories/NoUnansweredOwnerCallStatusProvider.d.ts +1 -1
  41. package/types/adapter/repositories/NoUnansweredOwnerCallStatusProvider.d.ts.map +1 -1
  42. package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts +2 -2
  43. package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts.map +1 -1
  44. package/types/domain/entities/LiveSessionActivitySnapshot.d.ts +1 -1
  45. package/types/domain/entities/LiveSessionActivitySnapshot.d.ts.map +1 -1
  46. package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts +1 -0
  47. package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts.map +1 -1
  48. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts +2 -0
  49. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
  50. package/types/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.d.ts +1 -1
  51. package/types/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.d.ts.map +1 -1
  52. package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts +1 -0
  53. package/types/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.d.ts.map +1 -1
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotifySilentLiveSessionsUseCase = exports.isGitHubIssueOrPullRequestSessionName = exports.parseHubTaskIssueUrlFromSessionName = exports.DEFAULT_HUB_TASK_STATUS_CACHE_TTL_SECONDS = exports.DEFAULT_CANDIDATE_DEBOUNCE_RECENCY_WINDOW_SECONDS = exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = void 0;
3
+ exports.NotifySilentLiveSessionsUseCase = exports.isGitHubIssueOrPullRequestSessionName = exports.parseHubTaskIssueUrlFromSessionName = exports.DEFAULT_HUB_TASK_STATUS_CACHE_TTL_SECONDS = exports.DEFAULT_CANDIDATE_DEBOUNCE_RECENCY_WINDOW_SECONDS = exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = exports.DEFAULT_UNANSWERED_OWNER_CALL_GRACE_SECONDS = exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = void 0;
4
4
  const ResolveInteractiveLiveSessionsUseCase_1 = require("./ResolveInteractiveLiveSessionsUseCase");
5
5
  exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = 10 * 60;
6
+ exports.DEFAULT_UNANSWERED_OWNER_CALL_GRACE_SECONDS = 60 * 60;
6
7
  exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = 5 * 60;
7
8
  exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = 15 * 60;
8
9
  exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
@@ -172,29 +173,38 @@ class NotifySilentLiveSessionsUseCase {
172
173
  lastOutputBySessionName.set(activity.sessionName, activity.lastOutputEpochSeconds);
173
174
  }
174
175
  const subAgentsBySessionName = await this.subAgentActivityRepository.listSubAgentActivitiesBySessionName(sessionNames, transcriptPathBySessionName);
175
- const sessionNamesWithUnansweredOwnerCall = await this.ownerCallStatusProvider.listSessionNamesWithUnansweredOwnerCall(transcriptPathBySessionName);
176
+ const unansweredOwnerCallEpochSecondsBySessionName = await this.ownerCallStatusProvider.listUnansweredOwnerCallEpochSecondsBySessionName(transcriptPathBySessionName);
176
177
  const nowEpochSeconds = Math.floor(now.getTime() / 1000);
177
178
  return sessionNames.map((sessionName) => {
178
179
  const lastOutputEpochSeconds = lastOutputBySessionName.get(sessionName);
179
180
  const mainSilentSeconds = lastOutputEpochSeconds === undefined
180
181
  ? null
181
182
  : nowEpochSeconds - lastOutputEpochSeconds;
183
+ const unansweredOwnerCallEpochSeconds = unansweredOwnerCallEpochSecondsBySessionName.get(sessionName);
182
184
  return {
183
185
  sessionName,
184
186
  mainSilentSeconds,
185
187
  subAgents: subAgentsBySessionName.get(sessionName) ?? [],
186
- hasUnansweredOwnerCall: sessionNamesWithUnansweredOwnerCall.has(sessionName),
188
+ unansweredOwnerCallAgeSeconds: unansweredOwnerCallEpochSeconds === undefined
189
+ ? null
190
+ : nowEpochSeconds - unansweredOwnerCallEpochSeconds,
187
191
  };
188
192
  });
189
193
  };
190
194
  this.composeCandidate = async (snapshot, thresholds) => {
191
195
  const sections = [];
192
196
  const mainSilentSeconds = snapshot.mainSilentSeconds;
197
+ const unansweredOwnerCallAgeSeconds = snapshot.unansweredOwnerCallAgeSeconds;
198
+ const suppressedByRecentOwnerCall = unansweredOwnerCallAgeSeconds !== null &&
199
+ unansweredOwnerCallAgeSeconds <
200
+ thresholds.unansweredOwnerCallGraceSeconds;
193
201
  const mainTriggered = mainSilentSeconds !== null &&
194
202
  mainSilentSeconds >= thresholds.mainSilentThresholdSeconds &&
195
- !snapshot.hasUnansweredOwnerCall;
203
+ !suppressedByRecentOwnerCall;
196
204
  if (mainTriggered) {
197
- sections.push(this.messageComposer.composeMainStalledSection(mainSilentSeconds));
205
+ sections.push(unansweredOwnerCallAgeSeconds !== null
206
+ ? this.messageComposer.composeMainStalledWithStaleOwnerCallSection(mainSilentSeconds, unansweredOwnerCallAgeSeconds)
207
+ : this.messageComposer.composeMainStalledSection(mainSilentSeconds));
198
208
  }
199
209
  const idleSubAgents = snapshot.subAgents.filter((subAgent) => !subAgent.waitingOnExternalProcess &&
200
210
  subAgent.silentSeconds >= thresholds.subAgentSilentThresholdSeconds);
@@ -1 +1 @@
1
- {"version":3,"file":"NotifySilentLiveSessionsUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotifySilentLiveSessionsUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.122.4",
3
+ "version": "1.122.6",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -115,6 +115,7 @@ export class HandleScheduledEventUseCaseHandler {
115
115
  subAgentProcessMatchPattern?: string;
116
116
  subAgentTranscriptRootDirectory?: string;
117
117
  mainSilentThresholdSeconds?: number;
118
+ unansweredOwnerCallGraceSeconds?: number;
118
119
  subAgentSilentThresholdSeconds?: number;
119
120
  subAgentRunningThresholdSeconds?: number;
120
121
  silentNotificationStaggerSeconds?: number;
@@ -124,6 +125,7 @@ export class HandleScheduledEventUseCaseHandler {
124
125
  hubTaskStatusCacheStateFilePath?: string;
125
126
  hubTaskStatusCacheTtlSeconds?: number;
126
127
  silentMainStalledMessage?: string;
128
+ silentMainStalledStaleOwnerCallMessage?: string;
127
129
  silentSubAgentIdleMessageHeader?: string;
128
130
  silentSubAgentIdleMessageFooter?: string;
129
131
  silentSubAgentLongRunningMessageHeader?: string;
@@ -599,6 +601,11 @@ export class HandleScheduledEventUseCaseHandler {
599
601
  process.env.TDPM_MAIN_SILENT_THRESHOLD_SECONDS,
600
602
  DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.mainSilentThresholdSeconds,
601
603
  ),
604
+ unansweredOwnerCallGraceSeconds: readSilentSeconds(
605
+ mergedInput.unansweredOwnerCallGraceSeconds,
606
+ process.env.TDPM_SILENT_UNANSWERED_OWNER_CALL_GRACE_SECONDS,
607
+ DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.unansweredOwnerCallGraceSeconds,
608
+ ),
602
609
  subAgentSilentThresholdSeconds: readSilentSeconds(
603
610
  mergedInput.subAgentSilentThresholdSeconds,
604
611
  process.env.TDPM_SUBAGENT_SILENT_THRESHOLD_SECONDS,
@@ -642,6 +649,10 @@ export class HandleScheduledEventUseCaseHandler {
642
649
  mergedInput.silentMainStalledMessage ??
643
650
  process.env.TDPM_SILENT_MAIN_STALLED_MESSAGE ??
644
651
  null,
652
+ mainStalledStaleOwnerCallMessage:
653
+ mergedInput.silentMainStalledStaleOwnerCallMessage ??
654
+ process.env.TDPM_SILENT_MAIN_STALLED_STALE_OWNER_CALL_MESSAGE ??
655
+ null,
645
656
  subAgentIdleMessageHeader:
646
657
  mergedInput.silentSubAgentIdleMessageHeader ??
647
658
  process.env.TDPM_SILENT_SUBAGENT_IDLE_MESSAGE_HEADER ??
@@ -20,6 +20,7 @@ const CLAUDE_PID = 201;
20
20
 
21
21
  const EMPTY_TEMPLATES: SilentSessionMessageTemplates = {
22
22
  mainStalledMessage: null,
23
+ mainStalledStaleOwnerCallMessage: null,
23
24
  subAgentIdleMessageHeader: null,
24
25
  subAgentIdleMessageFooter: null,
25
26
  subAgentLongRunningMessageHeader: null,
@@ -221,11 +222,8 @@ describe('notifySilentTmuxSessions', () => {
221
222
  await notifySilentTmuxSessions({
222
223
  ...baseParams(runner),
223
224
  messageTemplates: {
225
+ ...EMPTY_TEMPLATES,
224
226
  mainStalledMessage: 'CUSTOM_MAIN_TEMPLATE',
225
- subAgentIdleMessageHeader: null,
226
- subAgentIdleMessageFooter: null,
227
- subAgentLongRunningMessageHeader: null,
228
- subAgentLongRunningMessageFooter: null,
229
227
  },
230
228
  });
231
229
 
@@ -236,12 +234,12 @@ describe('notifySilentTmuxSessions', () => {
236
234
  `${SILENT_SESSION_REMINDER_SENTINEL} CUSTOM_MAIN_TEMPLATE`,
237
235
  );
238
236
  expect(sendCall?.[1][4]).toContain(
239
- 'NEVER tell the owner to scroll up, go back, or read previous or above messages',
237
+ 'Please avoid telling the owner to scroll up, go back, or read previous or above messages',
240
238
  );
241
239
  });
242
240
 
243
- it('suppresses the notification whenever an owner call is unanswered, regardless of how long the session has been silent', async () => {
244
- const stalePendingOwnerCall = new Date(
241
+ it('suppresses the notification while the unanswered owner call is younger than the grace period', async () => {
242
+ const recentPendingOwnerCall = new Date(
245
243
  (NOW_EPOCH_SECONDS - 11 * 60) * 1000,
246
244
  ).toISOString();
247
245
  writeTranscript([
@@ -252,7 +250,7 @@ describe('notifySilentTmuxSessions', () => {
252
250
  },
253
251
  {
254
252
  type: 'assistant',
255
- timestamp: stalePendingOwnerCall,
253
+ timestamp: recentPendingOwnerCall,
256
254
  message: {
257
255
  role: 'assistant',
258
256
  stop_reason: 'end_turn',
@@ -262,6 +260,7 @@ describe('notifySilentTmuxSessions', () => {
262
260
  },
263
261
  },
264
262
  ]);
263
+ seedPreviousCandidates([SESSION_NAME]);
265
264
  const runner = liveSessionRunner();
266
265
 
267
266
  await notifySilentTmuxSessions({
@@ -275,6 +274,46 @@ describe('notifySilentTmuxSessions', () => {
275
274
  expect(sendCall).toBeUndefined();
276
275
  });
277
276
 
277
+ it('sends the stale-owner-call reminder once the unanswered owner call is older than the grace period', async () => {
278
+ const stalePendingOwnerCall = new Date(
279
+ (NOW_EPOCH_SECONDS - 2 * 60 * 60) * 1000,
280
+ ).toISOString();
281
+ writeTranscript([
282
+ {
283
+ type: 'user',
284
+ timestamp: '2026-06-25T20:00:00.000Z',
285
+ message: { role: 'user', content: 'go ahead' },
286
+ },
287
+ {
288
+ type: 'assistant',
289
+ timestamp: stalePendingOwnerCall,
290
+ message: {
291
+ role: 'assistant',
292
+ stop_reason: 'end_turn',
293
+ content: [
294
+ { type: 'text', text: 'waiting <<OWNER_CALL>> please decide' },
295
+ ],
296
+ },
297
+ },
298
+ ]);
299
+ seedPreviousCandidates([SESSION_NAME]);
300
+ const runner = liveSessionRunner();
301
+
302
+ await notifySilentTmuxSessions({
303
+ ...baseParams(runner),
304
+ ownerCallMarker: '<<OWNER_CALL>>',
305
+ });
306
+
307
+ const sendCall = runner.runCommand.mock.calls.find(
308
+ (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
309
+ );
310
+ expect(sendCall?.[1][2]).toBe(SESSION_NAME);
311
+ expect(sendCall?.[1][4]).toContain('is still unanswered');
312
+ expect(sendCall?.[1][4]).toContain(
313
+ 're-raise your pending ask NOW as a fresh owner call',
314
+ );
315
+ });
316
+
278
317
  it('defers the first cycle then notifies on the next cycle once the persisted candidate state confirms a second consecutive cycle', async () => {
279
318
  silentAssistantTranscript();
280
319
  const firstRunner = liveSessionRunner();
@@ -6,6 +6,7 @@ import {
6
6
  NotifySilentLiveSessionsUseCase,
7
7
  HubTaskStatusResolver,
8
8
  DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
9
+ DEFAULT_UNANSWERED_OWNER_CALL_GRACE_SECONDS,
9
10
  DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
10
11
  DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
11
12
  DEFAULT_NOTIFICATION_STAGGER_SECONDS,
@@ -42,6 +43,7 @@ export type NotifySilentTmuxSessionsParams = {
42
43
  subAgentProcessMatchPattern: string | null;
43
44
  subAgentTranscriptRootDirectory: string | null;
44
45
  mainSilentThresholdSeconds: number;
46
+ unansweredOwnerCallGraceSeconds: number;
45
47
  subAgentSilentThresholdSeconds: number;
46
48
  subAgentRunningThresholdSeconds: number;
47
49
  staggerSeconds: number;
@@ -102,6 +104,7 @@ export const notifySilentTmuxSessions = async (
102
104
  subAgentProcessMatchPattern,
103
105
  subAgentTranscriptRootDirectory,
104
106
  mainSilentThresholdSeconds,
107
+ unansweredOwnerCallGraceSeconds,
105
108
  subAgentSilentThresholdSeconds,
106
109
  subAgentRunningThresholdSeconds,
107
110
  staggerSeconds,
@@ -157,6 +160,7 @@ export const notifySilentTmuxSessions = async (
157
160
  );
158
161
  await useCase.run({
159
162
  mainSilentThresholdSeconds,
163
+ unansweredOwnerCallGraceSeconds,
160
164
  subAgentSilentThresholdSeconds,
161
165
  subAgentRunningThresholdSeconds,
162
166
  staggerSeconds,
@@ -169,6 +173,7 @@ export const notifySilentTmuxSessions = async (
169
173
 
170
174
  export const DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS = {
171
175
  mainSilentThresholdSeconds: DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
176
+ unansweredOwnerCallGraceSeconds: DEFAULT_UNANSWERED_OWNER_CALL_GRACE_SECONDS,
172
177
  subAgentSilentThresholdSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
173
178
  subAgentRunningThresholdSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
174
179
  staggerSeconds: DEFAULT_NOTIFICATION_STAGGER_SECONDS,
@@ -6,11 +6,15 @@ type Mocked<T> = jest.Mocked<T> & jest.MockedObject<T>;
6
6
 
7
7
  const createFallback = (): Mocked<SilentSessionMessageComposer> => ({
8
8
  composeMainStalledSection: jest.fn().mockReturnValue('FALLBACK_MAIN'),
9
+ composeMainStalledWithStaleOwnerCallSection: jest
10
+ .fn()
11
+ .mockReturnValue('FALLBACK_STALE_OWNER_CALL'),
9
12
  composeSubAgentSection: jest.fn().mockReturnValue('FALLBACK_SUB'),
10
13
  });
11
14
 
12
15
  const noTemplates = {
13
16
  mainStalledMessage: null,
17
+ mainStalledStaleOwnerCallMessage: null,
14
18
  subAgentIdleMessageHeader: null,
15
19
  subAgentIdleMessageFooter: null,
16
20
  subAgentLongRunningMessageHeader: null,
@@ -60,13 +64,51 @@ describe('ConfigurableSilentSessionMessageComposer', () => {
60
64
  );
61
65
  expect(section).toContain('🔴');
62
66
  expect(section).toContain(
63
- 'Make the owner-call message fully self-contained: the owner MUST understand the whole situation — what happened, what you are asking, and any decision needed — from this single latest owner-call message alone, without reading or scrolling back to earlier messages.',
67
+ 'Make the owner-call message fully self-contained: the owner should be able to understand the whole situation — what happened, what you are asking, and any decision needed — from this single latest owner-call message alone, without reading or scrolling back to earlier messages.',
64
68
  );
65
69
  expect(section).toContain(
66
- 'NEVER tell the owner to scroll up, go back, or read previous or above messages; if context is needed, restate it inside the owner-call message itself.',
70
+ 'Please avoid telling the owner to scroll up, go back, or read previous or above messages; if context is needed, restate it inside the owner-call message itself.',
67
71
  );
68
72
  });
69
73
 
74
+ it('uses the fallback stale-owner-call section when no stale-owner-call template is configured', () => {
75
+ const fallback = createFallback();
76
+ const composer = new ConfigurableSilentSessionMessageComposer(
77
+ noTemplates,
78
+ fallback,
79
+ );
80
+ expect(
81
+ composer.composeMainStalledWithStaleOwnerCallSection(600, 3600),
82
+ ).toBe('FALLBACK_STALE_OWNER_CALL');
83
+ expect(
84
+ fallback.composeMainStalledWithStaleOwnerCallSection,
85
+ ).toHaveBeenCalledWith(600, 3600);
86
+ });
87
+
88
+ it('uses the configured stale-owner-call template when provided', () => {
89
+ const fallback = createFallback();
90
+ const composer = new ConfigurableSilentSessionMessageComposer(
91
+ {
92
+ ...noTemplates,
93
+ mainStalledStaleOwnerCallMessage: 'CUSTOM_STALE_OWNER_CALL',
94
+ },
95
+ fallback,
96
+ '<<OWNER_CALL>>',
97
+ );
98
+ const section = composer.composeMainStalledWithStaleOwnerCallSection(
99
+ 600,
100
+ 3600,
101
+ );
102
+ expect(section).toContain('CUSTOM_STALE_OWNER_CALL');
103
+ expect(section).toContain(SILENT_SESSION_REMINDER_SENTINEL);
104
+ expect(section).toContain(
105
+ 'the configured owner-call marker tag "<<OWNER_CALL>>" as a complete matching pair',
106
+ );
107
+ expect(
108
+ fallback.composeMainStalledWithStaleOwnerCallSection,
109
+ ).not.toHaveBeenCalled();
110
+ });
111
+
70
112
  it('uses the fallback sub-agent section when no sub-agent template is configured', () => {
71
113
  const fallback = createFallback();
72
114
  const composer = new ConfigurableSilentSessionMessageComposer(
@@ -13,6 +13,7 @@ const withReminderSentinel = (message: string): string =>
13
13
 
14
14
  export type SilentSessionMessageTemplates = {
15
15
  mainStalledMessage: string | null;
16
+ mainStalledStaleOwnerCallMessage: string | null;
16
17
  subAgentIdleMessageHeader: string | null;
17
18
  subAgentIdleMessageFooter: string | null;
18
19
  subAgentLongRunningMessageHeader: string | null;
@@ -40,6 +41,21 @@ export class ConfigurableSilentSessionMessageComposer implements SilentSessionMe
40
41
  );
41
42
  };
42
43
 
44
+ composeMainStalledWithStaleOwnerCallSection = (
45
+ mainSilentSeconds: number,
46
+ unansweredOwnerCallAgeSeconds: number,
47
+ ): string => {
48
+ if (this.templates.mainStalledStaleOwnerCallMessage === null) {
49
+ return this.fallback.composeMainStalledWithStaleOwnerCallSection(
50
+ mainSilentSeconds,
51
+ unansweredOwnerCallAgeSeconds,
52
+ );
53
+ }
54
+ return withReminderSentinel(
55
+ `${this.templates.mainStalledStaleOwnerCallMessage} ${composeOwnerCallFormatGuidance(this.ownerCallMarker)}`,
56
+ );
57
+ };
58
+
43
59
  composeSubAgentSection = (stallSections: SubAgentStallSections): string => {
44
60
  const hasIdleTemplate =
45
61
  this.templates.subAgentIdleMessageHeader !== null ||
@@ -506,7 +506,7 @@ describe('parent transcript resolution feeding owner-call detection', () => {
506
506
  ]);
507
507
 
508
508
  return ownerCallStatusProvider
509
- .listSessionNamesWithUnansweredOwnerCall(transcriptPaths)
509
+ .listUnansweredOwnerCallEpochSecondsBySessionName(transcriptPaths)
510
510
  .then((waiting) => {
511
511
  expect(waiting.has('waiting')).toBe(true);
512
512
  });
@@ -3,12 +3,13 @@ import { NoUnansweredOwnerCallStatusProvider } from './NoUnansweredOwnerCallStat
3
3
  describe('NoUnansweredOwnerCallStatusProvider', () => {
4
4
  it('always reports no session as having an unanswered owner call', async () => {
5
5
  const provider = new NoUnansweredOwnerCallStatusProvider();
6
- const result = await provider.listSessionNamesWithUnansweredOwnerCall(
7
- new Map([
8
- ['session-a', '/transcripts/a.jsonl'],
9
- ['session-b', '/transcripts/b.jsonl'],
10
- ]),
11
- );
6
+ const result =
7
+ await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
8
+ new Map([
9
+ ['session-a', '/transcripts/a.jsonl'],
10
+ ['session-b', '/transcripts/b.jsonl'],
11
+ ]),
12
+ );
12
13
  expect(result.size).toBe(0);
13
14
  });
14
15
  });
@@ -1,9 +1,9 @@
1
1
  import { OwnerCallStatusProvider } from '../../domain/usecases/adapter-interfaces/OwnerCallStatusProvider';
2
2
 
3
3
  export class NoUnansweredOwnerCallStatusProvider implements OwnerCallStatusProvider {
4
- listSessionNamesWithUnansweredOwnerCall = (
4
+ listUnansweredOwnerCallEpochSecondsBySessionName = (
5
5
  _transcriptPathBySessionName: Map<string, string>,
6
- ): Promise<Set<string>> => {
7
- return Promise.resolve(new Set<string>());
6
+ ): Promise<Map<string, number>> => {
7
+ return Promise.resolve(new Map<string, number>());
8
8
  };
9
9
  }