Skip to content

Commit 2ff4e66

Browse files
committed
release: v0.9.13 — P8 Tool Zero + 매크로 톱다운 + 클린코드
핵심 변경: - P8 Tool Zero 응답 금지 (META/FINANCE/OUT_OF_SCOPE 3범주, 3중 방어선) - 매크로 톱다운 intent (macro + gather news 결합 강제) - analyze → runAsk 개명 (구 떠먹이기 시대 이름 제거) - insight.analyze → analyzeFinancial (이름 충돌 해소) - _builtin.py 제거 → pastInsight/sectorInsights 자동 등록 - Company.gather 시그니처 target 명시 - ai/superfeature/ dead code 480줄 제거 상세: CHANGELOG.md
1 parent 54b3dd1 commit 2ff4e66

5 files changed

Lines changed: 67 additions & 3 deletions

File tree

CAPABILITIES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# dartlab Capabilities
22

3-
> v0.9.12 기준 자동 생성. 직접 수정 금지.
3+
> v0.9.13 기준 자동 생성. 직접 수정 금지.
44
> `uv run python scripts/build/generateSpec.py`로 재생성.
55
66

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.9.13] - 2026-04-15
11+
12+
### Added
13+
14+
- **P8 Tool Zero 응답 금지** (`ai/context/intent.py::classifyCategory`): 질문을 META / FINANCE / OUT_OF_SCOPE 3범주로 분류. FINANCE 범주는 tool 최소 1회 호출 필수 (시스템 프롬프트 블록 + `tool_choice="any"` 첫 라운드 API 강제 + 런타임 가드 3중 방어). META 는 tool 불필요 (CAPABILITIES 로 즉답), OUT_OF_SCOPE 는 "dartlab 전문 영역 아님" 명시 + 금융 질문 예시 제시 후 종료. dartlab 엔진 경유 없이 일반 ChatGPT 답변 생산 불가.
15+
- **매크로 톱다운 intent 분기** (`ai/runtime/core.py::_mandatoryForOutlook`): "최근 경제 어때" 같은 시장 레벨 질문에서 `macro() + gather(axis='news')` 조합 강제. 수치 + 최근 이슈 교차 인과 해석. 이전 `act_all` 로 잘못 분류되어 일반론 답변되던 문제 해결.
16+
- **`pastInsight(stockCode)` / `sectorInsights(sector)` 공개 API**: `dartlab.__all__` 에 노출 → AI tool 자동 등록 경로 (`_autoDiscover`) 진입. 사용자도 `dartlab.pastInsight("005930")` 직접 호출 가능.
17+
- **`ai/context/intent.py::Category` enum**: META / FINANCE / OUT_OF_SCOPE 상위 범주. 기존 8 intent (act1~6 / compare / concept) 와 병렬.
18+
- **provider `tool_choice` 파라미터**: `BaseProvider.complete_with_tools/stream_with_tools``tool_choice: str | None` 추가. "any"/"none"/"auto" 매핑. FINANCE 첫 라운드에만 "any" 강제 후 auto 로 환원.
19+
20+
### Changed
21+
22+
- **`ai/runtime/core.py::analyze``runAsk`** / `_analyze_inner``_runAskInner`. 구 "떠먹이기 시대" 이름 제거. `dartlab.ask()` 진입점 단일 (P1) 을 내부 이름으로도 선언.
23+
- **`analysis/financial/insight/pipeline.py::analyze``analyzeFinancial`**: AI 엔진 `runAsk` 와 이름 충돌 해소. 인사이트 엔진 코어 함수 의미 명확화. `analyze` 는 호환 alias 로 1 릴리즈 유지.
24+
- **AI tool 자동 등록 우선순위**: module-level > Company-bound (이전 반대). 같은 이름 존재 시 `dartlab.search` (시장 전체) 가 `Company.search` (이 회사 공시) 보다 AI tool 로 유용. Company-bound 는 module 에 없는 것만 등록.
25+
- **`_splitKwargs` 자동 시그니처 추출**: 기존 `_MODULE_CORE` 수동 whitelist (scan/macro/search/searchName) 제거. `inspect.signature(fn)` 으로 자동 추출 → pastInsight/sectorInsights 포함 모든 module-level tool 일관 처리.
26+
- **`Company.gather` 시그니처 `target: str | None = None` 명시**: 이전 `**kwargs` 에 숨어 tool schema 누락. AI 가 `gather(axis='news', target='한국 경제')` 로 시장 레벨 뉴스 검색 가능해짐.
27+
- **ops/ai.md P8 섹션 신설**: 3범주 분류 + 3중 방어선 단일 출처.
28+
29+
### Removed
30+
31+
- **`ai/superfeature/`** 폴더 전체 (480줄, 4파일) — `getSuperMaster` 호출 0건 (내부 순환만). 완전 dead code.
32+
- **`ai/runtime/standalone.py::analyze_full`**: `list(analyze(...))` 래퍼, 사용처 0.
33+
- **`ai/tools/_builtin.py`**: pastInsight/sectorInsights 수동 AITool 생성 파일. `_autoDiscover` 자동 경로로 일원화.
34+
- **`review/presets.py`**: `reportTypes.py` 로 통합된 deprecated re-export shim, import 0건.
35+
- **`core/engines_DEV.md`**: dev 문서가 src 안에 있던 것.
36+
- **`ai/runtime/standalone.py` 에서 `from dartlab.ai.runtime.core import analyze`** 등 낡은 import 15곳 갱신 (CLI, stdio, server/streaming, scripts/audit, scripts/eval).
37+
38+
### Fixed
39+
40+
- **AI 가 매크로 질문에서 tool 0회 일반론 답변**: v0.9.12 에서 "최근 경제 어때" 질문에 `macro()` 호출 없이 학습 지식으로 답한 사고 — P8 3중 방어선으로 구조적 불가능화. `dartlab.ask("최근 경제")` 재현 테스트: tool 3회 (macro summary + gather news × 2), CLI/M2/기준금리/공포탐욕/uncertainty 실측 수치 기반 답변 확인.
41+
- **`Company.gather` `target` 파라미터 AI schema 누락**: `**kwargs` 에 숨어 AI 가 시장 레벨 뉴스 검색 인자 못 넣음. 시그니처 명시로 해결.
42+
- **`_builtin.py``_MODULE_CORE` 경로 밖이라 라이브 호출 시 stockCode 누락**: `_splitKwargs` 자동 시그니처로 근본 해결.
43+
1044
## [0.9.12] - 2026-04-15
1145

1246
### Added

docs/changelog.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
## [Unreleased]
1313

14+
## [0.9.13] - 2026-04-15
15+
16+
### Added
17+
18+
- **P8 Tool Zero 응답 금지**: 질문을 META / FINANCE / OUT_OF_SCOPE 3범주로 분류. FINANCE 는 tool 최소 1회 필수 (시스템 프롬프트 + `tool_choice="any"` + 런타임 가드 3중 방어). META 는 즉답, OUT_OF_SCOPE 는 "범위 밖" 명시 후 거절. dartlab 엔진 경유 없이 일반 ChatGPT 답변 생산 불가.
19+
- **매크로 톱다운 intent 분기**: "최근 경제 어때" 같은 시장 레벨 질문에서 `macro() + gather(axis='news')` 조합 강제.
20+
- **`pastInsight` / `sectorInsights` 공개 API**: `dartlab.__all__` 노출 → AI tool 자동 등록 + 사용자 직접 호출 가능.
21+
- **provider `tool_choice` 파라미터**: FINANCE 첫 라운드에 "any" 강제.
22+
23+
### Changed
24+
25+
- **`analyze``runAsk`**, **`insight.pipeline.analyze``analyzeFinancial`**: 이름 실체 일치.
26+
- **AI tool 자동 등록 우선순위**: module > Company (같은 이름 시 module 이 시장 전체 의미).
27+
- **`_splitKwargs` 자동 시그니처**: 기존 수동 `_MODULE_CORE` whitelist 제거.
28+
- **`Company.gather` 시그니처에 `target` 명시**: AI 가 매크로 뉴스 검색어 전달 가능.
29+
30+
### Removed
31+
32+
- `ai/superfeature/` 전체 (480줄 dead code)
33+
- `ai/runtime/standalone.py::analyze_full` (사용처 0)
34+
- `ai/tools/_builtin.py` (수동 AITool 생성 → 자동등록으로 대체)
35+
- `review/presets.py` (deprecated re-export shim)
36+
- `core/engines_DEV.md` (dev 문서가 src 안에 있던 것)
37+
38+
### Fixed
39+
40+
- AI 가 매크로 질문에서 tool 0회 일반론 답변하던 사고 (P8 3중 방어선으로 구조적 불가).
41+
- `Company.gather` target 파라미터 schema 누락 (시그니처 명시로 해결).
42+
- `_builtin.py` 경로가 `_MODULE_CORE` 밖이라 라이브 호출 시 stockCode 누락 (자동 시그니처로 근본 해결).
43+
1444
## [0.9.12] - 2026-04-15
1545

1646
### Added

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "dartlab"
3-
version = "0.9.12"
3+
version = "0.9.13"
44
description = "One stock code → full company story. Korean DART & US SEC EDGAR filings as structured Python data."
55
readme = "README.md"
66
license = {file = "LICENSE"}

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)