refactor: identify and freeze messages at creation

This commit is contained in:
_Kerman
2026-07-28 13:55:59 +08:00
parent c49c0ba497
commit fbf87e660c
345 changed files with 5220 additions and 2901 deletions

View File

@@ -123,6 +123,7 @@ function readReplayState(value: unknown): PiAiReplayState {
/** Convert provider-neutral blocks without trusting them as same-model replay. */
function foreignAssistant(message: Message): AssistantMessage {
const source = message.source.kind === 'model' ? message.source : undefined
const content: AssistantMessage['content'] = []
for (const block of message.content) {
switch (block.type) {
@@ -143,10 +144,10 @@ function foreignAssistant(message: Message): AssistantMessage {
role: 'assistant',
content,
// Deliberately never equals a catalog API: absent replay state is foreign
// even if provenance names the same provider/model as this request.
// even if source names the same provider/model as this request.
api: 'dsh-foreign',
provider: message.provenance?.provider ?? 'dsh-foreign',
model: message.provenance?.model ?? 'dsh-foreign',
provider: source?.provider ?? 'dsh-foreign',
model: source?.model ?? 'dsh-foreign',
usage: emptyPiUsage(),
stopReason: content.some(piece => piece.type === 'toolCall') ? 'toolUse' : 'stop',
timestamp: 0,
@@ -156,9 +157,10 @@ function foreignAssistant(message: Message): AssistantMessage {
/** Recombine durable Harness content with validated pi-ai replay metadata. */
function replayedAssistant(message: Message, rawState: unknown): AssistantMessage {
const state = readReplayState(rawState)
const provenance = message.provenance
if (state.provider !== provenance?.provider) return invalidReplay('provider does not match assistant provenance')
if (state.model !== provenance.model) return invalidReplay('model does not match assistant provenance')
const source = message.source
if (source.kind !== 'model') return invalidReplay('assistant message lacks model source')
if (state.provider !== source.provider) return invalidReplay('provider does not match assistant source')
if (state.model !== source.model) return invalidReplay('model does not match assistant source')
if (state.blocks.length !== message.content.length) return invalidReplay('block count does not match assistant content')
const content: AssistantMessage['content'] = message.content.map((block, index) => {
const replay = state.blocks[index]
@@ -202,10 +204,10 @@ function replayedAssistant(message: Message, rawState: unknown): AssistantMessag
/**
* Convert one durable Harness assistant message into pi-ai history.
* @param message - assistant content with optional adapter-owned replay metadata.
* @param message - assistant content with required source and optional adapter-owned replay metadata.
* @returns a native pi-ai assistant message reconstructed from durable content.
*/
export function toPiAssistant(message: Message): AssistantMessage {
const replayState = message.provenance?.replayState
const replayState = message.source.kind === 'model' ? message.source.replayState : undefined
return replayState === undefined ? foreignAssistant(message) : replayedAssistant(message, replayState)
}