@strayl/agent 0.1.23 → 0.1.25
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/agent.js +60 -4
- package/package.json +1 -1
package/dist/agent.js
CHANGED
|
@@ -82,7 +82,7 @@ var init_system = __esm({
|
|
|
82
82
|
- All file operations are relative to the project root
|
|
83
83
|
|
|
84
84
|
## Hard Rules
|
|
85
|
-
- Do NOT run
|
|
85
|
+
- Do NOT run third-party scaffolding commands (create-react-app, create-next-app, create-vite, etc.) \u2014 use \`create-strayl-app\` when a skill instructs you to
|
|
86
86
|
- Do NOT create .env files \u2014 environment variables are managed by the platform
|
|
87
87
|
- Do NOT run \`npm audit fix\` \u2014 it breaks dependencies
|
|
88
88
|
- Do NOT change build tool configuration unless explicitly asked
|
|
@@ -13770,12 +13770,68 @@ ${IMPLEMENTATION_MODE_PROMPT2}`);
|
|
|
13770
13770
|
emitter.emit({ type: "debug", message: `[LOOP] Tool calls: ${completedToolCalls.map((tc) => tc.function.name).join(", ")}` });
|
|
13771
13771
|
hasUsedTools = true;
|
|
13772
13772
|
nudgedToContinue = false;
|
|
13773
|
-
|
|
13773
|
+
let tci = 0;
|
|
13774
|
+
while (tci < completedToolCalls.length) {
|
|
13774
13775
|
if (stdin.isCancelled()) {
|
|
13775
|
-
|
|
13776
|
-
|
|
13776
|
+
for (let r = tci; r < completedToolCalls.length; r++) {
|
|
13777
|
+
const rem = completedToolCalls[r];
|
|
13778
|
+
context.addToolResult(rem.id, rem.function.name, JSON.stringify({ error: "Cancelled by user." }));
|
|
13779
|
+
emitter.emit({ type: "tool-result", id: rem.id, name: rem.function.name, output: "Cancelled by user.", error: "Cancelled by user." });
|
|
13780
|
+
}
|
|
13777
13781
|
break;
|
|
13778
13782
|
}
|
|
13783
|
+
if (completedToolCalls[tci].function.name === "task") {
|
|
13784
|
+
const taskBatch = [];
|
|
13785
|
+
while (tci < completedToolCalls.length && completedToolCalls[tci].function.name === "task") {
|
|
13786
|
+
taskBatch.push(completedToolCalls[tci]);
|
|
13787
|
+
tci++;
|
|
13788
|
+
}
|
|
13789
|
+
if (taskBatch.length === 1) {
|
|
13790
|
+
const tc2 = taskBatch[0];
|
|
13791
|
+
let parsedArgs2;
|
|
13792
|
+
try {
|
|
13793
|
+
parsedArgs2 = JSON.parse(tc2.function.arguments);
|
|
13794
|
+
} catch {
|
|
13795
|
+
parsedArgs2 = {};
|
|
13796
|
+
}
|
|
13797
|
+
const activity2 = toolToActivity(tc2.function.name, parsedArgs2);
|
|
13798
|
+
if (activity2) emitter.emit({ type: "activity", ...activity2 });
|
|
13799
|
+
emitter.emit({ type: "tool-call-start", id: tc2.id, name: tc2.function.name, args: parsedArgs2 });
|
|
13800
|
+
const toolCtx2 = { emitter, workDir: config.workDir, env: config.env, sessionId: config.sessionId, toolCallId: tc2.id };
|
|
13801
|
+
const modifiedTc2 = { ...tc2, function: { ...tc2.function, arguments: JSON.stringify(parsedArgs2) } };
|
|
13802
|
+
const result2 = await executeTool(registry, modifiedTc2, toolCtx2, middleware);
|
|
13803
|
+
emitter.emit({ type: "tool-result", id: tc2.id, name: tc2.function.name, output: result2 });
|
|
13804
|
+
context.addToolResult(tc2.id, tc2.function.name, result2);
|
|
13805
|
+
} else {
|
|
13806
|
+
emitter.emit({ type: "debug", message: `[PARALLEL] Spawning ${taskBatch.length} task calls in parallel` });
|
|
13807
|
+
const prepared = taskBatch.map((tc2) => {
|
|
13808
|
+
let parsedArgs2;
|
|
13809
|
+
try {
|
|
13810
|
+
parsedArgs2 = JSON.parse(tc2.function.arguments);
|
|
13811
|
+
} catch {
|
|
13812
|
+
parsedArgs2 = {};
|
|
13813
|
+
}
|
|
13814
|
+
const activity2 = toolToActivity(tc2.function.name, parsedArgs2);
|
|
13815
|
+
if (activity2) emitter.emit({ type: "activity", ...activity2 });
|
|
13816
|
+
emitter.emit({ type: "tool-call-start", id: tc2.id, name: tc2.function.name, args: parsedArgs2 });
|
|
13817
|
+
return { tc: tc2, parsedArgs: parsedArgs2 };
|
|
13818
|
+
});
|
|
13819
|
+
const results = await Promise.all(prepared.map(async ({ tc: tc2, parsedArgs: parsedArgs2 }) => {
|
|
13820
|
+
const toolCtx2 = { emitter, workDir: config.workDir, env: config.env, sessionId: config.sessionId, toolCallId: tc2.id };
|
|
13821
|
+
const modifiedTc2 = { ...tc2, function: { ...tc2.function, arguments: JSON.stringify(parsedArgs2) } };
|
|
13822
|
+
const result2 = await executeTool(registry, modifiedTc2, toolCtx2, middleware);
|
|
13823
|
+
return { tc: tc2, result: result2 };
|
|
13824
|
+
}));
|
|
13825
|
+
for (const { tc: tc2, result: result2 } of results) {
|
|
13826
|
+
emitter.emit({ type: "tool-result", id: tc2.id, name: tc2.function.name, output: result2 });
|
|
13827
|
+
context.addToolResult(tc2.id, tc2.function.name, result2);
|
|
13828
|
+
}
|
|
13829
|
+
emitter.emit({ type: "debug", message: `[PARALLEL] All ${taskBatch.length} tasks completed` });
|
|
13830
|
+
}
|
|
13831
|
+
continue;
|
|
13832
|
+
}
|
|
13833
|
+
const tc = completedToolCalls[tci];
|
|
13834
|
+
tci++;
|
|
13779
13835
|
let parsedArgs;
|
|
13780
13836
|
try {
|
|
13781
13837
|
parsedArgs = JSON.parse(tc.function.arguments);
|