Standalone desktop-проект Goose на Electron/React.
Основной runtime-бэкенд goosed живёт в отдельном репозитории redsquad-tech/is_goosed. Для локальной разработки можно подключаться к уже запущенному внешнему серверу, а Windows bundle / MSI собираются с вложенным goosed.exe, скачанным из GitHub Releases backend-репозитория.
- внешний
goosed, уже запущенный отдельно node24.xnpm11.x
Проверенные значения:
node:24.10.0npm:11.6.1
npm installДля локального сервера на https://127.0.0.1:3000:
GOOSE_EXTERNAL_BACKEND=true \
GOOSE_PORT=3000 \
GOOSE_SERVER__SECRET_KEY=qwerty \
npm run start-guiЧто делают переменные:
GOOSE_EXTERNAL_BACKEND=trueотключает запуск встроенного backendGOOSE_PORT=3000направляет desktop наhttps://127.0.0.1:3000GOOSE_SERVER__SECRET_KEYдолжен совпадать с секретом вашегоgoosed
Запуск в debug-режиме:
GOOSE_EXTERNAL_BACKEND=true \
GOOSE_PORT=3000 \
GOOSE_SERVER__SECRET_KEY=qwerty \
npm run start-gui-debugДля CI используется workflow bundle-desktop-windows.yml, локально команда такая:
npm run bundle:windowsWorkflow Windows-сборки:
- скачивает
goosed-windows-x86_64.zipиз release репозиторияredsquad-tech/is_goosed - распаковывает
goosed.exeвsrc/bin - собирает
ddg-search.exeчерез Go и кладёт его вsrc/bin - собирает bundled Python 3.12 runtime в
src/bin/python-runtime - устанавливает
crawl4ai==0.8.6иmarkitdown[all]==0.1.5в этот runtime - собирает bundled OCR runtime в
src/bin/ocr-runtime(tesseract.exe,pdftoppm.exe,tessdata) - скачивает браузерные бинарники Playwright/Patchright в
src/bin/ms-playwright - добавляет Windows wrapper
crwl.cmdвsrc/binдля запускаcrawl4aiчерез bundledpython.exe - добавляет Windows wrapper
markitdown.cmdвsrc/binдля запуска document-конвертации - собирает portable zip и
msi
Эти CLI-бинарники едут в resources/bin рядом с goosed.exe, поэтому встроенный backend может вызывать:
ddg-search.exeдляsearch_webcrwl.cmdдляread_web_pagemarkitdown.cmdдляread_documentocr-runtime/tesseract.exe+ocr-runtime/pdftoppm.exeдля OCR fallback вread_document(PDF/image -> OCR)
Версия backend выбирается так:
- если при ручном запуске workflow передан
goosed_version, используется он - иначе, если задан repository variable
GOOSED_VERSION, используется он - иначе workflow берёт latest release tag из репозитория
redsquad-tech/is_goosed
Если redsquad-tech/is_goosed приватный, в репозитории is_goose нужен GitHub Actions secret IS_GOOSED_RELEASE_TOKEN с доступом на чтение релизов/contents backend-репозитория.
Локальный dev-запуск по-прежнему можно делать против внешнего backend:
- через env
GOOSE_EXTERNAL_BACKEND,GOOSE_PORT,GOOSE_SERVER__SECRET_KEY
Env-переменная GOOSE_PORT работает только для 127.0.0.1, поэтому текущий dev-сценарий с внешним backend рассчитан на локальный сервер или SSH-port-forwarding до localhost.
В этом проекте создание новой сессии захардкожено со scope:
['croc_test_260325']Это сделано в src/sessions.ts.