@dreb/coding-agent 2.57.0 → 2.58.0
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 +4 -2
- package/dist/core/agent-session.d.ts +10 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +28 -3
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +5 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +26 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +6 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/subagent.d.ts +29 -0
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js +48 -25
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +11 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +15 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +2 -2
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +12 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +3 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/docs/custom-provider.md +17 -2
- package/docs/dashboard.md +1 -1
- package/docs/models.md +1 -1
- package/docs/rpc.md +11 -1
- package/docs/sdk.md +1 -1
- package/docs/settings.md +5 -1
- package/package.json +1 -1
|
@@ -37,11 +37,11 @@ import { expandPromptTemplate } from "./prompt-templates.js";
|
|
|
37
37
|
import { scrubSecrets } from "./secret-scrubber.js";
|
|
38
38
|
import { isSensitivePath } from "./sensitive-paths.js";
|
|
39
39
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
|
|
40
|
-
import { DEFAULT_BG_PARENT_TURN_LIMIT } from "./settings-manager.js";
|
|
40
|
+
import { DEFAULT_BG_PARENT_TURN_LIMIT, DEFAULT_MAX_CONCURRENT_SUBAGENTS, } from "./settings-manager.js";
|
|
41
41
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
42
42
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
43
43
|
import { resolveThinkingDisplay } from "./thinking.js";
|
|
44
|
-
import { createAllToolDefinitions, discoverAgentTypes, getRunningBackgroundAgents, } from "./tools/index.js";
|
|
44
|
+
import { createAllToolDefinitions, createSubagentConcurrencyGate, discoverAgentTypes, getRunningBackgroundAgents, } from "./tools/index.js";
|
|
45
45
|
import { expandSkillContent } from "./tools/skill.js";
|
|
46
46
|
import { createToolDefinitionFromAgentTool, wrapToolDefinition } from "./tools/tool-definition-wrapper.js";
|
|
47
47
|
// ============================================================================
|
|
@@ -152,6 +152,14 @@ export class AgentSession {
|
|
|
152
152
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
153
153
|
_baseSystemPrompt = "";
|
|
154
154
|
_uiType;
|
|
155
|
+
_maxConcurrentSubagents;
|
|
156
|
+
_subagentsDisabledBySetting;
|
|
157
|
+
/**
|
|
158
|
+
* Session-owned concurrency gate. Created once and reused across `_buildRuntime` rebuilds so
|
|
159
|
+
* the running-child count stays accurate through `/reload` while children launched before the
|
|
160
|
+
* reload are still in flight.
|
|
161
|
+
*/
|
|
162
|
+
_subagentConcurrencyGate;
|
|
155
163
|
performanceTracker;
|
|
156
164
|
_ownsPerformanceTracker;
|
|
157
165
|
// Git repo state captured once at session start
|
|
@@ -184,6 +192,15 @@ export class AgentSession {
|
|
|
184
192
|
this._initialActiveToolNames = config.initialActiveToolNames;
|
|
185
193
|
this._baseToolsOverride = config.baseToolsOverride;
|
|
186
194
|
this._uiType = config.uiType;
|
|
195
|
+
const configuredMaxConcurrentSubagents = config.maxConcurrentSubagents ?? this.settingsManager.getMaxConcurrentSubagents();
|
|
196
|
+
if (!Number.isSafeInteger(configuredMaxConcurrentSubagents) || configuredMaxConcurrentSubagents < 0) {
|
|
197
|
+
throw new Error("maxConcurrentSubagents must be a non-negative whole number");
|
|
198
|
+
}
|
|
199
|
+
const isChildAgentSession = this.sessionManager.getHeader()?.agentType !== undefined;
|
|
200
|
+
this._subagentsDisabledBySetting = !isChildAgentSession && configuredMaxConcurrentSubagents === 0;
|
|
201
|
+
this._maxConcurrentSubagents =
|
|
202
|
+
configuredMaxConcurrentSubagents > 0 ? configuredMaxConcurrentSubagents : DEFAULT_MAX_CONCURRENT_SUBAGENTS;
|
|
203
|
+
this._subagentConcurrencyGate = createSubagentConcurrencyGate(this._maxConcurrentSubagents);
|
|
187
204
|
// Capture git repo state once at session start (before building runtime/system prompt)
|
|
188
205
|
this._gitRepoState = getGitRepoState(this._cwd) ?? undefined;
|
|
189
206
|
this._dispatchArbiter = new DispatchArbiter({
|
|
@@ -1105,6 +1122,8 @@ export class AgentSession {
|
|
|
1105
1122
|
const tools = [];
|
|
1106
1123
|
const validToolNames = [];
|
|
1107
1124
|
for (const name of toolNames) {
|
|
1125
|
+
if (this._subagentsDisabledBySetting && name === "subagent")
|
|
1126
|
+
continue;
|
|
1108
1127
|
const tool = this._toolRegistry.get(name);
|
|
1109
1128
|
if (tool) {
|
|
1110
1129
|
tools.push(tool);
|
|
@@ -1231,6 +1250,7 @@ export class AgentSession {
|
|
|
1231
1250
|
uiType: this._uiType,
|
|
1232
1251
|
gitRepoState: this._gitRepoState,
|
|
1233
1252
|
currentModel: this.model ? { provider: this.model.provider, id: this.model.id } : undefined,
|
|
1253
|
+
subagentsDisabled: this._subagentsDisabledBySetting,
|
|
1234
1254
|
});
|
|
1235
1255
|
}
|
|
1236
1256
|
// =========================================================================
|
|
@@ -2562,7 +2582,10 @@ export class AgentSession {
|
|
|
2562
2582
|
}
|
|
2563
2583
|
}
|
|
2564
2584
|
}
|
|
2565
|
-
|
|
2585
|
+
const uniqueActiveToolNames = [...new Set(nextActiveToolNames)];
|
|
2586
|
+
this.setActiveToolsByName(this._subagentsDisabledBySetting
|
|
2587
|
+
? uniqueActiveToolNames.filter((name) => name !== "subagent")
|
|
2588
|
+
: uniqueActiveToolNames);
|
|
2566
2589
|
}
|
|
2567
2590
|
_buildRuntime(options) {
|
|
2568
2591
|
const autoResizeImages = this.settingsManager.getImageAutoResize();
|
|
@@ -2617,6 +2640,8 @@ export class AgentSession {
|
|
|
2617
2640
|
modelRegistry: this._modelRegistry,
|
|
2618
2641
|
getAgentModelsForAgent: (name) => this.settingsManager?.getAgentModelsForAgent(name),
|
|
2619
2642
|
defaultThinkingLevel: () => this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,
|
|
2643
|
+
maxConcurrentSubagents: this._maxConcurrentSubagents,
|
|
2644
|
+
concurrencyGate: this._subagentConcurrencyGate,
|
|
2620
2645
|
arbitrate: (request, signal) => this._dispatchArbiter.arbitrate(request, signal),
|
|
2621
2646
|
onArbitration: (event) => {
|
|
2622
2647
|
this.sessionManager.appendCustomEntry("subagent_arbitration", event);
|