urirun

urirun://project/home

Jedno registry URI dla komend w kodzie, shellu, kontenerach i usługach.

Deklarujesz trasę raz, kompilujesz ją do registry i wywołujesz ten sam URI lokalnie albo przez HTTP, gRPC, kolejkę, serverless, Docker, MCP lub kartę agenta A2A.

quickstart Instalacja z GitHuba
curl -fsSL https://ifuri.com/urirun/install.sh | sh
urirun --help
urirun scan ./project \
  --out generated/bindings.v2.json \
  --registry-out generated/registry.json
urirun list generated/registry.json
urirun run 'tool://local/report/render' --registry generated/registry.json
Runtimeurirun
Repozytoriumtellmesh/urirun
Domyślny kontraktv2 JSON Schema
Wykonaniedry-run first

urirun://schema

Jeden kontrakt, wiele runtime’ów.

Pakowanie komend zaczyna się od schematu. Dekorator, helper albo skan artefaktu generuje binding, potem urirun kompiluje go do registry i uruchamia po tym samym adresie URI.

fn Napisz funkcję Typy i wartości domyślne są źródłem prawdy.
{ } Wygeneruj binding Powstaje inputSchema i szablon argv lub shell.
Skompiluj registry Trasy są walidowane i gotowe do odkrywania.
Uruchom URI Dry-run najpierw, execute dopiero z polityką.
decorator + Pydantic

Dekorator robi binding z sygnatury funkcji.

Typy i wartości domyślne trafiają do JSON Schema, a lista argv zostaje deterministycznym szablonem komendy.

deklaracja
from urirun.v2 import decorated_bindings, uri_command

@uri_command("media://local/video/transcode")
def transcode(input: str, output: str, width: int = 1280, height: int = 720):
    return ["ffmpeg", "-i", "{input}", "-vf", "scale={width}:{height}", "{output}"]
binding + registry
from urirun.v2 import compile_registry, decorated_bindings

bindings = decorated_bindings()
registry = compile_registry(bindings)

flow://registry/build

Używaj istniejących artefaktów jako paczek URI.

Najprostsza droga to nie nowe SDK. Wskazujesz urirun to, co projekt już ma, generujesz bindingi, walidujesz registry i uruchamiasz po URI.

repo://project/artifacts/query/scan

Skanuj artefakty

Czytaj etykiety Dockerfile, metadane paczek, targety Make, skrypty shell i jawne bindingi.

registry://local/routes/command/compile

Kompiluj registry

Zamień przenośne pliki bindingów w jedno drzewo lookup dla każdego runtime.

policy://local/execution/query/check

Kontroluj wykonanie

Najpierw dry-run, potem jawne allow rules dla argv, shell, Docker lub wywołań sieciowych.

flow://local/task/command/run

Uruchamiaj ten sam URI

Wołaj go z shella, backendu, przeglądarki, usługi Docker, narzędzia MCP albo karty A2A.

transport://any/adapter/query

Ten sam URI, inny runtime.

URI nazywa to, co ma się wykonać. Transport decyduje jak: in-process, argv, shell, Docker, HTTP, gRPC, kolejka, serverless, MCP lub A2A. Kontrakt i bramka policy zostają w jednym miejscu.

in-process v2.run / local-function dispatch
argv Safe argument templates, no shell
shell Policy-gated shell templates
Docker docker-run / docker-exec, image labels
HTTP v2_service: POST /run, GET /routes
gRPC v2_grpc: Run, RunStream, ListRoutes
queue topic -> v2.run consumer (MQTT/NATS/Kafka shape)
serverless pure handler(event) function
MCP / A2A tools/list, tools/call, agent card

docs://local/index/query

Dokumentacja.

examples://repo/current/query

Przykłady pokazujące współpracę warstw.

Przykłady są małe celowo: pokazują, jak jedno registry obsługuje UI w przeglądarce, backend, usługi Docker, generatory i adaptery firmware.

Cztery pulpity noVNC (pc1 controller, pc2 service-node, pc3 client-node, pc4 monitor-node) w jednym dashboardzie, każdy terminal pokazuje zdarzenia JSON z przepływu URI
novnc_lan_flow: cztery komputery Docker komunikują się przez ten sam kontrakt URI (pc://…, log://…), pokazane razem w dashboardzie.
v2/examples/transports

One registry driven over five transports (in-process, queue, serverless, HTTP, gRPC) plus a simple scan & run.

v2/examples/multi_transport

Docker stack mixing HTTP and gRPC workers: auto-generated registry, conflict detection, and a cross-environment flow.

v2/examples/docker_uri_flow

Docker Compose services communicating through generated URI bindings, with a library-native service dispatcher.

v2/examples/html_uri_app

Browser UI that calls a Python backend through URI actions and exposes logs, MCP tools, and an A2A card.

v2/examples/generators

JS, Node.js, TypeScript, and PHP declarations that generate the same v2 binding contract.

todo://urirun/usability/query

Następne prace nad użytecznością.

  1. urirun init dla startowego registry, policy i przykładowej trasy
  2. urirun doctor dla środowiska, zależności, portów i konfliktów tras
  3. urirun serve dla lokalnej przeglądarki tras, logów, dry-run console i policy-gated execution
  4. standardowe log:// w frontendzie, backendzie, shellu, firmware i przykładach Docker
  5. urirun diff do porównywania registry przed wdrożeniem