|
43 | 43 | ("docs", "docs: add docs/TROUBLESHOOTING.md common install/ runtime errors", "docs/TROUBLESHOOTING.md", "# Troubleshooting\n\n## Install fails with 'linker not found'\n\nInstall a C linker:\n- Ubuntu: `sudo apt install build-essential`\n- macOS: `xcode-select --install`\n- Windows: install Visual Studio Build Tools\n\n## 'cargo: command not found' after install\n\nRestart shell or `source ~/.cargo/env`.\n\n## LLM connection timeout\n\nCheck `endpoint` in config. If behind proxy, set `HTTPS_PROXY`.\n\n## Permission denied on ~/.atomcode\n\n`chmod -R u+rwX ~/.atomcode` (Unix) or run shell as current user (Windows).\n"), |
44 | 44 | ("feat", "feat: add examples/anthropic-claude.toml Anthropic provider config", "examples/anthropic-claude.toml", "# Example: connect atomcode to Anthropic Claude\n[llm]\nprovider = \"anthropic\"\nendpoint = \"https://api.anthropic.com\"\nmodel = \"claude-sonnet-4-5\"\ntemperature = 0.2\nmax_tokens = 8192\n\n[agent]\ntools = [\"edit_file\", \"run_command\", \"read_file\", \"write_file\"]\nverify = \"cargo build --release\"\n"), |
45 | 45 | ("docs", "docs: add docs/PLUGIN-DEVELOPMENT.md v0.2 plugin API preview", "docs/PLUGIN-DEVELOPMENT.md", "# Plugin Development (v0.2 preview)\n\n## Plugin Manifest\n\n```toml\n[plugin]\nname = \"my-plugin\"\nversion = \"0.1.0\"\nentry = \"plugins/my-plugin/main.rs\"\nhooks = [\"pre-tool\", \"post-tool\"]\n```\n\n## Hook Lifecycle\n\n1. `pre-tool`: called before each tool dispatch, can veto\n2. `post-tool`: called after, can transform result\n\n## Stability\n\nPlugin API is unstable until v0.2.0 GA. Pin exact versions.\n"), |
| 46 | + # === 第四批 20 条真改进(idx 30-49)扩池到 50 条 (2026-08-15) === |
| 47 | + ("feat", "feat: add .github/workflows/release.yml automated release pipeline", ".github/workflows/release.yml", "name: Release\non:\n push:\n tags: ['v*']\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: softprops/action-gh-release@v2\n with:\n generate_release_notes: true\n"), |
| 48 | + ("docs", "docs: add docs/CONFIG-reference.md complete config key reference", "docs/CONFIG-reference.md", "# Configuration Reference\n\n## [llm]\n| Key | Type | Default | Description |\n|---|---|---|---|\n| provider | string | anthropic | LLM provider |\n| endpoint | string | provider default | API endpoint |\n| model | string | claude-sonnet-4-5 | Model ID |\n| temperature | float | 0.2 | Sampling temp |\n| max_tokens | int | 8192 | Max output tokens |\n\n## [agent]\n| Key | Type | Default | Description |\n|---|---|---|---|\n| tools | list | [edit_file,run_command] | Enabled tools |\n| verify | string | cargo build | Verification command |\n"), |
| 49 | + ("feat", "feat: add scripts/setup-hooks.sh install pre-commit hooks", "scripts/setup-hooks.sh", "#!/usr/bin/env bash\nset -euo pipefail\necho 'Installing atomcode pre-commit hooks...'\ncat > .git/hooks/pre-commit <<'HOOK'\n#!/usr/bin/env bash\ncargo fmt --all -- --check\nHOOK\nchmod +x .git/hooks/pre-commit\necho 'Hooks installed.'\n"), |
| 50 | + ("docs", "docs: add docs/FAQ.md frequently asked questions", "docs/FAQ.md", "# FAQ\n\n## Is atomcode free?\nYes, MIT licensed. No telemetry, no paid tier.\n\n## Does it work offline?\nYes, with local LLMs via Ollama or any OpenAI-compatible endpoint.\n\n## How is it different from Claude Code?\natomcode is open-source Rust, you own the binary. Same agentic loop, tool dispatch, verify cycle.\n\n## Windows support?\nYes, tested on Windows 10/11. Install via scripts/install.ps1.\n"), |
| 51 | + ("feat", "feat: add examples/mcp-sqlite.json SQLite MCP server config", "examples/mcp-sqlite.json", "{\n \"mcpServers\": {\n \"sqlite\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-sqlite\", \"./db.sqlite\"],\n \"env\": {}\n }\n }\n}\n"), |
| 52 | + ("chore", "chore: add .editorconfig for consistent indent across editors", ".editorconfig", "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\n\n[*.rs]\nindent_style = space\nindent_size = 4\n\n[*.{yml,yaml,toml,json}]\nindent_style = space\nindent_size = 2\n\n[*.md]\ntrim_trailing_whitespace = true\n"), |
| 53 | + ("docs", "docs: add docs/CODING-STYLE.md Rust style guide", "docs/CODING-STYLE.md", "# Coding Style\n\n## Formatting\n- cargo fmt is canonical\n- 4-space indent\n- Max line 100 chars\n\n## Patterns\n- Prefer ? over match for error propagation\n- Use anyhow for app errors, thiserror for library errors\n- Avoid unwrap() in production paths; use expect() with context\n\n## Naming\n- snake_case for fns/vars, PascalCase for types\n- Single-letter lifetimes only in small scopes\n"), |
| 54 | + ("feat", "feat: add scripts/bench-compare.sh compare two releases perf", "scripts/bench-compare.sh", "#!/usr/bin/env bash\nset -euo pipefail\nA=\"${1:?usage: bench-compare.sh vA vB}\"\nB=\"${2:?usage: bench-compare.sh vA vB}\"\necho \"Comparing $A vs $B...\"\nfor v in \"$A\" \"$B\"; do\n git checkout \"$v\" --quiet 2>/dev/null\n cargo build --release 2>&1 | tail -1\n cargo test --release 2>&1 | tail -1\ndone\necho 'Compare complete.'\n"), |
| 55 | + ("docs", "docs: add docs/TELEMETRY.md optional telemetry design", "docs/TELEMETRY.md", "# Telemetry (opt-in, v0.3+)\n\n## Principles\n- Off by default, explicit user consent\n- Local-only until user opts in\n- No PII, no source content\n\n## Metrics planned\n- Tool call count per session\n- Tokens consumed\n- Agent iterations\n- Error rate\n\nAll emitted via OpenTelemetry if user configures exporter.\n"), |
| 56 | + ("feat", "feat: add examples/mcp-fetch.json fetch MCP server config", "examples/mcp-fetch.json", "{\n \"mcpServers\": {\n \"fetch\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-fetch\"],\n \"env\": {}\n }\n }\n}\n"), |
| 57 | + ("docs", "docs: add docs/MIGRATION-v0.2.md v0.1 to v0.2 breaking changes", "docs/MIGRATION-v0.2.md", "# Migrating to v0.2\n\n## Breaking Changes\n\n### Config format\nv0.1 TOML → v0.2 JSON. Run `scripts/migrate-config.sh` to auto-convert.\n\n### Tool names\n`run_command` → `exec`. Update verify scripts.\n\n### Plugin hooks\n`pre-tool`/`post-tool` renamed to `before_exec`/`after_exec`. Update manifests.\n\n## Non-breaking\nExisting Rust API stays. New features additive.\n"), |
| 58 | + ("feat", "feat: add scripts/migrate-config.sh v0.1→v0.2 config converter", "scripts/migrate-config.sh", "#!/usr/bin/env bash\nset -euo pipefail\nSRC=\"${1:?usage: migrate-config.sh old.toml new.json}\"\nDST=\"${2:?usage: migrate-config.sh old.toml new.json}\"\necho \"Converting $SRC → $DST...\"\npython3 -c \"\nimport sys, tomllib, json\ntoml = open('$SRC','rb').read()\ndata = tomllib.loads(toml)\njson.dump(data, open('$DST','w'), indent=2)\nprint('converted')\n\"\n"), |
| 59 | + ("chore", "chore: add .github/ISSUE_TEMPLATE/feature-request.md", ".github/ISSUE_TEMPLATE/feature-request.md", "---\nname: Feature request\nabout: Suggest a feature for atomcode\nlabels: enhancement\n---\n\n**Is your feature request related to a problem?**\nA clear description.\n\n**Proposed solution**\nWhat you'd like to happen.\n\n**Alternatives considered**\nOther approaches.\n"), |
| 60 | + ("docs", "docs: add docs/ARCHITECTURE-deep.md agent loop state machine detail", "docs/ARCHITECTURE-deep.md", "# Architecture Deep Dive\n\n## Agent Loop State Machine\n\n```\n[init] → [plan] → [act] → [verify] → [done]\n ↑ |\n └── retry ──┘\n```\n\n## State Transitions\n\n- init → plan: user prompt received\n- plan → act: plan approved (or auto-approve)\n- act → verify: tool dispatch complete\n- verify → done: verification passed\n- verify → act: verification failed, retry with feedback\n- verify → done: max retries reached, surface to user\n"), |
| 61 | + ("feat", "feat: add examples/openai-gpt.toml OpenAI provider config", "examples/openai-gpt.toml", "# Example: connect atomcode to OpenAI GPT\n[llm]\nprovider = \"openai\"\nendpoint = \"https://api.openai.com\"\nmodel = \"gpt-4o\"\ntemperature = 0.2\nmax_tokens = 8192\n\n[agent]\ntools = [\"edit_file\", \"run_command\", \"read_file\", \"write_file\"]\nverify = \"cargo build --release\"\n"), |
| 62 | + ("docs", "docs: add docs/ACCESSIBILITY.md a11y commitments", "docs/ACCESSIBILITY.md", "# Accessibility\n\n## Commitments\n- CLI output screen-reader friendly (no decorative unicode in --json mode)\n- Web UI targets WCAG 2.1 AA\n- Keyboard-only operation supported\n- High-contrast theme available\n\n## Reporting issues\nOpen an issue labeled 'a11y'. Prioritized by maintainer.\n"), |
| 63 | + ("feat", "feat: add scripts/check-md-links.sh validate docs cross-refs", "scripts/check-md-links.sh", "#!/usr/bin/env bash\nset -euo pipefail\necho 'Checking markdown link targets...'\nfor f in docs/*.md *.md; do\n [ -f \"$f\" ] || continue\n grep -oE '\\[.+\\]\\(([^)]+)\\)' \"$f\" | while IFS= read -r line; do\n target=$(echo \"$line\" | sed 's/.*)\\(//;s/)//')\n [ -e \"$target\" ] || echo \" $f: broken -> $target\"\n done\ndone\necho 'Check complete.'\n"), |
| 64 | + ("docs", "docs: add docs/DEPENDENCIES.md third-party deps + licenses", "docs/DEPENDENCIES.md", "# Dependencies & Licenses\n\n| Crate | Version | License | Purpose |\n|---|---|---|---|\n| tokio | 1.x | MIT | Async runtime |\n| serde | 1.x | MIT | Serialization |\n| reqwest | 0.12 | MIT | HTTP client |\n| ratatui | 0.29 | MIT | TUI rendering |\n| clap | 4.x | MIT | CLI parsing |\n\nAll deps MIT or Apache-2.0 compatible. No GPL/AGPL deps.\n"), |
| 65 | + ("chore", "chore: add .github/pull_request_reviews.md review checklist", ".github/pull_request_reviews.md", "# Review Checklist\n\n## Before approve\n- [ ] CI green (fmt + clippy + test)\n- [ ] No secrets in diff\n- [ ] CHANGELOG entry if user-facing\n- [ ] Docs updated\n- [ ] Breaking changes flagged in PR body\n- [ ] Migration guide if breaking\n\n## Nice to have\n- [ ] Bench numbers if perf-touching\n- [ ] Added test for new feature\n"), |
| 66 | + ("docs", "docs: add docs/RELEASE-CADENCE.md patch/minor/major policy", "docs/RELEASE-CADENCE.md", "# Release Cadence\n\n## Patch (v0.1.x)\n- Bug fixes, docs, chore\n- As needed, no schedule\n\n## Minor (v0.X.0)\n- New features, no breaking changes\n- Monthly target\n\n## Major (vX.0.0)\n- Breaking changes allowed\n- When accumulated minors warrant\n\n## Support window\n- Latest minor: active maintenance\n- Prior minor: security fixes only\n- Major-1: no support\n"), |
46 | 67 | ] |
47 | 68 |
|
48 | 69 | def git(*a, **kw): return subprocess.run(["git"]+list(a), capture_output=True, text=True, **kw) |
|
0 commit comments