🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Posljednje ažuriranje: 2026-08-28 — v3.8.51 Pojednostavljen tijek izdanja koji koristi vještine alata Claude Code za automatizaciju.
Održavajte red čekanja/granu zelenima između izdanja: pogledajte RELEASE_GREEN.md (obitelj
/green-prs+npm run check:release-green+/babysit+ noćno pokretanje). Povremeno pokretanje ovoga — a osobito prije ovog kontrolnog popisa — omogućuje da PR izdanja započne zelen.
# 1. Povećajte verziju i generirajte CHANGELOG (vještina)
/version-bump-cc patch # ili minor/major
# 2. Lokalno pokrenite provjeru kvalitete
npm run check # lint + testovi
npm run test:coverage # potpuna provjera pokrivenosti (60/60/60/60)
# 3. Izgradnja i osnovna provjera
npm run build
npm run test:e2e # neobavezno, ali preporučeno
# 4. Generirajte izdanje (vještina)
/generate-release-cc
# 5. Implementirajte (vještina)
/deploy-vps-both-cc # ili akamai-cc / local-cc
# 6. Prikupite dokaze o izdanju (vještina)
/capture-release-evidences-ccnpm-publish.yml prema zadanim postavkama objavljuje putem npm Trusted Publishing (OIDC): posao
stage-npm (koji se izvodi na GitHubovu hostiranom izvršitelju) razmjenjuje GitHubov id-token za kratkotrajnu npm
vjerodajnicu za to pokretanje — bez dugotrajnog npm tokena u tajnama repozitorija, bez upita za 2FA, uz priložen dokaz o podrijetlu.
To je zaobilazni mehanizam koji npm sada odobrava jer se tokeni koji preskaču 2FA povlače iz upotrebe;
njime se vraća potpuno automatski tijek koji je projekt imao do v3.8.48, uz zadržavanje
jamstva WS1.3 (procurjeli token ne može samostalno objavljivati — token ne postoji).
Jednokratno postavljanje (vlasnik): npmjs.com → paket omniroute → Settings → Trusted
Publisher → GitHub: vlasnik diegosouzapw, repozitorij OmniRoute, tijek rada npm-publish.yml
(okruženje: nijedno). Dok to ne postoji, automatski korak ne uspijeva uz ENEEDAUTH:
ponovno ga pokrenite s publish_mode=staged (u nastavku) ili direct.
Tijek rada npm-publish više ne objavljuje izravno: pokreće zapakiranu tarball arhivu
(check:pack-boot), a zatim izvršava npm stage publish — točno ti bajtovi smještaju se u
registar, ali ih nije moguće instalirati dok ih vlasnik ne odobri. Ljudska 2FA provjera premještena je
NAKON dokaza, a ne prije njega.
Tijek za vlasnika nakon što tijek rada postane zelen:
npm stage list omniroute— pronađite ID pripremljenog izdanja (ispisuje se i u sažetku tijeka rada).- Provjerite pripremljene bajtove (preporučeno):
npm stage download <id>, zatim instalirajte preuzetu tarball arhivu u privremeni prefiks i pokrenite je (npm run check:pack-bootautomatizira istu provjeru paketiranja→instaliranja→pokretanja u CI-ju). npm stage approve <id>— 2FA upit JEST objavljivanje.npm stage reject <id>odbacuje pripremljeno izdanje.- Zaštitna provjera nakon objavljivanja: provjeravatelj nakon objavljivanja (WS1.4 iz plana za v3.8.49) instalira objavljenu verziju iz javnog registra u čistom spremniku i pokreće je.
Pričuvna opcija za hitne slučajeve: workflow_dispatch s publish_mode=direct vraća
naslijeđeni neposredni npm publish (upotrijebite samo ako priprema ne funkcionira ispravno; zabilježite razlog).
Jednokratno sigurnosno ojačavanje (vlasnik, npmjs.com): konfigurirajte Trusted Publisher za
omniroute u načinu rada samo s pripremom kako procurjeli dugotrajni token ne bi mogao izvršiti npm publish
izravno niotkuda — CI može samo pripremiti izdanje; objaviti ga može samo vlasnik putem 2FA.
Postupak za neispravne artefakte (nepromijenjen): npm deprecate omniroute@<bad> "<reason> — use <fixed>"
kao zadana reakcija (traje nekoliko minuta, povratno je); npm unpublish samo unutar razdoblja od 72 sata i ako nema ovisnih paketa
te nikada kao prvi potez. Docker: nikada nemojte ponovno zapisivati oznaku verzije — vraćanje je
preusmjeravanje oznake latest na posljednji ispravan sažetak.
Docker Hub latest (obavezno pri svakom stabilnom SemVer objavljivanju): tijek rada
docker-publish mora označiti i X.Y.Z i, kada
should-promote-latest.sh potvrdi da je to najviši stabilni SemVer, :latest
s istim sažetkom. Nakon posla: sažetak oznake latest na Hubu mora biti jednak sažetku novog
SemVer izdanja, a last_updated mora biti ažuriran. Nemojte ostaviti :latest na starijoj
izgradnji dok bilješke o izdanju govore o ispravcima koji postoje samo u gitu. Compose
primjeri za brzi početak koriste :latest; GitOps bi trebao nastaviti prikvačivati X.Y.Z. Pogledajte
Kanali Docker izdanja i #10317.
PR s oznakom hotfix preskače opsežnu CI matricu (E2E s 9 segmenata, prag
pokrivenosti, quality-gate, quality-extended) i zadržava brze provjere s jakim signalom: izgradnju,
segmente jediničnih testova, integracijske testove, vitest, lint/provjeru tipova, docs-sync, check:pack-artifact
i provjeru pokretanja iz tarballa (check:pack-boot). Cilj: zelen status za ≤15 min umjesto ~33 min.
Pravila ulaska — sva četiri uvjeta su obvezna (po uzoru na hitne staze projekata Chromium/VS Code/Node):
- Ozbiljnost: produkcija ne radi — objavljeni artefakt ruši se pri pokretanju / sigurnosna ispravka / pogođen je svaki korisnik izdanja. „Važno” ne znači „ne radi”.
- Ovlaštenje: samo vlasnik repozitorija primjenjuje oznaku
hotfix. Oznaka JEST odobrenje — nikad je nemojte samostalno primijeniti na PR kampanje. - Dokazi: tijelo PR-a sadrži poveznicu na prethodno potpuno zeleno opsežno izvođenje (skup testova koji bi preskočeni poslovi ponovno provjerili) te test same ispravke koji prvo ne prolazi, a zatim prolazi.
- Opseg: isključivo cherry-pick — minimalna ispravka, bez refaktoriranja i usputnih promjena.
Preskočena površina pokrivenosti/pragova ponovno se provjerava pri sljedećem potpunom izvođenju na
grani izdanja (kontinuirano zeleno izdanje) — staza preskače ČEKANJE, nikad provjeru valjanosti.
Promjene samo u testovima (sve datoteke pod tests/, nijedna pod tests/e2e/) automatski preskaču E2E
matricu, bez ikakve oznake.
- Svi PR-ovi namijenjeni ovom izdanju spojeni su u
release/vX.Y.0 - Sve otvorene stavke u Linearu/problemi za ovu verziju zatvoreni su ili pomaknuti u sljedeću ključnu etapu
- CI je uspješan na grani
release/vX.Y.0 - U kodu nema oznaka
TODO(release):grep -r "TODO(release)" src/ open-sse/ - Osnovna Docker slika ažurirana je (trenutačno
node:24.15.0-trixie-slim)
- Pokrenite
/version-bump-cc <patch|minor|major>(vještina Claude Codea)- Povećava verziju u
package.json,electron/package.json - Ponovno generira
CHANGELOG.mdiz git commitova od posljednje oznake - Ažurira značke u README.md
- Povećava verziju u
- Ručno pregledajte CHANGELOG.md i po potrebi uredite poruke commitova
- Provjerite je li najnoviji semver odjeljak u
CHANGELOG.mdjednak verziji upackage.json - Zadržite
## [Unreleased]kao prvi odjeljak zapisa promjena za predstojeći rad - Ažurirajte
docs/openapi.yaml→info.versionmora biti jednak verziji upackage.json
-
npm run lint— 0 pogrešaka (upozorenja su postojala i prije) -
npm run typecheck:core— bez pogrešaka -
npm run typecheck:noimplicit:core— bez pogrešaka (strogo) -
npm run check:cycles:ratchet— unutar zamrznute gornje granicemetrics.cycles(samostalnicheck:cycleszavršava kodom 1 pri bilo kojem ciklusu, #15281) -
npm run check:any-budget:t11— unutar dopuštenog proračuna -
npm run check:route-validation:t06— bez pogrešaka -
npm run check:node-runtime— zadovoljena je najniža podržana verzija izvođenja (>=22.22.2 <23,>=24.0.0 <27, premaSUPPORTED_NODE_RANGEusrc/shared/utils/nodeRuntimeSupport.ts; usklađeno senginesupackage.json)
-
npm run test:unit— prolazi -
npm run test:vitest— prolazi (MCP poslužitelj, autoCombo, predmemorija) -
npm run test:coverage— zadovoljen prag 60/60/60/60 (naredbe/retci/funkcije/grane) -
npm run test:integration— prolazi (ako promjene utječu na bazu podataka / rukovatelje) -
npm run test:combo:matrix— prolazi (matrica kombiniranih strategija: deterministički dokazuje odluke odabira za svih 19 javnih strategija usmjeravanja; pokrenite kada mijenjate kombinirano usmjeravanje, razrješavanje strategija ili pričuvnu logiku) -
RUN_COMBO_LIVE=1 npm run test:combo:live— neobavezno/ručno (uvjetovani probni test prema stvarnim vanjskim sustavima; dohvaća snimku baze podataka samo za čitanje s VPS-aroot@192.168.0.15; poziva stvarne pružatelje usluga, troši kredite; nikada se ne izvodi u CI-ju; uredno se preskače bez uvjeta) -
npm run test:combo:live:vps— neobavezno/ručno (VPS probni test uživo 3. faze: 7 HTTP scenarija prema aktivnom poslužitelju.15putem čistog Node ESM-a; zahtijevassh root@192.168.0.15; stvara/briše samo kombinacije__live_test__*; poziva stvarne pružatelje usluga; nikada se ne izvodi u CI-ju) -
npm run test:e2e— prolazi (promjene korisničkog sučelja) -
npm run test:protocols:e2e— prolazi (MCP/A2A promjene) -
npm run test:ecosystem— prolazi
Husky kuke nalaze se u .husky/ i automatski se pokreću tijekom git operacija.
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: brze determinističke provjere —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(aktivirano 2026-06-13). Namjerno isključujetest:unit(sporo; pokriveno CI zadatkomtest-unit).- Ručno pokrenite
npm run test:unitprije slanja grana izdanja.
- Ručno pokrenite
Ako kuka ne uspije: ispravite temeljni problem, nemojte je zaobići opcijom --no-verify.
Svi commitovi namijenjeni izdanju moraju slijediti format type(scope): subject.
Valjane vrste: feat, fix, refactor, docs, test, chore, perf, style, ci
Valjani opsezi: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authz
Prijelomne promjene: dodajte podnožje BREAKING CHANGE: ili ! nakon opsega (npr. feat(api)!: drop /v0).
-
npm run check:docs-syncprolazi (automatski ga pokreće pre-commit) -
npm run check:docs-allprolazi (objedinjena provjera: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links) -
npm run check:env-doc-synczavršava kodom 0 — ugovor okruženja između koda ↔.env.example↔docs/reference/ENVIRONMENT.mdostaje očuvan -
npm run check:doc-linkszavršava kodom 0 — nakon restrukturiranja nema neispravnih internih markdown referenci -
docs/architecture/ARCHITECTURE.mdpregledan je radi odstupanja u pohrani/izvođenju -
docs/guides/TROUBLESHOOTING.mdpregledan je radi odstupanja varijabli okruženja i operativnih postupaka - Ako je
.env.examplepromijenjen: ažuriran jedocs/reference/ENVIRONMENT.md - Ako nova značajka ima korisničko sučelje: spomenuta je u
docs/guides/USER_GUIDE.md - Ako nova značajka ima API: ažurirani su
docs/reference/API_REFERENCE.md+docs/openapi.yaml - Ako je nova značajka modul: postoji namjenski
docs/<MODULE>.md - Ako je riječ o prijelomnoj promjeni:
docs/guides/TROUBLESHOOTING.mdsadrži napomenu o migraciji
-
npm run i18n:checkzavršava kodom 0 — stanje prijevoda (.i18n-state.json) sinkronizirano je s izvornim dokumentima (nema odstupanja izvora u strogom načinu rada; upozorenje u načinu upozoravanja prihvatljivo je za posljednje dorade dokumentacije, ali prije označavanja izdanja rezultat bi trebao biti 0) -
npm run i18n:check-ui-coveragezavršava kodom 0 — svaki lokalitet korisničkog sučelja doseže ili premašuje prag pokrivenosti od 80% -
npm run i18n:sync-ui:dryprijavljuje 0 ključeva koji nedostaju u svih 66 ciljnih lokaliteta (svaki lokalitet osim izvornogen) - Ako su se promijenili izvorni dokumenti na engleskom, prije označavanja izdanja pokrenite
npm run i18n:run(zahtijevaOMNIROUTE_TRANSLATION_API_KEYu.env) - Doprinosi prijevodima mogu se odgoditi do sljedećeg izdanja ako su manji (zabilježite u CHANGELOG-u)
- Ako
src/lib/db/migrations/sadrži nove datoteke:- Svaka je migracija idempotentna (
CREATE TABLE IF NOT EXISTS, itd.) - Migracije su obuhvaćene transakcijama
- Ispravno su numerirane (bez praznina u slijedu)
- Svaka je migracija idempotentna (
- Testirajte na svježoj instalaciji: izbrišite
~/.omniroute/omniroute.dbi pokrenitenpm run dev - Testirajte na postojećoj instalaciji: izradite sigurnosnu kopiju baze podataka, pokrenite migraciju i provjerite shemu
- WAL datoteke (
-wal,-shm) ispravno se obrađuju ako migracija ponovno zapisuje tablice
- Zod shema u
src/shared/constants/providers.tsvaljana je pri učitavanju- Svi pružatelji imaju obavezna polja (
id,label,kinditd.) -
freeNoteje naveden za nove besplatne pružatelje - OAuth pružatelji imaju
oauthConfigregistriran usrc/lib/oauth/constants/oauth.ts
- Svi pružatelji imaju obavezna polja (
- Ako je dodan novi pružatelj: odgovarajući izvršitelj nalazi se u
open-sse/executors/ - Ako format nije OpenAI: prevoditelj se nalazi u
open-sse/translator/ - Modeli su registrirani u
open-sse/config/providerRegistry.ts - Jedinični testovi u
tests/unit/pokrivaju klasifikaciju i usmjeravanje pružatelja
Ako je electron/ promijenjen:
-
npm run electron:smoke:packagedprolazi - Međuverzije su testirane za barem jedan od
:win,:mac,:linux - Certifikati za potpisivanje koda nisu istekli (ako se potpisuje)
- Verzija u
electron/package.jsonodgovara verziji u korijenskompackage.json - Pokazivač kanala za automatsko ažuriranje ažuriran je ako se izdaje na
stable
Repozitorij koristi tri različita izlazna direktorija — nikada ih nemojte pomiješati:
| Direktorij | Svrha | Prati se? |
|---|---|---|
src/ |
Izvorni kod aplikacije (TypeScript / TSX) | Da |
.build/ |
Međurezultati izgradnje — izlaz naredbe next build (distDir) |
Ne (ignorira ga git) |
dist/ |
npm paket spreman za distribuciju — sastavlja ga assembleStandalone |
Ne (ignorira ga git) |
Napomena za operatera: direktorij slike na udaljenom VPS-u ostaje
/usr/lib/node_modules/omniroute/app/. Premješten je samo izlaz izgradnje unutar repozitorija (app/→dist/). Vještine za implementaciju rsyncom prenose sadržaj direktorijadist/u udaljeni direktorijapp/— promjene putanja na VPS-u nisu potrebne.
Tijek jedne izgradnje:
npm run build:release
└─ rm -rf .build dist (čišćenje)
└─ next build → .build/next/ (međurezultati)
└─ assembleStandalone (kopira standalone + static + public + natives → dist/)
└─ zapisuje dist/BUILD_SHA (HEAD kontrolna oznaka)
NEMOJTE pokretati npm run build, a zatim zasebno npm run build:cli za implementaciju — upotrijebite
npm run build:release, koji jednom naredbom izvodi čistu ponovnu izgradnju i stvara kontrolnu oznaku.
-
npm run build:releaseuspijeva idist/BUILD_SHA==git rev-parse --short HEAD -
npm run check:pack-artifactprolazi bez problema — nemaapp.__qa_backup,scripts/scratch,package-lock.jsonni drugih lokalnih ostataka -
dist/server.jspostoji nakon izgradnje - Neobavezna lokalna brza provjera zapakiranog izvršnog okruženja:
npm run dev:candidate -- validatenakonnpm run dev:candidate -- buildpokreće zapakirani tarball u izoliranomDATA_DIRi provjerava/api/health+/v1/models(pogledajte Preporučeni postupak za doprinos)
- Pokrenite
/generate-release-cc(vještina za Claude Code):- Stvara oznaku
vX.Y.Z - Šalje oznaku i granu
- Otvara GitHub izdanje s tekstom dnevnika promjena
- Prilaže instalacijske programe za Electron (ako su izrađeni)
- Stvara oznaku
- Ili ručno:
git tag -a vX.Y.Z -m "Release vX.Y.Z" git push origin vX.Y.Z gh release create vX.Y.Z --notes-from-tag
Vještine za implementaciju koriste lagani tijek rsynca — bez npm pack i bez npm i -g:
- Upotrijebite vještinu za implementaciju koja odgovara odredištu:
/deploy-vps-local-cc— lokalni VPS (192.168.0.15)/deploy-vps-akamai-cc— Akamai VPS (69.164.221.35)/deploy-vps-both-cc— oba
- Prije implementacije potvrdite da je
dist/BUILD_SHA==git rev-parse --short HEAD - Izgradnja se mora pokrenuti ondje gdje je
node_modulesstvaran (glavna radna kopija ili radno stablo u kojem je pokrenutnpm ci— NE radno stablo sa simboličkom poveznicom) - Provedite brzu provjeru implementirane instance:
- Otvorite
/dashboard/health→ provjerite odgovara li niz verzije izdanju - Pokrenite zahtjev
/v1/chat/completionsprema poznatom pružatelju - Provjerite vraća li
/api/monitoring/healthprekidače strujnog kruga sa stanjemCLOSED - Potvrdite da MCP transporti odgovaraju (
/mcpHTTP,/mcp-sseSSE)
- Otvorite
- Pokrenite
/capture-release-evidences-cc(vještina za Claude Code)- Snima WebP snimke zaslona/videozapise novih značajki
- Prilaže ih bilješkama o izdanju / objavi na blogu
- Ažurirajte GitHub Discussions / Discord objavom o izdanju
- Otvorite ključnu etapu za sljedeću verziju
- Ako je kritično: prikvačite raspravu ili objavite u
news.jsonradi prikaza natpisa unutar aplikacije
Objava Radara namjerno je predana s active: false. Aktivacija je zasebna
promjena nakon što se pruže dokazi za svaku stavku u nastavku:
- Svi naslagani PR-ovi za Radar spojeni su i CI vrha izdanja prolazi
- Implementirajte i brzo provjerite OSS rute Radara dok je
RADAR_ENABLEDi dalje zadano isključen - Brzo provjerite
GET /planos,/termos,/privacidadei/reembolsona imenovanom hostu Radara - Zabilježite identitet/kontakt/adresu operatera i pravni pregled koji je odobrio vlasnik u privatnoj usluzi
- Testirajte Stripe Checkout i potpisani webhook samo u testnom načinu rada
- Testirajte jednu šifriranu isporuku transakcijske e-pošte s odobrenim pošiljateljem/domenom
- Dokažite vraćanje sigurnosne kopije i jedno nadzirano pokretanje istraživanja s ograničenim proračunom
- Odobrite pravila pregleda BRL/PIX prije prihvaćanja dokaza o donaciji
- Omogućite javni Checkout tek nakon prethodnih kontrolnih točaka, a zatim aktivirajte novi ID u
news.json - Provjerite koristi li natpis na početnoj stranici lokalizirani tekst i pojavljuje li se novi ID nakon odbacivanja starijeg ID-a
Prije objave bilo kojeg izdanja koje uključuje promjene ugrađenih usluga provjerite:
Pokretanje sa svježom bazom podataka (otkriva kolizije migracija — dodano nakon hitnog popravka za v3.8.4)
-
DATA_DIR=$(mktemp -d) npm start &— pričekajte 10 s da se sustav pokrene -
curl -s http://127.0.0.1:20128/api/services/9router/status | jq '.tool'vraća"9router"(NE 404, NE 500). Potvrđuje da je migracija071_services.sqlprimijenjena i redak inicijalno dodan. -
sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(version_manager);" | grep -E "provider_expose|logs_buffer_path|last_sync_at"vraća 3 retka. -
sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(webhooks);" | grep -E "kind|metadata_encrypted"vraća 2 retka (potvrđuje da je070_webhooks_kind_metadata.sqlprimijenjen). -
node --import tsx/esm --test tests/unit/db/no-migration-collisions.test.tsprolazi — štiti od budućih kolizija.
-
POST /api/services/9router/installvraća 200 sinstalledVersionza manje od 2 min -
POST /api/services/9router/startvraća 200 istate: "running"za manje od 30 s -
GET /api/services/9router/statusprijavljujehealth: "healthy" -
POST /v1/chat/completionss"model": "9router/auto/..."vraća 200 (usmjeravanje od početka do kraja kroz 9Router) -
GET /dashboard/providers/services/9router/embed/dashboardprikazuje izvorno korisničko sučelje 9Routera unutar proxyja (bez izravnog iframea127.0.0.1:port) -
POST /api/services/9router/rotate-keyvraća{ keyRotated: true }, a usluga se ponovno pokreće bez pogrešaka -
POST /api/services/9router/stopvraća 200 istate: "stopped" -
GET /api/services/9router/logs?tail=50vraća SSE tok s događajemsnapshotkoji sadržava nedavne retke - Instalacija u okruženju bez naredbe
npmu varijabli PATH vraća 500 s razumljivom porukom o pogrešci (bez praćenja stoga)
-
POST /api/services/cliproxy/installvraća 200 za manje od 2 min -
POST /api/services/cliproxy/startvraća 200 istate: "running"za manje od 30 s -
GET /api/services/cliproxy/statusprijavljujehealth: "healthy" -
POST /api/services/cliproxy/stopvraća 200 istate: "stopped" -
GET /api/services/cliproxy/logs?tail=50vraća SSE tok
-
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/9router/startvraća403 LOCAL_ONLY -
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/cliproxy/startvraća403 LOCAL_ONLY - Odgovori s pogreškama iz
/api/services/*ne sadržavajuerr.stackni apsolutne putanje datoteka
Prije objave bilo kojeg izdanja v3.8.x provjerite i sljedeće stavke:
-
omniroute --traypokreće se na sustavu macOS (systray2 je instaliran u~/.omniroute/runtime/) -
omniroute --traypokreće se na sustavu Linux (zahtijeva DISPLAY; razumljiva pogreška ako nije postavljen) -
omniroute --traypokreće se na sustavu Windows (PowerShell NotifyIcon, bez dodatnih binarnih datoteka) -
omniroute config tray enablestvara unos za automatsko pokretanje; onemogućavanje ga uklanja -
npm install -g omniroute@<this-version>izvršava postinstall bez fatalnog izlaza - Putanja ažuriranja zadržava neobavezne ovisnosti:
omniroute update --applyi automatski program za ažuriranje pokrećunpm install -g … --include=optionalkako bioptionalDependencies(better-sqlite3, keytar, tls-client i llmlingua SLM skup:@atjsh/llmlingua-2@2.0.5,js-tiktoken) ostali prisutni nakon ažuriranja. Ultra SLM razinamodelPathtakođer zahtijeva tinybert model, koji se pri prvoj upotrebi automatski preuzima u${DATA_DIR}/models/llmlingua. Postinstall (scripts/build/colocateOptionals.mjs) zatim smješta neobavezno zatvaranje SLM-a udist/node_moduleskako bi radni proces razriješio JEDNU instancu@huggingface/transformers^4.2.0 — samostalno praćenje uključuje samo transformers, a ne dinamički uvezene neobavezne ovisnosti, pa bi bez toga radni proces učitao llmlingua-2 uz transformers iz korijena i SLM razina bi neprimjetno prešla u način otvorenog neuspjeha. -
omniroute statusradi bez.env(putanja CLI tokena, samo povratna petlja) -
curl http://localhost:20128/api/shutdownvraća 401 (ruta koja je uvijek zaštićena) -
curl -H "host: evil.com" http://localhost:20128/api/mcp/ssevraća 401 (zaštita povratne petlje) - SQLite izvršno okruženje pri prvom pokretanju razrješava se na
bundled(ugrađena binarna datoteka valjana je za platformu) - SQLite izvršno okruženje vraća se na
runtimekada se izbrišenode_modules/better-sqlite3 - Pametni MCP filtar sažima stvarni izlaz
playwright-mcp browser_snapshot(smanjenje ≥50%) - Svih 10 datoteka
skills/omniroute*/SKILL.mdjavno su dostupne putem neobrađenog GitHub URL-a - Čarobnjak za uvođenje prikazuje korak obilaska razina „Kako radi” pri novom postavljanju
- Widget pokrivenosti razina na početnoj nadzornoj ploči prikazuje broj konfiguriranih/aktivnih stavki
Nakon v3.8.59 sljedeća je verzija 3.9.0, a njezin vrh postaje osnova za dvije dugovječne grane:
stable/v3 (linija v3 LTS, npm latest) i develop (v4, podignuta na 4.0.0, npm
nightly). Model grana/kanala, prijenos promjena unaprijed i oznake nalaze se u
RELEASE_STRATEGY.md; plan se nalazi u dokumentu ROADMAP (3. faza). Izdvajanje se izvodi jednom;
u verziji 3.8.58 uvježbava se od početka do kraja na račvanju, a 3.8.59 završava uz
kontrolni popis GO/NO-GO.
npm run release:dry-run-lts-cut # stvarno izdvajanje: 3.9.0 iz HEAD, prethodna oznaka v3.8.59
npm run release:dry-run-lts-cut -- --from <3.9.0-tip> # prikvači izvorni commitscripts/release/dry-run-lts-cut.mjs ne izvršava ništa: čita git i gh te ispisuje
cijeli slijed — preduvjete (izvor se može razriješiti, izvorni repozitorij ima potpunu povijest —
plitki klon ne može poslati stable/v3, odredišna strana odbija paket kod prvog
umetnutog nadređenog commita, stoga izdvajanje prvo izvedite iz potpunog klona ili pokrenite
git fetch --unshallow origin — prethodna oznaka postoji, package.json ima ciljnu verziju,
otvoren je problem s oznakom release-freeze, nema otvorenog problema
Release branch not green
na postojećoj grani izdanja — grana koja ne postoji prijavljuje ? kao nepoznato stanje, nikad
zeleno — konfiguriran je Mergifyjev red čekanja release (G11: queue_rules, checks_timeout,
oznaka queue), skup pravila release/* i dalje blokira brisanje i prisilno slanje, a
stable/v3 i develop još ne postoje), dva koraka s granama, koji se okidači neaktivnih tijekova rada
i uvjeti if: aktiviraju (a koji ostaju blokirani varijablom repozitorija ili
prikvačeni za kanonski repozitorij), očekivane dist-oznake (latest → 3.9.0, next i
nightly prazne) te vraćanje. Izlazni kod 0 = RESULT: READY, 1 = neuspješan blokirajući
preduvjet (✗), 2 = pogreška pri uporabi. --advisory <id,...> spušta provjeru na upozorenje (!)
bez njezina skrivanja.
Pokrenite probno izvođenje stvarnog izdvajanja dok je zamrzavanje izdanja 3.9.0 još aktivno — grane se stvaraju nakon oznake i prije nego što faza 12c ukine zamrzavanje.
# 1. Probno izvođenje na trenutačnom vrhu s parametrima za probu
npm run release:dry-run-lts-cut -- --target-version 3.8.58 --previous-tag v3.8.57 \
--advisory freeze,base-green
# 2. Izvedite nad udaljenim RAČVANJEM (origin ili bilo koji udaljeni repozitorij čiji URL
# pripada kanonskom repozitoriju bit će odbijen; za svaki se korak traži potvrda u terminalu)
git remote add rehearsal https://github.com/<you>/OmniRoute.git
node scripts/release/dry-run-lts-cut.mjs --execute --remote rehearsal \
--target-version 3.8.58 --previous-tag v3.8.57 --advisory freeze,base-green
# 3. Pokrenite neaktivne tijekove rada u račvanju (workflow_dispatch tamo gdje probno izvođenje
# prijavljuje prikvačenost za kanonski repozitorij), a zatim vratite promjene
node scripts/release/dry-run-lts-cut.mjs --execute --rollback --remote rehearsal \
--target-version 3.8.58 --previous-tag v3.8.57 --advisory freeze,base-greenCommit za podizanje verzije grane develop izrađuje se pomoću niskorazinskih git operacija (radno se stablo ne dira) i ažurira
istih pet datoteka kao commit za otvaranje ciklusa: package.json, open-sse/package.json,
electron/package.json, package-lock.json i docs/openapi.yaml. Odjeljak [4.0.0]
u dokumentu CHANGELOG i njegove i18n preslike potom se otvaraju na grani develop, prije njezina prvog
PR-a. Skripta nikad ne mijenja npm dist-oznake — uvježbajte ih na pomoćnom paketu.
.github/workflows/preview-artifact.yml izrađuje jednu produkcijsku tar-arhivu iz vrha PR-a i
provjerava upravo tu međuverziju (dio (a) stavke #8084). Samo PR-ovi iz istog repozitorija; ništa se ne objavljuje.
gh workflow run preview-artifact.yml -f pr_number=<N> # ili dodajte oznaku `preview-artifact`
gh run download <run-id> --name preview-artifact-pr<N>-<sha7> --dir preview
cd preview && sha256sum -c SHA256SUMS
gh attestation verify omniroute-*.tgz --repo diegosouzapw/OmniRoute
npm install -g ./omniroute-*.tgz # instalacija pretpregledaIzvođenje pokreće npm ci, npm run build:release, npm run check:pack-artifact, pakira
tar-arhivu, pokreće npm run check:pack-boot (lažne tajne, privremeni direktorij podataka), ponovno pakira i
ne uspijeva ako sažetak nije identičan, a zatim zapisuje artifact-identity.json (SHA vrha, SHA baze,
sažetak datoteke zaključavanja, platforma, arhitektura, node ABI, alat za pakiranje, pravilo izgradnje —
scripts/release/artifact-identity.mjs) te potvrđuje tar-arhivu u zasebnom zadatku. Promoviranje
pretpregleda znači instaliranje te tar-arhive: nikad je nemojte ponovno izgrađivati iz izvornog koda.
-
Odluka GO zabilježena je u LTS_GO_NO_GO.md.
-
npm run release:dry-run-lts-cut -- --from v3.9.0ispisujeRESULT: READY. -
Ručno stvorite grane na
originpomoću naredbi koje ispiše probno izvođenje — skripta odbija slati naorigin. Kako biste ponovno upotrijebili pregledani commit grane develop, najprije pokrenite probu s opcijom--executena vrhu verzije 3.9.0 nad svojim račvanjem; ispisat će oba SHA-a, a isti se commitovi mogu poslati:git push origin <stable-sha>:refs/heads/stable/v3 <develop-sha>:refs/heads/develop
-
Zaštitite
stable/v3idevelop(skupovi pravila + red čekanja za spajanje) prije nego što stigne prvi PR. -
Neaktivni tijekovi rada uključuju se postojanjem grane:
forward-port.yml(push nastable/v3),validate-stable-pr.yml(PR-ovi premastable/v3) inightly-v4-build.yml(izgrađujedevelop). Prije puštanja u rad postavite tajnu repozitorijasecrets.FORWARD_PORT_TOKEN(kako bi se CI pokretao na PR-ovima za prijenos promjena unaprijed); noćno objavljivanje ostaje isključeno dok vlasnik ne postavi varijablu repozitorijavars.NIGHTLY_PUBLISHnatruei dok npm Trusted Publishing ne prihvatinightly-v4-build.yml. Određivanje kanala provodiscripts/release/dist-tag.mjs, isti razrješivač koji upotrebljavanpm-publish.yml. -
Provjerite kanale:
npm view omniroute dist-tags --jsonprikazujelatest= 3.9.0 i nemanext/nightlysve dok se v4 ne objavi. -
Povratak na prethodno stanje, ako je potreban:
git push origin --delete refs/heads/stable/v3 refs/heads/developinpm dist-tag add omniroute@3.8.59 latest.
Ako izdanje ima kritičan problem:
gh release edit vX.Y.Z --prerelease(označava ga kao izdanje koje nije najnovije)git tag -d vX.Y.Z && git push --delete origin vX.Y.Z(samo ako ga korisnici još nisu počeli upotrebljavati)- Ili: hitni ispravak na
release/vX.Y.0→ zakrpno izdanjevX.Y.(Z+1) - Odmah obavijestite korisnike putem GitHub Discussionsa i Discorda
- Nikada nemojte izravno izvršavati commit na
main - Nikada nemojte upotrebljavati
git push --forcena granamamainilirelease/* - Nikada nemojte preskakati Husky kuke (
--no-verify) - Nikada nemojte pohranjivati tajne, vjerodajnice ili
.envdatoteke u commit - Pokrivenost mora ostati ≥60/60/60/60 (naredbe/retci/funkcije/grane)
- Pri izmjeni produkcijskog koda u
src/,open-sse/,electron/ilibin/uvijek uključite ili ažurirajte testove
Prije otvaranja PR-a lokalno pokrenite zaštitnu provjeru sinkronizacije dokumentacije:
npm run check:docs-syncCI također pokreće ovu provjeru u .github/workflows/ci.yml (zadatak za lint).