publish
Publish all trickle packages (npm, PyPI, VSCode extension). Use when the user asks to publish, release, bump versions, or push packages to registries.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Publish all trickle packages (npm, PyPI, VSCode extension). Use when the user asks to publish, release, bump versions, or push packages to registries.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Create a new Claude Code skill. Use when the user wants to create, scaffold, build, or set up a new skill, custom slash command, or reusable instruction for Claude Code. Also use when someone says "make a skill", "I keep repeating myself to Claude", or "teach Claude how to do X".
Dogfood trickle by creating real demo projects, running trickle on them, finding bugs and UX issues, then fixing and publishing them. Use when asked to test trickle, dogfood, find bugs, try trickle on a real project, or improve trickle's developer experience. Also use when someone says "test trickle on react", "try trickle with python", "dogfood ML workflow", etc.
Switch trickle packages between local symlinked development versions and published registry versions. Use when the user asks to switch to local/dev/symlinked, switch to published/production/registry, or test with published packages.
| name | publish |
| description | Publish all trickle packages (npm, PyPI, VSCode extension). Use when the user asks to publish, release, bump versions, or push packages to registries. |
| argument-hint | [version-bump: patch|minor|major] |
Publishes all packages in the trickle monorepo. Default bump is patch.
| Package | Registry | Name | Location |
|---|---|---|---|
| JS Client | npm | trickle-observe | packages/client-js |
| CLI | npm | trickle-cli | packages/cli |
| Backend | npm | trickle-backend | packages/backend |
| Python Client | PyPI | trickle-observe | packages/client-python |
| VSCode Extension | VS Marketplace | yiheinchai.trickle-vscode | packages/vscode-extension |
All auth tokens are in .env at the repo root:
NPM_ACCESS_TOKEN — npm publish tokenPYPI_TOKEN — PyPI API token (username is __token__)VSCODE_PAT — VS Code Marketplace Personal Access TokenRead .env at the start to get these values.
Determine the bump type from the argument (default: patch).
npm packages (JS client, CLI, backend, VSCode extension):
cd packages/client-js && npm version <bump> --no-git-tag-version
cd packages/cli && npm version <bump> --no-git-tag-version
cd packages/backend && npm version <bump> --no-git-tag-version
cd packages/vscode-extension && npm version <bump> --no-git-tag-version
Python — edit packages/client-python/pyproject.toml and update the version field.
Run all builds in parallel:
cd packages/client-js && npm run build
cd packages/cli && npm run build
cd packages/backend && npm run build
cd packages/vscode-extension && npm run build
cd packages/client-python && rm -rf dist/ && python3 -m build
Note: Use python3 -m build (anaconda python at /Users/yiheinchai/anaconda3/bin/python3). If build module is missing, install with python3 -m pip install build.
IMPORTANT: npm requires auth. Write the token to ~/.npmrc temporarily:
echo "//registry.npmjs.org/:_authToken=<NPM_ACCESS_TOKEN>" > ~/.npmrc
Then publish each package (can run in parallel):
cd packages/client-js && npm publish
cd packages/cli && npm publish
cd packages/backend && npm publish
Clean up after: rm -f ~/.npmrc
Note: Do NOT use a local .npmrc in the package directory — npm ignores workspace config files. The token MUST be in ~/.npmrc.
Use twine with env vars for auth (no interactive prompt needed):
cd packages/client-python && TWINE_USERNAME=__token__ TWINE_PASSWORD='<PYPI_TOKEN>' twine upload dist/*
If twine is broken (missing rich module etc.), fix with: conda install rich or python3 -m pip install rich twine.
The extension is in a monorepo, so vsce package picks up parent files. Work around this by packaging from an isolated temp directory:
mkdir -p /tmp/trickle-vsce/dist
cp packages/vscode-extension/package.json /tmp/trickle-vsce/
cp packages/vscode-extension/dist/extension.js /tmp/trickle-vsce/dist/
cd /tmp/trickle-vsce && npx @vscode/vsce package --allow-missing-repository
cd /tmp/trickle-vsce && npx @vscode/vsce publish --allow-missing-repository --pat '<VSCODE_PAT>'
Note: Use npx @vscode/vsce (not bare vsce which may not be installed globally).
After publishing, clean up old extension versions and update the local copy so the user sees changes immediately. VSCode keeps old versioned folders around and may load a stale one if multiple exist.
# Remove ALL old versions first
rm -rf ~/.vscode/extensions/yiheinchai.trickle-vscode-*/
# Install fresh from the just-published VSIX
code --install-extension /tmp/trickle-vsce/trickle-vscode-*.vsix --force
If code CLI is not available, manually copy both files:
NEW_VERSION=$(node -p "require('./packages/vscode-extension/package.json').version")
mkdir -p ~/.vscode/extensions/yiheinchai.trickle-vscode-${NEW_VERSION}/dist
cp packages/vscode-extension/package.json ~/.vscode/extensions/yiheinchai.trickle-vscode-${NEW_VERSION}/
cp packages/vscode-extension/dist/extension.js ~/.vscode/extensions/yiheinchai.trickle-vscode-${NEW_VERSION}/dist/
Then tell user to reload VSCode (Cmd+Shift+P -> "Developer: Reload Window").
git add packages/backend/package.json packages/cli/package.json packages/client-js/package.json packages/client-python/pyproject.toml packages/vscode-extension/package.json package-lock.json
git commit -m "Bump versions for publish: <list versions>"
git push
.env for all auth tokens — never hardcode them~/.npmrc (not package-level .npmrc) — clean up after publishtrickle-observe (not trickle, which is taken by someone else)yiheinchaipython3 from anaconda (/Users/yiheinchai/anaconda3/bin/python3, Python 3.11)npx @vscode/vsce instead of bare vsce