(client, sessionID, directory, options = {})
| 826 | const completed = Number(info?.time?.completed || 0); |
| 827 | const created = Number(info?.time?.created || 0); |
| 828 | if (!Number.isFinite(completed) || completed <= 0) |
| 829 | return "incomplete"; |
| 830 | const startedAt = Number(active?.startedAt || 0); |
| 831 | if (startedAt > 0 && completed < startedAt && (!Number.isFinite(created) || created < startedAt)) |
| 832 | return "incomplete"; |
| 833 | const relevant = ordered.filter((message) => { |
| 834 | const candidate = message?.info || message || {}; |
| 835 | if (candidate.role !== "assistant") |
| 836 | return false; |
| 837 | if (startedAt <= 0) |
| 838 | return true; |
| 839 | const candidateCreated = Number(candidate?.time?.created || 0); |
| 840 | const candidateCompleted = Number(candidate?.time?.completed || 0); |
| 841 | return candidateCreated >= startedAt || candidateCompleted >= startedAt; |
| 842 | }); |
| 843 | return relevant.some(assistantMessageHasMeaningfulActivity) ? "completed" : "empty"; |
| 844 | } |
| 845 | async function resolveCompactionModel(directory, client, sessionID, preferredModel) { |
| 846 | const preferred = normalizedModelRef(preferredModel); |
| 847 | if (preferred) |
| 848 | return preferred; |
| 849 | const cached = normalizedModelRef(getSessionExecutionContext(sessionID)?.model); |
| 850 | if (cached) |
| 851 | return cached; |
| 852 | const captured = await captureSessionExecutionContext(client, sessionID); |
| 853 | const capturedModel = normalizedModelRef(captured?.model); |
| 854 | if (capturedModel) |
| 855 | return capturedModel; |
| 856 | const messages = await readRecentSessionMessages(client, sessionID, directory); |
| 857 | for (const message of orderedSessionMessages(messages).reverse()) { |
| 858 | const info = message?.info || message; |
| 859 | const model = normalizedModelRef(info?.model) || normalizedModelRef(info); |
| 860 | if (!model) |
| 861 | continue; |
| 862 | const previous = getSessionExecutionContext(sessionID) || {}; |
| 863 | setSessionExecutionContext(sessionID, { ...previous, model }); |
no test coverage detected