Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
| 2026-11-06 | v3.100 | **⌘K 넓히기: 이 노트의 동작과 폴더·태그로 가기(브랜치 `feat/palette-note-actions`, 앱만).** 노트를 열었을 때 맨 앞 `이 노트` 묶음: 즐겨찾기(`org.setFavorite`)·태그 편집(`org.requestTagFocus`, 사이드바 줄 메뉴와 같은 통로)·형식별 내보내기·Obsidian. 내보내기는 `useNoteExport`가 MeetingView 안에 있어 App이 `exportReq {id, format, nonce}`를 내려 주고 MeetingView가 노트를 다 읽은 뒤 한 번 `exp.exportAs`/`toObsidian`을 부른다(노트 머리 메뉴와 같은 함수: Markdown·Word는 넣을 내용 고르기 창). 목록이 길어지지 않게 `PaletteAction.typed`(빈 입력에서는 숨기고 찾을 때만)를 두어 빈 입력에서는 Markdown·Word만 보인다. 입력이 있으면 `폴더·태그` 묶음: 고르면 사이드바 거르기를 그 폴더(태그) 하나로 바꾸고(`clearFilters` → `selectFolder`/`toggleTag`) 노트 목록을 펼친다. 폴더로 옮기기·인쇄는 고르는 창·쓰던 메모 저장이 끼어 넣지 않았다. WORDS §4.30. |
| 2026-11-06 | v3.101 | **일정과 노트 잇기(브랜치 `feat/event-note-link`).** v3.96의 이번 주 띠는 일정과 그 일정으로 녹음한 노트를 따로 보였다(노트에 일정 ID가 없었다). `event.json`에 선택 키 `id`(EventKit 일정 ID, 한 줄 256자 이하)를 더했다: 앱 `calendar::clean_event`와 코어 `calendar_event.clean_event`가 둘 다 남긴다(코어가 녹음 폴더 → 노트 폴더로 옮길 때 다시 검사하므로). 노트 목록 `MeetingInfo.event`에 `{id?, title, start}`만 싣는다(`calendar::note_event`, 목록 캐시 안: `event.json`은 두 저장 경로 모두 transcript.json보다 먼저 쓰인다). 화면 `week.linked`: 같은 순간에 시작하고 ID가 같으면(반복 일정은 회차마다 ID가 같아 시각으로 가른다), ID가 없는 옛 노트는 제목이 같으면 잇는다. `groupWeek`가 이어진 노트를 일정(`DayEvent.notes`) 아래로 옮기고 그날 노트에서는 뺀다(`dayNotes`는 둘 다 센다). 미리보기는 세 번째 노트를 화요일 스탠드업에 이었다. 실제 EventKit ID로 녹음해 잇는 것은 이 터미널에 캘린더 권한이 없어 확인하지 않았다(릴리스 번들 확인 때 함께). |
| 2026-11-06 | v3.102 | **⌘K에 폴더로 옮기기·PDF(브랜치 `feat/palette-move-print`, 앱만).** v3.100에서 뺀 둘을 더했다. 폴더 고르는 창을 띄우는 대신 폴더마다 `폴더로 이동: {경로}` 한 줄과 `폴더에서 빼기`(`org.moveNote`, 사이드바 줄 메뉴와 같다, 둘 다 `typed`라 찾을 때만). PDF는 `exportReq`의 `format: "print"`: MeetingView가 노트 머리 PDF와 똑같이 `flushMemos` 뒤 `setPrintNonce`. |
| 2026-11-06 | v3.103 | **0.5.5 릴리스 준비(브랜치 `chore/release-0.5.5`).** 버전 0.5.5를 `package.json`·`Cargo.toml`(+`Cargo.lock`의 `tractus-app`)·`tauri.conf.json`·`pyproject.toml`(+`uv.lock`)·플러그인 `plugin.json`에 맞췄다. 0.5.4 이후: 리팩토링(v3.86~v3.89·v3.93·v3.94), 사전(v3.90~v3.92·v3.98), ⌘K(v3.95·v3.100·v3.102), 이번 주 띠와 일정·노트 잇기(v3.96·v3.101), 안내 말풍선·빈 요약(v3.97), onnxruntime 제거(v3.99). 소개 사이트(`site/ko`)의 `자주 쓰는 단어`를 `사전`으로. 릴리스 노트 `docs/releases/v0.5.5.md`, 로드맵 항목. **번들 확인(저장소 복사본에서 빌드, 다른 폴더로 옮겨 `env -i`):** DMG 188.8MB(0.5.4) → 166.4MB(−22.4MB, onnxruntime 제거·v3.99), 앱 469MB. `doctor --json`·`note new`·`note sample`·`tractus-rec record --fake`·`calendar range`(권한 없는 터미널이라 `access: undetermined`, 빈 목록)·`codesign --verify --deep --strict`·번들 파이썬에서 `tractus.voices`·`onnx_mlx` 불러오기 통과. 실제 일정 ID로 녹음해 잇기는 확인하지 않았다. |
| 2026-10-30 | v3.78 | **한국어 파인튜닝 엔진을 8bit 변환본으로 교체(브랜치 `feat/univa-8bit`).** 0.5.2에 올린 `asr-ko-univa`가 원본 bf16(4.7GB)이었다(변환·업로드 위치를 정하지 않고 허브 원본을 그대로 등록했다). `mlx_audio.convert -q --q-bits 8 --q-group-size 64 --q-mode affine`로 변환해(표준 엔진과 같은 설정, `model.safetensors` 2,463,307,541바이트로 공식 Qwen3-ASR 1.7B 8bit와 같다) 소유자 계정에 `voyagar/Qwen3-ASR-1.7B-ko-mlx-8bit`(공개, Apache-2.0, 커밋 `8fcc32c4`, 모델 카드에 원 제작자·원본 revision·변환 명령)로 올리고 등록 목록을 바꿨다. ID `asr-ko-univa`·`level_note`는 그대로라 사용자가 고른 엔진 설정은 유지되고, 새 폴더(`qwen3-asr-1.7b-ko-8bit`)를 받을 때까지는 받아 둔 다른 엔진으로 변환한다. 0.5.2로 bf16을 받은 폴더(`qwen3-asr-1.7b-ko-bf16`)는 등록 밖이 되어 `models prune`으로 지운다. 간이 점검: 원본과 출력 차이 CER 2.5, 처리 시간 약 30% 단축(docs/design/asr-engines.md). |
| 2026-10-30 | v3.77 | **0.5.2 릴리스 준비(브랜치 `fix/mic-config-change-crash`).** 버전 0.5.2를 다섯 매니페스트와 잠금 파일에 맞췄다. 0.5.1 이후: 한국어 파인튜닝 엔진 `asr-ko-univa` 등록과 모델 화면 변환 엔진 라디오 목록(v3.75), 장치 전환 중 녹음 프로그램 크래시 수정(v3.76, 이슈 #57). 릴리스 노트 `docs/releases/v0.5.2.md`, 로드맵 항목. |
| 2026-10-30 | v3.76 | **녹음 중 입력 장치가 바뀌면 `tractus-rec`가 죽던 것(이슈 #57, 브랜치 `fix/mic-config-change-crash`).** `AVAudioEngineConfigurationChange` → `Recorder.restart` → `MicSource.open`의 `installTap`이 Objective-C 예외(NSException)를 던져 Swift `do/catch`를 지나 프로세스가 abort됐다(66분 녹음 중 크래시, `recording.json`의 `duration`이 null로 남음). ① `RecorderKit.micFormatProblem`: tap 전에 채널·표본 속도 0과 하드웨어 포맷 불일치를 오류로 던진다(`restart`의 경고와 watchdog 2초 재시도로 넘어감). 음성 처리(에코 제거) 중에는 두 포맷이 다를 수 있어 표본 속도 일치는 보지 않는다. ② `MicSource.stop()`마다 새 `AVAudioEngine`으로 바꾸고 관찰자를 다시 단다(장치가 바뀐 뒤 같은 엔진의 입력 노드가 낡은 포맷을 쥐는 것을 피함). ③ 새 SwiftPM 타깃 `ObjCCatch`(Objective-C, `TractusObjC.catching { }`)로 `installTap`을 감싸 NSException을 Swift 오류로 바꾼다(`recorder/`의 tools-version 5.10·플랫폼은 그대로). 이 Mac의 실제 마이크로 일반·에코 제거 녹음이 정상임은 확인했고, **실제 장치 전환(블루투스 연결·해제)은 재현하지 못했다.** 비정상 종료로 `duration`이 null인 녹음은 앱의 `변환 대기 중인 녹음`에 보이고 코어가 그대로 변환 전 노트로 저장한다는 것을 테스트로 고정했다. |
Expand Down
2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "tractus-app",
"private": true,
"version": "0.5.4",
"version": "0.5.5",
"license": "Apache-2.0",
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion app/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "tractus-app"
version = "0.5.4"
version = "0.5.5"
description = "Tractus 데스크톱 앱"
license = "Apache-2.0"
edition = "2021"
Expand Down
2 changes: 1 addition & 1 deletion app/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Tractus",
"version": "0.5.4",
"version": "0.5.5",
"identifier": "dev.tractus.app",
"build": {
"beforeDevCommand": "pnpm dev",
Expand Down
73 changes: 73 additions & 0 deletions docs/releases/v0.5.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
version: 0.5.5
date: 2026-11-06
summary: 잘못 알아듣는 단어를 모아 두는 사전 화면이 생기고, ⌘K로 노트 열기·앱 동작·내용 검색을 한곳에서 하며, 홈에 이번 주 일정과 노트가 보입니다.
summary_en: A new Vocabulary screen collects the words transcription keeps getting wrong, ⌘K opens notes, runs actions and searches contents in one place, and the home screen shows this week's events and notes.
---
# Tractus v0.5.5

녹음과 메모를 내 Mac 안에서 텍스트로 바꾸고, 요약·검색·AI 질문까지 가능한 앱입니다. 이번 버전은 받아 적기 정확도를 사용자가 직접 높이는 `사전`과, 노트를 빨리 찾아 다루는 ⌘K·이번 주 띠를 더했습니다. (English below)

## 이번 버전에서 바뀐 것

- **`자주 쓰는 단어`가 `사전`이 되고 화면이 따로 생겼습니다.** 사이드바 위 `사전`에서 엽니다.
- Enter로 단어를 더합니다. 쉼표나 줄바꿈으로 나눈 목록을 붙여 넣으면 미리 보고 한 번에 더합니다.
- 줄마다 고치거나 지울 수 있습니다. 지운 뒤에는 알림의 `되돌리기`로 되살립니다.
- **고쳐 쓴 낱말:** 대화 내용에서 직접 고친 낱말 중 사전에 넣을 만한 것을 칩으로 보여 줍니다. 누르면 더하고, ×를 누르면 다시 보이지 않습니다. 글자를 저절로 바꾸지는 않습니다.
- 텍스트로 변환할 때 **최근에 더한 단어부터** 씁니다. 단어가 50개를 넘어도 방금 넣은 단어가 빠지지 않습니다.
- Qwen 계열이 아닌 변환 엔진을 고르면 `사전 단어를 쓰지 않습니다`라고 알려 줍니다.
- **⌘K 빠른 실행 창이 생겼습니다.** ⌘K를 누르면 화면 가운데 창이 열립니다.
- 비어 있을 때는 최근에 고친 노트 5개와 앱 동작(녹음 시작·글쓰기·파일 가져오기·AI 어시스턴트·사전·설정 등)이 보입니다.
- 입력하면 제목이 맞는 노트, 이름이 맞는 동작, 맞는 폴더·태그가 나옵니다. 맨 아래 `내용에서 찾기`로 노트 내용을 검색합니다.
- 노트를 연 채 열면 `이 노트` 묶음에서 즐겨찾기, 태그 편집, 내보내기(Markdown·Word·PDF 등), Obsidian으로 보내기, 폴더로 옮기기를 할 수 있습니다. 자주 쓰지 않는 것은 입력해야 나옵니다(예: `pdf`, `폴더`).
- **홈에 `이번 주` 띠가 생겼습니다.** 월요일부터 일요일까지 날마다 캘린더 일정과 그날 만든 노트를 보여 줍니다.
- 캘린더를 연결하지 않아도 노트는 보입니다.
- 오늘 아직 끝나지 않은 일정에는 녹음 단추가 있습니다.
- 일정으로 녹음한 노트는 그 일정 바로 아래에 들여 써서 보입니다. 반복 일정은 회차마다 따로 잇습니다.
- **안내 말풍선과 빈 요약 화면을 고쳤습니다.**
- 안내 말풍선이 열린 AI 어시스턴트 서랍 위에 뜨거나 대화 줄을 가리지 않습니다.
- 요약이 없을 때 `요약 만들기` 단추를 가리키는 안내 상자가 보입니다.
- **앱이 조금 가벼워졌습니다.** 목소리 프로필 모델을 다른 실행 방식으로 바꿔 큰 라이브러리 하나를 뺐습니다. 등록해 둔 목소리는 다시 등록하지 않아도 되고 결과도 같습니다.
- 내부 구조를 많이 정리했습니다(노트 화면·작업 순서·명령 모듈). 동작은 바뀌지 않았습니다.

## 알아 둘 것

- 예전 버전에서 일정으로 녹음한 노트는 일정 제목이 같을 때만 일정 아래로 이어집니다. 캘린더에서 제목을 바꾸면 따로 보입니다.
- 사전 화면은 영어 화면에서 `Vocabulary`로 보입니다.

## 업데이트·설치

- **v0.1.1 이상을 쓰고 있다면:** 설정 › 업데이트에서 `업데이트 확인` → `업데이트 설치` → `다시 열기`.
- **새로 설치한다면:** DMG를 열고 `Tractus.app`을 `Applications`로 끌어다 놓습니다.
- 처음 열 때 "확인되지 않은 개발자" 경고가 나오면: 시스템 설정 → 개인정보 보호 및 보안 → "그래도 열기" (또는 `xattr -dr com.apple.quarantine /Applications/Tractus.app`)
- **ffmpeg가 필요합니다:** `brew install ffmpeg`
- 노트·모델·설정·사전 파일은 그대로입니다.

## 받을 파일

| 파일 | 설명 |
| --- | --- |
| `Tractus-0.5.5-arm64.dmg` | 설치 파일 (Apple Silicon 전용) |
| `Tractus-0.5.5-arm64.dmg.sha256` | 체크섬. `shasum -a 256 -c Tractus-0.5.5-arm64.dmg.sha256` |
| `Tractus.app.tar.gz`, `.sig`, `latest.json` | 앱 안 업데이트가 쓰는 파일입니다. 직접 받을 필요는 없습니다. |

## 요구 사항

- Apple Silicon(M1 이상), 메모리 16GB 이상 권장(8GB는 저사양 구성)
- macOS 14.4 이상(설계상 최소)

---

## English

Tractus turns recordings and memos into text on your Mac, then summarizes, searches and answers questions about them. **New in 0.5.5: a Vocabulary screen, a ⌘K command window and a This week strip on the home screen.**

- **Vocabulary.** The old frequent-words list is now its own screen (`Vocabulary` at the top of the sidebar). Press Enter to add a word, or paste a comma- or line-separated list and add it in one go. Edit or delete any word; `Undo` in the notice brings a deleted word back. **Words you corrected** shows words you fixed in transcripts as chips: click to add, × to hide. Nothing is replaced automatically. Transcription now uses the **most recently added words first**, so new words are not dropped once you pass 50. If you pick a non-Qwen engine, the screen tells you the vocabulary is not used.
- **⌘K.** Opens a window in the middle of the screen. Empty, it shows your 5 most recently edited notes and app actions. Type to find notes by title, actions by name, and folders & tags; `Search contents` at the bottom searches inside notes. With a note open, **This note** lets you favorite it, edit tags, export (Markdown, Word, PDF and more), send it to Obsidian or move it to a folder. Less common actions appear only when you type (e.g. `pdf`, `folder`).
- **This week.** The home screen shows Monday to Sunday with each day's calendar events and the notes made that day. Notes show even without a calendar. Events today that haven't ended get a record button. Notes recorded from an event sit right under that event; recurring events link per occurrence.
- **Fixes:** tips no longer pop up over the open AI assistant drawer or cover transcript lines, and an empty summary shows a box pointing to `Create summary`.
- **Lighter app:** the voice profile model runs a different way, so one large library is gone. Enrolled voices keep working without re-enrolling, with the same results.
- Notes recorded from an event in older versions link only while the event title is unchanged.
- Install: open the DMG and drag `Tractus.app` to `Applications`; you need `brew install ffmpeg`. The build isn't notarized yet — use System Settings › Privacy & Security › Open Anyway on first launch. Apple Silicon, macOS 14.4+.

Guides: [Setup](https://github.com/sjoon21/Tractus/blob/main/docs/en/setup.md) · [Usage](https://github.com/sjoon21/Tractus/blob/main/docs/en/usage.md) · [Agents (MCP)](https://github.com/sjoon21/Tractus/blob/main/docs/en/mcp.md)
1 change: 1 addition & 0 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
- [x] 0.5.2: 모델 화면 변환 엔진을 라디오 목록 하나로(받지 않은 엔진도 고르면 받기 시작), 한국어 파인튜닝 엔진(TeamUNIVA) 목록에 추가, 녹음 중 입력 장치가 바뀌면 녹음이 죽던 것 수정 (v3.75~v3.77, 이슈 #57)
- [x] 0.5.3: 한국어 파인튜닝 엔진을 8bit 변환본으로 교체(4.7GB → 2.5GB, 약 30% 빠름) (v3.78~v3.79)
- [x] 0.5.4: 스마트 교정 다음 제안 자동 이동·AI 서비스 선택, 노트·녹음 화면 하단 도크, 대화상자 확대, AI 어시스턴트 예시 질문, 설정 구역 바로가기, 사이드바 정리 (v3.80~v3.85)
- [x] 0.5.5: 사전 화면(고쳐 쓴 낱말 제안, 최근에 더한 단어부터 변환에 사용), ⌘K 빠른 실행(노트 열기·앱 동작·내용 검색·이 노트의 동작·폴더·태그), 홈의 이번 주 띠(일정과 그 일정으로 녹음한 노트 잇기), onnxruntime 제거, 노트 화면·작업 줄·cli.py·lib.rs 리팩토링 (v3.86~v3.103)
- [ ] Windows 지원 (MLX를 대신할 런타임, Windows 녹음 프로그램, 설치·서명). 2026-10-22 소유자 결정: macOS에서 충분히 다듬은 뒤로 최대한 미룬다(1.0일 수 있다)
- [ ] 영어 화면에서 실제 AI 요약·노트 완성 품질 확인
- [ ] 깨끗한 Mac(새 계정)과 macOS 14.4~15에서 미리 만든 앱 실행, 내려받은 `.dmg`의 Gatekeeper 동작과 권한 이름 확인
Expand Down
2 changes: 1 addition & 1 deletion plugins/tractus/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "tractus",
"displayName": "Tractus",
"version": "0.5.4",
"version": "0.5.5",
"description": "Your meetings as local memory for Claude Code: search notes, transcripts, decisions and action items recorded on this Mac with Tractus. Nothing leaves your Mac except what Claude reads.",
"author": { "name": "sjoon21", "url": "https://github.com/sjoon21" },
"homepage": "https://github.com/sjoon21/Tractus",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "tractus"
version = "0.5.4"
version = "0.5.5"
description = "Local-first 노트·녹음 도구"
readme = "README.md"
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion site/ko/benchmark/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ <h2>결과</h2>
<h2>측정하면서 알게 된 것</h2>
<ul>
<li><b>언어를 한국어로 고정하면 오히려 나빠집니다.</b> 영어 위주 발화를 번역해 버리고 반복 루프에 빠졌습니다. Tractus 기본값은 언어 자동 감지입니다.</li>
<li><b>용어 힌트(자주 쓰는 단어)는 효과가 있습니다.</b> 용어 재현율이 71.6%에서 84.2%로 올랐습니다. 실제 회의 노트에서도 분야 용어 몇 개를 넣자 "온톨로지" 오인식이 10번에서 0번이 됐습니다(2026-10-18). 그래서 Tractus는 노트 제목과 메모의 낱말을 함께 넣습니다.</li>
<li><b>용어 힌트(사전)는 효과가 있습니다.</b> 용어 재현율이 71.6%에서 84.2%로 올랐습니다. 실제 회의 노트에서도 분야 용어 몇 개를 넣자 "온톨로지" 오인식이 10번에서 0번이 됐습니다(2026-10-18). 그래서 Tractus는 노트 제목과 메모의 낱말을 함께 넣습니다.</li>
<li><b>청크 길이는 거의 상관없습니다.</b> 15·30·60초 청크의 CER은 9.69·9.49·9.39였습니다. 화자가 바뀌는 지점에서 잘라도 CER 차이는 0.1%p였습니다.</li>
<li><b>Whisper에 영어 용어를 프롬프트로 주면 역효과가 납니다.</b> 출력이 영어로 끌려가 CER이 16.7에서 58.3으로 나빠졌습니다.</li>
</ul>
Expand Down
Loading
Loading