npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

opencode-config-profiles-manager

v0.2.0

Published

Full config-directory profiles for OpenCode

Readme

ocpm — OpenCode Config Profiles Manager

English version

Профили OpenCode как отдельные каталоги конфигурации. Каждый профиль — полная копия ~/.config/opencode со своими opencode.json, cli.json, agents/, commands/, plugins/, skills/ и AGENTS.md.

default — это существующий глобальный каталог OpenCode. ocpm его не изменяет.

Зачем

В OpenCode V2 один фоновый сервис обслуживает один конфиг. Если просто подставить OPENCODE_CONFIG_DIR, запущенный сервис продолжит использовать старый конфиг. ocpm кладёт в каждый профиль свой service.json:

{ "disabled": true }

OpenCode видит disabled и поднимает приватный сервер для профиля. Глобальный service.json и общий сервис остаются нетронутыми.

Этот приватный сервер не читает блок env из service.json — OpenCode применяет его только к общему фоновому сервису. Поэтому ocpm читает service.json сам и передаёт его env в окружение запускаемого процесса:

{ "disabled": true, "env": { "OPENCODE_DISABLE_PROJECT_CONFIG": "1" } }

Установка

npm install -g opencode-config-profiles-manager

После этого доступна команда ocpm.

Из исходников:

npm install
npm run build
npm link

Быстрый старт

ocpm init
ocpm create unity --from default
ocpm list
ocpm run unity

Проверка:

ocpm doctor
ocpm doctor unity --fix

Команды

| Команда | Назначение | |---|---| | ocpm init | Создать каталог профилей | | ocpm create <name> [--from default\|<profile>] [--empty] [--force] | Создать профиль полной копией | | ocpm list | Список профилей, источника и статуса | | ocpm run <name> [args...] | Запустить OpenCode с профилем | | ocpm exec <name> -- <cmd...> | Выполнить команду с окружением профиля | | ocpm shell <name> | Shell с окружением профиля | | ocpm env <name> [--shell sh\|fish\|powershell] | Напечатать export-команды | | ocpm path <name> | Путь к профилю | | ocpm which | Текущий профиль | | ocpm remove <name> [--force] | Удалить профиль | | ocpm doctor [name] [--fix] | Проверить конфиги и service.json |

Примеры

ocpm run unity
ocpm run unity -- --model provider/model
ocpm run unity -- run "почини тесты"

ocpm exec unity -- opencode plugin add @scope/plugin
ocpm exec unity -- opencode debug config

eval "$(ocpm env unity)"
opencode

ocpm run передаёт всё после имени профиля в OpenCode. ocpm exec требует -- перед командой.

Где лежат профили

По умолчанию:

~/.config/opencode/profiles/<name>

То есть внутри глобального каталога OpenCode. Профили можно коммитить в git.

default — сам ~/.config/opencode.

Переопределение путей:

OCPM_BASE_DIR=/path/to/opencode-config
OCPM_PROFILES_DIR=/path/to/profiles
OCPM_OPENCODE_BIN=/path/to/opencode

Или флагами до подкоманды:

ocpm --base-dir /path/to/config --profiles-dir /path/to/profiles list

Что копируется

При ocpm create копируется всё, кроме:

  • .git/, .log/, .opencode/ (состояние board);
  • profiles/ (чтобы не было рекурсии);
  • service.json (в профиль пишется {"disabled":true});
  • .env, .env.*, .credentials*;
  • .npmrc, .netrc, .git-credentials, .pypirc, auth.json;
  • node_modules/, sessions/, storages/, logs/, cache/, tmp/;
  • *.log, .DS_Store, Thumbs.db, chrome-devtools-profile/.

Копирование атомарное: профиль собирается во временном каталоге и переименовывается только после успеха.

Скопированный .gitignore игнорирует service.json, поэтому в git он не попадёт; ocpm run создаст его заново.

Сервис и данные

  • У профиля свой service.json с disabled: true → приватный сервер.
  • Глобальный ~/.config/opencode/service.json не читается и не изменяется.
  • Auth и сессии общие: ~/.local/share/opencode/auth.json, opencode.db.
  • Если в профиле уже есть service.json без disabled, ocpm run добавит --standalone и предупредит.
  • Если ocpm run запущен изнутри ~/.config/opencode, ставится OPENCODE_DISABLE_PROJECT_CONFIG=1, чтобы глобальный opencode.json не подхватился ещё и как проектный и не перекрыл профиль.
  • Блок env из service.json профиля попадает в окружение ocpm run, ocpm exec, ocpm shell и ocpm env. Переносятся только строки с корректными именами переменных; XDG_STATE_HOME пропускается, как и в самом OpenCode. Это единственный способ включить OPENCODE_DISABLE_PROJECT_CONFIG для профиля.
  • Для default env из общего service.json применяет сам общий сервис при старте, а не клиент. После правки файла выполните opencode service restart.
  • ocpm env, выполненный изнутри каталога конфигурации, оставляет OPENCODE_DISABLE_PROJECT_CONFIG=1 в текущей оболочке. Если потом перейти в проект со своим opencode.json, выполните unset OPENCODE_DISABLE_PROJECT_CONFIG или eval "$(ocpm env default)".

Ограничения

  • Профили — независимые копии. Изменения в default не попадают в них автоматически.
  • service.json в профиле отключает remote-доступ и пароль. Если нужен remote — настройте его отдельно в профиле.
  • profiles/ не синхронизируется с базой; для обновления создайте профиль заново или скопируйте нужные файлы вручную.
  • ocpm не управляет git и не коммитит профили.

Windows

  • Пути определяются через opencode debug paths, с fallback на ~/.config/opencode.
  • Запуск идёт через cross-spawn, поэтому находится opencode.cmd.
  • ocpm shell использует %COMSPEC% или $SHELL.
  • ocpm env поддерживает PowerShell.

Разработка

npm install
npm run build
npm test
npm run typecheck

Тесты используют временные каталоги и фейковый opencode, реальный конфиг не изменяется.