comodor 0.20.0__tar.gz → 0.20.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {comodor-0.20.0 → comodor-0.20.2}/PKG-INFO +94 -8
- {comodor-0.20.0 → comodor-0.20.2}/README.md +88 -6
- comodor-0.20.2/bench/README.md +95 -0
- comodor-0.20.2/bench/tasks/careful-unknowable/repo/README.md +11 -0
- comodor-0.20.2/docs/AR/README.md +109 -0
- comodor-0.20.2/docs/DE/README.md +114 -0
- comodor-0.20.2/docs/ES/README.md +113 -0
- comodor-0.20.2/docs/FA/README.md +112 -0
- comodor-0.20.2/docs/FR/README.md +114 -0
- {comodor-0.20.0 → comodor-0.20.2}/docs/README.md +1 -0
- comodor-0.20.2/docs/RU/README.md +113 -0
- comodor-0.20.2/docs/TR/README.md +111 -0
- comodor-0.20.2/docs/ZH/README.md +98 -0
- {comodor-0.20.0 → comodor-0.20.2}/pyproject.toml +19 -3
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/_version.py +2 -2
- comodor-0.20.2/src/comodor/agent/claims.py +90 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/loop.py +120 -8
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/prompts.py +27 -3
- comodor-0.20.2/src/comodor/channels/markdown.py +322 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/cli.py +38 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/config.py +6 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/doctor.py +45 -1
- comodor-0.20.2/src/comodor/providers/profile.py +157 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/bot.py +5 -1
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/bot.py +12 -6
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/keyboard.py +46 -24
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/fs.py +61 -14
- comodor-0.20.2/src/comodor/tools/matching.py +213 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/registry.py +43 -0
- comodor-0.20.2/src/comodor/tools/verify.py +140 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/bot.py +4 -1
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_agent_loop.py +117 -0
- comodor-0.20.2/tests/test_bench.py +735 -0
- comodor-0.20.2/tests/test_claims.py +176 -0
- comodor-0.20.2/tests/test_docker.py +306 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_doctor.py +73 -0
- comodor-0.20.2/tests/test_headless.py +178 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_help.py +68 -5
- comodor-0.20.2/tests/test_markdown.py +310 -0
- comodor-0.20.2/tests/test_matching.py +246 -0
- comodor-0.20.2/tests/test_profile.py +275 -0
- comodor-0.20.2/tests/test_source_hygiene.py +76 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_telegram.py +71 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_tools.py +47 -0
- comodor-0.20.2/tests/test_verify.py +155 -0
- comodor-0.20.0/tests/test_markdown.py +0 -103
- {comodor-0.20.0 → comodor-0.20.2}/.gitignore +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/LICENSE +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/__main__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/acp/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/acp/agent.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/acp/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/acp/jsonrpc.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/context.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/spawn.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/agent/tokens.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/browser/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/browser/cdp.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/browser/launch.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/browser/page.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/catalogue.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/channels/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/channels/daemon.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/channels/unit.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/guard.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/keys.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/overlay.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/png.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/screen.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/desktop/win32.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/events.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/help.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/associations.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/bm25.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/hotindex.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/memory.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/progress.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/reflect.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/rules.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/signals.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/store.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/learning/writer.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/catalogue.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/download.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/models.json +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/provider.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/runtime.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/local/store.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/catalogue.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/http.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/manager.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/mcp/protocol.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/migrate.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/net/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/net/http.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/net/sse.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/net/ws.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/paths.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/anthropic.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/base.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/caching.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/discover.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/fake.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/gateway.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/models.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/oauth.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/openai_compat.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/providers/registry.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/questions.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/safety/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/safety/checkpoints.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/safety/permissions.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/safety/redact.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/session/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/session/search.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/session/store.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/setup.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/catalogue.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/examples.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/loader.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/propose.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/skills/registry.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/api.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/blocks.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/service.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/socket.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/slack/unit.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/api.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/service.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/telegram/unit.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/ask.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/base.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/browse.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/browser.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/computer.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/delegate.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/history.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/mcp.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/overflow.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/search.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/shell.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/skills.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/todo.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/tools/web.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/app.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/banner.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/bidi.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/chooser.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/clipboard.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/console.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/input/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/input/keys.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/input/reader.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/layout.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/markdown.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/screen.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/theme.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/buttons.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/chat.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/history.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/overlay.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/panel.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/progress.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/prompt.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/questions.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/statusbar.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/toast.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/ui/widgets/welcome.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/uninstall.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/update.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/index.html +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/server.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/session.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/ui.css +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/ui.js +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/vazirmatn-OFL.txt +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/web/vazirmatn.woff2 +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/__init__.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/api.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/commands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/guide.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/menu.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/service.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/tunnel.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/unit.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/whatsapp/webhook.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/src/comodor/workspace.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/conftest.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/support/fake_mcp_server.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_acp.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_app.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_associations.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_banner.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_bidi.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_browser.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_caching.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_channel_service.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_chooser.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_computer_tool.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_config_save.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_copy_and_bands.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_delegate.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_desktop.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_discover.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_history.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_import_command.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_input.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_layout.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_learning.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_local.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_mcp.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_mcp_http.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_migrate.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_oauth.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_overflow.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_overlay.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_performance.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_prefix_stability.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_progress.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_propose.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_providers.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_questions.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_real_browser.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_real_desktop.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_real_web_ui.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_reflex.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_run_loop.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_setup.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_setup_import.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_skill_budget.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_skill_catalogue.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_skills.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_slack.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_switching_model.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_uninstall.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_update.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_web.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_welcome.py +0 -0
- {comodor-0.20.0 → comodor-0.20.2}/tests/test_whatsapp.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: comodor
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.2
|
|
4
4
|
Summary: Comodor — a self-improving terminal coding agent with a Rich TUI
|
|
5
5
|
Project-URL: Homepage, https://comodor.ai
|
|
6
6
|
Project-URL: Repository, https://github.com/ifekri/Comodor
|
|
@@ -14,14 +14,18 @@ Classifier: Development Status :: 4 - Beta
|
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
23
|
Classifier: Topic :: Software Development :: Code Generators
|
|
21
|
-
Requires-Python: >=3.
|
|
24
|
+
Requires-Python: >=3.9
|
|
22
25
|
Requires-Dist: rich>=13.7
|
|
23
26
|
Provides-Extra: dev
|
|
24
27
|
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: pyyaml>=6.0; extra == 'dev'
|
|
25
29
|
Requires-Dist: ruff>=0.14; extra == 'dev'
|
|
26
30
|
Description-Content-Type: text/markdown
|
|
27
31
|
|
|
@@ -34,13 +38,43 @@ Description-Content-Type: text/markdown
|
|
|
34
38
|
Fix something it wrote, and it never writes it that way again — in this project
|
|
35
39
|
or the next one. Not a setting you turn on. Not a file you maintain.
|
|
36
40
|
|
|
37
|
-
[](https://pypi.org/project/comodor/)
|
|
42
|
+
[](https://pypi.org/project/comodor/)
|
|
39
43
|
[](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
|
|
40
|
-
[](LICENSE)
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<a href="/docs/README.md">
|
|
48
|
+
<img src="https://img.shields.io/badge/Docs-EN-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="English Docs" />
|
|
49
|
+
</a>
|
|
50
|
+
<a href="/docs/FA/README.md">
|
|
51
|
+
<img src="https://img.shields.io/badge/Docs-FA-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Persian (Farsi) Docs" />
|
|
52
|
+
</a>
|
|
53
|
+
<a href="/docs/AR/README.md">
|
|
54
|
+
<img src="https://img.shields.io/badge/Docs-AR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Arabic Docs">
|
|
55
|
+
</a>
|
|
56
|
+
<a href="/docs/TR/README.md">
|
|
57
|
+
<img src="https://img.shields.io/badge/Docs-TR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Turkish Docs" />
|
|
58
|
+
</a>
|
|
59
|
+
<a href="/docs/DE/README.md">
|
|
60
|
+
<img src="https://img.shields.io/badge/Docs-DE-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Deutsch Docs" />
|
|
61
|
+
</a>
|
|
62
|
+
<a href="/docs/ES/README.md">
|
|
63
|
+
<img src="https://img.shields.io/badge/Docs-ES-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Spanish Docs" />
|
|
64
|
+
</a>
|
|
65
|
+
<a href="/docs/RU/README.md">
|
|
66
|
+
<img src="https://img.shields.io/badge/Docs-RU-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Russian Docs" />
|
|
67
|
+
</a>
|
|
68
|
+
<a href="/docs/FR/README.md">
|
|
69
|
+
<img src="https://img.shields.io/badge/Docs-FR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="French Docs" />
|
|
70
|
+
</a>
|
|
71
|
+
<a href="/docs/ZH/README.md">
|
|
72
|
+
<img src="https://img.shields.io/badge/Docs-ZH-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Zhongwen Docs" />
|
|
73
|
+
</a>
|
|
74
|
+
</p>
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
[**comodor.ai**](https://comodor.ai) · [Installation](#install) · [Documentation](docs/README.md 'Comodor Documentation English')
|
|
44
78
|
|
|
45
79
|
---
|
|
46
80
|
|
|
@@ -67,6 +101,29 @@ Those are real, read out of a working install.
|
|
|
67
101
|
`/progress` shows whether that is actually working — corrections per turn,
|
|
68
102
|
falling or not. A number, not a claim.
|
|
69
103
|
|
|
104
|
+
## Whether it is any good, measured
|
|
105
|
+
|
|
106
|
+
Most coding agents ask you to take their quality on trust. Comodor has a
|
|
107
|
+
benchmark: thirteen tasks in thirteen real repositories, judged by programs —
|
|
108
|
+
the suite goes green, the file parses, the old name is gone from every file.
|
|
109
|
+
Three attempts each, reported as a rate, because a single run dressed up as
|
|
110
|
+
"it passes" is a made-up number.
|
|
111
|
+
|
|
112
|
+
Results are committed under `bench/results/`, dated and named for the model
|
|
113
|
+
they are about, as JSON and as a table.
|
|
114
|
+
|
|
115
|
+
The first version of that table was wrong, and the correction is the point.
|
|
116
|
+
One `careful` task scored a model 0/3 for not asking a question — and the model
|
|
117
|
+
had in fact found the ambiguity, resolved it from the codebase's own
|
|
118
|
+
convention, and said so. The judge was demanding a question Comodor's prompt
|
|
119
|
+
tells the model *not* to ask. A judge with a made-up standard is the same bug
|
|
120
|
+
as a test with made-up keys, pointed the other way: one passes broken code, the
|
|
121
|
+
other fails correct work, and both look exactly like a real number. The task
|
|
122
|
+
was replaced with one whose missing piece genuinely is not in the repository.
|
|
123
|
+
|
|
124
|
+
The whole table, and how to run it against your own model, is in
|
|
125
|
+
[`bench/`](bench/README.md). Every number there came from a real run.
|
|
126
|
+
|
|
70
127
|
## Everything else it does
|
|
71
128
|
|
|
72
129
|
| | |
|
|
@@ -134,6 +191,35 @@ pip install comodor
|
|
|
134
191
|
pipx install comodor
|
|
135
192
|
```
|
|
136
193
|
|
|
194
|
+
### In Docker — nothing to install
|
|
195
|
+
|
|
196
|
+
The agent, a real Chromium, git and ripgrep, in one container. It starts the
|
|
197
|
+
**browser interface** and prints the address to open:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
git clone https://github.com/ifekri/Comodor.git && cd Comodor
|
|
201
|
+
export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY, OPENROUTER_API_KEY, ...
|
|
202
|
+
docker compose up
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
Comodor is at http://127.0.0.1:8765/?token=...
|
|
207
|
+
Working in /work
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Open the link. The token is new every run, so use the one from *this* run —
|
|
211
|
+
`docker compose logs comodor` prints it again.
|
|
212
|
+
|
|
213
|
+
The agent works on `./work`; point it somewhere else with
|
|
214
|
+
`COMODOR_WORKDIR=/path/to/project docker compose up`. Or without cloning
|
|
215
|
+
anything:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
docker run --rm -it -p 127.0.0.1:8765:8765 -e ANTHROPIC_API_KEY -v "$PWD:/work" ghcr.io/ifekri/comodor:latest
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Full details, including how to reach it from another machine safely:
|
|
222
|
+
[Docker](docs/docker.md).
|
|
137
223
|
|
|
138
224
|
Then `comodor`. Python 3.11 or newer. Six questions the first time, never
|
|
139
225
|
again.
|
|
@@ -7,13 +7,43 @@
|
|
|
7
7
|
Fix something it wrote, and it never writes it that way again — in this project
|
|
8
8
|
or the next one. Not a setting you turn on. Not a file you maintain.
|
|
9
9
|
|
|
10
|
-
[](https://pypi.org/project/comodor/)
|
|
11
|
+
[](https://pypi.org/project/comodor/)
|
|
12
12
|
[](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
|
|
13
|
-
[](LICENSE)
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="/docs/README.md">
|
|
17
|
+
<img src="https://img.shields.io/badge/Docs-EN-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="English Docs" />
|
|
18
|
+
</a>
|
|
19
|
+
<a href="/docs/FA/README.md">
|
|
20
|
+
<img src="https://img.shields.io/badge/Docs-FA-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Persian (Farsi) Docs" />
|
|
21
|
+
</a>
|
|
22
|
+
<a href="/docs/AR/README.md">
|
|
23
|
+
<img src="https://img.shields.io/badge/Docs-AR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Arabic Docs">
|
|
24
|
+
</a>
|
|
25
|
+
<a href="/docs/TR/README.md">
|
|
26
|
+
<img src="https://img.shields.io/badge/Docs-TR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Turkish Docs" />
|
|
27
|
+
</a>
|
|
28
|
+
<a href="/docs/DE/README.md">
|
|
29
|
+
<img src="https://img.shields.io/badge/Docs-DE-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Deutsch Docs" />
|
|
30
|
+
</a>
|
|
31
|
+
<a href="/docs/ES/README.md">
|
|
32
|
+
<img src="https://img.shields.io/badge/Docs-ES-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Spanish Docs" />
|
|
33
|
+
</a>
|
|
34
|
+
<a href="/docs/RU/README.md">
|
|
35
|
+
<img src="https://img.shields.io/badge/Docs-RU-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Russian Docs" />
|
|
36
|
+
</a>
|
|
37
|
+
<a href="/docs/FR/README.md">
|
|
38
|
+
<img src="https://img.shields.io/badge/Docs-FR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="French Docs" />
|
|
39
|
+
</a>
|
|
40
|
+
<a href="/docs/ZH/README.md">
|
|
41
|
+
<img src="https://img.shields.io/badge/Docs-ZH-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Zhongwen Docs" />
|
|
42
|
+
</a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
[**comodor.ai**](https://comodor.ai) · [Installation](#install) · [Documentation](docs/README.md 'Comodor Documentation English')
|
|
17
47
|
|
|
18
48
|
---
|
|
19
49
|
|
|
@@ -40,6 +70,29 @@ Those are real, read out of a working install.
|
|
|
40
70
|
`/progress` shows whether that is actually working — corrections per turn,
|
|
41
71
|
falling or not. A number, not a claim.
|
|
42
72
|
|
|
73
|
+
## Whether it is any good, measured
|
|
74
|
+
|
|
75
|
+
Most coding agents ask you to take their quality on trust. Comodor has a
|
|
76
|
+
benchmark: thirteen tasks in thirteen real repositories, judged by programs —
|
|
77
|
+
the suite goes green, the file parses, the old name is gone from every file.
|
|
78
|
+
Three attempts each, reported as a rate, because a single run dressed up as
|
|
79
|
+
"it passes" is a made-up number.
|
|
80
|
+
|
|
81
|
+
Results are committed under `bench/results/`, dated and named for the model
|
|
82
|
+
they are about, as JSON and as a table.
|
|
83
|
+
|
|
84
|
+
The first version of that table was wrong, and the correction is the point.
|
|
85
|
+
One `careful` task scored a model 0/3 for not asking a question — and the model
|
|
86
|
+
had in fact found the ambiguity, resolved it from the codebase's own
|
|
87
|
+
convention, and said so. The judge was demanding a question Comodor's prompt
|
|
88
|
+
tells the model *not* to ask. A judge with a made-up standard is the same bug
|
|
89
|
+
as a test with made-up keys, pointed the other way: one passes broken code, the
|
|
90
|
+
other fails correct work, and both look exactly like a real number. The task
|
|
91
|
+
was replaced with one whose missing piece genuinely is not in the repository.
|
|
92
|
+
|
|
93
|
+
The whole table, and how to run it against your own model, is in
|
|
94
|
+
[`bench/`](bench/README.md). Every number there came from a real run.
|
|
95
|
+
|
|
43
96
|
## Everything else it does
|
|
44
97
|
|
|
45
98
|
| | |
|
|
@@ -107,6 +160,35 @@ pip install comodor
|
|
|
107
160
|
pipx install comodor
|
|
108
161
|
```
|
|
109
162
|
|
|
163
|
+
### In Docker — nothing to install
|
|
164
|
+
|
|
165
|
+
The agent, a real Chromium, git and ripgrep, in one container. It starts the
|
|
166
|
+
**browser interface** and prints the address to open:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
git clone https://github.com/ifekri/Comodor.git && cd Comodor
|
|
170
|
+
export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY, OPENROUTER_API_KEY, ...
|
|
171
|
+
docker compose up
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Comodor is at http://127.0.0.1:8765/?token=...
|
|
176
|
+
Working in /work
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Open the link. The token is new every run, so use the one from *this* run —
|
|
180
|
+
`docker compose logs comodor` prints it again.
|
|
181
|
+
|
|
182
|
+
The agent works on `./work`; point it somewhere else with
|
|
183
|
+
`COMODOR_WORKDIR=/path/to/project docker compose up`. Or without cloning
|
|
184
|
+
anything:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
docker run --rm -it -p 127.0.0.1:8765:8765 -e ANTHROPIC_API_KEY -v "$PWD:/work" ghcr.io/ifekri/comodor:latest
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Full details, including how to reach it from another machine safely:
|
|
191
|
+
[Docker](docs/docker.md).
|
|
110
192
|
|
|
111
193
|
Then `comodor`. Python 3.11 or newer. Six questions the first time, never
|
|
112
194
|
again.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# The Comodor benchmark
|
|
2
|
+
|
|
3
|
+
Thirteen coding tasks in thirteen small repositories, judged by programs.
|
|
4
|
+
|
|
5
|
+
It exists because the test suite answers "are the parts wired together" and
|
|
6
|
+
nothing answered "is it any good at the job". Without that second number, every
|
|
7
|
+
change to the system prompt, the tool descriptions or the agent loop is a guess
|
|
8
|
+
with a story attached.
|
|
9
|
+
|
|
10
|
+
## Running it
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
python -m bench --provider xiaomi --model mimo-v2.5-pro
|
|
14
|
+
python -m bench --provider anthropic --model claude-sonnet-5 --tries 3
|
|
15
|
+
python -m bench --only fix- --tries 1 # one category, one attempt
|
|
16
|
+
python -m bench --dry-run # list the suite, run nothing
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The API key comes from the environment, or from a `.env` beside the source.
|
|
20
|
+
Nothing reads your Comodor config: every attempt gets its own `COMODOR_HOME`,
|
|
21
|
+
its own copy of the task's repository, and the learning engine switched off.
|
|
22
|
+
|
|
23
|
+
Results land in `results/` as JSON and as a Markdown table, named for the model
|
|
24
|
+
and the date.
|
|
25
|
+
|
|
26
|
+
## What a task is
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
tasks/fix-off-by-one/
|
|
30
|
+
task.md the prompt, verbatim — nothing else is sent
|
|
31
|
+
repo/ the starting state, copied fresh for every attempt
|
|
32
|
+
check.py the judge, and the step and time budget
|
|
33
|
+
hidden/ tests added after the run, for `feature` tasks only
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Categories
|
|
37
|
+
|
|
38
|
+
| | What it measures |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `fix` | make a failing test pass, without changing the test |
|
|
41
|
+
| `feature` | build to a written spec, judged by tests held back |
|
|
42
|
+
| `find` | search and read — run in plan mode, so it cannot write |
|
|
43
|
+
| `refactor` | change across files, keeping behaviour and leaving nothing behind |
|
|
44
|
+
| `careful` | does *not* do the wrong thing |
|
|
45
|
+
|
|
46
|
+
`careful` is the one nobody else measures and the reason this suite is worth
|
|
47
|
+
having. It contains a request with a real ambiguity in it — passed only by
|
|
48
|
+
asking *before* the first edit, not after; a fix in one file with the identical
|
|
49
|
+
bug sitting in the file next door, which must be left alone; and a task that
|
|
50
|
+
cannot be completed honestly, where the only passing answer says so instead of
|
|
51
|
+
inventing the data that would make the suite green.
|
|
52
|
+
|
|
53
|
+
## How the numbers are reported
|
|
54
|
+
|
|
55
|
+
Every task is run three times and reported as a rate — `3/3`, `1/3` — never as
|
|
56
|
+
a single boolean. Agents are not deterministic and a single run presented as
|
|
57
|
+
"it passes" is a made-up number with a real one's face on.
|
|
58
|
+
|
|
59
|
+
Every published result names the model, the provider, the date and the machine.
|
|
60
|
+
Nothing is estimated, projected or rounded up from a partial run.
|
|
61
|
+
|
|
62
|
+
## A judge can be wrong, and it looks exactly like a result
|
|
63
|
+
|
|
64
|
+
The first `careful` task here asked for a `delete` operation across two storage
|
|
65
|
+
backends that disagreed about missing keys, and required the agent to ask
|
|
66
|
+
before building. A model scored 0/3 on it — and it had found the ambiguity,
|
|
67
|
+
resolved it from each backend's own existing convention, and said so with file
|
|
68
|
+
and line. Comodor's own prompt tells it to do precisely that: *"do not ask
|
|
69
|
+
about matters with an obvious default — pick the default and say that you
|
|
70
|
+
did."*
|
|
71
|
+
|
|
72
|
+
**A judge with a made-up standard is the same bug as a test with made-up keys,
|
|
73
|
+
pointed the other way.** One passes broken code; the other fails correct work.
|
|
74
|
+
Both produce a number indistinguishable from a real one.
|
|
75
|
+
|
|
76
|
+
Two rules came out of it, and they apply to every task added from now on:
|
|
77
|
+
|
|
78
|
+
*Read what the agent actually said before believing the verdict.* A failure
|
|
79
|
+
nobody has read is a failure nobody has checked.
|
|
80
|
+
|
|
81
|
+
*A `careful` task must turn on something the repository cannot answer.* If the
|
|
82
|
+
code settles it, the right behaviour is to read the code, decide, and say so —
|
|
83
|
+
and a task that punishes that is measuring the task author.
|
|
84
|
+
|
|
85
|
+
## Adding a task
|
|
86
|
+
|
|
87
|
+
Every bug found in Comodor from now on becomes one. That is the only way the
|
|
88
|
+
suite is meant to grow — a task written to make a number look good is a task
|
|
89
|
+
that measures nothing.
|
|
90
|
+
|
|
91
|
+
A new task needs the four files above, and two things must be true before it
|
|
92
|
+
counts: a reference solution passes it, and `tests/test_bench.py` still passes
|
|
93
|
+
— it checks that every `fix` task starts red, every `refactor` task starts
|
|
94
|
+
green, every `feature` task's hidden tests fail before the work, and that each
|
|
95
|
+
judge refuses the specific shortcut its task invites.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# pricing-client
|
|
2
|
+
|
|
3
|
+
A thin client for the internal pricing service.
|
|
4
|
+
|
|
5
|
+
from client import Client
|
|
6
|
+
import settings
|
|
7
|
+
|
|
8
|
+
api = Client(settings.BASE_URL, settings.TOKEN)
|
|
9
|
+
api.prices(["SKU-1", "SKU-2"])
|
|
10
|
+
|
|
11
|
+
`prices` makes one request per SKU; the service has no batch endpoint.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# توثيق Comodor
|
|
2
|
+
|
|
3
|
+
وكيل برمجة يعمل في الطرفية ويتعلم بالطريقة التي تصحّح بها أخطاءه.
|
|
4
|
+
|
|
5
|
+
أنت جديد هنا؟ **[البداية](getting-started.md)** تستغرق نحو خمس دقائق وتنتهي
|
|
6
|
+
بالوكيل وهو يؤدي شيئًا مفيدًا.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## حسب ما تحاول فعله
|
|
11
|
+
|
|
12
|
+
### ابدأ
|
|
13
|
+
|
|
14
|
+
| | |
|
|
15
|
+
|---|---|
|
|
16
|
+
| [البداية](getting-started.md) | التثبيت، اختيار نموذج، أول مهمة |
|
|
17
|
+
| [الانتقال من وكيل آخر](migrating.md) | إحضار المفاتيح والمهارات من OpenClaw أو Hermes |
|
|
18
|
+
| [اختيار نموذج](models.md) | أي مزوّد، أي نموذج، وكم يكلف |
|
|
19
|
+
|
|
20
|
+
### استخدمه
|
|
21
|
+
|
|
22
|
+
| | |
|
|
23
|
+
|---|---|
|
|
24
|
+
| [الواجهة](interface.md) | اللوحات، المفاتيح، الأنماط، وجميع الأوامر الـ 29 |
|
|
25
|
+
| [من الطرفية](cli.md) | كل أمر وكل علَم، مع أمثلة |
|
|
26
|
+
| [ما يستطيع الوكيل فعله](tools.md) | الأدوات الـ 13 التي يملكها، ومتى يستخدم كلًا منها |
|
|
27
|
+
| [المهارات](skills.md) | إجراءات تكتبها مرة واحدة ويتّبعها |
|
|
28
|
+
|
|
29
|
+
### دَعه يصل أبعد
|
|
30
|
+
|
|
31
|
+
| | |
|
|
32
|
+
|---|---|
|
|
33
|
+
| [المتصفح الحقيقي](browser.md) | متصفح يشغّل JavaScript ويستطيع تسجيل الدخول |
|
|
34
|
+
| [استخدام شاشتك](computer.md) | الفأرة ولوحة المفاتيح، في أي تطبيق |
|
|
35
|
+
| [من متصفح](web.md) | واجهة الويب، محليًا أو على خادم |
|
|
36
|
+
| [في محررك](acp.md) | تحكّم في Comodor من Zed أو أي عميل Agent Client Protocol |
|
|
37
|
+
| [في Docker](docker.md) | أمر واحد، داخل حاوية |
|
|
38
|
+
| [خوادم MCP](mcp.md) | أدوات من بروتوكول Model Context Protocol |
|
|
39
|
+
|
|
40
|
+
### افهمه
|
|
41
|
+
|
|
42
|
+
| | |
|
|
43
|
+
|---|---|
|
|
44
|
+
| [من هاتفك](telegram.md) | بوت Telegram: الاقتران، الأزرار، ومن يجيب له |
|
|
45
|
+
| [من Slack](slack.md) | Socket Mode — خمس دقائق، دون عنوان عام، ويجيب داخل السلاسل |
|
|
46
|
+
| [من WhatsApp](whatsapp.md) | واجهة Cloud API — نحو عشرين دقيقة وتتطلب خبرة تقنية. Telegram يفعل الشيء نفسه في دقيقة واحدة |
|
|
47
|
+
| [نماذج على جهازك](local-models.md) | تنزيل نموذج، تشغيله دون اتصال، وإضافته إلى القائمة |
|
|
48
|
+
| [الأسئلة](questions.md) | النموذج الذي يعرضه عندما يقبل الطلب فهمين |
|
|
49
|
+
| [كيف يتعلم](learning.md) | التصحيحات، الدروس، القواعد، والدليل |
|
|
50
|
+
| [السلامة والأذونات](safety.md) | ما يستطيع فعله، ما يسأل عنه، وما لا يفعله أبدًا |
|
|
51
|
+
| [التكلفة](cost.md) | التخزين المؤقت، الميزانيات، ودفع أقل مقابل العمل نفسه |
|
|
52
|
+
| [الإعداد](configuration.md) | كل إعداد، أين تسكن الملفات، أيّها يَحْسَم |
|
|
53
|
+
|
|
54
|
+
### عندما يحدث خلل
|
|
55
|
+
|
|
56
|
+
| | |
|
|
57
|
+
|---|---|
|
|
58
|
+
| [استكشاف الأخطاء وإصلاحها](troubleshooting.md) | `doctor`، المشاكل الشائعة، وكيفية الإبلاغ عن واحدة |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## أقصر نسخة ممكنة
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
curl -fsSL get.comodor.ai | sh # macOS, Linux
|
|
66
|
+
irm get.comodor.ai | iex # Windows
|
|
67
|
+
|
|
68
|
+
comodor # it asks a few questions, once
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
ثم اكتب ما تريد. صحّحه عندما يخطئ — عدّل الملف بنفسك أو قل ذلك فقط — ويتعلم.
|
|
72
|
+
يُظهر لك `/progress` ما إذا كان ذلك يعمل فعلًا.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
comodor run "fix the failing test in tests/test_parser.py" # one task, no interface
|
|
76
|
+
comodor web # from a browser
|
|
77
|
+
comodor doctor # is everything alright?
|
|
78
|
+
comodor help # the written help page
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## ما يميزه
|
|
82
|
+
|
|
83
|
+
**يتعلم من التصحيحات، لا من المدح.** معظم الوكلاء ينسون في اللحظة التي تنتهي
|
|
84
|
+
فيها الجلسة. يراقب Comodor ما تغيّره في مخرجاته ويحوّله إلى درس بدرجة ثقة
|
|
85
|
+
ترتفع عندما يثبت صحه وتنخفض عندما لا يثبت. يشرح [كيف يتعلم](learning.md)
|
|
86
|
+
الآلية؛ ويعرض `/progress` الدليل.
|
|
87
|
+
|
|
88
|
+
**يسأل قبل أن يتصرف، وكل شيء قابل للتراجع.** القراءة صامتة. الكتابة تسأل.
|
|
89
|
+
تشغيل أمر يسأل بصوت أعلى. كل كتابة محفوظة كنقطة استرجاع، ويعيد `/undo` آخر
|
|
90
|
+
واحدة منها. [السلامة والأذونات](safety.md).
|
|
91
|
+
|
|
92
|
+
**تبعية واحدة.** عميل HTTP، وقارئ SSE، وWebSocket الخاص بالمتصفح، ومشفّر PNG
|
|
93
|
+
للقطات الشاشة — كلها جزء من الحزمة. يُدخل تثبيت Comodor `rich` ولا شيء غيرها.
|
|
94
|
+
|
|
95
|
+
**يستطيع استخدام متصفح حقيقي وسطح مكتب حقيقي.** ليس مجرد جامع نصوص: متصفح
|
|
96
|
+
يشغّل JavaScript ويحفظ ملفات تعريف الارتباط، و — على Windows — الفأرة
|
|
97
|
+
ولوحة المفاتيح، مع هالة على الشاشة تبين لك أين سينقر.
|
|
98
|
+
[المتصفح](browser.md)، [الشاشة](computer.md).
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## أيضًا في المستودع
|
|
103
|
+
|
|
104
|
+
| | |
|
|
105
|
+
|---|---|
|
|
106
|
+
| [CHANGELOG](../CHANGELOG.md) | ما تغيّر، ولماذا |
|
|
107
|
+
| [CONTRIBUTING](../CONTRIBUTING.md) | العمل على Comodor نفسه |
|
|
108
|
+
| [SECURITY](../SECURITY.md) | الإبلاغ عن أمر حساس |
|
|
109
|
+
| [RELEASING](../RELEASING.md) | كيف يُقطَع إصدار |
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Comodor-Dokumentation
|
|
2
|
+
|
|
3
|
+
Ein Terminal-Coding-Agent, der lernt, wie Sie ihn korrigieren.
|
|
4
|
+
|
|
5
|
+
Neu hier? **[Erste Schritte](getting-started.md)** dauert etwa fünf Minuten und
|
|
6
|
+
endet damit, dass der Agent etwas Nützliches tut.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Wonach Sie gerade suchen
|
|
11
|
+
|
|
12
|
+
### Den Einstieg finden
|
|
13
|
+
|
|
14
|
+
| | |
|
|
15
|
+
|---|---|
|
|
16
|
+
| [Erste Schritte](getting-started.md) | Installation, Modellwahl, erste Aufgabe |
|
|
17
|
+
| [Von einem anderen Agenten kommend](migrating.md) | Schlüssel und Skills aus OpenClaw oder Hermes übernehmen |
|
|
18
|
+
| [Ein Modell wählen](models.md) | Welcher Anbieter, welches Modell, was es kostet |
|
|
19
|
+
|
|
20
|
+
### Es benutzen
|
|
21
|
+
|
|
22
|
+
| | |
|
|
23
|
+
|---|---|
|
|
24
|
+
| [Die Oberfläche](interface.md) | Panels, Tasten, Modi und alle 29 Befehle |
|
|
25
|
+
| [Aus dem Terminal](cli.md) | Jeder Befehl und jedes Flag, mit Beispielen |
|
|
26
|
+
| [Was der Agent kann](tools.md) | Die 13 Werkzeuge, die er hat, und wann er welches einsetzt |
|
|
27
|
+
| [Skills](skills.md) | Abläufe, die Sie einmal schreiben und denen er folgt |
|
|
28
|
+
|
|
29
|
+
### Es weiter reichen lassen
|
|
30
|
+
|
|
31
|
+
| | |
|
|
32
|
+
|---|---|
|
|
33
|
+
| [Der echte Browser](browser.md) | Ein Browser, der JavaScript ausführt und sich anmelden kann |
|
|
34
|
+
| [Den Bildschirm benutzen](computer.md) | Maus und Tastatur, in jeder Anwendung |
|
|
35
|
+
| [Aus dem Browser](web.md) | Die Weboberfläche, lokal oder auf einem Server |
|
|
36
|
+
| [Im Editor](acp.md) | Comodor aus Zed oder einem beliebigen Agent Client Protocol Client steuern |
|
|
37
|
+
| [In Docker](docker.md) | Ein Befehl, in einem Container |
|
|
38
|
+
| [MCP-Server](mcp.md) | Werkzeuge aus dem Model Context Protocol |
|
|
39
|
+
|
|
40
|
+
### Es verstehen
|
|
41
|
+
|
|
42
|
+
| | |
|
|
43
|
+
|---|---|
|
|
44
|
+
| [Vom Handy aus](telegram.md) | Der Telegram-Bot: Kopplung, die Tasten und wem er antwortet |
|
|
45
|
+
| [Aus Slack](slack.md) | Socket Mode — fünf Minuten, keine öffentliche Adresse, und er antwortet in Threads |
|
|
46
|
+
| [Aus WhatsApp](whatsapp.md) | Die Cloud API — etwa zwanzig Minuten und technisch. Telegram tut dasselbe in einem |
|
|
47
|
+
| [Modelle auf dem eigenen Rechner](local-models.md) | Eines herunterladen, offline betreiben, zur Liste hinzufügen |
|
|
48
|
+
| [Rückfragen](questions.md) | Das Formular, das er einblendet, wenn eine Anfrage zweideutig ist |
|
|
49
|
+
| [Wie er lernt](learning.md) | Korrekturen, Lektionen, Regeln und der Nachweis |
|
|
50
|
+
| [Sicherheit und Berechtigungen](safety.md) | Was er kann, was er fragt, was er niemals tut |
|
|
51
|
+
| [Kosten](cost.md) | Caching, Budgets und weniger zahlen für dieselbe Arbeit |
|
|
52
|
+
| [Konfiguration](configuration.md) | Jede Einstellung, wo die Dateien liegen, was sich durchsetzt |
|
|
53
|
+
|
|
54
|
+
### Wenn etwas nicht stimmt
|
|
55
|
+
|
|
56
|
+
| | |
|
|
57
|
+
|---|---|
|
|
58
|
+
| [Fehlerbehebung](troubleshooting.md) | `doctor`, übliche Probleme und wie man eines meldet |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Die kürzest mögliche Version
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
curl -fsSL get.comodor.ai | sh # macOS, Linux
|
|
66
|
+
irm get.comodor.ai | iex # Windows
|
|
67
|
+
|
|
68
|
+
comodor # es stellt ein paar Fragen, einmalig
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Dann tippen Sie, was Sie wollen. Korrigieren Sie es, wenn es falsch liegt —
|
|
72
|
+
ändern Sie die Datei oder sagen Sie es einfach — und es lernt. `/progress`
|
|
73
|
+
zeigt Ihnen, ob das tatsächlich funktioniert.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
comodor run "fix the failing test in tests/test_parser.py" # eine Aufgabe, keine Oberfläche
|
|
77
|
+
comodor web # aus dem Browser
|
|
78
|
+
comodor doctor # ist alles in Ordnung?
|
|
79
|
+
comodor help # die geschriebene Hilfeseite
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Was es anders macht
|
|
83
|
+
|
|
84
|
+
**Es lernt aus Korrekturen, nicht aus Lob.** Die meisten Agents vergessen den
|
|
85
|
+
Moment, in dem eine Sitzung endet. Comodor beobachtet, was Sie an seiner
|
|
86
|
+
Ausgabe ändern, und macht daraus eine Lektion mit einem Vertrauenswert, der
|
|
87
|
+
steigt, wenn sie sich bewährt, und sinkt, wenn nicht. [Wie er lernt](learning.md)
|
|
88
|
+
erklärt den Mechanismus; `/progress` zeigt die Belege.
|
|
89
|
+
|
|
90
|
+
**Es fragt, bevor es handelt, und alles ist rückgängig zu machen.** Lesen
|
|
91
|
+
geschieht stillschweigend. Schreiben fragt. Ein Befehl fragt deutlicher. Jeder
|
|
92
|
+
Schreibvorgang wird als Prüfpunkt gesichert, und `/undo` stellt den letzten
|
|
93
|
+
wieder her. [Sicherheit und Berechtigungen](safety.md).
|
|
94
|
+
|
|
95
|
+
**Eine einzige Abhängigkeit.** Der HTTP-Client, der SSE-Reader, das WebSocket
|
|
96
|
+
für den Browser, der PNG-Encoder für Screenshots — alles Teil des Pakets. Die
|
|
97
|
+
Installation von Comodor zieht `rich` nach sich und sonst nichts.
|
|
98
|
+
|
|
99
|
+
**Es kann einen echten Browser und einen echten Desktop benutzen.** Kein
|
|
100
|
+
Text-Fetcher: ein Browser, der JavaScript ausführt und Cookies behält, und —
|
|
101
|
+
unter Windows — Maus und Tastatur, mit einem Halo auf dem Bildschirm, der
|
|
102
|
+
zeigt, wo er als Nächstes klicken wird. [Browser](browser.md),
|
|
103
|
+
[Bildschirm](computer.md).
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Außerdem im Repository
|
|
108
|
+
|
|
109
|
+
| | |
|
|
110
|
+
|---|---|
|
|
111
|
+
| [CHANGELOG](../CHANGELOG.md) | Was sich geändert hat, und warum |
|
|
112
|
+
| [CONTRIBUTING](../CONTRIBUTING.md) | An Comodor selbst arbeiten |
|
|
113
|
+
| [SECURITY](../SECURITY.md) | etwas Sensibles melden |
|
|
114
|
+
| [RELEASING](../RELEASING.md) | Wie ein Release geschnitten wird |
|