comodor 1.2.0__tar.gz → 2.0.1__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-1.2.0 → comodor-2.0.1}/.gitignore +8 -0
- {comodor-1.2.0 → comodor-2.0.1}/PKG-INFO +42 -55
- {comodor-1.2.0 → comodor-2.0.1}/README.md +38 -49
- {comodor-1.2.0 → comodor-2.0.1}/docs/AR/README.md +9 -9
- {comodor-1.2.0 → comodor-2.0.1}/docs/DE/README.md +10 -10
- {comodor-1.2.0 → comodor-2.0.1}/docs/ES/README.md +11 -11
- {comodor-1.2.0 → comodor-2.0.1}/docs/FA/README.md +10 -10
- {comodor-1.2.0 → comodor-2.0.1}/docs/FR/README.md +9 -9
- {comodor-1.2.0 → comodor-2.0.1}/docs/README.md +16 -6
- {comodor-1.2.0 → comodor-2.0.1}/docs/RU/README.md +12 -12
- {comodor-1.2.0 → comodor-2.0.1}/docs/TR/README.md +10 -9
- {comodor-1.2.0 → comodor-2.0.1}/docs/ZH/README.md +8 -8
- {comodor-1.2.0 → comodor-2.0.1}/pyproject.toml +11 -7
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/__init__.py +5 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/_version.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/agent.py +16 -34
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/background.py +168 -19
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/loop.py +39 -11
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/spawn.py +20 -5
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/server.py +1 -1
- comodor-2.0.1/src/comodor/application/__init__.py +1416 -0
- comodor-2.0.1/src/comodor/application/journal.py +543 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cli.py +74 -230
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/config.py +127 -17
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/guard.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/doctor.py +149 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/events.py +135 -5
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/commands.py +108 -21
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/connect.py +239 -16
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/help.py +32 -37
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/journey.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/journey_commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/memory.py +94 -36
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/base.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/review.py +21 -5
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/rules.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/signals.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/store.py +3 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/manager.py +2 -2
- comodor-2.0.1/src/comodor/onboarding.py +1482 -0
- comodor-2.0.1/src/comodor/protocol/__init__.py +298 -0
- comodor-2.0.1/src/comodor/protocol/_generated.py +962 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/fake.py +9 -4
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/gateway.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/pool.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/checkpoints.py +3 -3
- comodor-2.0.1/src/comodor/safety/modes.py +221 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/permissions.py +22 -7
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/setup.py +791 -135
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/examples.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/commands.py +1 -1
- comodor-2.0.1/src/comodor/terminal/__init__.py +20 -0
- {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/chooser.py +2 -2
- {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/clipboard.py +6 -5
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/ask.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/base.py +29 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/computer.py +8 -6
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/fs.py +5 -4
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/memory.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/propose_mode.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/registry.py +19 -5
- comodor-2.0.1/src/comodor/transport/__init__.py +57 -0
- comodor-2.0.1/src/comodor/transport/commands.py +197 -0
- comodor-2.0.1/src/comodor/transport/jsonl.py +139 -0
- comodor-2.0.1/src/comodor/transport/server.py +273 -0
- comodor-2.0.1/src/comodor/tui/__init__.py +0 -0
- comodor-2.0.1/src/comodor/tui/dist/highlights-eq9cgrbb.scm +604 -0
- comodor-2.0.1/src/comodor/tui/dist/highlights-ghv9g403.scm +205 -0
- comodor-2.0.1/src/comodor/tui/dist/highlights-hk7bwhj4.scm +284 -0
- comodor-2.0.1/src/comodor/tui/dist/highlights-r812a2qc.scm +150 -0
- comodor-2.0.1/src/comodor/tui/dist/highlights-x6tmsnaa.scm +115 -0
- comodor-2.0.1/src/comodor/tui/dist/injections-73j83es3.scm +27 -0
- comodor-2.0.1/src/comodor/tui/dist/main.js +72237 -0
- comodor-2.0.1/src/comodor/tui/dist/manifest.json +46 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/libopentui.dylib +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/libopentui.dylib +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/libopentui.so +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/libopentui.so +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/package.json +35 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/libopentui.so +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/libopentui.so +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/package.json +35 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/opentui.dll +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/AUTHORS-LIBWEBP +72 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE +21 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-GHOSTTY +117 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-LCMS2 +22 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-LIBWEBP +30 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-STB +37 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-WUFFS +177 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/PATENTS-LIBWEBP +23 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/README.md +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.bun.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.d.ts +2 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.js +3 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/opentui.dll +0 -0
- comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/package.json +32 -0
- comodor-2.0.1/src/comodor/tui/dist/parser.worker-xyhf83rf.js +4563 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-3jzf13jk.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- comodor-2.0.1/src/comodor/tui/runtime.py +167 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/commands.py +4 -4
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/commands.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/server.py +1 -1
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/commands.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/workspace.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_background_delegates.py +2 -2
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_banner.py +2 -24
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_blind_writes.py +16 -2
- comodor-2.0.1/tests/test_check_wheel_contents.py +105 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_chooser.py +11 -11
- comodor-2.0.1/tests/test_cli_surface.py +54 -0
- comodor-2.0.1/tests/test_clipboard.py +98 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_computer_tool.py +1 -90
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_config_save.py +156 -0
- comodor-2.0.1/tests/test_core_stdio.py +496 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_discover.py +65 -8
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_docker.py +1 -1
- comodor-2.0.1/tests/test_docs_current.py +92 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_doctor.py +159 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_facts.py +188 -0
- comodor-2.0.1/tests/test_github_connect_flow.py +619 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_headless.py +82 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_help.py +13 -2
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_input.py +2 -82
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_learning.py +64 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_local.py +1 -0
- comodor-2.0.1/tests/test_mode_policy.py +394 -0
- comodor-2.0.1/tests/test_onboarding.py +1424 -0
- comodor-2.0.1/tests/test_package_metadata.py +69 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_plan_memory.py +0 -18
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_project_check.py +4 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_propose_mode.py +22 -7
- comodor-2.0.1/tests/test_protocol.py +744 -0
- comodor-2.0.1/tests/test_protocol_interactions.py +485 -0
- comodor-2.0.1/tests/test_protocol_performance.py +152 -0
- comodor-2.0.1/tests/test_protocol_permissions.py +467 -0
- comodor-2.0.1/tests/test_protocol_questions.py +250 -0
- comodor-2.0.1/tests/test_protocol_schema.py +137 -0
- comodor-2.0.1/tests/test_protocol_sessions.py +286 -0
- comodor-2.0.1/tests/test_protocol_streaming.py +869 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_providers.py +37 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_questions.py +2 -104
- comodor-2.0.1/tests/test_release_reconcile.py +1155 -0
- comodor-2.0.1/tests/test_release_rehearsal.py +830 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_release_workflow.py +82 -5
- comodor-2.0.1/tests/test_session_delegates.py +487 -0
- comodor-2.0.1/tests/test_session_journal.py +377 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_setup.py +404 -19
- comodor-2.0.1/tests/test_setup_github.py +365 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_setup_import.py +61 -10
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_smart_approvals.py +5 -5
- comodor-2.0.1/tests/test_transport_commands.py +356 -0
- comodor-2.0.1/tests/test_tui_default.py +232 -0
- comodor-2.0.1/tests/test_tui_runtime.py +232 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_whatsapp.py +1 -1
- comodor-2.0.1/tests/test_workbench.py +623 -0
- comodor-2.0.1/tests/test_workspace_bins.py +74 -0
- comodor-1.2.0/src/comodor/ui/__init__.py +0 -9
- comodor-1.2.0/src/comodor/ui/app.py +0 -2346
- comodor-1.2.0/src/comodor/ui/bidi.py +0 -97
- comodor-1.2.0/src/comodor/ui/input/__init__.py +0 -15
- comodor-1.2.0/src/comodor/ui/layout.py +0 -378
- comodor-1.2.0/src/comodor/ui/markdown.py +0 -153
- comodor-1.2.0/src/comodor/ui/screen.py +0 -289
- comodor-1.2.0/src/comodor/ui/widgets/__init__.py +0 -21
- comodor-1.2.0/src/comodor/ui/widgets/buttons.py +0 -110
- comodor-1.2.0/src/comodor/ui/widgets/chat.py +0 -415
- comodor-1.2.0/src/comodor/ui/widgets/history.py +0 -300
- comodor-1.2.0/src/comodor/ui/widgets/overlay.py +0 -303
- comodor-1.2.0/src/comodor/ui/widgets/panel.py +0 -89
- comodor-1.2.0/src/comodor/ui/widgets/progress.py +0 -146
- comodor-1.2.0/src/comodor/ui/widgets/prompt.py +0 -482
- comodor-1.2.0/src/comodor/ui/widgets/questions.py +0 -358
- comodor-1.2.0/src/comodor/ui/widgets/statusbar.py +0 -239
- comodor-1.2.0/src/comodor/ui/widgets/toast.py +0 -82
- comodor-1.2.0/src/comodor/ui/widgets/welcome.py +0 -380
- comodor-1.2.0/tests/test_app.py +0 -921
- comodor-1.2.0/tests/test_bidi.py +0 -242
- comodor-1.2.0/tests/test_copy_and_bands.py +0 -292
- comodor-1.2.0/tests/test_layout.py +0 -750
- comodor-1.2.0/tests/test_progress.py +0 -187
- comodor-1.2.0/tests/test_run_loop.py +0 -167
- comodor-1.2.0/tests/test_slash_completions.py +0 -821
- comodor-1.2.0/tests/test_switching_model.py +0 -158
- comodor-1.2.0/tests/test_welcome.py +0 -371
- {comodor-1.2.0 → comodor-2.0.1}/LICENSE +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/bench/README.md +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/bench/tasks/careful-unknowable/repo/README.md +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/docs/upgrade-specs/README.md +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/__main__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/commands.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/jsonrpc.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/claims.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/constraints.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/context.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/plan.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/prompts.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/staleness.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/tokens.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/tool_bridge.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/verify.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/schema.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/session_map.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/cdp.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/launch.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/page.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/catalogue.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/breaker.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/busy.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/daemon.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/ledger.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/markdown.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/settings.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/unit.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/context_refs.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/deliver.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/jobs.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/parse.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/runner.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/scheduler.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/keys.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/overlay.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/png.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/quartz.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/screen.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/win32.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/x11.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/bot.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/gateway.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/service.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/unit.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/identity.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/repos.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/tokens.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/image_gen/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/image_gen/registry.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/insights.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/associations.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/bm25.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/curator.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/facts.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/hotindex.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/progress.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/http_generic.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/reflect.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/render.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/writer.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/catalogue.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/download.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/models.json +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/provider.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/runtime.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/store.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/catalogue.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/commands.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/http.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/protocol.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/ingest.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/route.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/migrate.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/http.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/sse.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/ws.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/paths.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/commands.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/manager.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/anthropic.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/base.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/caching.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/discover.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/models.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/oauth.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/openai_compat.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/profile.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/registry.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/questions.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/backends.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/mining.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/redact.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/smart.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/ssrf.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/search.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/store.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/catalogue.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/ledger.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/linter.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/loader.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/propose.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/registry.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/threats.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/usage.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/blocks.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/bot.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/service.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/socket.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/unit.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/bot.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/keyboard.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/service.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/unit.py +0 -0
- {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/banner.py +0 -0
- {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/console.py +0 -0
- {comodor-1.2.0/src/comodor/ui/input → comodor-2.0.1/src/comodor/terminal}/keys.py +0 -0
- {comodor-1.2.0/src/comodor/ui/input → comodor-2.0.1/src/comodor/terminal}/reader.py +0 -0
- {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/theme.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/browse.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/browser.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/cronjob.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/delegate.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/github.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/history.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/image_gen.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/matching.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/mcp.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/mcp_resources.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/overflow.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/plugin.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/search.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/shell.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/skill_manage.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/skills.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/todo.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/verify.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/vision.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/web.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/uninstall.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/update.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/vision.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/stt.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/tts.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/index.html +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/server.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/session.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/ui.css +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/ui.js +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/vazirmatn-OFL.txt +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/vazirmatn.woff2 +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/subs.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/__init__.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/bot.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/guide.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/menu.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/service.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/tunnel.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/unit.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/webhook.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/conftest.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/support/fake_mcp_server.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_acp.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_agent_loop.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_api.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_approval_mining.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_associations.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_backends.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_bench.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_breaker.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_browser.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_busy_modes.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_caching.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_capability_map.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_channel_service.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_claims.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_constraints.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_context_refs.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_cron.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_cronjob.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_curator.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_delegate.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_delivery_ledger.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_desktop.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_discord.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_github.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_github_identity.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_github_tool.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_history.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_image_gen.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_import_command.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_insights.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_journey.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_key_pool.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_live_settings.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_markdown.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_matching.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp_http.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp_resources.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_media.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_memory_provider.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_memory_tool.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_migrate.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_nothing_is_left_running.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_oauth.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_overflow.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_overlay.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_overlay_buttons.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_performance.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_plugins.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_prefix_stability.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_profile.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_profiles.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_propose.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_quartz_backend.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_browser.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_desktop.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_web_ui.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_reflex.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_revoked_writes.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_budget.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_catalogue.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_manage.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_skills.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_slack.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_source_hygiene.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_ssrf.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_staleness.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_surface_impact_contract.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_telegram.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_tool_bridge.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_tools.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_uninstall.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_update.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_verify.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_vision_tool.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_voice.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_web.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_webhook.py +0 -0
- {comodor-1.2.0 → comodor-2.0.1}/tests/test_x11_backend.py +0 -0
|
@@ -30,6 +30,14 @@ next-env.d.ts
|
|
|
30
30
|
npm-debug.log*
|
|
31
31
|
CLAUDE.md
|
|
32
32
|
dist/
|
|
33
|
+
# The production TUI renderer is a deliberate, generated, committed artifact
|
|
34
|
+
# under this one path: the wheel is built from the repository, so the bundle
|
|
35
|
+
# and its manifest are versioned. Rebuild with
|
|
36
|
+
# `bun tools/build-tui-distribution.ts`; never edit those files by hand.
|
|
37
|
+
!src/comodor/tui/dist/
|
|
38
|
+
# Its OpenTUI native backend ships inside the artifact — the one directory
|
|
39
|
+
# named node_modules that is deliberately tracked.
|
|
40
|
+
!src/comodor/tui/dist/node_modules/
|
|
33
41
|
__sample
|
|
34
42
|
|
|
35
43
|
TODO
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: comodor
|
|
3
|
-
Version:
|
|
4
|
-
Summary: Comodor — a self-improving terminal coding agent with
|
|
3
|
+
Version: 2.0.1
|
|
4
|
+
Summary: Comodor — a self-improving terminal coding agent with an OpenTUI interface
|
|
5
5
|
Project-URL: Homepage, https://comodor.ai
|
|
6
6
|
Project-URL: Repository, https://github.com/ifekri/Comodor
|
|
7
7
|
Project-URL: Issues, https://github.com/ifekri/Comodor/issues
|
|
@@ -9,19 +9,17 @@ Project-URL: Changelog, https://github.com/ifekri/Comodor/blob/main/CHANGELOG.md
|
|
|
9
9
|
Author-email: Mmdrza <devfekri@gmail.com>
|
|
10
10
|
License: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Keywords: agent,cli,coding-assistant,llm,
|
|
12
|
+
Keywords: agent,cli,coding-assistant,llm,opentui,terminal,tui
|
|
13
13
|
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
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
23
21
|
Classifier: Topic :: Software Development :: Code Generators
|
|
24
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.11
|
|
25
23
|
Requires-Dist: rich>=13.7
|
|
26
24
|
Provides-Extra: dev
|
|
27
25
|
Requires-Dist: pytest-xdist>=3.5; extra == 'dev'
|
|
@@ -44,38 +42,24 @@ or the next one. Not a setting you turn on. Not a file you maintain.
|
|
|
44
42
|
[](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
|
|
45
43
|
[](LICENSE)
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</a>
|
|
66
|
-
<a href="/docs/RU/README.md">
|
|
67
|
-
<img src="https://img.shields.io/badge/Docs-RU-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Russian Docs" />
|
|
68
|
-
</a>
|
|
69
|
-
<a href="/docs/FR/README.md">
|
|
70
|
-
<img src="https://img.shields.io/badge/Docs-FR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="French Docs" />
|
|
71
|
-
</a>
|
|
72
|
-
<a href="/docs/ZH/README.md">
|
|
73
|
-
<img src="https://img.shields.io/badge/Docs-ZH-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Zhongwen Docs" />
|
|
74
|
-
</a>
|
|
75
|
-
</p>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
[**comodor.ai**](https://comodor.ai) · [Installation](#install) · [Documentation](docs/README.md 'Comodor Documentation English')
|
|
45
|
+
[](/docs/README.md)
|
|
46
|
+
[ Docs")](/docs/FA/README.md)
|
|
47
|
+
[](/docs/AR/README.md)
|
|
48
|
+
[](/docs/TR/README.md)
|
|
49
|
+
[](/docs/DE/README.md)
|
|
50
|
+
[](/docs/ES/README.md)
|
|
51
|
+
[](/docs/RU/README.md)
|
|
52
|
+
[](/docs/FR/README.md)
|
|
53
|
+
[](/docs/ZH/README.md)
|
|
54
|
+
|
|
55
|
+
[](https://comodor.ai)
|
|
56
|
+
|
|
57
|
+
[](#windows 'Install Comodor on Windows')
|
|
58
|
+
[](#linux--macos 'Install Comodor on Mac')
|
|
59
|
+
[](#linux--macos 'Install Comodor on Linux')
|
|
60
|
+
[](#install-with-uv 'Install Comodor with UV')
|
|
61
|
+
[](#install-with-pip 'Install Comodor with PIP')
|
|
62
|
+
[](#install-with-pipx 'Install Comodor with PIPX')
|
|
79
63
|
|
|
80
64
|
---
|
|
81
65
|
|
|
@@ -102,8 +86,8 @@ behind the correction, tells you the rule it wrote, and follows it from then on.
|
|
|
102
86
|
|
|
103
87
|
Those are real, read out of a working install.
|
|
104
88
|
|
|
105
|
-
|
|
106
|
-
falling or not. A number, not a claim.
|
|
89
|
+
`comodor insights` shows whether that is actually working — corrections per
|
|
90
|
+
task, falling or not. A number, not a claim.
|
|
107
91
|
|
|
108
92
|
## Whether it is any good, measured
|
|
109
93
|
|
|
@@ -133,7 +117,7 @@ The whole table, and how to run it against your own model, is in
|
|
|
133
117
|
| | |
|
|
134
118
|
|---|---|
|
|
135
119
|
| **Asks instead of guessing** | When a request reads two ways it settles what it can by reading your code, then puts the rest as one short form — before writing anything. [→](docs/questions.md) |
|
|
136
|
-
| **Never surprises you** | Reading is silent. Writing shows a diff. Commands ask. Every change is checkpointed
|
|
120
|
+
| **Never surprises you** | Reading is silent. Writing shows a diff. Commands ask. Every change is checkpointed. [→](docs/safety.md) |
|
|
137
121
|
| **Drives a real browser** | One that runs JavaScript, keeps cookies and can log in — not a page fetcher. [→](docs/browser.md) |
|
|
138
122
|
| **Uses your screen** | Mouse and keyboard in any application, with a halo showing where it is about to click before it clicks. [→](docs/computer.md) |
|
|
139
123
|
| **Runs on your phone** | Telegram, Slack or WhatsApp — the whole interface as buttons, running in the background whether or not a terminal is open. Read-only until you say otherwise. [→](docs/telegram.md) · [→](docs/slack.md) · [→](docs/whatsapp.md) |
|
|
@@ -143,21 +127,24 @@ The whole table, and how to run it against your own model, is in
|
|
|
143
127
|
| **Works with any model** | Sixteen hosted providers and three local runtimes, or anything with an OpenAI-compatible URL. [→](docs/models.md) |
|
|
144
128
|
| **Costs less** | 86% of input tokens served from cache, measured — not estimated. [→](docs/cost.md) |
|
|
145
129
|
|
|
146
|
-
**One dependency.** The HTTP client, the SSE reader, the WebSocket that
|
|
147
|
-
Chrome, the PNG encoder for screenshots, the Telegram client — all
|
|
148
|
-
Installing Comodor pulls in `rich` and nothing else
|
|
130
|
+
**One Python dependency.** The HTTP client, the SSE reader, the WebSocket that
|
|
131
|
+
drives Chrome, the PNG encoder for screenshots, the Telegram client — all
|
|
132
|
+
written here. Installing Comodor pulls in `rich` and nothing else; the terminal
|
|
133
|
+
interface itself is shipped inside the package and needs only
|
|
134
|
+
[Bun](https://bun.sh) on the machine that runs it (the renderer binds native
|
|
135
|
+
code through `bun:ffi`). `comodor doctor` reports the Bun state plainly;
|
|
136
|
+
without Bun, `comodor run "..."` does one task with no interface and
|
|
137
|
+
`comodor web` serves one to a browser.
|
|
149
138
|
|
|
150
|
-
## Install
|
|
139
|
+
## Install (Recommended)
|
|
151
140
|
|
|
152
|
-
###
|
|
153
|
-
|
|
154
|
-
#### Linux / MacOS
|
|
141
|
+
### Linux / MacOS
|
|
155
142
|
|
|
156
143
|
```bash
|
|
157
144
|
curl -fsSL get.comodor.ai | sh
|
|
158
145
|
```
|
|
159
146
|
|
|
160
|
-
|
|
147
|
+
### Windows
|
|
161
148
|
|
|
162
149
|
```bash
|
|
163
150
|
irm get.comodor.ai | iex
|
|
@@ -229,8 +216,9 @@ Published to both [Docker Hub](https://hub.docker.com/r/ifekri/comodor)
|
|
|
229
216
|
Full details, including how to reach it from another machine safely:
|
|
230
217
|
[Docker](docs/docker.md).
|
|
231
218
|
|
|
232
|
-
Then `comodor`. Python 3.11 or newer.
|
|
233
|
-
|
|
219
|
+
Then `comodor`. Python 3.11 or newer, and [Bun](https://bun.sh) for the
|
|
220
|
+
interface itself (one install, `curl -fsSL https://bun.sh/install | bash` or
|
|
221
|
+
your platform's package manager). Six questions the first time, never again.
|
|
234
222
|
|
|
235
223
|
**No API key?** `comodor --demo` runs the whole interface offline. Or pick a
|
|
236
224
|
local model in the setup and pay nothing, ever.
|
|
@@ -250,10 +238,9 @@ comodor doctor # is everything alright?
|
|
|
250
238
|
```
|
|
251
239
|
|
|
252
240
|
```
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
Esc stop it F3 cycle mode
|
|
241
|
+
Tab act · plan · ask Ctrl+K every command, searchable
|
|
242
|
+
Ctrl+B tasks and agents End back to the newest output
|
|
243
|
+
Ctrl+C stop it; quit when idle
|
|
257
244
|
```
|
|
258
245
|
|
|
259
246
|
## Documentation
|
|
@@ -12,38 +12,24 @@ or the next one. Not a setting you turn on. Not a file you maintain.
|
|
|
12
12
|
[](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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')
|
|
15
|
+
[](/docs/README.md)
|
|
16
|
+
[ Docs")](/docs/FA/README.md)
|
|
17
|
+
[](/docs/AR/README.md)
|
|
18
|
+
[](/docs/TR/README.md)
|
|
19
|
+
[](/docs/DE/README.md)
|
|
20
|
+
[](/docs/ES/README.md)
|
|
21
|
+
[](/docs/RU/README.md)
|
|
22
|
+
[](/docs/FR/README.md)
|
|
23
|
+
[](/docs/ZH/README.md)
|
|
24
|
+
|
|
25
|
+
[](https://comodor.ai)
|
|
26
|
+
|
|
27
|
+
[](#windows 'Install Comodor on Windows')
|
|
28
|
+
[](#linux--macos 'Install Comodor on Mac')
|
|
29
|
+
[](#linux--macos 'Install Comodor on Linux')
|
|
30
|
+
[](#install-with-uv 'Install Comodor with UV')
|
|
31
|
+
[](#install-with-pip 'Install Comodor with PIP')
|
|
32
|
+
[](#install-with-pipx 'Install Comodor with PIPX')
|
|
47
33
|
|
|
48
34
|
---
|
|
49
35
|
|
|
@@ -70,8 +56,8 @@ behind the correction, tells you the rule it wrote, and follows it from then on.
|
|
|
70
56
|
|
|
71
57
|
Those are real, read out of a working install.
|
|
72
58
|
|
|
73
|
-
|
|
74
|
-
falling or not. A number, not a claim.
|
|
59
|
+
`comodor insights` shows whether that is actually working — corrections per
|
|
60
|
+
task, falling or not. A number, not a claim.
|
|
75
61
|
|
|
76
62
|
## Whether it is any good, measured
|
|
77
63
|
|
|
@@ -101,7 +87,7 @@ The whole table, and how to run it against your own model, is in
|
|
|
101
87
|
| | |
|
|
102
88
|
|---|---|
|
|
103
89
|
| **Asks instead of guessing** | When a request reads two ways it settles what it can by reading your code, then puts the rest as one short form — before writing anything. [→](docs/questions.md) |
|
|
104
|
-
| **Never surprises you** | Reading is silent. Writing shows a diff. Commands ask. Every change is checkpointed
|
|
90
|
+
| **Never surprises you** | Reading is silent. Writing shows a diff. Commands ask. Every change is checkpointed. [→](docs/safety.md) |
|
|
105
91
|
| **Drives a real browser** | One that runs JavaScript, keeps cookies and can log in — not a page fetcher. [→](docs/browser.md) |
|
|
106
92
|
| **Uses your screen** | Mouse and keyboard in any application, with a halo showing where it is about to click before it clicks. [→](docs/computer.md) |
|
|
107
93
|
| **Runs on your phone** | Telegram, Slack or WhatsApp — the whole interface as buttons, running in the background whether or not a terminal is open. Read-only until you say otherwise. [→](docs/telegram.md) · [→](docs/slack.md) · [→](docs/whatsapp.md) |
|
|
@@ -111,21 +97,24 @@ The whole table, and how to run it against your own model, is in
|
|
|
111
97
|
| **Works with any model** | Sixteen hosted providers and three local runtimes, or anything with an OpenAI-compatible URL. [→](docs/models.md) |
|
|
112
98
|
| **Costs less** | 86% of input tokens served from cache, measured — not estimated. [→](docs/cost.md) |
|
|
113
99
|
|
|
114
|
-
**One dependency.** The HTTP client, the SSE reader, the WebSocket that
|
|
115
|
-
Chrome, the PNG encoder for screenshots, the Telegram client — all
|
|
116
|
-
Installing Comodor pulls in `rich` and nothing else
|
|
100
|
+
**One Python dependency.** The HTTP client, the SSE reader, the WebSocket that
|
|
101
|
+
drives Chrome, the PNG encoder for screenshots, the Telegram client — all
|
|
102
|
+
written here. Installing Comodor pulls in `rich` and nothing else; the terminal
|
|
103
|
+
interface itself is shipped inside the package and needs only
|
|
104
|
+
[Bun](https://bun.sh) on the machine that runs it (the renderer binds native
|
|
105
|
+
code through `bun:ffi`). `comodor doctor` reports the Bun state plainly;
|
|
106
|
+
without Bun, `comodor run "..."` does one task with no interface and
|
|
107
|
+
`comodor web` serves one to a browser.
|
|
117
108
|
|
|
118
|
-
## Install
|
|
109
|
+
## Install (Recommended)
|
|
119
110
|
|
|
120
|
-
###
|
|
121
|
-
|
|
122
|
-
#### Linux / MacOS
|
|
111
|
+
### Linux / MacOS
|
|
123
112
|
|
|
124
113
|
```bash
|
|
125
114
|
curl -fsSL get.comodor.ai | sh
|
|
126
115
|
```
|
|
127
116
|
|
|
128
|
-
|
|
117
|
+
### Windows
|
|
129
118
|
|
|
130
119
|
```bash
|
|
131
120
|
irm get.comodor.ai | iex
|
|
@@ -197,8 +186,9 @@ Published to both [Docker Hub](https://hub.docker.com/r/ifekri/comodor)
|
|
|
197
186
|
Full details, including how to reach it from another machine safely:
|
|
198
187
|
[Docker](docs/docker.md).
|
|
199
188
|
|
|
200
|
-
Then `comodor`. Python 3.11 or newer.
|
|
201
|
-
|
|
189
|
+
Then `comodor`. Python 3.11 or newer, and [Bun](https://bun.sh) for the
|
|
190
|
+
interface itself (one install, `curl -fsSL https://bun.sh/install | bash` or
|
|
191
|
+
your platform's package manager). Six questions the first time, never again.
|
|
202
192
|
|
|
203
193
|
**No API key?** `comodor --demo` runs the whole interface offline. Or pick a
|
|
204
194
|
local model in the setup and pay nothing, ever.
|
|
@@ -218,10 +208,9 @@ comodor doctor # is everything alright?
|
|
|
218
208
|
```
|
|
219
209
|
|
|
220
210
|
```
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
Esc stop it F3 cycle mode
|
|
211
|
+
Tab act · plan · ask Ctrl+K every command, searchable
|
|
212
|
+
Ctrl+B tasks and agents End back to the newest output
|
|
213
|
+
Ctrl+C stop it; quit when idle
|
|
225
214
|
```
|
|
226
215
|
|
|
227
216
|
## Documentation
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [الواجهة](interface.md) |
|
|
24
|
+
| [الواجهة](interface.md) | ما على الشاشة، والمفاتيح، والأنماط، ومتى يسألك شيئًا |
|
|
25
25
|
| [من الطرفية](cli.md) | كل أمر وكل علَم، مع أمثلة |
|
|
26
26
|
| [ما يستطيع الوكيل فعله](tools.md) | الأدوات الـ 13 التي يملكها، ومتى يستخدم كلًا منها |
|
|
27
27
|
| [المهارات](skills.md) | إجراءات تكتبها مرة واحدة ويتّبعها |
|
|
@@ -69,7 +69,7 @@ comodor # it asks a few questions, once
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
ثم اكتب ما تريد. صحّحه عندما يخطئ — عدّل الملف بنفسك أو قل ذلك فقط — ويتعلم.
|
|
72
|
-
يُظهر لك
|
|
72
|
+
يُظهر لك `comodor insights` ما إذا كان ذلك يعمل فعلًا.
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
75
|
comodor run "fix the failing test in tests/test_parser.py" # one task, no interface
|
|
@@ -83,11 +83,11 @@ comodor help # the written help
|
|
|
83
83
|
**يتعلم من التصحيحات، لا من المدح.** معظم الوكلاء ينسون في اللحظة التي تنتهي
|
|
84
84
|
فيها الجلسة. يراقب Comodor ما تغيّره في مخرجاته ويحوّله إلى درس بدرجة ثقة
|
|
85
85
|
ترتفع عندما يثبت صحه وتنخفض عندما لا يثبت. يشرح [كيف يتعلم](learning.md)
|
|
86
|
-
الآلية؛ ويعرض
|
|
86
|
+
الآلية؛ ويعرض `comodor insights` الدليل.
|
|
87
87
|
|
|
88
88
|
**يسأل قبل أن يتصرف، وكل شيء قابل للتراجع.** القراءة صامتة. الكتابة تسأل.
|
|
89
|
-
تشغيل أمر يسأل بصوت أعلى. كل كتابة
|
|
90
|
-
|
|
89
|
+
تشغيل أمر يسأل بصوت أعلى. كل كتابة تُحفظ أولًا كنقطة استرجاع، فلا يضيع المحتوى
|
|
90
|
+
السابق أبدًا. [السلامة والأذونات](safety.md).
|
|
91
91
|
|
|
92
92
|
**تبعية واحدة.** عميل HTTP، وقارئ SSE، وWebSocket الخاص بالمتصفح، ومشفّر PNG
|
|
93
93
|
للقطات الشاشة — كلها جزء من الحزمة. يُدخل تثبيت Comodor `rich` ولا شيء غيرها.
|
|
@@ -103,7 +103,7 @@ comodor help # the written help
|
|
|
103
103
|
|
|
104
104
|
| | |
|
|
105
105
|
|---|---|
|
|
106
|
-
| [CHANGELOG](
|
|
107
|
-
| [CONTRIBUTING](
|
|
108
|
-
| [SECURITY](
|
|
109
|
-
| [RELEASING](
|
|
106
|
+
| [CHANGELOG](../../CHANGELOG.md) | ما تغيّر، ولماذا |
|
|
107
|
+
| [CONTRIBUTING](../../CONTRIBUTING.md) | العمل على Comodor نفسه |
|
|
108
|
+
| [SECURITY](../../SECURITY.md) | الإبلاغ عن أمر حساس |
|
|
109
|
+
| [RELEASING](../../RELEASING.md) | كيف يُقطَع إصدار |
|
|
@@ -21,7 +21,7 @@ endet damit, dass der Agent etwas Nützliches tut.
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [Die Oberfläche](interface.md) |
|
|
24
|
+
| [Die Oberfläche](interface.md) | Was auf dem Bildschirm ist, die Tasten, die Modi, und wann sie Sie etwas fragt |
|
|
25
25
|
| [Aus dem Terminal](cli.md) | Jeder Befehl und jedes Flag, mit Beispielen |
|
|
26
26
|
| [Was der Agent kann](tools.md) | Die 13 Werkzeuge, die er hat, und wann er welches einsetzt |
|
|
27
27
|
| [Skills](skills.md) | Abläufe, die Sie einmal schreiben und denen er folgt |
|
|
@@ -69,8 +69,8 @@ comodor # es stellt ein paar Fragen, einmalig
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
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.
|
|
73
|
-
zeigt Ihnen, ob das tatsächlich funktioniert.
|
|
72
|
+
ändern Sie die Datei oder sagen Sie es einfach — und es lernt. `comodor
|
|
73
|
+
insights` zeigt Ihnen, ob das tatsächlich funktioniert.
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
comodor run "fix the failing test in tests/test_parser.py" # eine Aufgabe, keine Oberfläche
|
|
@@ -85,12 +85,12 @@ comodor help # die geschriebene
|
|
|
85
85
|
Moment, in dem eine Sitzung endet. Comodor beobachtet, was Sie an seiner
|
|
86
86
|
Ausgabe ändern, und macht daraus eine Lektion mit einem Vertrauenswert, der
|
|
87
87
|
steigt, wenn sie sich bewährt, und sinkt, wenn nicht. [Wie er lernt](learning.md)
|
|
88
|
-
erklärt den Mechanismus;
|
|
88
|
+
erklärt den Mechanismus; `comodor insights` zeigt die Belege.
|
|
89
89
|
|
|
90
90
|
**Es fragt, bevor es handelt, und alles ist rückgängig zu machen.** Lesen
|
|
91
91
|
geschieht stillschweigend. Schreiben fragt. Ein Befehl fragt deutlicher. Jeder
|
|
92
|
-
Schreibvorgang wird als Prüfpunkt gesichert,
|
|
93
|
-
|
|
92
|
+
Schreibvorgang wird zuerst als Prüfpunkt gesichert, sodass der vorherige Inhalt
|
|
93
|
+
nie verloren ist. [Sicherheit und Berechtigungen](safety.md).
|
|
94
94
|
|
|
95
95
|
**Eine einzige Abhängigkeit.** Der HTTP-Client, der SSE-Reader, das WebSocket
|
|
96
96
|
für den Browser, der PNG-Encoder für Screenshots — alles Teil des Pakets. Die
|
|
@@ -108,7 +108,7 @@ zeigt, wo er als Nächstes klicken wird. [Browser](browser.md),
|
|
|
108
108
|
|
|
109
109
|
| | |
|
|
110
110
|
|---|---|
|
|
111
|
-
| [CHANGELOG](
|
|
112
|
-
| [CONTRIBUTING](
|
|
113
|
-
| [SECURITY](
|
|
114
|
-
| [RELEASING](
|
|
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 |
|
|
@@ -21,7 +21,7 @@ termina con el agente haciendo algo útil.
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [La interfaz](interface.md) |
|
|
24
|
+
| [La interfaz](interface.md) | Qué hay en pantalla, las teclas, los modos y cuándo te pregunta algo |
|
|
25
25
|
| [Desde la terminal](cli.md) | Todos los comandos y flags, con ejemplos |
|
|
26
26
|
| [Lo que el agente puede hacer](tools.md) | Las 13 herramientas que tiene y cuándo usa cada una |
|
|
27
27
|
| [Skills](skills.md) | Procedimientos que escribes una vez y él sigue |
|
|
@@ -69,8 +69,8 @@ comodor # it asks a few questions, once
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Luego escribe lo que quieras. Corrígelo cuando se equivoque — edita el archivo,
|
|
72
|
-
o simplemente díselo — y aprende.
|
|
73
|
-
funcionando.
|
|
72
|
+
o simplemente díselo — y aprende. `comodor insights` te muestra si eso
|
|
73
|
+
realmente está funcionando.
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
comodor run "fix the failing test in tests/test_parser.py" # one task, no interface
|
|
@@ -84,13 +84,13 @@ comodor help # the written help
|
|
|
84
84
|
**Aprende de las correcciones, no de los elogios.** La mayoría de los agentes
|
|
85
85
|
olvidan en cuanto termina la sesión. Comodor observa qué cambias de su salida y
|
|
86
86
|
lo convierte en una lección con una confianza que sube cuando se cumple y baja
|
|
87
|
-
cuando no. [Cómo aprende](learning.md) explica el mecanismo;
|
|
88
|
-
la evidencia.
|
|
87
|
+
cuando no. [Cómo aprende](learning.md) explica el mecanismo; `comodor insights`
|
|
88
|
+
muestra la evidencia.
|
|
89
89
|
|
|
90
90
|
**Pregunta antes de actuar, y todo es reversible.** Leer es silencioso.
|
|
91
91
|
Escribir pregunta. Ejecutar un comando pregunta más fuerte. Cada escritura tiene
|
|
92
|
-
un punto de control,
|
|
93
|
-
permisos](safety.md).
|
|
92
|
+
primero un punto de control, así que el contenido anterior nunca se pierde.
|
|
93
|
+
[Seguridad y permisos](safety.md).
|
|
94
94
|
|
|
95
95
|
**Una sola dependencia.** El cliente HTTP, el lector de SSE, el WebSocket para
|
|
96
96
|
el navegador, el codificador PNG para las capturas de pantalla — todo parte del
|
|
@@ -107,7 +107,7 @@ a hacer clic. [Navegador](browser.md), [pantalla](computer.md).
|
|
|
107
107
|
|
|
108
108
|
| | |
|
|
109
109
|
|---|---|
|
|
110
|
-
| [CHANGELOG](
|
|
111
|
-
| [CONTRIBUTING](
|
|
112
|
-
| [SECURITY](
|
|
113
|
-
| [RELEASING](
|
|
110
|
+
| [CHANGELOG](../../CHANGELOG.md) | Qué cambió, y por qué |
|
|
111
|
+
| [CONTRIBUTING](../../CONTRIBUTING.md) | Trabajar en el propio Comodor |
|
|
112
|
+
| [SECURITY](../../SECURITY.md) | Reportar algo delicado |
|
|
113
|
+
| [RELEASING](../../RELEASING.md) | Cómo se corta una versión |
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [رابط کاربری](interface.md) |
|
|
24
|
+
| [رابط کاربری](interface.md) | آنچه روی صفحه است، کلیدها، حالتها، و وقتی چیزی از شما میپرسد |
|
|
25
25
|
| [از ترمینال](cli.md) | تکتک فرمانها و پرچمها، با مثال |
|
|
26
26
|
| [کارهایی که عامل میتواند بکند](tools.md) | ۱۳ ابزاری که دارد، و چه زمانی از هرکدام استفاده میکند |
|
|
27
27
|
| [مهارتها](skills.md) | رویههایی که یک بار مینویسید و عامل آنها را دنبال میکند |
|
|
@@ -69,8 +69,8 @@ comodor # چند پرسش میپرسد، فقط یک بار
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
سپس بنویسید چه میخواهید. وقتی اشتباه کرد اصلاحش کنید — فایل را ویرایش کنید،
|
|
72
|
-
یا همینطور بگویید — و یاد میگیرد.
|
|
73
|
-
جواب میدهد.
|
|
72
|
+
یا همینطور بگویید — و یاد میگیرد. `comodor insights` نشان میدهد که آیا این
|
|
73
|
+
واقعاً جواب میدهد.
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
comodor run "fix the failing test in tests/test_parser.py" # یک وظیفه، بدون رابط
|
|
@@ -85,11 +85,11 @@ comodor help # صفحهٔ راه
|
|
|
85
85
|
نشست همهچیز را فراموش میکنند. کامودور میبیند که در خروجیاش چه تغییر میدهید
|
|
86
86
|
و از آن درسی میسازد با اطمینانی که وقتی درست از آب درآید بالا میرود و وقتی
|
|
87
87
|
درست از آب درنیاید پایین میآید. [نحوهٔ یادگیری آن](learning.md) سازوکار را
|
|
88
|
-
توضیح میدهد؛
|
|
88
|
+
توضیح میدهد؛ `comodor insights` مدرک را نشان میدهد.
|
|
89
89
|
|
|
90
90
|
**قبل از عمل میپرسد، و همهچیز برگشتپذیر است.** خواندن بیصدا انجام میشود.
|
|
91
|
-
نوشتن میپرسد. اجرای یک فرمان بلندتر میپرسد. هر نوشتن یک نقطهٔ بازگشت
|
|
92
|
-
|
|
91
|
+
نوشتن میپرسد. اجرای یک فرمان بلندتر میپرسد. پیش از هر نوشتن یک نقطهٔ بازگشت
|
|
92
|
+
گرفته میشود، پس محتوای قبلی هرگز از دست نمیرود. [ایمنی و مجوزها](safety.md).
|
|
93
93
|
|
|
94
94
|
**فقط یک وابستگی.** کلاینت HTTP، خوانندهٔ SSE، وبسوکت مرورگر، رمزگذار PNG برای
|
|
95
95
|
تصاویر صفحه — همه بخشی از خود بستهاند. نصب کامودور `rich` را میکشد و هیچ
|
|
@@ -106,7 +106,7 @@ comodor help # صفحهٔ راه
|
|
|
106
106
|
|
|
107
107
|
| | |
|
|
108
108
|
|---|---|
|
|
109
|
-
| [CHANGELOG](
|
|
110
|
-
| [CONTRIBUTING](
|
|
111
|
-
| [SECURITY](
|
|
112
|
-
| [RELEASING](
|
|
109
|
+
| [CHANGELOG](../../CHANGELOG.md) | چه چیزی تغییر کرد، و چرا |
|
|
110
|
+
| [CONTRIBUTING](../../CONTRIBUTING.md) | کار روی خود کامودور |
|
|
111
|
+
| [SECURITY](../../SECURITY.md) | گزارش چیزی حساس |
|
|
112
|
+
| [RELEASING](../../RELEASING.md) | نحوهٔ برش یک انتشار |
|
|
@@ -21,7 +21,7 @@ se termine avec l'agent faisant quelque chose d'utile.
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [L'interface](interface.md) |
|
|
24
|
+
| [L'interface](interface.md) | Ce qu'il y a à l'écran, les touches, les modes, et quand elle vous demande quelque chose |
|
|
25
25
|
| [Depuis le terminal](cli.md) | Chaque commande et chaque option, avec des exemples |
|
|
26
26
|
| [Ce que l'agent peut faire](tools.md) | Les 13 outils dont il dispose, et quand il utilise chacun |
|
|
27
27
|
| [Compétences](skills.md) | Des procédures que vous écrivez une fois et qu'il suit |
|
|
@@ -69,8 +69,8 @@ comodor # it asks a few questions, once
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Tapez ensuite ce que vous voulez. Corrigez-le quand il se trompe — modifiez le
|
|
72
|
-
fichier, ou dites-le simplement — et il apprend.
|
|
73
|
-
fonctionne réellement.
|
|
72
|
+
fichier, ou dites-le simplement — et il apprend. `comodor insights` vous montre
|
|
73
|
+
si cela fonctionne réellement.
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
comodor run "fix the failing test in tests/test_parser.py" # one task, no interface
|
|
@@ -85,11 +85,11 @@ comodor help # the written help
|
|
|
85
85
|
oublient dès la fin d'une session. Comodor observe ce que vous modifiez dans ses
|
|
86
86
|
résultats et en fait une leçon dont la confiance monte quand elle se vérifie et
|
|
87
87
|
baisse quand elle ne se vérifie pas. [Comment il apprend](learning.md) explique
|
|
88
|
-
le mécanisme ;
|
|
88
|
+
le mécanisme ; `comodor insights` montre les preuves.
|
|
89
89
|
|
|
90
90
|
**Il demande avant d'agir, et tout est réversible.** Lire se fait en silence.
|
|
91
91
|
Écrire demande. Exécuter une commande demande plus fort. Chaque écriture est
|
|
92
|
-
sauvegardée,
|
|
92
|
+
d'abord sauvegardée, donc le contenu précédent n'est jamais perdu. [Sécurité et
|
|
93
93
|
permissions](safety.md).
|
|
94
94
|
|
|
95
95
|
**Une seule dépendance.** Le client HTTP, le lecteur SSE, le WebSocket pour le
|
|
@@ -108,7 +108,7 @@ vous montrant où il s'apprête à cliquer. [Navigateur](browser.md),
|
|
|
108
108
|
|
|
109
109
|
| | |
|
|
110
110
|
|---|---|
|
|
111
|
-
| [CHANGELOG](
|
|
112
|
-
| [CONTRIBUTING](
|
|
113
|
-
| [SECURITY](
|
|
114
|
-
| [RELEASING](
|
|
111
|
+
| [CHANGELOG](../../CHANGELOG.md) | Ce qui a changé, et pourquoi |
|
|
112
|
+
| [CONTRIBUTING](../../CONTRIBUTING.md) | Travailler sur Comodor lui-même |
|
|
113
|
+
| [SECURITY](../../SECURITY.md) | Signaler quelque chose de sensible |
|
|
114
|
+
| [RELEASING](../../RELEASING.md) | Comment une version est préparée |
|
|
@@ -21,7 +21,7 @@ ends with the agent doing something useful.
|
|
|
21
21
|
|
|
22
22
|
| | |
|
|
23
23
|
|---|---|
|
|
24
|
-
| [The interface](interface.md) |
|
|
24
|
+
| [The interface](interface.md) | What is on the screen, the keys, the modes, and when it asks you something |
|
|
25
25
|
| [From the terminal](cli.md) | Every command and flag, with examples |
|
|
26
26
|
| [What the agent can do](tools.md) | The 13 tools it has, and when it uses each |
|
|
27
27
|
| [Skills](skills.md) | Procedures you write once and it follows |
|
|
@@ -54,6 +54,15 @@ ends with the agent doing something useful.
|
|
|
54
54
|
| [Architecture](architecture.md) | Shared ownership, dependency direction, and product surfaces |
|
|
55
55
|
| [Surface parity contract](surface-parity.md) | Required PR impact assessment and verification evidence |
|
|
56
56
|
|
|
57
|
+
### Build a client for it
|
|
58
|
+
|
|
59
|
+
| | |
|
|
60
|
+
|---|---|
|
|
61
|
+
| [The application architecture](app-architecture.md) | Where the boundary between the core and an interface is drawn, and why |
|
|
62
|
+
| [The protocol](protocol.md) | What a core and a client say to each other, in one versioned contract |
|
|
63
|
+
| [The terminal interface](tui-v2.md) | The OpenTUI/React interface: what it needs to run, and what is on it |
|
|
64
|
+
| [The desktop application](desktop-architecture.md) | Planned, not built — and what the core must already be true for |
|
|
65
|
+
|
|
57
66
|
### When something is wrong
|
|
58
67
|
|
|
59
68
|
| | |
|
|
@@ -72,7 +81,8 @@ comodor # it asks a few questions, once
|
|
|
72
81
|
```
|
|
73
82
|
|
|
74
83
|
Then type what you want. Correct it when it is wrong — edit the file, or just
|
|
75
|
-
say so — and it learns.
|
|
84
|
+
say so — and it learns. `comodor insights` shows you whether that is actually
|
|
85
|
+
working.
|
|
76
86
|
|
|
77
87
|
```bash
|
|
78
88
|
comodor run "fix the failing test in tests/test_parser.py" # one task, no interface
|
|
@@ -86,12 +96,12 @@ comodor help # the written help
|
|
|
86
96
|
**It learns from corrections, not from praise.** Most agents forget the moment
|
|
87
97
|
a session ends. Comodor watches what you change about its output and turns that
|
|
88
98
|
into a lesson with a confidence that rises when it holds and falls when it does
|
|
89
|
-
not. [How it learns](learning.md) explains the mechanism;
|
|
90
|
-
evidence.
|
|
99
|
+
not. [How it learns](learning.md) explains the mechanism; `comodor insights`
|
|
100
|
+
shows the evidence.
|
|
91
101
|
|
|
92
102
|
**It asks before it acts, and everything is reversible.** Reading is silent.
|
|
93
|
-
Writing asks. Running a command asks louder. Every write is checkpointed,
|
|
94
|
-
|
|
103
|
+
Writing asks. Running a command asks louder. Every write is checkpointed first,
|
|
104
|
+
so the previous contents are never gone. [Safety and permissions](safety.md).
|
|
95
105
|
|
|
96
106
|
**One dependency.** The HTTP client, the SSE reader, the WebSocket for the
|
|
97
107
|
browser, the PNG encoder for screenshots — all part of the package. Installing
|