feat: Bridge 타깃 토글 + /research 제거 + 환각·오염 방지 강화 (v2.2.205)
- Datacollect Bridge 로컬/NAS 타깃 토글(Settings 패널) + NAS URL/x-bridge-token. 기본 local = 현행 동작 유지. (백엔드 NAS 분리 준비) - /research(NotebookLM) 제거 — 로컬 Datacollect 앱 전용으로 분리. - 에러로그 오염 차단: STT/스택트레이스/에러덤프를 장기기억 채굴 제외 + 자동 추출 항목 14일 TTL(참조 시 슬라이딩 연장). 기존·수동 항목 무영향. - 컨텍스트 [주제] 태깅 + 교차오염 방지 경계 지침. - "확인 불가" 사실 날조 금지 규칙(R7과 구분). - /meet STT 오타 보정: 철자 정규화 허용하되 사실 날조는 차단. 타입체크 + 407 테스트 통과. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,19 +4,36 @@ import * as vscode from 'vscode';
|
||||
* Datacollect (Wiki/Datacollect 프로젝트)의 MCP Bridge HTTP 클라이언트.
|
||||
*
|
||||
* Bridge는 사용자가 별도로 띄우는 Node Express 서버(`npm run bridge`)이고
|
||||
* 기본 포트는 3002. Research(NotebookLM)/Web Benchmark(Playwright)/YouTube
|
||||
* (yt-dlp+transcript) 같은 무거운 기능을 노출하므로, Astra는 이 endpoint를
|
||||
* thin client로 호출만 한다 — Playwright/Chrome/NotebookLM-MCP 의존성을
|
||||
* Astra가 직접 들고 갈 필요 없음.
|
||||
* 기본 포트는 3002. Web Benchmark(Playwright)/YouTube(yt-dlp+transcript)/Wikify
|
||||
* 같은 무거운 기능을 노출하므로, Astra는 이 endpoint를 thin client로 호출만 한다
|
||||
* — Playwright/Chrome/Python 의존성을 Astra가 직접 들고 갈 필요 없음.
|
||||
* (NotebookLM Deep Research 는 ASTRA 에서 제거 — 로컬 Datacollect 앱 전용.)
|
||||
*
|
||||
* URL은 `astra.datacollectBridgeUrl` VS Code 설정으로 override 가능, 기본값
|
||||
* `http://127.0.0.1:3002`. 사용자가 다른 머신/포트에서 띄우면 그쪽으로 가게.
|
||||
* 타깃은 `g1nation.datacollectBridgeTarget`(`local`|`nas`)으로 전환한다.
|
||||
* - local(기본): `g1nation.datacollectBridgeUrl` (기본 `http://127.0.0.1:3002`)
|
||||
* - nas: `g1nation.datacollectBridgeNasUrl` (+ `datacollectBridgeNasToken` 헤더)
|
||||
* nas 인데 URL 이 비어 있으면 안전하게 local 로 폴백한다(절대 깨지지 않게).
|
||||
*/
|
||||
|
||||
export function getBridgeBaseUrl(): string {
|
||||
const raw = vscode.workspace.getConfiguration('g1nation').get<string>('datacollectBridgeUrl');
|
||||
const url = (raw && raw.trim()) || 'http://127.0.0.1:3002';
|
||||
return url.replace(/\/$/, '');
|
||||
const cfg = vscode.workspace.getConfiguration('g1nation');
|
||||
const localUrl = (cfg.get<string>('datacollectBridgeUrl')?.trim()) || 'http://127.0.0.1:3002';
|
||||
if (cfg.get<string>('datacollectBridgeTarget', 'local') === 'nas') {
|
||||
const nasUrl = cfg.get<string>('datacollectBridgeNasUrl')?.trim();
|
||||
if (nasUrl) return nasUrl.replace(/\/$/, '');
|
||||
// nas 선택했으나 URL 미설정 → 로컬로 폴백 (구동 끊기지 않게).
|
||||
}
|
||||
return localUrl.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
/**
|
||||
* nas 타깃일 때 NAS Bridge 의 `x-bridge-token` 값. local 이거나 미설정이면 ''.
|
||||
* bridgeFetch 가 이 값을 요청 헤더에 실어 보낸다(빈 문자열이면 헤더 미부착).
|
||||
*/
|
||||
export function getBridgeAuthToken(): string {
|
||||
const cfg = vscode.workspace.getConfiguration('g1nation');
|
||||
if (cfg.get<string>('datacollectBridgeTarget', 'local') !== 'nas') return '';
|
||||
return (cfg.get<string>('datacollectBridgeNasToken')?.trim()) || '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,19 +43,13 @@ export function getBridgeBaseUrl(): string {
|
||||
* 바뀌면 5+ 곳을 동시 수정. 이 객체로 모아 한 곳만 바꾸면 됨.
|
||||
*
|
||||
* 카테고리:
|
||||
* - research: NotebookLM Deep Research 워크플로
|
||||
* - youtube: yt-dlp + youtube-transcript-api 기반 영상 분석
|
||||
* - web: Playwright 기반 웹 페이지 추출·벤치마크
|
||||
* - wiki: 생성된 위키 문서 디스크 저장
|
||||
* - lm: 사용자의 LM Studio / Ollama 로 LLM 호출 프록시
|
||||
*/
|
||||
export const BRIDGE_API = {
|
||||
research: {
|
||||
start: '/api/research/start',
|
||||
status: '/api/research/status',
|
||||
import: '/api/research/import',
|
||||
synthesize: '/api/research/synthesize',
|
||||
},
|
||||
// research(NotebookLM)는 ASTRA 에서 제거됨(v2.2.205) — 로컬 Datacollect 앱 전용.
|
||||
youtube: {
|
||||
extract: '/api/youtube/extract',
|
||||
},
|
||||
@@ -104,11 +115,13 @@ export async function bridgeFetch<T = any>(
|
||||
}
|
||||
|
||||
try {
|
||||
const token = getBridgeAuthToken();
|
||||
const res = await fetch(url, {
|
||||
...init,
|
||||
signal: controller.signal,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...(token ? { 'x-bridge-token': token } : {}),
|
||||
...(init?.headers || {}),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user