@townco/agent 0.1.115 → 0.1.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1492,21 +1492,7 @@ export class AgentAcpAdapter {
1492
1492
  toolCallBlock.subagentSessionId = meta.subagentSessionId;
1493
1493
  }
1494
1494
  if (meta?.subagentMessages) {
1495
- logger.info("[SUBAGENT-ADAPTER] Updating toolCallBlock with subagent messages", {
1496
- sessionId: params.sessionId,
1497
- toolCallId: toolCallBlock.id,
1498
- messagesReceived: meta.subagentMessages.length,
1499
- firstMessageContentLength: meta.subagentMessages[0]?.content?.length,
1500
- firstMessageBlocksCount: meta.subagentMessages[0]?.contentBlocks?.length,
1501
- existingMessagesCount: toolCallBlock.subagentMessages?.length || 0,
1502
- });
1503
1495
  toolCallBlock.subagentMessages = meta.subagentMessages;
1504
- logger.info("[SUBAGENT-ADAPTER] ToolCallBlock updated", {
1505
- sessionId: params.sessionId,
1506
- toolCallId: toolCallBlock.id,
1507
- toolCallBlockMessagesCount: toolCallBlock.subagentMessages?.length,
1508
- toolCallBlockFirstMessageLength: toolCallBlock.subagentMessages?.[0]?.content?.length,
1509
- });
1510
1496
  }
1511
1497
  if (meta?.subagentCompleted !== undefined) {
1512
1498
  toolCallBlock.subagentCompleted = meta.subagentCompleted;
@@ -1516,12 +1502,6 @@ export class AgentAcpAdapter {
1516
1502
  if (updateMsg._meta) {
1517
1503
  const subagentCompletedValue = updateMsg._meta
1518
1504
  ?.subagentCompleted;
1519
- logger.info("[DEBUG] Adapter forwarding tool_call_update to client", {
1520
- toolCallId: updateMsg.toolCallId,
1521
- hasSubagentCompleted: subagentCompletedValue !== undefined,
1522
- subagentCompleted: subagentCompletedValue,
1523
- metaKeys: Object.keys(updateMsg._meta),
1524
- });
1525
1505
  this.connection.sessionUpdate({
1526
1506
  sessionId: params.sessionId,
1527
1507
  update: {
@@ -2020,13 +2000,6 @@ export class AgentAcpAdapter {
2020
2000
  }
2021
2001
  // Capture the return value (PromptResponse with tokenUsage)
2022
2002
  _agentResponse = iterResult.value;
2023
- logger.info("[MSG_ACCUMULATION] Generator loop completed", {
2024
- sessionId: params.sessionId,
2025
- pendingTextLength: pendingText.length,
2026
- pendingTextPreview: pendingText.slice(0, 200),
2027
- contentBlocksCount: contentBlocks.length,
2028
- contentBlockTypes: contentBlocks.map((b) => b.type),
2029
- });
2030
2003
  // Flush any remaining pending text
2031
2004
  flushPendingText();
2032
2005
  }
@@ -2104,45 +2077,6 @@ export class AgentAcpAdapter {
2104
2077
  // Store the complete assistant response in session messages
2105
2078
  // Only store if session persistence is enabled
2106
2079
  if (!this.noSession && contentBlocks.length > 0) {
2107
- logger.info("[MSG_ACCUMULATION] Constructing final assistant message", {
2108
- sessionId: params.sessionId,
2109
- contentBlocksCount: contentBlocks.length,
2110
- contentBlockTypes: contentBlocks.map((b) => b.type),
2111
- contentBlockSummary: contentBlocks.map((b) => {
2112
- if (b.type === "text") {
2113
- return {
2114
- type: "text",
2115
- length: b.text.length,
2116
- preview: b.text.slice(0, 100),
2117
- };
2118
- }
2119
- if (b.type === "tool_call") {
2120
- return {
2121
- type: "tool_call",
2122
- id: b.id,
2123
- title: b.title,
2124
- status: b.status,
2125
- };
2126
- }
2127
- return { type: b.type };
2128
- }),
2129
- });
2130
- // Debug: log contentBlocks before creating assistant message
2131
- const subagentToolCalls = contentBlocks.filter((b) => b.type === "tool_call" && !!b.subagentMessages);
2132
- if (subagentToolCalls.length > 0) {
2133
- logger.info("[SUBAGENT-SESSION-SAVE] Creating assistant message with subagent tool calls", {
2134
- sessionId: params.sessionId,
2135
- totalContentBlocks: contentBlocks.length,
2136
- subagentToolCallsCount: subagentToolCalls.length,
2137
- subagentToolCallsDetails: subagentToolCalls.map((tc) => ({
2138
- id: tc.id,
2139
- title: tc.title,
2140
- messagesCount: tc.subagentMessages?.length,
2141
- firstMessageContentLength: tc.subagentMessages?.[0]?.content?.length,
2142
- firstMessageBlocksCount: tc.subagentMessages?.[0]?.contentBlocks?.length,
2143
- })),
2144
- });
2145
- }
2146
2080
  const assistantMessage = {
2147
2081
  role: "assistant",
2148
2082
  content: contentBlocks,
@@ -2152,19 +2086,10 @@ export class AgentAcpAdapter {
2152
2086
  const lastMessage = session.messages[session.messages.length - 1];
2153
2087
  if (lastMessage && lastMessage.role === "assistant") {
2154
2088
  // Update the existing message instead of adding a duplicate
2155
- logger.debug("[MSG_ACCUMULATION] Updating existing assistant message", {
2156
- sessionId: params.sessionId,
2157
- previousContentBlocks: lastMessage.content.length,
2158
- newContentBlocks: contentBlocks.length,
2159
- });
2160
2089
  session.messages[session.messages.length - 1] = assistantMessage;
2161
2090
  }
2162
2091
  else {
2163
2092
  // Add new message (no mid-turn updates occurred)
2164
- logger.debug("[MSG_ACCUMULATION] Adding new assistant message", {
2165
- sessionId: params.sessionId,
2166
- messageIndex: session.messages.length,
2167
- });
2168
2093
  session.messages.push(assistantMessage);
2169
2094
  }
2170
2095
  // Create context snapshot based on previous context
@@ -334,7 +334,9 @@ export class LangchainAgent {
334
334
  const nonMcpToolMetadata = enabledTools.map(extractToolMetadata);
335
335
  const nonMcpToolDefinitionsTokens = estimateAllToolsOverhead(nonMcpToolMetadata);
336
336
  // Calculate TODO_WRITE_INSTRUCTIONS overhead if applicable
337
- const hasTodoWriteTool = builtInNames.includes("todo_write");
337
+ // Skip for subagents since the todo_write tool is filtered out for them
338
+ const isSubagentForTokens = req.sessionMeta?.[SUBAGENT_MODE_KEY] === true;
339
+ const hasTodoWriteTool = builtInNames.includes("todo_write") && !isSubagentForTokens;
338
340
  const todoInstructionsTokens = hasTodoWriteTool
339
341
  ? countTokens(TODO_WRITE_INSTRUCTIONS)
340
342
  : 0;
@@ -623,7 +625,9 @@ export class LangchainAgent {
623
625
  agentConfig.systemPrompt = effectiveSystemPrompt;
624
626
  }
625
627
  // Inject system prompt with optional TodoWrite instructions
626
- const hasTodoWrite = builtInNames.includes("todo_write");
628
+ // Skip for subagents since the todo_write tool is filtered out for them
629
+ const isSubagentForPrompt = req.sessionMeta?.[SUBAGENT_MODE_KEY] === true;
630
+ const hasTodoWrite = builtInNames.includes("todo_write") && !isSubagentForPrompt;
627
631
  if (hasTodoWrite) {
628
632
  agentConfig.systemPrompt = `${agentConfig.systemPrompt ?? ""}\n\n${TODO_WRITE_INSTRUCTIONS}`;
629
633
  }