| import { SessionManager } from "@mariozechner/pi-coding-agent"; |
|
|
| type AppendMessageArg = Parameters<SessionManager["appendMessage"]>[0]; |
|
|
| export type GatewayInjectedAbortMeta = { |
| aborted: true; |
| origin: "rpc" | "stop-command"; |
| runId: string; |
| }; |
|
|
| export type GatewayInjectedTranscriptAppendResult = { |
| ok: boolean; |
| messageId?: string; |
| message?: Record<string, unknown>; |
| error?: string; |
| }; |
|
|
| export function appendInjectedAssistantMessageToTranscript(params: { |
| transcriptPath: string; |
| message: string; |
| label?: string; |
| idempotencyKey?: string; |
| abortMeta?: GatewayInjectedAbortMeta; |
| now?: number; |
| }): GatewayInjectedTranscriptAppendResult { |
| const now = params.now ?? Date.now(); |
| const labelPrefix = params.label ? `[${params.label}]\n\n` : ""; |
| const usage = { |
| input: 0, |
| output: 0, |
| cacheRead: 0, |
| cacheWrite: 0, |
| totalTokens: 0, |
| cost: { |
| input: 0, |
| output: 0, |
| cacheRead: 0, |
| cacheWrite: 0, |
| total: 0, |
| }, |
| }; |
| const messageBody: AppendMessageArg & Record<string, unknown> = { |
| role: "assistant", |
| content: [{ type: "text", text: `${labelPrefix}${params.message}` }], |
| timestamp: now, |
| |
| |
| stopReason: "stop", |
| usage, |
| |
| api: "openai-responses", |
| provider: "openclaw", |
| model: "gateway-injected", |
| ...(params.idempotencyKey ? { idempotencyKey: params.idempotencyKey } : {}), |
| ...(params.abortMeta |
| ? { |
| openclawAbort: { |
| aborted: true, |
| origin: params.abortMeta.origin, |
| runId: params.abortMeta.runId, |
| }, |
| } |
| : {}), |
| }; |
|
|
| try { |
| |
| |
| const sessionManager = SessionManager.open(params.transcriptPath); |
| const messageId = sessionManager.appendMessage(messageBody); |
| return { ok: true, messageId, message: messageBody }; |
| } catch (err) { |
| return { ok: false, error: err instanceof Error ? err.message : String(err) }; |
| } |
| } |
|
|