github-issue-tower-defence-management 1.117.2 → 1.117.4
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 +14 -0
- package/README.md +2 -2
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-CJJsRF8i.js → index-BXcfEKkX.js} +1 -1
- package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +32 -10
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.test.ts +12 -21
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.ts +1 -1
- package/src/adapter/entry-points/console/ui-dist/assets/{index-CJJsRF8i.js → index-BXcfEKkX.js} +1 -1
- package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +140 -0
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +39 -13
- package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
|
@@ -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-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BXcfEKkX.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-DGVKvwux.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
@@ -48,9 +48,36 @@ const parseEpochSeconds = (timestamp) => {
|
|
|
48
48
|
const parsed = Date.parse(timestamp);
|
|
49
49
|
return Number.isNaN(parsed) ? null : Math.floor(parsed / 1000);
|
|
50
50
|
};
|
|
51
|
+
const readContentBlocks = (message) => {
|
|
52
|
+
const content = message.content;
|
|
53
|
+
if (!Array.isArray(content)) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
return content.filter(isRecord);
|
|
57
|
+
};
|
|
58
|
+
const entryIndicatesCompletion = (entry) => {
|
|
59
|
+
const type = readString(entry, 'type');
|
|
60
|
+
const message = entry.message;
|
|
61
|
+
if (!isRecord(message)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (type === 'assistant') {
|
|
65
|
+
const stopReason = readString(message, 'stop_reason');
|
|
66
|
+
if (stopReason === 'end_turn' || stopReason === 'stop_sequence') {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
const blocks = readContentBlocks(message);
|
|
70
|
+
const lastBlock = blocks[blocks.length - 1];
|
|
71
|
+
return lastBlock !== undefined && readString(lastBlock, 'type') === 'text';
|
|
72
|
+
}
|
|
73
|
+
if (type === 'user') {
|
|
74
|
+
return readContentBlocks(message).some((block) => readString(block, 'type') === 'text');
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
};
|
|
51
78
|
const parseTranscript = (content) => {
|
|
52
79
|
let firstEntryEpochSeconds = null;
|
|
53
|
-
let
|
|
80
|
+
let lastEntryIndicatesCompletion = false;
|
|
54
81
|
for (const line of content.split('\n')) {
|
|
55
82
|
const trimmed = line.trim();
|
|
56
83
|
if (trimmed.length === 0) {
|
|
@@ -70,15 +97,11 @@ const parseTranscript = (content) => {
|
|
|
70
97
|
if (firstEntryEpochSeconds === null && epochSeconds !== null) {
|
|
71
98
|
firstEntryEpochSeconds = epochSeconds;
|
|
72
99
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const stopReason = readString(message, 'stop_reason');
|
|
76
|
-
if (stopReason !== null) {
|
|
77
|
-
lastStopReason = stopReason;
|
|
78
|
-
}
|
|
100
|
+
if (isRecord(parsed.message)) {
|
|
101
|
+
lastEntryIndicatesCompletion = entryIndicatesCompletion(parsed);
|
|
79
102
|
}
|
|
80
103
|
}
|
|
81
|
-
return { firstEntryEpochSeconds,
|
|
104
|
+
return { firstEntryEpochSeconds, lastEntryIndicatesCompletion };
|
|
82
105
|
};
|
|
83
106
|
const clampToZero = (value) => (value > 0 ? value : 0);
|
|
84
107
|
class TranscriptSessionSubAgentActivityRepository {
|
|
@@ -135,8 +158,7 @@ class TranscriptSessionSubAgentActivityRepository {
|
|
|
135
158
|
return null;
|
|
136
159
|
}
|
|
137
160
|
const transcript = parseTranscript(content);
|
|
138
|
-
if (transcript.
|
|
139
|
-
transcript.lastStopReason === 'stop_sequence') {
|
|
161
|
+
if (transcript.lastEntryIndicatesCompletion) {
|
|
140
162
|
return null;
|
|
141
163
|
}
|
|
142
164
|
const silentSeconds = clampToZero(nowEpochSeconds - Math.floor(stats.mtimeMs / 1000));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAK7B,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAE9C,MAAM,UAAU,GAAG,CACjB,KAA8B,EAC9B,GAAW,EACI,EAAE;IACjB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAwB,EAAiB,EAAE;IACpE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC;AAOF,MAAM,eAAe,GAAG,CAAC,OAAe,EAAoB,EAAE;IAC5D,IAAI,sBAAsB,GAAkB,IAAI,CAAC;IACjD,IAAI,
|
|
1
|
+
{"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -53,24 +53,26 @@ describe('useConsoleDetailPrefetch', () => {
|
|
|
53
53
|
jest.useRealTimers();
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
-
it('
|
|
56
|
+
it('is disabled and schedules no prefetch for issue items', () => {
|
|
57
57
|
const caches = buildCaches();
|
|
58
58
|
const bodyPrefetch = jest.spyOn(caches.body, 'prefetch');
|
|
59
|
+
const statePrefetch = jest.spyOn(caches.state, 'prefetch');
|
|
60
|
+
const commentsPrefetch = jest.spyOn(caches.comments, 'prefetch');
|
|
59
61
|
const relatedPrefetch = jest.spyOn(caches.relatedPrs, 'prefetch');
|
|
60
62
|
const items = [makeItem(1), makeItem(2), makeItem(3)];
|
|
61
63
|
renderHook(() => useConsoleDetailPrefetch(caches, items[0], items));
|
|
62
|
-
|
|
63
|
-
expect(bodyPrefetch).not.toHaveBeenCalled();
|
|
64
64
|
jest.runAllTimers();
|
|
65
65
|
|
|
66
|
-
expect(bodyPrefetch).
|
|
67
|
-
expect(
|
|
68
|
-
expect(
|
|
66
|
+
expect(bodyPrefetch).not.toHaveBeenCalled();
|
|
67
|
+
expect(statePrefetch).not.toHaveBeenCalled();
|
|
68
|
+
expect(commentsPrefetch).not.toHaveBeenCalled();
|
|
69
|
+
expect(relatedPrefetch).not.toHaveBeenCalled();
|
|
69
70
|
});
|
|
70
71
|
|
|
71
|
-
it('
|
|
72
|
+
it('is disabled and schedules no prefetch for pull request items', () => {
|
|
72
73
|
const caches = buildCaches();
|
|
73
74
|
const filesPrefetch = jest.spyOn(caches.files, 'prefetch');
|
|
75
|
+
const commitsPrefetch = jest.spyOn(caches.commits, 'prefetch');
|
|
74
76
|
const prStatusPrefetch = jest.spyOn(caches.prStatus, 'prefetch');
|
|
75
77
|
const items = [
|
|
76
78
|
makeItem(1),
|
|
@@ -79,20 +81,9 @@ describe('useConsoleDetailPrefetch', () => {
|
|
|
79
81
|
renderHook(() => useConsoleDetailPrefetch(caches, items[0], items));
|
|
80
82
|
jest.runAllTimers();
|
|
81
83
|
|
|
82
|
-
expect(filesPrefetch).
|
|
83
|
-
expect(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
it('limits prefetch to the next ten items', () => {
|
|
87
|
-
const caches = buildCaches();
|
|
88
|
-
const bodyPrefetch = jest.spyOn(caches.body, 'prefetch');
|
|
89
|
-
const items = Array.from({ length: 15 }, (_unused, index) =>
|
|
90
|
-
makeItem(index + 1),
|
|
91
|
-
);
|
|
92
|
-
renderHook(() => useConsoleDetailPrefetch(caches, items[0], items));
|
|
93
|
-
jest.runAllTimers();
|
|
94
|
-
|
|
95
|
-
expect(bodyPrefetch).toHaveBeenCalledTimes(10);
|
|
84
|
+
expect(filesPrefetch).not.toHaveBeenCalled();
|
|
85
|
+
expect(commitsPrefetch).not.toHaveBeenCalled();
|
|
86
|
+
expect(prStatusPrefetch).not.toHaveBeenCalled();
|
|
96
87
|
});
|
|
97
88
|
|
|
98
89
|
it('does nothing when no item is selected', () => {
|
package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { useEffect } from 'react';
|
|
|
2
2
|
import type { ConsoleListItem } from '../logic/types';
|
|
3
3
|
import type { ConsoleCaches } from './useConsoleCaches';
|
|
4
4
|
|
|
5
|
-
const PREFETCH_AHEAD_COUNT =
|
|
5
|
+
const PREFETCH_AHEAD_COUNT = 0;
|
|
6
6
|
const PREFETCH_DEFER_MS = 500;
|
|
7
7
|
const PREFETCH_IDLE_TIMEOUT_MS = 2000;
|
|
8
8
|
|