feat(coding-agent): added retry logic with exponential backoff

- Added retry logic with exponential backoff and model fallback for auto-compaction failures.
- Added support for pi/<role> model aliases and automatic model inheritance for subtasks.
- Enhanced error messages with retry-after timing from rate limit headers across all providers.
- Fixed image attachments being dropped when steering messages are queued during streaming.
- Changed edit tool to merge call and result displays into single block.
- Changed model override behavior to persist in settings when explicitly set via CLI.
This commit is contained in:
can1357
2026-01-10 00:43:56 +01:00
parent 86ef2bd34b
commit 6e7ca2fc14
23 changed files with 471 additions and 70 deletions
@@ -369,20 +369,23 @@ export class ToolExecutionComponent extends Container {
this.contentBox.setBgFn(bgFn);
this.contentBox.clear();
// Render call component
try {
const callComponent = renderer.renderCall(this.args, theme);
if (callComponent) {
// Ensure component has invalidate() method for Component interface
const component = callComponent as any;
if (!component.invalidate) {
component.invalidate = () => {};
const shouldRenderCall = !this.result || !renderer.mergeCallAndResult;
if (shouldRenderCall) {
// Render call component
try {
const callComponent = renderer.renderCall(this.args, theme);
if (callComponent) {
// Ensure component has invalidate() method for Component interface
const component = callComponent as any;
if (!component.invalidate) {
component.invalidate = () => {};
}
this.contentBox.addChild(component);
}
this.contentBox.addChild(component);
} catch {
// Fall back to default on error
this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolLabel)), 0, 0));
}
} catch {
// Fall back to default on error
this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolLabel)), 0, 0));
}
// Render result component if we have a result