omm — CLI do publikacji
omm (Orbito Modules Manager) to oficjalne narzędzie do pakowania i publikowania modułów w repozytorium modułów Orbito (modules.orbito.pl) — odpowiednik npm publish dla modułów. Pozwala też przetestować wersję roboczą modułu we własnej firmie w Orbito bez otwierania panelu.
Co robi za Ciebie:
- pakuje moduł zgodnie z regułami repozytorium (bez
node_modules, bez sekretów w.env/.npmrc), - waliduje
module.jsonlokalnie, zanim cokolwiek wyśle, - wysyła paczkę i kolejkuje build obrazu Dockera,
- śledzi status builda i pokazuje błąd, jeśli obraz się nie zbuduje,
- publikuje wersję w rejestrze jednym poleceniem (
--release), - testuje moduł w Twojej firmie: instaluje go, aktualizuje, pokazuje logi i problemy, wywołuje jego metody.
Instalacja
npm config set @orbito:registry https://git.kozminski.net.pl/api/packages/orbito/npm/ # raz na komputer
npm i -g @orbito/omm
Wymagany Node.js >= 18.13. Paczki @orbito/* (@orbito/omm, @orbito/api-lib) nie są na npmjs.org — leżą w firmowym rejestrze npm Orbito. Rejestr pozwala pobierać paczki anonimowo, więc token nie jest potrzebny, ale npm musi wiedzieć, skąd brać scope @orbito. Pierwsza komenda dopisuje do ~/.npmrc linię:
@orbito:registry=https://git.kozminski.net.pl/api/packages/orbito/npm/
Bez niej npm i -g @orbito/omm i npm install w module kończą się błędem 404. Sam omm da się zainstalować bez zapisywania konfiguracji, podając rejestr flagą (działa też w PowerShell na Windows):
npm i -g @orbito/omm --@orbito:registry=https://git.kozminski.net.pl/api/packages/orbito/npm/
Linię w ~/.npmrc zapisuje wtedy omm skill install — albo dopisz ją pierwszą komendą z bloku wyżej.
Jeśli npm i -g kończy się błędem EACCES (permission denied, np. na /usr/local/lib/node_modules), globalny katalog npm należy do roota — typowe dla Node.js z instalatora .pkg na macOS albo z pakietu systemowego na Linuksie. Są dwa wyjścia: uruchom z sudo tylko instalację (sudo npm i -g @orbito/omm --@orbito:registry=https://git.kozminski.net.pl/api/packages/orbito/npm/), a omm skill install już bez sudo, żeby skill trafił do Twojego katalogu domowego; albo przenieś globalny katalog npm do katalogu użytkownika według instrukcji npm (Node z nvm lub z Homebrew nie ma tego problemu).
Logowanie
Logujesz się kontem Orbito — tym samym co w panelu my.orbi.do. Repozytorium modułów nie ma własnych haseł. Model kont i namespace'ów opisuje Konto i namespace'y.
omm login # e-mail i hasło: sesja Orbito Core + token publikacji w repozytorium
omm login --core http://localhost:3003 --registry http://localhost:3005 # inne serwery
omm login --token <jwt> # zamiast hasła: gotowy JWT rdzenia (loguje do obu)
omm login --token omm_abc... # tylko repozytorium: gotowy token publikacji (CI)
omm whoami # konto w repozytorium i Twoje namespace'y z rolą
omm whoami --core # konto w Orbito Core i firma robocza
omm logout # unieważnia token publikacji, usuwa go i sesję rdzenia
Jedno omm login robi dwie rzeczy:
- loguje do Orbito Core i zapisuje sesję (JWT ważny 48 h, odświeżany automatycznie),
- tym samym JWT tworzy w repozytorium długożyciowy token publikacji
omm-<nazwa komputera>.
Oba trafiają do ~/.config/omm/config.json dopiero wtedy, gdy oba kroki się udadzą; hasło nie jest nigdzie zapisywane. Firma robocza (omm company use) zostaje przy ponownym logowaniu na to samo konto.
--core <url>i--registry <url>wybierają tylko adresy serwerów (domyślnie ostatnio używane, potemhttps://my.orbi.do/apiihttps://modules.orbito.pl/api). Samo--corebez adresu (składniaomm1.x) oznacza domyślny rdzeń.--token omm_...loguje tylko do repozytorium. Komendy rdzenia potrzebują wtedyomm loginalboOMM_CORE_TOKEN.omm logoutunieważnia token publikacji w repozytorium i usuwa z konfiguracji token i sesję rdzenia. JWT rdzenia nie da się unieważnić — po prostu wygasa.
Tokenami publikacji zarządzasz też w panelu developera (Tokeny publikacji).
Namespace'y (omm namespace)
Moduł należy do namespace'u, nie do osoby: jego kod to <namespace>/<slug>, np. acme/hello. Każdy członek namespace'u może wszystko przy jego modułach; członkami zarządza tylko właściciel. Szczegóły: Konto i namespace'y.
omm namespace list # Twoje namespace'y z rolą (owner / member)
omm namespace create acme # a-z, 0-9, -, 3–30 znaków, unikalna nazwa
omm namespace members acme # właściciel, członkowie i oczekujące zaproszenia
omm namespace invite acme anna@acme.pl # tylko właściciel
omm namespace remove acme anna@acme.pl # tylko właściciel: usuwa członka albo anuluje zaproszenie
inviteod razu dodaje osobę, która logowała się już do repozytorium; w przeciwnym razie zapisuje zaproszenie, realizowane przy jej pierwszym logowaniu. Repozytorium nie wysyła maili.- Właściciela nie można usunąć; namespace'u nie da się usunąć ani przekazać.
- Każda komenda przyjmuje
-r, --registry <url>. Z--jsonlistwypisuje listę, a pozostałe komendy szczegóły namespace'u:{ id, name, role, owner, members: [{ id, email, name, addedAt }], invitations: [{ email, createdAt }], createdAt }.
Nowy moduł (omm init)
omm init "Hello" # zakłada kartę modułu w Twoim namespace + szkielet w ./hello
omm init "Hello" --namespace acme # wybór namespace'u (potrzebny, gdy masz kilka)
omm init "Hello" --description "Wita ludzi" --dir moj-hello
omm init "Hello" --code acme/hello # karta już istnieje: tylko szkielet, bez wywołania repozytorium
<name> to wyświetlana nazwa karty modułu. Bez --code komenda zakłada kartę w namespace w repozytorium (wymaga omm login), a repozytorium nadaje modułowi kod <namespace>/<slug nazwy>. Namespace to --namespace, a bez tej flagi Twój jedyny namespace. Przy kilku namespace'ach omm init pyta w terminalu, a w skryptach i z --json kończy się błędem — podaj wtedy --namespace. Bez żadnego namespace'u komenda podpowiada omm namespace create <name>. Z --code karta musi już istnieć — omm nie łączy się wtedy z repozytorium.
Moduł powstaje z wbudowanego szablonu: module.json, package.json, index.js, pages/hello.yaml i .gitignore — jedna metoda, jedna strona OVE, kod modułu wpisany we wszystkie pliki. omm init nie uruchamia npm install; zrób to sam w nowym katalogu.
| Flaga | Znaczenie |
|---|---|
--namespace <name> | namespace nowej karty modułu |
--code <namespace/name> | kod istniejącej karty modułu (bez wywołania repozytorium) |
--dir <dir> | katalog docelowy — nie może istnieć albo musi być pusty; domyślnie część kodu po / |
--description <text> | krótki opis (karta modułu i package.json) |
-r, --registry <url> | adres API rejestru |
Pakowanie
omm pack --dry-run # tylko wypisz listę plików, nic nie zapisuj
omm pack # zbuduj ZIP lokalnie (bez wysyłania)
omm pack -o /tmp/modul.zip # własna ścieżka wynikowa
omm pack --include-npmrc # dołącz .npmrc (uwaga: sekrety!; zbędne dla @orbito/*)
Bez -o archiwum zapisywane jest jako <namespace>-<nazwa>-<wersja>.zip.
Zawsze sprawdź --dry-run
omm pack --dry-run to najszybszy sposób, by zobaczyć, co dokładnie trafi do repozytorium — zanim wyślesz paczkę. Reguły zawartości opisuje Pakowanie modułu.
Publikacja
omm publish # spakuj + wgraj DRAFT + poczekaj na build Dockera
omm publish --release # jak wyżej + publikacja w rejestrze (draft → published)
omm publish --no-wait # wgraj draft i nie czekaj na build
omm publish --changelog "..." # z opisem zmian (release notes)
omm publish --dry-run # spakuj i wypisz zawartość, nic nie wysyłaj
Domyślnie publish wysyła wersję roboczą (draft) — do testów na własnej firmie. Draft widzą tylko członkowie namespace'u modułu i firmy z dostępem do modułu (Moduły robocze i dostęp firm). Udostępnienie wszystkim firmom wymaga świadomego --release.
| Flaga | Znaczenie |
|---|---|
--release | publikuje wersję w rejestrze (draft → published) |
--no-wait | nie czeka na build Dockera; nie łączy się z --release |
--changelog <text> | opis zmian tej wersji |
--include-npmrc | dołącza .npmrc do paczki (sekrety!); niepotrzebne dla paczek @orbito/*, bo build w repozytorium ma własny .npmrc z tym scope |
--timeout <sekundy> | limit oczekiwania na build, domyślnie 600 |
-C, --dir <dir> | katalog modułu (domyślnie bieżący) |
-r, --registry <url> | adres API rejestru |
--dry-run | pakuje i wypisuje zawartość, nic nie wysyła |
Jak to działa
- CLI czyta i waliduje
module.json, buduje ZIP. - Upload paczki — serwer sprawdza, czy token należy do członka namespace'u modułu, sprawdza semver i kolejkuje build obrazu Dockera. Draft o tej samej wersji jest nadpisywany; wersje opublikowane są niemutowalne.
- CLI odpytuje status builda (co 3 s) i wypisuje wynik.
- Przy
--release— publikacja wersji; poprzednia opublikowana wersja przechodzi wdeprecated. Dla każdego zadeklarowanego wmodule.jsonsekretu bez ustawionej wartości CLI wypisuje ostrzeżenie⚠— publikacja nie jest blokowana, ale moduł nie dostanie tej zmiennej, dopóki nie ustawisz jej przezomm secrets set.
Karta modułu musi istnieć
Tożsamość paczki (kod modułu i wersja) pochodzi wyłącznie z module.json. Karta modułu musi już istnieć w repozytorium — utwórz ją przez omm init albo w panelu developera przed pierwszą publikacją. Publikować może każdy członek namespace'u modułu.
Testowanie na własnej firmie
Zanim udostępnisz moduł firmom, przetestuj go jako wersję roboczą (draft) zainstalowaną w Twojej własnej firmie w Orbito. Moduł działa wtedy w kontenerze dokładnie tak jak po publikacji, a omm pozwala go zainstalować, zaktualizować, czytać jego logi i problemy oraz wywoływać jego metody — bez otwierania panelu.
Logowanie do Orbito Core
Sesję rdzenia zapisuje to samo omm login co token publikacji (patrz Logowanie). Domyślny adres rdzenia to ostatnio używany, a za pierwszym razem https://my.orbi.do/api; inny wskażesz przez omm login --core <url>. Sesja jest odświeżana automatycznie przed komendą rdzenia, gdy zostaje jej mniej niż 24 h; wygasła sesja kończy komendę błędem z prośbą o ponowne omm login.
Firma robocza
omm company list # Twoje firmy z identyfikatorami (* = firma robocza)
omm company use <id> # ustawia firmę roboczą (id albo numer z listy)
omm company use # wybór interaktywny
Komendy z kolejnej sekcji działają na firmie roboczej. Jako członek namespace'u modułu zainstalujesz jego wersję roboczą w każdej firmie, do której należysz. Pierwsza instalacja albo aktualizacja draftu nadaje firmie trwały dostęp do modułu: moduł działa w niej dalej po restarcie kontenera i widzą go pozostali użytkownicy firmy. Inną firmę dopiszesz ręcznie w panelu developera — Moduły robocze i dostęp firm.
Gdy rdzeń nie znajduje wersji (HTTP 404), omm install i omm update dodają podpowiedź (hint w --json): sprawdź przez omm whoami, czy jesteś zalogowany jako członek namespace'u modułu.
Pętla testowa
omm publish # draft + build obrazu Dockera
omm install # instaluje wersję z module.json (z zależnościami)
omm instances # instancje modułu w firmie
omm logs # dzisiejsze logi modułu
omm logs --container # stdout/stderr kontenera
omm problems --status waiting # problemy zgłoszone przez moduł
omm call getOrders --params '{"limit": 5}' # wywołanie metody modułu
# … poprawka w kodzie …
omm publish # nadpisuje draft tej samej wersji
omm update # ta sama wersja: przeładowanie z nowym obrazem
# … i tak do skutku, na koniec:
omm publish --release
Podczas pracy nad draftem nie musisz podbijać wersji: omm publish nadpisuje draft, a omm update tej samej wersji przeładowuje instancję. Wersję podbijasz dopiero przed publikacją (--release).
| Komenda | Działanie |
|---|---|
omm install [--name <instanceName>] | instaluje w firmie roboczej wersję z module.json, zawsze razem z brakującymi zależnościami (dependsOn); --name jest wymagane przy drugiej instancji modułu niesingletonowego |
omm update [--instance <id>] | inna wersja w module.json niż w instancji → aktualizacja; ta sama wersja → przeładowanie: kontener jest zatrzymywany, a jego kolejny start pobiera obraz od nowa, więc działa nadpisany draft |
omm instances | instancje modułu w firmie roboczej |
omm logs [--instance <id>] [--since <iso>] [--day <YYYY-MM-DD>] [--container] | logi modułu (Log.*), domyślnie z dzisiaj; --since — tylko wpisy od podanego czasu (ISO 8601), --day — logi z wybranego dnia, --container — stdout/stderr kontenera Dockera (błędy startu, stack trace'y) zamiast logów modułu; --day nie łączy się z --container |
omm problems [--status <status>] | problemy zgłoszone przez moduł (Problems.report); --status: waiting, solved albo discarded, domyślnie wszystkie |
omm call <method> [--params <json>] [--instance <id>] | wywołuje metodę modułu z uprawnieniami zalogowanego użytkownika (jak strona OVE) i wypisuje wynik; --params to obiekt JSON. Rdzeń opakowuje wynik w jednoelementową tablicę — omm wypisuje sam element |
Wspólne flagi komend rdzenia:
| Flaga | Znaczenie |
|---|---|
-C, --dir <dir> | katalog modułu — kod modułu (a dla install/update także wersja) pochodzi z jego module.json |
-m, --module <code> | kod modułu zamiast module.json (instances, logs, problems, call) |
--instance <id> | instancja, na której działa komenda (update, logs, call); domyślnie jedyna aktywna instancja modułu w firmie — przy kilku komenda kończy się błędem z listą ich id |
--core <url> | adres API Orbito Core |
--company <id> | firma zamiast firmy roboczej (wszystkie komendy rdzenia poza company list/use) |
Wyjście dla skryptów i agentów AI (--json)
Flaga --json (w dowolnym miejscu linii komend, działa dla każdej komendy omm) wypisuje na stdout wyłącznie wynik jako JSON, bez komunikatów o postępie. Błąd trafia na stderr jako {"error": "...", "status": 404} (status to kod HTTP albo null, plus code/details/validation, gdy zwróci je serwer, oraz hint z podpowiedzią omm, co zrobić dalej), a kod wyjścia to 1. Na wejście ze stdin czekają tylko komendy interaktywne: omm login bez --token, omm company use bez argumentu, omm init bez --namespace na koncie z kilkoma namespace'ami (tylko w terminalu) i omm secrets set bez OMM_SECRET_VALUE — oraz omm automation create/update -f -, które czytają graf ze stdin.
omm instances --json
omm call ping --json
Automatyzacje firmy (omm automation)
Automatyzacje firmy roboczej bez edytora w panelu: przegląd, graf zapisany jako plik JSON, włączanie i diagnoza biegów. Przydaje się do testu wyzwalaczy i akcji własnego modułu (draft zainstalowany w firmie) oraz agentom AI, które składają automatyzacje dla użytkownika. Opis dla agentów z formatem grafu, kodami błędów i statusami: Company automations.
omm automation elements --kind action --query etykieta # wyzwalacze i akcje dostępne w firmie
omm automation element set_var # pełna definicja elementu jako JSON
omm automation create -f graf.json # nowa automatyzacja, zawsze WYŁĄCZONA
omm automation get <id> # graf i walidacja
omm automation enable <id> # włączenie to osobny krok
omm automation runs --automation <id> --status errored
omm automation run <runId> # kroki biegu
| Komenda | Działanie |
|---|---|
omm automation list [--enabled | --disabled] [--query <tekst>] [--limit <n>] | automatyzacje firmy (do 50): id, włączona, nazwa, wyzwalacze, liczba akcji, blokada |
omm automation get <id> | graf w formacie pliku create/update i stan walidacji (elementy blokujące) |
omm automation elements [--kind trigger|action] [--query <tekst>] | elementy dostępne w firmie: wbudowane rdzenia (cron, delay, set_var, var_condtion, send-email, send-template-email) i modułów (<moduleCode>:<code>) |
omm automation element <type> | definicja elementu jako JSON: params, outputs, emits/requires |
omm automation create -f <plik> | tworzy wyłączoną automatyzację z pliku grafu (-f - = stdin) i wypisuje { automationId, name, isEnabled: false } |
omm automation update <id> -f <plik> | zastępuje podane pola grafu; nie zmienia isEnabled |
omm automation enable <id> / disable <id> | włącza / wyłącza automatyzację |
omm automation duplicate <id> | wyłączona kopia |
omm automation delete <id> --yes | usuwa automatyzację razem z jej biegami i problemami |
omm automation runs [--automation <id>] [--status <status>] [--event <wartość>] [--limit <n>] | biegi od najnowszych (domyślnie 20, rdzeń zwraca najwyżej 50); --event — wartość dowolnego parametru zdarzenia, np. id zamówienia |
omm automation run <runId> | nagłówek biegu, parametry zdarzenia i kroki (przesunięcie, akcja, gałąź, wynik: ok, pominięta z brakującymi kluczami, pauza, błąd) |
omm automation var list / var get <klucz> / var set <klucz> <wartość> | zmienne automatyzacji firmy (tekst) |
Plik grafu (create wymaga całości, update dowolnego podzbioru pól):
{
"name": "Etykieta dla nowych zamówień",
"desc": "Opis opcjonalny",
"triggers": [{ "type": "<typ wyzwalacza>", "params": {} }],
"actions": {
"a1": {
"type": "<moduleCode>:<kod akcji>",
"params": { "__instanceId": "<id instancji>" },
"branches": { "next": null }
}
},
"startActionId": "a1"
}
- Szkic → włączenie.
createzawsze zapisuje automatyzację wyłączoną, aupdatenigdy nie zmieniaisEnabled; plik z polemisEnabledjest odrzucany. Włącza się ją jawnieomm automation enable <id>— rdzeń sprawdza wtedy dostępność elementów i parametry akcji. - Elementy modułów wymagają
params.__instanceId— id instancji, która je wykonuje (omm instances -m <moduleCode>).branchesmapuje wyjścia akcji (nextalbo np.true/falsewarunku) na id następnej akcji lubnull. createiupdatewysyłają graf do ścisłej walidacji: rdzeń sprawdza cały graf (elementy, parametry, gałęzie, cykle, klucze zdarzeń, zmienne szablonów) i odrzuca błędny kodem 422 bez zapisu. Błędy są wypisywane po jednym w linii jakościeżka: komunikat (KOD), a z--jsontrafiają do polavalidationbłędu na stderr:
{"error":"Automation graph is invalid","status":422,"validation":{"errors":[{"path":"actions.wait.params.value","code":"INVALID_TYPE","message":"expected a number"}]}}
- Wynik
omm automation get <id> --jsonpo usunięciuisEnabledmożna edytować i odesłać przezomm automation update <id> -f— pola tylko do odczytu (_id,validation,generatedName…)ommpomija.
Sekrety modułu (omm secrets)
Klucze aplikacji modułu (np. client ID/secret marketplace'u) trzyma repozytorium modułów — zaszyfrowane, globalnie per kod modułu (nie per wersja ani per firma). Moduł deklaruje je w polu secrets w module.json, a wartości ustawiasz komendami omm secrets:
omm secrets list # kod modułu z ./module.json
omm secrets list --module core/allegro # albo wskazany
omm secrets set ALLEGRO_CLIENT_SECRET # wartość z promptu bez echa
OMM_SECRET_VALUE=... omm secrets set ALLEGRO_CLIENT_SECRET # CI, bez promptu
omm secrets unset ALLEGRO_CLIENT_SECRET # usuwa wartość
| Komenda | Działanie |
|---|---|
omm secrets list | sekrety zadeklarowane w ostatniej wersji i zapisane w repozytorium, ze statusem ustawiony / brak wartości / niezadeklarowany — nigdy wartości |
omm secrets set <NAME> | zapisuje wartość; pyta o nią w prompcie bez echa, a w CI bierze ją ze zmiennej OMM_SECRET_VALUE. Pusta wartość to błąd |
omm secrets unset <NAME> | usuwa zapisaną wartość |
| Flaga | Znaczenie |
|---|---|
-m, --module <code> | kod modułu (namespace/nazwa); domyślnie pole name z ./module.json |
-r, --registry <url> | adres API rejestru |
setdziała także dla nazwy jeszcze niezadeklarowanej wmodule.json— wartości możesz ustawić przed pierwszą publikacją wersji, która ich używa.- Nowa wartość trafia do kontenerów modułu przy ich najbliższym starcie — bez publikacji nowej wersji modułu.
- Wartości nie da się odczytać z powrotem ani przez
omm, ani przez panel developera.
Repozytorium kodu modułu (omm repo)
Karta modułu w repozytorium modułów może przechowywać link do repozytorium git z kodem modułu — żeby wszyscy członkowie namespace'u wiedzieli, gdzie jest aktualny kod. Link widzą tylko członkowie namespace'u modułu: w panelu developera (szczegóły modułu, pole „Repozytorium kodu" w edycji modułu) i w omm. Nie trafia do module.json, paczki ZIP ani na stronę sklepu.
omm repo # pokazuje link; kod modułu z ./module.json
omm repo --module core/allegro # albo wskazany
omm repo set # bierze git remote get-url origin z bieżącego katalogu
omm repo set git@git.example.com:acme/hello.git # albo podany adres
omm repo unset # usuwa link
| Komenda | Działanie |
|---|---|
omm repo | pokazuje zapisany link |
omm repo set [url] | zapisuje link; bez url używa git remote get-url origin z bieżącego katalogu (dane logowania z adresu https są pomijane) |
omm repo unset | usuwa link |
| Flaga | Znaczenie |
|---|---|
-m, --module <code> | kod modułu (namespace/nazwa); domyślnie pole name z ./module.json |
-r, --registry <url> | adres API rejestru |
- Dozwolone formaty:
https://…/http://…,ssh://…orazgit@host:org/repo.git; maksymalnie 500 znaków. - Adres nie może zawierać hasła ani tokenu — taki zostanie odrzucony.
- Z
--jsonkażda z komend zwraca{ moduleCode, repositoryUrl }.
Business solutions (omm solution)
Zestawy modułów z szablonami automatyzacji, instalowane w firmie jednym kliknięciem. Publikuje je tylko namespace core (Orbito); inne konta dostają 403. Format katalogu zestawu (solution.yaml, README.md, okładka, pliki automatyzacji) i reguły walidacji: Business solutions.
| Komenda | Działanie |
|---|---|
omm solution publish [dir] | publikuje albo aktualizuje (ten sam slug) zestaw z katalogu, domyślnie bieżącego |
omm solution list | zestawy namespace'u core, także cofnięte |
omm solution unpublish <slug> | ukrywa zestaw w sklepie i w Orbito; ponowne publish go przywraca |
Skill dla agentów AI (omm skill install)
omm skill install # skill dla agentów, których katalog istnieje (~/.claude, ~/.codex, ~/.config/opencode)
omm skill install --project # do .claude/, .codex/ i .opencode/ w bieżącym katalogu
omm skill install --agent codex # tylko wskazany agent (claude, codex, opencode); flaga powtarzalna
Pobiera skill orbito-modules (SKILL.md z https://orbito.pl/docs/skill/SKILL.md) i zapisuje go w skills/orbito-modules/SKILL.md katalogu każdego wybranego agenta: Claude Code, Codex, OpenCode. Gdy żaden katalog agenta nie istnieje, instaluje skill dla Claude Code. Przy okazji zapisuje w konfiguracji npm linię scope @orbito (patrz Instalacja). Działa na Windows, macOS i Linux. Ponowne uruchomienie aktualizuje skill — to polecenie podaje też powiadomienie o nieaktualnym skillu (dla kopii w projekcie: omm skill install --project).
| Flaga | Znaczenie |
|---|---|
--project | instaluje do katalogów agentów w bieżącym katalogu zamiast w katalogu domowym |
--all | instaluje dla wszystkich trzech agentów |
--agent <name> | tylko wskazany agent: claude, codex albo opencode; można powtórzyć |
--no-npm | nie zmienia konfiguracji npm |
Na Linux i macOS to samo robi jedna linia: curl -fsSL https://orbito.pl/docs/skill/install.sh | sh (z sh -s -- --project dla projektu). Skrypt jest cienką nakładką: ustawia scope @orbito w npm, instaluje @orbito/omm i uruchamia omm skill install z tymi samymi opcjami. Gdy globalny katalog npm nie jest zapisywalny, nie uruchamia sudo, tylko wypisuje oba wyjścia opisane w Instalacji.
Powiadomienia o aktualizacjach i omm doctor
Raz na dobę omm sprawdza w tle, czy jest nowsza wersja omm, SDK @orbito/api-lib (porównuje z zależnością w package.json modułu z bieżącego katalogu) i skilla dla agentów AI. Sprawdzenie nie opóźnia komendy, a błędy sieci są pomijane. Gdy coś jest nieaktualne, po wyniku komendy na stderr pojawia się powiadomienie z poleceniem aktualizacji i linkiem do listy zmian: w trybie tekstowym linie zaczynające się od !, z --json jedna linia {"notices": [...]} — stdout zostaje czystym wynikiem komendy.
Niezależnie od sieci (także offline i przy OMM_NO_UPDATE_CHECK=1) każda komenda korzystająca z rdzenia wypisuje powiadomienie core, gdy adres rdzenia to dawny https://v2.orbito.pl/api: ten host tylko przekierowuje na https://my.orbi.do/api i gubi przy tym sesję, więc trzeba zalogować się ponownie przez omm login --core https://my.orbi.do/api (omm doctor zgłasza to jako warn w kontroli core-login).
omm doctor # wymusza sprawdzenie i wypisuje tabelę kontroli
omm doctor --json # to samo jako JSON: { "checks": [{ name, status: ok|warn|fail, message, fix }], "notices": [...] }
OMM_NO_UPDATE_CHECK=1 omm ... # wyłącza sprawdzanie aktualizacji
omm doctor sprawdza Node.js, wersję omm, linię scope @orbito w konfiguracji npm, logowanie do repozytorium (ostrzeżenie, gdy konto nie należy do żadnego namespace'u) i do Orbito Core, firmę roboczą, moduł w bieżącym katalogu (manifest, SDK względem najnowszego) i zainstalowany skill. Kończy się kodem 1 tylko wtedy, gdy któraś kontrola ma status fail.
Konfiguracja
| Ustawienie | Opis |
|---|---|
~/.config/omm/config.json | token publikacji per rejestr i sesja per rdzeń (oba zapisuje omm login), firma robocza z omm company use |
OMM_TOKEN | token publikacji omm_… ze zmiennej środowiskowej; ma priorytet nad plikiem konfiguracyjnym — do CI |
OMM_REGISTRY / --registry | adres API rejestru, domyślnie https://modules.orbito.pl/api |
OMM_CORE / --core <url> | adres API Orbito Core; domyślnie ostatnio używany, potem https://my.orbi.do/api |
OMM_CORE_TOKEN | JWT rdzenia ze zmiennej środowiskowej; ma priorytet nad plikiem konfiguracyjnym i nie jest odświeżany |
OMM_COMPANY / --company <id> | firma robocza; ma priorytet nad omm company use |
OMM_SECRET_VALUE | wartość dla omm secrets set bez promptu — do CI |
OMM_NO_UPDATE_CHECK=1 | wyłącza sprawdzanie aktualizacji omm, SDK i skilla |
OMM_PACKAGES_REGISTRY | rejestr npm paczek @orbito (domyślnie https://git.kozminski.net.pl/api/packages/orbito/npm/): źródło najnowszych wersji, wartość oczekiwana przez omm doctor i zapisywana przez omm skill install |
OMM_SKILL_URL | źródło SKILL.md dla omm skill install zamiast https://orbito.pl/docs/skill/SKILL.md (także file:// — do testów lokalnych) |
Publikacja z CI
W pipeline nie loguj się hasłem — omm login nie jest potrzebne. Komendy repozytorium (omm publish, omm secrets, omm repo) biorą token publikacji ze zmiennej środowiskowej:
export OMM_TOKEN=omm_...
export OMM_NO_UPDATE_CHECK=1
omm publish --release --changelog "$CI_COMMIT_MESSAGE"
Token najlepiej wygenerować w panelu developera, osobno dla każdego pipeline'u — wtedy unieważnisz go niezależnie od innych (Tokeny publikacji). Można też użyć tokenu, który omm login zapisał lokalnie w ~/.config/omm/config.json (registries["<rejestr>"].token), ale omm logout na tym komputerze go unieważni. Token należy do Twojego konta i działa we wszystkich Twoich namespace'ach.
Komendy rdzenia (omm install, omm logs, omm call, omm automation …) potrzebują w CI OMM_CORE_TOKEN=<JWT rdzenia> (ważny 48 h, nieodświeżany) i OMM_COMPANY=<id firmy>.
