No description
- Go 82.3%
- TypeScript 9.5%
- HTML 4.5%
- SCSS 3.6%
- Dockerfile 0.1%
| .vscode | ||
| cmd/cabmem | ||
| docs | ||
| frontend | ||
| internal | ||
| testdata/articles | ||
| .dockerignore | ||
| .gitignore | ||
| .woodpecker.yml | ||
| continue.sh | ||
| Dockerfile | ||
| generate.go | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
cabmem
cabmem (cabinet memory) — система систематизации и обработки личного архива знаний. Альтернативное название: Palace of the Mind / Чертоги разума.
Хранение — иерархия Markdown-файлов с YAML frontmatter. Два интерфейса: CLI и Angular SPA (встраивается в единый бинарник).
Возможности
- Управление заметками — создание, редактирование, удаление, перемещение, дублирование
- Frontmatter — автоматическое заполнение (ID, даты), LLM-генерация (summary, tags, keywords, language), NER-извлечение графа знаний
- Иерархическая структура — дерево директорий, навигация, flat-просмотр
- Семантический поиск — embedding-поиск (косинусная близость) + фильтрация по метаданным
- Граф знаний — извлечение сущностей и связей через NER, локальные графы документов, глобальная агрегация, визуализация (D3.js)
- Теги — ручное и авто-тегирование, облако тегов, фильтрация
- Связи — ручные (frontmatter links, wikilinks), автоматические (семантические, через общие сущности)
- Dataset — табличные данные в frontmatter, внешних файлах или внешних БД (SQLite/PostgreSQL/MySQL) с импортом/экспортом
- Импорт/экспорт — Markdown, HTML→Markdown, буфер обмена, пакетный импорт директорий, дедупликация по SHA256
- CLI — полный набор команд (
new,edit,delete,move,list,search,show,import,export,index,ner,llm,dataset,sync,backup,doctor,serve) - Web UI — Angular SPA: просмотр/редактирование заметок, дерево архива, поиск, граф знаний, датасеты, Swagger UI
- Watcher — авто-синхронизация БД с файловой системой через fsnotify
- Git-friendly — человекочитаемые diff'ы, файлы открываются в любом редакторе
Архитектура
cabmem/
├── cmd/cabmem/ # Точка входа (единый бинарник)
├── internal/
│ ├── cli/ # CLI-команды (go-simple-args)
│ ├── api/ # REST API (Echo, JSON)
│ ├── core/ # Бизнес-логика
│ │ ├── note/ # CRUD заметок
│ │ ├── frontmatter/ # Парсинг/генерация YAML
│ │ ├── linker/ # Связи между заметками
│ │ ├── tag/ # Теги
│ │ ├── embedding/ # Векторизация + косинусный поиск
│ │ ├── knowledgegraph/ # Глобальный граф знаний
│ │ └── logging/ # JSONL-логирование
│ ├── storage/ # FS (md-файлы) + DB (GORM → SQLite)
│ ├── llm/ # LLM-клиент (llm-simple-api)
│ ├── ner/ # HTTP-клиент NER-сервиса
│ └── ui/ # REST-хендлеры + встроенная SPA
├── frontend/ # Angular SPA
└── docs/ # Документация
Внешние сервисы
| Сервис | Репозиторий | Назначение |
|---|---|---|
| NER | https://git.ymnuktech.ru/ymnuk/service-ner.git |
Извлечение сущностей и связей из текста (эндпоинт POST /kg) |
| Embedding | https://git.ymnuktech.ru/ymnuk/service-embedding.git |
Генерация векторных представлений текста |
| LLM | Любой OpenAI-совместимый провайдер | Генерация summary, tags, keywords, language |
LLM может использовать любого OpenAI-совместимого провайдера. Испытания проводились на LM Studio с моделями:
qwen3.5-2b(дефолт, быстрая)google/gemma-4-e2b(рекомендуется для русского языка)
Быстрый старт
# 1. Инициализация архива
cabmem init --path ~/.cabmem
# 2. Настройка .env
# CABMEM_SERVICES_NER_URL=http://ner:8000
# CABMEM_EMBEDDING_URL=http://embedding:8000
# CABMEM_LLM_BASE_URL=http://localhost:1234/v1 # LM Studio
# 3. Создание заметки
cabmem new "Моя первая заметка" --type article
# 4. Запуск веб-сервера
cabmem serve
# 5. Семантический поиск
cabmem search "поисковый запрос"
Конфигурация
Настройки — два файла в корне архива:
settings.json— публичные настройки (пути, адреса сервисов, модели). Безопасен для коммита..env— секреты (API ключи, пароли). Добавляется в.gitignore.
Приоритет: CLI флаги > .env > settings.json > значения по умолчанию.
{
"archive": { "path": "~/.cabmem" },
"server": { "host": "localhost", "port": 3000 },
"services": {
"ner": { "url": "http://ner:8000" }
},
"embedding": {
"url": "http://embedding:8000",
"model": "nomic-embed-text"
},
"llm": {
"provider": "ollama",
"base_url": "http://localhost:11434/v1",
"model": "qwen3.5-2b"
},
"logging": { "level": "info", "file": "cabmem.log.jsonl" }
}
Сборка
# Без фронтенда
CGO_ENABLED=0 go build -o cabmem ./cmd/cabmem/
# С фронтендом
cd frontend && npm ci && npm run build -- --output-path=dist
rm -rf ../internal/ui/embed/* && cp -r dist/* ../internal/ui/embed/
cd .. && CGO_ENABLED=0 go build -o cabmem ./cmd/cabmem/
Технологии
| Компонент | Технология |
|---|---|
| Язык | Go 1.26+ |
| CLI | go-simple-args |
| БД | GORM + SQLite (modernc.org/sqlite, без CGo) |
| Веб-сервер | labstack/echo |
| Фронтенд | Angular + Angular Material |
| LLM | llm-simple-api (OpenAI-совместимые провайдеры) |
| NER | service-ner (HTTP/JSON, эндпоинт POST /kg) |
| Embedding | service-embedding (OpenAI-совместимый API) |
| CI/CD | WoodpeckerCI |
| Лицензия | MIT |
Документация
Полная документация — в docs/:
- Техническое задание
- Схема БД
- REST API (также доступен Swagger UI:
/swagger/index.html) - CLI Reference
- CI/CD