@librechat/agents 3.8.6 → 3.8.8
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/dist/cjs/main.cjs +1 -0
- package/dist/cjs/tools/BashExecutor.cjs +83 -28
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +50 -7
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +5 -2
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs +11 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +54 -8
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +52 -20
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/toolBatchReplay.cjs +3 -1
- package/dist/cjs/tools/toolBatchReplay.cjs.map +1 -1
- package/dist/cjs/tools/workspaceIdentity.cjs +12 -0
- package/dist/cjs/tools/workspaceIdentity.cjs.map +1 -0
- package/dist/esm/main.mjs +2 -2
- package/dist/esm/tools/BashExecutor.mjs +85 -30
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +51 -9
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +5 -2
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeSessionFileSummary.mjs +11 -2
- package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +55 -9
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +52 -20
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/toolBatchReplay.mjs +3 -1
- package/dist/esm/tools/toolBatchReplay.mjs.map +1 -1
- package/dist/esm/tools/workspaceIdentity.mjs +12 -0
- package/dist/esm/tools/workspaceIdentity.mjs.map +1 -0
- package/dist/types/tools/BashExecutor.d.ts +2 -0
- package/dist/types/tools/BashProgrammaticToolCalling.d.ts +1 -0
- package/dist/types/tools/CodeExecutor.d.ts +1 -1
- package/dist/types/tools/CodeSessionFileSummary.d.ts +3 -0
- package/dist/types/tools/ProgrammaticToolCalling.d.ts +2 -2
- package/dist/types/tools/ToolNode.d.ts +2 -0
- package/dist/types/tools/toolBatchReplay.d.ts +2 -0
- package/dist/types/tools/workspaceIdentity.d.ts +1 -0
- package/dist/types/types/tools.d.ts +20 -2
- package/package.json +2 -2
- package/src/tools/BashExecutor.ts +156 -40
- package/src/tools/BashProgrammaticToolCalling.ts +90 -10
- package/src/tools/CodeExecutor.ts +12 -2
- package/src/tools/CodeSessionFileSummary.ts +25 -1
- package/src/tools/ProgrammaticToolCalling.ts +77 -6
- package/src/tools/ToolNode.ts +152 -26
- package/src/tools/toolBatchReplay.ts +23 -1
- package/src/tools/workspaceIdentity.ts +15 -0
- package/src/types/tools.ts +23 -2
package/dist/cjs/main.cjs
CHANGED
|
@@ -730,6 +730,7 @@ exports.partitionAndMarkAnthropicToolCache = require_anthropicToolCache.partitio
|
|
|
730
730
|
exports.performLocalSearch = require_ToolSearch.performLocalSearch;
|
|
731
731
|
exports.preFlightTruncateToolCallInputs = require_prune.preFlightTruncateToolCallInputs;
|
|
732
732
|
exports.preFlightTruncateToolResults = require_prune.preFlightTruncateToolResults;
|
|
733
|
+
exports.prepareBashProgrammaticCode = require_BashProgrammaticToolCalling.prepareBashProgrammaticCode;
|
|
733
734
|
exports.prepareProviderRequest = require_prepareProviderRequest.prepareProviderRequest;
|
|
734
735
|
exports.probeLocalCommandAvailability = require_LocalExecutionEngine.probeLocalCommandAvailability;
|
|
735
736
|
exports.projectAgentContextUsage = require_projection.projectAgentContextUsage;
|
|
@@ -7,6 +7,9 @@ const require_ArtifactDelivery = require("./ArtifactDelivery.cjs");
|
|
|
7
7
|
const require_diagnostics = require("./diagnostics.cjs");
|
|
8
8
|
const require_CodeSessionFileSummary = require("./CodeSessionFileSummary.cjs");
|
|
9
9
|
const require_CodeExecutor = require("./CodeExecutor.cjs");
|
|
10
|
+
const require_ProgrammaticToolCalling = require("./ProgrammaticToolCalling.cjs");
|
|
11
|
+
const require_workspaceIdentity = require("./workspaceIdentity.cjs");
|
|
12
|
+
const require_BashProgrammaticToolCalling = require("./BashProgrammaticToolCalling.cjs");
|
|
10
13
|
let _langchain_core_tools = require("@langchain/core/tools");
|
|
11
14
|
let dotenv = require("dotenv");
|
|
12
15
|
let node_fetch = require("node-fetch");
|
|
@@ -60,6 +63,16 @@ Usage:
|
|
|
60
63
|
- ${require_CodeExecutor.BASH_SHELL_GUIDANCE}
|
|
61
64
|
- NEVER use this tool to execute malicious commands.
|
|
62
65
|
`.trim();
|
|
66
|
+
const AttachedWorkspaceBashExecutionToolDescription = `
|
|
67
|
+
Runs bash commands in the selected persistent project through an isolated sandbox process.
|
|
68
|
+
|
|
69
|
+
Usage:
|
|
70
|
+
- Project file changes persist between calls; shell variables, background processes, and execution-private temporary files do not.
|
|
71
|
+
- Injected files and generated artifacts use \${LIBRECHAT_CODE_DATA_DIR:-/mnt/data}; write durable files to the project root.
|
|
72
|
+
- Generated artifacts are automatically delivered; **DO NOT** provide download links.
|
|
73
|
+
- ${require_CodeExecutor.BASH_SHELL_GUIDANCE}
|
|
74
|
+
- NEVER use this tool to execute malicious commands.
|
|
75
|
+
`.trim();
|
|
63
76
|
const BashToolOutputReferencesGuide = `
|
|
64
77
|
Referencing previous tool outputs:
|
|
65
78
|
- Every successful tool result is tagged with a reference key of the form \`tool<idx>turn<turn>\` (e.g., \`tool0turn0\`). The key appears either as a \`[ref: tool0turn0]\` prefix line or, when the output is a JSON object, as a \`_ref\` field on the object.
|
|
@@ -71,15 +84,23 @@ Referencing previous tool outputs:
|
|
|
71
84
|
- Unknown reference keys are left in place and surfaced as \`[unresolved refs: …]\` after the output.
|
|
72
85
|
`.trim();
|
|
73
86
|
function buildBashExecutionToolDescription(options) {
|
|
74
|
-
|
|
87
|
+
let base = BashExecutionToolDescription;
|
|
88
|
+
if (options?.attachedWorkspace === true) base = AttachedWorkspaceBashExecutionToolDescription;
|
|
89
|
+
else if (options?.statefulSessions === true) base = StatefulBashExecutionToolDescription;
|
|
75
90
|
if (options?.enableToolOutputReferences === true) return `${base}\n\n${BashToolOutputReferencesGuide}`;
|
|
76
91
|
return base;
|
|
77
92
|
}
|
|
78
93
|
const STATELESS_BASH_PARAM_NOTE = "The environment is stateless; variables and state don't persist between executions.";
|
|
79
94
|
const STATEFUL_BASH_PARAM_NOTE = "Files written to /mnt/data persist between calls on the same warm machine. Each call runs in a fresh sandbox: shell variables, cwd, /tmp, and background processes do NOT survive the call. Only /mnt/data is durable.";
|
|
95
|
+
const ATTACHED_BASH_PARAM_NOTE = "Commands start in the selected persistent project. Project file changes persist, but shell variables, background processes, and execution-private temporary files do not.";
|
|
96
|
+
const ATTACHED_BASH_ARTIFACT_PATH_GUIDANCE = "Injected files and generated artifacts use `${LIBRECHAT_CODE_DATA_DIR:-/mnt/data}` for this execution only. Write anything needed later into the selected project.";
|
|
97
|
+
const ATTACHED_BASH_TMP_REMINDER = "Note: /tmp files are same-call scratch only and were not persisted; write files needed later into the selected project.";
|
|
80
98
|
function buildBashExecutionToolSchema(opts) {
|
|
81
|
-
|
|
82
|
-
|
|
99
|
+
let note = STATELESS_BASH_PARAM_NOTE;
|
|
100
|
+
if (opts?.attachedWorkspace === true) note = ATTACHED_BASH_PARAM_NOTE;
|
|
101
|
+
else if (opts?.statefulSessions === true) note = STATEFUL_BASH_PARAM_NOTE;
|
|
102
|
+
let commandDescription = BashExecutionToolSchema.properties.command.description.replace(STATELESS_BASH_PARAM_NOTE, note);
|
|
103
|
+
if (opts?.attachedWorkspace === true) commandDescription = commandDescription.replace("- Prior /mnt/data files are available and can be modified in place.\n", "").replace(require_CodeExecutor.CODE_ARTIFACT_PATH_GUIDANCE, ATTACHED_BASH_ARTIFACT_PATH_GUIDANCE);
|
|
83
104
|
return {
|
|
84
105
|
...BashExecutionToolSchema,
|
|
85
106
|
properties: {
|
|
@@ -92,62 +113,90 @@ function buildBashExecutionToolSchema(opts) {
|
|
|
92
113
|
};
|
|
93
114
|
}
|
|
94
115
|
const BashExecutionToolName = "bash_tool";
|
|
116
|
+
function quoteBashArgument(value) {
|
|
117
|
+
return `'${value.replace(/'/g, "'\"'\"'")}'`;
|
|
118
|
+
}
|
|
119
|
+
function commandWithArguments(command, args) {
|
|
120
|
+
if (args == null || args.length === 0) return command;
|
|
121
|
+
return `bash -c ${quoteBashArgument(command)} -- ${args.map(quoteBashArgument).join(" ")}`;
|
|
122
|
+
}
|
|
95
123
|
const BashExecutionToolDefinition = {
|
|
96
124
|
name: BashExecutionToolName,
|
|
97
125
|
description: BashExecutionToolDescription,
|
|
98
126
|
schema: BashExecutionToolSchema
|
|
99
127
|
};
|
|
100
128
|
function createBashExecutionTool(params = {}) {
|
|
101
|
-
const
|
|
129
|
+
const workspaceId = params?.workspaceId?.trim();
|
|
130
|
+
const hasWorkspace = workspaceId != null && workspaceId !== "";
|
|
131
|
+
const workspaceInstanceId = require_workspaceIdentity.resolveAttachedWorkspaceInstanceId(params?.workspaceInstanceId, hasWorkspace);
|
|
132
|
+
if (hasWorkspace && !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(workspaceId)) throw new Error("Invalid attached workspace identifier");
|
|
133
|
+
const execEndpoint = require_CodeExecutor.buildCodeApiEndpoint(params?.baseUrl ?? require_CodeExecutor.getCodeBaseURL(), hasWorkspace ? "exec/programmatic" : "exec");
|
|
102
134
|
return (0, _langchain_core_tools.tool)(async (rawInput, config) => {
|
|
103
|
-
const { authHeaders, baseUrl: _baseUrl, executionProfile, runtimeSessionHint, statefulSessions, ...executionParams } = params ?? {};
|
|
104
|
-
const { command, intent: _ignoredIntent, runtime_session_hint: _ignoredModelHint, ...rest } = rawInput;
|
|
135
|
+
const { authHeaders, baseUrl: _baseUrl, executionProfile, runtimeSessionHint, statefulSessions, workspaceId: _workspaceId, workspaceInstanceId: _workspaceInstanceId, ...executionParams } = params ?? {};
|
|
136
|
+
const { command: rawCommand, intent: _ignoredIntent, runtime_session_hint: _ignoredModelHint, workspace_instance_id: _ignoredModelWorkspaceInstanceId, args, ...rest } = rawInput;
|
|
137
|
+
const command = hasWorkspace ? commandWithArguments(rawCommand, args) : rawCommand;
|
|
105
138
|
const { session_id, _injected_files, _runtime_session_hint } = config.toolCall ?? {};
|
|
106
139
|
const postData = {
|
|
107
140
|
lang: "bash",
|
|
108
|
-
code: command,
|
|
141
|
+
code: hasWorkspace ? require_BashProgrammaticToolCalling.prepareBashProgrammaticCode(command) : command,
|
|
142
|
+
...hasWorkspace ? { tools: [] } : {},
|
|
143
|
+
...!hasWorkspace && args != null ? { args } : {},
|
|
109
144
|
...rest,
|
|
110
|
-
...executionParams
|
|
145
|
+
...executionParams,
|
|
146
|
+
...workspaceInstanceId != null && workspaceInstanceId !== "" ? { workspace_instance_id: workspaceInstanceId } : {}
|
|
111
147
|
};
|
|
112
148
|
const effectiveRuntimeSessionHint = require_CodeExecutor.selectRuntimeSessionHint(runtimeSessionHint, _runtime_session_hint);
|
|
113
149
|
if (statefulSessions === true && executionProfile !== "default" && typeof effectiveRuntimeSessionHint === "string" && effectiveRuntimeSessionHint !== "") postData.runtime_session_hint = effectiveRuntimeSessionHint;
|
|
114
150
|
if (_injected_files && _injected_files.length > 0) postData.files = _injected_files;
|
|
115
151
|
else if (session_id != null && session_id.length > 0 && !Array.isArray(postData.files)) require_diagnostics.logCodeApiDiagnostic("BashExecutor", "debug", "session carried no injected files; exec will run without input files", { files: "none" });
|
|
116
152
|
try {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
153
|
+
const resolvedAuthHeaders = await require_CodeExecutor.resolveCodeApiAuthHeaders(authHeaders);
|
|
154
|
+
let result;
|
|
155
|
+
if (hasWorkspace) result = await require_ProgrammaticToolCalling.makeRequest(execEndpoint, postData, void 0, {
|
|
156
|
+
...resolvedAuthHeaders,
|
|
157
|
+
"X-LibreChat-Code-Workspace-ID": workspaceId
|
|
158
|
+
}, executionProfile, config.signal);
|
|
159
|
+
else {
|
|
160
|
+
const fetchOptions = {
|
|
161
|
+
method: "POST",
|
|
162
|
+
headers: {
|
|
163
|
+
"Content-Type": "application/json",
|
|
164
|
+
"User-Agent": "LibreChat/1.0",
|
|
165
|
+
...require_CodeExecutor.addCodeApiExecutionProfileHeader(resolvedAuthHeaders, executionProfile)
|
|
166
|
+
},
|
|
167
|
+
body: JSON.stringify(postData),
|
|
168
|
+
signal: config.signal
|
|
169
|
+
};
|
|
170
|
+
const proxyAgent = require_proxy.resolveFetchProxyAgent(execEndpoint);
|
|
171
|
+
if (proxyAgent != null) fetchOptions.agent = proxyAgent;
|
|
172
|
+
const response = await (0, node_fetch.default)(execEndpoint, fetchOptions);
|
|
173
|
+
if (!response.ok) throw new require_CodeExecutor.CodeApiRequestError(await require_CodeExecutor.buildCodeApiHttpErrorMessage("POST", execEndpoint, response, { profile: executionProfile }));
|
|
174
|
+
result = await response.json();
|
|
175
|
+
}
|
|
176
|
+
if (hasWorkspace && result.status !== "completed") throw new require_CodeExecutor.CodeApiRequestError(require_CodeExecutor.buildCodeApiExecutionErrorMessage(result));
|
|
131
177
|
let formattedOutput = "";
|
|
132
|
-
if (result.stdout) formattedOutput += `stdout:\n${result.stdout}\n`;
|
|
178
|
+
if (typeof result.stdout === "string" && result.stdout.length > 0) formattedOutput += `stdout:\n${result.stdout}\n`;
|
|
133
179
|
else formattedOutput += require_CodeExecutor.emptyOutputMessage;
|
|
134
|
-
if (result.stderr) formattedOutput += `stderr:\n${result.stderr}\n`;
|
|
135
|
-
const outputWithReminder = require_CodeExecutor.appendTmpScratchReminder(formattedOutput, command);
|
|
180
|
+
if (typeof result.stderr === "string" && result.stderr.length > 0) formattedOutput += `stderr:\n${result.stderr}\n`;
|
|
181
|
+
const outputWithReminder = require_CodeExecutor.appendTmpScratchReminder(formattedOutput, command, hasWorkspace ? ATTACHED_BASH_TMP_REMINDER : void 0);
|
|
136
182
|
const artifactDelivery = require_ArtifactDelivery.normalizeArtifactDeliveryFailure(result.artifact_delivery);
|
|
137
183
|
const outputWithDeliveryWarning = require_ArtifactDelivery.appendArtifactDeliveryWarning(outputWithReminder, artifactDelivery);
|
|
138
184
|
const hasFiles = result.files != null && result.files.length > 0;
|
|
185
|
+
const deletionEcho = result.deleted_files != null ? { deleted_files: result.deleted_files } : {};
|
|
139
186
|
const runtimeEcho = result.runtime_session_id != null ? {
|
|
140
187
|
runtime_session_id: result.runtime_session_id,
|
|
141
188
|
runtime_status: result.runtime_status
|
|
142
189
|
} : {};
|
|
143
|
-
return [require_CodeSessionFileSummary.appendCodeSessionFileSummary(outputWithDeliveryWarning, result.files), hasFiles ? {
|
|
190
|
+
return [hasWorkspace ? require_CodeSessionFileSummary.appendExecutionArtifactFileSummary(outputWithDeliveryWarning, result.files) : require_CodeSessionFileSummary.appendCodeSessionFileSummary(outputWithDeliveryWarning, result.files), hasFiles ? {
|
|
144
191
|
session_id: result.session_id,
|
|
145
192
|
files: result.files,
|
|
146
193
|
...artifactDelivery != null ? { artifact_delivery: artifactDelivery } : {},
|
|
194
|
+
...deletionEcho,
|
|
147
195
|
...runtimeEcho
|
|
148
196
|
} : {
|
|
149
197
|
session_id: result.session_id,
|
|
150
198
|
...artifactDelivery != null ? { artifact_delivery: artifactDelivery } : {},
|
|
199
|
+
...deletionEcho,
|
|
151
200
|
...runtimeEcho
|
|
152
201
|
}];
|
|
153
202
|
} catch (error) {
|
|
@@ -155,8 +204,14 @@ function createBashExecutionTool(params = {}) {
|
|
|
155
204
|
}
|
|
156
205
|
}, {
|
|
157
206
|
name: BashExecutionToolName,
|
|
158
|
-
description: buildBashExecutionToolDescription({
|
|
159
|
-
|
|
207
|
+
description: buildBashExecutionToolDescription({
|
|
208
|
+
statefulSessions: params?.statefulSessions,
|
|
209
|
+
attachedWorkspace: hasWorkspace
|
|
210
|
+
}),
|
|
211
|
+
schema: buildBashExecutionToolSchema({
|
|
212
|
+
statefulSessions: params?.statefulSessions,
|
|
213
|
+
attachedWorkspace: hasWorkspace
|
|
214
|
+
}),
|
|
160
215
|
responseFormat: "content_and_artifact"
|
|
161
216
|
});
|
|
162
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BashExecutor.cjs","names":["INTENT_PROPERTY","CODE_ARTIFACT_PATH_GUIDANCE","BASH_SHELL_GUIDANCE","buildCodeApiEndpoint","getCodeBaseURL","
|
|
1
|
+
{"version":3,"file":"BashExecutor.cjs","names":["INTENT_PROPERTY","CODE_ARTIFACT_PATH_GUIDANCE","BASH_SHELL_GUIDANCE","resolveAttachedWorkspaceInstanceId","buildCodeApiEndpoint","getCodeBaseURL","prepareBashProgrammaticCode","selectRuntimeSessionHint","resolveCodeApiAuthHeaders","makeRequest","addCodeApiExecutionProfileHeader","resolveFetchProxyAgent","CodeApiRequestError","buildCodeApiHttpErrorMessage","buildCodeApiExecutionErrorMessage","emptyOutputMessage","appendTmpScratchReminder","normalizeArtifactDeliveryFailure","appendArtifactDeliveryWarning","appendExecutionArtifactFileSummary","appendCodeSessionFileSummary","appendFailedExecutionFileReminder","normalizeCodeApiRequestError"],"sources":["../../../src/tools/BashExecutor.ts"],"mappings":"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"}
|
|
@@ -6,12 +6,16 @@ const require_CodeExecutor = require("./CodeExecutor.cjs");
|
|
|
6
6
|
const require_ProgrammaticCallerPolicy = require("./ProgrammaticCallerPolicy.cjs");
|
|
7
7
|
const require_ptcTimeout = require("./ptcTimeout.cjs");
|
|
8
8
|
const require_ProgrammaticToolCalling = require("./ProgrammaticToolCalling.cjs");
|
|
9
|
+
const require_workspaceIdentity = require("./workspaceIdentity.cjs");
|
|
9
10
|
let _langchain_core_tools = require("@langchain/core/tools");
|
|
10
11
|
//#region src/tools/BashProgrammaticToolCalling.ts
|
|
11
12
|
(0, require("dotenv").config)();
|
|
12
13
|
const DEFAULT_MAX_ROUND_TRIPS = 20;
|
|
13
14
|
const DEFAULT_RUN_TIMEOUT_MS = require_ptcTimeout.resolveCodeApiRunTimeoutMs();
|
|
14
15
|
const BASH_LAST_BACKGROUND_PID_GUARD = ": &\nwait \"$!\"";
|
|
16
|
+
const CODE_API_WORKSPACE_HEADER = "X-LibreChat-Code-Workspace-ID";
|
|
17
|
+
const ATTACHED_BASH_DATA_DIRECTORY = "\"${LIBRECHAT_CODE_DATA_DIR:-/mnt/data}\"";
|
|
18
|
+
const ATTACHED_BASH_ARTIFACT_PATH_GUIDANCE = `Use ${ATTACHED_BASH_DATA_DIRECTORY} for injected files and generated artifacts. The directory is execution-scoped; the selected workspace is the persistent project root.`;
|
|
15
19
|
const BASH_RESERVED = new Set([
|
|
16
20
|
"if",
|
|
17
21
|
"then",
|
|
@@ -41,6 +45,10 @@ const STATELESS_WARNING = `CRITICAL - STATELESS EXECUTION:
|
|
|
41
45
|
Each call is a fresh bash shell. Variables and state do NOT persist between calls.
|
|
42
46
|
You MUST complete your entire workflow in ONE code block.
|
|
43
47
|
DO NOT split work across multiple calls expecting to reuse variables.`;
|
|
48
|
+
const ATTACHED_WORKSPACE_WARNING = `ATTACHED WORKSPACE EXECUTION:
|
|
49
|
+
- Commands start in the selected persistent workspace; project file changes persist between calls.
|
|
50
|
+
- Each sandbox run is a fresh process, so shell variables, background processes, and temporary execution data do not persist.
|
|
51
|
+
- Injected files and generated artifacts use \${LIBRECHAT_CODE_DATA_DIR:-/mnt/data}; do not copy them into the project unless the task requires it.`;
|
|
44
52
|
const CORE_RULES = `Rules:
|
|
45
53
|
- One call: state does not persist
|
|
46
54
|
- Tools are pre-defined as bash functions—DO NOT redefine them
|
|
@@ -63,6 +71,28 @@ Example (Parallel calls):
|
|
|
63
71
|
wait
|
|
64
72
|
echo "SF: $(jq -r . /mnt/data/sf.json)"
|
|
65
73
|
echo "NY: $(jq -r . /mnt/data/ny.json)"`;
|
|
74
|
+
const ATTACHED_CORE_RULES = `Rules:
|
|
75
|
+
- One call: process state does not persist; project files do
|
|
76
|
+
- Tools are pre-defined as bash functions—DO NOT redefine them
|
|
77
|
+
- Each tool function accepts a JSON string argument
|
|
78
|
+
- Resolve tool calls into variables before changing project files; do not redirect a tool call directly into the project
|
|
79
|
+
- Set data_dir=${ATTACHED_BASH_DATA_DIRECTORY}; save generated artifacts there, and write durable project files relative to the working directory
|
|
80
|
+
- Tool stdout is normalized to one compact JSON value when possible; parse saved stdout once, then use fromjson? // . only for JSON-string fields
|
|
81
|
+
- Only echo/printf output returns to the model
|
|
82
|
+
- ${ATTACHED_BASH_ARTIFACT_PATH_GUIDANCE}
|
|
83
|
+
- ${require_CodeExecutor.BASH_SHELL_GUIDANCE}
|
|
84
|
+
- timeout caps one sandbox run/replay iteration, not the total multi-round-trip workflow`;
|
|
85
|
+
const ATTACHED_EXAMPLES = `Example (Complete workflow in one call):
|
|
86
|
+
data=$(query_database '{"sql": "SELECT * FROM users"}')
|
|
87
|
+
echo "$data" | jq '.[] | .name'
|
|
88
|
+
|
|
89
|
+
Example (Parallel calls):
|
|
90
|
+
data_dir=${ATTACHED_BASH_DATA_DIRECTORY}
|
|
91
|
+
{ sf=$(web_search '{"query": "SF weather"}'); printf '%s\n' "$sf" > "$data_dir/sf.json"; } &
|
|
92
|
+
{ ny=$(web_search '{"query": "NY weather"}'); printf '%s\n' "$ny" > "$data_dir/ny.json"; } &
|
|
93
|
+
wait
|
|
94
|
+
echo "SF: $(jq -r . "$data_dir/sf.json")"
|
|
95
|
+
echo "NY: $(jq -r . "$data_dir/ny.json")"`;
|
|
66
96
|
const CODE_PARAM_DESCRIPTION = `Bash code that calls tools programmatically. Tools are available as bash functions.
|
|
67
97
|
|
|
68
98
|
${STATELESS_WARNING}
|
|
@@ -174,7 +204,18 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
174
204
|
const maxRunTimeoutMs = require_ptcTimeout.resolveCodeApiRunTimeoutMs(initParams.runTimeoutMs);
|
|
175
205
|
const proxy = initParams.proxy ?? process.env.PROXY;
|
|
176
206
|
const debug = initParams.debug ?? process.env.BASH_PTC_DEBUG === "true";
|
|
207
|
+
const workspaceId = initParams.workspaceId?.trim();
|
|
208
|
+
const hasWorkspace = workspaceId != null && workspaceId !== "";
|
|
209
|
+
if (hasWorkspace && !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(workspaceId)) throw new Error("Invalid attached workspace identifier");
|
|
210
|
+
const workspaceInstanceId = require_workspaceIdentity.resolveAttachedWorkspaceInstanceId(initParams.workspaceInstanceId, hasWorkspace);
|
|
211
|
+
const requestAuthHeaders = hasWorkspace ? async () => ({
|
|
212
|
+
...await require_CodeExecutor.resolveCodeApiAuthHeaders(initParams.authHeaders),
|
|
213
|
+
[CODE_API_WORKSPACE_HEADER]: workspaceId
|
|
214
|
+
}) : initParams.authHeaders ?? {};
|
|
177
215
|
const EXEC_ENDPOINT = require_CodeExecutor.buildCodeApiEndpoint(baseUrl, "exec/programmatic");
|
|
216
|
+
const description = hasWorkspace ? BashProgrammaticToolCallingDescription.replace(STATELESS_WARNING, ATTACHED_WORKSPACE_WARNING).replace(CORE_RULES, ATTACHED_CORE_RULES).replace(EXAMPLES, ATTACHED_EXAMPLES) : BashProgrammaticToolCallingDescription;
|
|
217
|
+
const schema = createBashProgrammaticToolCallingSchema(maxRunTimeoutMs);
|
|
218
|
+
if (hasWorkspace) schema.properties.code.description = CODE_PARAM_DESCRIPTION.replace(STATELESS_WARNING, ATTACHED_WORKSPACE_WARNING).replace(CORE_RULES, ATTACHED_CORE_RULES).replace(EXAMPLES, ATTACHED_EXAMPLES);
|
|
178
219
|
return (0, _langchain_core_tools.tool)(async (rawParams, config) => {
|
|
179
220
|
const params = rawParams;
|
|
180
221
|
const { code } = params;
|
|
@@ -205,7 +246,7 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
205
246
|
else if (session_id != null && session_id.length > 0) require_diagnostics.logCodeApiDiagnostic("BashProgrammaticToolCalling", "debug", "session carried no injected files; exec will run without input files", { files: "none" });
|
|
206
247
|
const selectedRuntimeSessionHint = require_CodeExecutor.selectRuntimeSessionHint(initParams.runtimeSessionHint, _runtime_session_hint);
|
|
207
248
|
const runtimeSessionHint = initParams.executionProfile !== "default" && typeof selectedRuntimeSessionHint === "string" && selectedRuntimeSessionHint !== "" ? selectedRuntimeSessionHint : void 0;
|
|
208
|
-
if (needsNoTools) return await require_ProgrammaticToolCalling.runPlainExecution({
|
|
249
|
+
if (needsNoTools && !hasWorkspace) return await require_ProgrammaticToolCalling.runPlainExecution({
|
|
209
250
|
baseUrl,
|
|
210
251
|
lang: "bash",
|
|
211
252
|
code,
|
|
@@ -214,7 +255,7 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
214
255
|
files,
|
|
215
256
|
runtimeSessionHint,
|
|
216
257
|
proxy,
|
|
217
|
-
authHeaders:
|
|
258
|
+
authHeaders: requestAuthHeaders,
|
|
218
259
|
executionProfile: initParams.executionProfile
|
|
219
260
|
});
|
|
220
261
|
let response = await require_ProgrammaticToolCalling.makeRequest(EXEC_ENDPOINT, {
|
|
@@ -223,9 +264,10 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
223
264
|
tools: effectiveTools,
|
|
224
265
|
session_id,
|
|
225
266
|
timeout,
|
|
267
|
+
...workspaceInstanceId != null && workspaceInstanceId !== "" ? { workspace_instance_id: workspaceInstanceId } : {},
|
|
226
268
|
...files && files.length > 0 ? { files } : {},
|
|
227
269
|
...runtimeSessionHint != null ? { runtime_session_hint: runtimeSessionHint } : {}
|
|
228
|
-
}, proxy, initParams.
|
|
270
|
+
}, proxy, requestAuthHeaders, initParams.executionProfile, config.signal);
|
|
229
271
|
while (response.status === "tool_call_required") {
|
|
230
272
|
roundTrip++;
|
|
231
273
|
if (roundTrip > maxRoundTrips) throw new Error(`Exceeded maximum round trips (${maxRoundTrips}). This may indicate an infinite loop, excessive tool calls, or a logic error in your code.`);
|
|
@@ -234,9 +276,9 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
234
276
|
response = await require_ProgrammaticToolCalling.makeRequest(EXEC_ENDPOINT, {
|
|
235
277
|
continuation_token: response.continuation_token,
|
|
236
278
|
tool_results: toolResults
|
|
237
|
-
}, proxy, initParams.
|
|
279
|
+
}, proxy, requestAuthHeaders, initParams.executionProfile, config.signal);
|
|
238
280
|
}
|
|
239
|
-
if (response.status === "completed") return require_ProgrammaticToolCalling.formatCompletedResponse(response, code);
|
|
281
|
+
if (response.status === "completed") return require_ProgrammaticToolCalling.formatCompletedResponse(response, code, hasWorkspace ? "execution" : "session");
|
|
240
282
|
if (response.status === "error") throw new Error(require_CodeExecutor.buildCodeApiExecutionErrorMessage(response));
|
|
241
283
|
throw new require_CodeExecutor.CodeApiRequestError();
|
|
242
284
|
} catch (error) {
|
|
@@ -246,8 +288,8 @@ function createBashProgrammaticToolCallingTool(initParams = {}) {
|
|
|
246
288
|
}
|
|
247
289
|
}, {
|
|
248
290
|
name: "run_tools_with_bash",
|
|
249
|
-
description
|
|
250
|
-
schema
|
|
291
|
+
description,
|
|
292
|
+
schema,
|
|
251
293
|
responseFormat: "content_and_artifact"
|
|
252
294
|
});
|
|
253
295
|
}
|
|
@@ -262,5 +304,6 @@ exports.extractUsedBashToolNames = extractUsedBashToolNames;
|
|
|
262
304
|
exports.filterBashToolsByUsage = filterBashToolsByUsage;
|
|
263
305
|
exports.normalizeBashToolResultsForReplay = normalizeBashToolResultsForReplay;
|
|
264
306
|
exports.normalizeToBashIdentifier = normalizeToBashIdentifier;
|
|
307
|
+
exports.prepareBashProgrammaticCode = prepareBashProgrammaticCode;
|
|
265
308
|
|
|
266
309
|
//# sourceMappingURL=BashProgrammaticToolCalling.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BashProgrammaticToolCalling.cjs","names":["resolveCodeApiRunTimeoutMs","CODE_ARTIFACT_PATH_GUIDANCE","BASH_SHELL_GUIDANCE","INTENT_PROPERTY","createCodeApiRunTimeoutSchema","getCodeBaseURL","buildCodeApiEndpoint","clampCodeApiRunTimeoutMs","resolveProgrammaticToolDefinitions","selectProgrammaticTools","projectProgrammaticToolMap","selectRuntimeSessionHint","runPlainExecution","makeRequest","executeTools","formatCompletedResponse","buildCodeApiExecutionErrorMessage","CodeApiRequestError","appendFailedExecutionFileReminder"],"sources":["../../../src/tools/BashProgrammaticToolCalling.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BashProgrammaticToolCalling.cjs","names":["resolveCodeApiRunTimeoutMs","CODE_ARTIFACT_PATH_GUIDANCE","BASH_SHELL_GUIDANCE","INTENT_PROPERTY","createCodeApiRunTimeoutSchema","getCodeBaseURL","resolveAttachedWorkspaceInstanceId","resolveCodeApiAuthHeaders","buildCodeApiEndpoint","clampCodeApiRunTimeoutMs","resolveProgrammaticToolDefinitions","selectProgrammaticTools","projectProgrammaticToolMap","selectRuntimeSessionHint","runPlainExecution","makeRequest","executeTools","formatCompletedResponse","buildCodeApiExecutionErrorMessage","CodeApiRequestError","appendFailedExecutionFileReminder"],"sources":["../../../src/tools/BashProgrammaticToolCalling.ts"],"mappings":"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"}
|
|
@@ -27,9 +27,9 @@ const TMP_PATH_PATTERN = /(^|[^A-Za-z0-9_])\/tmp(?:\/|\b)/;
|
|
|
27
27
|
const MNT_DATA_PATH_PATTERN = /(^|[^A-Za-z0-9_])\/mnt\/data(?:\/|\b)/;
|
|
28
28
|
const TMP_SCRATCH_OUTPUT_REMINDER = "Note: /tmp files are same-call scratch only and were not persisted; use /mnt/data for files needed later.";
|
|
29
29
|
const FAILED_EXECUTION_FILE_REMINDER = "Note: any files written during this failed call were not registered for later calls; fix the error and rerun before relying on them.";
|
|
30
|
-
function appendTmpScratchReminder(output, code) {
|
|
30
|
+
function appendTmpScratchReminder(output, code, reminder = TMP_SCRATCH_OUTPUT_REMINDER) {
|
|
31
31
|
if (!TMP_PATH_PATTERN.test(code)) return output;
|
|
32
|
-
return `${output.trimEnd()}\n${
|
|
32
|
+
return `${output.trimEnd()}\n${reminder}\n`;
|
|
33
33
|
}
|
|
34
34
|
function appendFailedExecutionFileReminder(output, code) {
|
|
35
35
|
if (output.includes("Code execution is not supported by the selected environment.") || !MNT_DATA_PATH_PATTERN.test(code) || output.includes("Note: any files written during this failed call were not registered for later calls; fix the error and rerun before relying on them.")) return output;
|
|
@@ -312,6 +312,7 @@ function createCodeExecutionTool(params = {}) {
|
|
|
312
312
|
const artifactDelivery = require_ArtifactDelivery.normalizeArtifactDeliveryFailure(result.artifact_delivery);
|
|
313
313
|
const outputWithDeliveryWarning = require_ArtifactDelivery.appendArtifactDeliveryWarning(outputWithReminder, artifactDelivery);
|
|
314
314
|
const hasFiles = result.files != null && result.files.length > 0;
|
|
315
|
+
const deletionEcho = result.deleted_files != null ? { deleted_files: result.deleted_files } : {};
|
|
315
316
|
const runtimeEcho = result.runtime_session_id != null ? {
|
|
316
317
|
runtime_session_id: result.runtime_session_id,
|
|
317
318
|
runtime_status: result.runtime_status
|
|
@@ -320,10 +321,12 @@ function createCodeExecutionTool(params = {}) {
|
|
|
320
321
|
session_id: result.session_id,
|
|
321
322
|
files: result.files,
|
|
322
323
|
...artifactDelivery != null ? { artifact_delivery: artifactDelivery } : {},
|
|
324
|
+
...deletionEcho,
|
|
323
325
|
...runtimeEcho
|
|
324
326
|
} : {
|
|
325
327
|
session_id: result.session_id,
|
|
326
328
|
...artifactDelivery != null ? { artifact_delivery: artifactDelivery } : {},
|
|
329
|
+
...deletionEcho,
|
|
327
330
|
...runtimeEcho
|
|
328
331
|
}];
|
|
329
332
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeExecutor.cjs","names":["INTENT_PROPERTY","describeCodeApiError","resolveFetchProxyAgent","normalizeArtifactDeliveryFailure","appendArtifactDeliveryWarning","appendCodeSessionFileSummary"],"sources":["../../../src/tools/CodeExecutor.ts"],"mappings":";;;;;;;;;;;;;;mBAyBO;AAEP,MAAa,wBAAA,GAAA,0BAAA,uBAAA,CAAA,wBAC+B,KAAA;AAG5C,SAAgB,qBAAqB,SAAiB,OAAuB;CAC3E,OAAO,GAAG,QAAQ,QAAQ,QAAQ,EAAE,EAAE,GAAG,MAAM,QAAQ,QAAQ,EAAE;AACnE;AAEA,SAAgB,yBACd,aACA,cACoB;CACpB,OAAO,eAAe,QAAQ,gBAAgB,KAAK,cAAc;AACnE;AAEA,MAAa,qBACX;AAEF,MAAa,8BACX;AAEF,MAAa,sBACX;AAEF,MAAM,mBAAmB;AACzB,MAAM,wBAAwB;AAE9B,MAAa,8BACX;AAEF,MAAa,iCACX;AAEF,SAAgB,
|
|
1
|
+
{"version":3,"file":"CodeExecutor.cjs","names":["INTENT_PROPERTY","describeCodeApiError","resolveFetchProxyAgent","normalizeArtifactDeliveryFailure","appendArtifactDeliveryWarning","appendCodeSessionFileSummary"],"sources":["../../../src/tools/CodeExecutor.ts"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ const IMAGE_FILE_EXTENSIONS = new Set([
|
|
|
12
12
|
".webp"
|
|
13
13
|
]);
|
|
14
14
|
const CODE_SESSION_FILE_SUMMARY_PATTERN = /^Generated files:\nSession files: \d+ persisted file\(s\) are available in \/mnt\/data, including \d+ image\(s\)\. Use known \/mnt\/data paths directly in later code-tool calls\. The app displays files\/images automatically; do not invent download links or wrap generated images in Markdown\.$/;
|
|
15
|
+
const EXECUTION_ARTIFACT_FILE_SUMMARY_PATTERN = /^Generated files:\nExecution artifacts: \d+ file\(s\), including \d+ image\(s\), were delivered to the app\. They are not retained in the attached project; write durable files to the project root when later commands must reuse them\. The app displays files\/images automatically; do not invent download links or wrap generated images in Markdown\.$/;
|
|
15
16
|
function getFileExtension(name) {
|
|
16
17
|
const lastSlash = name.lastIndexOf("/");
|
|
17
18
|
const basename = lastSlash >= 0 ? name.slice(lastSlash + 1) : name;
|
|
@@ -35,7 +36,7 @@ function stripCodeSessionFileSummary(output) {
|
|
|
35
36
|
const beforeSummary = output.slice(0, summaryStart);
|
|
36
37
|
if (beforeSummary !== "" && !beforeSummary.endsWith("\n\n")) return output;
|
|
37
38
|
const maybeSummary = output.slice(summaryStart);
|
|
38
|
-
if (!CODE_SESSION_FILE_SUMMARY_PATTERN.test(maybeSummary)) return output;
|
|
39
|
+
if (!CODE_SESSION_FILE_SUMMARY_PATTERN.test(maybeSummary) && !EXECUTION_ARTIFACT_FILE_SUMMARY_PATTERN.test(maybeSummary)) return output;
|
|
39
40
|
return beforeSummary.trimEnd();
|
|
40
41
|
}
|
|
41
42
|
function appendCodeSessionFileSummary(output, files) {
|
|
@@ -46,8 +47,17 @@ function appendCodeSessionFileSummary(output, files) {
|
|
|
46
47
|
const summary = buildCodeSessionFileSummary(generatedFiles.length, imageCount);
|
|
47
48
|
return `${output.trimEnd()}\n\n${summary}`.trim();
|
|
48
49
|
}
|
|
50
|
+
function appendExecutionArtifactFileSummary(output, files) {
|
|
51
|
+
const generatedFiles = files?.filter(isGeneratedFile) ?? [];
|
|
52
|
+
if (generatedFiles.length === 0) return output.trim();
|
|
53
|
+
const imageCount = generatedFiles.filter(isImageFile).length;
|
|
54
|
+
const summary = `Generated files:
|
|
55
|
+
Execution artifacts: ${generatedFiles.length} file(s), including ${imageCount} image(s), were delivered to the app. They are not retained in the attached project; write durable files to the project root when later commands must reuse them. The app displays files/images automatically; do not invent download links or wrap generated images in Markdown.`;
|
|
56
|
+
return `${output.trimEnd()}\n\n${summary}`.trim();
|
|
57
|
+
}
|
|
49
58
|
//#endregion
|
|
50
59
|
exports.appendCodeSessionFileSummary = appendCodeSessionFileSummary;
|
|
60
|
+
exports.appendExecutionArtifactFileSummary = appendExecutionArtifactFileSummary;
|
|
51
61
|
exports.stripCodeSessionFileSummary = stripCodeSessionFileSummary;
|
|
52
62
|
|
|
53
63
|
//# sourceMappingURL=CodeSessionFileSummary.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeSessionFileSummary.cjs","names":[],"sources":["../../../src/tools/CodeSessionFileSummary.ts"],"mappings":";AAEA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,oCACJ;AAEF,SAAS,iBAAiB,MAAsB;CAC9C,MAAM,YAAY,KAAK,YAAY,GAAG;CACtC,MAAM,WAAW,aAAa,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI;CAC9D,MAAM,UAAU,SAAS,YAAY,GAAG;CACxC,OAAO,WAAW,IAAI,SAAS,MAAM,OAAO,CAAC,CAAC,YAAY,IAAI;AAChE;AAEA,SAAS,YAAY,MAAsD;CACzE,MAAM,OAAO,MAAM;CACnB,OACE,OAAO,SAAS,YAChB,sBAAsB,IAAI,iBAAiB,IAAI,CAAC;AAEpD;AAEA,SAAS,4BACP,WACA,YACQ;CACR,OACE;iBACkB,UAAU,2DAA2D,WAAW;AAItG;AAEA,SAAS,gBAAgB,MAAsD;CAC7E,OAAO,MAAM,cAAc;AAC7B;AAEA,SAAgB,4BAA4B,QAAwB;CAClE,MAAM,eAAe,OAAO,YAAY,kBAAkB;CAC1D,IAAI,eAAe,GAAG,OAAO;CAC7B,MAAM,gBAAgB,OAAO,MAAM,GAAG,YAAY;CAClD,IAAI,kBAAkB,MAAM,CAAC,cAAc,SAAS,MAAM,GAAG,OAAO;CACpE,MAAM,eAAe,OAAO,MAAM,YAAY;CAC9C,
|
|
1
|
+
{"version":3,"file":"CodeSessionFileSummary.cjs","names":[],"sources":["../../../src/tools/CodeSessionFileSummary.ts"],"mappings":";AAEA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,oCACJ;AACF,MAAM,0CACJ;AAEF,SAAS,iBAAiB,MAAsB;CAC9C,MAAM,YAAY,KAAK,YAAY,GAAG;CACtC,MAAM,WAAW,aAAa,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI;CAC9D,MAAM,UAAU,SAAS,YAAY,GAAG;CACxC,OAAO,WAAW,IAAI,SAAS,MAAM,OAAO,CAAC,CAAC,YAAY,IAAI;AAChE;AAEA,SAAS,YAAY,MAAsD;CACzE,MAAM,OAAO,MAAM;CACnB,OACE,OAAO,SAAS,YAChB,sBAAsB,IAAI,iBAAiB,IAAI,CAAC;AAEpD;AAEA,SAAS,4BACP,WACA,YACQ;CACR,OACE;iBACkB,UAAU,2DAA2D,WAAW;AAItG;AAEA,SAAS,gBAAgB,MAAsD;CAC7E,OAAO,MAAM,cAAc;AAC7B;AAEA,SAAgB,4BAA4B,QAAwB;CAClE,MAAM,eAAe,OAAO,YAAY,kBAAkB;CAC1D,IAAI,eAAe,GAAG,OAAO;CAC7B,MAAM,gBAAgB,OAAO,MAAM,GAAG,YAAY;CAClD,IAAI,kBAAkB,MAAM,CAAC,cAAc,SAAS,MAAM,GAAG,OAAO;CACpE,MAAM,eAAe,OAAO,MAAM,YAAY;CAC9C,IACE,CAAC,kCAAkC,KAAK,YAAY,KACpD,CAAC,wCAAwC,KAAK,YAAY,GAE1D,OAAO;CAET,OAAO,cAAc,QAAQ;AAC/B;AAEA,SAAgB,6BACd,QACA,OACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO,OAAO,KAAK;CAGrB,MAAM,iBAAiB,MAAM,OAAO,eAAe;CACnD,IAAI,eAAe,WAAW,GAC5B,OAAO,OAAO,KAAK;CAGrB,MAAM,aAAa,eAAe,OAAO,WAAW,CAAC,CAAC;CACtD,MAAM,UAAU,4BACd,eAAe,QACf,UACF;CAEA,OAAO,GAAG,OAAO,QAAQ,EAAE,MAAM,UAAU,KAAK;AAClD;AAIA,SAAgB,mCACd,QACA,OACQ;CACR,MAAM,iBAAiB,OAAO,OAAO,eAAe,KAAK,CAAC;CAC1D,IAAI,eAAe,WAAW,GAAG,OAAO,OAAO,KAAK;CACpD,MAAM,aAAa,eAAe,OAAO,WAAW,CAAC,CAAC;CACtD,MAAM,UACJ;uBACwB,eAAe,OAAO,sBAAsB,WAAW;CAGjF,OAAO,GAAG,OAAO,QAAQ,EAAE,MAAM,UAAU,KAAK;AAClD"}
|
|
@@ -9,6 +9,7 @@ const require_CodeSessionFileSummary = require("./CodeSessionFileSummary.cjs");
|
|
|
9
9
|
const require_CodeExecutor = require("./CodeExecutor.cjs");
|
|
10
10
|
const require_ProgrammaticCallerPolicy = require("./ProgrammaticCallerPolicy.cjs");
|
|
11
11
|
const require_ptcTimeout = require("./ptcTimeout.cjs");
|
|
12
|
+
let node_crypto = require("node:crypto");
|
|
12
13
|
let _langchain_core_tools = require("@langchain/core/tools");
|
|
13
14
|
let dotenv = require("dotenv");
|
|
14
15
|
let node_fetch = require("node-fetch");
|
|
@@ -17,6 +18,8 @@ node_fetch = require_runtime.__toESM(node_fetch, 1);
|
|
|
17
18
|
(0, dotenv.config)();
|
|
18
19
|
const DEFAULT_MAX_ROUND_TRIPS = 20;
|
|
19
20
|
const DEFAULT_RUN_TIMEOUT_MS = require_ptcTimeout.resolveCodeApiRunTimeoutMs();
|
|
21
|
+
const CODE_API_PROGRAMMATIC_REQUEST_HEADER = "X-LibreChat-Code-Request-ID";
|
|
22
|
+
const CANCELLATION_REQUEST_TIMEOUT_MS = 2e3;
|
|
20
23
|
const STATELESS_WARNING = `CRITICAL - STATELESS EXECUTION:
|
|
21
24
|
Each call is a fresh Python interpreter. Variables, imports, and data do NOT persist between calls.
|
|
22
25
|
You MUST complete your entire workflow in ONE code block: query → process → output.
|
|
@@ -249,20 +252,61 @@ async function fetchSessionFiles(baseUrl, sessionId, scopeOrProxy, proxyOrAuthHe
|
|
|
249
252
|
return [];
|
|
250
253
|
}
|
|
251
254
|
}
|
|
252
|
-
async function makeRequest(endpoint, body, proxy, authHeaders, executionProfile) {
|
|
255
|
+
async function makeRequest(endpoint, body, proxy, authHeaders, executionProfile, signal) {
|
|
253
256
|
try {
|
|
257
|
+
const resolvedAuthHeaders = await require_CodeExecutor.resolveCodeApiAuthHeaders(authHeaders);
|
|
258
|
+
const requestId = signal != null ? (0, node_crypto.randomUUID)() : void 0;
|
|
254
259
|
const fetchOptions = {
|
|
255
260
|
method: "POST",
|
|
256
261
|
headers: {
|
|
257
262
|
"Content-Type": "application/json",
|
|
258
263
|
"User-Agent": "LibreChat/1.0",
|
|
259
|
-
...require_CodeExecutor.addCodeApiExecutionProfileHeader(
|
|
264
|
+
...require_CodeExecutor.addCodeApiExecutionProfileHeader(resolvedAuthHeaders, executionProfile),
|
|
265
|
+
...requestId != null ? { [CODE_API_PROGRAMMATIC_REQUEST_HEADER]: requestId } : {}
|
|
260
266
|
},
|
|
261
|
-
body: JSON.stringify(body)
|
|
267
|
+
body: JSON.stringify(body),
|
|
268
|
+
signal
|
|
262
269
|
};
|
|
263
270
|
const proxyAgent = require_proxy.resolveFetchProxyAgent(endpoint, proxy);
|
|
264
271
|
if (proxyAgent != null) fetchOptions.agent = proxyAgent;
|
|
265
|
-
|
|
272
|
+
let cancellationRequest;
|
|
273
|
+
const requestCancellation = () => {
|
|
274
|
+
if (requestId == null || cancellationRequest != null) return;
|
|
275
|
+
cancellationRequest = (async () => {
|
|
276
|
+
const cancellationController = new AbortController();
|
|
277
|
+
const timeout = setTimeout(() => cancellationController.abort(), CANCELLATION_REQUEST_TIMEOUT_MS);
|
|
278
|
+
try {
|
|
279
|
+
const cancelOptions = {
|
|
280
|
+
method: "POST",
|
|
281
|
+
headers: {
|
|
282
|
+
"Content-Type": "application/json",
|
|
283
|
+
"User-Agent": "LibreChat/1.0",
|
|
284
|
+
...require_CodeExecutor.addCodeApiExecutionProfileHeader(resolvedAuthHeaders, executionProfile)
|
|
285
|
+
},
|
|
286
|
+
body: JSON.stringify({ request_id: requestId }),
|
|
287
|
+
signal: cancellationController.signal
|
|
288
|
+
};
|
|
289
|
+
if (proxyAgent != null) cancelOptions.agent = proxyAgent;
|
|
290
|
+
await (0, node_fetch.default)(`${endpoint}/cancel`, cancelOptions);
|
|
291
|
+
} catch {} finally {
|
|
292
|
+
clearTimeout(timeout);
|
|
293
|
+
}
|
|
294
|
+
})();
|
|
295
|
+
};
|
|
296
|
+
signal?.addEventListener("abort", requestCancellation, { once: true });
|
|
297
|
+
if (signal?.aborted === true) requestCancellation();
|
|
298
|
+
let response;
|
|
299
|
+
try {
|
|
300
|
+
response = await (0, node_fetch.default)(endpoint, fetchOptions);
|
|
301
|
+
} catch (error) {
|
|
302
|
+
if (signal?.aborted === true) {
|
|
303
|
+
requestCancellation();
|
|
304
|
+
await cancellationRequest;
|
|
305
|
+
}
|
|
306
|
+
throw error;
|
|
307
|
+
} finally {
|
|
308
|
+
signal?.removeEventListener("abort", requestCancellation);
|
|
309
|
+
}
|
|
266
310
|
if (!response.ok) throw new require_CodeExecutor.CodeApiRequestError(await require_CodeExecutor.buildCodeApiHttpErrorMessage("POST", endpoint, response, { profile: executionProfile }));
|
|
267
311
|
return await response.json();
|
|
268
312
|
} catch (error) {
|
|
@@ -405,16 +449,18 @@ async function executeTools(toolCalls, toolMap, programmaticToolName = "run_tool
|
|
|
405
449
|
});
|
|
406
450
|
return await Promise.all(executions);
|
|
407
451
|
}
|
|
408
|
-
function formatCompletedResponse(response, sourceCode = "") {
|
|
452
|
+
function formatCompletedResponse(response, sourceCode = "", filePersistence = "session") {
|
|
409
453
|
let formatted = "";
|
|
410
454
|
if (response.stdout != null && response.stdout !== "") formatted += `stdout:\n${response.stdout}\n`;
|
|
411
455
|
else formatted += require_CodeExecutor.emptyOutputMessage;
|
|
412
456
|
if (response.stderr != null && response.stderr !== "") formatted += `stderr:\n${response.stderr}\n`;
|
|
413
457
|
const outputWithReminder = require_CodeExecutor.appendTmpScratchReminder(formatted, sourceCode);
|
|
414
458
|
const artifactDelivery = require_ArtifactDelivery.normalizeArtifactDeliveryFailure(response.artifact_delivery);
|
|
415
|
-
|
|
459
|
+
const outputWithDeliveryWarning = require_ArtifactDelivery.appendArtifactDeliveryWarning(outputWithReminder, artifactDelivery);
|
|
460
|
+
return [filePersistence === "execution" ? require_CodeSessionFileSummary.appendExecutionArtifactFileSummary(outputWithDeliveryWarning, response.files) : require_CodeSessionFileSummary.appendCodeSessionFileSummary(outputWithDeliveryWarning, response.files), {
|
|
416
461
|
session_id: response.session_id,
|
|
417
462
|
files: response.files,
|
|
463
|
+
...response.deleted_files != null ? { deleted_files: response.deleted_files } : {},
|
|
418
464
|
...artifactDelivery != null ? { artifact_delivery: artifactDelivery } : {},
|
|
419
465
|
...response.runtime_session_id != null ? {
|
|
420
466
|
runtime_session_id: response.runtime_session_id,
|
|
@@ -496,7 +542,7 @@ function createProgrammaticToolCallingTool(initParams = {}) {
|
|
|
496
542
|
timeout,
|
|
497
543
|
...files && files.length > 0 ? { files } : {},
|
|
498
544
|
...runtimeSessionHint != null ? { runtime_session_hint: runtimeSessionHint } : {}
|
|
499
|
-
}, proxy, initParams.authHeaders, initParams.executionProfile);
|
|
545
|
+
}, proxy, initParams.authHeaders, initParams.executionProfile, config.signal);
|
|
500
546
|
while (response.status === "tool_call_required") {
|
|
501
547
|
roundTrip++;
|
|
502
548
|
if (roundTrip > maxRoundTrips) throw new Error(`Exceeded maximum round trips (${maxRoundTrips}). This may indicate an infinite loop, excessive tool calls, or a logic error in your code.`);
|
|
@@ -505,7 +551,7 @@ function createProgrammaticToolCallingTool(initParams = {}) {
|
|
|
505
551
|
response = await makeRequest(EXEC_ENDPOINT, {
|
|
506
552
|
continuation_token: response.continuation_token,
|
|
507
553
|
tool_results: toolResults
|
|
508
|
-
}, proxy, initParams.authHeaders, initParams.executionProfile);
|
|
554
|
+
}, proxy, initParams.authHeaders, initParams.executionProfile, config.signal);
|
|
509
555
|
}
|
|
510
556
|
if (response.status === "completed") return formatCompletedResponse(response, code);
|
|
511
557
|
if (response.status === "error") throw new Error(require_CodeExecutor.buildCodeApiExecutionErrorMessage(response));
|