| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /** Canonical session URI and inline mention encoding. */
- import { SessionId, type SessionId as SessionIdType } from '@deepseek-ai/dsh-session'
- import { SessionReferenceError } from './config.ts'
- import type { SessionReferenceInput } from './types.ts'
- /** URI scheme reserved for DeepSeek Harness session snapshots. */
- export const SESSION_REFERENCE_SCHEME = 'dsh-session:'
- /**
- * Encode any JavaScript session-id string as a canonical lossless URI.
- * @param sessionId - opaque session id to serialize.
- * @returns canonical `dsh-session:` URI.
- */
- export function encodeSessionReferenceUri(sessionId: SessionIdType): string {
- const payload = Buffer.from(JSON.stringify(sessionId), 'utf8').toString('base64url')
- return `${SESSION_REFERENCE_SCHEME}${payload}`
- }
- /**
- * Decode and canonicalize one session-reference URI.
- * @param uri - complete canonical URI.
- * @returns decoded session id.
- */
- export function decodeSessionReferenceUri(uri: string): SessionIdType {
- if (!uri.startsWith(SESSION_REFERENCE_SCHEME)) {
- throw invalidUri(uri)
- }
- const payload = uri.slice(SESSION_REFERENCE_SCHEME.length)
- if (!/^[A-Za-z0-9_-]+$/.test(payload)) throw invalidUri(uri)
- try {
- const parsed: unknown = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'))
- if (typeof parsed !== 'string') throw new TypeError('decoded session id is not a string')
- const sessionId = SessionId(parsed)
- if (encodeSessionReferenceUri(sessionId) !== uri) throw new TypeError('URI is not canonical')
- return sessionId
- } catch (error: unknown) {
- throw invalidUri(uri, error)
- }
- }
- /**
- * Render a host-neutral Markdown mention carrying the canonical URI.
- * @param reference - structured id and optional display label.
- * @returns escaped `@[label](uri)` mention.
- */
- export function formatSessionReferenceMention(reference: SessionReferenceInput): string {
- const label = escapeLabel(reference.label ?? reference.sessionId)
- return `@[${label}](${encodeSessionReferenceUri(reference.sessionId)})`
- }
- /** Result of extracting canonical mentions from plain text. */
- export interface ParsedSessionReferenceText {
- /** Text with opaque tokens replaced by readable `@label` spans. */
- text: string
- /** Structured references in first-appearance order, before service deduplication. */
- references: SessionReferenceInput[]
- }
- /**
- * Extract Markdown mentions and bare canonical URIs from one text value.
- * Explicit Markdown mentions fail on any malformed URI. Bare text is treated
- * as a reference only when it has a non-empty base64url-shaped payload, then
- * still fails if that candidate is not canonical.
- * @param text - host text to normalize.
- * @returns readable text and structured references in appearance order.
- */
- export function parseSessionReferenceText(text: string): ParsedSessionReferenceText {
- const references: SessionReferenceInput[] = []
- const pattern = /@\[((?:\\.|[^\\\]])*)\]\((dsh-session:[^\s)]*)\)|(dsh-session:[A-Za-z0-9_-]+)/gu
- const rendered = text.replace(pattern, (
- _match,
- rawLabel: string | undefined,
- markdownUri: string | undefined,
- bareUri: string | undefined,
- ) => {
- const uri = markdownUri ?? bareUri
- /* v8 ignore next -- the two-alternative regex always captures exactly one URI group. */
- if (uri === undefined) throw new SessionReferenceError('session reference URI is missing', 'SESSION_REFERENCE_INVALID_REFERENCE')
- const sessionId = decodeSessionReferenceUri(uri)
- const label = rawLabel === undefined ? sessionId : unescapeLabel(rawLabel)
- references.push({ sessionId, label })
- return `@${label}`
- })
- return { text: rendered, references }
- }
- function escapeLabel(label: string): string {
- return label.replace(/[\\\]]/gu, match => `\\${match}`)
- }
- function unescapeLabel(label: string): string {
- return label.replace(/\\(.)/gu, '$1')
- }
- function invalidUri(uri: string, cause?: unknown): SessionReferenceError {
- return new SessionReferenceError(
- `invalid session reference URI ${JSON.stringify(uri)}`,
- 'SESSION_REFERENCE_INVALID_REFERENCE',
- cause === undefined ? undefined : { cause },
- )
- }
|