github-issue-tower-defence-management 1.111.1 → 1.111.3

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 (32) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +1 -1
  3. package/bin/adapter/entry-points/console/ui-dist/assets/{index-CT3t4Yje.js → index-Bu5bQZyP.js} +19 -19
  4. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  5. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js +6 -2
  6. package/bin/adapter/repositories/ConfigurableSilentSessionMessageComposer.js.map +1 -1
  7. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js +15 -2
  8. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js.map +1 -1
  9. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js +3 -2
  10. package/bin/domain/usecases/DefaultSilentSessionMessageComposer.js.map +1 -1
  11. package/bin/domain/usecases/silentSessionReminderSentinel.js +12 -0
  12. package/bin/domain/usecases/silentSessionReminderSentinel.js.map +1 -0
  13. package/package.json +1 -1
  14. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +59 -0
  15. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.ts +17 -0
  16. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +79 -0
  17. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +10 -5
  18. package/src/adapter/entry-points/console/ui-dist/assets/{index-CT3t4Yje.js → index-Bu5bQZyP.js} +19 -19
  19. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  20. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +4 -1
  21. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +19 -1
  22. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +8 -2
  23. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +67 -0
  24. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +17 -2
  25. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +13 -0
  26. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +3 -2
  27. package/src/domain/usecases/silentSessionReminderSentinel.ts +9 -0
  28. package/types/adapter/repositories/ConfigurableSilentSessionMessageComposer.d.ts.map +1 -1
  29. package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts.map +1 -1
  30. package/types/domain/usecases/DefaultSilentSessionMessageComposer.d.ts.map +1 -1
  31. package/types/domain/usecases/silentSessionReminderSentinel.d.ts +2 -0
  32. package/types/domain/usecases/silentSessionReminderSentinel.d.ts.map +1 -0
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-CT3t4Yje.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-Bu5bQZyP.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-BPH6W1yn.css">
9
9
  </head>
10
10
  <body>
@@ -6,6 +6,7 @@ import { ProcessEnvironReader } from '../../../domain/usecases/adapter-interface
6
6
  import { LocalStorageCacheRepository } from '../../repositories/LocalStorageCacheRepository';
7
7
  import { LocalStorageRepository } from '../../repositories/LocalStorageRepository';
8
8
  import { SilentSessionMessageTemplates } from '../../repositories/ConfigurableSilentSessionMessageComposer';
9
+ import { SILENT_SESSION_REMINDER_SENTINEL } from '../../../domain/usecases/silentSessionReminderSentinel';
9
10
  import {
10
11
  notifySilentTmuxSessions,
11
12
  DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS,
@@ -170,7 +171,9 @@ describe('notifySilentTmuxSessions', () => {
170
171
  const sendCall = runner.runCommand.mock.calls.find(
171
172
  (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
172
173
  );
173
- expect(sendCall?.[1][4]).toBe('CUSTOM_MAIN_TEMPLATE');
174
+ expect(sendCall?.[1][4]).toBe(
175
+ `${SILENT_SESSION_REMINDER_SENTINEL} CUSTOM_MAIN_TEMPLATE`,
176
+ );
174
177
  });
175
178
 
176
179
  it('suppresses the main stalled notification when the transcript shows an unanswered owner call', async () => {
@@ -1,5 +1,6 @@
1
1
  import { ConfigurableSilentSessionMessageComposer } from './ConfigurableSilentSessionMessageComposer';
2
2
  import { SilentSessionMessageComposer } from '../../domain/usecases/adapter-interfaces/SilentSessionMessageComposer';
3
+ import { SILENT_SESSION_REMINDER_SENTINEL } from '../../domain/usecases/silentSessionReminderSentinel';
3
4
 
4
5
  type Mocked<T> = jest.Mocked<T> & jest.MockedObject<T>;
5
6
 
@@ -33,7 +34,9 @@ describe('ConfigurableSilentSessionMessageComposer', () => {
33
34
  },
34
35
  fallback,
35
36
  );
36
- expect(composer.composeMainStalledSection(600)).toBe('CUSTOM_MAIN');
37
+ const section = composer.composeMainStalledSection(600);
38
+ expect(section).toContain('CUSTOM_MAIN');
39
+ expect(section).toContain(SILENT_SESSION_REMINDER_SENTINEL);
37
40
  expect(fallback.composeMainStalledSection).not.toHaveBeenCalled();
38
41
  });
39
42
 
@@ -72,6 +75,21 @@ describe('ConfigurableSilentSessionMessageComposer', () => {
72
75
  expect(section).toContain('silent for 6m');
73
76
  expect(section).toContain('running for 20m');
74
77
  expect(section).toContain('FOOTER');
78
+ expect(section).toContain(SILENT_SESSION_REMINDER_SENTINEL);
75
79
  expect(fallback.composeSubAgentSection).not.toHaveBeenCalled();
76
80
  });
81
+
82
+ it('does not double-prepend the sentinel when the template already carries it', () => {
83
+ const fallback = createFallback();
84
+ const composer = new ConfigurableSilentSessionMessageComposer(
85
+ {
86
+ mainStalledMessage: `${SILENT_SESSION_REMINDER_SENTINEL} CUSTOM_MAIN`,
87
+ subAgentMessageHeader: null,
88
+ subAgentMessageFooter: null,
89
+ },
90
+ fallback,
91
+ );
92
+ const section = composer.composeMainStalledSection(600);
93
+ expect(section).toBe(`${SILENT_SESSION_REMINDER_SENTINEL} CUSTOM_MAIN`);
94
+ });
77
95
  });
@@ -1,5 +1,11 @@
1
1
  import { SubAgentActivity } from '../../domain/entities/LiveSessionActivitySnapshot';
2
2
  import { SilentSessionMessageComposer } from '../../domain/usecases/adapter-interfaces/SilentSessionMessageComposer';
3
+ import { SILENT_SESSION_REMINDER_SENTINEL } from '../../domain/usecases/silentSessionReminderSentinel';
4
+
5
+ const withReminderSentinel = (message: string): string =>
6
+ message.includes(SILENT_SESSION_REMINDER_SENTINEL)
7
+ ? message
8
+ : `${SILENT_SESSION_REMINDER_SENTINEL} ${message}`;
3
9
 
4
10
  export type SilentSessionMessageTemplates = {
5
11
  mainStalledMessage: string | null;
@@ -22,7 +28,7 @@ export class ConfigurableSilentSessionMessageComposer implements SilentSessionMe
22
28
  if (this.templates.mainStalledMessage === null) {
23
29
  return this.fallback.composeMainStalledSection(mainSilentSeconds);
24
30
  }
25
- return this.templates.mainStalledMessage;
31
+ return withReminderSentinel(this.templates.mainStalledMessage);
26
32
  };
27
33
 
28
34
  composeSubAgentSection = (subAgents: SubAgentActivity[]): string => {
@@ -46,6 +52,6 @@ export class ConfigurableSilentSessionMessageComposer implements SilentSessionMe
46
52
  if (this.templates.subAgentMessageFooter !== null) {
47
53
  sections.push(this.templates.subAgentMessageFooter);
48
54
  }
49
- return sections.join('\n');
55
+ return withReminderSentinel(sections.join('\n'));
50
56
  };
51
57
  }
@@ -2,6 +2,7 @@ import * as fs from 'fs';
2
2
  import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import { TranscriptOwnerCallStatusProvider } from './TranscriptOwnerCallStatusProvider';
5
+ import { SILENT_SESSION_REMINDER_SENTINEL } from '../../domain/usecases/silentSessionReminderSentinel';
5
6
 
6
7
  describe('TranscriptOwnerCallStatusProvider', () => {
7
8
  let rootDirectory: string;
@@ -63,6 +64,29 @@ describe('TranscriptOwnerCallStatusProvider', () => {
63
64
  },
64
65
  });
65
66
 
67
+ const injectedReminderStringContent = (timestamp: string): object => ({
68
+ type: 'user',
69
+ timestamp,
70
+ message: {
71
+ role: 'user',
72
+ content: `${SILENT_SESSION_REMINDER_SENTINEL} You have produced no output for 10 minutes. Self-check now:`,
73
+ },
74
+ });
75
+
76
+ const injectedReminderBlockContent = (timestamp: string): object => ({
77
+ type: 'user',
78
+ timestamp,
79
+ message: {
80
+ role: 'user',
81
+ content: [
82
+ {
83
+ type: 'text',
84
+ text: `${SILENT_SESSION_REMINDER_SENTINEL} The following sub-processes have been silent or running for a long time:`,
85
+ },
86
+ ],
87
+ },
88
+ });
89
+
66
90
  const sessionName = 'workbench';
67
91
 
68
92
  it('reports a session as waiting when the last owner call is newer than the last owner reply', async () => {
@@ -121,6 +145,49 @@ describe('TranscriptOwnerCallStatusProvider', () => {
121
145
  expect(result.has(sessionName)).toBe(true);
122
146
  });
123
147
 
148
+ it('does not count a monitor-injected reminder with string content as an owner reply', async () => {
149
+ const transcriptPath = writeTranscript('workbench.jsonl', [
150
+ assistantWithMarker('2026-06-27T10:00:00.000Z'),
151
+ injectedReminderStringContent('2026-06-27T10:10:00.000Z'),
152
+ ]);
153
+ const provider = new TranscriptOwnerCallStatusProvider('<<OWNER_CALL>>');
154
+
155
+ const result = await provider.listSessionNamesWithUnansweredOwnerCall(
156
+ new Map([[sessionName, transcriptPath]]),
157
+ );
158
+
159
+ expect(result.has(sessionName)).toBe(true);
160
+ });
161
+
162
+ it('does not count a monitor-injected reminder with text-block content as an owner reply', async () => {
163
+ const transcriptPath = writeTranscript('workbench.jsonl', [
164
+ assistantWithMarker('2026-06-27T10:00:00.000Z'),
165
+ injectedReminderBlockContent('2026-06-27T10:10:00.000Z'),
166
+ ]);
167
+ const provider = new TranscriptOwnerCallStatusProvider('<<OWNER_CALL>>');
168
+
169
+ const result = await provider.listSessionNamesWithUnansweredOwnerCall(
170
+ new Map([[sessionName, transcriptPath]]),
171
+ );
172
+
173
+ expect(result.has(sessionName)).toBe(true);
174
+ });
175
+
176
+ it('still counts a genuine owner reply that arrives after a monitor-injected reminder', async () => {
177
+ const transcriptPath = writeTranscript('workbench.jsonl', [
178
+ assistantWithMarker('2026-06-27T10:00:00.000Z'),
179
+ injectedReminderStringContent('2026-06-27T10:10:00.000Z'),
180
+ ownerReply('2026-06-27T10:20:00.000Z'),
181
+ ]);
182
+ const provider = new TranscriptOwnerCallStatusProvider('<<OWNER_CALL>>');
183
+
184
+ const result = await provider.listSessionNamesWithUnansweredOwnerCall(
185
+ new Map([[sessionName, transcriptPath]]),
186
+ );
187
+
188
+ expect(result.has(sessionName)).toBe(false);
189
+ });
190
+
124
191
  it('does not report a session that never raised an owner call', async () => {
125
192
  const transcriptPath = writeTranscript('workbench.jsonl', [
126
193
  assistantPlain('2026-06-27T10:00:00.000Z'),
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import { OwnerCallStatusProvider } from '../../domain/usecases/adapter-interfaces/OwnerCallStatusProvider';
3
+ import { SILENT_SESSION_REMINDER_SENTINEL } from '../../domain/usecases/silentSessionReminderSentinel';
3
4
 
4
5
  const isRecord = (value: unknown): value is Record<string, unknown> =>
5
6
  typeof value === 'object' && value !== null;
@@ -41,12 +42,26 @@ const extractText = (content: unknown): string => {
41
42
 
42
43
  const hasOwnerTextReply = (content: unknown): boolean => {
43
44
  if (typeof content === 'string') {
44
- return content.length > 0;
45
+ if (content.length === 0) {
46
+ return false;
47
+ }
48
+ // A monitor-injected self-check reminder lands in the target session's
49
+ // transcript as a user text entry. It carries the reminder sentinel, so it
50
+ // is the monitor talking to the session, not the owner replying. It MUST NOT
51
+ // advance the last-owner-reply time, otherwise an outstanding call-to-user
52
+ // is wrongly treated as answered and the session stops being suppressed.
53
+ return !content.includes(SILENT_SESSION_REMINDER_SENTINEL);
45
54
  }
46
55
  if (!Array.isArray(content)) {
47
56
  return false;
48
57
  }
49
- return content.some((block) => isRecord(block) && block.type === 'text');
58
+ const hasTextBlock = content.some(
59
+ (block) => isRecord(block) && block.type === 'text',
60
+ );
61
+ if (!hasTextBlock) {
62
+ return false;
63
+ }
64
+ return !extractText(content).includes(SILENT_SESSION_REMINDER_SENTINEL);
50
65
  };
51
66
 
52
67
  export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvider {
@@ -1,8 +1,21 @@
1
1
  import { DefaultSilentSessionMessageComposer } from './DefaultSilentSessionMessageComposer';
2
+ import { SILENT_SESSION_REMINDER_SENTINEL } from './silentSessionReminderSentinel';
2
3
 
3
4
  describe('DefaultSilentSessionMessageComposer', () => {
4
5
  const composer = new DefaultSilentSessionMessageComposer();
5
6
 
7
+ it('embeds the reminder sentinel in the main-stalled section', () => {
8
+ const section = composer.composeMainStalledSection(600);
9
+ expect(section).toContain(SILENT_SESSION_REMINDER_SENTINEL);
10
+ });
11
+
12
+ it('embeds the reminder sentinel in the sub-agent section', () => {
13
+ const section = composer.composeSubAgentSection([
14
+ { label: 'sub-process-1', silentSeconds: 360, runningSeconds: 1200 },
15
+ ]);
16
+ expect(section).toContain(SILENT_SESSION_REMINDER_SENTINEL);
17
+ });
18
+
6
19
  it('renders the configured main-stalled message with the silent minutes substituted', () => {
7
20
  const section = composer.composeMainStalledSection(600);
8
21
  expect(section).toContain('You have produced no output for 10 minutes.');
@@ -1,5 +1,6 @@
1
1
  import { SubAgentActivity } from '../entities/LiveSessionActivitySnapshot';
2
2
  import { SilentSessionMessageComposer } from './adapter-interfaces/SilentSessionMessageComposer';
3
+ import { SILENT_SESSION_REMINDER_SENTINEL } from './silentSessionReminderSentinel';
3
4
 
4
5
  const formatMinutes = (seconds: number): string => {
5
6
  const minutes = Math.floor(seconds / 60);
@@ -9,7 +10,7 @@ const formatMinutes = (seconds: number): string => {
9
10
  const composeMainStalledMessage = (mainSilentSeconds: number): string => {
10
11
  const minutes = Math.floor(mainSilentSeconds / 60);
11
12
  return [
12
- `You have produced no output for ${minutes} minutes. Idle waiting wastes this live session and is unacceptable. Always work proactively and stay ahead of the work: anticipate the next steps and, at every point, choose the fastest path so the whole task finishes as early as possible; never wait passively. Finish every task in the shortest possible time — but "fastest" means correct and incident-free, not merely quick: a fast but wrong result is worthless and causes incidents, so be fast without breaking things. Use parallel execution and your whole team of sub-agents to minimize total wall-clock time. Your goal is to drive every task to completion and have the owner confirm that all tasks are done. Do NOT close this session on your own — it is closed only after the owner has verified completion and tells you to close it. Self-check now:`,
13
+ `${SILENT_SESSION_REMINDER_SENTINEL} You have produced no output for ${minutes} minutes. Idle waiting wastes this live session and is unacceptable. Always work proactively and stay ahead of the work: anticipate the next steps and, at every point, choose the fastest path so the whole task finishes as early as possible; never wait passively. Finish every task in the shortest possible time — but "fastest" means correct and incident-free, not merely quick: a fast but wrong result is worthless and causes incidents, so be fast without breaking things. Use parallel execution and your whole team of sub-agents to minimize total wall-clock time. Your goal is to drive every task to completion and have the owner confirm that all tasks are done. Do NOT close this session on your own — it is closed only after the owner has verified completion and tells you to close it. Self-check now:`,
13
14
  `1. Every request from the owner is registered as a session task and your task list is kept current (mark tasks completed when done); verify nothing is missing or stale.`,
14
15
  `2. Your plan is the fastest correct path: parallelize independent work across sub-agents, delegate, and remove needless serialization. Choose the fastest safe method, not the easiest.`,
15
16
  `3. A monitor is in place that detects when any sub-agent produces no output for 5 minutes.`,
@@ -31,7 +32,7 @@ export class DefaultSilentSessionMessageComposer implements SilentSessionMessage
31
32
  )}, running for ${formatMinutes(subAgent.runningSeconds)}`,
32
33
  );
33
34
  return [
34
- 'The following sub-processes have been silent or running for a long time:',
35
+ `${SILENT_SESSION_REMINDER_SENTINEL} The following sub-processes have been silent or running for a long time:`,
35
36
  ...lines,
36
37
  'If a sub-process is stalled, take action (restart, hand off, or replace it). If it is legitimately waiting on an external dependency (continuous integration, an external API, or another process), let it continue.',
37
38
  ].join('\n');
@@ -0,0 +1,9 @@
1
+ // Stable, recognizable marker embedded in every monitor-injected silent-session
2
+ // self-check reminder. It lets owner-reply detection distinguish a reminder that
3
+ // the monitor injected into a session's transcript (which arrives as a user text
4
+ // entry via `tmux send-keys`) from a genuine owner reply, so an injected reminder
5
+ // is never miscounted as the owner answering an outstanding call-to-user. The tag
6
+ // is bracketed and namespaced to make an accidental collision with genuine human
7
+ // owner text effectively impossible.
8
+ export const SILENT_SESSION_REMINDER_SENTINEL =
9
+ '[TDPM_SILENT_SESSION_SELF_CHECK_REMINDER]';
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurableSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uEAAuE,CAAC;AAErH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAOF,qBAAa,wCAAyC,YAAW,4BAA4B;IAEzF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,SAAS,EAAE,6BAA6B,EACxC,QAAQ,EAAE,4BAA4B;IAGzD,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAK7D;IAEF,sBAAsB,GAAI,WAAW,gBAAgB,EAAE,KAAG,MAAM,CAsB9D;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;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uEAAuE,CAAC;AAQrH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAOF,qBAAa,wCAAyC,YAAW,4BAA4B;IAEzF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,SAAS,EAAE,6BAA6B,EACxC,QAAQ,EAAE,4BAA4B;IAGzD,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAK7D;IAEF,sBAAsB,GAAI,WAAW,gBAAgB,EAAE,KAAG,MAAM,CAsB9D;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"TranscriptOwnerCallStatusProvider.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kEAAkE,CAAC;AAkD3G,qBAAa,iCAAkC,YAAW,uBAAuB;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,MAAM,GAAG,IAAI;IAE3D,uCAAuC,GACrC,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAYrB;IAEF,OAAO,CAAC,sBAAsB,CAkD5B;CACH"}
1
+ {"version":3,"file":"TranscriptOwnerCallStatusProvider.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kEAAkE,CAAC;AAiE3G,qBAAa,iCAAkC,YAAW,uBAAuB;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,MAAM,GAAG,IAAI;IAE3D,uCAAuC,GACrC,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAYrB;IAEF,OAAO,CAAC,sBAAsB,CAkD5B;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSilentSessionMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AAmBjG,qBAAa,mCAAoC,YAAW,4BAA4B;IACtF,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAE7D;IAEF,sBAAsB,GAAI,WAAW,gBAAgB,EAAE,KAAG,MAAM,CAY9D;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,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AAoBjG,qBAAa,mCAAoC,YAAW,4BAA4B;IACtF,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,CAE7D;IAEF,sBAAsB,GAAI,WAAW,gBAAgB,EAAE,KAAG,MAAM,CAY9D;CACH"}
@@ -0,0 +1,2 @@
1
+ export declare const SILENT_SESSION_REMINDER_SENTINEL = "[TDPM_SILENT_SESSION_SELF_CHECK_REMINDER]";
2
+ //# sourceMappingURL=silentSessionReminderSentinel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silentSessionReminderSentinel.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/silentSessionReminderSentinel.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gCAAgC,8CACA,CAAC"}