Skip to content
Open
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
11 changes: 5 additions & 6 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
"owner": {
"name": "Raintree Technology",
"email": "support@raintree.technology",
"url": "https://raintree.technology"
"url": "https://github.com/raintree-technology/docpull"
},
"plugins": [
{
"name": "docpull",
"source": "./plugin",
"description": "Pull docs from any URL into Claude Code. Local, fast, no API keys.",
"version": "0.2.0",
"description": "Pull server-rendered web content from any URL into Claude Code. Local, fast, no API keys.",
"version": "4.0.0",
"author": {
"name": "Raintree Technology",
"email": "support@raintree.technology"
Expand All @@ -20,11 +20,10 @@
"license": "MIT",
"category": "documentation",
"keywords": [
"documentation",
"docs",
"web",
"crawler",
"fetch",
"markdown",
"rag",
"indexing",
"mcp",
"local-first"
Expand Down
9 changes: 9 additions & 0 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"mcpServers": {
"docpull": {
"type": "stdio",
"command": "docpull",
"args": ["mcp"]
}
}
}
25 changes: 25 additions & 0 deletions .cursor/rules/docpull-research.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
description: Use docpull MCP tools to ground library, framework, SDK, API, docs-backed tooling, or pasted-docs questions in fetched documentation.
alwaysApply: false
---

# docpull research

Use docpull MCP tools when the user asks about a specific library, framework, SDK, API surface, docs-backed tool ecosystem, version-sensitive behavior, or pasted documentation URL.

## Workflow

1. Check cached sources with `mcp__docpull__list_indexed`.
2. If the requested library is cached, search it with `mcp__docpull__grep_docs`.
3. Use `mcp__docpull__read_doc` for line-level follow-up context.
4. If the library is not cached:
- use `mcp__docpull__ensure_docs` for a built-in alias
- use `mcp__docpull__fetch_url` for one pasted page
- otherwise ask once for the docs URL
5. Answer with attribution to the fetched source.

For Vercel skills, `skills.sh`, `npx skills`, agent skill installation, or `SKILL.md` questions, treat the docs as version-sensitive. Search cached docs first for exact commands and flags such as `skills add`, `--agent`, `--skill`, `--copy`, `--yes`, `skills use`, `skills list`, `skills find`, `skills update`, and `skills remove`. If no cached source exists, use a pasted skills.sh URL with `mcp__docpull__fetch_url`; otherwise prefer `https://www.skills.sh/docs` for quick one-page answers and the official Vercel Labs Skills README for CLI option details.

Do not use docpull for general programming explanations, the user's own codebase, or stable standard-library APIs.

Built-in aliases include `react`, `nextjs`, `tailwindcss`, `vite`, `hono`, `fastapi`, `express`, `anthropic`, `openai`, `langchain`, `supabase`, `drizzle`, and `prisma`.
6 changes: 4 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ trim_trailing_whitespace = true
[*.{py,pyi}]
indent_style = space
indent_size = 4
max_line_length = 110

[*.{yml,yaml}]
indent_style = space
Expand All @@ -22,9 +21,12 @@ indent_size = 2
indent_style = space
indent_size = 2

[*.{js,cjs,mjs,ts,tsx}]
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false
max_line_length = off

[Makefile]
indent_style = tab
23 changes: 3 additions & 20 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,24 +1,6 @@
# Auto detect text files and normalize line endings to LF
* text=auto eol=lf

# Source files
*.py text eol=lf
*.pyi text eol=lf

# Configuration files
*.toml text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.json text eol=lf
*.txt text eol=lf
*.md text eol=lf
*.rst text eol=lf

# Scripts
*.sh text eol=lf
*.bash text eol=lf
Makefile text eol=lf

# Windows-specific files
*.bat text eol=crlf
*.cmd text eol=crlf
Expand All @@ -42,14 +24,15 @@ Makefile text eol=lf
*.gz binary
*.bz2 binary

# Exclude from exports (for git archive / PyPI sdist)
# Exclude from git archives
.gitattributes export-ignore
.gitignore export-ignore
.claude-plugin/ export-ignore
.github/ export-ignore
.pre-commit-config.yaml export-ignore
.editorconfig export-ignore
Makefile export-ignore
CONTRIBUTING.md export-ignore
.github/CONTRIBUTING.md export-ignore
tests/ export-ignore
test*.py export-ignore
.venv/ export-ignore
Expand Down
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
/src/docpull/ @raintree-technology
/mcp/ @raintree-technology
/web/ @raintree-technology
/security/ @raintree-technology
/src/docpull/security/ @raintree-technology

# Documentation
*.md @raintree-technology
Expand Down
9 changes: 6 additions & 3 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
git clone https://github.com/YOUR_USERNAME/docpull.git
cd docpull
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pip install -e ".[all,dev]"
pre-commit install
```

Expand All @@ -15,7 +15,9 @@ pre-commit install
```bash
git checkout -b feature/your-feature
# Make changes, add tests
make test && make lint
make pre-commit-check
make typecheck
make test
git commit -m "feat: description" # Use conventional commits
git push origin feature/your-feature
# Open PR on GitHub
Expand All @@ -25,7 +27,8 @@ git push origin feature/your-feature

- Type hints required
- Tests required for new features
- Pre-commit hooks enforce formatting (Black, Ruff)
- Pre-commit hooks enforce formatting and linting (Ruff) plus type checks (mypy)
- If you touch `web/` or `mcp/`, run that workspace's own install/test/build commands too

## Commit Types

Expand Down
35 changes: 35 additions & 0 deletions .github/actions/setup-python-docpull/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Setup Python for docpull
description: Set up Python, optionally enable pip cache, and install docpull extras.
inputs:
python-version:
description: Python version to install.
required: true
dependency-groups:
description: Extras expression to install, e.g. all,dev or dev.
required: true
enable-cache:
description: Whether to enable actions/setup-python pip caching.
required: false
default: "false"
runs:
using: composite
steps:
- name: Set up Python
if: inputs.enable-cache != 'true'
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
with:
python-version: ${{ inputs.python-version }}

- name: Set up Python with pip cache
if: inputs.enable-cache == 'true'
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
with:
python-version: ${{ inputs.python-version }}
cache: pip
cache-dependency-path: pyproject.toml

- name: Install Python dependencies
shell: bash
run: |
python -m pip install --upgrade pip
pip install -e ".[${{ inputs.dependency-groups }}]"
20 changes: 15 additions & 5 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,25 @@ tests:

dependencies:
- 'pyproject.toml'
- 'requirements.txt'
- 'requirements*.txt'
- 'web/package.json'
- 'web/package-lock.json'
- 'mcp/package.json'
- 'mcp/bun.lock'

ci-cd:
- '.github/workflows/**/*'
- '.github/**/*'
- '.github/actions/**/*'

fetchers:
- 'docpull/fetchers/**/*'
- 'src/docpull/core/fetcher.py'
- 'src/docpull/discovery/_fetch.py'
- 'src/docpull/http/**/*'
- 'src/docpull/pipeline/steps/fetch.py'

core:
- 'docpull/**/*.py'
- '!docpull/fetchers/**/*'
- 'src/docpull/**/*.py'
- '!src/docpull/core/fetcher.py'
- '!src/docpull/discovery/_fetch.py'
- '!src/docpull/http/**/*'
- '!src/docpull/pipeline/steps/fetch.py'
Loading
Loading