v2.2-paseo-providers: Paseo provider stack + v2.2.1 pane-scoped chat fixes
Ship Paseo-equivalent provider snapshot, AgentComposerBar, ACP dispatch rewrite with streaming/persist, permission prompts, and agent commands. Follow-up: pane-scoped chat resolution, CoderMessageList tool timeline, WS user-delta replace, and inference orphan tool_call stripping. Archive openspec v2-2; update CHANGELOG and CURRENT. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
56
apps/coder/src/services/agent-turn-persist.ts
Normal file
56
apps/coder/src/services/agent-turn-persist.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import type { Sql } from '../db.js';
|
||||
import type { AcpToolSnapshot } from './acp-tool-snapshot.js';
|
||||
import { snapshotToPartPayload } from './acp-tool-snapshot.js';
|
||||
|
||||
interface PartInsert {
|
||||
message_id: string;
|
||||
sequence: number;
|
||||
kind: 'reasoning' | 'tool_call';
|
||||
payload: unknown;
|
||||
}
|
||||
|
||||
async function insertParts(sql: Sql, parts: PartInsert[]): Promise<void> {
|
||||
if (parts.length === 0) return;
|
||||
await sql`
|
||||
INSERT INTO message_parts ${sql(
|
||||
parts.map((p) => ({
|
||||
message_id: p.message_id,
|
||||
sequence: p.sequence,
|
||||
kind: p.kind,
|
||||
payload: sql.json(p.payload as never),
|
||||
})),
|
||||
'message_id',
|
||||
'sequence',
|
||||
'kind',
|
||||
'payload',
|
||||
)}
|
||||
`;
|
||||
}
|
||||
|
||||
/** Persist external-agent reasoning + tool calls into message_parts for reload. */
|
||||
export async function persistExternalAgentTurn(
|
||||
sql: Sql,
|
||||
assistantMessageId: string,
|
||||
snapshots: AcpToolSnapshot[],
|
||||
reasoningText: string,
|
||||
): Promise<void> {
|
||||
const parts: PartInsert[] = [];
|
||||
let seq = 0;
|
||||
if (reasoningText.trim()) {
|
||||
parts.push({
|
||||
message_id: assistantMessageId,
|
||||
sequence: seq++,
|
||||
kind: 'reasoning',
|
||||
payload: { text: reasoningText },
|
||||
});
|
||||
}
|
||||
for (const snapshot of snapshots) {
|
||||
parts.push({
|
||||
message_id: assistantMessageId,
|
||||
sequence: seq++,
|
||||
kind: 'tool_call',
|
||||
payload: snapshotToPartPayload(snapshot),
|
||||
});
|
||||
}
|
||||
await insertParts(sql, parts);
|
||||
}
|
||||
Reference in New Issue
Block a user