diff --git a/.changeset/user-prompt-hook-context.md b/.changeset/user-prompt-hook-context.md new file mode 100644 index 0000000000..5dcd0cdaa0 --- /dev/null +++ b/.changeset/user-prompt-hook-context.md @@ -0,0 +1,6 @@ +--- +"@moonshot-ai/agent-core": patch +"@moonshot-ai/kimi-code": patch +--- + +Keep blocked prompt hook conversations available to subsequent model turns. diff --git a/apps/vis/web/src/components/wire/WireHeadline.tsx b/apps/vis/web/src/components/wire/WireHeadline.tsx index 62384f2cb1..a743b3a788 100644 --- a/apps/vis/web/src/components/wire/WireHeadline.tsx +++ b/apps/vis/web/src/components/wire/WireHeadline.tsx @@ -156,18 +156,6 @@ export function renderHeadline(r: AgentRecord): HeadlineRender { ), }; - case 'context.mark_last_user_prompt_blocked': - return { - main: ( - - - blocked - - hook: {r.hookEvent} - - ), - }; - case 'context.clear': return { main: context cleared }; diff --git a/apps/vis/web/src/components/wire/typeMeta.ts b/apps/vis/web/src/components/wire/typeMeta.ts index 2f02bf0a74..66d5a0eea6 100644 --- a/apps/vis/web/src/components/wire/typeMeta.ts +++ b/apps/vis/web/src/components/wire/typeMeta.ts @@ -12,7 +12,6 @@ export const TYPE_TONE: Record = { 'turn.cancel': 'warning', 'context.append_message': 'assistant', 'context.append_loop_event': 'meta', - 'context.mark_last_user_prompt_blocked': 'warning', 'context.clear': 'warning', 'context.apply_compaction': 'compaction', 'tools.register_user_tool': 'tools', @@ -40,7 +39,6 @@ export const TYPE_LABEL: Record = { 'turn.cancel': 'cancel', 'context.append_message': 'message', 'context.append_loop_event': 'loop', - 'context.mark_last_user_prompt_blocked': 'blocked', 'context.clear': 'clear', 'context.apply_compaction': 'compacted', 'tools.register_user_tool': 'tool+', diff --git a/packages/agent-core/src/agent/context/index.ts b/packages/agent-core/src/agent/context/index.ts index a9d65cb2a2..2244a98f37 100644 --- a/packages/agent-core/src/agent/context/index.ts +++ b/packages/agent-core/src/agent/context/index.ts @@ -52,22 +52,6 @@ export class ContextMemory { }); } - markLastUserPromptBlocked(hookEvent: string): void { - this.agent.records.logRecord({ - type: 'context.mark_last_user_prompt_blocked', - hookEvent, - }); - for (let i = this._history.length - 1; i >= 0; i--) { - const message = this._history[i]; - if (message?.role !== 'user' || message.origin?.kind !== 'user') continue; - this._history[i] = { - ...message, - origin: { ...message.origin, blockedByHook: hookEvent }, - }; - return; - } - } - clear(): void { this.agent.records.logRecord({ type: 'context.clear' }); this._history = []; diff --git a/packages/agent-core/src/agent/context/types.ts b/packages/agent-core/src/agent/context/types.ts index a366fce350..ad57895c67 100644 --- a/packages/agent-core/src/agent/context/types.ts +++ b/packages/agent-core/src/agent/context/types.ts @@ -5,7 +5,6 @@ import type { BackgroundTaskStatus } from '../../tools/background'; export interface UserPromptOrigin { readonly kind: 'user'; - readonly blockedByHook?: string | undefined; } export const USER_PROMPT_ORIGIN: UserPromptOrigin = { kind: 'user' }; diff --git a/packages/agent-core/src/agent/records/index.ts b/packages/agent-core/src/agent/records/index.ts index b8fddb9f52..4261c997c9 100644 --- a/packages/agent-core/src/agent/records/index.ts +++ b/packages/agent-core/src/agent/records/index.ts @@ -70,9 +70,6 @@ function restoreAgentRecord(agent: Agent, input: AgentRecord): void { case 'context.append_message': agent.context.appendMessage(input.message); return; - case 'context.mark_last_user_prompt_blocked': - agent.context.markLastUserPromptBlocked(input.hookEvent); - return; case 'context.append_loop_event': agent.context.appendLoopEvent(input.event); return; diff --git a/packages/agent-core/src/agent/records/types.ts b/packages/agent-core/src/agent/records/types.ts index 88fbe6ef37..ca869e30df 100644 --- a/packages/agent-core/src/agent/records/types.ts +++ b/packages/agent-core/src/agent/records/types.ts @@ -66,7 +66,6 @@ export interface AgentRecordEvents { 'full_compaction.complete': {}; 'context.append_message': { message: ContextMessage }; - 'context.mark_last_user_prompt_blocked': { hookEvent: string }; 'context.append_loop_event': { event: LoopRecordedEvent }; 'context.clear': {}; 'context.apply_compaction': CompactionResult; diff --git a/packages/agent-core/src/agent/turn/index.ts b/packages/agent-core/src/agent/turn/index.ts index c14a4727f3..102b7f5deb 100644 --- a/packages/agent-core/src/agent/turn/index.ts +++ b/packages/agent-core/src/agent/turn/index.ts @@ -316,7 +316,6 @@ export class TurnFlow { signal.throwIfAborted(); const blockResult = renderUserPromptHookBlockResult(promptHookResults); if (blockResult !== undefined) { - this.agent.context.markLastUserPromptBlocked('UserPromptSubmit'); this.agent.context.appendMessage({ role: 'assistant', content: [{ type: 'text', text: blockResult.text }], diff --git a/packages/agent-core/test/agent/context.test.ts b/packages/agent-core/test/agent/context.test.ts index 740e3eeda6..2d6f5ff415 100644 --- a/packages/agent-core/test/agent/context.test.ts +++ b/packages/agent-core/test/agent/context.test.ts @@ -155,7 +155,6 @@ describe('Agent context', () => { ctx.configure(); ctx.agent.context.appendUserMessage([{ type: 'text', text: 'blocked prompt' }]); - ctx.agent.context.markLastUserPromptBlocked('UserPromptSubmit'); ctx.agent.context.appendMessage({ role: 'assistant', content: [ diff --git a/packages/agent-core/test/agent/turn.test.ts b/packages/agent-core/test/agent/turn.test.ts index 24ffa366eb..b39731e0b1 100644 --- a/packages/agent-core/test/agent/turn.test.ts +++ b/packages/agent-core/test/agent/turn.test.ts @@ -425,7 +425,7 @@ describe('Agent turn flow', () => { role: 'user', content: [{ type: 'text', text: 'bad words here' }], toolCalls: [], - origin: { kind: 'user', blockedByHook: 'UserPromptSubmit' }, + origin: { kind: 'user' }, }, { role: 'assistant',