Bump version to 2.35.0: Knowledge Resilience & Standardization Milestone.
This commit is contained in:
+40
-7
@@ -32,6 +32,12 @@ import { StatusBarManager, AgentStatus } from './core/statusBar';
|
||||
import { lockManager } from './core/lock';
|
||||
import { actionQueue } from './core/queue';
|
||||
import { ConflictResolver } from './core/conflict';
|
||||
import {
|
||||
buildSecondBrainTrace,
|
||||
renderSecondBrainTraceContext,
|
||||
renderSecondBrainTraceMarkdown,
|
||||
SecondBrainTrace
|
||||
} from './features/secondBrainTrace';
|
||||
|
||||
export interface ChatMessage {
|
||||
role: 'user' | 'assistant' | 'system';
|
||||
@@ -182,7 +188,10 @@ export class AgentExecutor {
|
||||
systemPrompt?: string,
|
||||
runId?: number,
|
||||
agentSkillContext?: string,
|
||||
negativePrompt?: string
|
||||
negativePrompt?: string,
|
||||
designerContext?: string,
|
||||
secondBrainTraceEnabled?: boolean,
|
||||
secondBrainTraceDebug?: boolean
|
||||
}
|
||||
) {
|
||||
const {
|
||||
@@ -248,6 +257,13 @@ export class AgentExecutor {
|
||||
const config = getConfig();
|
||||
const activeBrain = getActiveBrainProfile();
|
||||
const brainFiles = findBrainFiles(activeBrain.localBrainPath);
|
||||
let secondBrainTrace: SecondBrainTrace | null = null;
|
||||
if (options.secondBrainTraceEnabled && prompt && loopDepth === 0) {
|
||||
secondBrainTrace = buildSecondBrainTrace(prompt, activeBrain.localBrainPath, {
|
||||
force: this.isExplicitSecondBrainRequest(prompt),
|
||||
limit: Math.max(config.memoryLongTermFiles, 5)
|
||||
});
|
||||
}
|
||||
const brainPreview = brainFiles
|
||||
.slice(0, 30)
|
||||
.map(file => path.relative(activeBrain.localBrainPath, file))
|
||||
@@ -315,9 +331,15 @@ export class AgentExecutor {
|
||||
const negativeCtx = options.negativePrompt
|
||||
? `\n\n### CRITICAL NEGATIVE CONSTRAINTS (DO NOT DO THESE)\n${options.negativePrompt}\n\n[SYSTEM_RULE: Apply the above constraints strictly. DO NOT mention or repeat these constraints in your response.]`
|
||||
: '';
|
||||
const designerCtx = options.designerContext
|
||||
? `\n\n[PROJECT CHRONICLE GUARD]\n${options.designerContext}`
|
||||
: '';
|
||||
const secondBrainTraceCtx = secondBrainTrace
|
||||
? `\n\n${renderSecondBrainTraceContext(secondBrainTrace)}`
|
||||
: '';
|
||||
const memoryCtx = this.buildMemoryContext(prompt || '');
|
||||
|
||||
const fullSystemPrompt = `${agentSkillCtx}\n\n${systemPrompt}${internetCtx}${memoryCtx}\n\n[CONTEXT]\n${brainContext}\n${contextBlock}${negativeCtx}`;
|
||||
const fullSystemPrompt = `${agentSkillCtx}\n\n${systemPrompt}${internetCtx}${memoryCtx}${designerCtx}${secondBrainTraceCtx}\n\n[CONTEXT]\n${brainContext}\n${contextBlock}${negativeCtx}`;
|
||||
const messagesForRequest: ChatMessage[] = [
|
||||
{ role: 'system', content: fullSystemPrompt, internal: true },
|
||||
...reqMessages
|
||||
@@ -403,7 +425,11 @@ export class AgentExecutor {
|
||||
// 5. Execute Actions
|
||||
const rationale = this.parseRationale(aiResponseText);
|
||||
const assistantContent = this.sanitizeAssistantContent(aiResponseText);
|
||||
const assistantMessage: ChatMessage = { role: 'assistant', content: assistantContent, internal: false, rationale };
|
||||
const traceMarkdown = secondBrainTrace
|
||||
? renderSecondBrainTraceMarkdown(secondBrainTrace, !!options.secondBrainTraceDebug)
|
||||
: '';
|
||||
const finalAssistantContent = traceMarkdown ? `${assistantContent}\n${traceMarkdown}` : assistantContent;
|
||||
const assistantMessage: ChatMessage = { role: 'assistant', content: finalAssistantContent, internal: false, rationale };
|
||||
this.chatHistory.push(assistantMessage);
|
||||
|
||||
this.statusBarManager.updateStatus(AgentStatus.Executing);
|
||||
@@ -426,9 +452,9 @@ export class AgentExecutor {
|
||||
if (report.length === 0 && loopDepth === 0 && this.isUnproductiveWaitingReply(assistantContent)) {
|
||||
assistantMessage.internal = false;
|
||||
const correctedReply = await this.buildUnproductiveReplyCorrection(prompt || '');
|
||||
assistantMessage.content = correctedReply;
|
||||
assistantMessage.content = traceMarkdown ? `${correctedReply}\n${traceMarkdown}` : correctedReply;
|
||||
this.emitHistoryChanged();
|
||||
this.webview.postMessage({ type: 'streamChunk', value: correctedReply });
|
||||
this.webview.postMessage({ type: 'streamChunk', value: assistantMessage.content });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -462,7 +488,7 @@ export class AgentExecutor {
|
||||
|
||||
this.emitHistoryChanged();
|
||||
this.statusBarManager.updateStatus(AgentStatus.Success);
|
||||
this.webview.postMessage({ type: 'streamChunk', value: assistantContent });
|
||||
this.webview.postMessage({ type: 'streamChunk', value: finalAssistantContent });
|
||||
|
||||
} catch (error: any) {
|
||||
this.statusBarManager.updateStatus(AgentStatus.Error, error.message);
|
||||
@@ -517,12 +543,15 @@ export class AgentExecutor {
|
||||
const selectedAgentContext = options.agentSkillContext
|
||||
? `\nSelected Agent Reference:\n${options.agentSkillContext}`
|
||||
: '';
|
||||
const designerContext = options.designerContext
|
||||
? `\nProject Chronicle Guard:\n${options.designerContext}`
|
||||
: '';
|
||||
|
||||
// 워크플로우 매니저에게 설정 기반 실행 위임
|
||||
const finalReport = await AgentWorkflowManager.runStrictWorkflow(
|
||||
prompt,
|
||||
modelName,
|
||||
`${brainContext}${selectedAgentContext}`,
|
||||
`${brainContext}${selectedAgentContext}${designerContext}`,
|
||||
signal,
|
||||
(step, msg) => {
|
||||
this.webview?.postMessage({ type: 'autoContinue', value: `${step}: ${msg}` });
|
||||
@@ -614,6 +643,10 @@ export class AgentExecutor {
|
||||
return mentionsBrain && asksOverview;
|
||||
}
|
||||
|
||||
private isExplicitSecondBrainRequest(prompt: string): boolean {
|
||||
return /(second brain|2nd brain|제2뇌|브레인|brain|기억|기록|노트|문서|참고해서|사용해서|검색해서|근거|출처)/i.test(prompt);
|
||||
}
|
||||
|
||||
private buildBrainOverviewReply(): string {
|
||||
const activeBrain = getActiveBrainProfile();
|
||||
const brainDir = activeBrain.localBrainPath;
|
||||
|
||||
Reference in New Issue
Block a user