




















@@ -29,6 +29,11 @@ const legacyWriterNames = new Set([
2929"updateSessionStore",
3030"updateSessionStoreEntry",
3131]);
32+const legacyTranscriptWriterNames = new Set([
33+"appendSessionTranscriptMessage",
34+"emitSessionTranscriptUpdate",
35+"rewriteTranscriptEntriesInSessionFile",
36+]);
32373338export const migratedSessionAccessorFiles = new Set([
3439"src/agents/embedded-agent-runner/compaction-successor-transcript.ts",
@@ -88,6 +93,15 @@ export const migratedSessionAccessorWriteFiles = new Set([
8893"src/auto-reply/reply/session-usage.ts",
8994]);
909596+export const migratedTranscriptWriterFiles = new Set([
97+"src/agents/command/attempt-execution.ts",
98+"src/agents/embedded-agent-runner/context-engine-maintenance.ts",
99+"src/config/sessions/transcript.ts",
100+"src/gateway/server-methods/chat.ts",
101+"src/gateway/server-methods/chat-transcript-inject.ts",
102+"src/sessions/user-turn-transcript.ts",
103+]);
104+91105function normalizeRelativePath(filePath) {
92106return filePath.replaceAll(path.sep, "/");
93107}
@@ -127,7 +141,7 @@ function bindingName(node) {
127141return null;
128142}
129143130-function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyKind) {
144+function findNamedBoundaryViolations(content, fileName, legacyNames, subject) {
131145const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true);
132146const violations = [];
133147@@ -140,7 +154,7 @@ function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyK
140154if (legacyNames.has(importedName)) {
141155violations.push({
142156line: toLine(sourceFile, specifier),
143-reason: `imports legacy session store ${legacyKind} "${importedName}"`,
157+reason: `imports ${subject} "${importedName}"`,
144158});
145159}
146160}
@@ -152,15 +166,15 @@ function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyK
152166if (name && legacyNames.has(name)) {
153167violations.push({
154168line: toLine(sourceFile, node),
155-reason: `aliases legacy session store ${legacyKind} "${name}"`,
169+reason: `aliases ${subject} "${name}"`,
156170});
157171}
158172}
159173160174if (ts.isPropertyAccessExpression(node) && legacyNames.has(node.name.text)) {
161175violations.push({
162176line: toLine(sourceFile, node.name),
163-reason: `references legacy session store ${legacyKind} "${node.name.text}"`,
177+reason: `references ${subject} "${node.name.text}"`,
164178});
165179}
166180@@ -171,7 +185,7 @@ function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyK
171185) {
172186violations.push({
173187line: toLine(sourceFile, node.argumentExpression),
174-reason: `references legacy session store ${legacyKind} "${node.argumentExpression.text}"`,
188+reason: `references ${subject} "${node.argumentExpression.text}"`,
175189});
176190}
177191@@ -184,7 +198,7 @@ function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyK
184198) {
185199violations.push({
186200line: toLine(sourceFile, node.expression),
187-reason: `calls legacy session store ${legacyKind} "${calleeName}"`,
201+reason: `calls ${subject} "${calleeName}"`,
188202});
189203}
190204}
@@ -196,6 +210,15 @@ function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyK
196210return violations;
197211}
198212213+function findNamedSessionStoreViolations(content, fileName, legacyNames, legacyKind) {
214+return findNamedBoundaryViolations(
215+content,
216+fileName,
217+legacyNames,
218+`legacy session store ${legacyKind}`,
219+);
220+}
221+199222export function findSessionAccessorBoundaryViolations(content, fileName = "source.ts") {
200223const legacyNames = legacyNamesForFile(fileName);
201224const legacyKind = legacyNames === legacyWholeStoreAccessNames ? "access" : "reader";
@@ -206,6 +229,15 @@ export function findSessionAccessorWriteBoundaryViolations(content, fileName = "
206229return findNamedSessionStoreViolations(content, fileName, legacyWriterNames, "writer");
207230}
208231232+export function findTranscriptWriterBoundaryViolations(content, fileName = "source.ts") {
233+return findNamedBoundaryViolations(
234+content,
235+fileName,
236+legacyTranscriptWriterNames,
237+"legacy transcript writer",
238+);
239+}
240+209241export async function main() {
210242const repoRoot = resolveRepoRoot(import.meta.url);
211243const readSourceRoots = resolveSourceRoots(repoRoot, [
@@ -220,6 +252,13 @@ export async function main() {
220252"src/infra",
221253]);
222254const writeSourceRoots = resolveSourceRoots(repoRoot, ["src/agents", "src/auto-reply"]);
255+const transcriptWriterSourceRoots = resolveSourceRoots(repoRoot, [
256+"src/agents/command",
257+"src/agents/embedded-agent-runner",
258+"src/config/sessions",
259+"src/gateway/server-methods",
260+"src/sessions",
261+]);
223262const readViolations = await collectFileViolations({
224263 repoRoot,
225264sourceRoots: readSourceRoots,
@@ -241,7 +280,14 @@ export async function main() {
241280),
242281findViolations: findSessionAccessorWriteBoundaryViolations,
243282});
244-const violations = [...readViolations, ...writeViolations];
283+const transcriptWriterViolations = await collectFileViolations({
284+ repoRoot,
285+sourceRoots: transcriptWriterSourceRoots,
286+skipFile: (filePath) =>
287+!migratedTranscriptWriterFiles.has(normalizeRelativePath(path.relative(repoRoot, filePath))),
288+findViolations: findTranscriptWriterBoundaryViolations,
289+});
290+const violations = [...readViolations, ...writeViolations, ...transcriptWriterViolations];
245291246292if (violations.length === 0) {
247293console.log("session accessor boundary guard passed.");
@@ -253,7 +299,7 @@ export async function main() {
253299console.error(`- ${violation.path}:${violation.line}: ${violation.reason}`);
254300}
255301console.error(
256-"Use src/config/sessions/session-accessor.ts helpers for migrated read/write paths. Expand this ratchet only after a slice migrates more files.",
302+"Use src/config/sessions/session-accessor.ts helpers for migrated read/write and transcript-writer paths. Expand this ratchet only after a slice migrates more files.",
257303);
258304process.exit(1);
259305}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。