From a82792794e77804211120ac00ccab60fca66f5a9 Mon Sep 17 00:00:00 2001 From: Rebot <96078724+reboot-dev-bot@users.noreply.github.com> Date: Tue, 23 Jun 2026 20:29:33 +0000 Subject: [PATCH] [Release] Synchronize for release --- .devcontainer/devcontainer.json | 7 +- .../devpod/fetch-workstation-secrets.sh | 76 + .../devpod/fetch_workstation_secrets.py | 72 + .../devpod/gcloud-poweroff.provider.yaml | 224 + .devcontainer/git_config.sh | 30 +- .devcontainer/install_precommit_hook.sh | 69 +- Dockerfile | 30 +- charts/reboot/Chart.yaml | 4 +- .../docs/ai_chat_apps/get_started.mdx | 28 +- .../ai_chat_apps/get_started_claude_code.mdx | 1 - .../docs/ai_chat_apps/get_started_codex.mdx | 1 - .../docs/learn_more/call/from_mcp_client.mdx | 20 +- documentation/package-lock.json | 2 +- package.json | 14 +- rbt/std/package.json | 2 +- rbt/v1alpha1/errors.proto | 8 + rbt/v1alpha1/index.ts | 15 + rbt/v1alpha1/package.json | 2 +- reboot/aio/aborted.py | 12 + reboot/aio/applications.py | 5 +- reboot/aio/auth/BUILD.bazel | 2 + reboot/aio/auth/consent_page.html.j2 | 226 + reboot/aio/auth/oauth_server.py | 314 +- reboot/aio/state_managers.py | 47 +- reboot/aio/stubs.py | 27 +- reboot/api.py | 29 +- reboot/benchmarks/construct/package-lock.json | 30 +- reboot/benchmarks/construct/package.json | 2 +- .../init/templates/backend_package.json.j2 | 2 +- reboot/cli/init/templates/package.json.j2 | 2 +- reboot/create-ui/package.json | 2 +- reboot/create-ui/src/templates.ts | 4 +- reboot/demos/fig/package-lock.json | 146 +- reboot/demos/fig/package.json | 10 +- reboot/examples/agent-wiki/.dockerignore | 1 - reboot/examples/agent-wiki/.tests/test.sh | 16 - reboot/examples/agent-wiki/Dockerfile | 2 +- reboot/examples/agent-wiki/mcp_servers.json | 8 - reboot/examples/agent-wiki/pyproject.toml | 2 +- reboot/examples/agent-wiki/uv.lock | 10 +- .../examples/agent-wiki/web/package-lock.json | 28 +- reboot/examples/agent-wiki/web/package.json | 4 +- .../ai-chat-counter-dashboard/README.md | 4 +- .../mcp_servers.json | 8 - .../ai-chat-counter-dashboard/pyproject.toml | 2 +- .../ai-chat-counter-dashboard/uv.lock | 10 +- .../web/package-lock.json | 28 +- .../web/package.json | 4 +- reboot/examples/ai-chat-counter/Dockerfile | 2 +- reboot/examples/ai-chat-counter/README.md | 4 +- .../examples/ai-chat-counter/mcp_servers.json | 8 - .../examples/ai-chat-counter/pyproject.toml | 2 +- reboot/examples/ai-chat-counter/uv.lock | 10 +- .../ai-chat-counter/web/package-lock.json | 28 +- .../examples/ai-chat-counter/web/package.json | 4 +- reboot/examples/bank-nodejs/package-lock.json | 32 +- reboot/examples/bank-nodejs/package.json | 4 +- reboot/examples/bank-pydantic/pyproject.toml | 2 +- reboot/examples/bank-pydantic/uv.lock | 10 +- .../bank-pydantic/web/package-lock.json | 114 +- .../examples/bank-pydantic/web/package.json | 6 +- reboot/examples/bank-zod/package-lock.json | 104 +- reboot/examples/bank-zod/package.json | 8 +- reboot/examples/bank/pyproject.toml | 2 +- reboot/examples/bank/uv.lock | 10 +- reboot/examples/bank/web/package-lock.json | 50 +- reboot/examples/bank/web/package.json | 2 +- reboot/examples/boutique/Dockerfile | 2 +- reboot/examples/boutique/pyproject.toml | 2 +- reboot/examples/boutique/uv.lock | 10 +- .../examples/boutique/web/package-lock.json | 50 +- reboot/examples/boutique/web/package.json | 2 +- reboot/examples/chat-room-nodejs/Dockerfile | 2 +- .../chat-room-nodejs/package-lock.json | 30 +- reboot/examples/chat-room-nodejs/package.json | 2 +- reboot/examples/chat-room/Dockerfile | 2 +- reboot/examples/chat-room/pyproject.toml | 2 +- .../reboot-non-react-web/package-lock.json | 16 +- .../reboot-non-react-web/package.json | 2 +- reboot/examples/chat-room/uv.lock | 10 +- .../examples/chat-room/web/package-lock.json | 50 +- reboot/examples/chat-room/web/package.json | 2 +- reboot/examples/chick-potle/.dockerignore | 1 - reboot/examples/chick-potle/.tests/test.sh | 11 - reboot/examples/chick-potle/Dockerfile | 2 +- reboot/examples/chick-potle/mcp_servers.json | 8 - reboot/examples/chick-potle/pyproject.toml | 2 +- reboot/examples/chick-potle/uv.lock | 10 +- .../chick-potle/web/package-lock.json | 28 +- reboot/examples/chick-potle/web/package.json | 4 +- reboot/examples/counter/package-lock.json | 68 +- reboot/examples/counter/package.json | 4 +- reboot/examples/docubot/api/package.json | 2 +- reboot/examples/docubot/docubot/package.json | 4 +- reboot/examples/docubot/package-lock.json | 82 +- reboot/examples/docubot/package.json | 6 +- reboot/examples/kcdc-2025/pyproject.toml | 2 +- reboot/examples/kcdc-2025/uv.lock | 10 +- .../examples/kcdc-2025/web/package-lock.json | 50 +- reboot/examples/kcdc-2025/web/package.json | 6 +- reboot/examples/monorepo/pyproject.toml | 2 +- reboot/examples/monorepo/uv.lock | 10 +- reboot/examples/prosemirror-zod/Dockerfile | 2 +- .../prosemirror-zod/backend/package.json | 4 +- .../examples/prosemirror-zod/web/package.json | 2 +- reboot/examples/prosemirror-zod/yarn.lock | 46 +- reboot/examples/prosemirror/Dockerfile | 2 +- .../examples/prosemirror/backend/package.json | 4 +- reboot/examples/prosemirror/web/package.json | 2 +- reboot/examples/prosemirror/yarn.lock | 46 +- .../examples/reboot-swag-store/.tests/test.sh | 11 - reboot/examples/reboot-swag-store/Dockerfile | 2 +- .../backend/tests/store_servicer_test.py | 2 +- .../reboot-swag-store/mcp_servers.json | 8 - .../examples/reboot-swag-store/pyproject.toml | 2 +- reboot/examples/reboot-swag-store/uv.lock | 10 +- .../reboot-swag-store/web/package-lock.json | 28 +- .../reboot-swag-store/web/package.json | 4 +- reboot/mcp/ui.py | 26 + reboot/nodejs/package.json | 4 +- reboot/ping/README.md | 8 +- reboot/ping/mcp_servers.json | 8 - reboot/ping/ping_api.py | 12 +- reboot/ping/web/ui/clicker/App.tsx | 20 +- reboot/plugin/.claude-plugin/marketplace.json | 2 +- reboot/plugin/.codex-plugin/plugin.json | 2 +- reboot/plugin/VERSION | 2 +- reboot/plugin/bin/mcpjam-inspector | 2 +- reboot/plugin/bin/rbt | 2 +- reboot/plugin/skills/chat-app/SKILL.md | 4 +- .../references/auth-oauth-providers.md | 44 + .../chat-app/references/react-scaffolding.md | 4 +- .../python/references/lifecycle-dockerfile.md | 4 +- .../references/lifecycle-project-setup.md | 2 +- reboot/plugin/skills/run/SKILL.md | 4 +- .../1.2.1/remove-mcp-servers-json.md | 14 + .../1.2.1/user-create-transaction.md | 26 + .../migrations/next/mcp-ui-single-child.md | 32 + reboot/plugin/skills/web-app/SKILL.md | 7 +- reboot/protoc_gen_reboot_generic.py | 6 +- reboot/react/internal/McpConnector.tsx | 68 +- reboot/react/package.json | 6 +- reboot/rootpage/tunnel_step.tsx | 2 +- reboot/routing/xds_server.py | 167 +- reboot/server/executable_local_envoy.py | 20 + reboot/server/local_envoy.py | 12 +- reboot/std/package.json | 6 +- reboot/std/react/package.json | 10 +- reboot/templates/reboot.py.j2 | 142 +- reboot/templates/reboot_react.ts.j2 | 1 + reboot/versions.bzl | 2 +- reboot/web/package.json | 4 +- tests/reboot/BUILD.bazel | 21 + tests/reboot/aio/auth/oauth_providers_test.py | 344 +- tests/reboot/echo_rbt.golden.py | 2 +- tests/reboot/greeter_rbt.golden.js | 2 +- tests/reboot/greeter_rbt.golden.py | 2 +- tests/reboot/greeter_rbt_react.golden.js | 1 + .../nodejs/auth_integration_test/package.json | 2 +- .../input_error_integration_test/package.json | 2 +- .../nodejs/yarn_zod_test/backend/package.json | 6 +- .../yarn_zod_test/backend/tests/test.ts | 11 +- tests/reboot/nodejs/yarn_zod_test/yarn.lock | 44 +- tests/reboot/ping/BUILD.bazel | 2 +- tests/reboot/ping/ping_test.py | 151 +- tests/reboot/ping_api_rbt.golden.py | 31484 ++++++++++++++++ .../reboot/plugin/hooks/auto_approve_test.py | 4 +- .../pydantic/auto_construct_user/BUILD.bazel | 38 + .../pydantic/auto_construct_user/servicer.py | 36 + .../auto_construct_user/servicer_api.py | 53 + .../pydantic/auto_construct_user/test.py | 78 + tests/reboot/routing/xds_server_test.py | 230 +- tests/reboot/state_manager_tests.py | 12 +- 173 files changed, 34786 insertions(+), 1079 deletions(-) create mode 100755 .devcontainer/devpod/fetch-workstation-secrets.sh create mode 100644 .devcontainer/devpod/fetch_workstation_secrets.py create mode 100644 .devcontainer/devpod/gcloud-poweroff.provider.yaml create mode 100644 reboot/aio/auth/consent_page.html.j2 delete mode 100644 reboot/examples/agent-wiki/mcp_servers.json delete mode 100644 reboot/examples/ai-chat-counter-dashboard/mcp_servers.json delete mode 100644 reboot/examples/ai-chat-counter/mcp_servers.json delete mode 100644 reboot/examples/chick-potle/mcp_servers.json delete mode 100644 reboot/examples/reboot-swag-store/mcp_servers.json delete mode 100644 reboot/ping/mcp_servers.json create mode 100644 reboot/plugin/skills/upgrade/migrations/1.2.1/remove-mcp-servers-json.md create mode 100644 reboot/plugin/skills/upgrade/migrations/1.2.1/user-create-transaction.md create mode 100644 reboot/plugin/skills/upgrade/migrations/next/mcp-ui-single-child.md create mode 100755 tests/reboot/ping_api_rbt.golden.py create mode 100644 tests/reboot/pydantic/auto_construct_user/BUILD.bazel create mode 100644 tests/reboot/pydantic/auto_construct_user/servicer.py create mode 100644 tests/reboot/pydantic/auto_construct_user/servicer_api.py create mode 100644 tests/reboot/pydantic/auto_construct_user/test.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9c32dffa..409a71c5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -122,5 +122,10 @@ // updateContent runs inside the container after repo content is updated // with new commits. We use it to build new content so users' builds are // mostly incremental. - "updateContentCommand": ".devcontainer/update_content.sh" + "updateContentCommand": ".devcontainer/update_content.sh", + // postStartCommand runs inside the container every time it starts, so on + // every `devpod up`. We use it to (re-)fetch the shared workstation + // secrets from Secret Manager on each start; it is a no-op off GCP + // (e.g. Codespaces). + "postStartCommand": ".devcontainer/devpod/fetch-workstation-secrets.sh || true" } diff --git a/.devcontainer/devpod/fetch-workstation-secrets.sh b/.devcontainer/devpod/fetch-workstation-secrets.sh new file mode 100755 index 00000000..dc297c68 --- /dev/null +++ b/.devcontainer/devpod/fetch-workstation-secrets.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# Fetches the shared workstation secrets from Google Secret Manager and +# writes them as `export` lines into a profile snippet that every shell +# sources, so they appear as environment variables in every terminal on +# the workstation. +# +# This runs automatically on every `devpod up` (via `postStartCommand` in +# `devcontainer.json`) on DevPod GCP workstations. It is a no-op anywhere +# without a GCE metadata server / service account, e.g. Codespaces or +# local Docker. It is safe to re-run by hand to pick up secret changes +# mid-session, after which you open a new shell: +# +# .devcontainer/devpod/fetch-workstation-secrets.sh +# +# A secret is injected iff it carries the label `workstation-env=true`, +# and the secret's NAME becomes the environment variable name, so name +# secrets as valid shell identifiers (e.g. `OPENAI_API_KEY`). See the +# "Workstation secrets" section of `.devcontainer/README.md` for the +# `gcloud` commands to add/list/remove secrets and the one-time setup. + +# Intentionally NOT `set -e`: a failure to fetch must never break +# workstation creation or a shell — secrets are best-effort. +set -uo pipefail + +OUT=/etc/profile.d/10-workstation-secrets.sh +META="http://metadata.google.internal/computeMetadata/v1" +MFLAVOR=(-H "Metadata-Flavor: Google") + +log() { echo "fetch-workstation-secrets: $*" >&2; } + +# Bail quietly unless we're on a GCE VM (the metadata server answers). +if ! curl -sf -m 5 "${MFLAVOR[@]}" "$META/instance/name" >/dev/null 2>&1; then + log "no GCE metadata server; skipping (expected off-GCP)." + exit 0 +fi + +PROJECT="$(curl -sf -m 5 "${MFLAVOR[@]}" "$META/project/project-id" 2>/dev/null || true)" +TOKEN="$(curl -sf -m 5 "${MFLAVOR[@]}" \ + "$META/instance/service-accounts/default/token" 2>/dev/null \ + | python3 -c 'import sys,json; print(json.load(sys.stdin)["access_token"])' 2>/dev/null || true)" +if [ -z "${PROJECT:-}" ] || [ -z "${TOKEN:-}" ]; then + log "no service-account token (is a service account attached?); skipping." + exit 0 +fi + +# Do all the Secret Manager REST work in Python (stdlib only); it prints +# ready-to-source `export` lines. PROJECT/TOKEN come from the env. +script_dir="$(cd "$(dirname "$0")" && pwd)" +body="$(PROJECT="$PROJECT" TOKEN="$TOKEN" \ + python3 "$script_dir/fetch_workstation_secrets.py")" +if [ $? -ne 0 ]; then + log "Secret Manager fetch failed; leaving existing secrets in place." + exit 0 +fi + +# Write atomically as a profile snippet readable only by us and root. +tmp="$(mktemp)" +{ + echo "# Generated by .devcontainer/devpod/fetch-workstation-secrets.sh." + echo "# Secrets in project '$PROJECT' labelled workstation-env=true. Do not edit." + echo "$body" +} >"$tmp" +sudo install -m 0640 -o root -g "$(id -gn)" "$tmp" "$OUT" +rm -f "$tmp" + +# `/etc/profile.d` is sourced by login shells; make sure interactive +# bash and zsh shells (e.g. VS Code terminals) pick it up too. +source_line=". $OUT # workstation secrets" +for rc in /etc/bash.bashrc /etc/zsh/zshrc; do + if [ -f "$rc" ] && ! sudo grep -qF "$OUT" "$rc"; then + echo "[ -r $OUT ] && $source_line" | sudo tee -a "$rc" >/dev/null + fi +done + +log "wrote $(grep -c '^export ' "$OUT" 2>/dev/null || echo 0) secret(s) to $OUT" diff --git a/.devcontainer/devpod/fetch_workstation_secrets.py b/.devcontainer/devpod/fetch_workstation_secrets.py new file mode 100644 index 00000000..013ad49c --- /dev/null +++ b/.devcontainer/devpod/fetch_workstation_secrets.py @@ -0,0 +1,72 @@ +"""Fetches workstation secrets from Google Secret Manager. + +Reads PROJECT and TOKEN (a service-account access token) from the +environment and prints a ready-to-source `export NAME='value'` line for +every secret labelled `workstation-env=true`. +""" + +import base64 +import json +import os +import re +import sys +import urllib.error +import urllib.request +from typing import Any + +_API = "https://secretmanager.googleapis.com/v1" +_VALID_NAME = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$") + + +def _get(url: str, token: str) -> Any: + request = urllib.request.Request( + url, + headers={"Authorization": "Bearer " + token}, + ) + with urllib.request.urlopen(request, timeout=10) as response: + return json.load(response) + + +def main() -> int: + project = os.environ["PROJECT"] + token = os.environ["TOKEN"] + + try: + listing = _get( + f"{_API}/projects/{project}/secrets" + "?filter=labels.workstation-env%3Dtrue&pageSize=500", + token, + ) + except urllib.error.URLError as error: + print(f"# listing secrets failed: {error}", file=sys.stderr) + return 1 + + lines = [] + for secret in listing.get("secrets", []): + name = secret["name"].rsplit("/", 1)[1] + if not _VALID_NAME.match(name): + print( + f"# skipped '{name}': not a valid env var name", + file=sys.stderr, + ) + continue + try: + version = _get( + f"{_API}/projects/{project}/secrets/{name}" + "/versions/latest:access", + token, + ) + value = base64.b64decode(version["payload"]["data"]).decode() + except Exception as error: # noqa: BLE001 (skip unreadable secret) + print(f"# skipped '{name}': {error}", file=sys.stderr) + continue + # Single-quote the value, escaping any embedded single quotes. + escaped = value.replace("'", "'\\''") + lines.append(f"export {name}='{escaped}'") + + print("\n".join(lines)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.devcontainer/devpod/gcloud-poweroff.provider.yaml b/.devcontainer/devpod/gcloud-poweroff.provider.yaml new file mode 100644 index 00000000..14e6eba3 --- /dev/null +++ b/.devcontainer/devpod/gcloud-poweroff.provider.yaml @@ -0,0 +1,224 @@ +# Patched copy of the DevPod gcloud provider (v0.0.12). The ONLY change +# from upstream is `agent.exec.shutdown` (more details below). When bumping +# the provider version, re-sync this file from the upstream release and +# re-apply that one change: +# https://github.com/loft-sh/devpod-provider-gcloud/releases +name: gcloud +version: v0.0.12 +description: |- + DevPod on Google Cloud +icon: https://devpod.sh/assets/gcp.svg +optionGroups: + - options: + - DISK_SIZE + - DISK_IMAGE + - MACHINE_TYPE + name: "GCloud options" + - options: + - AGENT_PATH + - INACTIVITY_TIMEOUT + - INJECT_DOCKER_CREDENTIALS + - INJECT_GIT_CREDENTIALS + name: "Agent options" +options: + PROJECT: + description: The project id to use. + required: true + command: gcloud config list --quiet --verbosity=error --format "value(core.project)" 2>/dev/null || true + ZONE: + description: The google cloud zone to create the VM in. E.g. europe-west1-d + required: true + command: |- + GCLOUD_ZONE=$(gcloud config list --quiet --verbosity=error --format "value(compute.zone)" 2>/dev/null || true) + if [ -z "$GCLOUD_ZONE" ]; then + echo "europe-west2-b" + else + echo $GCLOUD_ZONE + fi + suggestions: + - asia-east1-a + - asia-east1-b + - asia-east1-c + - asia-east2-a + - asia-east2-b + - asia-east2-c + - asia-northeast1-a + - asia-northeast1-c + - asia-northeast2-b + - asia-northeast3-b + - asia-south1-a + - asia-south1-b + - asia-southeast1-a + - europe-north1-a + - europe-north1-b + - europe-north1-c + - europe-west1-b + - europe-west1-c + - europe-west1-d + - europe-west2-a + - europe-west2-b + - europe-west2-c + - europe-west3-a + - europe-west3-b + - europe-west3-c + - europe-west4-a + - europe-west4-b + - europe-west4-c + - europe-west9-a + - europe-west9-b + - europe-west9-c + - me-central1-a + - me-central1-b + - me-central1-c + - me-west1-a + - me-west1-b + - me-west1-c + - northamerica-northeast1-a + - northamerica-northeast1-b + - northamerica-northeast1-c + - southamerica-east1-a + - southamerica-east1-b + - southamerica-east1-c + - southamerica-west1-a + - southamerica-west1-b + - southamerica-west1-c + - us-central1-a + - us-central1-b + - us-central1-f + - us-east1-b + - us-east1-c + - us-east1-d + - us-east4-a + - us-east4-b + - us-east4-c + - us-south1-a + - us-south1-b + - us-south1-c + - us-west1-a + - us-west1-b + - us-west1-c + - us-west2-a + - us-west2-b + - us-west2-c + - us-west4-a + - us-west4-b + - us-west4-c + NETWORK: + description: The network id to use. + SUBNETWORK: + description: The subnetwork id to use. + TAG: + description: A tag to attach to the instance. + default: "devpod" + DISK_SIZE: + description: The disk size to use (GB). + default: "40" + DISK_IMAGE: + description: The disk image to use. + default: projects/cos-cloud/global/images/cos-101-17162-127-5 + SERVICE_ACCOUNT: + description: A service account to attach + default: "" + PUBLIC_IP_ENABLED: + description: Use a public ip to access the instance + default: "true" + MACHINE_TYPE: + description: The machine type to use. + default: c2-standard-4 + suggestions: + - f1-micro + - e2-small + - e2-medium + - n2-standard-2 + - n2-standard-4 + - n2-standard-8 + - n2-standard-16 + - n2-highcpu-8 + - n2-highcpu-16 + - c2-standard-4 + - c2-standard-8 + - c2-standard-16 + - c2-standard-30 + - g2-standard-4 + - g2-standard-8 + - g2-standard-12 + - g2-standard-16 + - a2-highgpu-1g + - a2-highgpu-2g + INACTIVITY_TIMEOUT: + description: If defined, will automatically stop the VM after the inactivity period. + default: 5m + INJECT_GIT_CREDENTIALS: + description: "If DevPod should inject git credentials into the remote host." + default: "true" + INJECT_DOCKER_CREDENTIALS: + description: "If DevPod should inject docker credentials into the remote host." + default: "true" + AGENT_PATH: + description: The path where to inject the DevPod agent to. + default: /var/lib/toolbox/devpod + GCLOUD_PROVIDER_TOKEN: + local: true + hidden: true + cache: 5m + description: "The Google Cloud auth token to use" + command: |- + ${GCLOUD_PROVIDER} token +agent: + path: ${AGENT_PATH} + inactivityTimeout: ${INACTIVITY_TIMEOUT} + injectGitCredentials: ${INJECT_GIT_CREDENTIALS} + injectDockerCredentials: ${INJECT_DOCKER_CREDENTIALS} + binaries: + GCLOUD_PROVIDER: + - os: linux + arch: amd64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-linux-amd64 + checksum: ebc38f3ce8f74f1ea4d79f7ff7de2c6fafb7cceb252422b106013c5ceca402bd + - os: linux + arch: arm64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-linux-arm64 + checksum: b333374e0f97c514e4ce7c3433a7f1fd6aa46922ca18856d470203145ffc2f0f + exec: + # PATCHED. The stock provider runs `${GCLOUD_PROVIDER} stop --raw`, + # which calls the GCP stop API with a token minted at `up` time. That + # token expires after ~1 hour, so an inactivity timeout longer than + # ~1 h fires its stop after the token is dead — and the provider's + # `rawStop` swallows the resulting auth error, so the VM never shuts + # down. + # + # Our replacement is a guest-side `poweroff` which needs no token; + # GCP turns a guest shutdown into TERMINATED (compute billing stops). + # The daemon runs as root, so no sudo is needed. + shutdown: |- + /sbin/poweroff +binaries: + GCLOUD_PROVIDER: + - os: linux + arch: amd64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-linux-amd64 + checksum: ebc38f3ce8f74f1ea4d79f7ff7de2c6fafb7cceb252422b106013c5ceca402bd + - os: linux + arch: arm64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-linux-arm64 + checksum: b333374e0f97c514e4ce7c3433a7f1fd6aa46922ca18856d470203145ffc2f0f + - os: darwin + arch: amd64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-darwin-amd64 + checksum: 37e7a73ebb1be6961695320d54fcb142c021774ff7f5b339a2dec5bbbc317e54 + - os: darwin + arch: arm64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-darwin-arm64 + checksum: 0eb3862c7e5a07a71a6decfe499320664a57925dda2817d1c4a59e4d598f4f82 + - os: windows + arch: amd64 + path: https://github.com/loft-sh/devpod-provider-gcloud/releases/download/v0.0.12/devpod-provider-gcloud-windows-amd64.exe + checksum: c5140711e5a5bac0219a9efd35c8690eb0fbfdc7b6f28e2afe2c05ebf0a17eaa +exec: + init: ${GCLOUD_PROVIDER} init + command: ${GCLOUD_PROVIDER} command + create: ${GCLOUD_PROVIDER} create + delete: ${GCLOUD_PROVIDER} delete + start: ${GCLOUD_PROVIDER} start + stop: ${GCLOUD_PROVIDER} stop + status: ${GCLOUD_PROVIDER} status diff --git a/.devcontainer/git_config.sh b/.devcontainer/git_config.sh index a045077a..f2090521 100755 --- a/.devcontainer/git_config.sh +++ b/.devcontainer/git_config.sh @@ -30,8 +30,12 @@ git config --global submodule.recurse true # https://stackoverflow.com/questions/27417656/should-diff3-be-default-conflictstyle-on-git git config --global merge.conflictstyle diff3 -# Do some extra work to pre-configure GitHub authentication when running -# in a codespace. Skip this for a local devcontainer. +# Codespaces-specific GitHub auth: Codespaces provides HTTPS-only +# credentials and a `GITHUB_TOKEN` scoped to a single repo, so here we +# rewrite SSH remotes to HTTPS and register `gh` as the git credential +# helper. Gated on `CODESPACES` alone because other environments bring +# their own git credentials — DevPod injects them, and a local +# devcontainer uses the host's. if [[ "${CODESPACES:-}" == "true" ]]; then # Use HTTPS instead of SSH for git operations on this workstation: in # Codespaces we have credentials ONLY for HTTPS. See: @@ -39,21 +43,29 @@ if [[ "${CODESPACES:-}" == "true" ]]; then # https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#using-a-token-on-the-command-line git config --global url."https://github.com/".insteadOf "git@github.com:" - # Make it possible for us to push commits to all repos, not just to - # `reboot-dev/mono`. To do so, we... - # 1. Set the `gh` (GitHub CLI) tool as a `git` credential helper. + # Register `gh` as a git credential helper so we can push to every + # repo our GitHub user can access, not only the one this workstation + # was created for. gh auth setup-git +fi - # 2. Set up a script that on every terminal start: - # * Unsets `GITHUB_TOKEN`, so it uses the credential helper instead. - # * Tells the user to run `gh auth login` if they haven't yet. +# A separate, broader block: on any managed workstation (Codespaces or +# DevPod), install a per-terminal reminder to run `gh auth login` when +# the `gh` CLI isn't authenticated. It's its own `if` because `gh` CLI +# auth is useful on DevPod too (for `gh`/agent commands), whereas the +# HTTPS rewrite and credential helper above are Codespaces-only. On +# DevPod plain `git` is authenticated by DevPod's injected credentials, +# so this is purely a `gh`-CLI reminder — the sourced script's +# `unset GITHUB_TOKEN` is a no-op there (that variable exists only in +# Codespaces). Gated to managed workstations so a plain local +# devcontainer isn't nagged. +if [[ "${CODESPACES:-}" == "true" || "${DEVPOD:-}" == "true" ]]; then grep -q "gh_auth_for_all_repos.sh" ~/.bashrc \ || { \ echo "" >> ~/.bashrc \ && echo "# Installed by .devcontainer/git_config.sh" >> ~/.bashrc \ && echo "source .devcontainer/gh_auth_for_all_repos.sh" >> ~/.bashrc \ ;} - fi # Install a script that on every terminal start checks if the precommit diff --git a/.devcontainer/install_precommit_hook.sh b/.devcontainer/install_precommit_hook.sh index 28f47a11..11c81758 100755 --- a/.devcontainer/install_precommit_hook.sh +++ b/.devcontainer/install_precommit_hook.sh @@ -1,49 +1,58 @@ #!/bin/bash # +# Installs a git pre-commit hook that runs the dev-tools and documentation +# pre-commit hooks. The generated hook resolves the repository location at +# RUNTIME (via `git rev-parse`), so it works wherever the repo is checked +# out — a devcontainer, a local clone, or a git worktree — instead of +# baking in the absolute path of wherever it happened to be installed. + function install_precommit_hook() { - local repo_top_level="$(git rev-parse --show-toplevel)" + local repo_top_level + repo_top_level="$(git rev-parse --show-toplevel)" + + # Hooks live in the common git dir, which is shared across worktrees. + local hooks_dir + hooks_dir="$(cd "$(git rev-parse --git-common-dir)" && pwd)/hooks" + # In the mono repo, submodules live under `public/`; in the standalone # public repo they live directly at the top level. local prefix="" if [[ -d "${repo_top_level}/public" ]]; then prefix="public/" fi - local dev_tools_commit_hook_path="${repo_top_level}/${prefix}submodules/dev-tools/pre-commit"; - local local_dev_tools_commit_hook_path="${repo_top_level}/.git/hooks/dev-tools-pre-commit"; - local rbt_documentation_commit_hook_path="${repo_top_level}/${prefix}documentation/pre-commit"; - local local_rbt_documentation_commit_hook_path="${repo_top_level}/.git/hooks/rbt-documentation-pre-commit"; - local local_combined_commit_hook_path="${repo_top_level}/.git/hooks/pre-commit"; - # Check that the dev-tools hook file exists. - if [[ ! -f "${dev_tools_commit_hook_path}" ]]; then - echo "Commit hook from dev-tools not found at '${dev_tools_commit_hook_path}' Aborting."; + # Sanity-check that the source hooks exist (submodules must be checked + # out) before installing. + if [[ ! -f "${repo_top_level}/${prefix}submodules/dev-tools/pre-commit" ]]; then + echo "Commit hook from dev-tools not found under '${prefix}submodules/dev-tools/'. Aborting." return 1 fi - - # Check that the rbt documentation hook file exists. - if [[ ! -f "${rbt_documentation_commit_hook_path}" ]]; then - echo "Commit hook from documentation not found at '${rbt_documentation_commit_hook_path}' Aborting."; + if [[ ! -f "${repo_top_level}/${prefix}documentation/pre-commit" ]]; then + echo "Commit hook from documentation not found under '${prefix}documentation/'. Aborting." return 1 fi - # Create a local symlink for the dev-tools hook. Remove any old ones first, - # in case the paths we're working with have changed. - rm -f "${local_dev_tools_commit_hook_path}" - ln -s -f "${dev_tools_commit_hook_path}" "${local_dev_tools_commit_hook_path}" + # Remove any previously-installed hooks, including the old symlink-based + # layout that baked in absolute paths. + rm -f "${hooks_dir}/dev-tools-pre-commit" \ + "${hooks_dir}/rbt-documentation-pre-commit" \ + "${hooks_dir}/pre-commit" - # Create a local symlink for the rbt documentation hook. Remove any old - # ones first, in case the paths we're working with have changed. - rm -f "${local_rbt_documentation_commit_hook_path}" - ln -s -f "${rbt_documentation_commit_hook_path}" "${local_rbt_documentation_commit_hook_path}" - - # Delete any old precommit hook. It's important to explicitly delete (rather - # than just overwriting) in case the old version was a symlink pointing to a - # file that we don't actually want to overwrite). - rm -f "${local_combined_commit_hook_path}" - - # Create a top-level precommit hook that calls the pulled-in files. - echo "${local_dev_tools_commit_hook_path}; if [ ! \$? -eq 0 ]; then exit 1; fi; ${local_rbt_documentation_commit_hook_path}; exit \$?" > "${local_combined_commit_hook_path}" - chmod +x "${local_combined_commit_hook_path}" + # Write a self-contained hook that resolves the repo root (and thus the + # submodule hook paths) at runtime. The single-quoted heredoc keeps the + # `$(...)` and `${...}` literal so they are evaluated when the hook runs, + # not now. + cat >"${hooks_dir}/pre-commit" <<'HOOK' +#!/bin/bash +# Generated by .devcontainer/install_precommit_hook.sh — do not edit. +set -e +repo_top_level="$(git rev-parse --show-toplevel)" +prefix="" +[[ -d "${repo_top_level}/public" ]] && prefix="public/" +"${repo_top_level}/${prefix}submodules/dev-tools/pre-commit" +"${repo_top_level}/${prefix}documentation/pre-commit" +HOOK + chmod +x "${hooks_dir}/pre-commit" } install_precommit_hook diff --git a/Dockerfile b/Dockerfile index 95dc2ed9..55635d0c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -514,6 +514,20 @@ RUN curl -LsSf https://astral.sh/uv/0.11.13/install.sh | sh \ # `uv` there, and ours (pinned) must win. RUN sudo ln -sf "$HOME/.local/bin/uv" /usr/local/bin/uv RUN echo "export PATH=\"$HOME/.local/bin:\$PATH\"" >> "$HOME/.bashrc" + +# Install Claude Code as the target user so it lands in the user's home +# (where its auto-updater writes), and symlink it onto the system PATH +# like `uv` above so non-interactive shells and other users find it too. +# It's a human-driven tool, so we don't pin the version and leave +# auto-update on. +RUN curl -fsSL https://claude.ai/install.sh | bash \ + && sudo ln -sf "$HOME/.local/bin/claude" /usr/local/bin/claude + +# Give Claude Code the headless Chrome DevTools MCP server in the user's +# config, so it can drive a browser out of the box. +RUN claude mcp add -s user chrome-devtools \ + -- npx --yes chrome-devtools-mcp@latest --headless=true + # Then return to root. USER root @@ -564,11 +578,17 @@ RUN set -e; \ && chmod -R a+rX "${KREW_ROOT}" \ && rm -rf "${TMPDIR}" -# Install Claude Code. We're not worried about breaking changes in this -# tool (we don't use its API or CLI, it's human-driven) so we don't need -# to pin its version, and in fact leave its default auto-update function -# enabled. -RUN curl -fsSL https://claude.ai/install.sh | bash +# Install the Codex CLI globally via npm so it's on PATH for every user. +# Like Claude Code (installed in the user's home above) it's a +# human-driven tool, so we don't pin the version. +RUN npm install -g @openai/codex + +# Give Codex the same headless Chrome DevTools MCP server in the target +# user's config, mirroring the Claude Code setup above. +USER $UNAME +RUN codex mcp add chrome-devtools \ + -- npx --yes chrome-devtools-mcp@latest --headless=true +USER root ############################################################################### # The following is a partial copy-paste from diff --git a/charts/reboot/Chart.yaml b/charts/reboot/Chart.yaml index e955c0d1..0b344b8c 100644 --- a/charts/reboot/Chart.yaml +++ b/charts/reboot/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: 3.3.2 name: reboot -version: "1.2.0" +version: "1.2.1" description: Reboot is a programming framework that enables transactional microservices built with the developer in mind. type: application keywords: @@ -10,4 +10,4 @@ keywords: - scalable - reactive home: https://docs.reboot.dev/ -appVersion: "1.2.0" +appVersion: "1.2.1" diff --git a/documentation/docs/ai_chat_apps/get_started.mdx b/documentation/docs/ai_chat_apps/get_started.mdx index e1b7ec96..828adb71 100644 --- a/documentation/docs/ai_chat_apps/get_started.mdx +++ b/documentation/docs/ai_chat_apps/get_started.mdx @@ -800,33 +800,12 @@ uv run rbt dev run title="Test with MCPJam Inspector" description={` -Create an \`mcp_servers.json\` file that tells MCPJam where -your app is running, then launch the inspector. +Run MCPJam Inspector to interact with your app. `}> ```sh -touch mcp_servers.json -``` - - - - -```json -{ - "mcpServers": { - "counter-server": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} -``` - - - -```sh -npx @mcpjam/inspector@2.9.3 --config mcp_servers.json --server counter-server +npx @mcpjam/inspector@2.18.1 --url http://localhost:9991/mcp --oauth ``` @@ -858,8 +837,7 @@ including `session_create_counter`, `counter_get`, Under the hood, your app communicates via MCP (Model Context Protocol), the standard that AI clients like ChatGPT, Claude, and VS Code use to -discover and interact with apps. The `mcp_servers.json` format works -with any MCP-compatible client. +discover and interact with apps.

Next steps

diff --git a/documentation/docs/ai_chat_apps/get_started_claude_code.mdx b/documentation/docs/ai_chat_apps/get_started_claude_code.mdx index ec0f3da4..2d3b7c30 100644 --- a/documentation/docs/ai_chat_apps/get_started_claude_code.mdx +++ b/documentation/docs/ai_chat_apps/get_started_claude_code.mdx @@ -103,7 +103,6 @@ files are: ``` my-app/ ├── .rbtrc # Reboot CLI config -├── mcp_servers.json # MCP client connection config ├── pyproject.toml # Python deps (uv) ├── api/ │ └── my_app/v1/ diff --git a/documentation/docs/ai_chat_apps/get_started_codex.mdx b/documentation/docs/ai_chat_apps/get_started_codex.mdx index 3d71292b..840696af 100644 --- a/documentation/docs/ai_chat_apps/get_started_codex.mdx +++ b/documentation/docs/ai_chat_apps/get_started_codex.mdx @@ -113,7 +113,6 @@ files are: ``` my-app/ ├── .rbtrc # Reboot CLI config -├── mcp_servers.json # MCP client connection config ├── pyproject.toml # Python deps (uv) ├── api/ │ └── my_app/v1/ diff --git a/documentation/docs/learn_more/call/from_mcp_client.mdx b/documentation/docs/learn_more/call/from_mcp_client.mdx index 6cc6ed2b..b74348a9 100644 --- a/documentation/docs/learn_more/call/from_mcp_client.mdx +++ b/documentation/docs/learn_more/call/from_mcp_client.mdx @@ -22,25 +22,9 @@ MCPJam picks up changes immediately. [MCPJam Inspector](https://mcpjam.com) is a browser-based MCP client ideal for testing during development. -Add an `mcp_servers.json` file in your project root, and fill it in: -```json -{ - "mcpServers": { - "my-app": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} -``` - -Replace `my-app` with a name for your server, and update the URL if your -app runs on a different port or host. - -Then run MCPJam: +Run MCPJam: ```sh -npx @mcpjam/inspector@2.9.3 \ - --config mcp_servers.json --server my-app +npx @mcpjam/inspector@2.18.1 --url http://localhost:9991/mcp --oauth ``` This opens an interface where you can browse your app's tools, call diff --git a/documentation/package-lock.json b/documentation/package-lock.json index 1582fbcd..07cef2bf 100644 --- a/documentation/package-lock.json +++ b/documentation/package-lock.json @@ -35,7 +35,7 @@ "typescript": "~5.5.2" }, "engines": { - "node": ">=16.14" + "node": ">=20.0" } }, "node_modules/@algolia/abtesting": { diff --git a/package.json b/package.json index 7fed691b..3ddd8ba0 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "private": true, "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-std-react": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-std-react": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", + "@reboot-dev/reboot": "1.2.1", "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", "@bufbuild/protobuf": "1.10.1", diff --git a/rbt/std/package.json b/rbt/std/package.json index d31deb0b..fc72871f 100644 --- a/rbt/std/package.json +++ b/rbt/std/package.json @@ -1,6 +1,6 @@ { "name": "@reboot-dev/reboot-std-api", - "version": "1.2.0", + "version": "1.2.1", "description": "Reboot standard library API.", "main": "index.js", "type": "module", diff --git a/rbt/v1alpha1/errors.proto b/rbt/v1alpha1/errors.proto index 84b77e78..340b36da 100644 --- a/rbt/v1alpha1/errors.proto +++ b/rbt/v1alpha1/errors.proto @@ -34,6 +34,14 @@ message TransactionParticipantFailedToPrepare {} message TransactionParticipantFailedToCommit {} +//////////////////////////////////////////////////////////////////////// + +// Raised by a transaction participant that detects that the current +// transaction should be retried from scratch for any reason. As +// opposed to `Unavailable` (which also results in a retry), this error +// signals that no backoff is required before the retry. +message TransactionShouldRetryWithoutBackoff {} + //////////////////////////////////////////////////////////////////////// // gRPC: //////////////////////////////////////////////////////////////////////// diff --git a/rbt/v1alpha1/index.ts b/rbt/v1alpha1/index.ts index 25071110..5fdda02d 100644 --- a/rbt/v1alpha1/index.ts +++ b/rbt/v1alpha1/index.ts @@ -525,6 +525,9 @@ export const ZOD_ERRORS = z.discriminatedUnion("type", [ z.object({ type: z.literal("TransactionParticipantFailedToCommit"), }), + z.object({ + type: z.literal("TransactionShouldRetryWithoutBackoff"), + }), z.object({ type: z.literal("Cancelled"), }), @@ -619,6 +622,7 @@ export const REBOOT_ERROR_TYPES = [ errors_pb.StateNotConstructed, errors_pb.TransactionParticipantFailedToPrepare, errors_pb.TransactionParticipantFailedToCommit, + errors_pb.TransactionShouldRetryWithoutBackoff, errors_pb.UnknownService, errors_pb.UnknownTask, ] as const; // Need `as const` to ensure TypeScript infers this as a tuple! @@ -690,6 +694,13 @@ export function grpcStatusCodeFromError( return StatusCode.UNAVAILABLE; } + // Behaves like `Unavailable` (the call is retried); the distinct type + // lets the runtime recognize the restart and refresh its timestamp + // before retrying. + if (error instanceof errors_pb.TransactionShouldRetryWithoutBackoff) { + return StatusCode.UNAVAILABLE; + } + if (error instanceof errors_pb.DataLoss) { return StatusCode.DATA_LOSS; } @@ -869,6 +880,8 @@ export function errorFromZodError( return new errors_pb.TransactionParticipantFailedToPrepare(); case "TransactionParticipantFailedToCommit": return new errors_pb.TransactionParticipantFailedToCommit(); + case "TransactionShouldRetryWithoutBackoff": + return new errors_pb.TransactionShouldRetryWithoutBackoff(); } } @@ -924,6 +937,8 @@ export function zodErrorFromError( return { type: "TransactionParticipantFailedToPrepare" }; } else if (error instanceof errors_pb.TransactionParticipantFailedToCommit) { return { type: "TransactionParticipantFailedToCommit" }; + } else if (error instanceof errors_pb.TransactionShouldRetryWithoutBackoff) { + return { type: "TransactionShouldRetryWithoutBackoff" }; } throw new Error(`Unknown error type '${error.getType().typeName}'`); } diff --git a/rbt/v1alpha1/package.json b/rbt/v1alpha1/package.json index 544ca09e..e77db399 100644 --- a/rbt/v1alpha1/package.json +++ b/rbt/v1alpha1/package.json @@ -1,6 +1,6 @@ { "name": "@reboot-dev/reboot-api", - "version": "1.2.0", + "version": "1.2.1", "type": "module", "description": "npm package for Reboot API", "main": "index.js", diff --git a/reboot/aio/aborted.py b/reboot/aio/aborted.py index 6412f4a8..b38c90d9 100644 --- a/reboot/aio/aborted.py +++ b/reboot/aio/aborted.py @@ -59,6 +59,7 @@ def is_retryable(aborted: Aborted): rbt.v1alpha1.errors_pb2.StateNotConstructed, rbt.v1alpha1.errors_pb2.TransactionParticipantFailedToPrepare, rbt.v1alpha1.errors_pb2.TransactionParticipantFailedToCommit, + rbt.v1alpha1.errors_pb2.TransactionShouldRetryWithoutBackoff, rbt.v1alpha1.errors_pb2.UnknownService, rbt.v1alpha1.errors_pb2.UnknownTask, rbt.v1alpha1.errors_pb2.InvalidMethod, @@ -88,6 +89,7 @@ def is_retryable(aborted: Aborted): rbt.v1alpha1.errors_pb2.StateNotConstructed, rbt.v1alpha1.errors_pb2.TransactionParticipantFailedToPrepare, rbt.v1alpha1.errors_pb2.TransactionParticipantFailedToCommit, + rbt.v1alpha1.errors_pb2.TransactionShouldRetryWithoutBackoff, rbt.v1alpha1.errors_pb2.UnknownService, rbt.v1alpha1.errors_pb2.UnknownTask, rbt.v1alpha1.errors_pb2.InvalidMethod, @@ -304,6 +306,16 @@ def grpc_status_code_from_error( elif isinstance(error, rbt.v1alpha1.errors_pb2.Unavailable): return grpc.StatusCode.UNAVAILABLE + elif isinstance( + error, + rbt.v1alpha1.errors_pb2.TransactionShouldRetryWithoutBackoff, + ): + # Behaves like `Unavailable` (it is retryable), but its + # distinct type lets the runtime recognize the restart, + # refresh the coordinator's timestamp, and skip the + # backoff before the first retry. + return grpc.StatusCode.UNAVAILABLE + elif isinstance(error, rbt.v1alpha1.errors_pb2.DataLoss): return grpc.StatusCode.DATA_LOSS diff --git a/reboot/aio/applications.py b/reboot/aio/applications.py index 5ceef126..455ccea8 100644 --- a/reboot/aio/applications.py +++ b/reboot/aio/applications.py @@ -393,7 +393,7 @@ def __init__( self._token_verifier = token_verifier self._initialize_bearer_token = initialize_bearer_token self._oauth = oauth - self._title = title + self._title = title or application_name() self._description = description self._example_prompts = example_prompts or [] @@ -642,6 +642,7 @@ async def record_connection( oauth_server = OAuthServer( provider=provider, protected_resources=[_MCP_PATH], + application_title=self._title, ) self._token_verifier = oauth_server.token_verifier mcp_sdk_token_verifier = oauth_server.mcp_sdk_token_verifier @@ -719,7 +720,7 @@ async def initialize(context: InitializeContext) -> None: # authorizer requires. await reboot.application.ref().always().initialize( context, - title=self._title or application_name(), + title=self._title, description=self._description, port=local_envoy_port, mcp=any( diff --git a/reboot/aio/auth/BUILD.bazel b/reboot/aio/auth/BUILD.bazel index 31c2a3b3..39c7d066 100644 --- a/reboot/aio/auth/BUILD.bazel +++ b/reboot/aio/auth/BUILD.bazel @@ -73,6 +73,7 @@ py_library( py_library( name = "oauth_server_py", srcs = ["oauth_server.py"], + data = ["consent_page.html.j2"], srcs_version = "PY3", visibility = ["//visibility:public"], deps = [ @@ -83,6 +84,7 @@ py_library( "//reboot/aio:http_py", "//reboot/crypto:root_keys_py", "@com_github_reboot_dev_reboot//rbt/std/oauth/v1:oauth_py_reboot", + requirement("jinja2"), requirement("pyjwt"), requirement("starlette"), ], diff --git a/reboot/aio/auth/consent_page.html.j2 b/reboot/aio/auth/consent_page.html.j2 new file mode 100644 index 00000000..c4f7eae8 --- /dev/null +++ b/reboot/aio/auth/consent_page.html.j2 @@ -0,0 +1,226 @@ + + + + + +Authorize application + + + + + + +
+

{{ application_title }}

+

Do you trust this AI?

+

+ An AI wants to use {{ application_title }} on your behalf +

+
+ {% if client_uri %} +
+ {{ client_name or "An application" }} +
+ {% if client_uri_safe %} + {{ client_uri }} + {% else %} + {{ client_uri }} + {% endif %} +
+
+ {% else %} +

{{ client_name or "An application" }}

+ {% endif %} +

hosted at

+
+ {{ redirect_origin }} +
{{ redirect_uri }}
+
+
+
+ Only continue if you started this sign-in and recognize this + address. If anything looks unfamiliar, do not approve — + approving lets this AI act as you. +
+
+ +
+ + +
+
+ +
+ + diff --git a/reboot/aio/auth/oauth_server.py b/reboot/aio/auth/oauth_server.py index 7c88591b..39aa8a3f 100644 --- a/reboot/aio/auth/oauth_server.py +++ b/reboot/aio/auth/oauth_server.py @@ -12,8 +12,11 @@ import json import jwt import logging +import os import rbt.v1alpha1.errors_pb2 +import secrets import time +from jinja2 import Template from mcp.server.auth.provider import AccessToken from reboot.aio.auth import Auth from reboot.aio.auth.oauth_providers import ( @@ -27,9 +30,9 @@ from reboot.aio.http import PythonWebFramework, external_context from reboot.crypto import root_keys from starlette.requests import Request -from starlette.responses import JSONResponse, RedirectResponse +from starlette.responses import HTMLResponse, JSONResponse, RedirectResponse from typing import Any, Optional -from urllib.parse import urlencode +from urllib.parse import urlencode, urlparse logger = logging.getLogger(__name__) @@ -53,10 +56,27 @@ # with developer-specified routes. The `/.well-known/` discovery paths # (mandated by RFC 8414 / RFC 9728) stay at their standard locations. _AUTHORIZE_PATH = "/__/oauth/authorize" +_CONSENT_PATH = "/__/oauth/consent" _TOKEN_PATH = "/__/oauth/token" _REGISTER_PATH = "/__/oauth/register" _CALLBACK_PATH = "/__/oauth/callback" +# Name of the CSRF cookie set when the consent screen is rendered. See +# below for more details on how this cookie is used. +_CONSENT_CSRF_COOKIE = "rbt_oauth_consent" + +_CONSENT_PAGE_TEMPLATE_PATH = os.path.join( + os.path.dirname(__file__), + "consent_page.html.j2", +) + +# Cap on the optional RFC 7591 display metadata (`client_name`, +# `client_uri`) we copy into the signed `client_id`. These are +# attacker-controlled and purely cosmetic on the consent screen, so a +# generous-but-finite limit keeps a hostile registration from bloating +# the JWT (and the `/authorize` URLs that carry it). +_MAX_CLIENT_METADATA_LENGTH = 256 + # CORS headers for browser-based MCP clients (e.g. MCPJam, MCP # Inspector). Allow any origin since the server is an OAuth # Authorization Server that public clients talk to. @@ -218,7 +238,15 @@ class OAuthServer: JWT encoding the registered URIs). 3. **Authorization.** The client redirects the user to `GET - /authorize` with PKCE parameters. We redirect to the identity + /authorize` with PKCE parameters. Because clients register + dynamically (step 2), we don't redirect to the identity provider + straight away: we first show a **consent screen** naming the + client and, prominently, the `redirect_uri` host its tokens will + be sent to, so the user can catch an unknown client trying to + harvest their identity (an "open client" / confused-deputy + attack — see + https://github.com/reboot-dev/mono/issues/5560). Only after the + user approves (`POST /consent`) do we redirect to the identity provider (Google, GitHub, or straight back for Anonymous). 4. **identity provider callback.** The identity provider redirects @@ -249,15 +277,21 @@ def __init__( *, provider: OAuthProvider, protected_resources: list[str], + # The application's human-readable title, e.g. "Hipster Chat". + application_title: str, ): self._provider = provider self._protected_resources = protected_resources + self._application_title = application_title self._access_token_ttl_seconds = provider.access_token_ttl_seconds # Derived from the Reboot-managed cryptographic root keys; raises # if `REBOOT_CRYPTO_ROOT_KEYS` is unset/malformed (fail fast at # construction rather than per-request). self._signing_secret = signing_secret() self._token_verifier = OAuthTokenVerifier(self._signing_secret) + # The consent page template, compiled lazily on first render so + # only apps that actually serve an OAuth flow pay for it. + self._consent_page_template: Optional[Template] = None @property def token_verifier(self) -> OAuthTokenVerifier: @@ -299,6 +333,10 @@ def mount_routes(self, http: PythonWebFramework.HTTP) -> None: # Authorization and token endpoints. http.get(_AUTHORIZE_PATH)(self.authorize) + # The consent screen `/authorize` renders POSTs the user's + # decision here (same-origin form submission, so no CORS + # preflight is needed). + http.post(_CONSENT_PATH)(self.consent) # The callback persists the provider's tokens (when # `store_tokens=True`) via the app-internal-only `Ciphertext` / # `OrderedMap` servicers, so it opts in to an app-internal context @@ -354,6 +392,71 @@ def _verify_jwt( except jwt.exceptions.PyJWTError: return None + def _render_consent_page(self, **context: Any) -> str: + """Render the consent screen HTML, compiling the template on + first use. `autoescape` is on because every interpolated value + (client name/URI, redirect URI, the app origin) is + attacker-influenced — anyone can register a client. + """ + if self._consent_page_template is None: + with open(_CONSENT_PAGE_TEMPLATE_PATH) as template_file: + self._consent_page_template = Template( + template_file.read(), + autoescape=True, + ) + return self._consent_page_template.render(**context) + + def _redirect_to_idp( + self, + *, + request: Request, + client_id_token: str, + redirect_uri: str, + code_challenge: str, + code_challenge_method: str, + mcp_state: str, + ) -> RedirectResponse: + """Mint the `pending` state JWT and redirect the user to the + identity provider to sign in. Reached only after the user + approves on the consent screen; the `pending` token carries + everything needed to resume in `/callback` once the provider + redirects back. + + OAuth's `state` parameter is an opaque string that the identity + provider passes back unchanged in the callback. We use it to + carry a signed JWT with everything we need to resume: + `client_id`, `redirect_uri`, PKCE challenge, and the MCP + client's own state. This avoids server-side session storage, and + is safe because... + 1. The communication with the identity provider is over TLS + (required by the OAuth spec), so it won't be observed in + transit. + 2. None of the fields are secret to either the client or the + identity provider. + 3. Since the token is signed, the identity provider can't alter + it to e.g. misdirect the redirect. + """ + pending = self._make_jwt( + { + "type": "pending", + "client_id": client_id_token, + "redirect_uri": redirect_uri, + "code_challenge": code_challenge, + "code_challenge_method": code_challenge_method, + "mcp_state": mcp_state, + }, + ttl_seconds=_PENDING_STATE_TTL_SECONDS, + ) + + # Our own callback URL. + callback_uri = f"{origin_from_request(request)}{_CALLBACK_PATH}" + + idp_url = self._provider.authorization_url( + state=pending, + redirect_uri=callback_uri, + ) + return RedirectResponse(url=idp_url, status_code=302) + async def _store_oauth_tokens( self, request: Request, @@ -506,11 +609,30 @@ async def register(self, request: Request) -> JSONResponse: # in `/authorize` without needing a database. Client # registrations are normally permanent, but JWTs require an # `exp`, so we use an effectively-forever TTL. + client_metadata: dict[str, Any] = { + "type": "client", + "redirect_uris": redirect_uris, + } + # RFC 7591 client metadata we surface on the consent screen so a + # user can recognize who's asking. Optional and + # attacker-controlled (anyone can register), so they're shown + # only as hints next to the authoritative `redirect_uri` host, + # never trusted. Carried in the signed `client_id` so they're + # available statelessly at `/authorize`. + # Over-limit values are dropped (not truncated), leaving the + # consent screen to fall back to the authoritative + # `redirect_uri` host. + client_name = body.get("client_name") + if isinstance(client_name, str + ) and (len(client_name) <= _MAX_CLIENT_METADATA_LENGTH): + client_metadata["client_name"] = client_name + client_uri = body.get("client_uri") + if isinstance(client_uri, str + ) and (len(client_uri) <= _MAX_CLIENT_METADATA_LENGTH): + client_metadata["client_uri"] = client_uri + client_id = self._make_jwt( - { - "type": "client", - "redirect_uris": redirect_uris, - }, + client_metadata, ttl_seconds=1000 * 365 * 24 * 3600, # ~1000 years. ) @@ -527,7 +649,9 @@ async def register(self, request: Request) -> JSONResponse: async def authorize(self, request: Request): """GET /authorize - Validates the request, then redirects to the identity provider. + Validates the request, then renders a consent screen naming the + client and its `redirect_uri` host. The flow only continues to + the identity provider once the user approves via `POST /consent`. """ params = request.query_params @@ -584,40 +708,170 @@ async def authorize(self, request: Request): mcp_state = params.get("state", "") - # OAuth's `state` parameter is an opaque string that the - # identity provider passes back unchanged in the callback. We - # use it to carry a signed JWT with everything we need to resume - # after the identity provider redirects back: `client_id`, - # `redirect_uri`, PKCE challenge, and the MCP client's own - # state. This avoids server-side session storage, and is safe - # because... - # 1. The communication with the identity provider is over TLS - # (required by the OAuth spec), so it won't be observed in - # transit. - # 2. None of the fields are secret to either the client or the - # identity provider. - # 3. Since the token is signed, the identity provider can't - # alter it to e.g. misdirect the redirect. - pending = self._make_jwt( + # Don't redirect to the identity provider yet: show a consent + # screen first. Clients register dynamically (RFC 7591), so the + # `client_id` and `redirect_uri` are whatever some caller asked + # for — absent this checkpoint an attacker can register a client + # with their own `redirect_uri`, send a victim an `/authorize` + # link on this trusted origin, and harvest an access token for + # the victim's identity once they sign in (an "open client" / + # confused-deputy attack; + # https://github.com/reboot-dev/mono/issues/5560). PKCE doesn't + # help — the attacker is the registered client, so they hold the + # verifier. The consent screen gives the user a chance to notice + # the unfamiliar `redirect_uri` host before signing in. + # + # See the discussion on `_CONSENT_CSRF_COOKIE` below for info on + # how the `nonce` helps prevent CSRF attacks. + nonce = secrets.token_urlsafe(32) + consent_token = self._make_jwt( { - "type": "pending", + "type": "consent", "client_id": client_id_token, "redirect_uri": redirect_uri, "code_challenge": code_challenge, "code_challenge_method": code_challenge_method, "mcp_state": mcp_state, + "nonce": nonce, }, ttl_seconds=_PENDING_STATE_TTL_SECONDS, ) - # Our own callback URL. - callback_uri = f"{origin_from_request(request)}{_CALLBACK_PATH}" + origin = origin_from_request(request) + parsed_redirect = urlparse(redirect_uri) + # The prominent host on the consent screen is what the user + # checks, so strip any `userinfo@` from the netloc: a + # `redirect_uri` like `https://trusted.example@evil.com/cb` + # would otherwise show the trusted-looking left side while the + # tokens actually go to `evil.com`. + redirect_host = parsed_redirect.netloc.rsplit("@", 1)[-1] + client_uri = client_data.get("client_uri") + # Only render `client_uri` as a clickable link when it's an + # http(s) URL; a `javascript:`/`data:` scheme would be an XSS + # vector even with autoescaping, which doesn't neutralize a + # dangerous URL scheme. + client_uri_safe = ( + isinstance(client_uri, str) and + urlparse(client_uri).scheme in ("http", "https") + ) + html = self._render_consent_page( + application_title=self._application_title, + client_name=client_data.get("client_name") or None, + client_uri=client_uri if isinstance(client_uri, str) else None, + client_uri_safe=client_uri_safe, + redirect_uri=redirect_uri, + redirect_origin=f"{parsed_redirect.scheme}://{redirect_host}", + consent_token=consent_token, + consent_path=_CONSENT_PATH, + ) + response = HTMLResponse(html) + response.set_cookie( + _CONSENT_CSRF_COOKIE, + nonce, + max_age=_PENDING_STATE_TTL_SECONDS, + path=_CONSENT_PATH, + httponly=True, + # `Strict`: the only request that ever consumes this cookie + # is the same-site `POST /consent` triggered by a user + # click; our CSRF protection relies on this cookie never + # getting delivered cross-site. + samesite="strict", + # Only mark `Secure` over https; in local `http://` dev a + # `Secure` cookie would be silently dropped by the browser, + # breaking the double-submit check. + secure=origin.startswith("https://"), + ) + return response - idp_url = self._provider.authorization_url( - state=pending, - redirect_uri=callback_uri, + async def consent(self, request: Request): + """POST /consent + + Receives the user's decision from the consent screen rendered by + `/authorize`. On approval, resumes the flow by redirecting to the + identity provider; on denial (or any non-approval), redirects + back to the client with an `access_denied` error per RFC 6749 + 4.1.2.1. + """ + form = await request.form() + + consent_token = form.get("consent") + if consent_token is None: + return _oauth_error( + error="invalid_request", + description="The 'consent' parameter is required.", + status_code=400, + ) + + # `_verify_jwt` checks the HS256 signature (and `type`/`exp`) + # with our signing secret, so from here the token's `nonce` is + # known to be one we issued, not an attacker's. + consent_data = self._verify_jwt(str(consent_token), "consent") + if consent_data is None: + return _oauth_error( + error="invalid_request", + description="Invalid or expired consent request.", + status_code=400, + ) + + # CSRF defense — the "double-submit cookie" pattern. When the + # consent page was rendered (in `authorize`) we generated one + # random `nonce` and put it in two places: the + # `rbt_oauth_consent` cookie (set on that GET response) and, + # signed, inside the consent token in the form. `/consent` + # requires the two to match — the same secret arrives once via + # the cookie and once via the form body. + # + # This protects against a cross-site attacker (a different + # site): they can mint a valid consent token for their own + # client (so they control the form half), but they can't read + # our cookie or make the browser send it. `SameSite=Strict` + # keeps the cookie off every cross-site request, so a forged + # POST from their page carries no cookie of ours to pair with + # their token — reject. + # + # Putting our nonce into our _signed_ token additionally covers + # a *same-site* attacker — e.g. a compromised sibling subdomain, + # which can write a parent-domain cookie. In that case they + # could set both the cookie and the form field, but they still + # wouldn't be able to forge our signature. We already validated + # the token signature above, so here we just need to check that + # the cookie matches. + cookie_nonce = request.cookies.get(_CONSENT_CSRF_COOKIE) + if cookie_nonce is None or not secrets.compare_digest( + cookie_nonce, str(consent_data.get("nonce", "")) + ): + return _oauth_error( + error="access_denied", + description="Consent could not be verified; please restart " + "the sign-in.", + status_code=403, + ) + + redirect_uri = consent_data["redirect_uri"] + mcp_state = consent_data.get("mcp_state", "") + + if form.get("action") != "approve": + # Anything that isn't an explicit approval — the "Cancel" + # button, a malformed submission — is reported to the client + # as a denial. + query = urlencode({"error": "access_denied", "state": mcp_state}) + denied = RedirectResponse( + url=f"{redirect_uri}?{query}", + status_code=302, + ) + denied.delete_cookie(_CONSENT_CSRF_COOKIE, path=_CONSENT_PATH) + return denied + + response = self._redirect_to_idp( + request=request, + client_id_token=consent_data["client_id"], + redirect_uri=redirect_uri, + code_challenge=consent_data["code_challenge"], + code_challenge_method=consent_data["code_challenge_method"], + mcp_state=mcp_state, ) - return RedirectResponse(url=idp_url, status_code=302) + response.delete_cookie(_CONSENT_CSRF_COOKIE, path=_CONSENT_PATH) + return response async def callback(self, request: Request): """GET /oauth/callback diff --git a/reboot/aio/state_managers.py b/reboot/aio/state_managers.py index 9d28074d..793de8cd 100644 --- a/reboot/aio/state_managers.py +++ b/reboot/aio/state_managers.py @@ -37,6 +37,7 @@ StateNotConstructed, TransactionParticipantFailedToCommit, TransactionParticipantFailedToPrepare, + TransactionShouldRetryWithoutBackoff, Unavailable, ) from reboot.admin.export_import_converters import ExportImportItemConverters @@ -105,6 +106,21 @@ logger.setLevel(logging.WARNING) +def _should_retry_without_backoff(exception: BaseException) -> bool: + """Whether `exception` is an `Aborted` carrying a + `TransactionShouldRetryWithoutBackoff` (raised by a participant + that recovered after the transaction began). The error may be + wrapped in any method's generated `Aborted` subtype, so we inspect + `.error` rather than the exception type.""" + if not isinstance(exception, Aborted): + return False + try: + error = exception.error + except NotImplementedError: + return False + return isinstance(error, TransactionShouldRetryWithoutBackoff) + + def check_idempotency_key_not_expired(idempotency_key: uuid.UUID) -> None: """Check if the idempotency key is an expired UUIDv7. @@ -3666,9 +3682,12 @@ async def transactionally( ): # Server recovered after this transaction started, # which means it may have already participated and - # lost in-memory state when it restarted. Return - # UNAVAILABLE so the caller retries with a fresh - # transaction. + # lost in-memory state when it restarted. Abort with + # `TransactionShouldRetryWithoutBackoff` (retried + # like `Unavailable`) so the caller retries with a + # fresh transaction; the distinct type lets the + # coordinator refresh its timestamp and skip the + # first retry's backoff. transaction_time = datetime.fromtimestamp( transaction_timestamp_ms / 1000, tz=timezone.utc, @@ -3678,7 +3697,7 @@ async def transactionally( tz=timezone.utc, ).isoformat() raise SystemAborted( - Unavailable(), + TransactionShouldRetryWithoutBackoff(), message=( f"Transaction {root_transaction_id} was " f"created at {transaction_time} but this " @@ -4666,12 +4685,30 @@ async def complete(effects: Effects) -> None: coordinator_state_ref=state_ref, participants=context.participants, ) - except: + except BaseException as exception: if context.nested: # A nested transaction just re-raises and lets the # abort propagate back to the caller. raise else: + # We are the coordinator, so we are the one who stamps + # the transaction with a timestamp. If a participant + # aborted with `TransactionShouldRetryWithoutBackoff`, + # advance our clock so the upcoming retry is stamped + # with a newer timestamp - that addresses a reason why + # `TransactionShouldRetryWithoutBackoff` might have been + # raised (the participant might have restarted after the + # transaction started). + if _should_retry_without_backoff(exception): + try: + self._update_latest_timestamp( + await self._database_client.refresh_timestamp() + ) + except Exception: + # Best-effort: on failure we fall back to the + # periodic refresh loop. + pass + # Drive Abort RPCs so participants release their # locks and forget the transaction. Covers # failures from `_load` / the body / validation / diff --git a/reboot/aio/stubs.py b/reboot/aio/stubs.py index 39450aae..a8c4b20d 100644 --- a/reboot/aio/stubs.py +++ b/reboot/aio/stubs.py @@ -112,8 +112,26 @@ def _should_retry(self, error: grpc.aio.AioRpcError) -> bool: # For now, the only retriable error is UNAVAILABLE. return error.code() == grpc.StatusCode.UNAVAILABLE + async def _should_retry_without_backoff(self) -> bool: + """Whether the failed call aborted with + `TransactionShouldRetryWithoutBackoff`.""" + if self._call is None: + return False + status = await rpc_status.from_call(self._call) + if status is None: + return False + return Aborted.error_from_google_rpc_status_details( + status, + [errors_pb2.TransactionShouldRetryWithoutBackoff], + ) is not None + async def _call_with_retries(self) -> ResponseT: backoff = Backoff() + # A `TransactionShouldRetryWithoutBackoff` asks us to retry + # immediately, but we elide the backoff only once: a transaction + # that keeps restarting should still back off rather than hammer + # the cluster with immediate retries. + backoff_elided = False while True: if self._call is None: new_call = self._stub_method( @@ -125,12 +143,17 @@ async def _call_with_retries(self) -> ResponseT: return await self._call except grpc.aio.AioRpcError as error: if self._should_retry(error): - # Retry this, with some backoff. logger.debug( f"Unary call to '{self._method_name}' encountered " f"retryable error: {error}; will retry..." ) - await backoff() + apply_backoff = backoff_elided or not ( + await self._should_retry_without_backoff() + ) + if apply_backoff: + await backoff() + else: + backoff_elided = True # We need to create a fresh call object for the # retry. self._call = None diff --git a/reboot/api.py b/reboot/api.py index b113abeb..89660b14 100644 --- a/reboot/api.py +++ b/reboot/api.py @@ -1223,19 +1223,23 @@ def __init__(self, **types: Optional[Type]): f"{type_name} types. If you want " "custom initialization logic, " "override the default " - f"'{AUTO_CONSTRUCT_METHOD}' Writer " - "in your servicer implementation " - "instead of declaring it in the API " - "definition. You may also declare " - "alternative factory methods for " - "your own use, but note the system " - "will always use " + f"'{AUTO_CONSTRUCT_METHOD}' " + "Transaction in your servicer " + "implementation instead of declaring " + "it in the API definition. You may " + "also declare alternative factory " + "methods for your own use, but note " + "the system will always use " f"'{AUTO_CONSTRUCT_METHOD}' when " "automatically constructing a " f"'{type_name}' for a new AI " "session." ) - data_type.methods[AUTO_CONSTRUCT_METHOD] = Writer( + # The auto-constructed `create` is a `Transaction`, so + # that a servicer overriding it can call other state + # machines while constructing a `User`, e.g. "when a + # `User` is created, also create a `Cart`". + data_type.methods[AUTO_CONSTRUCT_METHOD] = Transaction( request=None, response=None, factory=True, @@ -1253,8 +1257,13 @@ def __init__(self, **types: Optional[Type]): def get_types(self) -> Dict[str, Type]: """Get all Reboot data types defined in this API.""" types = {} - for field_name in self.model_fields_set: - field_value = getattr(self, field_name, None) + # Iterate `__pydantic_extra__`, which preserves the order in + # which the types were passed to `API(...)`, rather than + # `model_fields_set`, which is a `set` whose iteration order + # is randomized per process. The types' order flows through + # to the synthesized `.proto` and thus the generated code, so + # a stable order keeps generated output deterministic. + for field_name, field_value in (self.__pydantic_extra__ or {}).items(): if isinstance(field_value, Type): types[field_name] = field_value diff --git a/reboot/benchmarks/construct/package-lock.json b/reboot/benchmarks/construct/package-lock.json index e6db9829..adaf4320 100644 --- a/reboot/benchmarks/construct/package-lock.json +++ b/reboot/benchmarks/construct/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "@supercharge/promise-pool": "^3.2.0", "parse-duration": "2.1.3", "uuid": "11.1.0" @@ -532,15 +532,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -569,9 +569,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -3148,13 +3148,13 @@ "optional": true }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -3178,9 +3178,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", diff --git a/reboot/benchmarks/construct/package.json b/reboot/benchmarks/construct/package.json index 3b8cb220..f1784a3f 100644 --- a/reboot/benchmarks/construct/package.json +++ b/reboot/benchmarks/construct/package.json @@ -11,7 +11,7 @@ "type": "module", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "@supercharge/promise-pool": "^3.2.0", "uuid": "11.1.0", "parse-duration": "2.1.3" diff --git a/reboot/cli/init/templates/backend_package.json.j2 b/reboot/cli/init/templates/backend_package.json.j2 index 962f670c..f16d14d8 100644 --- a/reboot/cli/init/templates/backend_package.json.j2 +++ b/reboot/cli/init/templates/backend_package.json.j2 @@ -4,7 +4,7 @@ "private": true, "type": "module", "dependencies": { - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "typescript": "^5.5.2" } } diff --git a/reboot/cli/init/templates/package.json.j2 b/reboot/cli/init/templates/package.json.j2 index 946e2697..61a3ce92 100644 --- a/reboot/cli/init/templates/package.json.j2 +++ b/reboot/cli/init/templates/package.json.j2 @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@types/jest": "^27.5.2", "@types/node": "^20.11.5", "@types/react": "^19.2.1", diff --git a/reboot/create-ui/package.json b/reboot/create-ui/package.json index 0f510557..ae26ba44 100644 --- a/reboot/create-ui/package.json +++ b/reboot/create-ui/package.json @@ -1,6 +1,6 @@ { "name": "@reboot-dev/create-ui", - "version": "1.2.0", + "version": "1.2.1", "description": "Scaffold React implementation for Reboot AI Chat App UIs", "type": "commonjs", "bin": { diff --git a/reboot/create-ui/src/templates.ts b/reboot/create-ui/src/templates.ts index 641ecf97..3d40beb8 100644 --- a/reboot/create-ui/src/templates.ts +++ b/reboot/create-ui/src/templates.ts @@ -70,8 +70,8 @@ export function packageJson( dependencies: { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", react: "^18.2.0", "react-dom": "^18.2.0", zod: "^4.0.0", diff --git a/reboot/demos/fig/package-lock.json b/reboot/demos/fig/package-lock.json index bbf9c8c2..a1ffcf5d 100644 --- a/reboot/demos/fig/package-lock.json +++ b/reboot/demos/fig/package-lock.json @@ -10,11 +10,11 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@radix-ui/react-icons": "^1.3.0", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-std-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-std-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-draggable": "^4.4.6", @@ -1357,15 +1357,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -1394,9 +1394,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1420,15 +1420,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1469,45 +1469,45 @@ } }, "node_modules/@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-std-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.0.tgz", - "integrity": "sha512-h77eSxkbER7BnzBEuZjfIdOwVq+a21EvKqUpwD7kEouJGiGIWxWmTvtlnKkrUr+G2YZnXyb/eVLzKpoq6aGnJQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.1.tgz", + "integrity": "sha512-CCjS7MYLmwXGJ4u1gcsRZ1EwarJtnFTezukujuQs8xS80m6sc9UJ0SgCkgvNkLfv0rWwxnRP2sP4FFQ5R4hWVw==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -4184,9 +4184,9 @@ } }, "node_modules/hono": { - "version": "4.12.26", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.26.tgz", - "integrity": "sha512-uyZtpnYxM9CmQ7QsQknM4zN8EftNqhON1qYeIKM0Se67CCEe2c44xyGURwB0axX2fBDu1dqHrHAc1hmNT8ITkw==", + "version": "4.12.27", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", + "integrity": "sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -8098,13 +8098,13 @@ "requires": {} }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -8311,9 +8311,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -8328,14 +8328,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -8357,41 +8357,41 @@ } }, "@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "requires": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "requires": { "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-std-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.0.tgz", - "integrity": "sha512-h77eSxkbER7BnzBEuZjfIdOwVq+a21EvKqUpwD7kEouJGiGIWxWmTvtlnKkrUr+G2YZnXyb/eVLzKpoq6aGnJQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.1.tgz", + "integrity": "sha512-CCjS7MYLmwXGJ4u1gcsRZ1EwarJtnFTezukujuQs8xS80m6sc9UJ0SgCkgvNkLfv0rWwxnRP2sP4FFQ5R4hWVw==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -9919,9 +9919,9 @@ } }, "hono": { - "version": "4.12.26", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.26.tgz", - "integrity": "sha512-uyZtpnYxM9CmQ7QsQknM4zN8EftNqhON1qYeIKM0Se67CCEe2c44xyGURwB0axX2fBDu1dqHrHAc1hmNT8ITkw==" + "version": "4.12.27", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", + "integrity": "sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==" }, "http-cache-semantics": { "version": "4.1.1", diff --git a/reboot/demos/fig/package.json b/reboot/demos/fig/package.json index fbd88c94..b753e192 100644 --- a/reboot/demos/fig/package.json +++ b/reboot/demos/fig/package.json @@ -11,11 +11,11 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@radix-ui/react-icons": "^1.3.0", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-std-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-std-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-draggable": "^4.4.6", diff --git a/reboot/examples/agent-wiki/.dockerignore b/reboot/examples/agent-wiki/.dockerignore index 2d96968d..a236b55e 100644 --- a/reboot/examples/agent-wiki/.dockerignore +++ b/reboot/examples/agent-wiki/.dockerignore @@ -35,5 +35,4 @@ web/index.css .DS_Store # Local-only files. -mcp_servers.json README.md diff --git a/reboot/examples/agent-wiki/.tests/test.sh b/reboot/examples/agent-wiki/.tests/test.sh index ddf490ef..c8207fad 100755 --- a/reboot/examples/agent-wiki/.tests/test.sh +++ b/reboot/examples/agent-wiki/.tests/test.sh @@ -51,24 +51,8 @@ pytest backend/ if [ -n "$EXPECTED_RBT_DEV_OUTPUT_FILE" ]; then actual_output_file=$(mktemp) - # `--config=dist` overrides `.rbtrc`'s default `hmr` config, - # whose `--mcp-frontend-host=http://localhost:4444` would - # have Envoy proxy `/__/web/**` to a Vite dev server. There - # is no Vite running in CI, and on the macOS executable-Envoy - # path that proxy target makes cluster init hang - # indefinitely, so `--terminate-after-health-check` never - # fires. The `dist` config sets `--mcp-frontend-host=""`, - # which skips the proxy entirely. `web/dist/` doesn't need - # to actually exist; the health check only probes gRPC and - # Envoy listeners. - # - # The librarian agent fails fast if `ANTHROPIC_API_KEY` is - # unset, so we provide a dummy value. No real Anthropic calls - # are made: the health check terminates the process before any - # transcript ingestion happens. ANTHROPIC_API_KEY="dummy-for-health-check" \ rbt $RBT_FLAGS dev run \ - --config=dist \ --terminate-after-health-check \ > "$actual_output_file" diff --git a/reboot/examples/agent-wiki/Dockerfile b/reboot/examples/agent-wiki/Dockerfile index f2348998..442307c2 100644 --- a/reboot/examples/agent-wiki/Dockerfile +++ b/reboot/examples/agent-wiki/Dockerfile @@ -4,7 +4,7 @@ # locally before `docker build` so that `web/dist/` contains the # bundled UIs. This image copies that prebuilt bundle rather # than installing Node and rebuilding it here. -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/agent-wiki/mcp_servers.json b/reboot/examples/agent-wiki/mcp_servers.json deleted file mode 100644 index 667a4b7c..00000000 --- a/reboot/examples/agent-wiki/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "agent-wiki": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/examples/agent-wiki/pyproject.toml b/reboot/examples/agent-wiki/pyproject.toml index 68bb872a..489d97e8 100644 --- a/reboot/examples/agent-wiki/pyproject.toml +++ b/reboot/examples/agent-wiki/pyproject.toml @@ -7,7 +7,7 @@ dependencies = [ "uuid7>=0.1.0", "anyio>=4.0.0", "pydantic-ai-slim[anthropic]>=1.0.0", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/agent-wiki/uv.lock b/reboot/examples/agent-wiki/uv.lock index 752327ec..b40b8f6c 100644 --- a/reboot/examples/agent-wiki/uv.lock +++ b/reboot/examples/agent-wiki/uv.lock @@ -28,7 +28,7 @@ requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.27,<1.0" }, { name = "pydantic-ai-slim", extras = ["anthropic"], specifier = ">=1.0.0" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, { name = "uuid7", specifier = ">=0.1.0" }, ] @@ -2020,7 +2020,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -2070,9 +2070,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/agent-wiki/web/package-lock.json b/reboot/examples/agent-wiki/web/package-lock.json index d6b52f6e..aaa47c61 100644 --- a/reboot/examples/agent-wiki/web/package-lock.json +++ b/reboot/examples/agent-wiki/web/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-markdown": "^10.1.0", @@ -888,9 +888,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -915,15 +915,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -951,12 +951,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/agent-wiki/web/package.json b/reboot/examples/agent-wiki/web/package.json index 4a8d0298..811023f2 100644 --- a/reboot/examples/agent-wiki/web/package.json +++ b/reboot/examples/agent-wiki/web/package.json @@ -17,8 +17,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-markdown": "^10.1.0", diff --git a/reboot/examples/ai-chat-counter-dashboard/README.md b/reboot/examples/ai-chat-counter-dashboard/README.md index 9dcb7a8a..e16b2f72 100644 --- a/reboot/examples/ai-chat-counter-dashboard/README.md +++ b/reboot/examples/ai-chat-counter-dashboard/README.md @@ -25,11 +25,11 @@ uv run rbt dev run ## Testing with MCPJam Inspector -The project includes `mcp_servers.json` for testing with MCPJam Inspector: +For testing with MCPJam Inspector: ```bash # In another terminal, run MCPJam: -npx @mcpjam/inspector@2.9.3 --config mcp_servers.json --server counter-server +npx @mcpjam/inspector@2.18.1 --url http://localhost:9991/mcp --oauth ``` This opens a browser-based inspector where you can test tools. diff --git a/reboot/examples/ai-chat-counter-dashboard/mcp_servers.json b/reboot/examples/ai-chat-counter-dashboard/mcp_servers.json deleted file mode 100644 index 7ea8c989..00000000 --- a/reboot/examples/ai-chat-counter-dashboard/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "counter-server": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/examples/ai-chat-counter-dashboard/pyproject.toml b/reboot/examples/ai-chat-counter-dashboard/pyproject.toml index 20753ed5..e64ff576 100644 --- a/reboot/examples/ai-chat-counter-dashboard/pyproject.toml +++ b/reboot/examples/ai-chat-counter-dashboard/pyproject.toml @@ -6,7 +6,7 @@ dependencies = [ "httpx>=0.27,<1.0", "uuid7>=0.1.0", "anyio>=4.0.0", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/ai-chat-counter-dashboard/uv.lock b/reboot/examples/ai-chat-counter-dashboard/uv.lock index 2f9853c2..ce53847c 100644 --- a/reboot/examples/ai-chat-counter-dashboard/uv.lock +++ b/reboot/examples/ai-chat-counter-dashboard/uv.lock @@ -27,7 +27,7 @@ dev = [ requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.27,<1.0" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, { name = "uuid7", specifier = ">=0.1.0" }, ] @@ -1886,7 +1886,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1936,9 +1936,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/ai-chat-counter-dashboard/web/package-lock.json b/reboot/examples/ai-chat-counter-dashboard/web/package-lock.json index f1924af7..cf09b1cd 100644 --- a/reboot/examples/ai-chat-counter-dashboard/web/package-lock.json +++ b/reboot/examples/ai-chat-counter-dashboard/web/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" @@ -886,9 +886,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -913,15 +913,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -949,12 +949,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/ai-chat-counter-dashboard/web/package.json b/reboot/examples/ai-chat-counter-dashboard/web/package.json index 55ce0798..3801a807 100644 --- a/reboot/examples/ai-chat-counter-dashboard/web/package.json +++ b/reboot/examples/ai-chat-counter-dashboard/web/package.json @@ -15,8 +15,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" diff --git a/reboot/examples/ai-chat-counter/Dockerfile b/reboot/examples/ai-chat-counter/Dockerfile index b63d4ec9..b7a1774f 100644 --- a/reboot/examples/ai-chat-counter/Dockerfile +++ b/reboot/examples/ai-chat-counter/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/ai-chat-counter/README.md b/reboot/examples/ai-chat-counter/README.md index 34813b1e..7a7d6091 100644 --- a/reboot/examples/ai-chat-counter/README.md +++ b/reboot/examples/ai-chat-counter/README.md @@ -24,11 +24,11 @@ uv run rbt dev run ## Testing with MCPJam Inspector -The project includes `mcp_servers.json` for testing with MCPJam Inspector: +For testing with MCPJam Inspector: ```bash # In another terminal, run MCPJam: -npx @mcpjam/inspector@2.9.3 --config mcp_servers.json --server counter-server +npx @mcpjam/inspector@2.18.1 --url http://localhost:9991/mcp --oauth ``` This opens a browser-based inspector where you can test tools. diff --git a/reboot/examples/ai-chat-counter/mcp_servers.json b/reboot/examples/ai-chat-counter/mcp_servers.json deleted file mode 100644 index 7ea8c989..00000000 --- a/reboot/examples/ai-chat-counter/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "counter-server": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/examples/ai-chat-counter/pyproject.toml b/reboot/examples/ai-chat-counter/pyproject.toml index c443e09c..2d9d944b 100644 --- a/reboot/examples/ai-chat-counter/pyproject.toml +++ b/reboot/examples/ai-chat-counter/pyproject.toml @@ -6,7 +6,7 @@ dependencies = [ "httpx>=0.27,<1.0", "uuid7>=0.1.0", "anyio>=4.0.0", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/ai-chat-counter/uv.lock b/reboot/examples/ai-chat-counter/uv.lock index 20090da3..04d57adc 100644 --- a/reboot/examples/ai-chat-counter/uv.lock +++ b/reboot/examples/ai-chat-counter/uv.lock @@ -27,7 +27,7 @@ dev = [ requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.27,<1.0" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, { name = "uuid7", specifier = ">=0.1.0" }, ] @@ -1886,7 +1886,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1936,9 +1936,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/ai-chat-counter/web/package-lock.json b/reboot/examples/ai-chat-counter/web/package-lock.json index 3b786e70..efd71528 100644 --- a/reboot/examples/ai-chat-counter/web/package-lock.json +++ b/reboot/examples/ai-chat-counter/web/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" @@ -405,9 +405,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -430,15 +430,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -464,12 +464,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/ai-chat-counter/web/package.json b/reboot/examples/ai-chat-counter/web/package.json index 5e449ffe..b3d910ff 100644 --- a/reboot/examples/ai-chat-counter/web/package.json +++ b/reboot/examples/ai-chat-counter/web/package.json @@ -13,8 +13,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" diff --git a/reboot/examples/bank-nodejs/package-lock.json b/reboot/examples/bank-nodejs/package-lock.json index 92fd8ecc..f1460d02 100644 --- a/reboot/examples/bank-nodejs/package-lock.json +++ b/reboot/examples/bank-nodejs/package-lock.json @@ -9,8 +9,8 @@ "version": "0.1.0", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "@types/node": "20.11.5", "typescript": "5.4.5" }, @@ -495,15 +495,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -532,9 +532,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -2404,13 +2404,13 @@ } }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -2427,9 +2427,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", diff --git a/reboot/examples/bank-nodejs/package.json b/reboot/examples/bank-nodejs/package.json index 5db98881..6f73277e 100644 --- a/reboot/examples/bank-nodejs/package.json +++ b/reboot/examples/bank-nodejs/package.json @@ -5,8 +5,8 @@ "type": "module", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "typescript": "5.4.5", "@types/node": "20.11.5" }, diff --git a/reboot/examples/bank-pydantic/pyproject.toml b/reboot/examples/bank-pydantic/pyproject.toml index 280c4dc1..42e1b913 100644 --- a/reboot/examples/bank-pydantic/pyproject.toml +++ b/reboot/examples/bank-pydantic/pyproject.toml @@ -3,7 +3,7 @@ name = "bank-pydantic" version = "0.1.0" requires-python = ">= 3.10" dependencies = [ - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/bank-pydantic/uv.lock b/reboot/examples/bank-pydantic/uv.lock index 1cb25bfb..38ee7886 100644 --- a/reboot/examples/bank-pydantic/uv.lock +++ b/reboot/examples/bank-pydantic/uv.lock @@ -214,7 +214,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "reboot", specifier = "==1.2.0" }] +requires-dist = [{ name = "reboot", specifier = "==1.2.1" }] [package.metadata.requires-dev] dev = [ @@ -1925,7 +1925,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1975,9 +1975,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/bank-pydantic/web/package-lock.json b/reboot/examples/bank-pydantic/web/package-lock.json index df114cc8..d154e610 100644 --- a/reboot/examples/bank-pydantic/web/package-lock.json +++ b/reboot/examples/bank-pydantic/web/package-lock.json @@ -9,9 +9,9 @@ "version": "0.1.0", "dependencies": { "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", "@tailwindcss/vite": "^4.1.11", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -1200,15 +1200,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -1237,9 +1237,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1263,15 +1263,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1298,32 +1298,32 @@ } }, "node_modules/@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -5528,9 +5528,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7888,13 +7888,13 @@ } }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -8102,9 +8102,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -8119,14 +8119,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -8143,29 +8143,29 @@ } }, "@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "requires": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "requires": { "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -10501,9 +10501,9 @@ "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==" }, "semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==" + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==" }, "which": { "version": "6.0.1", diff --git a/reboot/examples/bank-pydantic/web/package.json b/reboot/examples/bank-pydantic/web/package.json index e734722d..d6a3d11c 100644 --- a/reboot/examples/bank-pydantic/web/package.json +++ b/reboot/examples/bank-pydantic/web/package.json @@ -5,9 +5,9 @@ "type": "module", "dependencies": { "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", diff --git a/reboot/examples/bank-zod/package-lock.json b/reboot/examples/bank-zod/package-lock.json index f9151a98..225bdd85 100644 --- a/reboot/examples/bank-zod/package-lock.json +++ b/reboot/examples/bank-zod/package-lock.json @@ -9,10 +9,10 @@ "version": "0.1.0", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", "@tailwindcss/vite": "^4.1.11", "@types/node": "20.11.5", "lucide-react": "^0.525.0", @@ -1242,15 +1242,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -1279,9 +1279,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1305,15 +1305,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1340,32 +1340,32 @@ } }, "node_modules/@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -7520,13 +7520,13 @@ "optional": true }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -7543,9 +7543,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -7560,14 +7560,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -7584,29 +7584,29 @@ } }, "@reboot-dev/reboot-std": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.0.tgz", - "integrity": "sha512-Jblt3IM3hFHZdf78zv27/FL4IZL3l/ULnTFKwB4LloIlHVnhNegisHISvHn2fAkM8VzDy64s174tA/jHPHUyrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std/-/reboot-std-1.2.1.tgz", + "integrity": "sha512-+4oa3p/om+WsEc5/CVkYP5tTlBpZmIDMaEsMxgDScsa5txDwAxAPEIrYpSFppUZ/WZo2OzbjqDnUyp491Iym/g==", "requires": { - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "requires": { "@scarf/scarf": "1.4.0" } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/bank-zod/package.json b/reboot/examples/bank-zod/package.json index 445e249f..996a3b43 100644 --- a/reboot/examples/bank-zod/package.json +++ b/reboot/examples/bank-zod/package.json @@ -9,10 +9,10 @@ }, "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-std": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-std": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "@tailwindcss/vite": "^4.1.11", "@types/node": "20.11.5", "lucide-react": "^0.525.0", diff --git a/reboot/examples/bank/pyproject.toml b/reboot/examples/bank/pyproject.toml index e8f504b3..764d99c8 100644 --- a/reboot/examples/bank/pyproject.toml +++ b/reboot/examples/bank/pyproject.toml @@ -3,7 +3,7 @@ name = "bank" version = "0.1.0" requires-python = ">= 3.10" dependencies = [ - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/bank/uv.lock b/reboot/examples/bank/uv.lock index 2071f8dd..73b83c22 100644 --- a/reboot/examples/bank/uv.lock +++ b/reboot/examples/bank/uv.lock @@ -213,7 +213,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "reboot", specifier = "==1.2.0" }] +requires-dist = [{ name = "reboot", specifier = "==1.2.1" }] [package.metadata.requires-dev] dev = [ @@ -1878,7 +1878,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1928,9 +1928,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/bank/web/package-lock.json b/reboot/examples/bank/web/package-lock.json index 59ddf8c1..c8352a68 100644 --- a/reboot/examples/bank/web/package-lock.json +++ b/reboot/examples/bank/web/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", @@ -1225,9 +1225,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1252,15 +1252,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1287,12 +1287,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -6620,9 +6620,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -6637,14 +6637,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -6661,11 +6661,11 @@ } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/bank/web/package.json b/reboot/examples/bank/web/package.json index 85b94437..934cbc5b 100644 --- a/reboot/examples/bank/web/package.json +++ b/reboot/examples/bank/web/package.json @@ -6,7 +6,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", diff --git a/reboot/examples/boutique/Dockerfile b/reboot/examples/boutique/Dockerfile index 498213a7..1777e12c 100644 --- a/reboot/examples/boutique/Dockerfile +++ b/reboot/examples/boutique/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/boutique/pyproject.toml b/reboot/examples/boutique/pyproject.toml index 1752bfcb..d091b843 100644 --- a/reboot/examples/boutique/pyproject.toml +++ b/reboot/examples/boutique/pyproject.toml @@ -3,7 +3,7 @@ name = "boutique" version = "0.1.0" requires-python = ">= 3.10" dependencies = [ - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/boutique/uv.lock b/reboot/examples/boutique/uv.lock index 07c590c5..43512288 100644 --- a/reboot/examples/boutique/uv.lock +++ b/reboot/examples/boutique/uv.lock @@ -300,7 +300,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "reboot", specifier = "==1.2.0" }] +requires-dist = [{ name = "reboot", specifier = "==1.2.1" }] [package.metadata.requires-dev] dev = [ @@ -1925,7 +1925,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1975,9 +1975,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/boutique/web/package-lock.json b/reboot/examples/boutique/web/package-lock.json index 99532ed2..92255b78 100644 --- a/reboot/examples/boutique/web/package-lock.json +++ b/reboot/examples/boutique/web/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", @@ -1225,9 +1225,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1252,15 +1252,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1300,12 +1300,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -6729,9 +6729,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -6746,14 +6746,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -6775,11 +6775,11 @@ } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/boutique/web/package.json b/reboot/examples/boutique/web/package.json index e44d8a2d..f98277f1 100644 --- a/reboot/examples/boutique/web/package.json +++ b/reboot/examples/boutique/web/package.json @@ -6,7 +6,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", diff --git a/reboot/examples/chat-room-nodejs/Dockerfile b/reboot/examples/chat-room-nodejs/Dockerfile index 40b295d0..1aa8cb10 100644 --- a/reboot/examples/chat-room-nodejs/Dockerfile +++ b/reboot/examples/chat-room-nodejs/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/chat-room-nodejs/package-lock.json b/reboot/examples/chat-room-nodejs/package-lock.json index 1c2955d4..de62d6cb 100644 --- a/reboot/examples/chat-room-nodejs/package-lock.json +++ b/reboot/examples/chat-room-nodejs/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "@types/node": "20.11.5", "typescript": "5.4.5" }, @@ -494,15 +494,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -531,9 +531,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -2403,13 +2403,13 @@ } }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -2426,9 +2426,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", diff --git a/reboot/examples/chat-room-nodejs/package.json b/reboot/examples/chat-room-nodejs/package.json index 08ef965f..a928052a 100644 --- a/reboot/examples/chat-room-nodejs/package.json +++ b/reboot/examples/chat-room-nodejs/package.json @@ -5,7 +5,7 @@ "type": "module", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "typescript": "5.4.5", "@types/node": "20.11.5" }, diff --git a/reboot/examples/chat-room/Dockerfile b/reboot/examples/chat-room/Dockerfile index 4c1bfd61..ce9d11ed 100644 --- a/reboot/examples/chat-room/Dockerfile +++ b/reboot/examples/chat-room/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/chat-room/pyproject.toml b/reboot/examples/chat-room/pyproject.toml index a39891bb..c3a22481 100644 --- a/reboot/examples/chat-room/pyproject.toml +++ b/reboot/examples/chat-room/pyproject.toml @@ -3,7 +3,7 @@ name = "chat-room" version = "0.1.0" requires-python = ">= 3.10" dependencies = [ - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/chat-room/reboot-non-react-web/package-lock.json b/reboot/examples/chat-room/reboot-non-react-web/package-lock.json index 53382d16..840dcd77 100644 --- a/reboot/examples/chat-room/reboot-non-react-web/package-lock.json +++ b/reboot/examples/chat-room/reboot-non-react-web/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-web": "1.2.1", "@testing-library/jest-dom": "^5.17.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", @@ -71,9 +71,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -98,12 +98,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/chat-room/reboot-non-react-web/package.json b/reboot/examples/chat-room/reboot-non-react-web/package.json index 5b4054cf..8f771422 100644 --- a/reboot/examples/chat-room/reboot-non-react-web/package.json +++ b/reboot/examples/chat-room/reboot-non-react-web/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-web": "1.2.1", "@testing-library/jest-dom": "^5.17.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", diff --git a/reboot/examples/chat-room/uv.lock b/reboot/examples/chat-room/uv.lock index 96f8839d..4beb650d 100644 --- a/reboot/examples/chat-room/uv.lock +++ b/reboot/examples/chat-room/uv.lock @@ -366,7 +366,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "reboot", specifier = "==1.2.0" }] +requires-dist = [{ name = "reboot", specifier = "==1.2.1" }] [package.metadata.requires-dev] dev = [ @@ -1925,7 +1925,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1975,9 +1975,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/chat-room/web/package-lock.json b/reboot/examples/chat-room/web/package-lock.json index fe25936c..3dc890b5 100644 --- a/reboot/examples/chat-room/web/package-lock.json +++ b/reboot/examples/chat-room/web/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", @@ -1225,9 +1225,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1252,15 +1252,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1286,12 +1286,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -6564,9 +6564,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -6581,14 +6581,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -6603,11 +6603,11 @@ } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/chat-room/web/package.json b/reboot/examples/chat-room/web/package.json index b16de060..decf0096 100644 --- a/reboot/examples/chat-room/web/package.json +++ b/reboot/examples/chat-room/web/package.json @@ -6,7 +6,7 @@ "dependencies": { "@bufbuild/protobuf": "1.10.1", "@eslint/js": "^9.34.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/eslint__js": "^8.42.3", diff --git a/reboot/examples/chick-potle/.dockerignore b/reboot/examples/chick-potle/.dockerignore index 2d96968d..a236b55e 100644 --- a/reboot/examples/chick-potle/.dockerignore +++ b/reboot/examples/chick-potle/.dockerignore @@ -35,5 +35,4 @@ web/index.css .DS_Store # Local-only files. -mcp_servers.json README.md diff --git a/reboot/examples/chick-potle/.tests/test.sh b/reboot/examples/chick-potle/.tests/test.sh index 5c71c18d..35fa002c 100755 --- a/reboot/examples/chick-potle/.tests/test.sh +++ b/reboot/examples/chick-potle/.tests/test.sh @@ -51,18 +51,7 @@ pytest backend/ if [ -n "$EXPECTED_RBT_DEV_OUTPUT_FILE" ]; then actual_output_file=$(mktemp) - # `--config=dist` overrides `.rbtrc`'s default `hmr` config, - # whose `--mcp-frontend-host=http://localhost:4444` would - # have Envoy proxy `/__/web/**` to a Vite dev server. There - # is no Vite running in CI, and on the macOS executable-Envoy - # path that proxy target makes cluster init hang - # indefinitely, so `--terminate-after-health-check` never - # fires. The `dist` config sets `--mcp-frontend-host=""`, - # which skips the proxy entirely. `web/dist/` doesn't need - # to actually exist; the health check only probes gRPC and - # Envoy listeners. rbt $RBT_FLAGS dev run \ - --config=dist \ --terminate-after-health-check \ > "$actual_output_file" diff --git a/reboot/examples/chick-potle/Dockerfile b/reboot/examples/chick-potle/Dockerfile index 8dcdfe89..171b7703 100644 --- a/reboot/examples/chick-potle/Dockerfile +++ b/reboot/examples/chick-potle/Dockerfile @@ -4,7 +4,7 @@ # locally before `docker build` so that `web/dist/` contains the # bundled UIs. This image copies that prebuilt bundle rather # than installing Node and rebuilding it here. -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/chick-potle/mcp_servers.json b/reboot/examples/chick-potle/mcp_servers.json deleted file mode 100644 index 6b2fa362..00000000 --- a/reboot/examples/chick-potle/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "chick-potle": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/examples/chick-potle/pyproject.toml b/reboot/examples/chick-potle/pyproject.toml index 28b6ceb8..35afea72 100644 --- a/reboot/examples/chick-potle/pyproject.toml +++ b/reboot/examples/chick-potle/pyproject.toml @@ -6,7 +6,7 @@ dependencies = [ "httpx>=0.27,<1.0", "uuid7>=0.1.0", "anyio>=4.0.0", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/chick-potle/uv.lock b/reboot/examples/chick-potle/uv.lock index d0fa436e..de6af061 100644 --- a/reboot/examples/chick-potle/uv.lock +++ b/reboot/examples/chick-potle/uv.lock @@ -370,7 +370,7 @@ dev = [ requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.27,<1.0" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, { name = "uuid7", specifier = ">=0.1.0" }, ] @@ -1873,7 +1873,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1923,9 +1923,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/chick-potle/web/package-lock.json b/reboot/examples/chick-potle/web/package-lock.json index 0c8c4b6b..6ae7dbfc 100644 --- a/reboot/examples/chick-potle/web/package-lock.json +++ b/reboot/examples/chick-potle/web/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" @@ -886,9 +886,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -913,15 +913,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -949,12 +949,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/chick-potle/web/package.json b/reboot/examples/chick-potle/web/package.json index 1e51d6e5..a6007e17 100644 --- a/reboot/examples/chick-potle/web/package.json +++ b/reboot/examples/chick-potle/web/package.json @@ -15,8 +15,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" diff --git a/reboot/examples/counter/package-lock.json b/reboot/examples/counter/package-lock.json index f4c79b1f..df8012ef 100644 --- a/reboot/examples/counter/package-lock.json +++ b/reboot/examples/counter/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.0", "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "next": "14.2.13", "react": "^18.3.1", "react-dom": "^18.3.1" @@ -1366,15 +1366,15 @@ } }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -1403,9 +1403,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1430,15 +1430,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1465,12 +1465,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -9909,13 +9909,13 @@ "optional": true }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -10123,9 +10123,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -10140,14 +10140,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -10164,11 +10164,11 @@ } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/counter/package.json b/reboot/examples/counter/package.json index ab2d78ac..e03e13fb 100644 --- a/reboot/examples/counter/package.json +++ b/reboot/examples/counter/package.json @@ -11,8 +11,8 @@ }, "dependencies": { "@bufbuild/protobuf": "1.10.1", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "next": "14.2.13", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/reboot/examples/docubot/api/package.json b/reboot/examples/docubot/api/package.json index f02a1465..3c360e21 100644 --- a/reboot/examples/docubot/api/package.json +++ b/reboot/examples/docubot/api/package.json @@ -7,7 +7,7 @@ "prepack": "rbt generate && tsc" }, "dependencies": { - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "typescript": "^5.2.2" }, "files": [ diff --git a/reboot/examples/docubot/docubot/package.json b/reboot/examples/docubot/docubot/package.json index 62021bfd..d8b2a318 100644 --- a/reboot/examples/docubot/docubot/package.json +++ b/reboot/examples/docubot/docubot/package.json @@ -8,8 +8,8 @@ }, "dependencies": { "@reboot-dev/docubot-api": "0.1.0", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "create-temp-directory": "^2.4.0", "openai": "^4.52.7", "puppeteer": "^22.14.0", diff --git a/reboot/examples/docubot/package-lock.json b/reboot/examples/docubot/package-lock.json index ef3f02e6..8882d0a4 100644 --- a/reboot/examples/docubot/package-lock.json +++ b/reboot/examples/docubot/package-lock.json @@ -18,9 +18,9 @@ "@radix-ui/react-slot": "^1.0.2", "@reboot-dev/docubot": "workspace:*", "@reboot-dev/docubot-api": "workspace:*", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "framer-motion": "^11.0.24", @@ -54,7 +54,7 @@ "name": "@reboot-dev/docubot-api", "version": "0.1.0", "dependencies": { - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "typescript": "^5.2.2" } }, @@ -63,8 +63,8 @@ "version": "0.1.0", "dependencies": { "@reboot-dev/docubot-api": "0.1.0", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "create-temp-directory": "^2.4.0", "openai": "^4.52.7", "puppeteer": "^22.14.0", @@ -1665,15 +1665,15 @@ "link": true }, "node_modules/@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -1702,9 +1702,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1736,15 +1736,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1807,12 +1807,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", @@ -11508,8 +11508,8 @@ "version": "file:docubot", "requires": { "@reboot-dev/docubot-api": "0.1.0", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "@types/node": "^20.12.4", "create-temp-directory": "^2.4.0", "openai": "^4.52.7", @@ -11529,18 +11529,18 @@ "@reboot-dev/docubot-api": { "version": "file:api", "requires": { - "@reboot-dev/reboot": "1.2.0", + "@reboot-dev/reboot": "1.2.1", "typescript": "^5.2.2" } }, "@reboot-dev/reboot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.0.tgz", - "integrity": "sha512-VPjg8N0ab2iZzQ8PeVnATye5iPjEfmT7digqxxCKBYndOB/W8CjKg4YUVREzg+hNTrILSDmgJex2lpPd5yo4TQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot/-/reboot-1.2.1.tgz", + "integrity": "sha512-1x35ldNqzFLUbRtjXrAfd27YDVX43gGYA+4O9BOx14yBu4y3OC4JZHT4Am7pVRuHJs4qNWSj0dCBFnEtqL3Rvg==", "requires": { "@bufbuild/protoc-gen-es": "1.10.1", "@bufbuild/protoplugin": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "@standard-schema/spec": "1.0.0", "chalk": "^4.1.2", @@ -11564,9 +11564,9 @@ } }, "@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "requires": { "@scarf/scarf": "1.4.0", "typescript": "5.4.5", @@ -11586,14 +11586,14 @@ } }, "@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "requires": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -11622,11 +11622,11 @@ } }, "@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "requires": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/docubot/package.json b/reboot/examples/docubot/package.json index 0728689b..e454a5f1 100644 --- a/reboot/examples/docubot/package.json +++ b/reboot/examples/docubot/package.json @@ -19,9 +19,9 @@ "@radix-ui/react-slot": "^1.0.2", "@reboot-dev/docubot": "workspace:*", "@reboot-dev/docubot-api": "workspace:*", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "framer-motion": "^11.0.24", diff --git a/reboot/examples/kcdc-2025/pyproject.toml b/reboot/examples/kcdc-2025/pyproject.toml index 897aed2c..3e5c9d92 100644 --- a/reboot/examples/kcdc-2025/pyproject.toml +++ b/reboot/examples/kcdc-2025/pyproject.toml @@ -5,7 +5,7 @@ requires-python = ">= 3.10" dependencies = [ "langchain>=0.3.27", "langchain-anthropic>=0.3.18", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] dev = [ diff --git a/reboot/examples/kcdc-2025/uv.lock b/reboot/examples/kcdc-2025/uv.lock index 57c52173..c27f2ea5 100644 --- a/reboot/examples/kcdc-2025/uv.lock +++ b/reboot/examples/kcdc-2025/uv.lock @@ -1127,7 +1127,7 @@ dev = [ requires-dist = [ { name = "langchain", specifier = ">=0.3.27" }, { name = "langchain-anthropic", specifier = ">=0.3.18" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, ] [package.metadata.requires-dev] @@ -2141,7 +2141,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -2191,9 +2191,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/kcdc-2025/web/package-lock.json b/reboot/examples/kcdc-2025/web/package-lock.json index 964edc2d..a8e7fc4e 100644 --- a/reboot/examples/kcdc-2025/web/package-lock.json +++ b/reboot/examples/kcdc-2025/web/package-lock.json @@ -16,9 +16,9 @@ "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-std-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-std-react": "1.2.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "emoji-picker-react": "^4.9.2", @@ -1753,9 +1753,9 @@ "license": "MIT" }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -1780,15 +1780,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -1816,34 +1816,34 @@ } }, "node_modules/@reboot-dev/reboot-std-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.0.tgz", - "integrity": "sha512-8EI8+Ys4gWlVNiq/5f0ZU2W76CkddqLygdDrZTqgLNsI/Y4wa/ZOFMiEGvayULTzQu0Og5pZ0jXbXrak9iYTqw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-api/-/reboot-std-api-1.2.1.tgz", + "integrity": "sha512-evFzB6oQDURxkddknXakyRKcYT53EY1AlyQnNs3nffF84gWMjIbZ6nb3C5yDNnra+pDjsiiz7DsBhMvr9qHX2g==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-std-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.0.tgz", - "integrity": "sha512-h77eSxkbER7BnzBEuZjfIdOwVq+a21EvKqUpwD7kEouJGiGIWxWmTvtlnKkrUr+G2YZnXyb/eVLzKpoq6aGnJQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-std-react/-/reboot-std-react-1.2.1.tgz", + "integrity": "sha512-CCjS7MYLmwXGJ4u1gcsRZ1EwarJtnFTezukujuQs8xS80m6sc9UJ0SgCkgvNkLfv0rWwxnRP2sP4FFQ5R4hWVw==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0" } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/kcdc-2025/web/package.json b/reboot/examples/kcdc-2025/web/package.json index 5c9cc3f7..11bb4dc9 100644 --- a/reboot/examples/kcdc-2025/web/package.json +++ b/reboot/examples/kcdc-2025/web/package.json @@ -18,9 +18,9 @@ "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-std-api": "1.2.0", - "@reboot-dev/reboot-std-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-std-api": "1.2.1", + "@reboot-dev/reboot-std-react": "1.2.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "emoji-picker-react": "^4.9.2", diff --git a/reboot/examples/monorepo/pyproject.toml b/reboot/examples/monorepo/pyproject.toml index 14965b06..8764c9d4 100644 --- a/reboot/examples/monorepo/pyproject.toml +++ b/reboot/examples/monorepo/pyproject.toml @@ -3,7 +3,7 @@ name = "monorepo" version = "0.1.0" requires-python = ">= 3.10" dependencies = [ - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/monorepo/uv.lock b/reboot/examples/monorepo/uv.lock index f6db8662..234bf52c 100644 --- a/reboot/examples/monorepo/uv.lock +++ b/reboot/examples/monorepo/uv.lock @@ -1067,7 +1067,7 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "reboot", specifier = "==1.2.0" }] +requires-dist = [{ name = "reboot", specifier = "==1.2.1" }] [package.metadata.requires-dev] dev = [ @@ -1925,7 +1925,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1975,9 +1975,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] diff --git a/reboot/examples/prosemirror-zod/Dockerfile b/reboot/examples/prosemirror-zod/Dockerfile index 98dea835..e52281b6 100644 --- a/reboot/examples/prosemirror-zod/Dockerfile +++ b/reboot/examples/prosemirror-zod/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/prosemirror-zod/backend/package.json b/reboot/examples/prosemirror-zod/backend/package.json index 057cee78..0c9956b2 100644 --- a/reboot/examples/prosemirror-zod/backend/package.json +++ b/reboot/examples/prosemirror-zod/backend/package.json @@ -10,8 +10,8 @@ "@bufbuild/protobuf": "1.10.1", "@monorepo/api": "workspace:*", "@monorepo/common": "workspace:*", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "prosemirror-model": "^1.23.0", "prosemirror-transform": "^1.1.0" } diff --git a/reboot/examples/prosemirror-zod/web/package.json b/reboot/examples/prosemirror-zod/web/package.json index b7dddb80..9727d17e 100644 --- a/reboot/examples/prosemirror-zod/web/package.json +++ b/reboot/examples/prosemirror-zod/web/package.json @@ -14,7 +14,7 @@ "@monorepo/api": "workspace:*", "@monorepo/common": "workspace:*", "@nytimes/react-prosemirror": "^0.6.2", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "next": "15.0.5", "prosemirror-collab": "^1.3.1", "prosemirror-history": "^1.4.1", diff --git a/reboot/examples/prosemirror-zod/yarn.lock b/reboot/examples/prosemirror-zod/yarn.lock index c48c0900..845793b2 100644 --- a/reboot/examples/prosemirror-zod/yarn.lock +++ b/reboot/examples/prosemirror-zod/yarn.lock @@ -812,8 +812,8 @@ __metadata: "@bufbuild/protobuf": "npm:1.10.1" "@monorepo/api": "workspace:*" "@monorepo/common": "workspace:*" - "@reboot-dev/reboot": "npm:1.2.0" - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot": "npm:1.2.1" + "@reboot-dev/reboot-api": "npm:1.2.1" prosemirror-model: "npm:^1.23.0" prosemirror-transform: "npm:^1.1.0" languageName: unknown @@ -838,7 +838,7 @@ __metadata: "@monorepo/api": "workspace:*" "@monorepo/common": "workspace:*" "@nytimes/react-prosemirror": "npm:^0.6.2" - "@reboot-dev/reboot-react": "npm:1.2.0" + "@reboot-dev/reboot-react": "npm:1.2.1" "@types/node": "npm:^20" "@types/react": "npm:^18" "@types/react-dom": "npm:^18" @@ -1018,27 +1018,27 @@ __metadata: languageName: node linkType: hard -"@reboot-dev/reboot-api@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-api@npm:1.2.0" +"@reboot-dev/reboot-api@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-api@npm:1.2.1" dependencies: "@scarf/scarf": "npm:1.4.0" typescript: "npm:5.4.5" zod: "npm:^3.25.51 || ^4.0.0" peerDependencies: "@bufbuild/protobuf": 1.10.1 - checksum: 10c0/e0fcf33eccf948c2a2ea25421e61ab8311a39a44b40efa9280d658314efc7ad964b30db308cdadfaa386114bb065e8734eaa1e5741851893dd00803d067a1c64 + checksum: 10c0/a7073cf1646a4eb54af72ec5f4ee4529471dd7a98ab2333a0a9d72bee08d725cae22a8d234cace4e9fdd71d7027d7618ce205b626dde5c94d705750bb32f2e56 languageName: node linkType: hard -"@reboot-dev/reboot-react@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-react@npm:1.2.0" +"@reboot-dev/reboot-react@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-react@npm:1.2.1" dependencies: "@modelcontextprotocol/ext-apps": "npm:1.5.0" "@modelcontextprotocol/sdk": "npm:1.29.0" - "@reboot-dev/reboot-api": "npm:1.2.0" - "@reboot-dev/reboot-web": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" + "@reboot-dev/reboot-web": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" "@types/uuid": "npm:^9.0.4" js-sha1: "npm:0.7.0" @@ -1049,15 +1049,15 @@ __metadata: "@bufbuild/protobuf": 1.10.1 react: ">=18.0.0" react-dom: ">=18.0.0" - checksum: 10c0/a836ffa7c9255892148b692ae521018e543afa2b76d6f1326fc194f543aead2c418c4d3e56f4cdaa25243c3e9fb431faa409fcf52975a9f2a07b8059005ab7e8 + checksum: 10c0/6a8f8cc44fa794a00d9f4923794d6376fb9fd6f42d303850fc8f05becd3e03cdad595c35e7f51025cf44cbdbca0343227bfec16540ee62154b5e00829d2a8141 languageName: node linkType: hard -"@reboot-dev/reboot-web@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-web@npm:1.2.0" +"@reboot-dev/reboot-web@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-web@npm:1.2.1" dependencies: - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" js-sha1: "npm:0.7.0" lru-cache-idb: "npm:^0.5.2" @@ -1066,17 +1066,17 @@ __metadata: uuid: "npm:^11.1.1" peerDependencies: "@bufbuild/protobuf": 1.10.1 - checksum: 10c0/0db0171c368858ce5f848b9eea55b93baad1bf47556b08d6a9c3c2c0a80c10e2840caa3d584e29b73bab88c99a182a338084ace24b77501b14232996409c06df + checksum: 10c0/48884cb1043c4c5570eb19966c12bd914e5259a8929d4210f9adedbcf32356aeeaa4baaef496b56288df9efa61226a4b315d55e43e6dcb9eb20fa21aee38adcc languageName: node linkType: hard -"@reboot-dev/reboot@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot@npm:1.2.0" +"@reboot-dev/reboot@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot@npm:1.2.1" dependencies: "@bufbuild/protoc-gen-es": "npm:1.10.1" "@bufbuild/protoplugin": "npm:1.10.1" - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" "@standard-schema/spec": "npm:1.0.0" chalk: "npm:^4.1.2" @@ -1097,7 +1097,7 @@ __metadata: rbt: rbt.js rbt-esbuild: rbt-esbuild.js zod-to-proto: zod-to-proto.js - checksum: 10c0/511decf69a51481bdd45d889530201ed647cd59cb8229c587b27de791d990bcac9059dcbaf2b5a60c31909182b705ffe6b7bb8e343ff0b36a3bf991460bbd7f0 + checksum: 10c0/50983c3ef4a46ccf80d325b9cfbac69e5b2d9987062eaefa98903b785bc53a1f8edaafece647fd4e68907a6952f7c9dd1d83b47461e8161fedf68efb829485d1 languageName: node linkType: hard diff --git a/reboot/examples/prosemirror/Dockerfile b/reboot/examples/prosemirror/Dockerfile index 98dea835..e52281b6 100644 --- a/reboot/examples/prosemirror/Dockerfile +++ b/reboot/examples/prosemirror/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 WORKDIR /app diff --git a/reboot/examples/prosemirror/backend/package.json b/reboot/examples/prosemirror/backend/package.json index 057cee78..0c9956b2 100644 --- a/reboot/examples/prosemirror/backend/package.json +++ b/reboot/examples/prosemirror/backend/package.json @@ -10,8 +10,8 @@ "@bufbuild/protobuf": "1.10.1", "@monorepo/api": "workspace:*", "@monorepo/common": "workspace:*", - "@reboot-dev/reboot": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "prosemirror-model": "^1.23.0", "prosemirror-transform": "^1.1.0" } diff --git a/reboot/examples/prosemirror/web/package.json b/reboot/examples/prosemirror/web/package.json index b7dddb80..9727d17e 100644 --- a/reboot/examples/prosemirror/web/package.json +++ b/reboot/examples/prosemirror/web/package.json @@ -14,7 +14,7 @@ "@monorepo/api": "workspace:*", "@monorepo/common": "workspace:*", "@nytimes/react-prosemirror": "^0.6.2", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", "next": "15.0.5", "prosemirror-collab": "^1.3.1", "prosemirror-history": "^1.4.1", diff --git a/reboot/examples/prosemirror/yarn.lock b/reboot/examples/prosemirror/yarn.lock index ca02176d..db79a94e 100644 --- a/reboot/examples/prosemirror/yarn.lock +++ b/reboot/examples/prosemirror/yarn.lock @@ -790,8 +790,8 @@ __metadata: "@bufbuild/protobuf": "npm:1.10.1" "@monorepo/api": "workspace:*" "@monorepo/common": "workspace:*" - "@reboot-dev/reboot": "npm:1.2.0" - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot": "npm:1.2.1" + "@reboot-dev/reboot-api": "npm:1.2.1" prosemirror-model: "npm:^1.23.0" prosemirror-transform: "npm:^1.1.0" languageName: unknown @@ -816,7 +816,7 @@ __metadata: "@monorepo/api": "workspace:*" "@monorepo/common": "workspace:*" "@nytimes/react-prosemirror": "npm:^0.6.2" - "@reboot-dev/reboot-react": "npm:1.2.0" + "@reboot-dev/reboot-react": "npm:1.2.1" "@types/node": "npm:^20" "@types/react": "npm:^18" "@types/react-dom": "npm:^18" @@ -985,27 +985,27 @@ __metadata: languageName: node linkType: hard -"@reboot-dev/reboot-api@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-api@npm:1.2.0" +"@reboot-dev/reboot-api@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-api@npm:1.2.1" dependencies: "@scarf/scarf": "npm:1.4.0" typescript: "npm:5.4.5" zod: "npm:^3.25.51 || ^4.0.0" peerDependencies: "@bufbuild/protobuf": 1.10.1 - checksum: 10c0/e0fcf33eccf948c2a2ea25421e61ab8311a39a44b40efa9280d658314efc7ad964b30db308cdadfaa386114bb065e8734eaa1e5741851893dd00803d067a1c64 + checksum: 10c0/a7073cf1646a4eb54af72ec5f4ee4529471dd7a98ab2333a0a9d72bee08d725cae22a8d234cace4e9fdd71d7027d7618ce205b626dde5c94d705750bb32f2e56 languageName: node linkType: hard -"@reboot-dev/reboot-react@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-react@npm:1.2.0" +"@reboot-dev/reboot-react@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-react@npm:1.2.1" dependencies: "@modelcontextprotocol/ext-apps": "npm:1.5.0" "@modelcontextprotocol/sdk": "npm:1.29.0" - "@reboot-dev/reboot-api": "npm:1.2.0" - "@reboot-dev/reboot-web": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" + "@reboot-dev/reboot-web": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" "@types/uuid": "npm:^9.0.4" js-sha1: "npm:0.7.0" @@ -1016,15 +1016,15 @@ __metadata: "@bufbuild/protobuf": 1.10.1 react: ">=18.0.0" react-dom: ">=18.0.0" - checksum: 10c0/a836ffa7c9255892148b692ae521018e543afa2b76d6f1326fc194f543aead2c418c4d3e56f4cdaa25243c3e9fb431faa409fcf52975a9f2a07b8059005ab7e8 + checksum: 10c0/6a8f8cc44fa794a00d9f4923794d6376fb9fd6f42d303850fc8f05becd3e03cdad595c35e7f51025cf44cbdbca0343227bfec16540ee62154b5e00829d2a8141 languageName: node linkType: hard -"@reboot-dev/reboot-web@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot-web@npm:1.2.0" +"@reboot-dev/reboot-web@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot-web@npm:1.2.1" dependencies: - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" js-sha1: "npm:0.7.0" lru-cache-idb: "npm:^0.5.2" @@ -1033,17 +1033,17 @@ __metadata: uuid: "npm:^11.1.1" peerDependencies: "@bufbuild/protobuf": 1.10.1 - checksum: 10c0/0db0171c368858ce5f848b9eea55b93baad1bf47556b08d6a9c3c2c0a80c10e2840caa3d584e29b73bab88c99a182a338084ace24b77501b14232996409c06df + checksum: 10c0/48884cb1043c4c5570eb19966c12bd914e5259a8929d4210f9adedbcf32356aeeaa4baaef496b56288df9efa61226a4b315d55e43e6dcb9eb20fa21aee38adcc languageName: node linkType: hard -"@reboot-dev/reboot@npm:1.2.0": - version: 1.2.0 - resolution: "@reboot-dev/reboot@npm:1.2.0" +"@reboot-dev/reboot@npm:1.2.1": + version: 1.2.1 + resolution: "@reboot-dev/reboot@npm:1.2.1" dependencies: "@bufbuild/protoc-gen-es": "npm:1.10.1" "@bufbuild/protoplugin": "npm:1.10.1" - "@reboot-dev/reboot-api": "npm:1.2.0" + "@reboot-dev/reboot-api": "npm:1.2.1" "@scarf/scarf": "npm:1.4.0" "@standard-schema/spec": "npm:1.0.0" chalk: "npm:^4.1.2" @@ -1064,7 +1064,7 @@ __metadata: rbt: rbt.js rbt-esbuild: rbt-esbuild.js zod-to-proto: zod-to-proto.js - checksum: 10c0/511decf69a51481bdd45d889530201ed647cd59cb8229c587b27de791d990bcac9059dcbaf2b5a60c31909182b705ffe6b7bb8e343ff0b36a3bf991460bbd7f0 + checksum: 10c0/50983c3ef4a46ccf80d325b9cfbac69e5b2d9987062eaefa98903b785bc53a1f8edaafece647fd4e68907a6952f7c9dd1d83b47461e8161fedf68efb829485d1 languageName: node linkType: hard diff --git a/reboot/examples/reboot-swag-store/.tests/test.sh b/reboot/examples/reboot-swag-store/.tests/test.sh index 5c71c18d..35fa002c 100755 --- a/reboot/examples/reboot-swag-store/.tests/test.sh +++ b/reboot/examples/reboot-swag-store/.tests/test.sh @@ -51,18 +51,7 @@ pytest backend/ if [ -n "$EXPECTED_RBT_DEV_OUTPUT_FILE" ]; then actual_output_file=$(mktemp) - # `--config=dist` overrides `.rbtrc`'s default `hmr` config, - # whose `--mcp-frontend-host=http://localhost:4444` would - # have Envoy proxy `/__/web/**` to a Vite dev server. There - # is no Vite running in CI, and on the macOS executable-Envoy - # path that proxy target makes cluster init hang - # indefinitely, so `--terminate-after-health-check` never - # fires. The `dist` config sets `--mcp-frontend-host=""`, - # which skips the proxy entirely. `web/dist/` doesn't need - # to actually exist; the health check only probes gRPC and - # Envoy listeners. rbt $RBT_FLAGS dev run \ - --config=dist \ --terminate-after-health-check \ > "$actual_output_file" diff --git a/reboot/examples/reboot-swag-store/Dockerfile b/reboot/examples/reboot-swag-store/Dockerfile index 71245e57..bae893e6 100644 --- a/reboot/examples/reboot-swag-store/Dockerfile +++ b/reboot/examples/reboot-swag-store/Dockerfile @@ -8,7 +8,7 @@ # - `/app/backend/api/` and `/app/web/api/` — generated Python and # TypeScript bindings from `api/reboot_swag_store/v1/store.py`. # --------------------------------------------------------------------------- -FROM ghcr.io/reboot-dev/reboot-base:1.2.0 AS backend +FROM ghcr.io/reboot-dev/reboot-base:1.2.1 AS backend WORKDIR /app diff --git a/reboot/examples/reboot-swag-store/backend/tests/store_servicer_test.py b/reboot/examples/reboot-swag-store/backend/tests/store_servicer_test.py index 2937b195..0c5871ca 100644 --- a/reboot/examples/reboot-swag-store/backend/tests/store_servicer_test.py +++ b/reboot/examples/reboot-swag-store/backend/tests/store_servicer_test.py @@ -93,7 +93,7 @@ async def asyncSetUp(self) -> None: ) ) # Authenticated context for a "guest" user. With - # `useOAuth: true` enabled in `mcp_servers.json`, every + # `--oauth` flag for MCPJam, every # session — including anonymous ones — gets a stable # OAuth user-id, which our authorizers rely on. Tests # bypass the MCP session hook that auto-constructs diff --git a/reboot/examples/reboot-swag-store/mcp_servers.json b/reboot/examples/reboot-swag-store/mcp_servers.json deleted file mode 100644 index 3d7b0a58..00000000 --- a/reboot/examples/reboot-swag-store/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "reboot-swag-store": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/examples/reboot-swag-store/pyproject.toml b/reboot/examples/reboot-swag-store/pyproject.toml index a94bed8a..0fab44ac 100644 --- a/reboot/examples/reboot-swag-store/pyproject.toml +++ b/reboot/examples/reboot-swag-store/pyproject.toml @@ -7,7 +7,7 @@ dependencies = [ "httpx>=0.27,<1.0", "python-dotenv>=1.0.0", "uuid7>=0.1.0", - "reboot==1.2.0", + "reboot==1.2.1", ] [dependency-groups] diff --git a/reboot/examples/reboot-swag-store/uv.lock b/reboot/examples/reboot-swag-store/uv.lock index db6d2154..42fceb0f 100644 --- a/reboot/examples/reboot-swag-store/uv.lock +++ b/reboot/examples/reboot-swag-store/uv.lock @@ -1796,7 +1796,7 @@ wheels = [ [[package]] name = "reboot" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -1846,9 +1846,9 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/01/d67f4c2cfa6cd6605f25f50d8d6dd962cda3dbb1a3be5a413b27cecfe5ba/reboot-1.2.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:45c74d870833b0a092c451c117006623363fc559d1224522859d94993d0f6c1e", size = 20440626, upload-time = "2026-06-18T15:42:03.995Z" }, - { url = "https://files.pythonhosted.org/packages/62/fb/32f27dc3d16d5446ca8987cd81961ebc70c4d9d8e8b0cea71257f1a6b4b1/reboot-1.2.0-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:e3d026f55c1b084f50e417c70fe211d33ac1a796f42eefddd3e288ceb8ea2fd1", size = 24124117, upload-time = "2026-06-18T15:27:54.363Z" }, - { url = "https://files.pythonhosted.org/packages/74/e0/51021d59e6bc3802b1726aee7503d28d7ea0eb507896f0a4b7cac81fccf2/reboot-1.2.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:fb27f3b851e25b797d5cb6e9f93e606ac8ba0c3a138d83f126a2ca26bdfbbd57", size = 24254127, upload-time = "2026-06-18T15:29:00.942Z" }, + { url = "https://files.pythonhosted.org/packages/fd/85/082fea1aaf65904b2f732c893469cb1d2534dff96ba527ca5575c5afbf55/reboot-1.2.1-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b54cbf0233f297926ce516d39578efaea47953d113eca7095d4d0f07a1e4b192", size = 20452221, upload-time = "2026-06-23T19:41:33.886Z" }, + { url = "https://files.pythonhosted.org/packages/64/3a/e004b65f1bbef40d8da6051fcff73925fae358a4c3ccf7b00d00bd2c7421/reboot-1.2.1-py3-none-manylinux_2_34_aarch64.whl", hash = "sha256:bb91ee132940d66c6779c2e5038f2fbf70fd567351c912bf0acf33ba60111860", size = 24135744, upload-time = "2026-06-23T19:28:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/7c8b5caf625a3f1b87b075b5bf23040a6f7761c797c245822144900999ce/reboot-1.2.1-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:988cb8d6e84981d35c1bf4c9040eda4181d4d221d0ff1e9a48922b7f50c123de", size = 24265726, upload-time = "2026-06-23T19:27:45.447Z" }, ] [[package]] @@ -1873,7 +1873,7 @@ requires-dist = [ { name = "anyio", specifier = ">=4.0.0" }, { name = "httpx", specifier = ">=0.27,<1.0" }, { name = "python-dotenv", specifier = ">=1.0.0" }, - { name = "reboot", specifier = "==1.2.0" }, + { name = "reboot", specifier = "==1.2.1" }, { name = "uuid7", specifier = ">=0.1.0" }, ] diff --git a/reboot/examples/reboot-swag-store/web/package-lock.json b/reboot/examples/reboot-swag-store/web/package-lock.json index fff16146..f0a09663 100644 --- a/reboot/examples/reboot-swag-store/web/package-lock.json +++ b/reboot/examples/reboot-swag-store/web/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-react": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-react": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" @@ -886,9 +886,9 @@ } }, "node_modules/@reboot-dev/reboot-api": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.0.tgz", - "integrity": "sha512-6k0OhzPX3fcUurmxQY9ITJCX3LrMnimUYIdkPTEWWIpzV1jirpijx5ovTFG08MACic8mu1UMvCLEv7wq3/w1pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-api/-/reboot-api-1.2.1.tgz", + "integrity": "sha512-CmrL7P/dtm+DBMWLWijs+NIlt0PKmdelwmP3Efmsz9x1dkICn6iq/MOh7FLVe2gcHubKL6RuiwO3vOOBVzObPg==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "1.4.0", @@ -913,15 +913,15 @@ } }, "node_modules/@reboot-dev/reboot-react": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.0.tgz", - "integrity": "sha512-gNkSLFRgWDl40SbW7VNO+xD16DaFdPBZ95E2bULEHpAcyd8lsg5qiHHCPYThwCkDou/HqWbb/2WH5iiQaBFmRg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-react/-/reboot-react-1.2.1.tgz", + "integrity": "sha512-ImVCLLaOTZoDDtAnXdXufScZWOz2DVomVuhs6WwEgjW99yTtwTx1OMsC/wbU37pSmadmdfdlTYP9vy/V9EcFMg==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-api": "1.2.0", - "@reboot-dev/reboot-web": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", + "@reboot-dev/reboot-web": "1.2.1", "@scarf/scarf": "1.4.0", "@types/uuid": "^9.0.4", "js-sha1": "0.7.0", @@ -949,12 +949,12 @@ } }, "node_modules/@reboot-dev/reboot-web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.0.tgz", - "integrity": "sha512-ziBVJ5WLlnR57nkCUAJc9OAdqnl4PjoIYPdzMMkEYh3wpf10LPT/souGQT9c5BHUSWOx81azdQqU5lCqYXKWsg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reboot-dev/reboot-web/-/reboot-web-1.2.1.tgz", + "integrity": "sha512-/jk3OdG6pF+McvIP6yEuJKSWmDpHSR4+nVdbvUIHDdJh8cQkFj2QnzQJ+pRbql207LvwUNJ3T9YwZDSYz8rB9A==", "license": "Apache-2.0", "dependencies": { - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "@scarf/scarf": "1.4.0", "js-sha1": "0.7.0", "lru-cache-idb": "^0.5.2", diff --git a/reboot/examples/reboot-swag-store/web/package.json b/reboot/examples/reboot-swag-store/web/package.json index 3349c574..ab476c3a 100644 --- a/reboot/examples/reboot-swag-store/web/package.json +++ b/reboot/examples/reboot-swag-store/web/package.json @@ -17,8 +17,8 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "1.5.0", "@modelcontextprotocol/sdk": "1.29.0", - "@reboot-dev/reboot-react": "1.2.0", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-react": "1.2.1", + "@reboot-dev/reboot-api": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "zod": "^4.0.0" diff --git a/reboot/mcp/ui.py b/reboot/mcp/ui.py index 161b6cf1..0d42a360 100644 --- a/reboot/mcp/ui.py +++ b/reboot/mcp/ui.py @@ -53,6 +53,7 @@ import urllib.request import uuid from pathlib import Path +from reboot.api import snake_to_camel from reboot.mcp.iframe import ( cache_busting_iframe_html, dev_iframe_html, @@ -802,3 +803,28 @@ def _read_and_inject( del cache_bust # Intentionally unused in the body. html = dist_path.read_text() return _inject_globals(html, reboot_url, ui_name) + + +def camelize_request_payload(value: Any) -> Any: + """Recursively convert snake_case dict keys to camelCase. + + Produces the protobuf-canonical JSON shape for a validated + `request: ` payload — i.e., `primary_color` becomes + `primaryColor`, matching the protobuf-es generated TypeScript + field names that customer components are typed against. + Pydantic's `model_dump(mode='json')` defaults to Python + attribute names (snake_case), so without this step a UI request + field named `personalized_message` would land as + `personalized_message` on the React side while the TS type + expected `personalizedMessage`, and the prop would silently be + undefined. Recurses through lists and nested dicts so nested + Models in the request payload convert too. + """ + if isinstance(value, dict): + return { + snake_to_camel(key): camelize_request_payload(inner) + for key, inner in value.items() + } + if isinstance(value, list): + return [camelize_request_payload(item) for item in value] + return value diff --git a/reboot/nodejs/package.json b/reboot/nodejs/package.json index fd861d5b..63bb9828 100644 --- a/reboot/nodejs/package.json +++ b/reboot/nodejs/package.json @@ -2,7 +2,7 @@ "dependencies": { "@bufbuild/protoplugin": "1.10.1", "@bufbuild/protoc-gen-es": "1.10.1", - "@reboot-dev/reboot-api": "1.2.0", + "@reboot-dev/reboot-api": "1.2.1", "chalk": "^4.1.2", "node-addon-api": "^7.0.0", "node-gyp": ">=10.2.0", @@ -22,7 +22,7 @@ }, "type": "module", "name": "@reboot-dev/reboot", - "version": "1.2.0", + "version": "1.2.1", "description": "npm package for Reboot", "scripts": { "preinstall": "node preinstall.cjs", diff --git a/reboot/ping/README.md b/reboot/ping/README.md index a930a562..568d61af 100644 --- a/reboot/ping/README.md +++ b/reboot/ping/README.md @@ -13,11 +13,11 @@ features: ## Using MCPJam -The application contains MCP functionality. Test it using MCPJam: +For testing with MCPJam Inspector: -``` -# From the root of the Bazel repo: -npx @mcpjam/inspector@2.9.3 --config reboot/ping/mcp_servers.json --server ping-server +```bash +# In another terminal, run MCPJam: +npx @mcpjam/inspector@2.18.1 --url http://localhost:9991/mcp --oauth ``` ## On the local cluster diff --git a/reboot/ping/mcp_servers.json b/reboot/ping/mcp_servers.json deleted file mode 100644 index a83edcc1..00000000 --- a/reboot/ping/mcp_servers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "ping-server": { - "url": "http://localhost:9991/mcp", - "useOAuth": true - } - } -} diff --git a/reboot/ping/ping_api.py b/reboot/ping/ping_api.py index 77eb13e6..d63fbfd6 100644 --- a/reboot/ping/ping_api.py +++ b/reboot/ping/ping_api.py @@ -100,6 +100,16 @@ class CounterState(Model): description: str = Field(tag=2, default="") +class ShowClickerProps(Model): + # Visual style for the clicker UI; the AI picks a primary + # color to match the user's mood or the counter's purpose. + # The snake_case field name is intentional — it exercises the + # Python→TS camelCase conversion path that any real Reboot + # app needs for multi-word UI request fields. Empty string + # means use the app's default style. + primary_color: str = Field(tag=1, default="") + + api = API( Ping=Type( state=PingState, @@ -182,7 +192,7 @@ class CounterState(Model): state=CounterState, methods=Methods( show_clicker=UI( - request=None, + request=ShowClickerProps, path="web/ui/clicker", title="Counter Clicker", description=("Interactive clicker for the Counter."), diff --git a/reboot/ping/web/ui/clicker/App.tsx b/reboot/ping/web/ui/clicker/App.tsx index 1684b079..9a21c4fc 100644 --- a/reboot/ping/web/ui/clicker/App.tsx +++ b/reboot/ping/web/ui/clicker/App.tsx @@ -1,12 +1,21 @@ import { useState, type FC } from "react"; -import { useCounter } from "../../../ping_api_zod_rbt_react"; +import { + type ShowClickerProps, + useCounter, +} from "../../../ping_api_zod_rbt_react"; import css from "./App.module.css"; /** * Compact clicker widget. Uses generated MCP-aware hook: - * WebSocket for reads, MCP tools for writes. + * WebSocket for reads, MCP tools for writes. The `primaryColor` + * prop comes from the `ShowClickerProps` request the AI passes + * to the `show_clicker` MCP tool; `main.tsx` renders a bare + * ``, and `RebootClientProvider` (via its internal + * `McpConnector`) auto-injects the request fields as props onto + * it with `React.cloneElement`. Python `primary_color` is + * generated as TypeScript `primaryColor` by protobuf-es. */ -export const ClickerApp: FC = () => { +export const ClickerApp: FC = ({ primaryColor }) => { const [isPending, setIsPending] = useState(false); const counter = useCounter(); @@ -32,7 +41,10 @@ export const ClickerApp: FC = () => { } return ( -
+
{count}