Development
The two-location model (until @helex/* are published)
TEDY consumes the shared @helex/* libs via source aliases (../../core/frontend/libs/*/src), which only resolve when the module sits inside an EMR checkout at <emr>/modules/tedy/frontend. So:
helex-tx(this repo) = canonical source of truth — versioned, reviewed, backed up.- An EMR checkout = the dev/run environment. Use a worktree at
origin/mainfor current libs:.claude/worktrees/tedy-main. - TEDY is git-ignored inside the EMR checkout (via that clone’s
.git/info/exclude), so it never enters EMR history.
Move source between the two — and guard against drift — with scripts/sync-emr.sh:
EMR=/Users/igor/source/emr/repo/.claude/worktrees/tedy-main
./scripts/sync-emr.sh "$EMR" push # helex-tx -> EMR checkout (deploy source)
./scripts/sync-emr.sh "$EMR" pull # EMR checkout -> helex-tx (capture edits)
./scripts/sync-emr.sh "$EMR" check # exit 1 if diverged — run before committing
Phase 3 removes this: publish @helex/* to a registry, and helex-tx builds standalone against the packages.
Run
# one-time: install shared libs' deps + the module's deps in the EMR checkout
cd "$EMR/modules/core/frontend" && npm install
cd "$EMR/modules/tedy/frontend" && npm install
# configure the backend (no deployment URLs are committed) — copy + edit:
cp .env.example .env.local # set VITE_TX_TARGET + VITE_TX_PUBLISHER_{VS,CS}_URL
VITE_TX_TARGET=https://your-terminology-server.example npm run dev # http://localhost:18620/tedy/
- Backend: the dev server proxies
/txapi→${VITE_TX_TARGET}/api.VITE_TX_TARGETis required — there is no committed default (a neutral placeholder resolves nothing). Publisher display names needVITE_TX_PUBLISHER_VS_URL/VITE_TX_PUBLISHER_CS_URL(seesrc/config/tx.ts+.env.example). - Auth: DEV auto-signs-in a guest (
Bearer yupion/txapi; a Vite stub answers/api/uma/*). Disable withVITE_TX_GUEST=0. Production/federation auth is separate (Keycloak OIDC — tracked).
Verify (against consumers, not the lib build)
cd "$EMR/modules/tedy/frontend" && npx tsc -p tsconfig.json --noEmit # Vite skips tsc
Then confirm in the browser. Follow AGENTS-frontend.md; keep EN+ET+RU locale files in src/i18n/ in sync with any new t() key.