forked from ultraworkers/claw-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtipScheduler.ts
More file actions
58 lines (49 loc) · 1.63 KB
/
Copy pathtipScheduler.ts
File metadata and controls
58 lines (49 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { getSettings_DEPRECATED } from '../../utils/settings/settings.js'
import {
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
logEvent,
} from '../analytics/index.js'
import { getSessionsSinceLastShown, recordTipShown } from './tipHistory.js'
import { getRelevantTips } from './tipRegistry.js'
import type { Tip, TipContext } from './types.js'
export function selectTipWithLongestTimeSinceShown(
availableTips: Tip[],
): Tip | undefined {
if (availableTips.length === 0) {
return undefined
}
if (availableTips.length === 1) {
return availableTips[0]
}
// Sort tips by sessions since last shown (descending) and take the first one
// This is the tip that hasn't been shown for the longest time
const tipsWithSessions = availableTips.map(tip => ({
tip,
sessions: getSessionsSinceLastShown(tip.id),
}))
tipsWithSessions.sort((a, b) => b.sessions - a.sessions)
return tipsWithSessions[0]?.tip
}
export async function getTipToShowOnSpinner(
context?: TipContext,
): Promise<Tip | undefined> {
// Check if tips are disabled (default to true if not set)
if (getSettings_DEPRECATED().spinnerTipsEnabled === false) {
return undefined
}
const tips = await getRelevantTips(context)
if (tips.length === 0) {
return undefined
}
return selectTipWithLongestTimeSinceShown(tips)
}
export function recordShownTip(tip: Tip): void {
// Record in history
recordTipShown(tip.id)
// Log event for analytics
logEvent('tengu_tip_shown', {
tipIdLength:
tip.id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
cooldownSessions: tip.cooldownSessions,
})
}