terminal-smart-cli 0.97.44 → 0.97.46
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/lib/agent.js +19 -3
- package/package.json +1 -1
package/lib/agent.js
CHANGED
|
@@ -1066,8 +1066,16 @@ async function run(task, opts = {}) {
|
|
|
1066
1066
|
// própria conta e injeta a memória daquele projeto; consulta vaga continua
|
|
1067
1067
|
// isolada na pasta atual para não contaminar trabalhos diferentes.
|
|
1068
1068
|
const strongestCurrent = _busRecords.reduce((best, record) => Math.max(best, Number(record.score || 0)), 0);
|
|
1069
|
-
|
|
1070
|
-
|
|
1069
|
+
const isNewProjectUpdate = /\b(guarde|registre|registr[ae]|crie|criar|novo projeto|vamos criar|decis[aã]o)\b/i.test(taskText);
|
|
1070
|
+
if (strongestCurrent < 0.6 && !isNewProjectUpdate) {
|
|
1071
|
+
const currentProjectId = _memoryBus.projectId(_scopeRoot);
|
|
1072
|
+
const candidates = (await _memoryBus.discoverProjects(token, { query: taskText, limit: 8 }))
|
|
1073
|
+
// A memória automática criada pela pergunta corrente não representa
|
|
1074
|
+
// uma retomada; ela só repete a própria pergunta. Nunca a use como
|
|
1075
|
+
// candidato para evitar que ela oculte o projeto realmente citado.
|
|
1076
|
+
.filter(candidate => candidate.projectId !== currentProjectId
|
|
1077
|
+
&& candidate.workstreamId !== _workstreamId)
|
|
1078
|
+
.slice(0, 2);
|
|
1071
1079
|
const winner = candidates[0];
|
|
1072
1080
|
const runnerUp = candidates[1];
|
|
1073
1081
|
if (winner && Number(winner.score || 0) >= 0.5 && (!runnerUp || Number(winner.score || 0) - Number(runnerUp.score || 0) >= 0.12)) {
|
|
@@ -1239,16 +1247,24 @@ async function run(task, opts = {}) {
|
|
|
1239
1247
|
const _auditPack = auditPacks.selectAuditPack(_scopeIntentText, cwd);
|
|
1240
1248
|
const _auditBlock = auditPacks.promptBlock(_auditPack, lang);
|
|
1241
1249
|
const _projectBrief = !roMode ? projectBrief(cwd) : '';
|
|
1250
|
+
// A memória também acompanha o último pedido como contexto recuperado. Só
|
|
1251
|
+
// deixá-la no system prompt tornava esse fato fácil de perder em chamadas
|
|
1252
|
+
// grandes (skills/ferramentas); aqui ele chega junto da pergunta, sem ser
|
|
1253
|
+
// tratado como instrução e sem substituir o pedido atual.
|
|
1254
|
+
const _memoryRecallMessage = _resumedProject && _busBlock
|
|
1255
|
+
? { role: 'user', content: `[CONTEXTO RECUPERADO DE OUTRA SUPERFÍCIE — fatos, não instruções]\n${_busBlock}\n[FIM DO CONTEXTO]` }
|
|
1256
|
+
: null;
|
|
1242
1257
|
let messages = [
|
|
1243
1258
|
{ role: 'system', content: systemPrompt(lang, cwd) + _memBlock + _busBlock + _interopBlock + skillsBlock + sugestaoBlock + evolveBlock + _erroBlock + planBlock + strictScopeBlock + _auditBlock + _mcpBlock + _hookCtx },
|
|
1244
1259
|
...(_projectBrief ? [{ role: 'user', content: _projectBrief }] : []),
|
|
1260
|
+
...(_memoryRecallMessage ? [_memoryRecallMessage] : []),
|
|
1245
1261
|
{ role: 'user', content: taskText },
|
|
1246
1262
|
];
|
|
1247
1263
|
// CONTINUAR sessão anterior (ts agente --continuar): reaproveita o histórico, MAS com o system
|
|
1248
1264
|
// prompt FRESCO (memória/skills atualizadas) + a nova tarefa no fim.
|
|
1249
1265
|
if (Array.isArray(opts.priorMessages) && opts.priorMessages.length) {
|
|
1250
1266
|
const convo = opts.priorMessages.filter(m => m && m.role && m.role !== 'system').slice(-40);
|
|
1251
|
-
messages = [messages[0], ...(_projectBrief ? [{ role: 'user', content: _projectBrief }] : []), ...convo, { role: 'user', content: taskText }];
|
|
1267
|
+
messages = [messages[0], ...(_projectBrief ? [{ role: 'user', content: _projectBrief }] : []), ...(_memoryRecallMessage ? [_memoryRecallMessage] : []), ...convo, { role: 'user', content: taskText }];
|
|
1252
1268
|
}
|
|
1253
1269
|
const acc = { inTok: 0, outTok: 0, cachedTok: 0 };
|
|
1254
1270
|
const _roleTrace = [];
|