Skip to content

fix(agent-core-v2): fold UserPromptSubmit hook output into the prompt message #11783

fix(agent-core-v2): fold UserPromptSubmit hook output into the prompt message

fix(agent-core-v2): fold UserPromptSubmit hook output into the prompt message #11783

Triggered via pull request September 29, 2026 07:03
Status Failure
Total duration 4m 0s
Artifacts –

ci.yml

on: pull_request
Matrix: test
Fit to window
Zoom out
Zoom in

Annotations

11 errors, 20 warnings, and 10 notices
test (3)
Process completed with exit code 1.
[agent-core-v2] test/features/tower/towerService.test.ts > AgentTowerService > leaves the roster untouched when another session owns the tower store: packages/agent-core-v2/test/features/tower/towerService.test.ts#L931
AssertionError: expected [ …(2) ] to deeply equal [ …(2) ] - Expected + Received [ - "tower: skipping roster agent death mark — tower store is owned by another session", "tower: skipping roster agent death clear — tower store is owned by another session", + "tower: skipping roster agent death mark — tower store is owned by another session", ] ❯ test/features/tower/towerService.test.ts:931:47
test (2)
Process completed with exit code 1.
[agent-core-v2] test/features/plan/plan.test.ts > Plan service > plan mode Bash ordinary permission behavior > allows Bash through ordinary yolo permission behavior: packages/agent-core-v2/test/features/plan/plan.test.ts#L789
Error: Snapshot `Plan service > plan mode Bash ordinary permission behavior > allows Bash through ordinary yolo permission behavior 1` mismatched - Expected + Received @@ -2,11 +2,11 @@ [emit] agent.status.updated { "time": "<time>", "agentId": "main", "permission": "yolo" } [wire] plan_mode.enter { "agentId": "main", "id": "test-plan", "time": "<time>" } [emit] agent.status.updated { "time": "<time>", "agentId": "main", "planMode": true } [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Remove forbidden.txt" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Remove forbidden.txt" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Remove forbidden.txt" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Remove forbidden.txt", "promptContent": [ { "type": "text", "text": "Remove forbidden.txt" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Remove forbidden.txt" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Remove forbidden.txt" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Remove forbidden.txt" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/features/plan/plan.test.ts:789:40
[agent-core-v2] test/features/plan/plan.test.ts > Plan service > plan allows safe tool flow > allows read-only Bash to continue through permission and execution: packages/agent-core-v2/test/features/plan/plan.test.ts#L710
Error: Snapshot `Plan service > plan allows safe tool flow > allows read-only Bash to continue through permission and execution 1` mismatched - Expected + Received @@ -2,11 +2,11 @@ [emit] agent.status.updated { "time": "<time>", "agentId": "main", "permission": "yolo" } [wire] plan_mode.enter { "agentId": "main", "id": "test-plan", "time": "<time>" } [emit] agent.status.updated { "time": "<time>", "agentId": "main", "planMode": true } [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Inspect without mutating files" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Inspect without mutating files" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Inspect without mutating files" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Inspect without mutating files", "promptContent": [ { "type": "text", "text": "Inspect without mutating files" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Inspect without mutating files" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Inspect without mutating files" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Inspect without mutating files" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/features/plan/plan.test.ts:710:40
[agent-core-v2] test/agent/loop/loop.test.ts > Agent loop > runs an agent turn through registered tool approval and execution: packages/agent-core-v2/test/agent/loop/loop.test.ts#L490
Error: Snapshot `Agent loop > runs an agent turn through registered tool approval and execution 1` mismatched - Expected + Received @@ -1,9 +1,9 @@ [wire] tools.set_active_tools { "agentId": "main", "names": [ "Lookup" ], "time": "<time>" } [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Look up moon" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Look up moon" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up moon" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up moon", "promptContent": [ { "type": "text", "text": "Look up moon" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/agent/loop/loop.test.ts:490:43
[agent-core-v2] test/agent/loop/loop.test.ts > Agent loop > fails the turn after a filtered step completes: packages/agent-core-v2/test/agent/loop/loop.test.ts#L186
Error: Snapshot `Agent loop > fails the turn after a filtered step completes 1` mismatched - Expected + Received @@ -1,8 +1,8 @@ [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Hello" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Hello" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Hello" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Hello", "promptContent": [ { "type": "text", "text": "Hello" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Hello" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Hello" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Hello" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/agent/loop/loop.test.ts:186:38
[agent-core-v2] test/agent/loop/loop.test.ts > Agent loop > runs a text-only agent turn from prompt to completion: packages/agent-core-v2/test/agent/loop/loop.test.ts#L91
Error: Snapshot `Agent loop > runs a text-only agent turn from prompt to completion 1` mismatched - Expected + Received @@ -1,9 +1,9 @@ [wire] tools.set_active_tools { "agentId": "main", "names": [], "time": "<time>" } [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Hello" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Hello" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Hello" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Hello", "promptContent": [ { "type": "text", "text": "Hello" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Hello" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Hello" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Hello" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/agent/loop/loop.test.ts:91:38
[agent-core-v2] test/tool/tool.test.ts > Agent tools > registered user tools > routes registered user tools through tool.call request/response: packages/agent-core-v2/test/tool/tool.test.ts#L4596
Error: Snapshot `Agent tools > registered user tools > routes registered user tools through tool.call request/response 1` mismatched - Expected + Received @@ -1,11 +1,11 @@ [wire] permission.set_mode { "agentId": "main", "mode": "auto", "time": "<time>" } [emit] agent.status.updated { "time": "<time>", "agentId": "main", "permission": "auto" } [wire] tools.register_user_tool { "name": "Lookup", "description": "Look up a short test value.", "parameters": { "type": "object", "properties": { "query": { "type": "string" } }, "required": [ "query" ], "additionalProperties": false }, "agentId": "main", "time": "<time>" } [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Look up moon" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Look up moon" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up moon" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up moon", "promptContent": [ { "type": "text", "text": "Look up moon" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 1, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "<auto-mode-enter-reminder>" } ], "toolCalls": [], "origin": { "kind": "injection", "variant": "permission_mode" } } ] } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Look up moon" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } ❯ test/tool/tool.test.ts:4596:9
test (4)
Process completed with exit code 1.
[agent-core-v2] test/app/config/config.test.ts > Agent config > keeps turn-start config for later steps and applies updates to the next turn: packages/agent-core-v2/test/app/config/config.test.ts#L322
Error: Snapshot `Agent config > keeps turn-start config for later steps and applies updates to the next turn 1` mismatched - Expected + Received @@ -1,8 +1,8 @@ [emit] prompt.submitted { "time": "<time>", "agentId": "main", "promptId": "<msg-1>", "userMessageId": "<msg-1>", "status": "running", "content": [ { "type": "text", "text": "Look up before config changes" } ], "createdAt": "<time>" } [wire] turn.prompt { "agentId": "main", "input": [ { "type": "text", "text": "Look up before config changes" } ], "origin": { "kind": "user" }, "promptId": "<msg-1>", "turnId": 0, "time": "<time>" } - [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up before config changes" } + [emit] turn.started { "time": "<time>", "agentId": "main", "turnId": 0, "promptId": "<msg-1>", "origin": { "kind": "user" }, "prompt": "Look up before config changes", "promptContent": [ { "type": "text", "text": "Look up before config changes" } ] } [emit] context.spliced { "time": "<time>", "agentId": "main", "start": 0, "deleteCount": 0, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Look up before config changes" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } } ] } [emit] prompt.started { "time": "<time>", "agentId": "main", "promptId": "<msg-1>" } [wire] context.append_message { "agentId": "main", "message": { "role": "user", "content": [ { "type": "text", "text": "Look up before config changes" } ], "id": "<msg-1>", "toolCalls": [], "origin": { "kind": "user" } }, "time": "<time>" } [wire] agent.message.appended { "message": { "message": { "role": "user", "content": [ { "type": "text", "text": "Look up before config changes" } ] }, "meta": { "source": "input", "promptId": "<msg-1>", "origin": { "kind": "user" }, "tracked": true, "createdAt": "<time>", "userMessageId": "<msg-1>" } }, "time": "<time>", "kind": "event" } [wire] agent.turn.started { "turnId": 0, "queueItemId": "<msg-1>", "time": "<time>", "kind": "event" } ❯ test/app/config/config.test.ts:322:43
test-pi-tui
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test-vscode-legacy
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
lint
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
eslint-plugin-unicorn(prefer-string-replace-all): packages/agent-core-v2/src/_base/utils/workdir-slug.ts#L18
Prefer `String#replaceAll()` over `String#replace()` when using a regex with the global flag.
eslint(no-console): packages/agent-core-v2/src/_base/di/lifecycle.ts#L640
Unexpected console statement.
eslint(no-console): packages/agent-core-v2/src/_base/di/lifecycle.ts#L558
Unexpected console statement.
eslint(no-loop-func): packages/agent-core-v2/src/_base/event.ts#L211
Function declared in a loop contains unsafe references to variable(s)
eslint(no-loop-func): packages/agent-core-v2/src/_base/event.ts#L206
Function declared in a loop contains unsafe references to variable(s)
eslint-plugin-import(no-duplicates): packages/agent-core-v2/src/_base/di/scope.ts#L3
Module './instantiation' is imported more than once in this file
eslint(no-console): packages/agent-core-v2/src/human/utils/watch.ts#L90
Unexpected console statement.
eslint-plugin-import(first): packages/agent-core-v2/src/_base/di/test.ts#L12
Import statements must come first
eslint-plugin-import(first): packages/agent-core-v2/src/_base/di/test.ts#L11
Import statements must come first
build
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
typecheck
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (5)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (1)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (3)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (2)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (4)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test-pi-tui
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test-vscode-legacy
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
lint
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
build
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
typecheck
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (5)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (1)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (3)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (2)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (4)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"