No description
  • Go 82.3%
  • TypeScript 9.5%
  • HTML 4.5%
  • SCSS 3.6%
  • Dockerfile 0.1%
Find a file
2026-05-29 15:07:19 +03:00
.vscode Добавление исключений директорий из сканирования 2026-05-29 10:33:26 +03:00
cmd/cabmem Тесты 2026-05-29 08:59:25 +03:00
docs Разработка идеи с чатиком 2026-05-29 15:07:19 +03:00
frontend Переработка дерева в Dashboard 2026-05-29 10:55:09 +03:00
internal Разработка идеи с чатиком 2026-05-29 15:07:19 +03:00
testdata/articles Интеграционные тесты на основе переменных окружений 2026-05-21 10:01:59 +03:00
.dockerignore Исправление ошибки сборки 2026-05-28 12:33:44 +03:00
.gitignore Переработка дерева в Dashboard 2026-05-29 10:55:09 +03:00
.woodpecker.yml Разработка идеи с чатиком 2026-05-29 15:07:19 +03:00
continue.sh Отображение dataset в web-интерфейсе 2026-05-27 14:59:44 +03:00
Dockerfile Fix CI 2026-05-28 15:42:56 +03:00
generate.go Формирование документации OpenAPI 2026-05-25 11:30:10 +03:00
go.mod update modules 2026-05-28 15:49:05 +03:00
go.sum Реализация Watcher 2026-05-28 11:20:43 +03:00
LICENSE first commit 2026-05-15 12:10:45 +03:00
README.md Добавление README 2026-05-28 14:03:27 +03:00

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/: