opensrc

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Source Code Fetching with opensrc

使用 opensrc 拉取源代码

Fetches dependency source code so agents can read implementations, not just types. Clones repositories at the correct version tag and caches them globally at
~/.opensrc/
.
拉取依赖源代码,让Agent可以读取实现逻辑,而不仅仅是类型定义。会克隆对应版本标签的仓库,并全局缓存到
~/.opensrc/
路径下。

Core Pattern

核心使用模式

bash
rg "parse" $(opensrc path zod)
cat $(opensrc path zod)/src/types.ts
find $(opensrc path zod) -name "*.test.ts"
opensrc path <pkg>
prints the absolute path to cached source. If not cached, it fetches automatically. Progress goes to stderr, path to stdout, so
$(opensrc path ...)
works in subshells.
bash
rg "parse" $(opensrc path zod)
cat $(opensrc path zod)/src/types.ts
find $(opensrc path zod) -name "*.test.ts"
opensrc path <pkg>
会输出缓存源代码的绝对路径。如果尚未缓存,会自动拉取。进度信息输出到stderr,路径输出到stdout,因此
$(opensrc path ...)
可以在子shell中正常使用。

Fetching Source Code

拉取源代码

bash
opensrc path zod
opensrc path pypi:requests
opensrc path crates:serde
opensrc path facebook/react
bash
opensrc path zod
opensrc path pypi:requests
opensrc path crates:serde
opensrc path facebook/react

Multiple packages at once

同时拉取多个包

opensrc path zod react next opensrc path pypi:requests pypi:flask opensrc path crates:serde crates:tokio
opensrc path zod react next opensrc path pypi:requests pypi:flask opensrc path crates:serde crates:tokio

Specific versions

指定版本

opensrc path zod@3.22.0 opensrc path pypi:flask@3.0.0 opensrc path owner/repo@v1.0.0 opensrc path owner/repo#main
undefined
opensrc path zod@3.22.0 opensrc path pypi:flask@3.0.0 opensrc path owner/repo@v1.0.0 opensrc path owner/repo#main
undefined

Version Resolution

版本解析

For npm packages, opensrc auto-detects the installed version from lockfiles (
package-lock.json
,
pnpm-lock.yaml
,
yarn.lock
). Use
--cwd
to resolve from a different project:
bash
opensrc path zod --cwd /path/to/project
For PyPI and crates.io, explicit versions or latest are used. For repos, use
@ref
or
#ref
to pin a branch, tag, or commit.
对于npm包,opensrc会自动从锁文件(
package-lock.json
pnpm-lock.yaml
yarn.lock
)中检测已安装的版本。可以使用
--cwd
从其他项目路径解析版本:
bash
opensrc path zod --cwd /path/to/project
对于PyPI和crates.io包,默认使用指定版本或最新版本。对于Git仓库,可以使用
@ref
#ref
绑定分支、标签或 commit 哈希。

Managing the Cache

缓存管理

Source is cached globally at
~/.opensrc/
(override with
OPENSRC_HOME
).
bash
opensrc list                     # show all cached sources
opensrc list --json              # JSON output

opensrc remove zod               # remove a package
opensrc remove facebook/react    # remove a repo

opensrc clean                    # remove everything
opensrc clean --npm              # only npm packages
opensrc clean --pypi             # only PyPI packages
opensrc clean --crates           # only crates.io packages
opensrc clean --packages         # all packages, keep repos
opensrc clean --repos            # all repos, keep packages
源代码全局缓存到
~/.opensrc/
路径下(可以通过
OPENSRC_HOME
环境变量自定义路径)。
bash
opensrc list                     # 查看所有已缓存的源代码
opensrc list --json              # 以JSON格式输出

opensrc remove zod               # 删除指定包的缓存
opensrc remove facebook/react    # 删除指定仓库的缓存

opensrc clean                    # 清空所有缓存
opensrc clean --npm              # 仅清空npm包缓存
opensrc clean --pypi             # 仅清空PyPI包缓存
opensrc clean --crates           # 仅清空crates.io包缓存
opensrc clean --packages         # 清空所有包缓存,保留仓库缓存
opensrc clean --repos            # 清空所有仓库缓存,保留包缓存

When to Fetch Source

适用场景

Fetch source when you need to:
  • Understand internal behavior that types don't reveal
  • Debug unexpected library behavior
  • Learn patterns from well-known implementations
  • Verify how a function handles edge cases
Don't fetch source for simple API usage questions that docs or types can answer.
当你需要做以下操作时可以拉取源代码:
  • 理解类型定义无法体现的内部行为
  • 调试不符合预期的库行为
  • 学习知名开源项目的实现模式
  • 验证函数处理边界情况的逻辑
对于可以通过文档或类型定义解答的简单API使用问题,不需要拉取源代码。