@botbotgo/agent-harness 0.0.449 → 0.0.451

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.
@@ -1,2 +1,2 @@
1
- export declare const AGENT_HARNESS_VERSION = "0.0.449";
1
+ export declare const AGENT_HARNESS_VERSION = "0.0.451";
2
2
  export declare const AGENT_HARNESS_RELEASE_DATE = "2026-05-04";
@@ -1,2 +1,2 @@
1
- export const AGENT_HARNESS_VERSION = "0.0.449";
1
+ export const AGENT_HARNESS_VERSION = "0.0.451";
2
2
  export const AGENT_HARNESS_RELEASE_DATE = "2026-05-04";
@@ -2,7 +2,7 @@ import path from "node:path";
2
2
  import { validateSkillMetadata } from "../runtime/skills/skill-metadata.js";
3
3
  import { getAgentExecutionConfigValue } from "./support/agent-execution-config.js";
4
4
  import { getRuntimeAgentDefaults, getWorkspaceObject, resolvePromptValue } from "./support/workspace-ref-utils.js";
5
- const FORBIDDEN_GENERAL_PURPOSE_SUBAGENT_NAME = "general-purpose";
5
+ const UPSTREAM_GENERAL_PURPOSE_SUBAGENT_NAME = "general-purpose";
6
6
  const FRAMEWORK_AGENT_TOOL_NAMES = new Set(["task"]);
7
7
  const FRAMEWORK_EXECUTION_TOOL_NAMES = new Set(["write_todos", "read_todos"]);
8
8
  const TERMINAL_STATUS_VALUES = new Set(["completed", "blocked", "failed", "refused"]);
@@ -188,17 +188,17 @@ function validateAgentContract(agent, referencedSubagentIds, tools, refs, issues
188
188
  ...agent.subagentRefs.map(resolveRefId),
189
189
  ...(agent.asyncSubagents ?? []).map((subagent) => subagent.name),
190
190
  ];
191
- if (agent.id === FORBIDDEN_GENERAL_PURPOSE_SUBAGENT_NAME) {
192
- addIssue(issues, "agent.general_purpose.forbidden", `Agent ${agent.id} uses the reserved general-purpose subagent name. Define explicit specialists with narrow responsibilities instead.`);
191
+ const isDeepAgentsGeneralPurposeSubagentOverride = agent.executionMode === "deepagent"
192
+ && isSubagent
193
+ && agent.id === UPSTREAM_GENERAL_PURPOSE_SUBAGENT_NAME;
194
+ if (agent.id === UPSTREAM_GENERAL_PURPOSE_SUBAGENT_NAME && !isDeepAgentsGeneralPurposeSubagentOverride) {
195
+ addIssue(issues, "agent.general_purpose.forbidden", `Agent ${agent.id} uses the upstream DeepAgents general-purpose subagent name outside a DeepAgents subagent override. Define a product agent with a narrow runtime boundary instead.`);
193
196
  }
194
197
  for (const asyncSubagent of agent.asyncSubagents ?? []) {
195
- if (asyncSubagent.name === FORBIDDEN_GENERAL_PURPOSE_SUBAGENT_NAME) {
196
- addIssue(issues, "agent.general_purpose.forbidden", `Agent ${agent.id} defines async subagent ${asyncSubagent.name}. Define explicit specialists with narrow responsibilities instead.`);
198
+ if (asyncSubagent.name === UPSTREAM_GENERAL_PURPOSE_SUBAGENT_NAME) {
199
+ addIssue(issues, "agent.general_purpose.forbidden", `Agent ${agent.id} defines async subagent ${asyncSubagent.name}. DeepAgents reserves that name for its inline general-purpose subagent surface.`);
197
200
  }
198
201
  }
199
- if (localSubagentNames.includes(FORBIDDEN_GENERAL_PURPOSE_SUBAGENT_NAME)) {
200
- addIssue(issues, "agent.general_purpose.forbidden", `Agent ${agent.id} references reserved subagent name ${FORBIDDEN_GENERAL_PURPOSE_SUBAGENT_NAME}. Define explicit specialists with narrow responsibilities instead.`);
201
- }
202
202
  if (hasDuplicateValues(localSubagentNames)) {
203
203
  addIssue(issues, "agent.subagent.duplicate_name", `Agent ${agent.id} exposes duplicate subagent names. Each delegated capability must have one stable owner.`);
204
204
  }
@@ -327,7 +327,9 @@ export function parseAgentItem(item, sourcePath) {
327
327
  subagentRefs,
328
328
  subagentPathRefs,
329
329
  asyncSubagents,
330
- langchainAgentConfig: normalizeModuleAgentConfig(readAgentConfig(normalizedItem, { includeDelegationControls: true }), moduleRoot),
330
+ langchainAgentConfig: normalizeModuleAgentConfig(readAgentConfig(normalizedItem, {
331
+ includeDelegationControls: executionMode === "langchain-v1",
332
+ }), moduleRoot),
331
333
  deepAgentConfig: normalizeModuleAgentConfig(readAgentConfig(normalizedItem, {
332
334
  includeObjectBackend: true,
333
335
  includeDelegationControls: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botbotgo/agent-harness",
3
- "version": "0.0.449",
3
+ "version": "0.0.451",
4
4
  "description": "Workspace runtime for multi-agent applications",
5
5
  "license": "MIT",
6
6
  "type": "module",