@dreb/coding-agent 2.4.2 → 2.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +1 -0
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/core/agent-session.d.ts +13 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +70 -11
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +14 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/buddy/buddy-controller.d.ts.map +1 -1
- package/dist/core/buddy/buddy-controller.js +13 -4
- package/dist/core/buddy/buddy-controller.js.map +1 -1
- package/dist/core/buddy/buddy-manager.d.ts.map +1 -1
- package/dist/core/buddy/buddy-manager.js +2 -0
- package/dist/core/buddy/buddy-manager.js.map +1 -1
- package/dist/core/daily-cost-tracker.d.ts.map +1 -1
- package/dist/core/daily-cost-tracker.js +2 -0
- package/dist/core/daily-cost-tracker.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +3 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +24 -8
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +2 -0
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +3 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +11 -3
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +3 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +69 -29
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +6 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +5 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +8 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/dreb-paths.d.ts.map +1 -1
- package/dist/core/tools/dreb-paths.js +1 -0
- package/dist/core/tools/dreb-paths.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +1 -0
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +1 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +8 -0
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js +1 -0
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/web.d.ts.map +1 -1
- package/dist/core/tools/web.js +1 -0
- package/dist/core/tools/web.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +1 -0
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +2 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +5 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +2 -2
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +3 -0
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js +1 -0
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +5 -3
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +2 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +1 -0
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +3 -0
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +1 -0
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +20 -0
- package/docs/sdk.md +5 -0
- package/examples/sdk/12-full-control.ts +1 -0
- package/package.json +1 -1
|
@@ -392,10 +392,62 @@ export class AgentSession {
|
|
|
392
392
|
// _processAgentEvent, slow earlier queued events can delay agent_end processing
|
|
393
393
|
// and waitForRetry() can miss the in-flight retry.
|
|
394
394
|
this._createRetryPromiseForAgentEnd(event);
|
|
395
|
-
this._agentEventQueue = this._agentEventQueue.then(() => this._processAgentEvent(event), () =>
|
|
396
|
-
|
|
397
|
-
|
|
395
|
+
this._agentEventQueue = this._agentEventQueue.then(() => this._processAgentEvent(event), () => {
|
|
396
|
+
// Prior event failed — already warned by the .catch() below.
|
|
397
|
+
// Swallow the old rejection and continue with the current event.
|
|
398
|
+
return this._processAgentEvent(event);
|
|
399
|
+
});
|
|
400
|
+
// Prevent unhandled rejection and warn once per error.
|
|
401
|
+
// This fires for the CURRENT event's failure; the next event's rejection
|
|
402
|
+
// handler above silently continues without re-warning.
|
|
403
|
+
this._agentEventQueue.catch((err) => {
|
|
404
|
+
this.warnInSession(`Event queue error: ${err instanceof Error ? err.message : String(err)}`);
|
|
405
|
+
});
|
|
398
406
|
};
|
|
407
|
+
/**
|
|
408
|
+
* Collect all resource diagnostics from a loader and surface them as a session warning.
|
|
409
|
+
* Used after both initial load (sdk.ts) and user-initiated reload.
|
|
410
|
+
*/
|
|
411
|
+
warnResourceDiagnostics(resourceLoader) {
|
|
412
|
+
const diagnostics = [
|
|
413
|
+
...resourceLoader.getSkills().diagnostics,
|
|
414
|
+
...resourceLoader.getPrompts().diagnostics,
|
|
415
|
+
...resourceLoader.getThemes().diagnostics,
|
|
416
|
+
...resourceLoader.getContextDiagnostics(),
|
|
417
|
+
];
|
|
418
|
+
const extErrors = resourceLoader.getExtensions().errors;
|
|
419
|
+
if (diagnostics.length === 0 && extErrors.length === 0)
|
|
420
|
+
return;
|
|
421
|
+
const lines = [
|
|
422
|
+
...diagnostics.map((d) => `- [${d.type}] ${d.message}${d.path ? ` (${d.path})` : ""}`),
|
|
423
|
+
...extErrors.map((e) => `- [error] Extension: ${e.path}: ${e.error}`),
|
|
424
|
+
];
|
|
425
|
+
this.warnInSession(`Resource loading issues:\n${lines.join("\n")}`);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Surface a warning in the session so both the human and the AI agent can see it.
|
|
429
|
+
* During streaming: steers the warning as a user message into the conversation.
|
|
430
|
+
* Between turns: queues for delivery with the next user prompt.
|
|
431
|
+
*/
|
|
432
|
+
warnInSession(message, options) {
|
|
433
|
+
const suffix = options?.informational
|
|
434
|
+
? " Note this for context but do not interrupt the current task to discuss it."
|
|
435
|
+
: " Inform the user about this issue and ask how they would like to proceed.";
|
|
436
|
+
const warningContent = `[System Warning] ${message}${suffix}`;
|
|
437
|
+
const warningMessage = {
|
|
438
|
+
role: "custom",
|
|
439
|
+
customType: "system_warning",
|
|
440
|
+
content: warningContent,
|
|
441
|
+
display: true,
|
|
442
|
+
timestamp: Date.now(),
|
|
443
|
+
};
|
|
444
|
+
if (this.isStreaming) {
|
|
445
|
+
this.agent.steer(warningMessage);
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
this._pendingNextTurnMessages.push(warningMessage);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
399
451
|
_createRetryPromiseForAgentEnd(event) {
|
|
400
452
|
if (event.type !== "agent_end" || this._retryPromise) {
|
|
401
453
|
return;
|
|
@@ -1011,6 +1063,7 @@ export class AgentSession {
|
|
|
1011
1063
|
}
|
|
1012
1064
|
catch (err) {
|
|
1013
1065
|
const message = err instanceof Error ? err.message : String(err);
|
|
1066
|
+
this.warnInSession(`Skill expansion failed for "${skillName}": ${message}`);
|
|
1014
1067
|
if (this._extensionRunner) {
|
|
1015
1068
|
this._extensionRunner.emitError({
|
|
1016
1069
|
extensionPath: skill.filePath,
|
|
@@ -1018,9 +1071,6 @@ export class AgentSession {
|
|
|
1018
1071
|
error: message,
|
|
1019
1072
|
});
|
|
1020
1073
|
}
|
|
1021
|
-
else {
|
|
1022
|
-
console.error(`Skill expansion error for "${skillName}": ${message}`);
|
|
1023
|
-
}
|
|
1024
1074
|
return text; // Return original on error
|
|
1025
1075
|
}
|
|
1026
1076
|
}
|
|
@@ -1763,14 +1813,20 @@ export class AgentSession {
|
|
|
1763
1813
|
this.agent.replaceMessages(messages.slice(0, -1));
|
|
1764
1814
|
}
|
|
1765
1815
|
setTimeout(() => {
|
|
1766
|
-
this.agent.continue().catch(() => {
|
|
1816
|
+
this.agent.continue().catch((err) => {
|
|
1817
|
+
// Agent failed to continue after auto-compaction — surface to session
|
|
1818
|
+
this.warnInSession(`Agent failed to continue after compaction: ${err instanceof Error ? err.message : String(err)}`);
|
|
1819
|
+
});
|
|
1767
1820
|
}, 100);
|
|
1768
1821
|
}
|
|
1769
1822
|
else if (this.agent.hasQueuedMessages()) {
|
|
1770
1823
|
// Auto-compaction can complete while follow-up/steering/custom messages are waiting.
|
|
1771
1824
|
// Kick the loop so queued messages are actually delivered.
|
|
1772
1825
|
setTimeout(() => {
|
|
1773
|
-
this.agent.continue().catch(() => {
|
|
1826
|
+
this.agent.continue().catch((err) => {
|
|
1827
|
+
// Agent failed to continue after auto-compaction — surface to session
|
|
1828
|
+
this.warnInSession(`Agent failed to continue after compaction: ${err instanceof Error ? err.message : String(err)}`);
|
|
1829
|
+
});
|
|
1774
1830
|
}, 100);
|
|
1775
1831
|
}
|
|
1776
1832
|
}
|
|
@@ -2152,6 +2208,8 @@ export class AgentSession {
|
|
|
2152
2208
|
await this._extensionRunner.emit({ type: "session_start" });
|
|
2153
2209
|
await this.extendResourcesFromExtensions("reload");
|
|
2154
2210
|
}
|
|
2211
|
+
// After reload completes, surface any resource diagnostics to the session
|
|
2212
|
+
this.warnResourceDiagnostics(this._resourceLoader);
|
|
2155
2213
|
}
|
|
2156
2214
|
// =========================================================================
|
|
2157
2215
|
// Auto-Retry
|
|
@@ -2169,7 +2227,7 @@ export class AgentSession {
|
|
|
2169
2227
|
return false;
|
|
2170
2228
|
const err = message.errorMessage;
|
|
2171
2229
|
// Match: overloaded_error, provider returned error, rate limit, 429, 500, 502, 503, 504, service unavailable, network/connection errors, fetch failed, terminated, retry delay exceeded
|
|
2172
|
-
return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|timed? out|timeout|terminated|retry delay/i.test(err);
|
|
2230
|
+
return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|other side closed|fetch failed|ended without|upstream.?connect|reset before headers|socket hang up|timed? out|timeout|terminated|retry delay/i.test(err);
|
|
2173
2231
|
}
|
|
2174
2232
|
/**
|
|
2175
2233
|
* Handle retryable errors with exponential backoff.
|
|
@@ -2236,8 +2294,9 @@ export class AgentSession {
|
|
|
2236
2294
|
this._retryAbortController = undefined;
|
|
2237
2295
|
// Retry via continue() - use setTimeout to break out of event handler chain
|
|
2238
2296
|
setTimeout(() => {
|
|
2239
|
-
this.agent.continue().catch(() => {
|
|
2240
|
-
// Retry failed
|
|
2297
|
+
this.agent.continue().catch((err) => {
|
|
2298
|
+
// Retry failed — surface to session so user knows
|
|
2299
|
+
this.warnInSession(`Agent retry failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2241
2300
|
});
|
|
2242
2301
|
}, 0);
|
|
2243
2302
|
return true;
|