diff --git a/README.md b/README.md
index 96c6cb8..64b5a31 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,17 @@
# opencode-auto-continue
-OpenCode plugin that automatically sends "continue" when transient errors occur, allowing sessions to recover and resume without manual intervention. Handles API errors, provider issues, context overflow, connection resets, tool failures, and more — with configurable error patterns so you control exactly which errors trigger a retry.
+OpenCode plugin that automatically sends "continue" when transient errors or completed empty assistant responses occur, allowing sessions to recover and resume without manual intervention. Handles API errors, provider issues, context overflow, connection resets, tool failures, empty provider responses, and more — with configurable safeguards so you control exactly which failures trigger a retry.
## How It Works
-1. **Detects errors**: Listens for `session.error` and `message.updated` events
-2. **Pattern matching**: Matches error name + message against configurable patterns (case-insensitive substrings). Exclude patterns are checked first to prevent retrying user-initiated aborts.
-3. **Waits for idle**: When the session becomes idle after a matched error, sends "continue" via `promptAsync`
-4. **Safety limits**: Configurable throttle and max consecutive retries prevent infinite loops
-5. **Auto-reset**: Consecutive retry counter resets when a message completes successfully
+1. **Detects recoverable failures**: Listens for explicit errors and completed assistant messages that end with `finish: "unknown"`, zero output tokens, and no text or error.
+2. **Pattern and state matching**: Matches explicit errors against configurable patterns and strictly validates the latest assistant message before treating an empty response as recoverable. User aborts, tool calls, questions, and permission prompts are excluded.
+3. **Waits for idle**: When the session becomes idle after a recoverable failure, rechecks the latest state after the configured delay and sends "continue" via `promptAsync`.
+4. **Recovers stalled requests**: Aborts a request that remains busy for 200 seconds without any real assistant activity, then sends "continue" after the session becomes idle.
+5. **Safety limits**: Configurable throttle and max consecutive retries prevent infinite loops
+6. **Auto-reset**: Consecutive retry counter resets when a message completes successfully
## Installation
@@ -86,6 +87,13 @@ Create `opencode-auto-continue.jsonc` in your `.opencode/` directory. The follow
// Set to false to disable the plugin without removing it
"enabled": true,
+ // Retry finish="unknown" assistant responses with zero output and no text/error
+ "retryEmptyResponses": true,
+
+ // Abort and retry after 200 seconds with no text, reasoning, tool call, or output token
+ // Set to 0 to disable stalled-request recovery
+ "stalledRequestTimeoutMs": 200000,
+
// Update throttle: minimum ms between remote version checks.
// The plugin only checks for new versions when you run /ac, /ac status,
// or /auto-continue — this controls how often that check hits GitHub.
@@ -101,12 +109,33 @@ Create `opencode-auto-continue.jsonc` in your `.opencode/` directory. The follow
| `delayMs` | number | `500` | Delay after session idle before sending continue |
| `maxConsecutive` | number | `5` | Max consecutive auto-continues before giving up (0 = unlimited) |
| `enabled` | boolean | `true` | Set `false` to disable without removing from plugin list |
+| `retryEmptyResponses` | boolean | `true` | Retry strict completed empty assistant responses without an explicit error |
+| `stalledRequestTimeoutMs` | number | `200000` | Abort and retry a busy request with no real assistant activity after this delay (0 disables) |
| `updateThrottleMs` | number | `30000` | Update throttle: minimum ms between remote version checks |
| `errorPatterns` | string[] | *(see below)* | Error substrings that trigger auto-continue (case-insensitive) |
| `excludePatterns` | string[] | *(see below)* | Error substrings that **never** trigger auto-continue (checked first) |
All fields are optional — omitted keys use the defaults shown above. You can also manage timing settings at runtime via `/auto-continue global `.
+### Completed Empty Responses
+
+Some providers can finish a request without emitting an explicit error or a usable assistant response. The plugin treats this as recoverable only when the latest assistant message has all of the following properties when the session becomes idle:
+
+- `finish` is exactly `"unknown"`
+- output token count is `0`
+- no non-empty text part was emitted for that assistant message
+- no assistant or session error was reported
+- the turn was not user-aborted
+- the session is not waiting for a question answer or permission reply
+
+The existing `delayMs`, `throttleMs`, and `maxConsecutive` limits apply. A late successful `finish: "stop"` event cancels a queued retry, and a successful stop resets the consecutive retry counter. Set `retryEmptyResponses` to `false` to retain error-only behavior.
+
+### Stalled Requests
+
+The plugin starts a watchdog when a session becomes busy. If the request remains busy for `stalledRequestTimeoutMs` without emitting non-empty text, reasoning, a tool call, or any output token, the plugin calls OpenCode's session abort API and sends "continue" after the session becomes idle.
+
+The default timeout is 200 seconds. Once real assistant activity begins, the watchdog is cancelled, so it does not impose a total-duration limit on long responses or tool executions. User-initiated aborts, questions, and permission prompts remain excluded from automatic recovery. Set `stalledRequestTimeoutMs` to `0` to disable this behavior.
+
### Error Patterns
The plugin matches each error against a list of patterns. The error is formatted as `"ErrorName: error message"` and each pattern is matched as a case-insensitive substring.
diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map
index 7896960..12f633d 100644
--- a/dist/index.d.ts.map
+++ b/dist/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuXlD,QAAA,MAAM,MAAM,EAAE,MAw3Bb,CAAC;AAEF,eAAe,MAAM,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA4ZlD,QAAA,MAAM,MAAM,EAAE,MAilCb,CAAC;AAEF,eAAe,MAAM,CAAC"}
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
index 80a11c2..caacb17 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,5 +1,6 @@
import { access, lstat, mkdir, readdir, readFile, realpath, rm, writeFile } from "node:fs/promises";
import { join } from "node:path";
+import { createTurnEvidence, isCompletedEmptyResponse, recordTextPart, updateAssistantEvidence, } from "./recovery.js";
const PLUGIN_NAME = "opencode-auto-continue";
const CONFIG_DIR = ".opencode";
const CONFIG_FILE = `${PLUGIN_NAME}.jsonc`;
@@ -217,6 +218,10 @@ const DEFAULTS = {
maxConsecutive: 5,
/** Whether the plugin is enabled */
enabled: true,
+ /** Retry completed assistant responses that contain no usable output */
+ retryEmptyResponses: true,
+ /** Abort and retry a busy request with no assistant activity after this delay (0 disables) */
+ stalledRequestTimeoutMs: 200_000,
/** Minimum ms between remote version checks */
updateThrottleMs: 30_000,
/** Disable all remote calls and version-related filesystem checks */
@@ -286,6 +291,11 @@ async function loadConfig(directory, log) {
config.maxConsecutive = parsed.maxConsecutive;
if (typeof parsed.enabled === "boolean")
config.enabled = parsed.enabled;
+ if (typeof parsed.retryEmptyResponses === "boolean")
+ config.retryEmptyResponses = parsed.retryEmptyResponses;
+ if (typeof parsed.stalledRequestTimeoutMs === "number") {
+ config.stalledRequestTimeoutMs = parsed.stalledRequestTimeoutMs;
+ }
if (typeof parsed.updateThrottleMs === "number")
config.updateThrottleMs = parsed.updateThrottleMs;
if (typeof parsed.offlineMode === "boolean")
@@ -332,6 +342,17 @@ function isRetryableError(error, config) {
}
return false;
}
+function isExcludedError(error, config) {
+ if (!error || typeof error !== "object")
+ return false;
+ const err = error;
+ const data = err.data;
+ const name = typeof err.name === "string" ? err.name : "";
+ const message = (typeof data?.message === "string" ? data.message : null) ??
+ (typeof err.message === "string" ? err.message : "");
+ const matchStr = `${name}: ${message}`.toLowerCase();
+ return config.excludePatterns.some((pattern) => matchStr.includes(pattern.toLowerCase()));
+}
function errorMessage(error) {
if (!error || typeof error !== "object")
return "unknown";
@@ -592,6 +613,8 @@ const plugin = async ({ client, directory }) => {
delayMs: globalConfig.delayMs,
maxConsecutive: globalConfig.maxConsecutive,
enabled: globalConfig.enabled,
+ retryEmptyResponses: globalConfig.retryEmptyResponses,
+ stalledRequestTimeoutMs: globalConfig.stalledRequestTimeoutMs,
updateThrottleMs: globalConfig.updateThrottleMs,
};
if (globalConfig.offlineMode) {
@@ -615,11 +638,69 @@ const plugin = async ({ client, directory }) => {
lastContinueTime: 0,
pendingContinue: false,
consecutiveCount: 0,
+ turn: createTurnEvidence(),
+ busy: false,
+ pluginAbortPending: false,
+ sawAssistantActivity: false,
};
sessions.set(sessionID, state);
}
return state;
}
+ function clearIdleTimer(state) {
+ if (state.idleTimer)
+ clearTimeout(state.idleTimer);
+ state.idleTimer = undefined;
+ }
+ function clearStalledTimer(state) {
+ if (state.stalledTimer)
+ clearTimeout(state.stalledTimer);
+ state.stalledTimer = undefined;
+ }
+ function hasAssistantActivity(state) {
+ const assistant = state.turn.assistant;
+ return Boolean(state.sawAssistantActivity ||
+ (assistant && (assistant.outputTokens > 0 || assistant.sawText || assistant.finish === "tool-calls")));
+ }
+ function startStalledTimer(sessionID, state) {
+ const config = getEffectiveConfig(sessionID);
+ if (state.stalledTimer)
+ return;
+ if (!config.enabled || config.stalledRequestTimeoutMs <= 0 || hasAssistantActivity(state))
+ return;
+ if (state.pluginAbortPending)
+ return;
+ if (state.turn.waitingForQuestion || state.turn.waitingForPermission)
+ return;
+ state.stalledTimer = setTimeout(async () => {
+ state.stalledTimer = undefined;
+ const currentConfig = getEffectiveConfig(sessionID);
+ if (!currentConfig.enabled || !state.busy || hasAssistantActivity(state))
+ return;
+ if (state.turn.waitingForQuestion || state.turn.waitingForPermission)
+ return;
+ if (currentConfig.maxConsecutive > 0 && state.consecutiveCount >= currentConfig.maxConsecutive)
+ return;
+ state.pluginAbortPending = true;
+ state.pendingContinue = true;
+ try {
+ await client.session.abort({ path: { id: sessionID } });
+ }
+ catch (err) {
+ state.pluginAbortPending = false;
+ state.pendingContinue = false;
+ log(`Failed to abort stalled request in ${sessionID}: ${err}`);
+ }
+ }, config.stalledRequestTimeoutMs);
+ }
+ function resetTurn(state) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ state.pendingContinue = false;
+ state.pluginAbortPending = false;
+ state.sawAssistantActivity = false;
+ state.turn = createTurnEvidence();
+ }
async function sendContinue(sessionID) {
const state = sessions.get(sessionID);
if (!state?.pendingContinue)
@@ -628,7 +709,12 @@ const plugin = async ({ client, directory }) => {
const now = Date.now();
if (now - state.lastContinueTime < config.throttleMs) {
const remaining = config.throttleMs - (now - state.lastContinueTime);
- log(`Throttle active for session ${sessionID}, ${remaining}ms remaining, skipping`);
+ log(`Throttle active for session ${sessionID}, retrying in ${remaining}ms`);
+ clearIdleTimer(state);
+ state.idleTimer = setTimeout(() => {
+ state.idleTimer = undefined;
+ void sendContinue(sessionID);
+ }, remaining);
return;
}
if (config.maxConsecutive > 0 && state.consecutiveCount >= config.maxConsecutive) {
@@ -654,6 +740,31 @@ const plugin = async ({ client, directory }) => {
log(`Failed to send "continue" to ${sessionID}: ${err}`);
}
}
+ function handleSessionIdle(sessionID) {
+ const config = getEffectiveConfig(sessionID);
+ if (!config.enabled)
+ return;
+ const state = sessions.get(sessionID);
+ if (!state || state.idleTimer)
+ return;
+ state.busy = false;
+ clearStalledTimer(state);
+ if (state.pluginAbortPending) {
+ state.turn.aborted = false;
+ }
+ if (state.turn.aborted || state.turn.waitingForQuestion || state.turn.waitingForPermission)
+ return;
+ if (!state.pendingContinue && !(config.retryEmptyResponses && isCompletedEmptyResponse(state.turn)))
+ return;
+ log(`${sessionID} idle with pending continue, waiting ${config.delayMs}ms...`);
+ state.idleTimer = setTimeout(() => {
+ state.idleTimer = undefined;
+ if (!state.pendingContinue && !(config.retryEmptyResponses && isCompletedEmptyResponse(state.turn)))
+ return;
+ state.pendingContinue = true;
+ void sendContinue(sessionID);
+ }, config.delayMs);
+ }
// ── Command UI helpers ──────────────────────────────────────────────────
function overrideLines(overrides) {
const parts = [];
@@ -721,6 +832,7 @@ const plugin = async ({ client, directory }) => {
` Throttle: ${cfg.throttleMs}ms`,
` Delay: ${cfg.delayMs}ms`,
` Max Retries: ${cfg.maxConsecutive === 0 ? "unlimited (0)" : cfg.maxConsecutive}`,
+ ` Stall timeout: ${cfg.stalledRequestTimeoutMs > 0 ? `${cfg.stalledRequestTimeoutMs}ms` : "disabled"}`,
` Update throttle: ${cfg.updateThrottleMs}ms`,
];
if (overrides && Object.keys(overrides).length > 0) {
@@ -1081,9 +1193,18 @@ const plugin = async ({ client, directory }) => {
const config = getEffectiveConfig(sessionID);
if (!config.enabled)
return;
+ const state = getState(sessionID);
+ if (isExcludedError(error, config)) {
+ if (state.pluginAbortPending)
+ return;
+ state.turn.aborted = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ return;
+ }
if (isRetryableError(error, config)) {
log(`Retryable error in ${sessionID}: ${errorMessage(error)}`);
- const state = getState(sessionID);
state.lastErrorTime = Date.now();
state.pendingContinue = true;
}
@@ -1092,24 +1213,120 @@ const plugin = async ({ client, directory }) => {
if (event.type === "message.updated") {
const props = event.properties;
const info = props.info;
- if (!info?.sessionID || info.role !== "assistant")
+ if (!info?.sessionID)
+ return;
+ const state = getState(info.sessionID);
+ if (info.role === "user") {
+ if (info.id === state.userMessageID)
+ return;
+ state.userMessageID = info.id;
+ resetTurn(state);
+ return;
+ }
+ if (info.role !== "assistant")
return;
const config = getEffectiveConfig(info.sessionID);
+ updateAssistantEvidence(state.turn, info);
+ if (hasAssistantActivity(state)) {
+ state.sawAssistantActivity = true;
+ clearStalledTimer(state);
+ }
+ if (isExcludedError(info.error, config)) {
+ if (state.pluginAbortPending)
+ return;
+ state.turn.aborted = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ return;
+ }
// Retryable error on assistant message
if (config.enabled && isRetryableError(info.error, config)) {
log(`Retryable error on assistant message in ${info.sessionID}: ${errorMessage(info.error)}`);
- const state = getState(info.sessionID);
state.lastErrorTime = Date.now();
state.pendingContinue = true;
}
// Reset counter on successful completion
- if (info.metadata?.done && !info.error) {
- const state = sessions.get(info.sessionID);
- if (state && state.consecutiveCount > 0) {
+ if ((info.finish === "stop" || info.metadata?.done) && !info.error) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ state.pendingContinue = false;
+ if (state.consecutiveCount > 0) {
log(`${info.sessionID} completed successfully, resetting counter`);
state.consecutiveCount = 0;
}
}
+ // Some OpenCode versions persist an empty completed response without
+ // emitting session.idle or session.status=idle. Reuse the same guarded
+ // recovery path so the status plugin and auto-continue agree.
+ if (info.finish === "unknown" &&
+ config.retryEmptyResponses &&
+ isCompletedEmptyResponse(state.turn)) {
+ handleSessionIdle(info.sessionID);
+ }
+ }
+ if (event.type === "message.part.updated") {
+ const props = event.properties;
+ const part = props.part;
+ if (!part?.sessionID)
+ return;
+ const state = getState(part.sessionID);
+ recordTextPart(state.turn, part);
+ const hasPartActivity = ((part.type === "text" || part.type === "reasoning") && Boolean(part.text?.trim())) || part.type === "tool";
+ if (hasPartActivity) {
+ state.sawAssistantActivity = true;
+ clearStalledTimer(state);
+ }
+ }
+ const eventType = event.type;
+ if (eventType === "session.status") {
+ const props = event.properties;
+ if (!props.sessionID || !props.status?.type)
+ return;
+ const state = getState(props.sessionID);
+ state.busy = props.status.type === "busy";
+ if (state.busy) {
+ startStalledTimer(props.sessionID, state);
+ }
+ else if (props.status.type === "idle") {
+ handleSessionIdle(props.sessionID);
+ }
+ else {
+ clearStalledTimer(state);
+ }
+ }
+ if (eventType === "permission.updated" ||
+ eventType === "permission.asked" ||
+ eventType === "permission.v2.asked" ||
+ eventType === "permission.replied" ||
+ eventType === "permission.v2.replied") {
+ const props = event.properties;
+ if (!props.sessionID)
+ return;
+ const state = getState(props.sessionID);
+ state.turn.waitingForPermission = !eventType.endsWith("replied");
+ if (state.turn.waitingForPermission) {
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ }
+ }
+ if (eventType === "question.asked" ||
+ eventType === "question.v2.asked" ||
+ eventType === "question.replied" ||
+ eventType === "question.v2.replied" ||
+ eventType === "question.rejected" ||
+ eventType === "question.v2.rejected") {
+ const props = event.properties;
+ if (!props.sessionID)
+ return;
+ const state = getState(props.sessionID);
+ state.turn.waitingForQuestion = eventType.endsWith("asked");
+ if (state.turn.waitingForQuestion) {
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ }
}
// ── session.idle: send continue if pending ──
if (event.type === "session.idle") {
@@ -1117,14 +1334,27 @@ const plugin = async ({ client, directory }) => {
const sessionID = props.sessionID;
if (!sessionID)
return;
- const config = getEffectiveConfig(sessionID);
- if (!config.enabled)
- return;
- const state = sessions.get(sessionID);
- if (state?.pendingContinue) {
- log(`${sessionID} idle with pending continue, waiting ${config.delayMs}ms...`);
- setTimeout(() => sendContinue(sessionID), config.delayMs);
- }
+ handleSessionIdle(sessionID);
+ }
+ },
+ "tool.execute.before": async (input) => {
+ if (input.tool !== "question" || !input.sessionID)
+ return;
+ const state = getState(input.sessionID);
+ state.turn.waitingForQuestion = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ },
+ "tool.execute.after": async (input) => {
+ if (input.tool !== "question" || !input.sessionID)
+ return;
+ getState(input.sessionID).turn.waitingForQuestion = false;
+ },
+ dispose: async () => {
+ for (const state of sessions.values()) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
}
},
};
diff --git a/dist/index.js.map b/dist/index.js.map
index 2e51a4d..3b81030 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/recovery.d.ts b/dist/recovery.d.ts
new file mode 100644
index 0000000..d4cace7
--- /dev/null
+++ b/dist/recovery.d.ts
@@ -0,0 +1,29 @@
+export interface AssistantEvidence {
+ id: string;
+ finish?: string;
+ outputTokens: number;
+ sawText: boolean;
+ error: boolean;
+}
+export interface TurnEvidence {
+ assistant?: AssistantEvidence;
+ aborted: boolean;
+ waitingForQuestion: boolean;
+ waitingForPermission: boolean;
+}
+export declare function createTurnEvidence(): TurnEvidence;
+export declare function updateAssistantEvidence(turn: TurnEvidence, info: {
+ id?: string;
+ finish?: string;
+ tokens?: {
+ output?: number;
+ };
+ error?: unknown;
+}): void;
+export declare function recordTextPart(turn: TurnEvidence, part: {
+ messageID?: string;
+ type?: string;
+ text?: string;
+}): void;
+export declare function isCompletedEmptyResponse(turn: TurnEvidence): boolean;
+//# sourceMappingURL=recovery.d.ts.map
\ No newline at end of file
diff --git a/dist/recovery.d.ts.map b/dist/recovery.d.ts.map
new file mode 100644
index 0000000..e93e0e3
--- /dev/null
+++ b/dist/recovery.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAMjD;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IACJ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,IAAI,CAiBN;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,IAAI,CASN;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAWpE"}
\ No newline at end of file
diff --git a/dist/recovery.js b/dist/recovery.js
new file mode 100644
index 0000000..d6e3771
--- /dev/null
+++ b/dist/recovery.js
@@ -0,0 +1,43 @@
+export function createTurnEvidence() {
+ return {
+ aborted: false,
+ waitingForQuestion: false,
+ waitingForPermission: false,
+ };
+}
+export function updateAssistantEvidence(turn, info) {
+ if (!info.id)
+ return;
+ if (turn.assistant?.id !== info.id) {
+ turn.assistant = {
+ id: info.id,
+ finish: info.finish,
+ outputTokens: Number(info.tokens?.output) || 0,
+ sawText: false,
+ error: Boolean(info.error),
+ };
+ return;
+ }
+ turn.assistant.finish = info.finish ?? turn.assistant.finish;
+ turn.assistant.outputTokens = Math.max(turn.assistant.outputTokens, Number(info.tokens?.output) || 0);
+ turn.assistant.error ||= Boolean(info.error);
+}
+export function recordTextPart(turn, part) {
+ if (turn.assistant &&
+ part.messageID === turn.assistant.id &&
+ part.type === "text" &&
+ Boolean(part.text?.trim())) {
+ turn.assistant.sawText = true;
+ }
+}
+export function isCompletedEmptyResponse(turn) {
+ const assistant = turn.assistant;
+ return Boolean(assistant &&
+ assistant.finish === "unknown" &&
+ assistant.outputTokens === 0 &&
+ !assistant.error &&
+ !turn.aborted &&
+ !turn.waitingForQuestion &&
+ !turn.waitingForPermission);
+}
+//# sourceMappingURL=recovery.js.map
\ No newline at end of file
diff --git a/dist/recovery.js.map b/dist/recovery.js.map
new file mode 100644
index 0000000..de56042
--- /dev/null
+++ b/dist/recovery.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,kBAAkB,EAAE,KAAK;QACzB,oBAAoB,EAAE,KAAK;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAkB,EAClB,IAKC;IAED,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO;IAErB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YAC9C,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3B,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC7D,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAkB,EAClB,IAA0D;IAE1D,IACE,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;QACpC,IAAI,CAAC,IAAI,KAAK,MAAM;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAC1B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,OAAO,OAAO,CACZ,SAAS;QACP,SAAS,CAAC,MAAM,KAAK,SAAS;QAC9B,SAAS,CAAC,YAAY,KAAK,CAAC;QAC5B,CAAC,SAAS,CAAC,KAAK;QAChB,CAAC,IAAI,CAAC,OAAO;QACb,CAAC,IAAI,CAAC,kBAAkB;QACxB,CAAC,IAAI,CAAC,oBAAoB,CAC7B,CAAC;AACJ,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 8d86c45..c3fd0ea 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,8 @@
},
"scripts": {
"build": "tsc",
+ "test": "bun test",
+ "check": "tsc --noEmit",
"dev": "tsc --watch",
"prepublishOnly": "tsc"
},
diff --git a/src/index.ts b/src/index.ts
index 12a9051..2aff8ed 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,13 @@
import { access, lstat, mkdir, readdir, readFile, realpath, rm, writeFile } from "node:fs/promises";
import { join } from "node:path";
import type { Plugin } from "@opencode-ai/plugin";
+import {
+ createTurnEvidence,
+ isCompletedEmptyResponse,
+ recordTextPart,
+ updateAssistantEvidence,
+ type TurnEvidence,
+} from "./recovery.js";
const PLUGIN_NAME = "opencode-auto-continue";
const CONFIG_DIR = ".opencode";
@@ -233,6 +240,10 @@ const DEFAULTS: Config = {
maxConsecutive: 5,
/** Whether the plugin is enabled */
enabled: true,
+ /** Retry completed assistant responses that contain no usable output */
+ retryEmptyResponses: true,
+ /** Abort and retry a busy request with no assistant activity after this delay (0 disables) */
+ stalledRequestTimeoutMs: 200_000,
/** Minimum ms between remote version checks */
updateThrottleMs: 30_000,
/** Disable all remote calls and version-related filesystem checks */
@@ -248,6 +259,8 @@ interface Config {
delayMs: number;
maxConsecutive: number;
enabled: boolean;
+ retryEmptyResponses: boolean;
+ stalledRequestTimeoutMs: number;
updateThrottleMs: number;
offlineMode: boolean;
errorPatterns: string[];
@@ -255,10 +268,17 @@ interface Config {
}
interface SessionState {
+ userMessageID?: string;
lastErrorTime: number;
lastContinueTime: number;
pendingContinue: boolean;
consecutiveCount: number;
+ turn: TurnEvidence;
+ idleTimer?: ReturnType;
+ stalledTimer?: ReturnType;
+ busy: boolean;
+ pluginAbortPending: boolean;
+ sawAssistantActivity: boolean;
}
// ─── Helpers ────────────────────────────────────────────────────────────────
@@ -314,6 +334,10 @@ async function loadConfig(directory: string, log: (msg: string) => void): Promis
if (typeof parsed.delayMs === "number") config.delayMs = parsed.delayMs;
if (typeof parsed.maxConsecutive === "number") config.maxConsecutive = parsed.maxConsecutive;
if (typeof parsed.enabled === "boolean") config.enabled = parsed.enabled;
+ if (typeof parsed.retryEmptyResponses === "boolean") config.retryEmptyResponses = parsed.retryEmptyResponses;
+ if (typeof parsed.stalledRequestTimeoutMs === "number") {
+ config.stalledRequestTimeoutMs = parsed.stalledRequestTimeoutMs;
+ }
if (typeof parsed.updateThrottleMs === "number") config.updateThrottleMs = parsed.updateThrottleMs;
if (typeof parsed.offlineMode === "boolean") config.offlineMode = parsed.offlineMode;
if (Array.isArray(parsed.errorPatterns)) {
@@ -362,6 +386,19 @@ function isRetryableError(error: unknown, config: Config): boolean {
return false;
}
+function isExcludedError(error: unknown, config: Config): boolean {
+ if (!error || typeof error !== "object") return false;
+
+ const err = error as Record;
+ const data = err.data as Record | undefined;
+ const name = typeof err.name === "string" ? err.name : "";
+ const message =
+ (typeof data?.message === "string" ? data.message : null) ??
+ (typeof err.message === "string" ? err.message : "");
+ const matchStr = `${name}: ${message}`.toLowerCase();
+ return config.excludePatterns.some((pattern) => matchStr.includes(pattern.toLowerCase()));
+}
+
function errorMessage(error: unknown): string {
if (!error || typeof error !== "object") return "unknown";
const err = error as Record;
@@ -617,6 +654,8 @@ const plugin: Plugin = async ({ client, directory }) => {
delayMs: globalConfig.delayMs,
maxConsecutive: globalConfig.maxConsecutive,
enabled: globalConfig.enabled,
+ retryEmptyResponses: globalConfig.retryEmptyResponses,
+ stalledRequestTimeoutMs: globalConfig.stalledRequestTimeoutMs,
updateThrottleMs: globalConfig.updateThrottleMs,
};
if (globalConfig.offlineMode) {
@@ -641,12 +680,69 @@ const plugin: Plugin = async ({ client, directory }) => {
lastContinueTime: 0,
pendingContinue: false,
consecutiveCount: 0,
+ turn: createTurnEvidence(),
+ busy: false,
+ pluginAbortPending: false,
+ sawAssistantActivity: false,
};
sessions.set(sessionID, state);
}
return state;
}
+ function clearIdleTimer(state: SessionState) {
+ if (state.idleTimer) clearTimeout(state.idleTimer);
+ state.idleTimer = undefined;
+ }
+
+ function clearStalledTimer(state: SessionState) {
+ if (state.stalledTimer) clearTimeout(state.stalledTimer);
+ state.stalledTimer = undefined;
+ }
+
+ function hasAssistantActivity(state: SessionState): boolean {
+ const assistant = state.turn.assistant;
+ return Boolean(
+ state.sawAssistantActivity ||
+ (assistant && (assistant.outputTokens > 0 || assistant.sawText || assistant.finish === "tool-calls")),
+ );
+ }
+
+ function startStalledTimer(sessionID: string, state: SessionState) {
+ const config = getEffectiveConfig(sessionID);
+ if (state.stalledTimer) return;
+ if (!config.enabled || config.stalledRequestTimeoutMs <= 0 || hasAssistantActivity(state)) return;
+ if (state.pluginAbortPending) return;
+ if (state.turn.waitingForQuestion || state.turn.waitingForPermission) return;
+
+ state.stalledTimer = setTimeout(async () => {
+ state.stalledTimer = undefined;
+ const currentConfig = getEffectiveConfig(sessionID);
+ if (!currentConfig.enabled || !state.busy || hasAssistantActivity(state)) return;
+ if (state.turn.waitingForQuestion || state.turn.waitingForPermission) return;
+ if (currentConfig.maxConsecutive > 0 && state.consecutiveCount >= currentConfig.maxConsecutive) return;
+
+ state.pluginAbortPending = true;
+ state.pendingContinue = true;
+ try {
+ await client.session.abort({ path: { id: sessionID } });
+ } catch (err) {
+ state.pluginAbortPending = false;
+ state.pendingContinue = false;
+ log(`Failed to abort stalled request in ${sessionID}: ${err}`);
+ }
+ }, config.stalledRequestTimeoutMs);
+ }
+
+ function resetTurn(state: SessionState) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ state.pendingContinue = false;
+ state.pluginAbortPending = false;
+ state.sawAssistantActivity = false;
+ state.turn = createTurnEvidence();
+ }
+
async function sendContinue(sessionID: string) {
const state = sessions.get(sessionID);
if (!state?.pendingContinue) return;
@@ -656,7 +752,12 @@ const plugin: Plugin = async ({ client, directory }) => {
if (now - state.lastContinueTime < config.throttleMs) {
const remaining = config.throttleMs - (now - state.lastContinueTime);
- log(`Throttle active for session ${sessionID}, ${remaining}ms remaining, skipping`);
+ log(`Throttle active for session ${sessionID}, retrying in ${remaining}ms`);
+ clearIdleTimer(state);
+ state.idleTimer = setTimeout(() => {
+ state.idleTimer = undefined;
+ void sendContinue(sessionID);
+ }, remaining);
return;
}
@@ -686,6 +787,29 @@ const plugin: Plugin = async ({ client, directory }) => {
}
}
+ function handleSessionIdle(sessionID: string) {
+ const config = getEffectiveConfig(sessionID);
+ if (!config.enabled) return;
+
+ const state = sessions.get(sessionID);
+ if (!state || state.idleTimer) return;
+ state.busy = false;
+ clearStalledTimer(state);
+ if (state.pluginAbortPending) {
+ state.turn.aborted = false;
+ }
+ if (state.turn.aborted || state.turn.waitingForQuestion || state.turn.waitingForPermission) return;
+ if (!state.pendingContinue && !(config.retryEmptyResponses && isCompletedEmptyResponse(state.turn))) return;
+
+ log(`${sessionID} idle with pending continue, waiting ${config.delayMs}ms...`);
+ state.idleTimer = setTimeout(() => {
+ state.idleTimer = undefined;
+ if (!state.pendingContinue && !(config.retryEmptyResponses && isCompletedEmptyResponse(state.turn))) return;
+ state.pendingContinue = true;
+ void sendContinue(sessionID);
+ }, config.delayMs);
+ }
+
// ── Command UI helpers ──────────────────────────────────────────────────
function overrideLines(overrides: Partial): string[] {
@@ -771,6 +895,7 @@ const plugin: Plugin = async ({ client, directory }) => {
` Throttle: ${cfg.throttleMs}ms`,
` Delay: ${cfg.delayMs}ms`,
` Max Retries: ${cfg.maxConsecutive === 0 ? "unlimited (0)" : cfg.maxConsecutive}`,
+ ` Stall timeout: ${cfg.stalledRequestTimeoutMs > 0 ? `${cfg.stalledRequestTimeoutMs}ms` : "disabled"}`,
` Update throttle: ${cfg.updateThrottleMs}ms`,
];
@@ -1205,9 +1330,18 @@ const plugin: Plugin = async ({ client, directory }) => {
const config = getEffectiveConfig(sessionID);
if (!config.enabled) return;
+ const state = getState(sessionID);
+ if (isExcludedError(error, config)) {
+ if (state.pluginAbortPending) return;
+ state.turn.aborted = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ return;
+ }
+
if (isRetryableError(error, config)) {
log(`Retryable error in ${sessionID}: ${errorMessage(error)}`);
- const state = getState(sessionID);
state.lastErrorTime = Date.now();
state.pendingContinue = true;
}
@@ -1217,33 +1351,139 @@ const plugin: Plugin = async ({ client, directory }) => {
if (event.type === "message.updated") {
const props = event.properties as {
info?: {
+ id?: string;
sessionID?: string;
role?: string;
+ finish?: string;
+ tokens?: { output?: number };
error?: unknown;
metadata?: { done?: boolean };
};
};
const info = props.info;
- if (!info?.sessionID || info.role !== "assistant") return;
+ if (!info?.sessionID) return;
+
+ const state = getState(info.sessionID);
+ if (info.role === "user") {
+ if (info.id === state.userMessageID) return;
+ state.userMessageID = info.id;
+ resetTurn(state);
+ return;
+ }
+ if (info.role !== "assistant") return;
const config = getEffectiveConfig(info.sessionID);
+ updateAssistantEvidence(state.turn, info);
+ if (hasAssistantActivity(state)) {
+ state.sawAssistantActivity = true;
+ clearStalledTimer(state);
+ }
+
+ if (isExcludedError(info.error, config)) {
+ if (state.pluginAbortPending) return;
+ state.turn.aborted = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ return;
+ }
// Retryable error on assistant message
if (config.enabled && isRetryableError(info.error, config)) {
log(`Retryable error on assistant message in ${info.sessionID}: ${errorMessage(info.error)}`);
- const state = getState(info.sessionID);
state.lastErrorTime = Date.now();
state.pendingContinue = true;
}
// Reset counter on successful completion
- if (info.metadata?.done && !info.error) {
- const state = sessions.get(info.sessionID);
- if (state && state.consecutiveCount > 0) {
+ if ((info.finish === "stop" || info.metadata?.done) && !info.error) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ state.pendingContinue = false;
+ if (state.consecutiveCount > 0) {
log(`${info.sessionID} completed successfully, resetting counter`);
state.consecutiveCount = 0;
}
}
+
+ // Some OpenCode versions persist an empty completed response without
+ // emitting session.idle or session.status=idle. Reuse the same guarded
+ // recovery path so the status plugin and auto-continue agree.
+ if (
+ info.finish === "unknown" &&
+ config.retryEmptyResponses &&
+ isCompletedEmptyResponse(state.turn)
+ ) {
+ handleSessionIdle(info.sessionID);
+ }
+ }
+
+ if (event.type === "message.part.updated") {
+ const props = event.properties as {
+ part?: { sessionID?: string; messageID?: string; type?: string; text?: string };
+ };
+ const part = props.part;
+ if (!part?.sessionID) return;
+ const state = getState(part.sessionID);
+ recordTextPart(state.turn, part);
+ const hasPartActivity =
+ ((part.type === "text" || part.type === "reasoning") && Boolean(part.text?.trim())) || part.type === "tool";
+ if (hasPartActivity) {
+ state.sawAssistantActivity = true;
+ clearStalledTimer(state);
+ }
+ }
+
+ const eventType = event.type as string;
+ if (eventType === "session.status") {
+ const props = event.properties as { sessionID?: string; status?: { type?: string } };
+ if (!props.sessionID || !props.status?.type) return;
+ const state = getState(props.sessionID);
+ state.busy = props.status.type === "busy";
+ if (state.busy) {
+ startStalledTimer(props.sessionID, state);
+ } else if (props.status.type === "idle") {
+ handleSessionIdle(props.sessionID);
+ } else {
+ clearStalledTimer(state);
+ }
+ }
+
+ if (
+ eventType === "permission.updated" ||
+ eventType === "permission.asked" ||
+ eventType === "permission.v2.asked" ||
+ eventType === "permission.replied" ||
+ eventType === "permission.v2.replied"
+ ) {
+ const props = event.properties as { sessionID?: string };
+ if (!props.sessionID) return;
+ const state = getState(props.sessionID);
+ state.turn.waitingForPermission = !eventType.endsWith("replied");
+ if (state.turn.waitingForPermission) {
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ }
+ }
+
+ if (
+ eventType === "question.asked" ||
+ eventType === "question.v2.asked" ||
+ eventType === "question.replied" ||
+ eventType === "question.v2.replied" ||
+ eventType === "question.rejected" ||
+ eventType === "question.v2.rejected"
+ ) {
+ const props = event.properties as { sessionID?: string };
+ if (!props.sessionID) return;
+ const state = getState(props.sessionID);
+ state.turn.waitingForQuestion = eventType.endsWith("asked");
+ if (state.turn.waitingForQuestion) {
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ }
}
// ── session.idle: send continue if pending ──
@@ -1252,14 +1492,28 @@ const plugin: Plugin = async ({ client, directory }) => {
const sessionID = props.sessionID;
if (!sessionID) return;
- const config = getEffectiveConfig(sessionID);
- if (!config.enabled) return;
+ handleSessionIdle(sessionID);
+ }
+ },
- const state = sessions.get(sessionID);
- if (state?.pendingContinue) {
- log(`${sessionID} idle with pending continue, waiting ${config.delayMs}ms...`);
- setTimeout(() => sendContinue(sessionID), config.delayMs);
- }
+ "tool.execute.before": async (input: { sessionID?: string; tool?: string }) => {
+ if (input.tool !== "question" || !input.sessionID) return;
+ const state = getState(input.sessionID);
+ state.turn.waitingForQuestion = true;
+ state.pendingContinue = false;
+ clearIdleTimer(state);
+ clearStalledTimer(state);
+ },
+
+ "tool.execute.after": async (input: { sessionID?: string; tool?: string }) => {
+ if (input.tool !== "question" || !input.sessionID) return;
+ getState(input.sessionID).turn.waitingForQuestion = false;
+ },
+
+ dispose: async () => {
+ for (const state of sessions.values()) {
+ clearIdleTimer(state);
+ clearStalledTimer(state);
}
},
};
diff --git a/src/recovery.ts b/src/recovery.ts
new file mode 100644
index 0000000..cf8de2f
--- /dev/null
+++ b/src/recovery.ts
@@ -0,0 +1,76 @@
+export interface AssistantEvidence {
+ id: string;
+ finish?: string;
+ outputTokens: number;
+ sawText: boolean;
+ error: boolean;
+}
+
+export interface TurnEvidence {
+ assistant?: AssistantEvidence;
+ aborted: boolean;
+ waitingForQuestion: boolean;
+ waitingForPermission: boolean;
+}
+
+export function createTurnEvidence(): TurnEvidence {
+ return {
+ aborted: false,
+ waitingForQuestion: false,
+ waitingForPermission: false,
+ };
+}
+
+export function updateAssistantEvidence(
+ turn: TurnEvidence,
+ info: {
+ id?: string;
+ finish?: string;
+ tokens?: { output?: number };
+ error?: unknown;
+ },
+): void {
+ if (!info.id) return;
+
+ if (turn.assistant?.id !== info.id) {
+ turn.assistant = {
+ id: info.id,
+ finish: info.finish,
+ outputTokens: Number(info.tokens?.output) || 0,
+ sawText: false,
+ error: Boolean(info.error),
+ };
+ return;
+ }
+
+ turn.assistant.finish = info.finish ?? turn.assistant.finish;
+ turn.assistant.outputTokens = Math.max(turn.assistant.outputTokens, Number(info.tokens?.output) || 0);
+ turn.assistant.error ||= Boolean(info.error);
+}
+
+export function recordTextPart(
+ turn: TurnEvidence,
+ part: { messageID?: string; type?: string; text?: string },
+): void {
+ if (
+ turn.assistant &&
+ part.messageID === turn.assistant.id &&
+ part.type === "text" &&
+ Boolean(part.text?.trim())
+ ) {
+ turn.assistant.sawText = true;
+ }
+}
+
+export function isCompletedEmptyResponse(turn: TurnEvidence): boolean {
+ const assistant = turn.assistant;
+ return Boolean(
+ assistant &&
+ assistant.finish === "unknown" &&
+ assistant.outputTokens === 0 &&
+ !assistant.error &&
+ !turn.aborted &&
+ !turn.waitingForQuestion &&
+ !turn.waitingForPermission,
+ );
+}
diff --git a/test/plugin.test.ts b/test/plugin.test.ts
new file mode 100644
index 0000000..45e4889
--- /dev/null
+++ b/test/plugin.test.ts
@@ -0,0 +1,405 @@
+import { afterEach, describe, expect, test } from "bun:test";
+import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
+import { join } from "node:path";
+import { tmpdir } from "node:os";
+import plugin from "../src/index.js";
+
+const roots: string[] = [];
+
+afterEach(async () => {
+ await Promise.all(roots.splice(0).map((root) => rm(root, { recursive: true, force: true })));
+});
+
+async function createHarness(overrides: Record = {}) {
+ const directory = await mkdtemp(join(tmpdir(), "auto-continue-test-"));
+ roots.push(directory);
+ await mkdir(join(directory, ".opencode"));
+ await writeFile(
+ join(directory, ".opencode", "opencode-auto-continue.jsonc"),
+ JSON.stringify({ offlineMode: true, delayMs: 0, throttleMs: 0, ...overrides }),
+ );
+
+ const prompts: unknown[] = [];
+ const aborts: unknown[] = [];
+ const hooks = await plugin({
+ directory,
+ client: {
+ session: {
+ abort: async (request: unknown) => {
+ aborts.push(request);
+ return { data: true };
+ },
+ promptAsync: async (request: unknown) => {
+ prompts.push(request);
+ return {};
+ },
+ },
+ },
+ } as never);
+
+ const event = async (type: string, properties: Record) => {
+ await hooks.event?.({ event: { type, properties } } as never);
+ };
+ const settle = () => new Promise((resolve) => setTimeout(resolve, 10));
+
+ return { hooks, event, prompts, aborts, settle };
+}
+
+async function userTurn(event: (type: string, properties: Record) => Promise) {
+ await event("message.updated", {
+ info: { id: "user-1", sessionID: "session-1", role: "user" },
+ });
+}
+
+async function emptyAssistant(
+ event: (type: string, properties: Record) => Promise,
+ id = "assistant-empty",
+) {
+ await event("message.updated", {
+ info: {
+ id,
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "unknown",
+ tokens: { output: 0 },
+ },
+ });
+}
+
+describe("empty response recovery", () => {
+ test("continues a completed empty assistant response on idle", async () => {
+ const { event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("continues an empty response when no idle event is emitted", async () => {
+ const { event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await emptyAssistant(event);
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("keeps an empty-response retry when the user message summary is updated", async () => {
+ const { event, prompts, settle } = await createHarness({ delayMs: 5 });
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("message.updated", {
+ info: {
+ id: "user-1",
+ sessionID: "session-1",
+ role: "user",
+ summary: { diffs: [] },
+ },
+ });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("continues an unknown zero-output response that contains partial text", async () => {
+ const { event, prompts, settle } = await createHarness({ delayMs: 5 });
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("message.part.updated", {
+ part: {
+ sessionID: "session-1",
+ messageID: "assistant-empty",
+ type: "text",
+ text: "partial result",
+ },
+ });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("allows empty response recovery to be disabled", async () => {
+ const { event, prompts, settle } = await createHarness({ retryEmptyResponses: false });
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(0);
+ });
+
+ test("does not continue a normal reply or tool-calls completion", async () => {
+ const { event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await event("message.updated", {
+ info: {
+ id: "assistant-normal",
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "stop",
+ tokens: { output: 20 },
+ },
+ });
+ await event("message.part.updated", {
+ part: {
+ sessionID: "session-1",
+ messageID: "assistant-normal",
+ type: "text",
+ text: "Done",
+ },
+ });
+ await event("session.idle", { sessionID: "session-1" });
+ await event("message.updated", {
+ info: {
+ id: "assistant-tool",
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "tool-calls",
+ tokens: { output: 10 },
+ },
+ });
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(0);
+ });
+
+ test("continues when the assistant after a tool call is empty", async () => {
+ const { event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await event("message.updated", {
+ info: {
+ id: "assistant-tool",
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "tool-calls",
+ tokens: { output: 10 },
+ },
+ });
+ await event("message.part.updated", {
+ part: {
+ sessionID: "session-1",
+ messageID: "assistant-tool",
+ type: "text",
+ text: "Running tool",
+ },
+ });
+ await emptyAssistant(event, "assistant-after-tool");
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("does not continue after abort, question, or permission requests", async () => {
+ for (const blocked of ["abort", "question", "question-event", "permission", "permission-v2"] as const) {
+ const { hooks, event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await emptyAssistant(event);
+ if (blocked === "abort") {
+ await event("session.error", {
+ sessionID: "session-1",
+ error: { name: "MessageAbortedError", message: "operation was aborted" },
+ });
+ } else if (blocked === "question") {
+ await hooks["tool.execute.before"]?.({ sessionID: "session-1", tool: "question" } as never, {} as never);
+ } else if (blocked === "question-event") {
+ await event("question.asked", { sessionID: "session-1" });
+ } else if (blocked === "permission") {
+ await event("permission.updated", { sessionID: "session-1" });
+ } else {
+ await event("permission.asked", { sessionID: "session-1" });
+ }
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(0);
+ }
+ });
+
+ test("question and permission waits cancel an explicit-error retry", async () => {
+ for (const blocked of ["question", "permission", "permission-v2"] as const) {
+ const { hooks, event, prompts, settle } = await createHarness();
+ await event("session.error", {
+ sessionID: "session-1",
+ error: { name: "APIError", message: "SSE read timed out" },
+ });
+ if (blocked === "question") {
+ await hooks["tool.execute.before"]?.({ sessionID: "session-1", tool: "question" } as never, {} as never);
+ } else if (blocked === "permission") {
+ await event("permission.updated", { sessionID: "session-1" });
+ } else {
+ await event("permission.v2.asked", { sessionID: "session-1" });
+ }
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(0);
+ }
+ });
+
+ test("cancels a queued retry when a late stop arrives", async () => {
+ const { event, prompts, settle } = await createHarness({ delayMs: 25 });
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("session.idle", { sessionID: "session-1" });
+ await event("message.updated", {
+ info: {
+ id: "assistant-empty",
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "stop",
+ tokens: { output: 10 },
+ },
+ });
+ await new Promise((resolve) => setTimeout(resolve, 40));
+ await settle();
+
+ expect(prompts).toHaveLength(0);
+ });
+
+ test("deduplicates repeated idle events", async () => {
+ const { event, prompts, settle } = await createHarness();
+ await userTurn(event);
+ await emptyAssistant(event);
+ await event("session.idle", { sessionID: "session-1" });
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("honors throttle and maximum consecutive retries", async () => {
+ const throttled = await createHarness({ throttleMs: 30 });
+ await userTurn(throttled.event);
+ await emptyAssistant(throttled.event, "empty-1");
+ await throttled.event("session.idle", { sessionID: "session-1" });
+ await throttled.settle();
+ await userTurn(throttled.event);
+ await emptyAssistant(throttled.event, "empty-2");
+ await throttled.event("session.idle", { sessionID: "session-1" });
+ await new Promise((resolve) => setTimeout(resolve, 40));
+ expect(throttled.prompts).toHaveLength(2);
+
+ const limited = await createHarness({ maxConsecutive: 2 });
+ for (let attempt = 0; attempt < 3; attempt++) {
+ await userTurn(limited.event);
+ await emptyAssistant(limited.event, `empty-${attempt}`);
+ await limited.event("session.idle", { sessionID: "session-1" });
+ await limited.settle();
+ }
+ expect(limited.prompts).toHaveLength(2);
+ });
+
+ test("resets consecutive retries after finish stop", async () => {
+ const { event, prompts, settle } = await createHarness({ maxConsecutive: 1 });
+ await userTurn(event);
+ await emptyAssistant(event, "empty-1");
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ await userTurn(event);
+ await event("message.updated", {
+ info: {
+ id: "assistant-success",
+ sessionID: "session-1",
+ role: "assistant",
+ finish: "stop",
+ tokens: { output: 10 },
+ },
+ });
+ await userTurn(event);
+ await emptyAssistant(event, "empty-2");
+ await event("session.idle", { sessionID: "session-1" });
+ await settle();
+
+ expect(prompts).toHaveLength(2);
+ });
+});
+
+describe("stalled request recovery", () => {
+ test("aborts a busy request without assistant activity and continues after idle", async () => {
+ const { event, prompts, aborts, settle } = await createHarness({ stalledRequestTimeoutMs: 15 });
+ await userTurn(event);
+ await event("session.status", { sessionID: "session-1", status: { type: "busy" } });
+ await new Promise((resolve) => setTimeout(resolve, 25));
+
+ expect(aborts).toHaveLength(1);
+ expect(prompts).toHaveLength(0);
+
+ await event("session.error", {
+ sessionID: "session-1",
+ error: { name: "MessageAbortedError", message: "operation was aborted" },
+ });
+ await event("session.status", { sessionID: "session-1", status: { type: "idle" } });
+ await settle();
+
+ expect(prompts).toHaveLength(1);
+ });
+
+ test("does not restart the watchdog on duplicate busy events", async () => {
+ const { event, aborts } = await createHarness({ stalledRequestTimeoutMs: 20 });
+ await userTurn(event);
+ await event("session.status", { sessionID: "session-1", status: { type: "busy" } });
+ await new Promise((resolve) => setTimeout(resolve, 12));
+ await event("session.status", { sessionID: "session-1", status: { type: "busy" } });
+ await new Promise((resolve) => setTimeout(resolve, 12));
+
+ expect(aborts).toHaveLength(1);
+ });
+
+ test("does not abort after real assistant activity", async () => {
+ for (const activity of ["text", "reasoning", "tool", "tokens"] as const) {
+ const { event, aborts } = await createHarness({ stalledRequestTimeoutMs: 15 });
+ await userTurn(event);
+ await event("session.status", { sessionID: "session-1", status: { type: "busy" } });
+ if (activity === "tokens") {
+ await event("message.updated", {
+ info: {
+ id: "assistant-active",
+ sessionID: "session-1",
+ role: "assistant",
+ tokens: { output: 1 },
+ },
+ });
+ } else {
+ await event("message.part.updated", {
+ part: {
+ sessionID: "session-1",
+ messageID: "assistant-active",
+ type: activity,
+ text: activity === "tool" ? undefined : "activity",
+ },
+ });
+ }
+ await new Promise((resolve) => setTimeout(resolve, 25));
+
+ expect(aborts).toHaveLength(0);
+ }
+ });
+
+ test("does not abort user-cancelled, question, permission, or disabled watchdog turns", async () => {
+ for (const blocked of ["abort", "question", "permission", "disabled"] as const) {
+ const { hooks, event, aborts } = await createHarness({
+ stalledRequestTimeoutMs: blocked === "disabled" ? 0 : 15,
+ });
+ await userTurn(event);
+ await event("session.status", { sessionID: "session-1", status: { type: "busy" } });
+ if (blocked === "abort") {
+ await event("session.error", {
+ sessionID: "session-1",
+ error: { name: "MessageAbortedError", message: "operation was aborted" },
+ });
+ } else if (blocked === "question") {
+ await hooks["tool.execute.before"]?.({ sessionID: "session-1", tool: "question" } as never, {} as never);
+ } else if (blocked === "permission") {
+ await event("permission.updated", { sessionID: "session-1" });
+ }
+ await new Promise((resolve) => setTimeout(resolve, 25));
+
+ expect(aborts).toHaveLength(0);
+ }
+ });
+});
diff --git a/test/recovery.test.ts b/test/recovery.test.ts
new file mode 100644
index 0000000..3b876e2
--- /dev/null
+++ b/test/recovery.test.ts
@@ -0,0 +1,94 @@
+import { describe, expect, test } from "bun:test";
+import {
+ createTurnEvidence,
+ isCompletedEmptyResponse,
+ recordTextPart,
+ updateAssistantEvidence,
+} from "../src/recovery.js";
+
+describe("completed empty response detection", () => {
+ test("accepts an unknown zero-output assistant completion", () => {
+ const turn = createTurnEvidence();
+ updateAssistantEvidence(turn, {
+ id: "assistant-1",
+ finish: "unknown",
+ tokens: { output: 0 },
+ });
+
+ expect(isCompletedEmptyResponse(turn)).toBe(true);
+ });
+
+ test.each([
+ ["normal stop", { finish: "stop", output: 10, text: "done" }],
+ ["tool call", { finish: "tool-calls", output: 10, text: "" }],
+ ["unknown with output", { finish: "unknown", output: 1, text: "" }],
+ ])("rejects %s", (_name, value) => {
+ const turn = createTurnEvidence();
+ updateAssistantEvidence(turn, {
+ id: "assistant-1",
+ finish: value.finish,
+ tokens: { output: value.output },
+ });
+ recordTextPart(turn, {
+ messageID: "assistant-1",
+ type: "text",
+ text: value.text,
+ });
+
+ expect(isCompletedEmptyResponse(turn)).toBe(false);
+ });
+
+ test("accepts partial text from an unknown zero-output completion", () => {
+ const turn = createTurnEvidence();
+ updateAssistantEvidence(turn, {
+ id: "assistant-1",
+ finish: "unknown",
+ tokens: { output: 0 },
+ });
+ recordTextPart(turn, {
+ messageID: "assistant-1",
+ type: "text",
+ text: "partial",
+ });
+
+ expect(isCompletedEmptyResponse(turn)).toBe(true);
+ });
+
+ test("tracks text only for the latest assistant message", () => {
+ const turn = createTurnEvidence();
+ updateAssistantEvidence(turn, {
+ id: "tool-message",
+ finish: "tool-calls",
+ tokens: { output: 20 },
+ });
+ recordTextPart(turn, {
+ messageID: "tool-message",
+ type: "text",
+ text: "Running a tool",
+ });
+ updateAssistantEvidence(turn, {
+ id: "empty-message",
+ finish: "unknown",
+ tokens: { output: 0 },
+ });
+
+ expect(isCompletedEmptyResponse(turn)).toBe(true);
+ });
+
+ test("rejects errors, aborts, questions, and permissions", () => {
+ for (const blocked of ["error", "aborted", "question", "permission"] as const) {
+ const turn = createTurnEvidence();
+ updateAssistantEvidence(turn, {
+ id: "assistant-1",
+ finish: "unknown",
+ tokens: { output: 0 },
+ error: blocked === "error" ? { message: "failed" } : undefined,
+ });
+ if (blocked === "aborted") turn.aborted = true;
+ if (blocked === "question") turn.waitingForQuestion = true;
+ if (blocked === "permission") turn.waitingForPermission = true;
+
+ expect(isCompletedEmptyResponse(turn)).toBe(false);
+ }
+ });
+});