refactor(session): unify event map augmentation entrypoint

This commit is contained in:
imccyu
2026-08-09 17:53:09 +08:00
parent 990f700d3c
commit 3d70889a8d
22 changed files with 31 additions and 31 deletions

View File

@@ -11,7 +11,7 @@ import type { ContentBlock, TokenUsage } from '@deepseek-ai/dsh-llm'
import type { CommandId } from '@deepseek-ai/dsh-commands/brand' import type { CommandId } from '@deepseek-ai/dsh-commands/brand'
import type { CompactionId } from './brand.ts' import type { CompactionId } from './brand.ts'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Marks the start of a compaction — log-only, holds the lock until * Marks the start of a compaction — log-only, holds the lock until

View File

@@ -290,7 +290,7 @@ declare module 'cordis' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* One normalized mutation of an agent's durable pending-message lists. * One normalized mutation of an agent's durable pending-message lists.

View File

@@ -4,7 +4,7 @@ import { createUserMessage, CallId , createMessage } from '@deepseek-ai/dsh-llm'
import SessionStore, { Session, SessionForkError, SessionId } from '@deepseek-ai/dsh-session' import SessionStore, { Session, SessionForkError, SessionId } from '@deepseek-ai/dsh-session'
import type { SessionEvent, TurnEndReason } from '@deepseek-ai/dsh-session' import type { SessionEvent, TurnEndReason } from '@deepseek-ai/dsh-session'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
'test/log-only': { value: string } 'test/log-only': { value: string }
/** Stands in for a plugin's open/close bracket (`compact/start`). */ /** Stands in for a plugin's open/close bracket (`compact/start`). */

View File

@@ -35,7 +35,7 @@ const make = (files: Record<string, string>): string => {
/** A merge-form declaration file wrapping `members` in the session module. */ /** A merge-form declaration file wrapping `members` in the session module. */
const merge = (members: string): string => const merge = (members: string): string =>
`declare module '@deepseek-ai/dsh-session' {\n interface SessionEventMap {\n${members}\n }\n}\n` `declare module '@deepseek-ai/dsh-session/types' {\n interface SessionEventMap {\n${members}\n }\n}\n`
afterEach(() => { afterEach(() => {
while (roots.length) rmSync(roots.pop()!, { recursive: true, force: true }) while (roots.length) rmSync(roots.pop()!, { recursive: true, force: true })

View File

@@ -15,7 +15,7 @@ import { defineTool, parameterSchemaSpecToJsonSchema } from './schema.ts'
import { TOOL_REGISTRY_SCHEDULER } from './index.ts' import { TOOL_REGISTRY_SCHEDULER } from './index.ts'
import type { CodeDispatchLog, ToolDefinition, ToolExecutionResult, ToolRegistry, ToolRunContext } from './index.ts' import type { CodeDispatchLog, ToolDefinition, ToolExecutionResult, ToolRegistry, ToolRunContext } from './index.ts'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* One sub-dispatch STARTING inside a `run_code` program: the parent * One sub-dispatch STARTING inside a `run_code` program: the parent

View File

@@ -15,7 +15,7 @@ export const inject = ['commands']
const USAGE = 'Usage: /feedback <text>' const USAGE = 'Usage: /feedback <text>'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* One recorded human remark about this session. Log-only and independent * One recorded human remark about this session. Log-only and independent

View File

@@ -58,7 +58,7 @@ declare module '@deepseek-ai/dsh-llm' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Complete post-mutation goal state or clear tombstone. * Complete post-mutation goal state or clear tombstone.

View File

@@ -5,7 +5,7 @@
* @module @deepseek-ai/dsh-hook-protocol/types * @module @deepseek-ai/dsh-hook-protocol/types
*/ */
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* A hook command was invoked at a hook point — a log-only record (like * A hook command was invoked at a hook point — a log-only record (like

View File

@@ -131,7 +131,7 @@ class CommandLayer implements ScopeLayer {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* A resolved slash command entered its handler. Log-only (never model * A resolved slash command entered its handler. Log-only (never model

View File

@@ -39,7 +39,7 @@ declare module 'cordis' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Records the selected preset as durable, log-only user intent. The knob * Records the selected preset as durable, log-only user intent. The knob

View File

@@ -31,7 +31,7 @@ declare module 'cordis' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* An approval question was put to the answerer chain — log-only audit * An approval question was put to the answerer chain — log-only audit

View File

@@ -12,16 +12,7 @@ import type { Agent, RequestErrorAction } from '@deepseek-ai/dsh-agent'
import type { LlmFailure, ResolvedRetryPolicy } from '@deepseek-ai/dsh-llm' import type { LlmFailure, ResolvedRetryPolicy } from '@deepseek-ai/dsh-llm'
import type { SessionEvent } from '@deepseek-ai/dsh-session' import type { SessionEvent } from '@deepseek-ai/dsh-session'
import { RetryId } from './brand.ts' import { RetryId } from './brand.ts'
import type { LlmRetryEventData, LlmRetryStartedEventData } from './types.ts' import type { LlmRetryEventData } from './types.ts'
declare module '@deepseek-ai/dsh-session' {
interface SessionEventMap {
/** Durable, non-surface record of one provider-routed retry scheduled after a failed request attempt. */
'llm/retry': LlmRetryEventData
/** Durable transition written after a retry wait succeeds and before the next request attempt starts. */
'llm/retry-started': LlmRetryStartedEventData
}
}
export type { LlmRetryEventData, LlmRetryStartedEventData } from './types.ts' export type { LlmRetryEventData, LlmRetryStartedEventData } from './types.ts'
export { RetryId } from './brand.ts' export { RetryId } from './brand.ts'
@@ -132,7 +123,7 @@ export function apply(ctx: Context, config: Config = {}, internals: RetryInterna
): Promise<RequestErrorAction> { ): Promise<RequestErrorAction> {
const fusedSignal = AbortSignal.any([signal, lifetime.signal]) const fusedSignal = AbortSignal.any([signal, lifetime.signal])
if (fusedSignal.aborted) return if (fusedSignal.aborted) return
const eventData = policy.mode === 'normal' const eventData: LlmRetryEventData = policy.mode === 'normal'
? { ? {
retryId, retryId,
turn, turn,

View File

@@ -1,6 +1,15 @@
import type { LlmFailure } from '@deepseek-ai/dsh-llm/types' import type { LlmFailure } from '@deepseek-ai/dsh-llm/types'
import type { RetryId } from './brand.ts' import type { RetryId } from './brand.ts'
declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap {
/** Durable, non-surface record of one provider-routed retry scheduled after a failed request attempt. */
'llm/retry': LlmRetryEventData
/** Durable transition written after a retry wait succeeds and before the next request attempt starts. */
'llm/retry-started': LlmRetryStartedEventData
}
}
/** Durable payload recorded before one provider-routed model-request retry wait. */ /** Durable payload recorded before one provider-routed model-request retry wait. */
export type LlmRetryEventData = export type LlmRetryEventData =
| { | {

View File

@@ -42,7 +42,7 @@ import type { PlanProjection } from './types.ts'
// declarations still receive the SessionProjectionMap merge. // declarations still receive the SessionProjectionMap merge.
export type * from './types.ts' export type * from './types.ts'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Whether plan mode is in force from this point on: log-only, non-surface, * Whether plan mode is in force from this point on: log-only, non-surface,

View File

@@ -21,7 +21,7 @@
import type { Session, SessionEvent } from '@deepseek-ai/dsh-session' import type { Session, SessionEvent } from '@deepseek-ai/dsh-session'
import type { SandboxMode } from '@deepseek-ai/dsh-sandbox' import type { SandboxMode } from '@deepseek-ai/dsh-sandbox'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* The session's sandbox mode was switched — log-only (like `approval/*`; * The session's sandbox mode was switched — log-only (like `approval/*`;

View File

@@ -24,7 +24,7 @@ declare module '@deepseek-ai/dsh-session-projection/types' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
'cache-test/mark': { marks: string[] } 'cache-test/mark': { marks: string[] }
} }

View File

@@ -22,7 +22,7 @@ declare module '@deepseek-ai/dsh-session-projection/types' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
'test/mark': { marks: string[] } 'test/mark': { marks: string[] }
} }

View File

@@ -17,7 +17,7 @@ import {
type TelemetryRecord, type TelemetryRecord,
} from '../src/index.ts' } from '../src/index.ts'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Test-only merged event proving unknown types flow through unchanged. * Test-only merged event proving unknown types flow through unchanged.

View File

@@ -37,7 +37,7 @@ export interface SessionTitleLlmRequestEventData {
readonly maxTokens: number readonly maxTokens: number
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** Log-only pre-dispatch record of one session-title model request. */ /** Log-only pre-dispatch record of one session-title model request. */
'session/title-llm-request': SessionTitleLlmRequestEventData 'session/title-llm-request': SessionTitleLlmRequestEventData

View File

@@ -91,7 +91,7 @@ declare module 'cordis' {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Latest-wins session title snapshot. Log-only: it never enters the model * Latest-wins session title snapshot. Log-only: it never enters the model

View File

@@ -25,7 +25,7 @@ import { snapshotJsonValue } from '@deepseek-ai/dsh-session'
import type { SessionEvent } from '@deepseek-ai/dsh-session' import type { SessionEvent } from '@deepseek-ai/dsh-session'
import type { ToolRestriction } from '@deepseek-ai/dsh-tools' import type { ToolRestriction } from '@deepseek-ai/dsh-tools'
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** /**
* Durable identity and lifecycle mode of a session-backed subagent child, * Durable identity and lifecycle mode of a session-backed subagent child,

View File

@@ -77,7 +77,7 @@ export interface DeepSeekSearchLlmRequest {
} }
} }
declare module '@deepseek-ai/dsh-session' { declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap { interface SessionEventMap {
/** Secret-free auxiliary DeepSeek search request recorded before dispatch. */ /** Secret-free auxiliary DeepSeek search request recorded before dispatch. */
'web/deepseek-search-llm-request': DeepSeekSearchLlmRequest 'web/deepseek-search-llm-request': DeepSeekSearchLlmRequest