codervisor-forge by codervisor/forge
npx skills add https://github.com/codervisor/forge --skill codervisor-forge用于 Rust+Node.js 混合项目的完整工具包——从脚手架搭建到发布。
| 领域 | 功能 |
|---|---|
| Bootstrap | 使用 CI、发布和版本管理基础设施搭建新项目 |
| CI/CD | 用于构建、测试和跨平台编译的 GitHub Actions 工作流 |
| Publishing | 通过 npm 平台包(optionalDependencies 模式)分发 Rust 二进制文件 |
| Versioning | 在 monorepo 中协调 Node.js 和 Rust 包的版本 |
当满足以下任一条件时激活:
Cargo.toml 和 package.json 的仓库中处理 广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
.github/workflows/Cargo.toml 的版本workspace:* 协议*publish*、*platform*、*version* 或 *sync* 的脚本What does the user need?
Starting a new project or scaffolding?
→ Bootstrap section below
→ Full tree: references/project-structure.md
→ Verify: references/checklist.md
Setting up or fixing CI?
→ CI/CD section below
→ Workflow templates: templates/workflows/
Publishing Rust binaries to npm?
→ Publishing section below
→ Pipeline details: references/publish-pipeline.md
→ Platform config: references/platform-matrix.md
Managing versions?
→ Versioning section below
→ Strategy: references/version-strategy.md
→ Workspace protocol: references/workspace-protocol.md
Debugging a failure?
→ references/troubleshooting.md
使用所有 forge 基础设施搭建一个新的 Rust+Node.js 混合项目。
| 字段 | 示例 | 必需 |
|---|---|---|
| 项目名称 | my-tool | 是 |
| npm 作用域 | @myorg | 是 |
| Rust 二进制文件名 | my-cli | 是 |
| Cargo 包名 | my-cli-rs | 是 |
| 主要 npm 包 | packages/cli | 是 |
| 仓库 URL | github.com/myorg/my-tool | 是 |
| 平台 | darwin-x64, darwin-arm64, linux-x64, windows-x64 | 否(默认:全部 4 个) |
完整的带注释的目录树请参阅 references/project-structure.md。
my-tool/
├── .github/workflows/ ← CI + 发布工作流
├── .lean-spec/config.json ← LeanSpec 配置
├── specs/ ← 规范驱动开发
├── packages/cli/ ← 主要 npm 包(精简的 JS 包装器)
│ ├── package.json ← bin + optionalDependencies
│ └── bin.js ← 解析平台二进制文件并启动它
├── rust/ ← Rust 工作区
├── scripts/ ← 发布和版本管理脚本
├── publish.config.ts ← 发布管道配置
├── package.json ← 根目录(版本唯一来源)
├── pnpm-workspace.yaml ← pnpm 工作区定义
└── Cargo.toml ← Rust 工作区清单
package.json、pnpm-workspace.yaml、Cargo.toml、turbo.json 使用 templates/bootstrap/ 中的模板。publish.config.ts(驱动脚本生成)bin.js + package.json,填入作用域/二进制文件名/平台.lean-spec/config.json 和 specs/pnpm install && pnpm build && cargo check --workspace && pnpm tsx scripts/sync-versions.ts
完整的引导后检查清单请参阅 references/checklist.md。
搭建完成后,安装用于规范驱动开发的配套技能:
npx skills add codervisor/lean-spec@leanspec-sdd -g -y
Starting from scratch?
YES → Full scaffold (all steps above)
NO → Incremental setup ↓
Has package.json? → NO: Create root package.json + pnpm-workspace.yaml
Has Cargo.toml? → NO: Create Cargo workspace
Has .github/workflows? → NO: Generate from templates/workflows/
Has scripts/? → NO: Copy from templates/scripts/
Has specs/? → NO: Initialize LeanSpec
使用 GitHub Actions 为 Rust+Node.js 混合仓库提供双轨 CI。
┌─────────────┐ ┌──────────────────┐
│ Node Build │ │ Rust Build │
│ (test/lint) │ │ (per platform) │
└──────┬──────┘ └────────┬─────────┘
│ │
│ ┌─────────────┐ │
└──►│ Artifacts │◄──┘
└──────┬──────┘
│
┌──────▼──────┐
│ Publish │
└─────────────┘
| 工作流 | 触发条件 | 功能 |
|---|---|---|
ci.yml | PR、推送到 main | Node 构建+测试+lint,Rust fmt+clippy+测试 |
publish.yml | 发布、dispatch | 交叉构建 → 发布到 npm |
copilot-setup-steps.yml | repository_dispatch | Copilot 代理入门 |
Node 作业:
steps:
- uses: codervisor/forge/actions/setup-workspace@v1
- run: pnpm build
- run: pnpm test
- run: pnpm typecheck
Rust 作业:
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- run: cargo fmt --all -- --check
- run: cargo clippy --workspace -- -D warnings
- run: cargo test --workspace
actions/setup-node@v4 配合 cache: 'pnpm'Swatinem/rust-cache@v2actions/cache@v4 作用于 .turbo 路径| Action | 用途 |
|---|---|
codervisor/forge/actions/setup-workspace@v1 | pnpm + Node.js 设置 |
codervisor/forge/actions/rust-cross-build@v1 | 跨平台 Rust 编译 |
codervisor/forge/actions/compute-version@v1 | 开发/发布版本计算 |
codervisor/forge/actions/wait-npm-propagation@v1 | 等待 npm 注册表传播 |
strategy:
matrix:
include:
- { os: macos-latest, target: x86_64-apple-darwin, platform: darwin-x64 }
- { os: macos-latest, target: aarch64-apple-darwin, platform: darwin-arm64 }
- { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu, platform: linux-x64 }
- { os: windows-latest, target: x86_64-pc-windows-msvc, platform: windows-x64 }
# 从构建作业上传
- uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.platform }}
path: target/${{ matrix.target }}/release/my-cli${{ matrix.platform == 'windows-x64' && '.exe' || '' }}
# 在发布作业中下载
- uses: actions/download-artifact@v4
with:
pattern: binary-*
path: artifacts/
merge-multiple: false
使用 optionalDependencies 平台包模式(与 SWC、Turbopack 等工具采用的方法相同)通过 npm 分发 Rust 二进制文件。
@scope/my-tool ← 主包(精简的 JS 包装器 + bin.js)
├── optionalDependencies:
│ ├── @scope/my-tool-darwin-arm64 ← macOS ARM (M 系列)
│ ├── @scope/my-tool-darwin-x64 ← macOS Intel
│ ├── @scope/my-tool-linux-x64 ← Linux x86_64
│ └── @scope/my-tool-windows-x64 ← Windows x86_64
每个平台包仅包含该目标的预编译二进制文件。npm 仅安装与用户操作系统/CPU 匹配的那个。
每个仓库提供一个 publish.config.ts(真实配置示例请参阅 examples/):
export default {
scope: '@myorg',
binaries: [{ name: 'my-cli', scope: 'cli', cargoPackage: 'my-cli-rs' }],
platforms: ['darwin-x64', 'darwin-arm64', 'linux-x64', 'windows-x64'],
mainPackages: [{ path: 'packages/cli', name: 'my-cli' }],
cargoWorkspace: 'Cargo.toml',
repositoryUrl: 'https://github.com/myorg/my-project',
};
sync-versions → generate-manifests → add-platform-deps → copy-binaries
→ validate-binaries → prepare-publish → validate-workspace → publish-platforms
→ wait-propagation → publish-main → restore-packages
关键顺序:平台包必须在主包之前发布并传播到 npm,因为主包将它们引用为 optionalDependencies。
分步详情请参阅 references/publish-pipeline.md。
主要的 npm 包是一个精简的 JS 包装器——bin.js 解析正确的平台二进制文件并启动它。模板请参阅 templates/wrapper/。
关键细节:
process.platform 返回 win32(不是 windows),因此映射 win32-x64 → @scope/cli-windows-x64require.resolve('pkg/package.json') 查找平台包,然后读取 main 获取二进制文件名execFileSync 并转发 Rust 二进制文件的退出码os/cpu 字段——它可以在任何地方安装。只有平台包使用这些字段。每个平台包都需要 os 和 cpu 字段以及用于 chmod 的 postinstall.js:
{
"name": "@scope/cli-darwin-arm64",
"os": ["darwin"],
"cpu": ["arm64"],
"main": "my-cli"
}
publish.config.ts 中的 platforms 数组rustup target add <target-triple>pnpm tsx scripts/generate-platform-manifests.ts完整的平台参考请参阅 references/platform-matrix.md。
根目录的 package.json 是版本的唯一来源。一切都由此派生。
root package.json (version: "0.2.15")
├── packages/cli/package.json → 0.2.15
├── packages/sdk/package.json → 0.2.15
├── Cargo.toml → 0.2.15
└── platform-packages/*/package.json → 0.2.15
切勿手动编辑子包或 Cargo.toml 中的版本。始终更新根目录,然后同步。
npm version patch # 提升根版本:0.2.15 → 0.2.16
pnpm tsx scripts/sync-versions.ts # 传播到所有包 + Cargo.toml
对于非发布构建:0.2.15 → 0.2.16-dev.{github_run_id}
-dev.{run_id} 以生成唯一的、确定性的预发布版本--tag dev 在 npm 上发布(npm install my-cli@dev)workspace:*)pnpm 在开发期间使用 workspace:* 处理内部依赖项。在发布到 npm 之前,这些必须替换为实际的版本号:
pnpm tsx scripts/prepare-publish.ts # 替换 workspace:* → 真实版本
pnpm tsx scripts/validate-no-workspace-protocol.ts # 安全检查
npm publish # 发布
pnpm tsx scripts/restore-packages.ts # 恢复 workspace:*
| 变更类型 | 命令 | 示例 |
|---|---|---|
| 破坏性 API 变更 | npm version major | 1.0.0 → 2.0.0 |
| 新功能,向后兼容 | npm version minor | 0.2.0 → 0.3.0 |
| 错误修复 | npm version patch | 0.2.15 → 0.2.16 |
| CI/测试构建 | 自动 | 0.2.15 → 0.2.16-dev.123 |
完整策略请参阅 references/version-strategy.md。协议详情请参阅 references/workspace-protocol.md。
| 平台 | Rust 目标 | OS/CPU 字段 | 二进制文件扩展名 |
|---|---|---|---|
darwin-arm64 | aarch64-apple-darwin | darwin / arm64 | (无) |
darwin-x64 | x86_64-apple-darwin | darwin / x64 | (无) |
linux-x64 | x86_64-unknown-linux-gnu | linux / x64 | (无) |
windows-x64 | x86_64-pc-windows-msvc | win32 / x64 | .exe |
添加新平台和二进制验证请参阅 references/platform-matrix.md。
| 问题 | 可能原因 | 修复方法 |
|---|---|---|
Unsupported platform | bin.js 中缺少平台 | 添加平台键映射 |
| npm 上找不到平台包 | 注册表传播延迟 | 等待;检查发布日志 |
已发布的包中存在 workspace:* | prepare-publish 未运行 | 运行 prepare-publish.ts |
| 二进制文件不可执行 | postinstall 未运行 | chmod +x 二进制文件 |
| 版本不匹配 | 忘记同步 | 运行 sync-versions.ts |
| CI Rust 构建在 ARM 上失败 | 交叉编译问题 | 检查目标和工具链 |
| pnpm lockfile 不匹配 | 本地与 CI 差异 | 本地运行 pnpm install --no-frozen-lockfile |
详细的诊断和修复方法请参阅 references/troubleshooting.md。
| 目录 | 内容 | 使用者 |
|---|---|---|
| templates/bootstrap/ | 根配置(package.json、Cargo.toml 等) | Bootstrap |
| templates/workflows/ | CI、发布、copilot-setup 工作流 YAML 文件 | CI/CD |
| templates/actions/ | 复合 Action 的 README | CI/CD |
| templates/scripts/ | 发布 + 版本管理管道脚本 | Publishing, Versioning |
| templates/wrapper/ | npm CLI 包装器(bin.js + package.json) | Publishing |
| examples/ | 真实世界的 publish.config.ts 示例 | Publishing |
| 参考资料 | 内容 |
|---|---|
| project-structure.md | 完整的项目目录树及目录说明 |
| checklist.md | 引导后验证检查清单 |
| platform-matrix.md | 平台配置、二进制验证、添加目标 |
| publish-pipeline.md | 分步管道说明,包含脚本和环境变量 |
| version-strategy.md | 版本同步、开发构建、npm 标签、Cargo 处理 |
| workspace-protocol.md | workspace:* 生命周期和发布流程 |
| troubleshooting.md | 常见故障、诊断和修复方法 |
通过 forge 安装:
npx skills add codervisor/forge@codervisor-forge -g -y
Cargo.toml 和 package.json.github/workflows/ 目录pnpm-workspace.yamlscripts/*publish* 或 scripts/*platform* 文件每周安装次数
0
仓库
首次出现
1 天前
安全审计
Complete toolkit for Rust+Node.js hybrid projects — from scaffolding to publishing.
| Domain | What It Does |
|---|---|
| Bootstrap | Scaffold a new project with CI, publishing, and versioning infrastructure |
| CI/CD | GitHub Actions workflows for build, test, and cross-platform compilation |
| Publishing | Distribute Rust binaries via npm platform packages (optionalDependencies pattern) |
| Versioning | Coordinated versions across Node.js and Rust packages in a monorepo |
Activate when any of the following are true:
.github/workflows/ in a repo with both Cargo.toml and package.jsonCargo.tomlworkspace:* protocol*publish*, *platform*, *version*, or *sync* existWhat does the user need?
Starting a new project or scaffolding?
→ Bootstrap section below
→ Full tree: references/project-structure.md
→ Verify: references/checklist.md
Setting up or fixing CI?
→ CI/CD section below
→ Workflow templates: templates/workflows/
Publishing Rust binaries to npm?
→ Publishing section below
→ Pipeline details: references/publish-pipeline.md
→ Platform config: references/platform-matrix.md
Managing versions?
→ Versioning section below
→ Strategy: references/version-strategy.md
→ Workspace protocol: references/workspace-protocol.md
Debugging a failure?
→ references/troubleshooting.md
Scaffold a new Rust+Node.js hybrid project with all forge infrastructure.
| Field | Example | Required |
|---|---|---|
| Project name | my-tool | Yes |
| npm scope | @myorg | Yes |
| Rust binary name(s) | my-cli | Yes |
| Cargo package name(s) | my-cli-rs | Yes |
| Main npm packages | packages/cli | Yes |
See references/project-structure.md for the full annotated tree.
my-tool/
├── .github/workflows/ ← CI + publish workflows
├── .lean-spec/config.json ← LeanSpec configuration
├── specs/ ← Spec-driven development
├── packages/cli/ ← Main npm package (thin JS wrapper)
│ ├── package.json ← bin + optionalDependencies
│ └── bin.js ← Resolves platform binary, spawns it
├── rust/ ← Rust workspace
├── scripts/ ← Publish & version scripts
├── publish.config.ts ← Publish pipeline configuration
├── package.json ← Root (version source of truth)
├── pnpm-workspace.yaml ← pnpm workspace definition
└── Cargo.toml ← Rust workspace manifest
package.json, pnpm-workspace.yaml, Cargo.toml, turbo.json Use templates in templates/bootstrap/.publish.config.ts (drives script generation)bin.js + package.json from templates/wrapper/, fill in scope/binary name/platformspnpm install && pnpm build && cargo check --workspace && pnpm tsx scripts/sync-versions.ts
See references/checklist.md for the full post-bootstrap checklist.
After scaffolding, install the companion skill for spec-driven development:
npx skills add codervisor/lean-spec@leanspec-sdd -g -y
Starting from scratch?
YES → Full scaffold (all steps above)
NO → Incremental setup ↓
Has package.json? → NO: Create root package.json + pnpm-workspace.yaml
Has Cargo.toml? → NO: Create Cargo workspace
Has .github/workflows? → NO: Generate from templates/workflows/
Has scripts/? → NO: Copy from templates/scripts/
Has specs/? → NO: Initialize LeanSpec
Two-track CI for Rust+Node.js hybrid repos using GitHub Actions.
┌─────────────┐ ┌──────────────────┐
│ Node Build │ │ Rust Build │
│ (test/lint) │ │ (per platform) │
└──────┬──────┘ └────────┬─────────┘
│ │
│ ┌─────────────┐ │
└──►│ Artifacts │◄──┘
└──────┬──────┘
│
┌──────▼──────┐
│ Publish │
└─────────────┘
| Workflow | Trigger | What It Does |
|---|---|---|
ci.yml | PR, push to main | Node build+test+lint, Rust fmt+clippy+test |
publish.yml | Release, dispatch | Cross-build → publish to npm |
copilot-setup-steps.yml | repository_dispatch | Copilot agent onboarding |
Templates: templates/workflows/
Node job:
steps:
- uses: codervisor/forge/actions/setup-workspace@v1
- run: pnpm build
- run: pnpm test
- run: pnpm typecheck
Rust job:
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- run: cargo fmt --all -- --check
- run: cargo clippy --workspace -- -D warnings
- run: cargo test --workspace
actions/setup-node@v4 with cache: 'pnpm'Swatinem/rust-cache@v2actions/cache@v4 on .turbo path| Action | Purpose |
|---|---|
codervisor/forge/actions/setup-workspace@v1 | pnpm + Node.js setup |
codervisor/forge/actions/rust-cross-build@v1 | Cross-platform Rust compilation |
codervisor/forge/actions/compute-version@v1 | Dev/release version computation |
codervisor/forge/actions/wait-npm-propagation@v1 | Wait for npm registry propagation |
strategy:
matrix:
include:
- { os: macos-latest, target: x86_64-apple-darwin, platform: darwin-x64 }
- { os: macos-latest, target: aarch64-apple-darwin, platform: darwin-arm64 }
- { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu, platform: linux-x64 }
- { os: windows-latest, target: x86_64-pc-windows-msvc, platform: windows-x64 }
# Upload from build job
- uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.platform }}
path: target/${{ matrix.target }}/release/my-cli${{ matrix.platform == 'windows-x64' && '.exe' || '' }}
# Download in publish job
- uses: actions/download-artifact@v4
with:
pattern: binary-*
path: artifacts/
merge-multiple: false
Distribute Rust binaries via npm using the optionalDependencies platform package pattern (same approach used by SWC, Turbopack, and similar tools).
@scope/my-tool ← main package (thin JS wrapper + bin.js)
├── optionalDependencies:
│ ├── @scope/my-tool-darwin-arm64 ← macOS ARM (M-series)
│ ├── @scope/my-tool-darwin-x64 ← macOS Intel
│ ├── @scope/my-tool-linux-x64 ← Linux x86_64
│ └── @scope/my-tool-windows-x64 ← Windows x86_64
Each platform package contains only the pre-compiled binary for that target. npm installs only the one matching the user's OS/CPU.
Each repo provides a publish.config.ts (see examples/ for real configs):
export default {
scope: '@myorg',
binaries: [{ name: 'my-cli', scope: 'cli', cargoPackage: 'my-cli-rs' }],
platforms: ['darwin-x64', 'darwin-arm64', 'linux-x64', 'windows-x64'],
mainPackages: [{ path: 'packages/cli', name: 'my-cli' }],
cargoWorkspace: 'Cargo.toml',
repositoryUrl: 'https://github.com/myorg/my-project',
};
sync-versions → generate-manifests → add-platform-deps → copy-binaries
→ validate-binaries → prepare-publish → validate-workspace → publish-platforms
→ wait-propagation → publish-main → restore-packages
Critical ordering : Platform packages MUST be published and propagated on npm before main packages, because main packages reference them as optionalDependencies.
See references/publish-pipeline.md for step-by-step details.
The main npm package is a thin JS wrapper — bin.js resolves the correct platform binary and spawns it. See templates/wrapper/ for the template.
Key details:
process.platform returns win32 (not windows), so map win32-x64 → @scope/cli-windows-x64require.resolve('pkg/package.json') to find the platform package, then read main for the binary filenameexecFileSync and forward exit codes from the Rust binaryos/cpu fields — it installs everywhere. Only platform packages use those.Each platform package needs os and cpu fields plus a postinstall.js for chmod:
{
"name": "@scope/cli-darwin-arm64",
"os": ["darwin"],
"cpu": ["arm64"],
"main": "my-cli"
}
platforms array in publish.config.tsrustup target add <target-triple>pnpm tsx scripts/generate-platform-manifests.tsSee references/platform-matrix.md for the full platform reference.
Root package.json is the single source of truth for version. Everything derives from it.
root package.json (version: "0.2.15")
├── packages/cli/package.json → 0.2.15
├── packages/sdk/package.json → 0.2.15
├── Cargo.toml → 0.2.15
└── platform-packages/*/package.json → 0.2.15
Never manually edit version in child packages or Cargo.toml. Always update root, then sync.
npm version patch # Bump root: 0.2.15 → 0.2.16
pnpm tsx scripts/sync-versions.ts # Propagate to all packages + Cargo.toml
For non-release builds: 0.2.15 → 0.2.16-dev.{github_run_id}
-dev.{run_id} for unique, deterministic pre-release versions--tag dev on npm (npm install my-cli@dev)workspace:*)pnpm uses workspace:* for internal dependencies during development. These MUST be replaced with actual version numbers before publishing to npm:
pnpm tsx scripts/prepare-publish.ts # Replace workspace:* → real versions
pnpm tsx scripts/validate-no-workspace-protocol.ts # Safety check
npm publish # Publish
pnpm tsx scripts/restore-packages.ts # Restore workspace:*
| Change Type | Command | Example |
|---|---|---|
| Breaking API change | npm version major | 1.0.0 → 2.0.0 |
| New feature, backwards-compat | npm version minor | 0.2.0 → 0.3.0 |
| Bug fix | npm version patch | 0.2.15 → 0.2.16 |
| CI/testing build | Automatic | 0.2.15 → 0.2.16-dev.123 |
See references/version-strategy.md for the full strategy. See references/workspace-protocol.md for protocol details.
| Platform | Rust Target | OS/CPU Fields | Binary Extension |
|---|---|---|---|
darwin-arm64 | aarch64-apple-darwin | darwin / arm64 | (none) |
darwin-x64 | x86_64-apple-darwin | darwin / x64 |
See references/platform-matrix.md for adding new platforms and binary validation.
| Problem | Likely Cause | Fix |
|---|---|---|
Unsupported platform | Missing platform in bin.js | Add platform key mapping |
| Platform pkg not found on npm | Registry propagation delay | Wait; check publish logs |
workspace:* in published pkg | prepare-publish didn't run | Run prepare-publish.ts |
| Binary not executable | postinstall didn't run | chmod +x the binary |
| Version mismatch | Forgot to sync | Run sync-versions.ts |
| CI Rust build fails on ARM | Cross-compilation issue | Check target + toolchain |
See references/troubleshooting.md for detailed diagnostics and fixes.
| Directory | Contents | Used By |
|---|---|---|
| templates/bootstrap/ | Root configs (package.json, Cargo.toml, etc.) | Bootstrap |
| templates/workflows/ | CI, publish, copilot-setup workflow YAMLs | CI/CD |
| templates/actions/ | Composite action READMEs | CI/CD |
| templates/scripts/ | Publish + version pipeline scripts | Publishing, Versioning |
| templates/wrapper/ |
| Reference | What's Inside |
|---|---|
| project-structure.md | Full project tree with directory explanations |
| checklist.md | Post-bootstrap verification checklist |
| platform-matrix.md | Platform config, binary validation, adding targets |
| publish-pipeline.md | Step-by-step pipeline with scripts and env vars |
| version-strategy.md | Version sync, dev builds, npm tags, Cargo handling |
| workspace-protocol.md | workspace:* lifecycle and publish flow |
Install via forge:
npx skills add codervisor/forge@codervisor-forge -g -y
Cargo.toml and package.json present at root.github/workflows/ directory existspnpm-workspace.yaml presentscripts/*publish* or scripts/*platform* files existWeekly Installs
0
Repository
First Seen
1 day ago
Security Audits
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
79,900 周安装
| Repository URL |
github.com/myorg/my-tool |
| Yes |
| Platforms | darwin-x64, darwin-arm64, linux-x64, windows-x64 | No (default: all 4) |
.lean-spec/config.json and specs/| (none) |
linux-x64 | x86_64-unknown-linux-gnu | linux / x64 | (none) |
windows-x64 | x86_64-pc-windows-msvc | win32 / x64 | .exe |
| pnpm lockfile mismatch | Local vs CI divergence | pnpm install --no-frozen-lockfile locally |
npm CLI wrapper (bin.js + package.json) |
| Publishing |
| examples/ | Real-world publish.config.ts examples | Publishing |
| troubleshooting.md | Common failures, diagnostics, and fixes |