Update Astra/Agent state - 2026-05-10 22:26:50
This commit is contained in:
+47
-2
@@ -10,7 +10,8 @@ import {
|
||||
buildApiUrl,
|
||||
logError,
|
||||
logInfo,
|
||||
resolveEngine
|
||||
resolveEngine,
|
||||
getActiveBrainProfile
|
||||
} from './utils';
|
||||
import { getConfig, validateConfig } from './config';
|
||||
import { AgentExecutor } from './agent';
|
||||
@@ -32,6 +33,8 @@ import { TelegramHttpClient } from './integrations/telegram/telegramClient';
|
||||
import { TelegramBot } from './integrations/telegram/telegramBot';
|
||||
import { AIService } from './core/services';
|
||||
import { SettingsPanelProvider } from './features/settings/settingsPanelProvider';
|
||||
import { resolveScopeForAgent, openKnowledgeMapEditor } from './skills/agentKnowledgeMap';
|
||||
import { retrieveScoped, buildContextBlock } from './skills/scopedBrainRetriever';
|
||||
|
||||
let _lifecycleManager: ModelLifecycleManager | undefined;
|
||||
let _telegramBot: TelegramBot | undefined;
|
||||
@@ -188,8 +191,47 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
logInfo('Telegram message from unallowed chat ignored.', { chatId });
|
||||
return null;
|
||||
}
|
||||
|
||||
// Per-chat agent override → fall back to global default → fall back to mapping default.
|
||||
const perChatAgents = cfg.get<Record<string, string>>('telegram.agentByChatId', {}) || {};
|
||||
const perChatAgent = perChatAgents[String(chatId)];
|
||||
const defaultAgent = cfg.get<string>('telegram.defaultAgent', '') || '';
|
||||
const agentName = (perChatAgent || defaultAgent || '').trim();
|
||||
|
||||
const brain = getActiveBrainProfile();
|
||||
const brainRoot = brain?.localBrainPath || '';
|
||||
const scope = resolveScopeForAgent(agentName, brainRoot);
|
||||
|
||||
// RAG retrieval — even with no agent match we still search the whole
|
||||
// brain so the bot stays useful. The buildContextBlock label tells
|
||||
// the user which mode they're in.
|
||||
let contextBlock = '';
|
||||
if (brainRoot) {
|
||||
try {
|
||||
const result = retrieveScoped(text, brainRoot, scope.folders, {
|
||||
maxResults: cfg.get<number>('telegram.contextChunks', 6) ?? 6,
|
||||
});
|
||||
contextBlock = buildContextBlock(result);
|
||||
logInfo('Telegram RAG retrieval done.', {
|
||||
chatId,
|
||||
agent: scope.agent?.name ?? '(none)',
|
||||
scopedFolders: scope.folders.length,
|
||||
candidates: result.candidateCount,
|
||||
chunks: result.chunks.length,
|
||||
});
|
||||
} catch (e: any) {
|
||||
logError('Telegram RAG retrieval failed; falling back to plain prompt.', {
|
||||
chatId, error: e?.message ?? String(e),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const composed = contextBlock
|
||||
? `${contextBlock}\n\n[사용자 질문]\n${text}\n\n[지시] 위 컨텍스트가 관련 있을 때만 활용하고, 답변에는 출처(파일 경로)를 인용하세요.`
|
||||
: text;
|
||||
|
||||
try {
|
||||
const reply = await telegramAi.call(text);
|
||||
const reply = await telegramAi.call(composed);
|
||||
return (reply && reply.trim()) ? reply : '(빈 응답)';
|
||||
} catch (e: any) {
|
||||
return `⚠️ Astra error: ${e?.message ?? e}`;
|
||||
@@ -256,6 +298,9 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
vscode.window.showErrorMessage(`Telegram 연결 실패: ${e?.message ?? e}`);
|
||||
}
|
||||
}),
|
||||
vscode.commands.registerCommand('g1nation.skills.editKnowledgeMap', async () => {
|
||||
await openKnowledgeMapEditor();
|
||||
}),
|
||||
);
|
||||
|
||||
// Astra Settings webview — single entry point for user-facing config (Phase 5-A: Telegram only).
|
||||
|
||||
Reference in New Issue
Block a user