Download src/assistant/sessionHistory.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 2.5 kB
-
https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/assistant/sessionHistory.ts
- Command line
-
hf download hf://chenbhao/codev@afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/assistant/sessionHistory.ts
-
curl -L -o sessionHistory.ts https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/assistant/sessionHistory.ts
2.5 kB
| import axios from 'axios' | |
| import { getOauthConfig } from '../constants/oauth.js' | |
| import type { SDKMessage } from '../entrypoints/agentSdkTypes.js' | |
| import { logForDebugging } from '../utils/debug.js' | |
| import { getOAuthHeaders, prepareApiRequest } from '../utils/teleport/api.js' | |
| export const HISTORY_PAGE_SIZE = 100 | |
| export type HistoryPage = { | |
| /** Chronological order within the page. */ | |
| events: SDKMessage[] | |
| /** Oldest event ID in this page → before_id cursor for next-older page. */ | |
| firstId: string | null | |
| /** true = older events exist. */ | |
| hasMore: boolean | |
| } | |
| type SessionEventsResponse = { | |
| data: SDKMessage[] | |
| has_more: boolean | |
| first_id: string | null | |
| last_id: string | null | |
| } | |
| export type HistoryAuthCtx = { | |
| baseUrl: string | |
| headers: Record<string, string> | |
| } | |
| /** Prepare auth + headers + base URL once, reuse across pages. */ | |
| export async function createHistoryAuthCtx( | |
| sessionId: string, | |
| ): Promise<HistoryAuthCtx> { | |
| const { accessToken, orgUUID } = await prepareApiRequest() | |
| return { | |
| baseUrl: `${getOauthConfig().BASE_API_URL}/v1/sessions/${sessionId}/events`, | |
| headers: { | |
| ...getOAuthHeaders(accessToken), | |
| 'anthropic-beta': 'ccr-byoc-2025-07-29', | |
| 'x-organization-uuid': orgUUID, | |
| }, | |
| } | |
| } | |
| async function fetchPage( | |
| ctx: HistoryAuthCtx, | |
| params: Record<string, string | number | boolean>, | |
| label: string, | |
| ): Promise<HistoryPage | null> { | |
| const resp = await axios | |
| .get<SessionEventsResponse>(ctx.baseUrl, { | |
| headers: ctx.headers, | |
| params, | |
| timeout: 15000, | |
| validateStatus: () => true, | |
| }) | |
| .catch(() => null) | |
| if (!resp || resp.status !== 200) { | |
| logForDebugging(`[${label}] HTTP ${resp?.status ?? 'error'}`) | |
| return null | |
| } | |
| return { | |
| events: Array.isArray(resp.data.data) ? resp.data.data : [], | |
| firstId: resp.data.first_id, | |
| hasMore: resp.data.has_more, | |
| } | |
| } | |
| /** | |
| * Newest page: last `limit` events, chronological, via anchor_to_latest. | |
| * has_more=true means older events exist. | |
| */ | |
| export async function fetchLatestEvents( | |
| ctx: HistoryAuthCtx, | |
| limit = HISTORY_PAGE_SIZE, | |
| ): Promise<HistoryPage | null> { | |
| return fetchPage(ctx, { limit, anchor_to_latest: true }, 'fetchLatestEvents') | |
| } | |
| /** Older page: events immediately before `beforeId` cursor. */ | |
| export async function fetchOlderEvents( | |
| ctx: HistoryAuthCtx, | |
| beforeId: string, | |
| limit = HISTORY_PAGE_SIZE, | |
| ): Promise<HistoryPage | null> { | |
| return fetchPage(ctx, { limit, before_id: beforeId }, 'fetchOlderEvents') | |
| } | |