@botbotgo/agent-harness 0.0.111 → 0.0.112
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 +0 -2
- package/README.zh.md +0 -2
- package/dist/config/agents/direct.yaml +58 -59
- package/dist/config/agents/orchestra.yaml +68 -70
- package/dist/contracts/core.d.ts +0 -2
- package/dist/contracts/runtime.d.ts +0 -17
- package/dist/contracts/workspace.d.ts +2 -7
- package/dist/init-project.js +10 -8
- package/dist/package-version.d.ts +1 -1
- package/dist/package-version.js +1 -1
- package/dist/persistence/file-store.d.ts +1 -5
- package/dist/persistence/file-store.js +1 -34
- package/dist/runtime/adapter/compat/deepagent-compat.d.ts +6 -0
- package/dist/runtime/adapter/compat/deepagent-compat.js +3 -0
- package/dist/runtime/adapter/{execution-context.d.ts → flow/execution-context.d.ts} +17 -3
- package/dist/runtime/adapter/{execution-context.js → flow/execution-context.js} +20 -2
- package/dist/runtime/adapter/flow/invocation-flow.d.ts +24 -0
- package/dist/runtime/adapter/flow/invocation-flow.js +42 -0
- package/dist/runtime/adapter/{invoke-runtime.d.ts → flow/invoke-runtime.d.ts} +3 -3
- package/dist/runtime/adapter/{invoke-runtime.js → flow/invoke-runtime.js} +1 -1
- package/dist/runtime/adapter/flow/runnable-assembly.d.ts +51 -0
- package/dist/runtime/adapter/flow/runnable-assembly.js +52 -0
- package/dist/runtime/adapter/{stream-runtime.d.ts → flow/stream-runtime.d.ts} +3 -3
- package/dist/runtime/adapter/{stream-runtime.js → flow/stream-runtime.js} +6 -6
- package/dist/runtime/adapter/middleware-assembly.d.ts +1 -1
- package/dist/runtime/adapter/middleware-assembly.js +5 -8
- package/dist/runtime/adapter/runnable-config.d.ts +0 -2
- package/dist/runtime/adapter/runnable-config.js +0 -2
- package/dist/runtime/adapter/runtime-adapter-support.d.ts +0 -7
- package/dist/runtime/adapter/runtime-adapter-support.js +1 -20
- package/dist/runtime/adapter/runtime-shell.js +1 -1
- package/dist/runtime/adapter/tool/builtin-middleware-tools.js +10 -9
- package/dist/runtime/adapter/tool-resolution.d.ts +1 -1
- package/dist/runtime/agent-runtime-adapter.d.ts +1 -1
- package/dist/runtime/agent-runtime-adapter.js +52 -81
- package/dist/runtime/harness/system/inventory.d.ts +2 -2
- package/dist/runtime/harness/system/inventory.js +5 -6
- package/dist/runtime/parsing/stream-event-parsing.js +2 -2
- package/dist/runtime/support/compiled-binding.d.ts +1 -2
- package/dist/runtime/support/compiled-binding.js +0 -3
- package/dist/workspace/agent-binding-compiler.js +2 -22
- package/dist/workspace/object-loader.js +94 -23
- package/dist/workspace/support/workspace-ref-utils.d.ts +1 -2
- package/dist/workspace/support/workspace-ref-utils.js +0 -12
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { buildExecutableToolMap } from "
|
|
2
|
-
import { getBindingLangChainParams, getBindingPrimaryModel, getBindingPrimaryTools, isLangChainBinding } from "
|
|
1
|
+
import { buildExecutableToolMap } from "../tool-resolution.js";
|
|
2
|
+
import { getBindingLangChainParams, getBindingPrimaryModel, getBindingPrimaryTools, isLangChainBinding } from "../../support/compiled-binding.js";
|
|
3
3
|
export function buildBindingToolCatalog(input) {
|
|
4
4
|
const primaryTools = getBindingPrimaryTools(input.binding);
|
|
5
5
|
const toolNameMapping = input.getToolNameMapping(input.binding);
|
|
@@ -50,3 +50,21 @@ export async function resolveLangChainStreamContext(input) {
|
|
|
50
50
|
langChainStreamModel,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
+
export async function resolveRuntimeStreamExecutionContext(input) {
|
|
54
|
+
const { primaryTools, toolNameMapping } = buildBindingToolCatalog({
|
|
55
|
+
binding: input.binding,
|
|
56
|
+
getToolNameMapping: input.getToolNameMapping,
|
|
57
|
+
});
|
|
58
|
+
const { forceInvokeFallback, canUseDirectModelStream, langChainStreamModel, } = await resolveLangChainStreamContext({
|
|
59
|
+
binding: input.binding,
|
|
60
|
+
resolveModel: input.resolveModel,
|
|
61
|
+
resolveTools: input.resolveTools,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
primaryTools,
|
|
65
|
+
toolNameMapping,
|
|
66
|
+
forceInvokeFallback,
|
|
67
|
+
canUseDirectModelStream,
|
|
68
|
+
langChainStreamModel,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CompiledAgentBinding, CompiledTool, MessageContent, RunResult, TranscriptMessage } from "../../../contracts/types.js";
|
|
2
|
+
import { type ExecutableTool } from "./invoke-runtime.js";
|
|
3
|
+
import type { ToolNameMapping } from "../tool/tool-name-mapping.js";
|
|
4
|
+
export declare function executeRuntimeInvocation(options: {
|
|
5
|
+
binding: CompiledAgentBinding;
|
|
6
|
+
input: MessageContent;
|
|
7
|
+
threadId: string;
|
|
8
|
+
runId: string;
|
|
9
|
+
resumePayload?: unknown;
|
|
10
|
+
history?: TranscriptMessage[];
|
|
11
|
+
invokeOptions?: {
|
|
12
|
+
context?: Record<string, unknown>;
|
|
13
|
+
state?: Record<string, unknown>;
|
|
14
|
+
files?: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
resolveTools: (tools: CompiledTool[], binding?: CompiledAgentBinding) => unknown[];
|
|
17
|
+
getToolNameMapping: (binding: CompiledAgentBinding) => ToolNameMapping;
|
|
18
|
+
resolveBuiltinMiddlewareTools: (binding: CompiledAgentBinding, options?: {
|
|
19
|
+
context?: Record<string, unknown>;
|
|
20
|
+
state?: Record<string, unknown>;
|
|
21
|
+
files?: Record<string, unknown>;
|
|
22
|
+
}) => Promise<Map<string, ExecutableTool>>;
|
|
23
|
+
callRuntimeWithToolParseRecovery: (request: unknown) => Promise<Record<string, unknown>>;
|
|
24
|
+
}): Promise<RunResult>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Command } from "@langchain/langgraph";
|
|
2
|
+
import { buildBindingToolExecutionContext } from "./execution-context.js";
|
|
3
|
+
import { finalizeInvocationResult } from "../invocation-result.js";
|
|
4
|
+
import { invokeRuntimeWithLocalTools } from "./invoke-runtime.js";
|
|
5
|
+
import { buildInvocationRequest } from "../model/invocation-request.js";
|
|
6
|
+
export async function executeRuntimeInvocation(options) {
|
|
7
|
+
const history = options.history ?? [];
|
|
8
|
+
const invokeOptions = options.invokeOptions ?? {};
|
|
9
|
+
const request = options.resumePayload === undefined
|
|
10
|
+
? buildInvocationRequest(options.binding, history, options.input, invokeOptions)
|
|
11
|
+
: new Command({ resume: options.resumePayload });
|
|
12
|
+
const { primaryTools, toolNameMapping, executableTools, defersToUpstreamHitlExecution, } = buildBindingToolExecutionContext({
|
|
13
|
+
binding: options.binding,
|
|
14
|
+
resolveTools: options.resolveTools,
|
|
15
|
+
getToolNameMapping: options.getToolNameMapping,
|
|
16
|
+
context: invokeOptions.context,
|
|
17
|
+
});
|
|
18
|
+
const builtinExecutableTools = await options.resolveBuiltinMiddlewareTools(options.binding, invokeOptions);
|
|
19
|
+
const localOrUpstreamInvocation = await invokeRuntimeWithLocalTools({
|
|
20
|
+
binding: options.binding,
|
|
21
|
+
request,
|
|
22
|
+
resumePayload: options.resumePayload,
|
|
23
|
+
primaryTools,
|
|
24
|
+
defersToUpstreamHitlExecution,
|
|
25
|
+
toolNameMapping,
|
|
26
|
+
executableTools,
|
|
27
|
+
builtinExecutableTools: builtinExecutableTools,
|
|
28
|
+
callRuntimeWithToolParseRecovery: options.callRuntimeWithToolParseRecovery,
|
|
29
|
+
});
|
|
30
|
+
const result = localOrUpstreamInvocation.result;
|
|
31
|
+
const executedToolResults = [...localOrUpstreamInvocation.executedToolResults];
|
|
32
|
+
if (!result) {
|
|
33
|
+
throw new Error("Agent invocation returned no result");
|
|
34
|
+
}
|
|
35
|
+
return finalizeInvocationResult({
|
|
36
|
+
bindingAgentId: options.binding.agent.id,
|
|
37
|
+
threadId: options.threadId,
|
|
38
|
+
runId: options.runId,
|
|
39
|
+
result,
|
|
40
|
+
executedToolResults,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CompiledAgentBinding, CompiledTool } from "
|
|
2
|
-
import type { ExecutedToolResult } from "
|
|
3
|
-
import type { ToolNameMapping } from "
|
|
1
|
+
import type { CompiledAgentBinding, CompiledTool } from "../../../contracts/types.js";
|
|
2
|
+
import type { ExecutedToolResult } from "../invocation-result.js";
|
|
3
|
+
import type { ToolNameMapping } from "../tool/tool-name-mapping.js";
|
|
4
4
|
export type ExecutableTool = {
|
|
5
5
|
name: string;
|
|
6
6
|
schema: unknown;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { runLocalToolInvocationLoop } from "
|
|
1
|
+
import { runLocalToolInvocationLoop } from "../local-tool-invocation.js";
|
|
2
2
|
export async function invokeRuntimeWithLocalTools(options) {
|
|
3
3
|
if (options.resumePayload !== undefined || options.defersToUpstreamHitlExecution) {
|
|
4
4
|
return {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CompiledAgentBinding, CompiledModel, CompiledSubAgent, CompiledTool, DeepAgentParams, LangChainAgentParams, RuntimeAdapterOptions } from "../../../contracts/types.js";
|
|
2
|
+
export declare function resolveRunnableCheckpointer(options: RuntimeAdapterOptions, binding: CompiledAgentBinding): unknown;
|
|
3
|
+
export declare function resolveRunnableInterruptOn(binding: CompiledAgentBinding): Record<string, {
|
|
4
|
+
allowedDecisions: import("../tool/interrupt-policy.js").InterruptDecision[];
|
|
5
|
+
}> | undefined;
|
|
6
|
+
export declare function assembleLangChainRunnable(input: {
|
|
7
|
+
binding: CompiledAgentBinding;
|
|
8
|
+
runtimeAdapterOptions: RuntimeAdapterOptions;
|
|
9
|
+
passthroughOverride?: Record<string, unknown>;
|
|
10
|
+
systemPromptOverride?: string;
|
|
11
|
+
resolveModel: (model: CompiledModel) => Promise<unknown>;
|
|
12
|
+
resolveTools: (tools: CompiledTool[], binding?: CompiledAgentBinding) => unknown[];
|
|
13
|
+
resolveMiddleware: (binding: CompiledAgentBinding, interruptOn?: Record<string, {
|
|
14
|
+
allowedDecisions: Array<"approve" | "edit" | "reject">;
|
|
15
|
+
}>) => Promise<unknown[]>;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
langchainParams: LangChainAgentParams;
|
|
18
|
+
interruptOn?: Record<string, {
|
|
19
|
+
allowedDecisions: Array<"approve" | "edit" | "reject">;
|
|
20
|
+
}>;
|
|
21
|
+
resolvedModel: unknown;
|
|
22
|
+
resolvedTools: unknown[];
|
|
23
|
+
resolvedMiddleware: unknown[];
|
|
24
|
+
resolvedCheckpointer: unknown;
|
|
25
|
+
resolvedStore: unknown;
|
|
26
|
+
passthroughOverride?: Record<string, unknown>;
|
|
27
|
+
systemPromptOverride?: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function assembleDeepAgentRunnable(input: {
|
|
30
|
+
binding: CompiledAgentBinding;
|
|
31
|
+
runtimeAdapterOptions: RuntimeAdapterOptions;
|
|
32
|
+
resolveModel: (model: CompiledModel) => Promise<unknown>;
|
|
33
|
+
resolveTools: (tools: CompiledTool[], binding?: CompiledAgentBinding) => unknown[];
|
|
34
|
+
resolveMiddleware: (binding: CompiledAgentBinding, interruptOn?: Record<string, {
|
|
35
|
+
allowedDecisions: Array<"approve" | "edit" | "reject">;
|
|
36
|
+
}>) => Promise<unknown[]>;
|
|
37
|
+
resolveSubagents: (subagents: CompiledSubAgent[], binding?: CompiledAgentBinding) => Promise<CompiledSubAgent[]>;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
compatibleParams: DeepAgentParams;
|
|
40
|
+
resolvedModel: unknown;
|
|
41
|
+
resolvedTools: unknown[];
|
|
42
|
+
resolvedMiddleware: unknown[];
|
|
43
|
+
resolvedSubagents: CompiledSubAgent[];
|
|
44
|
+
resolvedCheckpointer: unknown;
|
|
45
|
+
resolvedStore: unknown;
|
|
46
|
+
resolvedBackend: unknown;
|
|
47
|
+
resolvedInterruptOn?: Record<string, {
|
|
48
|
+
allowedDecisions: Array<"approve" | "edit" | "reject">;
|
|
49
|
+
}>;
|
|
50
|
+
resolvedSkills: string[];
|
|
51
|
+
}>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MemorySaver } from "@langchain/langgraph";
|
|
2
|
+
import { applyDeepAgentDelegationPromptCompatibility, resolveDeepAgentSkillSourcePaths, } from "../compat/deepagent-compat.js";
|
|
3
|
+
import { compileInterruptOn } from "../tool/interrupt-policy.js";
|
|
4
|
+
import { getBindingDeepAgentParams, getBindingInterruptCompatibilityRules, getBindingLangChainParams, getBindingPrimaryTools, } from "../../support/compiled-binding.js";
|
|
5
|
+
export function resolveRunnableCheckpointer(options, binding) {
|
|
6
|
+
return options.checkpointerResolver ? options.checkpointerResolver(binding) : new MemorySaver();
|
|
7
|
+
}
|
|
8
|
+
export function resolveRunnableInterruptOn(binding) {
|
|
9
|
+
return compileInterruptOn(getBindingPrimaryTools(binding), getBindingInterruptCompatibilityRules(binding));
|
|
10
|
+
}
|
|
11
|
+
export async function assembleLangChainRunnable(input) {
|
|
12
|
+
const langchainParams = getBindingLangChainParams(input.binding);
|
|
13
|
+
if (!langchainParams) {
|
|
14
|
+
throw new Error(`Agent ${input.binding.agent.id} has no langchain params`);
|
|
15
|
+
}
|
|
16
|
+
const interruptOn = resolveRunnableInterruptOn(input.binding);
|
|
17
|
+
return {
|
|
18
|
+
langchainParams,
|
|
19
|
+
interruptOn,
|
|
20
|
+
resolvedModel: await input.resolveModel(langchainParams.model),
|
|
21
|
+
resolvedTools: input.resolveTools(langchainParams.tools, input.binding),
|
|
22
|
+
resolvedMiddleware: await input.resolveMiddleware(input.binding, interruptOn),
|
|
23
|
+
resolvedCheckpointer: resolveRunnableCheckpointer(input.runtimeAdapterOptions, input.binding),
|
|
24
|
+
resolvedStore: input.runtimeAdapterOptions.storeResolver?.(input.binding),
|
|
25
|
+
passthroughOverride: input.passthroughOverride,
|
|
26
|
+
systemPromptOverride: input.systemPromptOverride,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export async function assembleDeepAgentRunnable(input) {
|
|
30
|
+
const deepAgentParams = getBindingDeepAgentParams(input.binding);
|
|
31
|
+
if (!deepAgentParams) {
|
|
32
|
+
throw new Error(`Agent ${input.binding.agent.id} has no runnable params`);
|
|
33
|
+
}
|
|
34
|
+
const compatibleParams = applyDeepAgentDelegationPromptCompatibility(deepAgentParams.model, deepAgentParams);
|
|
35
|
+
return {
|
|
36
|
+
compatibleParams,
|
|
37
|
+
resolvedModel: await input.resolveModel(compatibleParams.model),
|
|
38
|
+
resolvedTools: input.resolveTools(compatibleParams.tools, input.binding),
|
|
39
|
+
resolvedMiddleware: await input.resolveMiddleware(input.binding),
|
|
40
|
+
resolvedSubagents: await input.resolveSubagents(compatibleParams.subagents, input.binding),
|
|
41
|
+
resolvedCheckpointer: resolveRunnableCheckpointer(input.runtimeAdapterOptions, input.binding),
|
|
42
|
+
resolvedStore: input.runtimeAdapterOptions.storeResolver?.(input.binding),
|
|
43
|
+
resolvedBackend: input.runtimeAdapterOptions.backendResolver?.(input.binding),
|
|
44
|
+
resolvedInterruptOn: resolveRunnableInterruptOn(input.binding),
|
|
45
|
+
resolvedSkills: resolveDeepAgentSkillSourcePaths({
|
|
46
|
+
workspaceRoot: input.binding.harnessRuntime.workspaceRoot,
|
|
47
|
+
runRoot: input.binding.harnessRuntime.runRoot,
|
|
48
|
+
ownerId: input.binding.agent.id,
|
|
49
|
+
skillPaths: compatibleParams.skills,
|
|
50
|
+
}) ?? [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CompiledAgentBinding, CompiledTool, MessageContent, TranscriptMessage } from "
|
|
2
|
-
import type { RuntimeStreamChunk } from "
|
|
3
|
-
import type { ToolNameMapping } from "
|
|
1
|
+
import type { CompiledAgentBinding, CompiledTool, MessageContent, TranscriptMessage } from "../../../contracts/types.js";
|
|
2
|
+
import type { RuntimeStreamChunk } from "../../parsing/stream-event-parsing.js";
|
|
3
|
+
import type { ToolNameMapping } from "../tool/tool-name-mapping.js";
|
|
4
4
|
type RunnableLike = {
|
|
5
5
|
stream?: (input: unknown, config?: Record<string, unknown>) => Promise<AsyncIterable<unknown>>;
|
|
6
6
|
streamEvents?: (input: unknown, config?: Record<string, unknown>) => Promise<AsyncIterable<unknown>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { isToolCallParseFailure, sanitizeVisibleText, } from "
|
|
2
|
-
import { buildInvocationRequest } from "
|
|
3
|
-
import { buildRawModelMessages } from "
|
|
4
|
-
import { projectRuntimeStreamEvent, createStreamEventProjectionState } from "
|
|
5
|
-
import { projectTextStreamChunks } from "
|
|
6
|
-
import { computeRemainingTimeoutMs } from "
|
|
1
|
+
import { isToolCallParseFailure, sanitizeVisibleText, } from "../../parsing/output-parsing.js";
|
|
2
|
+
import { buildInvocationRequest } from "../model/invocation-request.js";
|
|
3
|
+
import { buildRawModelMessages } from "../model/message-assembly.js";
|
|
4
|
+
import { projectRuntimeStreamEvent, createStreamEventProjectionState } from "../stream-event-projection.js";
|
|
5
|
+
import { projectTextStreamChunks } from "../stream-text-consumption.js";
|
|
6
|
+
import { computeRemainingTimeoutMs } from "../resilience.js";
|
|
7
7
|
export async function* streamRuntimeExecution(options) {
|
|
8
8
|
const request = buildInvocationRequest(options.binding, options.history, options.input, options.runtimeOptions);
|
|
9
9
|
try {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FilesystemBackend } from "deepagents";
|
|
2
2
|
import type { CompiledAgentBinding, CompiledModel, CompiledSubAgent, DeepAgentParams, RuntimeAdapterOptions } from "../../contracts/types.js";
|
|
3
|
-
import type { ExecutableTool } from "./invoke-runtime.js";
|
|
3
|
+
import type { ExecutableTool } from "./flow/invoke-runtime.js";
|
|
4
4
|
export declare function resolveBuiltinMiddlewareBackend(input: {
|
|
5
5
|
binding: CompiledAgentBinding;
|
|
6
6
|
runtimeAdapterOptions: RuntimeAdapterOptions;
|
|
@@ -4,9 +4,9 @@ import { createAgent, humanInTheLoopMiddleware } from "langchain";
|
|
|
4
4
|
import { createBuiltinMiddlewareTools } from "./tool/builtin-middleware-tools.js";
|
|
5
5
|
import { compileInterruptOn } from "./tool/interrupt-policy.js";
|
|
6
6
|
import { extractToolFallbackContext, extractVisibleOutput } from "../parsing/output-parsing.js";
|
|
7
|
-
import {
|
|
7
|
+
import { isRecord } from "../../utils/object.js";
|
|
8
8
|
import { resolveDeclaredMiddleware } from "./tool/declared-middleware.js";
|
|
9
|
-
import { getBindingDeepAgentParams, getBindingInterruptCompatibilityRules, getBindingLangChainParams, getBindingMiddlewareConfigs, getBindingPrimaryModel, isDeepAgentBinding, isLangChainBinding, } from "../support/compiled-binding.js";
|
|
9
|
+
import { bindingHasLangChainSubagentSupport, bindingHasMiddlewareKind, getBindingDeepAgentParams, getBindingInterruptCompatibilityRules, getBindingLangChainParams, getBindingMiddlewareConfigs, getBindingPrimaryModel, isDeepAgentBinding, isLangChainBinding, } from "../support/compiled-binding.js";
|
|
10
10
|
import { applyDeepAgentDelegationPromptCompatibility, materializeDeepAgentSkillSourcePaths } from "./compat/deepagent-compat.js";
|
|
11
11
|
function buildLangChainContextMiddleware(params) {
|
|
12
12
|
const middleware = [];
|
|
@@ -83,10 +83,7 @@ export async function invokeBuiltinTaskTool(input) {
|
|
|
83
83
|
const resolvedSubagents = await input.resolveSubagents(params.subagents, input.binding);
|
|
84
84
|
const selectedSubagent = resolvedSubagents.find((subagent) => subagent.name === subagentType);
|
|
85
85
|
if (!selectedSubagent) {
|
|
86
|
-
const allowed =
|
|
87
|
-
...resolvedSubagents.map((subagent) => subagent.name),
|
|
88
|
-
...(params.generalPurposeAgent ? ["general-purpose"] : []),
|
|
89
|
-
];
|
|
86
|
+
const allowed = resolvedSubagents.map((subagent) => subagent.name);
|
|
90
87
|
throw new Error(`Error: invoked agent of type ${subagentType}, the only allowed types are ${allowed.map((name) => `\`${name}\``).join(", ")}`);
|
|
91
88
|
}
|
|
92
89
|
const summarizationModel = selectedSubagent.model
|
|
@@ -138,7 +135,7 @@ export async function resolveBuiltinMiddlewareTools(input) {
|
|
|
138
135
|
});
|
|
139
136
|
}
|
|
140
137
|
export async function resolveAutomaticSummarizationMiddleware(input) {
|
|
141
|
-
if (
|
|
138
|
+
if (bindingHasMiddlewareKind(input.binding, "summarization")) {
|
|
142
139
|
return [];
|
|
143
140
|
}
|
|
144
141
|
const primaryModel = getBindingPrimaryModel(input.binding);
|
|
@@ -161,7 +158,7 @@ export async function resolveLangChainAutomaticMiddleware(input) {
|
|
|
161
158
|
compatibleParams,
|
|
162
159
|
resolveFilesystemBackend: input.resolveFilesystemBackend,
|
|
163
160
|
}));
|
|
164
|
-
if (
|
|
161
|
+
if (bindingHasLangChainSubagentSupport(input.binding)) {
|
|
165
162
|
automaticMiddleware.push(createSubAgentMiddleware({
|
|
166
163
|
defaultModel: (await input.resolveModel(compatibleParams.model)),
|
|
167
164
|
defaultTools: input.resolveTools(compatibleParams.tools, input.binding),
|
|
@@ -45,8 +45,6 @@ export function buildDeepAgentRunnableConfig(params) {
|
|
|
45
45
|
name: compatibleParams.name,
|
|
46
46
|
memory: compatibleParams.memory,
|
|
47
47
|
skills: resolvedSkills,
|
|
48
|
-
generalPurposeAgent: compatibleParams.generalPurposeAgent,
|
|
49
|
-
taskDescription: compatibleParams.taskDescription,
|
|
50
48
|
},
|
|
51
49
|
resolved: {
|
|
52
50
|
resolvedModel,
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import type { CompiledAgentBinding } from "../../contracts/types.js";
|
|
2
|
-
export declare function countConfiguredTools(binding: CompiledAgentBinding): number;
|
|
3
|
-
export declare function sleep(ms: number): Promise<void>;
|
|
4
|
-
export declare function hasConfiguredSubagentSupport(binding: CompiledAgentBinding): boolean;
|
|
5
|
-
export declare function hasConfiguredMiddlewareKind(binding: CompiledAgentBinding, kind: string): boolean;
|
|
6
|
-
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
7
|
-
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
8
1
|
export declare function truncateLines(lines: string[], maxChars?: number): string;
|
|
9
2
|
export declare function summarizeBuiltinWriteTodosArgs(args: Record<string, unknown>): {
|
|
10
3
|
total: number;
|
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isRecord as isRecordValue } from "../../utils/object.js";
|
|
3
|
-
export function countConfiguredTools(binding) {
|
|
4
|
-
return getBindingToolCount(binding);
|
|
5
|
-
}
|
|
6
|
-
export function sleep(ms) {
|
|
7
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
-
}
|
|
9
|
-
export function hasConfiguredSubagentSupport(binding) {
|
|
10
|
-
return bindingHasLangChainSubagentSupport(binding);
|
|
11
|
-
}
|
|
12
|
-
export function hasConfiguredMiddlewareKind(binding, kind) {
|
|
13
|
-
return bindingHasMiddlewareKind(binding, kind);
|
|
14
|
-
}
|
|
15
|
-
export function isRecord(value) {
|
|
16
|
-
return isRecordValue(value);
|
|
17
|
-
}
|
|
18
|
-
export function isObject(value) {
|
|
19
|
-
return isRecord(value);
|
|
20
|
-
}
|
|
1
|
+
import { isRecord } from "../../utils/object.js";
|
|
21
2
|
export function truncateLines(lines, maxChars = 12_000) {
|
|
22
3
|
const joined = lines.join("\n");
|
|
23
4
|
if (joined.length <= maxChars) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
1
2
|
import { extractVisibleOutput, isToolCallParseFailure, STRICT_TOOL_JSON_INSTRUCTION } from "../parsing/output-parsing.js";
|
|
2
3
|
import { readStreamDelta } from "../parsing/stream-event-parsing.js";
|
|
3
4
|
import { computeRemainingTimeoutMs, isRetryableProviderError, resolveProviderRetryPolicy } from "./resilience.js";
|
|
4
|
-
import { sleep } from "./runtime-adapter-support.js";
|
|
5
5
|
import { getBindingDeepAgentParams, getBindingLangChainParams, isDeepAgentBinding, isLangChainBinding, } from "../support/compiled-binding.js";
|
|
6
6
|
export class RuntimeOperationTimeoutError extends Error {
|
|
7
7
|
operation;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { isSandboxBackend } from "deepagents";
|
|
3
|
-
import {
|
|
3
|
+
import { isRecord } from "../../../utils/object.js";
|
|
4
|
+
import { summarizeBuiltinWriteTodosArgs, truncateLines } from "../runtime-adapter-support.js";
|
|
4
5
|
export async function createBuiltinMiddlewareTools(backend, options) {
|
|
5
6
|
const tools = new Map();
|
|
6
7
|
tools.set("write_todos", {
|
|
@@ -9,7 +10,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
9
10
|
todos: z.array(z.object({}).passthrough()).optional(),
|
|
10
11
|
}).passthrough(),
|
|
11
12
|
invoke: async (input) => {
|
|
12
|
-
const args =
|
|
13
|
+
const args = isRecord(input) ? input : {};
|
|
13
14
|
const summary = summarizeBuiltinWriteTodosArgs(args);
|
|
14
15
|
return {
|
|
15
16
|
ok: true,
|
|
@@ -23,7 +24,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
23
24
|
name: "ls",
|
|
24
25
|
schema: z.object({ path: z.string().optional().default("/") }).passthrough(),
|
|
25
26
|
invoke: async (input) => {
|
|
26
|
-
const targetPath =
|
|
27
|
+
const targetPath = isRecord(input) && typeof input.path === "string" ? input.path : "/";
|
|
27
28
|
const infos = (await Promise.resolve(backend.lsInfo?.(targetPath))) ?? [];
|
|
28
29
|
if (infos.length === 0) {
|
|
29
30
|
return `No files found in ${targetPath}`;
|
|
@@ -39,7 +40,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
39
40
|
limit: z.number().optional(),
|
|
40
41
|
}).passthrough(),
|
|
41
42
|
invoke: async (input) => {
|
|
42
|
-
const typed =
|
|
43
|
+
const typed = isRecord(input) ? input : {};
|
|
43
44
|
const filePath = typeof typed.file_path === "string" ? typed.file_path : "";
|
|
44
45
|
const offset = typeof typed.offset === "number" ? typed.offset : 0;
|
|
45
46
|
const limit = typeof typed.limit === "number" ? typed.limit : 500;
|
|
@@ -50,7 +51,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
50
51
|
name: "write_file",
|
|
51
52
|
schema: z.object({ file_path: z.string(), content: z.string().optional() }).passthrough(),
|
|
52
53
|
invoke: async (input) => {
|
|
53
|
-
const typed =
|
|
54
|
+
const typed = isRecord(input) ? input : {};
|
|
54
55
|
const result = await Promise.resolve(backend.write?.(typeof typed.file_path === "string" ? typed.file_path : "", typeof typed.content === "string" ? typed.content : ""));
|
|
55
56
|
return result?.error ?? `Successfully wrote to '${result?.path ?? (typed.file_path ?? "")}'`;
|
|
56
57
|
},
|
|
@@ -64,7 +65,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
64
65
|
replace_all: z.boolean().optional(),
|
|
65
66
|
}).passthrough(),
|
|
66
67
|
invoke: async (input) => {
|
|
67
|
-
const typed =
|
|
68
|
+
const typed = isRecord(input) ? input : {};
|
|
68
69
|
const result = await Promise.resolve(backend.edit?.(typeof typed.file_path === "string" ? typed.file_path : "", typeof typed.old_string === "string" ? typed.old_string : "", typeof typed.new_string === "string" ? typed.new_string : "", typed.replace_all === true));
|
|
69
70
|
return result?.error ?? `Successfully replaced ${result?.occurrences ?? 0} occurrence(s) in '${result?.path ?? (typed.file_path ?? "")}'`;
|
|
70
71
|
},
|
|
@@ -73,7 +74,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
73
74
|
name: "glob",
|
|
74
75
|
schema: z.object({ pattern: z.string(), path: z.string().optional().default("/") }).passthrough(),
|
|
75
76
|
invoke: async (input) => {
|
|
76
|
-
const typed =
|
|
77
|
+
const typed = isRecord(input) ? input : {};
|
|
77
78
|
const pattern = typeof typed.pattern === "string" ? typed.pattern : "";
|
|
78
79
|
const targetPath = typeof typed.path === "string" ? typed.path : "/";
|
|
79
80
|
const infos = (await Promise.resolve(backend.globInfo?.(pattern, targetPath))) ?? [];
|
|
@@ -91,7 +92,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
91
92
|
glob: z.string().nullable().optional(),
|
|
92
93
|
}).passthrough(),
|
|
93
94
|
invoke: async (input) => {
|
|
94
|
-
const typed =
|
|
95
|
+
const typed = isRecord(input) ? input : {};
|
|
95
96
|
const result = await Promise.resolve(backend.grepRaw?.(typeof typed.pattern === "string" ? typed.pattern : "", typeof typed.path === "string" ? typed.path : "/", typeof typed.glob === "string" ? typed.glob : null));
|
|
96
97
|
if (typeof result === "string") {
|
|
97
98
|
return result;
|
|
@@ -118,7 +119,7 @@ export async function createBuiltinMiddlewareTools(backend, options) {
|
|
|
118
119
|
if (!isSandboxBackend(backend) || typeof backend.execute !== "function") {
|
|
119
120
|
return "Error: Execution not available. This agent's backend does not support command execution (SandboxBackendProtocol).";
|
|
120
121
|
}
|
|
121
|
-
const typed =
|
|
122
|
+
const typed = isRecord(input) ? input : {};
|
|
122
123
|
const result = await Promise.resolve(backend.execute(typeof typed.command === "string" ? typed.command : ""));
|
|
123
124
|
const parts = [result.output];
|
|
124
125
|
if (result.exitCode !== null) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CompiledAgentBinding, CompiledTool } from "../../contracts/types.js";
|
|
2
2
|
import { type ToolNameMapping } from "./tool/tool-name-mapping.js";
|
|
3
|
-
import type { ExecutableTool } from "./invoke-runtime.js";
|
|
3
|
+
import type { ExecutableTool } from "./flow/invoke-runtime.js";
|
|
4
4
|
export declare function resolveAdapterTools(input: {
|
|
5
5
|
tools: Array<CompiledTool>;
|
|
6
6
|
binding?: CompiledAgentBinding;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CompiledAgentBinding, MessageContent, RunResult, RuntimeAdapterOptions, TranscriptMessage } from "../contracts/types.js";
|
|
2
2
|
import { type RuntimeStreamChunk } from "./parsing/stream-event-parsing.js";
|
|
3
3
|
import { RuntimeOperationTimeoutError } from "./adapter/runtime-shell.js";
|
|
4
|
-
export { applyDeepAgentDelegationPromptCompatibility, materializeDeepAgentSkillSourcePaths, relativizeDeepAgentSkillSourcePaths, shouldRelaxDeepAgentDelegationPrompt, } from "./adapter/compat/deepagent-compat.js";
|
|
4
|
+
export { applyDeepAgentDelegationPromptCompatibility, materializeDeepAgentSkillSourcePaths, resolveDeepAgentSkillSourcePaths, relativizeDeepAgentSkillSourcePaths, shouldRelaxDeepAgentDelegationPrompt, } from "./adapter/compat/deepagent-compat.js";
|
|
5
5
|
export { buildAuthOmittingFetch, normalizeOpenAICompatibleInit } from "./adapter/compat/openai-compatible.js";
|
|
6
6
|
export { buildToolNameMapping, createModelFacingToolNameCandidates, createModelFacingToolNameLookupCandidates, resolveModelFacingToolName, sanitizeToolNameForModel, } from "./adapter/tool/tool-name-mapping.js";
|
|
7
7
|
export { computeRemainingTimeoutMs, isRetryableProviderError, resolveBindingTimeout, resolveProviderRetryPolicy, resolveStreamIdleTimeout, resolveTimeoutMs, } from "./adapter/resilience.js";
|