@dreb/coding-agent 2.19.0 → 2.19.1
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/README.md +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +3 -2
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/buddy/buddy-controller.d.ts.map +1 -1
- package/dist/core/buddy/buddy-controller.js +3 -2
- package/dist/core/buddy/buddy-controller.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +2 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/logger.d.ts +29 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +3 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +25 -2
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/stderr-guard.d.ts +37 -0
- package/dist/core/stderr-guard.d.ts.map +1 -0
- package/dist/core/stderr-guard.js +90 -0
- package/dist/core/stderr-guard.js.map +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +5 -4
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js +18 -17
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/core/tools/terminal-render.d.ts.map +1 -1
- package/dist/core/tools/terminal-render.js +2 -1
- package/dist/core/tools/terminal-render.js.map +1 -1
- package/dist/core/tools/web-search-queue.d.ts.map +1 -1
- package/dist/core/tools/web-search-queue.js +2 -1
- package/dist/core/tools/web-search-queue.js.map +1 -1
- package/dist/core/tools/web.d.ts.map +1 -1
- package/dist/core/tools/web.js +6 -5
- package/dist/core/tools/web.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +25 -24
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +5 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +32 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +3 -2
- package/dist/modes/print-mode.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ import { Type } from "@sinclair/typebox";
|
|
|
9
9
|
import { CONFIG_DIR_NAME, getPackageDir, getSubagentSessionsDir } from "../../config.js";
|
|
10
10
|
import { keyHint } from "../../modes/interactive/components/keybinding-hints.js";
|
|
11
11
|
import { attachJsonlLineReader } from "../../modes/rpc/jsonl.js";
|
|
12
|
+
import { log } from "../logger.js";
|
|
12
13
|
import { resolveCliModel } from "../model-resolver.js";
|
|
13
14
|
import { getTextOutput, invalidArgText, str } from "./render-utils.js";
|
|
14
15
|
import { wrapToolDefinition } from "./tool-definition-wrapper.js";
|
|
@@ -87,20 +88,20 @@ function loadAgentsFromDir(dir, agents) {
|
|
|
87
88
|
const content = readFileSync(join(dir, file), "utf-8");
|
|
88
89
|
const parsed = parseAgentFrontmatter(content);
|
|
89
90
|
if (!parsed.ok) {
|
|
90
|
-
|
|
91
|
+
log.warn(`[subagent] Skipping agent file ${join(dir, file)}: ${parsed.error}`);
|
|
91
92
|
}
|
|
92
93
|
else {
|
|
93
94
|
agents.set(parsed.config.name, parsed.config);
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
catch (err) {
|
|
97
|
-
|
|
98
|
+
log.warn(`[subagent] Could not read agent file ${join(dir, file)}: ${err instanceof Error ? err.message : String(err)}`);
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
catch (err) {
|
|
102
103
|
if (err.code !== "ENOENT") {
|
|
103
|
-
|
|
104
|
+
log.warn(`[subagent] Could not read agents directory ${dir}: ${err instanceof Error ? err.message : String(err)}`);
|
|
104
105
|
}
|
|
105
106
|
}
|
|
106
107
|
}
|
|
@@ -141,7 +142,7 @@ function findDrebBinary() {
|
|
|
141
142
|
}
|
|
142
143
|
async function spawnSubagent(agentConfig, task, cwd, signal, onProgress, parentProvider, sessionDir) {
|
|
143
144
|
const drebBin = findDrebBinary();
|
|
144
|
-
|
|
145
|
+
log.debug(`[subagent] spawn: agent=${agentConfig.name} cwd=${cwd}`);
|
|
145
146
|
// Validate cwd exists — spawn() throws a misleading ENOENT blaming the
|
|
146
147
|
// binary when the cwd is invalid, making the real cause hard to diagnose
|
|
147
148
|
if (!existsSync(cwd)) {
|
|
@@ -227,12 +228,12 @@ async function spawnSubagent(agentConfig, task, cwd, signal, onProgress, parentP
|
|
|
227
228
|
}
|
|
228
229
|
});
|
|
229
230
|
proc.stderr?.on("error", (err) => {
|
|
230
|
-
|
|
231
|
+
log.warn(`[subagent] stderr stream error (agent=${agentConfig.name}): ${err.message}`);
|
|
231
232
|
});
|
|
232
233
|
// Parse JSONL events from stdout
|
|
233
234
|
if (proc.stdout) {
|
|
234
235
|
proc.stdout.on("error", (err) => {
|
|
235
|
-
|
|
236
|
+
log.warn(`[subagent] stdout stream error (agent=${agentConfig.name}): ${err.message}`);
|
|
236
237
|
});
|
|
237
238
|
attachJsonlLineReader(proc.stdout, (line) => {
|
|
238
239
|
if (!line.trim())
|
|
@@ -248,7 +249,7 @@ async function spawnSubagent(agentConfig, task, cwd, signal, onProgress, parentP
|
|
|
248
249
|
// (e.g. startup errors printed before JSONL mode begins)
|
|
249
250
|
plainStdoutLines.push(line.trim());
|
|
250
251
|
if (line.trim().startsWith("{")) {
|
|
251
|
-
|
|
252
|
+
log.warn(`[subagent] Failed to parse JSONL event: ${line.slice(0, 200)}`);
|
|
252
253
|
}
|
|
253
254
|
return;
|
|
254
255
|
}
|
|
@@ -304,7 +305,7 @@ async function spawnSubagent(agentConfig, task, cwd, signal, onProgress, parentP
|
|
|
304
305
|
signal?.removeEventListener("abort", onAbort);
|
|
305
306
|
const exitCode = code ?? 1;
|
|
306
307
|
const stderr = stderrChunks.join("");
|
|
307
|
-
|
|
308
|
+
log.debug(`[subagent] close: agent=${agentConfig.name} exit=${exitCode} messages=${collectedMessages.length}${exitCode !== 0 ? ` stderr=${stderr.slice(0, 200)} stdout=${plainStdoutLines.join("|").slice(0, 200)}` : ""}`);
|
|
308
309
|
// Extract final text output from collected assistant messages
|
|
309
310
|
const outputParts = [];
|
|
310
311
|
for (const msg of collectedMessages) {
|
|
@@ -375,12 +376,12 @@ export function discoverSessionFile(sessionDir, agentName) {
|
|
|
375
376
|
}
|
|
376
377
|
}
|
|
377
378
|
if (best) {
|
|
378
|
-
|
|
379
|
+
log.debug(`[subagent] session file: ${best.path} (agent=${agentName})`);
|
|
379
380
|
return best.path;
|
|
380
381
|
}
|
|
381
382
|
}
|
|
382
383
|
catch (err) {
|
|
383
|
-
|
|
384
|
+
log.warn(`[subagent] failed to discover session file (agent=${agentName}): ${err instanceof Error ? err.message : String(err)}`);
|
|
384
385
|
}
|
|
385
386
|
return undefined;
|
|
386
387
|
}
|
|
@@ -570,7 +571,7 @@ export async function resolveModelForSubagentSpawn(models, parentProvider, regis
|
|
|
570
571
|
lastError = resolved.error;
|
|
571
572
|
const reason = compactErrorReason(resolved.error);
|
|
572
573
|
skippedModels.push({ model: modelStr, reason });
|
|
573
|
-
|
|
574
|
+
log.warn(`[subagent] Model "${modelStr}" unavailable (${reason}). Trying next fallback...`);
|
|
574
575
|
continue;
|
|
575
576
|
}
|
|
576
577
|
const modelObj = resolved.provider ? registry.find(resolved.provider, resolved.modelId) : undefined;
|
|
@@ -584,11 +585,11 @@ export async function resolveModelForSubagentSpawn(models, parentProvider, regis
|
|
|
584
585
|
if (!probe.ok) {
|
|
585
586
|
lastError = probe.reason;
|
|
586
587
|
skippedModels.push({ model: modelStr, reason: probe.reason });
|
|
587
|
-
|
|
588
|
+
log.warn(`[subagent] Model "${modelStr}" failed probe (${probe.reason}). Trying next fallback...`);
|
|
588
589
|
continue;
|
|
589
590
|
}
|
|
590
591
|
}
|
|
591
|
-
|
|
592
|
+
log.debug(`[subagent] Using model "${resolved.modelId}" for subagent.`);
|
|
592
593
|
return { ...resolved, skippedModels };
|
|
593
594
|
}
|
|
594
595
|
if (signal?.aborted)
|
|
@@ -597,7 +598,7 @@ export async function resolveModelForSubagentSpawn(models, parentProvider, regis
|
|
|
597
598
|
const parentResolved = resolveModelStringSingle(parentModel, parentProvider, registry);
|
|
598
599
|
if (parentResolved.ok) {
|
|
599
600
|
const warning = `Agent preferred models were unavailable. Falling back to parent model "${parentResolved.modelId}".`;
|
|
600
|
-
|
|
601
|
+
log.warn(`[subagent] ${warning}`);
|
|
601
602
|
return { ...parentResolved, warning, skippedModels };
|
|
602
603
|
}
|
|
603
604
|
lastError = parentResolved.error;
|
|
@@ -1019,7 +1020,7 @@ export function createSubagentToolDefinition(cwd, options) {
|
|
|
1019
1020
|
onBackgroundComplete(agentId, result, bgSignal.aborted);
|
|
1020
1021
|
}
|
|
1021
1022
|
catch (err) {
|
|
1022
|
-
|
|
1023
|
+
log.warn(`[subagent] onBackgroundComplete threw for agent ${agentId}: ${err instanceof Error ? err.message : String(err)}. Background result lost.`);
|
|
1023
1024
|
}
|
|
1024
1025
|
};
|
|
1025
1026
|
const run = async () => {
|
|
@@ -1051,7 +1052,7 @@ export function createSubagentToolDefinition(cwd, options) {
|
|
|
1051
1052
|
}
|
|
1052
1053
|
};
|
|
1053
1054
|
run().catch((err) => {
|
|
1054
|
-
|
|
1055
|
+
log.warn(`[subagent] Unhandled background error (${agentId}): ${err instanceof Error ? err.message : String(err)}`);
|
|
1055
1056
|
const entry = backgroundAgentRegistry.get(agentId);
|
|
1056
1057
|
if (entry && entry.status === "running")
|
|
1057
1058
|
entry.status = "failed";
|
|
@@ -1067,7 +1068,7 @@ export function createSubagentToolDefinition(cwd, options) {
|
|
|
1067
1068
|
}, bgSignal.aborted);
|
|
1068
1069
|
}
|
|
1069
1070
|
catch (notifyErr) {
|
|
1070
|
-
|
|
1071
|
+
log.error(`[subagent] CRITICAL: Last-resort notification failed for ${agentId}: ${notifyErr instanceof Error ? notifyErr.message : String(notifyErr)}`);
|
|
1071
1072
|
}
|
|
1072
1073
|
});
|
|
1073
1074
|
return agentId;
|