buroventures-harald-code
Version:
Harald Code - AI-powered coding assistant CLI
68 lines • 2.42 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { createContext, useCallback, useContext, useState, useMemo, useEffect, } from 'react';
import { uiTelemetryService, } from 'buroventures-harald-code-core';
// --- Context Definition ---
const SessionStatsContext = createContext(undefined);
// --- Provider Component ---
export const SessionStatsProvider = ({ children, }) => {
const [stats, setStats] = useState({
sessionStartTime: new Date(),
metrics: uiTelemetryService.getMetrics(),
lastPromptTokenCount: 0,
promptCount: 0,
});
useEffect(() => {
const handleUpdate = ({ metrics, lastPromptTokenCount, }) => {
setStats((prevState) => ({
...prevState,
metrics,
lastPromptTokenCount,
}));
};
uiTelemetryService.on('update', handleUpdate);
// Set initial state
handleUpdate({
metrics: uiTelemetryService.getMetrics(),
lastPromptTokenCount: uiTelemetryService.getLastPromptTokenCount(),
});
return () => {
uiTelemetryService.off('update', handleUpdate);
};
}, []);
const startNewPrompt = useCallback(() => {
setStats((prevState) => ({
...prevState,
promptCount: prevState.promptCount + 1,
}));
}, []);
const getPromptCount = useCallback(() => stats.promptCount, [stats.promptCount]);
const resetSession = useCallback(() => {
setStats({
sessionStartTime: new Date(),
metrics: uiTelemetryService.getMetrics(),
lastPromptTokenCount: uiTelemetryService.getLastPromptTokenCount(),
promptCount: 0,
});
}, []);
const value = useMemo(() => ({
stats,
startNewPrompt,
getPromptCount,
resetSession,
}), [stats, startNewPrompt, getPromptCount, resetSession]);
return (_jsx(SessionStatsContext.Provider, { value: value, children: children }));
};
// --- Consumer Hook ---
export const useSessionStats = () => {
const context = useContext(SessionStatsContext);
if (context === undefined) {
throw new Error('useSessionStats must be used within a SessionStatsProvider');
}
return context;
};
//# sourceMappingURL=SessionContext.js.map