diff --git a/.github/workflows/publish-js-sdks.yml b/.github/workflows/publish-js-sdks.yml index bfd3173b5..d051b0a1a 100644 --- a/.github/workflows/publish-js-sdks.yml +++ b/.github/workflows/publish-js-sdks.yml @@ -42,13 +42,14 @@ jobs: - name: Set up pnpm uses: pnpm/action-setup@v4 with: - version: 9.15.0 - run_install: false + version: latest + + - name: Enable corepack + run: corepack enable - name: Get pnpm store path id: pnpm-store - working-directory: sdks - run: echo "STORE_PATH=$(pnpm store path)" >> "$GITHUB_OUTPUT" + run: echo "STORE_PATH=$(corepack pnpm store path)" >> "$GITHUB_OUTPUT" - name: Cache pnpm store uses: actions/cache@v5 @@ -59,11 +60,11 @@ jobs: - name: Install workspace dependencies working-directory: sdks - run: pnpm install --frozen-lockfile + run: corepack pnpm install --frozen-lockfile - name: Build SDK working-directory: sdks - run: pnpm --filter ${{ matrix.sdk.packageName }}... --sort run build + run: corepack pnpm --filter ${{ matrix.sdk.packageName }}... --sort run build - name: Pack SDK if: startsWith(github.ref, format('refs/tags/js/{0}/v', matrix.sdk.tagPrefix)) @@ -73,7 +74,7 @@ jobs: set -euo pipefail PACK_DIR="${GITHUB_WORKSPACE}/dist/npm/${{ matrix.sdk.name }}" mkdir -p "$PACK_DIR" - pnpm pack --pack-destination "$PACK_DIR" + corepack pnpm pack --pack-destination "$PACK_DIR" PACKAGE_TARBALL="$(find "$PACK_DIR" -maxdepth 1 -name '*.tgz' -print -quit)" if [[ -z "$PACKAGE_TARBALL" ]]; then echo "No package tarball was produced in $PACK_DIR" >&2 @@ -92,4 +93,4 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | - pnpm publish "${{ steps.pack.outputs.tarball }}" --access public --no-git-checks + corepack pnpm publish "${{ steps.pack.outputs.tarball }}" --access public --no-git-checks diff --git a/.gitignore b/.gitignore index a5e8e9307..34009cee8 100644 --- a/.gitignore +++ b/.gitignore @@ -274,5 +274,10 @@ kubernetes/test/kind/gvisor/runsc kubernetes/test/kind/gvisor/containerd-shim-runsc-v1 bin/ obj/ +console/dist/ +console/output/ +console/playwright-report/ +console/tests/playwright-report/ +console/playwright.config.ts .qoder/ diff --git a/console/index.html b/console/index.html new file mode 100644 index 000000000..492f11d99 --- /dev/null +++ b/console/index.html @@ -0,0 +1,13 @@ + + +
+ + + +X-OpenSandbox-User and X-OpenSandbox-Roles) when{" "}
+ auth.mode = "api_key_and_user" in the server. In local dev, set
+ VITE_DEV_IDENTITY_USER and start the Vite dev server so the proxy can add these headers, or
+ use a reverse proxy in front of the server.
+
+ Pause and resume are not supported on every runtime (for example, some Kubernetes setups return{" "}
+ 501).
+
X-OpenSandbox-Roles to operator (or set VITE_UI_ROLE=operator{" "}
+ for the dev UI hint).
+
+ Reserved metadata for owner/team scope is injected on the server for user-authenticated requests. Do not expect
+ to set access.owner from the browser.
+
Missing id.
; + } + + return ( +Image: {box.image?.uri}
+Expires: {box.expiresAt}
+ {box.metadata && Object.keys(box.metadata).length > 0 && ( +{JSON.stringify(box.metadata, null, 2)}
+
+ entrypoint: {JSON.stringify(box.entrypoint)}
+
Resolves a published port to a reachable host (per server ingress settings).
++ {endpoint} +
+ )} ++ + + +
+read_only; create, renew, delete, and pause are
+ hidden. The server is always authoritative.
+ + Lifecycle operations for AI sandboxes. +
++ List, inspect, renew, and manage sandbox instances. +
++ Sandboxes + + {data?.items?.length ?? 0} on page + +
++ UI role: {role} (server enforces real role) +
++ Current page: {page} {loading ? "· Loading..." : ""} +
++ Server-side owner/team scope (reserved metadata keys) applies automatically for console users; API key clients + are unchanged. +
+Loading…
: null} + {data && ( +| ID | +State | +Image | +Expires | +
|---|---|---|---|
| + {s.id} + | ++ + {s.status.state} + + | ++ {s.image?.uri} + | ++ {s.expiresAt} + | +
No sandboxes match the filters.
} +