惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
量子位
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
博客园 - Franky
M
MIT News - Artificial intelligence
U
Unit 42
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
J
Java Code Geeks
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
V
V2EX

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
refactor: add SDK transcript identity target API (#95030)...
jalehman · 2026-06-21 · via Recent Commits to openclaw:main

@@ -26,7 +26,10 @@ import {

2626

streamSessionTranscriptLinesReverse,

2727

} from "./transcript-stream.js";

2828

import { isCanonicalSessionTranscriptEntry } from "./transcript-tree.js";

29-

import { resolveOwnedSessionTranscriptWriteLockRunner } from "./transcript-write-context.js";

29+

import {

30+

resolveOwnedSessionTranscriptWriteLockRunner,

31+

type OwnedSessionTranscriptPublishedEntry,

32+

} from "./transcript-write-context.js";

3033

import { CURRENT_SESSION_VERSION } from "./version.js";

31343235

const SESSION_MANAGER_APPEND_MAX_BYTES = 8 * 1024 * 1024;

@@ -385,6 +388,13 @@ export type AppendSessionTranscriptMessageResult<TMessage> = {

385388

appended: boolean;

386389

};

387390391+

export type SessionTranscriptAppendTransactionContext = {

392+

appendEvent: (event: unknown) => Promise<void>;

393+

appendMessage: <TMessage>(

394+

params: Omit<AppendSessionTranscriptMessageParams<TMessage>, "config" | "transcriptPath">,

395+

) => Promise<AppendSessionTranscriptMessageResult<TMessage> | undefined>;

396+

};

397+388398

function isTranscriptAgentMessage(value: unknown): value is AgentMessage {

389399

return (

390400

typeof value === "object" &&

@@ -464,6 +474,57 @@ export async function appendSessionTranscriptMessageWithOwnedWriteLock<TMessage>

464474

return await activeLockRunner(() => appendSessionTranscriptMessageLocked(params));

465475

}

466476477+

/**

478+

* Runs a group of transcript appends through one append queue and write lock.

479+

*/

480+

export async function runSessionTranscriptAppendTransaction<T>(

481+

params: Pick<AppendSessionTranscriptMessageParams, "config" | "transcriptPath">,

482+

run: (context: SessionTranscriptAppendTransactionContext) => Promise<T> | T,

483+

): Promise<T> {

484+

const publishedEntries: OwnedSessionTranscriptPublishedEntry[] = [];

485+

const runTransaction = async (): Promise<T> =>

486+

await run({

487+

appendEvent: async (event) => {

488+

const result = await appendSessionTranscriptEventLocked({

489+

config: params.config,

490+

event,

491+

transcriptPath: params.transcriptPath,

492+

});

493+

publishedEntries.push({ kind: "serialized", serialized: result.serializedEntry });

494+

},

495+

appendMessage: async (messageParams) => {

496+

const result = await appendSessionTranscriptMessageLocked({

497+

...messageParams,

498+

config: params.config,

499+

onHeaderCreated: (header) => {

500+

publishedEntries.push({ kind: "header", serialized: header });

501+

},

502+

transcriptPath: params.transcriptPath,

503+

});

504+

if (result?.appended === true) {

505+

publishedEntries.push({ kind: "id", id: result.messageId });

506+

}

507+

return result;

508+

},

509+

});

510+

const activeLockRunner = resolveOwnedSessionTranscriptWriteLockRunner({

511+

sessionFile: params.transcriptPath,

512+

});

513+

if (activeLockRunner) {

514+

return await activeLockRunner(

515+

() => withSessionTranscriptAppendQueue(params.transcriptPath, runTransaction),

516+

{

517+

publishOwnedWrite: true,

518+

resolvePublishedEntries: () => publishedEntries,

519+

resolvePublishedEntriesAfterFailure: () => publishedEntries,

520+

},

521+

);

522+

}

523+

return await withSessionTranscriptAppendQueue(params.transcriptPath, () =>

524+

withSessionTranscriptWriteLock(params, runTransaction),

525+

);

526+

}

527+467528

type AppendSessionTranscriptEventParams = {

468529

config?: OpenClawConfig;

469530

event: unknown;