fix: pass assistantName to container agent instead of hardcoding 'Andy'

The container agent-runner had 'Andy' hardcoded as the sender name in
archived conversation transcripts. This ignored the configurable
ASSISTANT_NAME setting, so users who changed their assistant's name
(via .env or config) would still see 'Andy' in transcripts.

- Add assistantName field to ContainerInput interface (both host and
  container copies)
- Pass ASSISTANT_NAME from config through to container in index.ts
  and task-scheduler.ts
- Thread assistantName through createPreCompactHook and
  formatTranscriptMarkdown in the agent-runner
- Use 'AssistantNameMissing' as fallback instead of 'Andy' so a
  missing name is visible rather than silently wrong

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dan Shapiro
2026-02-22 12:22:07 -08:00
parent 1980d97d90
commit 107aff850c
4 changed files with 10 additions and 5 deletions

View File

@@ -26,6 +26,7 @@ interface ContainerInput {
chatJid: string;
isMain: boolean;
isScheduledTask?: boolean;
assistantName?: string;
secrets?: Record<string, string>;
}
@@ -142,7 +143,7 @@ function getSessionSummary(sessionId: string, transcriptPath: string): string |
/**
* Archive the full transcript to conversations/ before compaction.
*/
function createPreCompactHook(): HookCallback {
function createPreCompactHook(assistantName?: string): HookCallback {
return async (input, _toolUseId, _context) => {
const preCompact = input as PreCompactHookInput;
const transcriptPath = preCompact.transcript_path;
@@ -172,7 +173,7 @@ function createPreCompactHook(): HookCallback {
const filename = `${date}-${name}.md`;
const filePath = path.join(conversationsDir, filename);
const markdown = formatTranscriptMarkdown(messages, summary);
const markdown = formatTranscriptMarkdown(messages, summary, assistantName);
fs.writeFileSync(filePath, markdown);
log(`Archived conversation to ${filePath}`);
@@ -252,7 +253,7 @@ function parseTranscript(content: string): ParsedMessage[] {
return messages;
}
function formatTranscriptMarkdown(messages: ParsedMessage[], title?: string | null): string {
function formatTranscriptMarkdown(messages: ParsedMessage[], title?: string | null, assistantName?: string): string {
const now = new Date();
const formatDateTime = (d: Date) => d.toLocaleString('en-US', {
month: 'short',
@@ -271,7 +272,7 @@ function formatTranscriptMarkdown(messages: ParsedMessage[], title?: string | nu
lines.push('');
for (const msg of messages) {
const sender = msg.role === 'user' ? 'User' : 'Andy';
const sender = msg.role === 'user' ? 'User' : (assistantName || 'AssistantNameMissing');
const content = msg.content.length > 2000
? msg.content.slice(0, 2000) + '...'
: msg.content;
@@ -449,7 +450,7 @@ async function runQuery(
},
},
hooks: {
PreCompact: [{ hooks: [createPreCompactHook()] }],
PreCompact: [{ hooks: [createPreCompactHook(containerInput.assistantName)] }],
PreToolUse: [{ matcher: 'Bash', hooks: [createSanitizeBashHook()] }],
},
}