Vendored
+19
-2
@@ -4,6 +4,7 @@
|
||||
|
||||
const engine = require('../lib/qvac.js');
|
||||
const catalog = require('../lib/catalog.js');
|
||||
const toolParse = require('../lib/tool-parse.js');
|
||||
const sessions = require('./sessions.js');
|
||||
const tools = require('./tools.js');
|
||||
const sandbox = require('./sandbox.js');
|
||||
@@ -232,7 +233,7 @@ function resolvePlanDecision(sessionId, decision) {
|
||||
|
||||
function buildToolDefs(session, payload, tracker) {
|
||||
const hostWorkspace = session.hostWorkspace !== false;
|
||||
return tools
|
||||
const defs = tools
|
||||
.defs({
|
||||
planMode: planMode.isActive(tracker),
|
||||
webFetch: payload && payload.webFetch,
|
||||
@@ -240,6 +241,7 @@ function buildToolDefs(session, payload, tracker) {
|
||||
builtinTools: session.builtinTools,
|
||||
})
|
||||
.concat(customTools.defs(session.id));
|
||||
return catalog.filterToolsForModel(defs, session.model);
|
||||
}
|
||||
|
||||
function refreshSystem(session, sys) {
|
||||
@@ -394,7 +396,7 @@ async function runTurn(ctx) {
|
||||
if (session.goal && goalMod.isActive(session.goal)) {
|
||||
extraSys = [extraSys, goalMod.plannerAddendum(session.goal)].filter(Boolean).join('\n\n');
|
||||
}
|
||||
const sys = prompts.assemble({
|
||||
const sysBase = prompts.assemble({
|
||||
cwd: hostWorkspace ? cwd : session.workspace || cwd,
|
||||
hostWorkspace,
|
||||
extra: extraSys,
|
||||
@@ -410,6 +412,9 @@ async function runTurn(ctx) {
|
||||
}
|
||||
: null,
|
||||
});
|
||||
const sys = catalog.isCompactToolModel(session.model)
|
||||
? sysBase + '\n\n' + toolParse.FORMAT_REMINDER
|
||||
: sysBase;
|
||||
const sidecars = [];
|
||||
if (hostWorkspace) {
|
||||
if (!voice) {
|
||||
@@ -737,6 +742,18 @@ async function runTurn(ctx) {
|
||||
);
|
||||
|
||||
let calls = (result && result.toolCalls) || [];
|
||||
if (!calls.length && result) {
|
||||
const recovered = toolParse.recover({
|
||||
text: result.text,
|
||||
thinking: result.thinking,
|
||||
tools: toolDefs,
|
||||
existing: calls,
|
||||
});
|
||||
calls = recovered.calls;
|
||||
if (recovered.text != null) result.text = recovered.text;
|
||||
} else if (result && result.text) {
|
||||
result.text = toolParse.stripToolMarkup(result.text);
|
||||
}
|
||||
if (budget.answerOnly) calls = [];
|
||||
if ((result && result.text) || calls.length) {
|
||||
if (result.text) lastText = result.text;
|
||||
|
||||
+11
-2
@@ -52,12 +52,21 @@ function loadWorkspaceRules(fsRead, cwd) {
|
||||
return loadWorkspaceFiles(fsRead, cwd, ['AGENTS.md', '.agent-harness/AGENTS.md']);
|
||||
}
|
||||
|
||||
function voiceWorkspaceFiles(extra) {
|
||||
const acting = /\n## Acting\n/.test(String(extra || ''));
|
||||
return VOICE_WORKSPACE_FILES.filter((name) => {
|
||||
if (name === 'PERSONA.md') return false;
|
||||
if (acting && (name === 'SOUL.md' || name === 'IDENTITY.md')) return false;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
function assemble({ cwd, extra, fsRead, hostWorkspace, personality }) {
|
||||
if (personality === 'voice') {
|
||||
const parts = [];
|
||||
if (extra) parts.push(String(extra));
|
||||
if (cwd) parts.push('Current workspace: ' + cwd);
|
||||
const files = fsRead ? loadWorkspaceFiles(fsRead, cwd, VOICE_WORKSPACE_FILES) : '';
|
||||
const files = fsRead ? loadWorkspaceFiles(fsRead, cwd, voiceWorkspaceFiles(extra)) : '';
|
||||
if (files) parts.push(files);
|
||||
return parts.join('\n\n');
|
||||
}
|
||||
@@ -69,4 +78,4 @@ function assemble({ cwd, extra, fsRead, hostWorkspace, personality }) {
|
||||
return parts.join('\n\n');
|
||||
}
|
||||
|
||||
module.exports = { DEFAULT_SYSTEM, PAGE_SYSTEM, assemble, loadWorkspaceRules, VOICE_WORKSPACE_FILES };
|
||||
module.exports = { DEFAULT_SYSTEM, PAGE_SYSTEM, assemble, loadWorkspaceRules, VOICE_WORKSPACE_FILES, voiceWorkspaceFiles };
|
||||
|
||||
Reference in New Issue
Block a user