toeverything/AFFiNE · error · CopilotActionTaken
copilot_action_taken
copilot_action_taken
Error message
Action has been taken, no more messages allowed.
What it means
appendTurn throws CopilotActionTaken when a user turn is appended to a session whose prompt is an action and prior turns already exist — action prompts allow exactly one user message, and further input is rejected.
Source
Thrown at packages/backend/server/src/plugins/copilot/session.ts:107
if (!this.stashTurnCount) return [];
return this.state.turns.slice(-this.stashTurnCount);
}
get latestUserTurn() {
return this.state.turns.findLast(({ role }) => role === 'user');
}
findTurn(turnId: string) {
return this.state.turns.find(({ id }) => id === turnId);
}
private appendTurn(turn: Turn, persisted: boolean) {
if (
this.state.prompt.action &&
this.state.turns.length > 0 &&
turn.role === 'user'
) {
throw new CopilotActionTaken();
}
this.state.turns.push(turn);
if (!persisted) {
this.stashTurnCount += 1;
}
}
pushTurn(turn: Turn) {
this.appendTurn(turn, false);
}
pushPersistedTurn(turn: Turn) {
this.appendTurn(turn, true);
}
revertLatestMessage(removeLatestUserMessage: boolean) {
const turns = this.state.turns;
turns.splice(View on GitHub (pinned to b4c8548c09)
Solutions
- Start a new copilot session to continue the conversation after an action has been taken.
- Do not send further messages on a session that is finalized by an action; create a fresh session instead.
- Adjust the client flow to open a new session after the action completes.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/backend/server/src/plugins/copilot/session.ts:107 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of toeverything/AFFiNE@b4c8548c09 (2026-08-18).
Data as JSON: /api/errors/62ac8f40ebdddcfd.
Report an issue: GitHub.