github-issue-tower-defence-management 1.148.19 → 1.148.20
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/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js +20 -1
- package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +124 -0
- package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +40 -1
- package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts +1 -0
- package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.148.20](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.148.19...v1.148.20) (2026-08-13)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **owner-call:** wake a session whose owner call was never rendered to the owner ([#1503](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1503)) ([b92b5cc](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/b92b5cc11f47834748b5ec4cc08c11b276e1eded)), closes [#1502](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1502)
|
|
7
|
+
|
|
1
8
|
## [1.148.19](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.148.18...v1.148.19) (2026-08-13)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -153,7 +153,9 @@ const TRANSCRIPT_FILE_EXTENSION = '.jsonl';
|
|
|
153
153
|
const OWNER_REPLY_MARKER_FILE_EXTENSION = '.reply_ts';
|
|
154
154
|
const SUPPRESSED_OWNER_CALL_MARKER_FILE_EXTENSION = '.suppress_ts';
|
|
155
155
|
const APPROVED_OWNER_CALL_MARKER_FILE_EXTENSION = '.call_ts';
|
|
156
|
+
const EMITTED_OWNER_CALL_MARKER_FILE_EXTENSION = '.call_emitted';
|
|
156
157
|
const UNSAFE_SESSION_ID_CHARACTER_PATTERN = /[^A-Za-z0-9._-]/g;
|
|
158
|
+
const isCandidateOwnerCallMarker = (marker) => marker.endsWith(OWNER_CALL_CANDIDATE_TAG_SUFFIX);
|
|
157
159
|
class TranscriptOwnerCallStatusProvider {
|
|
158
160
|
constructor(ownerCallMarker, ownerReplyMarkerDirectory = null) {
|
|
159
161
|
this.ownerReplyMarkerDirectory = ownerReplyMarkerDirectory;
|
|
@@ -179,6 +181,7 @@ class TranscriptOwnerCallStatusProvider {
|
|
|
179
181
|
return null;
|
|
180
182
|
}
|
|
181
183
|
let lastOwnerCallEpochMs = null;
|
|
184
|
+
let lastOwnerCallIsCandidateOnly = false;
|
|
182
185
|
let lastOwnerReplyEpochMs = null;
|
|
183
186
|
for (const line of content.split('\n')) {
|
|
184
187
|
const trimmed = line.trim();
|
|
@@ -204,8 +207,10 @@ class TranscriptOwnerCallStatusProvider {
|
|
|
204
207
|
const messageContent = isRecord(message) ? message.content : null;
|
|
205
208
|
if (type === 'assistant') {
|
|
206
209
|
const assistantText = extractText(messageContent);
|
|
207
|
-
|
|
210
|
+
const matchedMarkers = markerFamily.filter((marker) => assistantText.includes(marker));
|
|
211
|
+
if (matchedMarkers.length > 0) {
|
|
208
212
|
lastOwnerCallEpochMs = epochMs;
|
|
213
|
+
lastOwnerCallIsCandidateOnly = matchedMarkers.every(isCandidateOwnerCallMarker);
|
|
209
214
|
}
|
|
210
215
|
}
|
|
211
216
|
if (type === 'user' &&
|
|
@@ -226,6 +231,10 @@ class TranscriptOwnerCallStatusProvider {
|
|
|
226
231
|
if (this.isCallSuppressedUndelivered(transcriptPath, lastOwnerCallEpochMs)) {
|
|
227
232
|
return null;
|
|
228
233
|
}
|
|
234
|
+
if (lastOwnerCallIsCandidateOnly &&
|
|
235
|
+
!this.isCandidateCallDelivered(transcriptPath, lastOwnerCallEpochMs)) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
229
238
|
const markerReplyEpochMs = this.readOwnerReplyMarkerEpochMs(transcriptPath);
|
|
230
239
|
const resolvedReplyEpochMs = markerReplyEpochMs !== null &&
|
|
231
240
|
(lastOwnerReplyEpochMs === null ||
|
|
@@ -258,6 +267,16 @@ class TranscriptOwnerCallStatusProvider {
|
|
|
258
267
|
const approvedEpochMs = this.readMarkerEpochMs(transcriptPath, APPROVED_OWNER_CALL_MARKER_FILE_EXTENSION);
|
|
259
268
|
return approvedEpochMs !== suppressedEpochMs;
|
|
260
269
|
};
|
|
270
|
+
this.isCandidateCallDelivered = (transcriptPath, ownerCallEpochMs) => {
|
|
271
|
+
if (this.ownerReplyMarkerDirectory === null) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
const emittedEpochMs = this.readMarkerEpochMs(transcriptPath, EMITTED_OWNER_CALL_MARKER_FILE_EXTENSION);
|
|
275
|
+
if (emittedEpochMs === ownerCallEpochMs) {
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return (this.readMarkerEpochMs(transcriptPath, APPROVED_OWNER_CALL_MARKER_FILE_EXTENSION) === ownerCallEpochMs);
|
|
279
|
+
};
|
|
261
280
|
this.readMarkerEpochMs = (transcriptPath, markerFileExtension) => {
|
|
262
281
|
if (this.ownerReplyMarkerDirectory === null) {
|
|
263
282
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TranscriptOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -696,6 +696,130 @@ describe('TranscriptOwnerCallStatusProvider', () => {
|
|
|
696
696
|
Math.floor(Date.parse('2026-06-27T10:20:00.000Z') / 1000),
|
|
697
697
|
);
|
|
698
698
|
});
|
|
699
|
+
|
|
700
|
+
const assistantWithCandidateMarker = (timestamp: string): object => ({
|
|
701
|
+
type: 'assistant',
|
|
702
|
+
timestamp,
|
|
703
|
+
message: {
|
|
704
|
+
role: 'assistant',
|
|
705
|
+
content: [
|
|
706
|
+
{ type: 'text', text: 'Waiting for you. <<OWNER_CALL>-pending>' },
|
|
707
|
+
],
|
|
708
|
+
},
|
|
709
|
+
});
|
|
710
|
+
|
|
711
|
+
it('does not report a session as waiting when the candidate owner call tag was never rendered to the owner', async () => {
|
|
712
|
+
const transcriptPath = writeTranscript('workbench.jsonl', [
|
|
713
|
+
ownerReply('2026-06-27T10:00:00.000Z'),
|
|
714
|
+
assistantWithCandidateMarker('2026-06-27T10:05:00.000Z'),
|
|
715
|
+
]);
|
|
716
|
+
const markerDirectory = path.join(rootDirectory, 'markers');
|
|
717
|
+
fs.mkdirSync(markerDirectory, { recursive: true });
|
|
718
|
+
const provider = new TranscriptOwnerCallStatusProvider(
|
|
719
|
+
'<<OWNER_CALL>>',
|
|
720
|
+
markerDirectory,
|
|
721
|
+
);
|
|
722
|
+
|
|
723
|
+
const result =
|
|
724
|
+
await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
|
|
725
|
+
new Map([[sessionName, transcriptPath]]),
|
|
726
|
+
);
|
|
727
|
+
|
|
728
|
+
expect(result.has(sessionName)).toBe(false);
|
|
729
|
+
});
|
|
730
|
+
|
|
731
|
+
it('reports a session as waiting when the status line recorded that it rendered the candidate owner call', async () => {
|
|
732
|
+
const transcriptPath = writeTranscript('workbench.jsonl', [
|
|
733
|
+
ownerReply('2026-06-27T10:00:00.000Z'),
|
|
734
|
+
assistantWithCandidateMarker('2026-06-27T10:05:00.000Z'),
|
|
735
|
+
]);
|
|
736
|
+
const markerDirectory = path.join(rootDirectory, 'markers');
|
|
737
|
+
writeCallGateMarker(
|
|
738
|
+
markerDirectory,
|
|
739
|
+
'workbench.jsonl',
|
|
740
|
+
'.call_emitted',
|
|
741
|
+
'2026-06-27T10:05:00.000Z',
|
|
742
|
+
);
|
|
743
|
+
const provider = new TranscriptOwnerCallStatusProvider(
|
|
744
|
+
'<<OWNER_CALL>>',
|
|
745
|
+
markerDirectory,
|
|
746
|
+
);
|
|
747
|
+
|
|
748
|
+
const result =
|
|
749
|
+
await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
|
|
750
|
+
new Map([[sessionName, transcriptPath]]),
|
|
751
|
+
);
|
|
752
|
+
|
|
753
|
+
expect(result.has(sessionName)).toBe(true);
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
it('reports a session as waiting when the format gate approved the candidate owner call it has not rendered yet', async () => {
|
|
757
|
+
const transcriptPath = writeTranscript('workbench.jsonl', [
|
|
758
|
+
ownerReply('2026-06-27T10:00:00.000Z'),
|
|
759
|
+
assistantWithCandidateMarker('2026-06-27T10:05:00.000Z'),
|
|
760
|
+
]);
|
|
761
|
+
const markerDirectory = path.join(rootDirectory, 'markers');
|
|
762
|
+
writeCallGateMarker(
|
|
763
|
+
markerDirectory,
|
|
764
|
+
'workbench.jsonl',
|
|
765
|
+
'.call_ts',
|
|
766
|
+
'2026-06-27T10:05:00.000Z',
|
|
767
|
+
);
|
|
768
|
+
const provider = new TranscriptOwnerCallStatusProvider(
|
|
769
|
+
'<<OWNER_CALL>>',
|
|
770
|
+
markerDirectory,
|
|
771
|
+
);
|
|
772
|
+
|
|
773
|
+
const result =
|
|
774
|
+
await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
|
|
775
|
+
new Map([[sessionName, transcriptPath]]),
|
|
776
|
+
);
|
|
777
|
+
|
|
778
|
+
expect(result.has(sessionName)).toBe(true);
|
|
779
|
+
});
|
|
780
|
+
|
|
781
|
+
it('reports a session as waiting on a candidate owner call when no marker directory is configured', async () => {
|
|
782
|
+
const transcriptPath = writeTranscript('workbench.jsonl', [
|
|
783
|
+
ownerReply('2026-06-27T10:00:00.000Z'),
|
|
784
|
+
assistantWithCandidateMarker('2026-06-27T10:05:00.000Z'),
|
|
785
|
+
]);
|
|
786
|
+
const provider = new TranscriptOwnerCallStatusProvider('<<OWNER_CALL>>');
|
|
787
|
+
|
|
788
|
+
const result =
|
|
789
|
+
await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
|
|
790
|
+
new Map([[sessionName, transcriptPath]]),
|
|
791
|
+
);
|
|
792
|
+
|
|
793
|
+
expect(result.has(sessionName)).toBe(true);
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
it('reports a session as waiting when a rendered candidate call is followed by a rendered later candidate call', async () => {
|
|
797
|
+
const transcriptPath = writeTranscript('workbench.jsonl', [
|
|
798
|
+
ownerReply('2026-06-27T10:00:00.000Z'),
|
|
799
|
+
assistantWithCandidateMarker('2026-06-27T10:05:00.000Z'),
|
|
800
|
+
assistantWithCandidateMarker('2026-06-27T10:20:00.000Z'),
|
|
801
|
+
]);
|
|
802
|
+
const markerDirectory = path.join(rootDirectory, 'markers');
|
|
803
|
+
writeCallGateMarker(
|
|
804
|
+
markerDirectory,
|
|
805
|
+
'workbench.jsonl',
|
|
806
|
+
'.call_emitted',
|
|
807
|
+
'2026-06-27T10:20:00.000Z',
|
|
808
|
+
);
|
|
809
|
+
const provider = new TranscriptOwnerCallStatusProvider(
|
|
810
|
+
'<<OWNER_CALL>>',
|
|
811
|
+
markerDirectory,
|
|
812
|
+
);
|
|
813
|
+
|
|
814
|
+
const result =
|
|
815
|
+
await provider.listUnansweredOwnerCallEpochSecondsBySessionName(
|
|
816
|
+
new Map([[sessionName, transcriptPath]]),
|
|
817
|
+
);
|
|
818
|
+
|
|
819
|
+
expect(result.get(sessionName)).toBe(
|
|
820
|
+
Math.floor(Date.parse('2026-06-27T10:20:00.000Z') / 1000),
|
|
821
|
+
);
|
|
822
|
+
});
|
|
699
823
|
});
|
|
700
824
|
|
|
701
825
|
describe('ownerCallMarkerFamilyResolve', () => {
|
|
@@ -137,8 +137,12 @@ const TRANSCRIPT_FILE_EXTENSION = '.jsonl';
|
|
|
137
137
|
const OWNER_REPLY_MARKER_FILE_EXTENSION = '.reply_ts';
|
|
138
138
|
const SUPPRESSED_OWNER_CALL_MARKER_FILE_EXTENSION = '.suppress_ts';
|
|
139
139
|
const APPROVED_OWNER_CALL_MARKER_FILE_EXTENSION = '.call_ts';
|
|
140
|
+
const EMITTED_OWNER_CALL_MARKER_FILE_EXTENSION = '.call_emitted';
|
|
140
141
|
const UNSAFE_SESSION_ID_CHARACTER_PATTERN = /[^A-Za-z0-9._-]/g;
|
|
141
142
|
|
|
143
|
+
const isCandidateOwnerCallMarker = (marker: string): boolean =>
|
|
144
|
+
marker.endsWith(OWNER_CALL_CANDIDATE_TAG_SUFFIX);
|
|
145
|
+
|
|
142
146
|
export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvider {
|
|
143
147
|
private readonly ownerCallMarkerFamily: string[];
|
|
144
148
|
|
|
@@ -188,6 +192,7 @@ export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvide
|
|
|
188
192
|
return null;
|
|
189
193
|
}
|
|
190
194
|
let lastOwnerCallEpochMs: number | null = null;
|
|
195
|
+
let lastOwnerCallIsCandidateOnly = false;
|
|
191
196
|
let lastOwnerReplyEpochMs: number | null = null;
|
|
192
197
|
for (const line of content.split('\n')) {
|
|
193
198
|
const trimmed = line.trim();
|
|
@@ -212,8 +217,14 @@ export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvide
|
|
|
212
217
|
const messageContent = isRecord(message) ? message.content : null;
|
|
213
218
|
if (type === 'assistant') {
|
|
214
219
|
const assistantText = extractText(messageContent);
|
|
215
|
-
|
|
220
|
+
const matchedMarkers = markerFamily.filter((marker) =>
|
|
221
|
+
assistantText.includes(marker),
|
|
222
|
+
);
|
|
223
|
+
if (matchedMarkers.length > 0) {
|
|
216
224
|
lastOwnerCallEpochMs = epochMs;
|
|
225
|
+
lastOwnerCallIsCandidateOnly = matchedMarkers.every(
|
|
226
|
+
isCandidateOwnerCallMarker,
|
|
227
|
+
);
|
|
217
228
|
}
|
|
218
229
|
}
|
|
219
230
|
if (
|
|
@@ -238,6 +249,12 @@ export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvide
|
|
|
238
249
|
) {
|
|
239
250
|
return null;
|
|
240
251
|
}
|
|
252
|
+
if (
|
|
253
|
+
lastOwnerCallIsCandidateOnly &&
|
|
254
|
+
!this.isCandidateCallDelivered(transcriptPath, lastOwnerCallEpochMs)
|
|
255
|
+
) {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
241
258
|
const markerReplyEpochMs = this.readOwnerReplyMarkerEpochMs(transcriptPath);
|
|
242
259
|
const resolvedReplyEpochMs =
|
|
243
260
|
markerReplyEpochMs !== null &&
|
|
@@ -286,6 +303,28 @@ export class TranscriptOwnerCallStatusProvider implements OwnerCallStatusProvide
|
|
|
286
303
|
return approvedEpochMs !== suppressedEpochMs;
|
|
287
304
|
};
|
|
288
305
|
|
|
306
|
+
private isCandidateCallDelivered = (
|
|
307
|
+
transcriptPath: string,
|
|
308
|
+
ownerCallEpochMs: number,
|
|
309
|
+
): boolean => {
|
|
310
|
+
if (this.ownerReplyMarkerDirectory === null) {
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
const emittedEpochMs = this.readMarkerEpochMs(
|
|
314
|
+
transcriptPath,
|
|
315
|
+
EMITTED_OWNER_CALL_MARKER_FILE_EXTENSION,
|
|
316
|
+
);
|
|
317
|
+
if (emittedEpochMs === ownerCallEpochMs) {
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
return (
|
|
321
|
+
this.readMarkerEpochMs(
|
|
322
|
+
transcriptPath,
|
|
323
|
+
APPROVED_OWNER_CALL_MARKER_FILE_EXTENSION,
|
|
324
|
+
) === ownerCallEpochMs
|
|
325
|
+
);
|
|
326
|
+
};
|
|
327
|
+
|
|
289
328
|
private readMarkerEpochMs = (
|
|
290
329
|
transcriptPath: string,
|
|
291
330
|
markerFileExtension: string,
|
|
@@ -8,6 +8,7 @@ export declare class TranscriptOwnerCallStatusProvider implements OwnerCallStatu
|
|
|
8
8
|
private findUnansweredOwnerCallEpochMs;
|
|
9
9
|
private readOwnerReplyMarkerEpochMs;
|
|
10
10
|
private isCallSuppressedUndelivered;
|
|
11
|
+
private isCandidateCallDelivered;
|
|
11
12
|
private readMarkerEpochMs;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=TranscriptOwnerCallStatusProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptOwnerCallStatusProvider.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kEAAkE,CAAC;AA6F3G,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,KAAG,MAAM,EAMtD,CAAC;
|
|
1
|
+
{"version":3,"file":"TranscriptOwnerCallStatusProvider.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kEAAkE,CAAC;AA6F3G,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,KAAG,MAAM,EAMtD,CAAC;AA4Cf,qBAAa,iCAAkC,YAAW,uBAAuB;IAK7E,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAJ5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAW;gBAG/C,eAAe,EAAE,MAAM,GAAG,IAAI,EACb,yBAAyB,GAAE,MAAM,GAAG,IAAW;IAQlE,gDAAgD,GAC9C,6BAA6B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqB7B;IAEF,OAAO,CAAC,8BAA8B,CAqFpC;IAOF,OAAO,CAAC,2BAA2B,CAGyC;IAS5E,OAAO,CAAC,2BAA2B,CAgBjC;IAEF,OAAO,CAAC,wBAAwB,CAoB9B;IAEF,OAAO,CAAC,iBAAiB,CA4BvB;CACH"}
|