Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/scripts/sdk-release-notes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-sqlite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-hosted.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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' &&
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-sdk-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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/*
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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."
```

Expand Down
2 changes: 1 addition & 1 deletion docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
2 changes: 1 addition & 1 deletion docs/api/import.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
```
Expand Down
2 changes: 1 addition & 1 deletion docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/first-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/import.md
Original file line number Diff line number Diff line change
Expand Up @@ -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."
```

Expand Down
2 changes: 1 addition & 1 deletion docs/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion examples/walkthrough/WALKTHROUGH.md
Original file line number Diff line number Diff line change
Expand Up @@ -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."
```

Expand Down
4 changes: 2 additions & 2 deletions sdks/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion sdks/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion sdks/python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down
2 changes: 1 addition & 1 deletion sdks/python/src/sopops/mcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
2 changes: 1 addition & 1 deletion skills/sopops-ab-tests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion skills/sopops-local-setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions skills/sopops-onboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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_..."}}}}
```

Expand Down
2 changes: 1 addition & 1 deletion src/sopops_server/onboarding/kickoff.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_github.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
4 changes: 2 additions & 2 deletions tests/test_onboarding.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

Expand Down
2 changes: 1 addition & 1 deletion web/src/components/connect-guide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export function ConnectGuide({ className }: { className?: string }) {
</div>
)}
<p className="text-muted-foreground mt-2 text-xs">
Code samples are in the README, under <HrefLink href="https://github.com/amanmibra/sopops#connect-your-agent">Connect your agent</HrefLink>.
Code samples are in the README, under <HrefLink href="https://github.com/sopops-dev/sopops#connect-your-agent">Connect your agent</HrefLink>.
</p>
</div>
);
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/insights/versions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/mcp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "<your token>";

function command(url: string, token: string, ws: string): string {
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/sessions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export function SessionsView({ filters, onFilters }: { filters: SessionFilters;
<HrefLink href={settingsHref(ws, "platforms")}>Settings, under Platforms</HrefLink>). You can also send them from{" "}
{plats.has("livekit") && (
<>
the <HrefLink href="https://github.com/amanmibra/sopops/blob/main/docs/connect.md#connect-livekit">LiveKit helper</HrefLink>,{" "}
the <HrefLink href="https://github.com/sopops-dev/sopops/blob/main/docs/connect.md#connect-livekit">LiveKit helper</HrefLink>,{" "}
</>
)}
the API or <code className="text-sm">sopops import</code>, with a token from <HrefLink href={settingsHref(ws, "access")}>Settings, under Access</HrefLink>{" "}
Expand Down
Loading