github-issue-tower-defence-management 1.139.0 → 1.139.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +2 -2
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +9 -2
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +5 -2
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
- package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js +125 -0
- package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js.map +1 -0
- package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js +4 -1
- package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js.map +1 -1
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +48 -1
- package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
- package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +5 -0
- package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +30 -0
- package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +8 -0
- package/src/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.test.ts +127 -0
- package/src/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.ts +108 -0
- package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +23 -2
- package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +5 -1
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +218 -8
- package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +60 -0
- package/src/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.ts +10 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +1 -0
- package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
- package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts +16 -0
- package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts.map +1 -0
- package/types/adapter/repositories/TmuxSilentSessionNotificationRepository.d.ts.map +1 -1
- package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts +3 -1
- package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts +11 -0
- package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts.map +1 -0
|
@@ -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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SilentSessionNotifiedStateRepository.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -128,6 +128,7 @@ export class HandleScheduledEventUseCaseHandler {
|
|
|
128
128
|
silentNotificationStaggerSeconds?: number;
|
|
129
129
|
candidateDebounceRecencyWindowSeconds?: number;
|
|
130
130
|
candidateDebounceStateFilePath?: string;
|
|
131
|
+
notifiedStateFilePath?: string;
|
|
131
132
|
activeHubTaskStatus?: string;
|
|
132
133
|
hubTaskStatusCacheStateFilePath?: string;
|
|
133
134
|
hubTaskStatusCacheTtlSeconds?: number;
|
|
@@ -654,6 +655,10 @@ export class HandleScheduledEventUseCaseHandler {
|
|
|
654
655
|
mergedInput.candidateDebounceStateFilePath ??
|
|
655
656
|
process.env.TDPM_SILENT_CANDIDATE_DEBOUNCE_STATE_FILE_PATH ??
|
|
656
657
|
null,
|
|
658
|
+
notifiedStateFilePath:
|
|
659
|
+
mergedInput.notifiedStateFilePath ??
|
|
660
|
+
process.env.TDPM_SILENT_NOTIFIED_STATE_FILE_PATH ??
|
|
661
|
+
null,
|
|
657
662
|
activeHubTaskStatus:
|
|
658
663
|
mergedInput.activeHubTaskStatus ??
|
|
659
664
|
process.env.TDPM_ACTIVE_HUB_TASK_STATUS ??
|
|
@@ -40,6 +40,7 @@ const createMockRunner = (): Mocked<LocalCommandRunner> => ({
|
|
|
40
40
|
describe('notifySilentTmuxSessions', () => {
|
|
41
41
|
let configDir: string;
|
|
42
42
|
let candidateStateFilePath: string;
|
|
43
|
+
let notifiedStateFilePath: string;
|
|
43
44
|
let hubTaskStatusCacheStateFilePath: string;
|
|
44
45
|
|
|
45
46
|
beforeEach(() => {
|
|
@@ -49,6 +50,10 @@ describe('notifySilentTmuxSessions', () => {
|
|
|
49
50
|
configDir,
|
|
50
51
|
'silent-session-candidates.json',
|
|
51
52
|
);
|
|
53
|
+
notifiedStateFilePath = path.join(
|
|
54
|
+
configDir,
|
|
55
|
+
'silent-session-notified.json',
|
|
56
|
+
);
|
|
52
57
|
hubTaskStatusCacheStateFilePath = path.join(
|
|
53
58
|
configDir,
|
|
54
59
|
'silent-session-hub-task-status.json',
|
|
@@ -141,6 +146,7 @@ describe('notifySilentTmuxSessions', () => {
|
|
|
141
146
|
subAgentTranscriptRootDirectory: null,
|
|
142
147
|
subAgentRuntimeRootDirectory: null,
|
|
143
148
|
candidateDebounceStateFilePath: candidateStateFilePath,
|
|
149
|
+
notifiedStateFilePath: notifiedStateFilePath,
|
|
144
150
|
activeHubTaskStatus: null,
|
|
145
151
|
hubTaskStatusResolver: null,
|
|
146
152
|
hubTaskStatusCacheStateFilePath: hubTaskStatusCacheStateFilePath,
|
|
@@ -161,6 +167,30 @@ describe('notifySilentTmuxSessions', () => {
|
|
|
161
167
|
);
|
|
162
168
|
expect(sendCall?.[1][2]).toBe(SESSION_NAME);
|
|
163
169
|
expect(sendCall?.[1][4]).toContain('No output has been observed for');
|
|
170
|
+
expect(sendCall?.[1][4].startsWith('\x1b[200~')).toBe(true);
|
|
171
|
+
expect(sendCall?.[1][4].endsWith('\x1b[201~')).toBe(true);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('notifies a persistent stall only once across repeated cycles (fire-once)', async () => {
|
|
175
|
+
silentAssistantTranscript();
|
|
176
|
+
seedPreviousCandidates([SESSION_NAME]);
|
|
177
|
+
|
|
178
|
+
const firstRunner = liveSessionRunner();
|
|
179
|
+
await notifySilentTmuxSessions(baseParams(firstRunner));
|
|
180
|
+
const firstSendCall = firstRunner.runCommand.mock.calls.find(
|
|
181
|
+
(call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
|
|
182
|
+
);
|
|
183
|
+
expect(firstSendCall?.[1][2]).toBe(SESSION_NAME);
|
|
184
|
+
|
|
185
|
+
const secondRunner = liveSessionRunner();
|
|
186
|
+
await notifySilentTmuxSessions({
|
|
187
|
+
...baseParams(secondRunner),
|
|
188
|
+
now: new Date(NOW.getTime() + 90 * 1000),
|
|
189
|
+
});
|
|
190
|
+
const secondSendCall = secondRunner.runCommand.mock.calls.find(
|
|
191
|
+
(call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
|
|
192
|
+
);
|
|
193
|
+
expect(secondSendCall).toBeUndefined();
|
|
164
194
|
});
|
|
165
195
|
|
|
166
196
|
it('does not notify a silent github-named live session on its first candidate cycle', async () => {
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
} from '../../repositories/ConfigurableSilentSessionMessageComposer';
|
|
35
35
|
import { RealSleeper } from '../../repositories/RealSleeper';
|
|
36
36
|
import { FileSystemSilentSessionCandidateStateRepository } from '../../repositories/FileSystemSilentSessionCandidateStateRepository';
|
|
37
|
+
import { FileSystemSilentSessionNotifiedStateRepository } from '../../repositories/FileSystemSilentSessionNotifiedStateRepository';
|
|
37
38
|
import { FileSystemSilentSessionHubTaskStatusCacheRepository } from '../../repositories/FileSystemSilentSessionHubTaskStatusCacheRepository';
|
|
38
39
|
|
|
39
40
|
export type NotifySilentTmuxSessionsParams = {
|
|
@@ -52,6 +53,7 @@ export type NotifySilentTmuxSessionsParams = {
|
|
|
52
53
|
staggerSeconds: number;
|
|
53
54
|
candidateDebounceRecencyWindowSeconds: number;
|
|
54
55
|
candidateDebounceStateFilePath: string | null;
|
|
56
|
+
notifiedStateFilePath: string | null;
|
|
55
57
|
activeHubTaskStatus: string | null;
|
|
56
58
|
hubTaskStatusResolver: HubTaskStatusResolver | null;
|
|
57
59
|
hubTaskStatusCacheStateFilePath: string | null;
|
|
@@ -116,6 +118,7 @@ export const notifySilentTmuxSessions = async (
|
|
|
116
118
|
staggerSeconds,
|
|
117
119
|
candidateDebounceRecencyWindowSeconds,
|
|
118
120
|
candidateDebounceStateFilePath,
|
|
121
|
+
notifiedStateFilePath,
|
|
119
122
|
activeHubTaskStatus,
|
|
120
123
|
hubTaskStatusResolver,
|
|
121
124
|
hubTaskStatusCacheStateFilePath,
|
|
@@ -155,6 +158,11 @@ export const notifySilentTmuxSessions = async (
|
|
|
155
158
|
candidateDebounceStateFilePath,
|
|
156
159
|
)
|
|
157
160
|
: new FileSystemSilentSessionCandidateStateRepository(),
|
|
161
|
+
notifiedStateFilePath !== null
|
|
162
|
+
? new FileSystemSilentSessionNotifiedStateRepository(
|
|
163
|
+
notifiedStateFilePath,
|
|
164
|
+
)
|
|
165
|
+
: new FileSystemSilentSessionNotifiedStateRepository(),
|
|
158
166
|
messageComposer,
|
|
159
167
|
new RealSleeper(),
|
|
160
168
|
hubTaskStatusResolver,
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { FileSystemSilentSessionNotifiedStateRepository } from './FileSystemSilentSessionNotifiedStateRepository';
|
|
5
|
+
|
|
6
|
+
describe('FileSystemSilentSessionNotifiedStateRepository', () => {
|
|
7
|
+
let rootDirectory: string;
|
|
8
|
+
let stateFilePath: string;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
rootDirectory = fs.mkdtempSync(
|
|
12
|
+
path.join(os.tmpdir(), 'silent-session-notified-state-'),
|
|
13
|
+
);
|
|
14
|
+
stateFilePath = path.join(rootDirectory, 'silent-session-notified.json');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
fs.rmSync(rootDirectory, { force: true, recursive: true });
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const sessionAlpha = 'https://github.com/HiromiShikata/repo/issues/100';
|
|
22
|
+
const sessionBravo = 'https://github.com/HiromiShikata/repo/issues/200';
|
|
23
|
+
|
|
24
|
+
it('round-trips a saved notified set so the next cycle reads it back', async () => {
|
|
25
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
26
|
+
stateFilePath,
|
|
27
|
+
);
|
|
28
|
+
const now = new Date('2026-06-26T00:00:00Z');
|
|
29
|
+
|
|
30
|
+
await repository.saveNotifiedSessionNames({
|
|
31
|
+
sessionNames: [sessionAlpha, sessionBravo],
|
|
32
|
+
now,
|
|
33
|
+
});
|
|
34
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
35
|
+
now: new Date('2026-06-26T00:01:00Z'),
|
|
36
|
+
recencyWindowSeconds: 15 * 60,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(loaded).toEqual(new Set([sessionAlpha, sessionBravo]));
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('returns an empty set when no state file exists yet', async () => {
|
|
43
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
44
|
+
stateFilePath,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
48
|
+
now: new Date('2026-06-26T00:00:00Z'),
|
|
49
|
+
recencyWindowSeconds: 15 * 60,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
expect(loaded).toEqual(new Set<string>());
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('excludes an entry older than the recency window when loading', async () => {
|
|
56
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
57
|
+
stateFilePath,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
await repository.saveNotifiedSessionNames({
|
|
61
|
+
sessionNames: [sessionAlpha],
|
|
62
|
+
now: new Date('2026-06-26T00:00:00Z'),
|
|
63
|
+
});
|
|
64
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
65
|
+
now: new Date('2026-06-26T00:20:00Z'),
|
|
66
|
+
recencyWindowSeconds: 15 * 60,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
expect(loaded).toEqual(new Set<string>());
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('overwrites the latch on save so a pruned session no longer lingers', async () => {
|
|
73
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
74
|
+
stateFilePath,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
await repository.saveNotifiedSessionNames({
|
|
78
|
+
sessionNames: [sessionAlpha, sessionBravo],
|
|
79
|
+
now: new Date('2026-06-26T00:00:00Z'),
|
|
80
|
+
});
|
|
81
|
+
await repository.saveNotifiedSessionNames({
|
|
82
|
+
sessionNames: [sessionAlpha],
|
|
83
|
+
now: new Date('2026-06-26T00:01:30Z'),
|
|
84
|
+
});
|
|
85
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
86
|
+
now: new Date('2026-06-26T00:02:00Z'),
|
|
87
|
+
recencyWindowSeconds: 15 * 60,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
expect(loaded).toEqual(new Set([sessionAlpha]));
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('refreshes the recorded timestamp on each save so a continuously latched session stays within the window', async () => {
|
|
94
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
95
|
+
stateFilePath,
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
await repository.saveNotifiedSessionNames({
|
|
99
|
+
sessionNames: [sessionAlpha],
|
|
100
|
+
now: new Date('2026-06-26T00:00:00Z'),
|
|
101
|
+
});
|
|
102
|
+
await repository.saveNotifiedSessionNames({
|
|
103
|
+
sessionNames: [sessionAlpha],
|
|
104
|
+
now: new Date('2026-06-26T00:14:00Z'),
|
|
105
|
+
});
|
|
106
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
107
|
+
now: new Date('2026-06-26T00:20:00Z'),
|
|
108
|
+
recencyWindowSeconds: 15 * 60,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
expect(loaded).toEqual(new Set([sessionAlpha]));
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('returns an empty set when the state file is not valid JSON', async () => {
|
|
115
|
+
fs.writeFileSync(stateFilePath, 'not json');
|
|
116
|
+
const repository = new FileSystemSilentSessionNotifiedStateRepository(
|
|
117
|
+
stateFilePath,
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
const loaded = await repository.loadRecentNotifiedSessionNames({
|
|
121
|
+
now: new Date('2026-06-26T00:00:00Z'),
|
|
122
|
+
recencyWindowSeconds: 15 * 60,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
expect(loaded).toEqual(new Set<string>());
|
|
126
|
+
});
|
|
127
|
+
});
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { SilentSessionNotifiedStateRepository } from '../../domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository';
|
|
5
|
+
|
|
6
|
+
type StoredNotifiedEntry = {
|
|
7
|
+
sessionName: string;
|
|
8
|
+
recordedEpochSeconds: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
12
|
+
typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
|
|
14
|
+
const defaultStateFilePath = (): string => {
|
|
15
|
+
const base = process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), '.cache');
|
|
16
|
+
return path.join(base, 'tdpm', 'silent-session-notified.json');
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Persists the fire-once latch: the set of session names that have already
|
|
20
|
+
// received the current silent-episode reminder. The use case re-writes the
|
|
21
|
+
// full latch each cycle with the current timestamp, keeping a session latched
|
|
22
|
+
// for as long as it stays a reminder candidate (a continuous silent episode
|
|
23
|
+
// produces exactly one reminder), and prunes a session the moment it stops
|
|
24
|
+
// being a candidate so a later re-qualification fires again. The save
|
|
25
|
+
// intentionally OVERWRITES rather than merges: the use case supplies the
|
|
26
|
+
// complete latch to persist, so a pruned session must not linger.
|
|
27
|
+
export class FileSystemSilentSessionNotifiedStateRepository implements SilentSessionNotifiedStateRepository {
|
|
28
|
+
constructor(
|
|
29
|
+
private readonly stateFilePath: string = defaultStateFilePath(),
|
|
30
|
+
) {}
|
|
31
|
+
|
|
32
|
+
loadRecentNotifiedSessionNames = async (params: {
|
|
33
|
+
now: Date;
|
|
34
|
+
recencyWindowSeconds: number;
|
|
35
|
+
}): Promise<Set<string>> => {
|
|
36
|
+
const nowEpochSeconds = Math.floor(params.now.getTime() / 1000);
|
|
37
|
+
const oldestAllowedEpochSeconds =
|
|
38
|
+
nowEpochSeconds - params.recencyWindowSeconds;
|
|
39
|
+
const recentSessionNames = new Set<string>();
|
|
40
|
+
for (const entry of this.readNotifiedEntries()) {
|
|
41
|
+
if (entry.recordedEpochSeconds >= oldestAllowedEpochSeconds) {
|
|
42
|
+
recentSessionNames.add(entry.sessionName);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return recentSessionNames;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
saveNotifiedSessionNames = async (params: {
|
|
49
|
+
sessionNames: string[];
|
|
50
|
+
now: Date;
|
|
51
|
+
}): Promise<void> => {
|
|
52
|
+
const recordedEpochSeconds = Math.floor(params.now.getTime() / 1000);
|
|
53
|
+
const notifiedBySessionName = new Map<string, StoredNotifiedEntry>();
|
|
54
|
+
for (const sessionName of params.sessionNames) {
|
|
55
|
+
notifiedBySessionName.set(sessionName, {
|
|
56
|
+
sessionName,
|
|
57
|
+
recordedEpochSeconds,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this.writeState(Array.from(notifiedBySessionName.values()));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
private readNotifiedEntries = (): StoredNotifiedEntry[] => {
|
|
64
|
+
let raw: string;
|
|
65
|
+
try {
|
|
66
|
+
raw = fs.readFileSync(this.stateFilePath, 'utf8');
|
|
67
|
+
} catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
let parsed: unknown;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(raw);
|
|
73
|
+
} catch {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
if (!isRecord(parsed)) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const storedEntries = parsed.notified;
|
|
80
|
+
if (!Array.isArray(storedEntries)) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const entries: StoredNotifiedEntry[] = [];
|
|
84
|
+
for (const storedEntry of storedEntries) {
|
|
85
|
+
if (!isRecord(storedEntry)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const sessionName = storedEntry.sessionName;
|
|
89
|
+
const recordedEpochSeconds = storedEntry.recordedEpochSeconds;
|
|
90
|
+
if (
|
|
91
|
+
typeof sessionName === 'string' &&
|
|
92
|
+
typeof recordedEpochSeconds === 'number' &&
|
|
93
|
+
Number.isFinite(recordedEpochSeconds)
|
|
94
|
+
) {
|
|
95
|
+
entries.push({ sessionName, recordedEpochSeconds });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return entries;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
private writeState = (notified: StoredNotifiedEntry[]): void => {
|
|
102
|
+
const directory = path.dirname(this.stateFilePath);
|
|
103
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
104
|
+
const temporaryPath = `${this.stateFilePath}.${process.pid}.tmp`;
|
|
105
|
+
fs.writeFileSync(temporaryPath, JSON.stringify({ notified }));
|
|
106
|
+
fs.renameSync(temporaryPath, this.stateFilePath);
|
|
107
|
+
};
|
|
108
|
+
}
|
|
@@ -13,7 +13,7 @@ const createMockRunner = (): Mocked<LocalCommandRunner> => ({
|
|
|
13
13
|
|
|
14
14
|
describe('TmuxSilentSessionNotificationRepository', () => {
|
|
15
15
|
describe('sendSelfCheckNotification', () => {
|
|
16
|
-
it('
|
|
16
|
+
it('wraps the message in bracketed-paste framing, sends it literally, then submits it with Enter', async () => {
|
|
17
17
|
const runner = createMockRunner();
|
|
18
18
|
const repository = new TmuxSilentSessionNotificationRepository(runner);
|
|
19
19
|
|
|
@@ -29,7 +29,7 @@ describe('TmuxSilentSessionNotificationRepository', () => {
|
|
|
29
29
|
'-t',
|
|
30
30
|
'https_//github_com/owner/repo/issues/9',
|
|
31
31
|
'-l',
|
|
32
|
-
'self check message',
|
|
32
|
+
'\x1b[200~self check message\x1b[201~',
|
|
33
33
|
],
|
|
34
34
|
]);
|
|
35
35
|
expect(runner.runCommand.mock.calls[1]).toEqual([
|
|
@@ -38,6 +38,27 @@ describe('TmuxSilentSessionNotificationRepository', () => {
|
|
|
38
38
|
]);
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
+
it('preserves an unchanged multi-line message body inside the bracketed-paste frame', async () => {
|
|
42
|
+
const runner = createMockRunner();
|
|
43
|
+
const repository = new TmuxSilentSessionNotificationRepository(runner);
|
|
44
|
+
const multiLineMessage = 'first line\nsecond line\n\nthird line';
|
|
45
|
+
|
|
46
|
+
await repository.sendSelfCheckNotification(
|
|
47
|
+
'https_//github_com/owner/repo/issues/9',
|
|
48
|
+
multiLineMessage,
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const literalArgument = runner.runCommand.mock.calls[0][1][4];
|
|
52
|
+
expect(literalArgument.startsWith('\x1b[200~')).toBe(true);
|
|
53
|
+
expect(literalArgument.endsWith('\x1b[201~')).toBe(true);
|
|
54
|
+
expect(
|
|
55
|
+
literalArgument.slice('\x1b[200~'.length, -'\x1b[201~'.length),
|
|
56
|
+
).toBe(multiLineMessage);
|
|
57
|
+
const literalBytes = Buffer.from(literalArgument, 'utf8').toString('hex');
|
|
58
|
+
expect(literalBytes.startsWith('1b5b3230307e')).toBe(true);
|
|
59
|
+
expect(literalBytes.endsWith('1b5b3230317e')).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
41
62
|
it('throws when sending the message literally fails', async () => {
|
|
42
63
|
const runner = createMockRunner();
|
|
43
64
|
runner.runCommand.mockResolvedValueOnce({
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { SilentSessionNotificationRepository } from '../../domain/usecases/adapter-interfaces/SilentSessionNotificationRepository';
|
|
2
2
|
import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
|
|
3
3
|
|
|
4
|
+
const BRACKETED_PASTE_START = '\x1b[200~';
|
|
5
|
+
const BRACKETED_PASTE_END = '\x1b[201~';
|
|
6
|
+
|
|
4
7
|
export class TmuxSilentSessionNotificationRepository implements SilentSessionNotificationRepository {
|
|
5
8
|
constructor(private readonly localCommandRunner: LocalCommandRunner) {}
|
|
6
9
|
|
|
@@ -8,12 +11,13 @@ export class TmuxSilentSessionNotificationRepository implements SilentSessionNot
|
|
|
8
11
|
sessionName: string,
|
|
9
12
|
message: string,
|
|
10
13
|
): Promise<void> => {
|
|
14
|
+
const framedMessage = `${BRACKETED_PASTE_START}${message}${BRACKETED_PASTE_END}`;
|
|
11
15
|
const literalResult = await this.localCommandRunner.runCommand('tmux', [
|
|
12
16
|
'send-keys',
|
|
13
17
|
'-t',
|
|
14
18
|
sessionName,
|
|
15
19
|
'-l',
|
|
16
|
-
|
|
20
|
+
framedMessage,
|
|
17
21
|
]);
|
|
18
22
|
if (literalResult.exitCode !== 0) {
|
|
19
23
|
throw new Error(
|