diff --git a/.github/scripts/sdk-release-notes.sh b/.github/scripts/sdk-release-notes.sh index ae0ae5e..67c24d3 100755 --- a/.github/scripts/sdk-release-notes.sh +++ b/.github/scripts/sdk-release-notes.sh @@ -11,7 +11,7 @@ set -euo pipefail version=${1:?version, like 0.6.0} ref=${2:?git ref the release ends at} -repo=${GITHUB_REPOSITORY:-amanmibra/sopops} +repo=${GITHUB_REPOSITORY:-sopops-dev/sopops} # Newest first by date: versions only go up, and the prefixes don't sort against each other by name. previous() { git tag -l "$@" --sort=-creatordate | grep -vx "sdk-v$version" | head -n1; } diff --git a/.github/workflows/ci-sqlite.yml b/.github/workflows/ci-sqlite.yml index ad39314..d259b94 100644 --- a/.github/workflows/ci-sqlite.yml +++ b/.github/workflows/ci-sqlite.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v6 - name: Install sop - run: curl -fsSL https://raw.githubusercontent.com/sopops-dev/sop/main/install.sh | SOP_REF=v0.1.0 SOP_INSTALL_DIR=/usr/local/bin sudo -E sh + run: curl -fsSL https://raw.githubusercontent.com/sopops-dev/sop/main/install.sh | SOP_REF=v0.1.1 SOP_INSTALL_DIR=/usr/local/bin sudo -E sh - run: uv sync --all-extras --python 3.12 # Spread across the runner's cores; each worker gets its own database (tests/conftest.py). - run: uv run pytest -q -n auto diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2966a5..c4c8254 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: until docker exec pg pg_isready -U postgres; do sleep 1; done sleep 3 # the image restarts once after its first start - name: Install sop - run: curl -fsSL https://raw.githubusercontent.com/sopops-dev/sop/main/install.sh | SOP_REF=v0.1.0 SOP_INSTALL_DIR=/usr/local/bin sudo -E sh + run: curl -fsSL https://raw.githubusercontent.com/sopops-dev/sop/main/install.sh | SOP_REF=v0.1.1 SOP_INSTALL_DIR=/usr/local/bin sudo -E sh - run: uv sync --all-extras --python 3.12 # Spread across the runner's cores; each worker gets its own database (tests/conftest.py). - run: uv run pytest -q -n auto diff --git a/.github/workflows/deploy-hosted.yml b/.github/workflows/deploy-hosted.yml index c42a40b..d02f02f 100644 --- a/.github/workflows/deploy-hosted.yml +++ b/.github/workflows/deploy-hosted.yml @@ -23,7 +23,7 @@ concurrency: jobs: dispatch: if: >- - github.repository == 'amanmibra/sopops' && + github.repository == 'sopops-dev/sopops' && ((github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') || (github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && diff --git a/.github/workflows/publish-sdk-release.yml b/.github/workflows/publish-sdk-release.yml index b376a94..c9106a5 100644 --- a/.github/workflows/publish-sdk-release.yml +++ b/.github/workflows/publish-sdk-release.yml @@ -10,8 +10,8 @@ name: publish-sdk-release # Both registries trust this file by name, through OIDC with no stored token. The publish steps are jobs # here, not calls into another workflow, because npm checks the calling workflow's name and PyPI the called # one's; one file keeps both on the same, supported identity. Register it once on each (CONTRIBUTING.md): -# pypi.org: project sopops > Manage > Publishing: GitHub, amanmibra/sopops, publish-sdk-release.yml, env pypi -# npmjs.com: package sopops > Settings > Trusted publisher: GitHub Actions, amanmibra/sopops, +# pypi.org: project sopops > Manage > Publishing: GitHub, sopops-dev/sopops, publish-sdk-release.yml, env pypi +# npmjs.com: package sopops > Settings > Trusted publisher: GitHub Actions, sopops-dev/sopops, # publish-sdk-release.yml, env npm # # Safe to re-run: an existing tag on the same commit is reused, and a version already on PyPI or npm is skipped. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd556a5..8d2f3ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,8 +96,8 @@ A monthly workflow (`sdk-release-reminder.yml`) opens an issue when either SDK h **One-time setup.** - Settings > Actions > General: turn on "Allow GitHub Actions to create and approve pull requests", so `release-sdk.yml` can open the pull request. -- PyPI trusts `publish-sdk-release.yml`, with no token. On pypi.org, open the `sopops` project, then Manage > Publishing > Add a new publisher > GitHub: owner `amanmibra`, repository `sopops`, workflow `publish-sdk-release.yml`, environment `pypi`. Remove the old `release-sdk-python.yml` publisher afterwards. -- npm trusts the same file. On npmjs.com, open the `sopops` package, then Settings > Trusted publisher > GitHub Actions: organization or user `amanmibra`, repository `sopops`, workflow `publish-sdk-release.yml`, environment `npm`. Then delete the `NPM_TOKEN` repository secret, and under Publishing access choose to require two-factor authentication and disallow tokens. +- PyPI trusts `publish-sdk-release.yml`, with no token. On pypi.org, open the `sopops` project, then Manage > Publishing > Add a new publisher > GitHub: owner `sopops-dev`, repository `sopops`, workflow `publish-sdk-release.yml`, environment `pypi`. Remove the old `release-sdk-python.yml` publisher afterwards. +- npm trusts the same file. On npmjs.com, open the `sopops` package, then Settings > Trusted publisher > GitHub Actions: organization or user `sopops-dev`, repository `sopops`, workflow `publish-sdk-release.yml`, environment `npm`. Then delete the `NPM_TOKEN` repository secret, and under Publishing access choose to require two-factor authentication and disallow tokens. - Optional: under Settings > Environments, limit `pypi` and `npm` to the `main` branch. **If publishing fails,** fix the cause and re-run the failed jobs of that `publish-sdk-release` run. It reuses the tag and skips a version already on PyPI or npm. Once a run can no longer be re-run, `gh workflow run publish-sdk-release.yml -f tag=sdk-v0.6.0` does the same. diff --git a/Dockerfile b/Dockerfile index a23f1e2..81adf18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ RUN pnpm build FROM python:3.12-slim # sop compiles the prompts; pinned so served prompts don't change under a rebuild. -ARG SOP_REF=v0.1.0 +ARG SOP_REF=v0.1.1 RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates \ && curl -fsSL https://raw.githubusercontent.com/sopops-dev/sop/main/install.sh | SOP_REF=$SOP_REF SOP_INSTALL_DIR=/usr/local/bin sh \ && apt-get purge -y curl && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* diff --git a/README.md b/README.md index 0341d15..dcb9b1e 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Already running agents? On the **Import** page, sopops gives you one command to ```sh claude mcp add sopops --env SOPOPS_URL=http://127.0.0.1:8484 --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp \ + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp \ && claude "Onboard this project's agents into sopops: call the sopops get_kickoff tool and follow it." ``` diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 32d8112..dce6017 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,7 +1,7 @@ import { posix } from "node:path"; import { defineConfig } from "vitepress"; -const REPO = "https://github.com/amanmibra/sopops"; +const REPO = "https://github.com/sopops-dev/sopops"; // Where the site lives: "/" by default (pnpm build), "/docs/" on sopops.dev (pnpm build:cloudflare). The build goes // under the same path in .vitepress/dist, so the Worker serving that folder (wrangler.jsonc) answers /docs/... itself, diff --git a/docs/api/import.md b/docs/api/import.md index f2724b1..a6b6a04 100644 --- a/docs/api/import.md +++ b/docs/api/import.md @@ -67,7 +67,7 @@ curl -s -X POST -H "Content-Type: application/json" \ "prompt": "Onboard this project's agents into sopops: call the sopops get_kickoff tool and follow it.", "settings_claude_code": "Use the strongest model you have (for example /model opus) and accept edits automatically (Shift+Tab).", "settings_codex": "Use high reasoning effort and auto mode (codex -c model_reasoning_effort=high, then /approvals: Auto).", - "mcp_source": "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python" + "mcp_source": "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python" } } ``` diff --git a/docs/configuration.md b/docs/configuration.md index 4ef5411..3f7e12a 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -76,7 +76,7 @@ that serves it from there; nothing in self-hosting uses it. | `SOPOPS_SESSION_IDLE_MINUTES` | `30` | A streamed session with no events this long closes as incomplete. | | `SOPOPS_POSTCALL_GRACE_SECONDS` | `120` | After ElevenLabs' monitor socket ends, how long to wait for the post-call webhook (if set up) before closing and checking. | | `SOPOPS_LIVEKIT_ANY_HOST` | `false` | Allow a self-hosted LiveKit URL, not only LiveKit Cloud. | -| `SOPOPS_MCP_SOURCE` | `sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python` | What the onboarding command's `uvx --from` installs: the client SDK with its `mcp` extra. From a clone: `/path/to/sopops/sdks/python[mcp]`. | +| `SOPOPS_MCP_SOURCE` | `sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python` | What the onboarding command's `uvx --from` installs: the client SDK with its `mcp` extra. From a clone: `/path/to/sopops/sdks/python[mcp]`. | ## GitHub diff --git a/docs/first-agent.md b/docs/first-agent.md index 116e6ee..7a86527 100644 --- a/docs/first-agent.md +++ b/docs/first-agent.md @@ -29,7 +29,7 @@ fresh server on `http://127.0.0.1:8585`, uses a new database, and leaves it running when it finishes. ```sh -git clone https://github.com/amanmibra/sopops +git clone https://github.com/sopops-dev/sopops cd sopops pnpm -C web install && pnpm -C web build just examples/walkthrough/all diff --git a/docs/import.md b/docs/import.md index 4604a44..4ba05e9 100644 --- a/docs/import.md +++ b/docs/import.md @@ -12,7 +12,7 @@ The Import page gives you a 2-hour onboarding token (this workspace only, can se ```sh claude mcp add sopops --env SOPOPS_URL=http://127.0.0.1:8484 --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp \ + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp \ && claude "Onboard this project's agents into sopops: call the sopops get_kickoff tool and follow it." ``` diff --git a/docs/quickstart.md b/docs/quickstart.md index 286fa58..375a636 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -9,7 +9,7 @@ Before you begin, install Git and Docker with Docker Compose. Make sure that port `8484` is free. ```sh -git clone https://github.com/amanmibra/sopops +git clone https://github.com/sopops-dev/sopops cd sopops cp .env.example .env docker compose up --build -d diff --git a/examples/walkthrough/WALKTHROUGH.md b/examples/walkthrough/WALKTHROUGH.md index b22d092..beccb0b 100644 --- a/examples/walkthrough/WALKTHROUGH.md +++ b/examples/walkthrough/WALKTHROUGH.md @@ -99,7 +99,7 @@ Look at `/`: an empty instance. The walkthrough uses the workspace `walkthrough` ```sh cd examples/walkthrough/agent/before claude mcp add sopops --env SOPOPS_URL=http://127.0.0.1:8585 --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp \ + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp \ && claude "Onboard this project's agents into sopops: call the sopops get_kickoff tool and follow it." ``` diff --git a/sdks/node/package.json b/sdks/node/package.json index ea21c60..1897e3f 100644 --- a/sdks/node/package.json +++ b/sdks/node/package.json @@ -44,11 +44,11 @@ "homepage": "https://sopops.dev", "repository": { "type": "git", - "url": "git+https://github.com/amanmibra/sopops.git", + "url": "git+https://github.com/sopops-dev/sopops.git", "directory": "sdks/node" }, "bugs": { - "url": "https://github.com/amanmibra/sopops/issues" + "url": "https://github.com/sopops-dev/sopops/issues" }, "keywords": [ "sopops", diff --git a/sdks/python/README.md b/sdks/python/README.md index 83de8ac..1307193 100644 --- a/sdks/python/README.md +++ b/sdks/python/README.md @@ -111,7 +111,7 @@ The session format is in [API reference](../../docs/api/sessions.md#the-canonica ```sh claude mcp add sopops --env SOPOPS_URL=http://127.0.0.1:8484 --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp ``` It reads ElevenLabs and Vapi agents locally (`ELEVENLABS_API_KEY`, `VAPI_API_KEY`, read-only) and writes the sop project into the repo; everything else (the kickoff, the extraction guide, compiling, fidelity, pushing) goes to the sopops server's `/v1/onboarding` endpoints with `SOPOPS_URL` and `SOPOPS_TOKEN`. `sopops-mcp install-skill --url URL` copies the server's sopops-onboard skill into the repo (`--claude`, `--codex`). It runs with `uvx`, so it works the same for TypeScript projects, which is why the npm package has no copy of it. diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml index cd3b40a..52c598d 100644 --- a/sdks/python/pyproject.toml +++ b/sdks/python/pyproject.toml @@ -12,7 +12,7 @@ classifiers = ["Typing :: Typed"] [project.urls] Homepage = "https://sopops.dev" Documentation = "https://docs.sopops.dev" -Repository = "https://github.com/amanmibra/sopops" +Repository = "https://github.com/sopops-dev/sopops" [project.optional-dependencies] livekit = ["livekit-agents>=1.0"] diff --git a/sdks/python/src/sopops/mcp.py b/sdks/python/src/sopops/mcp.py index 892a00e..32a4ff3 100644 --- a/sdks/python/src/sopops/mcp.py +++ b/sdks/python/src/sopops/mcp.py @@ -5,7 +5,7 @@ sopops for review. Optionally it writes the same proposal as a sop project into the repo. sopops does the compiling and checking over its HTTP API (`/v1/onboarding`); this server only reads platforms and writes files locally. -Install with the `mcp` extra: `uvx --from "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python" sopops-mcp`. +Install with the `mcp` extra: `uvx --from "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python" sopops-mcp`. It runs two ways: diff --git a/skills/sopops-ab-tests/SKILL.md b/skills/sopops-ab-tests/SKILL.md index 2ccd650..d571103 100644 --- a/skills/sopops-ab-tests/SKILL.md +++ b/skills/sopops-ab-tests/SKILL.md @@ -7,7 +7,7 @@ description: Set up an A/B test of a voice agent's settings (LLM, voice, speech sopops compares versions of an agent on the team's procedures (Insights → A/B tests). A version is the calls with the same agent, release and settings. Your job is to make the agent run two or more versions and make each call report which one it ran. You change code in this repo only; the user deploys. -Full reference: https://github.com/amanmibra/sopops/blob/main/docs/ab-tests.md +Full reference: https://github.com/sopops-dev/sopops/blob/main/docs/ab-tests.md ## 1. Find how the agent is built diff --git a/skills/sopops-local-setup/SKILL.md b/skills/sopops-local-setup/SKILL.md index b2dbba6..8ae4250 100644 --- a/skills/sopops-local-setup/SKILL.md +++ b/skills/sopops-local-setup/SKILL.md @@ -36,7 +36,7 @@ docker info >/dev/null 2>&1 && echo "docker is running" If the current folder is already the sopops repo (it has `docker-compose.yml` and `skills/sopops-local-setup`), skip this. Otherwise: ```sh -git clone https://github.com/amanmibra/sopops && cd sopops +git clone https://github.com/sopops-dev/sopops && cd sopops ``` ## 4. Write .env diff --git a/skills/sopops-onboard/SKILL.md b/skills/sopops-onboard/SKILL.md index 1751276..cbad647 100644 --- a/skills/sopops-onboard/SKILL.md +++ b/skills/sopops-onboard/SKILL.md @@ -16,16 +16,16 @@ The sopops **Import agents** page (Use Claude Code / Codex) gives you one comman ```sh # Claude Code claude mcp add sopops --env SOPOPS_URL=https://sopops.example --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp # Codex codex mcp add sopops --env SOPOPS_URL=https://sopops.example --env SOPOPS_TOKEN=sopops_onb_... \ - -- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp + -- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp ``` Cursor (`.cursor/mcp.json`): ```json -{"mcpServers": {"sopops": {"command": "uvx", "args": ["--from", "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python", "sopops-mcp"], +{"mcpServers": {"sopops": {"command": "uvx", "args": ["--from", "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python", "sopops-mcp"], "env": {"SOPOPS_URL": "https://sopops.example", "SOPOPS_TOKEN": "sopops_onb_..."}}}} ``` diff --git a/src/sopops_server/onboarding/kickoff.py b/src/sopops_server/onboarding/kickoff.py index ece420b..713d985 100644 --- a/src/sopops_server/onboarding/kickoff.py +++ b/src/sopops_server/onboarding/kickoff.py @@ -17,7 +17,7 @@ # sopops-mcp ships in the client SDK (sdks/python, its `mcp` extra), not the server. Until it's on PyPI, uvx installs it # from the repo's subdirectory. SOPOPS_MCP_SOURCE overrides it (e.g. `/path/to/sopops/sdks/python[mcp]` for a clone). -DEFAULT_SOURCE = "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python" +DEFAULT_SOURCE = "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python" SKILL_NAME = "sopops-onboard" AB_SKILL = "sopops-ab-tests" SKILLS = (SKILL_NAME, AB_SKILL) diff --git a/tests/test_github.py b/tests/test_github.py index add6a28..e4ac2b0 100644 --- a/tests/test_github.py +++ b/tests/test_github.py @@ -429,7 +429,7 @@ def test_onboarding_connects_before_there_is_a_project(client, bare): started = start_repo_onboarding(client) imp = started["import"] assert (imp["repo"], imp["repo_branch"], imp["repo_path"], imp["repo_project"], imp["pr_url"]) == ("acme/agents", "main", "sops", "missing", None) - assert "uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp" in started["kickoff"]["claude_code"] + assert "uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp" in started["kickoff"]["claude_code"] events = client.get(f"{WS}/imports/{imp['id']}/events").json() assert "propose a pull request adding a sop project at sops/ on main. Nothing merges without you." in events[-1]["message"] session = client.get("/v1/onboarding/session", headers={"Authorization": f"Bearer {started['token']}"}).json() diff --git a/tests/test_onboarding.py b/tests/test_onboarding.py index e758fa5..94eac1f 100644 --- a/tests/test_onboarding.py +++ b/tests/test_onboarding.py @@ -409,14 +409,14 @@ def test_kickoff_is_one_command_per_agent_and_the_skill_is_the_instructions(monk k = kickoff.kickoff("prod", "https://sopops.example/", "sopops_onb_abc") assert k["claude_code"] == ( "claude mcp add sopops --env SOPOPS_URL=https://sopops.example --env SOPOPS_TOKEN=sopops_onb_abc " - "-- uvx --from 'sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python' sopops-mcp " + "-- uvx --from 'sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python' sopops-mcp " "&& claude 'Onboard this project'\"'\"'s agents into sopops: call the sopops get_kickoff tool and follow it.'" ) assert k["codex"].startswith("codex mcp add sopops --env SOPOPS_URL=https://sopops.example ") and "&& codex " in k["codex"] assert 'SOPOPS_TOKEN = "sopops_onb_abc"' in k["codex_toml"] and "[mcp_servers.sopops]" in k["codex_toml"] assert "/model opus" in k["settings_claude_code"] and "codex" not in k["settings_claude_code"].lower() assert "model_reasoning_effort" in k["settings_codex"] and "Claude" not in k["settings_codex"] - assert 'args = ["--from", "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python", "sopops-mcp"]' in k["codex_toml"] + assert 'args = ["--from", "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python", "sopops-mcp"]' in k["codex_toml"] monkeypatch.setenv("SOPOPS_MCP_SOURCE", "sopops[mcp]==0.2.0") assert "-- uvx --from 'sopops[mcp]==0.2.0' sopops-mcp &&" in kickoff.kickoff("p", "http://x", "t")["claude_code"] diff --git a/web/src/components/connect-guide.tsx b/web/src/components/connect-guide.tsx index 2b16862..b2af66c 100644 --- a/web/src/components/connect-guide.tsx +++ b/web/src/components/connect-guide.tsx @@ -142,7 +142,7 @@ export function ConnectGuide({ className }: { className?: string }) { )}

- Code samples are in the README, under Connect your agent. + Code samples are in the README, under Connect your agent.

); diff --git a/web/src/components/insights/versions.tsx b/web/src/components/insights/versions.tsx index 9ea8ed3..dfb2392 100644 --- a/web/src/components/insights/versions.tsx +++ b/web/src/components/insights/versions.tsx @@ -21,7 +21,7 @@ import { LIVE } from "./overview"; import { FlagTag } from "./procedure"; import { AsOf, InsightsShell, Pick } from "./scope"; -export const AB_DOCS = "https://github.com/amanmibra/sopops/blob/main/docs/ab-tests.md"; +export const AB_DOCS = "https://github.com/sopops-dev/sopops/blob/main/docs/ab-tests.md"; const th = "text-muted-foreground border-b px-3 py-2 text-left text-xs font-medium whitespace-nowrap"; const td = "border-b px-3 py-2 align-top"; diff --git a/web/src/components/mcp.tsx b/web/src/components/mcp.tsx index ac7bf1c..68dc515 100644 --- a/web/src/components/mcp.tsx +++ b/web/src/components/mcp.tsx @@ -13,7 +13,7 @@ import { apiOrigin } from "@/lib/paths"; // sopops-mcp ships in the Python SDK's `mcp` extra; uvx installs it from the repo until it's on PyPI (see // sdks/python/src/sopops/mcp.py and the server's kickoff). -const SOURCE = "sopops[mcp] @ git+https://github.com/amanmibra/sopops@main#subdirectory=sdks/python"; +const SOURCE = "sopops[mcp] @ git+https://github.com/sopops-dev/sopops@main#subdirectory=sdks/python"; const PLACEHOLDER = ""; function command(url: string, token: string, ws: string): string { diff --git a/web/src/components/sessions.tsx b/web/src/components/sessions.tsx index 15636d3..842e7f0 100644 --- a/web/src/components/sessions.tsx +++ b/web/src/components/sessions.tsx @@ -181,7 +181,7 @@ export function SessionsView({ filters, onFilters }: { filters: SessionFilters; Settings, under Platforms). You can also send them from{" "} {plats.has("livekit") && ( <> - the LiveKit helper,{" "} + the LiveKit helper,{" "} )} the API or sopops import, with a token from Settings, under Access{" "}