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
13 changes: 8 additions & 5 deletions .devcontainer/devcontainer.json
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@
"remoteUser": "nonroot",
"updateRemoteUserUID": true,
"mounts": [
// Keep shared Git config simple by default.
// If you need SSH keys, plain-text helpers, or custom ~/.ssh files, add those mounts explicitly.
"source=${localEnv:HOME}/.gitconfig,target=/home/nonroot/.gitconfig,type=bind,consistency=cached",
// optional if you use the plain text helper:
"source=${localEnv:HOME}/.git-credentials,target=/home/nonroot/.git-credentials,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ssh,target=/home/nonroot/.ssh,type=bind,consistency=cached"
"source=${localEnv:SSH_AUTH_SOCK},target=/ssh-agent,type=bind"
],
"remoteEnv": {
"SSH_AUTH_SOCK": "/ssh-agent"
},
// install pre-commit hooks
"postCreateCommand": "pre-commit install --install-hooks",
"features": {
Expand Down Expand Up @@ -72,9 +75,9 @@
"DavidAnson.vscode-markdownlint",
"GitHub.copilot-chat",
"GitHub.vscode-pull-request-github",
"meta.pyrefly",
"ms-azuretools.vscode-docker",
"ms-python.python",
"ms-python.mypy-type-checker",
"ms-python.debugpy",
"ms-toolsai.jupyter",
"ms-toolsai.jupyter-keymap",
Expand All @@ -83,7 +86,7 @@
"redhat.vscode-yaml",
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-danish",
"tamasfe.even-better-toml"
"tamasfe.even-better-toml",
]
}
}
Expand Down
22 changes: 22 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"mcpServers": {
"upstash/context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "${input:context7_api_key}"
},
"gallery": "https://api.mcp.github.com/2025-09-15/v0/servers/dcec7705-b81b-4e0f-8615-8032604be7ad",
"version": "1.0.0"
},
"microsoft/markitdown": {
"type": "stdio",
"command": "uvx",
"args": [
"markitdown-mcp==0.0.1a4"
],
"gallery": "https://api.mcp.github.com/2025-09-15/v0/servers/976a2f68-e16c-4e2b-9709-7133487f8c14",
"version": "1.0.0"
}
}
}
15 changes: 9 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,22 @@ repos:
- id: mixed-line-ending
args: [--fix=lf]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.4
rev: v0.15.9
hooks:
- id: ruff
- id: ruff-check
args: [--fix]
types_or: [python, pyi, jupyter]
- id: ruff-format
types_or: [python, pyi, jupyter]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.19.1"
- repo: https://github.com/facebook/pyrefly-pre-commit
rev: "0.61.0"
hooks:
- id: mypy
- id: pyrefly-check
name: Pyrefly (type checking)
pass_filenames: false
language: system
- repo: https://github.com/codespell-project/codespell
rev: v2.4.1
rev: v2.4.2
hooks:
- id: codespell
additional_dependencies: [tomli]
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 Philipp Schmalen
Copyright (c) The project contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,32 @@ code .
- want to ignore files that are specific to *you* without using `.gitignore`? Add them to `.git/info/exclude`


## Git authentication in the dev container

SSH agent forwarding is used to authenticate with GitHub inside the container. VS Code dev containers forward the host's SSH agent automatically, so the fix is almost always just loading your key into the agent on the WSL host before opening the container.

```bash
# 1. Test inside the dev container — does it already work?
ssh -T git@github.com
# ✅ Works: Hi <your-github-username>! You've successfully authenticated...
# ❌ Broken: git@github.com: Permission denied (publickey).

# If broken, fix it from your WSL terminal on the host:

# 2. Load your SSH key into the agent (WSL host, not inside the container)
eval "$(ssh-agent -s)" # start the agent if not already running
ssh-add -l # list loaded keys — if your key is here, skip the next line
ssh-add ~/.ssh/id_ed25519 # load your key (adjust the filename if yours differs)

# 3. Make sure the repo remote uses SSH, not HTTPS
git remote -v # should show: origin git@github.com:OWNER/REPO.git
# git remote set-url origin git@github.com:OWNER/REPO.git # run this if it shows https://

# 4. Rebuild / reopen the dev container, then retest
ssh -T git@github.com
```


## Azure CLI setup

Want to use an already authenticated `az cli` from the host?
Expand Down
1 change: 0 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ services:
dockerfile: Dockerfile
# uncomment if using .env for config/secrets
# env_file: .env
platform: linux/amd64
container_name: "${COMPOSE_PROJECT_NAME}"
hostname: app
volumes:
Expand Down
13 changes: 7 additions & 6 deletions pyproject.toml
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@ build-backend = "uv_build"
[tool.ruff]
fix = true

[tool.mypy]
warn_return_any = false
warn_unused_configs = true
disallow_untyped_defs = false
ignore_missing_imports = false
[tool.pyrefly]
project-includes = ["src", "tests"]
check-unannotated-defs = true
strict-callable-subtyping = true
infer-return-types = "annotated"
min-severity = "warn"

[dependency-groups]
dev = [
"ruff",
"pre-commit",
"mypy",
"pyrefly",
"debugpy>=1.8.13",
"pytest>=8.3.5",
"pytest-cov",
Expand Down
Loading