документація
Єдина вимога — запущений Docker Desktop. На машину нічого не встановлюється: ні Go, ні компіляторів, ні інструментів пакування.
git clone https://github.com/Vitalii-Yemets/holdtotype cd holdtotype .\build.ps1 # модель small, близько 466 МБ .\build.ps1 -Model medium # точніша, більша
Результат опиняється в dist/:
holdtotype.exetray client: Go, WinAPI, WebView2
whisper-server.exerecognition, whisper.cpp, static build
sherpa-server.exerecognition, sherpa-onnx, official static build, pinned and checksum-verified
sherpa-online-server.exestreaming recognition, sherpa-onnx, from the same pinned archive
llama-server.exethe editor model for post-processing, llama.cpp
models/the model you chose at build time
config.default.jsondefault settings
Крос-компіляція whisper.cpp і llama.cpp через MinGW-w64 у контейнері Linux, клієнт на Go з cgo для захоплення мікрофона, генерація іконок, пакування інсталятора. Усе це в build/Dockerfile. Обидва рушії закріплені на конкретних версіях, тож збірки відтворювані.
Усе теж працює в контейнерах, нічого встановлювати не треба:
docker build --file build/Dockerfile --target gotest . # юніт-тести Go і go vet, ціль Windows docker run --rm -v "${PWD}:/w" -w /w node:20 sh -c "node test/build-page.js && cd test && npm i --no-save --silent jsdom && node ui.test.js" # сторінка налаштувань у jsdom
client/internal/... — юніт-тести частин з логікою: порівняння версій, дублікати сполучень, правила для програм, заміни, голосові команди, історія, ланцюжки промптів, аналіз звуку, хеші файлів і файл списків.test/ui.test.js — справжня сторінка налаштувань у jsdom: перемикання розділів, матриця перекладу, редактор промптів, правила, заміни, команди, історія, видалення моделей, майстер першого запуску і відсутність помилок JavaScript.test/locales.test.js — кожна з восьми мов містить кожен рядок, який потрібен сторінці та програмі.test/setup.test.js — сторінка інсталятора: кроки, вибір моделі, тихі ключі.client/internal/theme — кожен дизайн зберігає своє обличчя, кути, позначки рівня і лампи.Далі запускайте власну збірку замість завантаженої. Це та сама програма, зроблена з тих самих джерел.