Skip to content

Entwicklung

Andre Kirste edited this page Sep 19, 2026 · 1 revision

Entwicklung

Öffentliches npm-Workspaces-Monorepo. Installation nur am Root:

git clone https://github.com/safetraliasoftware/ai-council.git
cd ai-council
npm install
npm run dev
Befehl Zweck
npm run dev Electron im Entwicklungsmodus
npm run typecheck tsc --noEmit in allen Workspaces
npm test Vitest, mehrere Minuten, echte Git-Worktrees und Kindprozesse
npm test --workspace=@ai-council/coding eine Suite
npm run build Produktionsbuild (electron-vite)
npm run dist --workspace=@ai-council/desktop lokale Installer, ohne Publish

Kein ESLint/Prettier im Repo. Erwarteter Stand vor einem Merge: typecheck, test und Desktop-build grün.

ELECTRON_RUN_AS_NODE

Wenn die Dev-App mit app is undefined oder requestSingleInstanceLock stirbt, erbt die Shell oft ELECTRON_RUN_AS_NODE=1 (z. B. aus VS Code/Cursor). Der Launcher apps/desktop/scripts/run-electron-vite.cjs entfernt die Variable. npm run dev immer über dieses Script, nicht über ein nacktes electron-vite aus einer verseuchten Umgebung.

Release schieben

  1. Version in apps/desktop/package.json erhöhen (SemVer, der Auto-Updater vergleicht sie mit dem GitHub-Tag).
  2. Committen und nach origin/master pushen.
  3. Git-Tag vX.Y.Z anlegen und pushen — bevor electron-builder veröffentlicht. Ohne Tag antwortet GitHub mit 422 Published releases must have a valid tag.
  4. Packen und veröffentlichen aus dem Desktop-Projekt, nicht vom Monorepo-Root:
npx electron-builder --projectDir apps/desktop --publish always

npm run dist -- --publish always frisst --publish als npm-Flag. Ein Aufruf ohne --projectDir apps/desktop packt das Root-Paket ohne index.js.

  1. Prüfen, dass genau ein Release für den Tag existiert (nsis und portable dürfen nicht zwei Releases anlegen):
gh api repos/safetraliasoftware/ai-council/releases --jq ".[] | {tag_name, draft, assets: [.assets[].name]}"

Erwartete Assets: Setup-.exe, .blockmap, portable .exe, latest.yml.

Details für Agenten, die im Repo arbeiten: CLAUDE.md.

Clone this wiki locally