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.
Files changed (560) hide show
  1. {comodor-1.2.0 → comodor-2.0.1}/.gitignore +8 -0
  2. {comodor-1.2.0 → comodor-2.0.1}/PKG-INFO +42 -55
  3. {comodor-1.2.0 → comodor-2.0.1}/README.md +38 -49
  4. {comodor-1.2.0 → comodor-2.0.1}/docs/AR/README.md +9 -9
  5. {comodor-1.2.0 → comodor-2.0.1}/docs/DE/README.md +10 -10
  6. {comodor-1.2.0 → comodor-2.0.1}/docs/ES/README.md +11 -11
  7. {comodor-1.2.0 → comodor-2.0.1}/docs/FA/README.md +10 -10
  8. {comodor-1.2.0 → comodor-2.0.1}/docs/FR/README.md +9 -9
  9. {comodor-1.2.0 → comodor-2.0.1}/docs/README.md +16 -6
  10. {comodor-1.2.0 → comodor-2.0.1}/docs/RU/README.md +12 -12
  11. {comodor-1.2.0 → comodor-2.0.1}/docs/TR/README.md +10 -9
  12. {comodor-1.2.0 → comodor-2.0.1}/docs/ZH/README.md +8 -8
  13. {comodor-1.2.0 → comodor-2.0.1}/pyproject.toml +11 -7
  14. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/__init__.py +5 -1
  15. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/_version.py +2 -2
  16. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/agent.py +16 -34
  17. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/background.py +168 -19
  18. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/loop.py +39 -11
  19. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/spawn.py +20 -5
  20. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/server.py +1 -1
  21. comodor-2.0.1/src/comodor/application/__init__.py +1416 -0
  22. comodor-2.0.1/src/comodor/application/journal.py +543 -0
  23. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cli.py +74 -230
  24. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/config.py +127 -17
  25. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/commands.py +1 -1
  26. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/guard.py +2 -2
  27. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/commands.py +1 -1
  28. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/doctor.py +149 -2
  29. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/events.py +135 -5
  30. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/commands.py +108 -21
  31. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/connect.py +239 -16
  32. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/help.py +32 -37
  33. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/commands.py +1 -1
  34. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/journey.py +1 -1
  35. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/journey_commands.py +1 -1
  36. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/memory.py +94 -36
  37. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/base.py +1 -1
  38. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/commands.py +1 -1
  39. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/review.py +21 -5
  40. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/rules.py +2 -2
  41. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/signals.py +1 -1
  42. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/store.py +3 -2
  43. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/commands.py +1 -1
  44. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/manager.py +2 -2
  45. comodor-2.0.1/src/comodor/onboarding.py +1482 -0
  46. comodor-2.0.1/src/comodor/protocol/__init__.py +298 -0
  47. comodor-2.0.1/src/comodor/protocol/_generated.py +962 -0
  48. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/fake.py +9 -4
  49. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/gateway.py +1 -1
  50. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/pool.py +1 -1
  51. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/checkpoints.py +3 -3
  52. comodor-2.0.1/src/comodor/safety/modes.py +221 -0
  53. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/permissions.py +22 -7
  54. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/setup.py +791 -135
  55. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/commands.py +1 -1
  56. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/examples.py +2 -2
  57. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/commands.py +1 -1
  58. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/commands.py +1 -1
  59. comodor-2.0.1/src/comodor/terminal/__init__.py +20 -0
  60. {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/chooser.py +2 -2
  61. {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/clipboard.py +6 -5
  62. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/ask.py +2 -2
  63. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/base.py +29 -2
  64. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/computer.py +8 -6
  65. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/fs.py +5 -4
  66. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/memory.py +2 -2
  67. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/propose_mode.py +1 -1
  68. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/registry.py +19 -5
  69. comodor-2.0.1/src/comodor/transport/__init__.py +57 -0
  70. comodor-2.0.1/src/comodor/transport/commands.py +197 -0
  71. comodor-2.0.1/src/comodor/transport/jsonl.py +139 -0
  72. comodor-2.0.1/src/comodor/transport/server.py +273 -0
  73. comodor-2.0.1/src/comodor/tui/__init__.py +0 -0
  74. comodor-2.0.1/src/comodor/tui/dist/highlights-eq9cgrbb.scm +604 -0
  75. comodor-2.0.1/src/comodor/tui/dist/highlights-ghv9g403.scm +205 -0
  76. comodor-2.0.1/src/comodor/tui/dist/highlights-hk7bwhj4.scm +284 -0
  77. comodor-2.0.1/src/comodor/tui/dist/highlights-r812a2qc.scm +150 -0
  78. comodor-2.0.1/src/comodor/tui/dist/highlights-x6tmsnaa.scm +115 -0
  79. comodor-2.0.1/src/comodor/tui/dist/injections-73j83es3.scm +27 -0
  80. comodor-2.0.1/src/comodor/tui/dist/main.js +72237 -0
  81. comodor-2.0.1/src/comodor/tui/dist/manifest.json +46 -0
  82. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/AUTHORS-LIBWEBP +72 -0
  83. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE +21 -0
  84. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-GHOSTTY +117 -0
  85. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-LCMS2 +22 -0
  86. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-LIBWEBP +30 -0
  87. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-STB +37 -0
  88. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/LICENSE-WUFFS +177 -0
  89. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/PATENTS-LIBWEBP +23 -0
  90. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/README.md +3 -0
  91. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.bun.js +3 -0
  92. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.d.ts +2 -0
  93. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/index.js +3 -0
  94. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/libopentui.dylib +0 -0
  95. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-arm64/package.json +32 -0
  96. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/AUTHORS-LIBWEBP +72 -0
  97. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE +21 -0
  98. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-GHOSTTY +117 -0
  99. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-LCMS2 +22 -0
  100. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-LIBWEBP +30 -0
  101. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-STB +37 -0
  102. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/LICENSE-WUFFS +177 -0
  103. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/PATENTS-LIBWEBP +23 -0
  104. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/README.md +3 -0
  105. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.bun.js +3 -0
  106. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.d.ts +2 -0
  107. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/index.js +3 -0
  108. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/libopentui.dylib +0 -0
  109. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-darwin-x64/package.json +32 -0
  110. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/AUTHORS-LIBWEBP +72 -0
  111. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE +21 -0
  112. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-GHOSTTY +117 -0
  113. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-LCMS2 +22 -0
  114. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-LIBWEBP +30 -0
  115. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-STB +37 -0
  116. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/LICENSE-WUFFS +177 -0
  117. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/PATENTS-LIBWEBP +23 -0
  118. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/README.md +3 -0
  119. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.bun.js +3 -0
  120. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.d.ts +2 -0
  121. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/index.js +3 -0
  122. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/libopentui.so +0 -0
  123. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64/package.json +32 -0
  124. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/AUTHORS-LIBWEBP +72 -0
  125. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE +21 -0
  126. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-GHOSTTY +117 -0
  127. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-LCMS2 +22 -0
  128. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-LIBWEBP +30 -0
  129. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-STB +37 -0
  130. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/LICENSE-WUFFS +177 -0
  131. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/PATENTS-LIBWEBP +23 -0
  132. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/README.md +3 -0
  133. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.bun.js +3 -0
  134. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.d.ts +2 -0
  135. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/index.js +3 -0
  136. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/libopentui.so +0 -0
  137. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-arm64-musl/package.json +35 -0
  138. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/AUTHORS-LIBWEBP +72 -0
  139. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE +21 -0
  140. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-GHOSTTY +117 -0
  141. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-LCMS2 +22 -0
  142. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-LIBWEBP +30 -0
  143. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-STB +37 -0
  144. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/LICENSE-WUFFS +177 -0
  145. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/PATENTS-LIBWEBP +23 -0
  146. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/README.md +3 -0
  147. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.bun.js +3 -0
  148. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.d.ts +2 -0
  149. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/index.js +3 -0
  150. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/libopentui.so +0 -0
  151. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64/package.json +32 -0
  152. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/AUTHORS-LIBWEBP +72 -0
  153. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE +21 -0
  154. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-GHOSTTY +117 -0
  155. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-LCMS2 +22 -0
  156. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-LIBWEBP +30 -0
  157. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-STB +37 -0
  158. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/LICENSE-WUFFS +177 -0
  159. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/PATENTS-LIBWEBP +23 -0
  160. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/README.md +3 -0
  161. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.bun.js +3 -0
  162. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.d.ts +2 -0
  163. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/index.js +3 -0
  164. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/libopentui.so +0 -0
  165. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-linux-x64-musl/package.json +35 -0
  166. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/AUTHORS-LIBWEBP +72 -0
  167. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE +21 -0
  168. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-GHOSTTY +117 -0
  169. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-LCMS2 +22 -0
  170. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-LIBWEBP +30 -0
  171. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-STB +37 -0
  172. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/LICENSE-WUFFS +177 -0
  173. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/PATENTS-LIBWEBP +23 -0
  174. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/README.md +3 -0
  175. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.bun.js +3 -0
  176. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.d.ts +2 -0
  177. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/index.js +3 -0
  178. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/opentui.dll +0 -0
  179. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-arm64/package.json +32 -0
  180. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/AUTHORS-LIBWEBP +72 -0
  181. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE +21 -0
  182. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-GHOSTTY +117 -0
  183. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-LCMS2 +22 -0
  184. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-LIBWEBP +30 -0
  185. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-STB +37 -0
  186. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/LICENSE-WUFFS +177 -0
  187. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/PATENTS-LIBWEBP +23 -0
  188. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/README.md +3 -0
  189. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.bun.js +3 -0
  190. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.d.ts +2 -0
  191. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/index.js +3 -0
  192. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/opentui.dll +0 -0
  193. comodor-2.0.1/src/comodor/tui/dist/node_modules/@opentui/core-win32-x64/package.json +32 -0
  194. comodor-2.0.1/src/comodor/tui/dist/parser.worker-xyhf83rf.js +4563 -0
  195. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-3jzf13jk.wasm +0 -0
  196. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  197. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  198. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  199. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  200. comodor-2.0.1/src/comodor/tui/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  201. comodor-2.0.1/src/comodor/tui/runtime.py +167 -0
  202. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/commands.py +4 -4
  203. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/commands.py +1 -1
  204. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/server.py +1 -1
  205. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/commands.py +2 -2
  206. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/workspace.py +2 -2
  207. {comodor-1.2.0 → comodor-2.0.1}/tests/test_background_delegates.py +2 -2
  208. {comodor-1.2.0 → comodor-2.0.1}/tests/test_banner.py +2 -24
  209. {comodor-1.2.0 → comodor-2.0.1}/tests/test_blind_writes.py +16 -2
  210. comodor-2.0.1/tests/test_check_wheel_contents.py +105 -0
  211. {comodor-1.2.0 → comodor-2.0.1}/tests/test_chooser.py +11 -11
  212. comodor-2.0.1/tests/test_cli_surface.py +54 -0
  213. comodor-2.0.1/tests/test_clipboard.py +98 -0
  214. {comodor-1.2.0 → comodor-2.0.1}/tests/test_computer_tool.py +1 -90
  215. {comodor-1.2.0 → comodor-2.0.1}/tests/test_config_save.py +156 -0
  216. comodor-2.0.1/tests/test_core_stdio.py +496 -0
  217. {comodor-1.2.0 → comodor-2.0.1}/tests/test_discover.py +65 -8
  218. {comodor-1.2.0 → comodor-2.0.1}/tests/test_docker.py +1 -1
  219. comodor-2.0.1/tests/test_docs_current.py +92 -0
  220. {comodor-1.2.0 → comodor-2.0.1}/tests/test_doctor.py +159 -0
  221. {comodor-1.2.0 → comodor-2.0.1}/tests/test_facts.py +188 -0
  222. comodor-2.0.1/tests/test_github_connect_flow.py +619 -0
  223. {comodor-1.2.0 → comodor-2.0.1}/tests/test_headless.py +82 -0
  224. {comodor-1.2.0 → comodor-2.0.1}/tests/test_help.py +13 -2
  225. {comodor-1.2.0 → comodor-2.0.1}/tests/test_input.py +2 -82
  226. {comodor-1.2.0 → comodor-2.0.1}/tests/test_learning.py +64 -0
  227. {comodor-1.2.0 → comodor-2.0.1}/tests/test_local.py +1 -0
  228. comodor-2.0.1/tests/test_mode_policy.py +394 -0
  229. comodor-2.0.1/tests/test_onboarding.py +1424 -0
  230. comodor-2.0.1/tests/test_package_metadata.py +69 -0
  231. {comodor-1.2.0 → comodor-2.0.1}/tests/test_plan_memory.py +0 -18
  232. {comodor-1.2.0 → comodor-2.0.1}/tests/test_project_check.py +4 -0
  233. {comodor-1.2.0 → comodor-2.0.1}/tests/test_propose_mode.py +22 -7
  234. comodor-2.0.1/tests/test_protocol.py +744 -0
  235. comodor-2.0.1/tests/test_protocol_interactions.py +485 -0
  236. comodor-2.0.1/tests/test_protocol_performance.py +152 -0
  237. comodor-2.0.1/tests/test_protocol_permissions.py +467 -0
  238. comodor-2.0.1/tests/test_protocol_questions.py +250 -0
  239. comodor-2.0.1/tests/test_protocol_schema.py +137 -0
  240. comodor-2.0.1/tests/test_protocol_sessions.py +286 -0
  241. comodor-2.0.1/tests/test_protocol_streaming.py +869 -0
  242. {comodor-1.2.0 → comodor-2.0.1}/tests/test_providers.py +37 -0
  243. {comodor-1.2.0 → comodor-2.0.1}/tests/test_questions.py +2 -104
  244. comodor-2.0.1/tests/test_release_reconcile.py +1155 -0
  245. comodor-2.0.1/tests/test_release_rehearsal.py +830 -0
  246. {comodor-1.2.0 → comodor-2.0.1}/tests/test_release_workflow.py +82 -5
  247. comodor-2.0.1/tests/test_session_delegates.py +487 -0
  248. comodor-2.0.1/tests/test_session_journal.py +377 -0
  249. {comodor-1.2.0 → comodor-2.0.1}/tests/test_setup.py +404 -19
  250. comodor-2.0.1/tests/test_setup_github.py +365 -0
  251. {comodor-1.2.0 → comodor-2.0.1}/tests/test_setup_import.py +61 -10
  252. {comodor-1.2.0 → comodor-2.0.1}/tests/test_smart_approvals.py +5 -5
  253. comodor-2.0.1/tests/test_transport_commands.py +356 -0
  254. comodor-2.0.1/tests/test_tui_default.py +232 -0
  255. comodor-2.0.1/tests/test_tui_runtime.py +232 -0
  256. {comodor-1.2.0 → comodor-2.0.1}/tests/test_whatsapp.py +1 -1
  257. comodor-2.0.1/tests/test_workbench.py +623 -0
  258. comodor-2.0.1/tests/test_workspace_bins.py +74 -0
  259. comodor-1.2.0/src/comodor/ui/__init__.py +0 -9
  260. comodor-1.2.0/src/comodor/ui/app.py +0 -2346
  261. comodor-1.2.0/src/comodor/ui/bidi.py +0 -97
  262. comodor-1.2.0/src/comodor/ui/input/__init__.py +0 -15
  263. comodor-1.2.0/src/comodor/ui/layout.py +0 -378
  264. comodor-1.2.0/src/comodor/ui/markdown.py +0 -153
  265. comodor-1.2.0/src/comodor/ui/screen.py +0 -289
  266. comodor-1.2.0/src/comodor/ui/widgets/__init__.py +0 -21
  267. comodor-1.2.0/src/comodor/ui/widgets/buttons.py +0 -110
  268. comodor-1.2.0/src/comodor/ui/widgets/chat.py +0 -415
  269. comodor-1.2.0/src/comodor/ui/widgets/history.py +0 -300
  270. comodor-1.2.0/src/comodor/ui/widgets/overlay.py +0 -303
  271. comodor-1.2.0/src/comodor/ui/widgets/panel.py +0 -89
  272. comodor-1.2.0/src/comodor/ui/widgets/progress.py +0 -146
  273. comodor-1.2.0/src/comodor/ui/widgets/prompt.py +0 -482
  274. comodor-1.2.0/src/comodor/ui/widgets/questions.py +0 -358
  275. comodor-1.2.0/src/comodor/ui/widgets/statusbar.py +0 -239
  276. comodor-1.2.0/src/comodor/ui/widgets/toast.py +0 -82
  277. comodor-1.2.0/src/comodor/ui/widgets/welcome.py +0 -380
  278. comodor-1.2.0/tests/test_app.py +0 -921
  279. comodor-1.2.0/tests/test_bidi.py +0 -242
  280. comodor-1.2.0/tests/test_copy_and_bands.py +0 -292
  281. comodor-1.2.0/tests/test_layout.py +0 -750
  282. comodor-1.2.0/tests/test_progress.py +0 -187
  283. comodor-1.2.0/tests/test_run_loop.py +0 -167
  284. comodor-1.2.0/tests/test_slash_completions.py +0 -821
  285. comodor-1.2.0/tests/test_switching_model.py +0 -158
  286. comodor-1.2.0/tests/test_welcome.py +0 -371
  287. {comodor-1.2.0 → comodor-2.0.1}/LICENSE +0 -0
  288. {comodor-1.2.0 → comodor-2.0.1}/bench/README.md +0 -0
  289. {comodor-1.2.0 → comodor-2.0.1}/bench/tasks/careful-unknowable/repo/README.md +0 -0
  290. {comodor-1.2.0 → comodor-2.0.1}/docs/upgrade-specs/README.md +0 -0
  291. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/__main__.py +0 -0
  292. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/__init__.py +0 -0
  293. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/commands.py +0 -0
  294. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/acp/jsonrpc.py +0 -0
  295. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/__init__.py +0 -0
  296. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/claims.py +0 -0
  297. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/constraints.py +0 -0
  298. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/context.py +0 -0
  299. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/plan.py +0 -0
  300. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/prompts.py +0 -0
  301. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/staleness.py +0 -0
  302. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/tokens.py +0 -0
  303. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/tool_bridge.py +0 -0
  304. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/agent/verify.py +0 -0
  305. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/__init__.py +0 -0
  306. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/schema.py +0 -0
  307. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/api/session_map.py +0 -0
  308. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/__init__.py +0 -0
  309. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/cdp.py +0 -0
  310. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/launch.py +0 -0
  311. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/browser/page.py +0 -0
  312. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/catalogue.py +0 -0
  313. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/__init__.py +0 -0
  314. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/breaker.py +0 -0
  315. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/busy.py +0 -0
  316. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/daemon.py +0 -0
  317. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/ledger.py +0 -0
  318. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/markdown.py +0 -0
  319. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/settings.py +0 -0
  320. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/channels/unit.py +0 -0
  321. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/context_refs.py +0 -0
  322. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/__init__.py +0 -0
  323. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/deliver.py +0 -0
  324. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/jobs.py +0 -0
  325. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/parse.py +0 -0
  326. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/runner.py +0 -0
  327. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/cron/scheduler.py +0 -0
  328. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/__init__.py +0 -0
  329. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/keys.py +0 -0
  330. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/overlay.py +0 -0
  331. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/png.py +0 -0
  332. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/quartz.py +0 -0
  333. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/screen.py +0 -0
  334. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/win32.py +0 -0
  335. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/desktop/x11.py +0 -0
  336. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/__init__.py +0 -0
  337. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/api.py +0 -0
  338. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/bot.py +0 -0
  339. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/gateway.py +0 -0
  340. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/service.py +0 -0
  341. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/discord/unit.py +0 -0
  342. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/__init__.py +0 -0
  343. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/api.py +0 -0
  344. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/identity.py +0 -0
  345. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/repos.py +0 -0
  346. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/github/tokens.py +0 -0
  347. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/image_gen/__init__.py +0 -0
  348. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/image_gen/registry.py +0 -0
  349. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/insights.py +0 -0
  350. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/__init__.py +0 -0
  351. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/associations.py +0 -0
  352. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/bm25.py +0 -0
  353. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/curator.py +0 -0
  354. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/facts.py +0 -0
  355. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/hotindex.py +0 -0
  356. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/progress.py +0 -0
  357. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/__init__.py +0 -0
  358. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/providers/http_generic.py +0 -0
  359. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/reflect.py +0 -0
  360. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/render.py +0 -0
  361. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/learning/writer.py +0 -0
  362. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/__init__.py +0 -0
  363. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/catalogue.py +0 -0
  364. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/download.py +0 -0
  365. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/models.json +0 -0
  366. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/provider.py +0 -0
  367. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/runtime.py +0 -0
  368. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/local/store.py +0 -0
  369. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/__init__.py +0 -0
  370. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/catalogue.py +0 -0
  371. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/commands.py +0 -0
  372. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/http.py +0 -0
  373. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/mcp/protocol.py +0 -0
  374. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/__init__.py +0 -0
  375. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/ingest.py +0 -0
  376. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/media/route.py +0 -0
  377. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/migrate.py +0 -0
  378. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/__init__.py +0 -0
  379. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/http.py +0 -0
  380. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/sse.py +0 -0
  381. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/net/ws.py +0 -0
  382. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/paths.py +0 -0
  383. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/__init__.py +0 -0
  384. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/api.py +0 -0
  385. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/commands.py +0 -0
  386. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/plugins/manager.py +0 -0
  387. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/__init__.py +0 -0
  388. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/anthropic.py +0 -0
  389. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/base.py +0 -0
  390. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/caching.py +0 -0
  391. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/discover.py +0 -0
  392. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/models.py +0 -0
  393. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/oauth.py +0 -0
  394. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/openai_compat.py +0 -0
  395. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/profile.py +0 -0
  396. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/providers/registry.py +0 -0
  397. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/questions.py +0 -0
  398. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/__init__.py +0 -0
  399. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/backends.py +0 -0
  400. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/mining.py +0 -0
  401. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/redact.py +0 -0
  402. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/smart.py +0 -0
  403. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/safety/ssrf.py +0 -0
  404. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/__init__.py +0 -0
  405. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/search.py +0 -0
  406. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/session/store.py +0 -0
  407. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/__init__.py +0 -0
  408. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/catalogue.py +0 -0
  409. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/ledger.py +0 -0
  410. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/linter.py +0 -0
  411. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/loader.py +0 -0
  412. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/propose.py +0 -0
  413. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/registry.py +0 -0
  414. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/threats.py +0 -0
  415. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/skills/usage.py +0 -0
  416. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/__init__.py +0 -0
  417. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/api.py +0 -0
  418. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/blocks.py +0 -0
  419. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/bot.py +0 -0
  420. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/service.py +0 -0
  421. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/socket.py +0 -0
  422. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/slack/unit.py +0 -0
  423. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/__init__.py +0 -0
  424. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/api.py +0 -0
  425. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/bot.py +0 -0
  426. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/keyboard.py +0 -0
  427. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/service.py +0 -0
  428. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/telegram/unit.py +0 -0
  429. {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/banner.py +0 -0
  430. {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/console.py +0 -0
  431. {comodor-1.2.0/src/comodor/ui/input → comodor-2.0.1/src/comodor/terminal}/keys.py +0 -0
  432. {comodor-1.2.0/src/comodor/ui/input → comodor-2.0.1/src/comodor/terminal}/reader.py +0 -0
  433. {comodor-1.2.0/src/comodor/ui → comodor-2.0.1/src/comodor/terminal}/theme.py +0 -0
  434. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/__init__.py +0 -0
  435. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/browse.py +0 -0
  436. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/browser.py +0 -0
  437. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/cronjob.py +0 -0
  438. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/delegate.py +0 -0
  439. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/github.py +0 -0
  440. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/history.py +0 -0
  441. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/image_gen.py +0 -0
  442. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/matching.py +0 -0
  443. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/mcp.py +0 -0
  444. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/mcp_resources.py +0 -0
  445. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/overflow.py +0 -0
  446. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/plugin.py +0 -0
  447. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/search.py +0 -0
  448. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/shell.py +0 -0
  449. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/skill_manage.py +0 -0
  450. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/skills.py +0 -0
  451. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/todo.py +0 -0
  452. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/verify.py +0 -0
  453. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/vision.py +0 -0
  454. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/tools/web.py +0 -0
  455. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/uninstall.py +0 -0
  456. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/update.py +0 -0
  457. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/vision.py +0 -0
  458. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/__init__.py +0 -0
  459. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/stt.py +0 -0
  460. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/voice/tts.py +0 -0
  461. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/__init__.py +0 -0
  462. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/index.html +0 -0
  463. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/server.py +0 -0
  464. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/session.py +0 -0
  465. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/ui.css +0 -0
  466. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/ui.js +0 -0
  467. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/vazirmatn-OFL.txt +0 -0
  468. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/web/vazirmatn.woff2 +0 -0
  469. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/__init__.py +0 -0
  470. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/webhook/subs.py +0 -0
  471. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/__init__.py +0 -0
  472. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/api.py +0 -0
  473. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/bot.py +0 -0
  474. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/guide.py +0 -0
  475. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/menu.py +0 -0
  476. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/service.py +0 -0
  477. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/tunnel.py +0 -0
  478. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/unit.py +0 -0
  479. {comodor-1.2.0 → comodor-2.0.1}/src/comodor/whatsapp/webhook.py +0 -0
  480. {comodor-1.2.0 → comodor-2.0.1}/tests/conftest.py +0 -0
  481. {comodor-1.2.0 → comodor-2.0.1}/tests/support/fake_mcp_server.py +0 -0
  482. {comodor-1.2.0 → comodor-2.0.1}/tests/test_acp.py +0 -0
  483. {comodor-1.2.0 → comodor-2.0.1}/tests/test_agent_loop.py +0 -0
  484. {comodor-1.2.0 → comodor-2.0.1}/tests/test_api.py +0 -0
  485. {comodor-1.2.0 → comodor-2.0.1}/tests/test_approval_mining.py +0 -0
  486. {comodor-1.2.0 → comodor-2.0.1}/tests/test_associations.py +0 -0
  487. {comodor-1.2.0 → comodor-2.0.1}/tests/test_backends.py +0 -0
  488. {comodor-1.2.0 → comodor-2.0.1}/tests/test_bench.py +0 -0
  489. {comodor-1.2.0 → comodor-2.0.1}/tests/test_breaker.py +0 -0
  490. {comodor-1.2.0 → comodor-2.0.1}/tests/test_browser.py +0 -0
  491. {comodor-1.2.0 → comodor-2.0.1}/tests/test_busy_modes.py +0 -0
  492. {comodor-1.2.0 → comodor-2.0.1}/tests/test_caching.py +0 -0
  493. {comodor-1.2.0 → comodor-2.0.1}/tests/test_capability_map.py +0 -0
  494. {comodor-1.2.0 → comodor-2.0.1}/tests/test_channel_service.py +0 -0
  495. {comodor-1.2.0 → comodor-2.0.1}/tests/test_claims.py +0 -0
  496. {comodor-1.2.0 → comodor-2.0.1}/tests/test_constraints.py +0 -0
  497. {comodor-1.2.0 → comodor-2.0.1}/tests/test_context_refs.py +0 -0
  498. {comodor-1.2.0 → comodor-2.0.1}/tests/test_cron.py +0 -0
  499. {comodor-1.2.0 → comodor-2.0.1}/tests/test_cronjob.py +0 -0
  500. {comodor-1.2.0 → comodor-2.0.1}/tests/test_curator.py +0 -0
  501. {comodor-1.2.0 → comodor-2.0.1}/tests/test_delegate.py +0 -0
  502. {comodor-1.2.0 → comodor-2.0.1}/tests/test_delivery_ledger.py +0 -0
  503. {comodor-1.2.0 → comodor-2.0.1}/tests/test_desktop.py +0 -0
  504. {comodor-1.2.0 → comodor-2.0.1}/tests/test_discord.py +0 -0
  505. {comodor-1.2.0 → comodor-2.0.1}/tests/test_github.py +0 -0
  506. {comodor-1.2.0 → comodor-2.0.1}/tests/test_github_identity.py +0 -0
  507. {comodor-1.2.0 → comodor-2.0.1}/tests/test_github_tool.py +0 -0
  508. {comodor-1.2.0 → comodor-2.0.1}/tests/test_history.py +0 -0
  509. {comodor-1.2.0 → comodor-2.0.1}/tests/test_image_gen.py +0 -0
  510. {comodor-1.2.0 → comodor-2.0.1}/tests/test_import_command.py +0 -0
  511. {comodor-1.2.0 → comodor-2.0.1}/tests/test_insights.py +0 -0
  512. {comodor-1.2.0 → comodor-2.0.1}/tests/test_journey.py +0 -0
  513. {comodor-1.2.0 → comodor-2.0.1}/tests/test_key_pool.py +0 -0
  514. {comodor-1.2.0 → comodor-2.0.1}/tests/test_live_settings.py +0 -0
  515. {comodor-1.2.0 → comodor-2.0.1}/tests/test_markdown.py +0 -0
  516. {comodor-1.2.0 → comodor-2.0.1}/tests/test_matching.py +0 -0
  517. {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp.py +0 -0
  518. {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp_http.py +0 -0
  519. {comodor-1.2.0 → comodor-2.0.1}/tests/test_mcp_resources.py +0 -0
  520. {comodor-1.2.0 → comodor-2.0.1}/tests/test_media.py +0 -0
  521. {comodor-1.2.0 → comodor-2.0.1}/tests/test_memory_provider.py +0 -0
  522. {comodor-1.2.0 → comodor-2.0.1}/tests/test_memory_tool.py +0 -0
  523. {comodor-1.2.0 → comodor-2.0.1}/tests/test_migrate.py +0 -0
  524. {comodor-1.2.0 → comodor-2.0.1}/tests/test_nothing_is_left_running.py +0 -0
  525. {comodor-1.2.0 → comodor-2.0.1}/tests/test_oauth.py +0 -0
  526. {comodor-1.2.0 → comodor-2.0.1}/tests/test_overflow.py +0 -0
  527. {comodor-1.2.0 → comodor-2.0.1}/tests/test_overlay.py +0 -0
  528. {comodor-1.2.0 → comodor-2.0.1}/tests/test_overlay_buttons.py +0 -0
  529. {comodor-1.2.0 → comodor-2.0.1}/tests/test_performance.py +0 -0
  530. {comodor-1.2.0 → comodor-2.0.1}/tests/test_plugins.py +0 -0
  531. {comodor-1.2.0 → comodor-2.0.1}/tests/test_prefix_stability.py +0 -0
  532. {comodor-1.2.0 → comodor-2.0.1}/tests/test_profile.py +0 -0
  533. {comodor-1.2.0 → comodor-2.0.1}/tests/test_profiles.py +0 -0
  534. {comodor-1.2.0 → comodor-2.0.1}/tests/test_propose.py +0 -0
  535. {comodor-1.2.0 → comodor-2.0.1}/tests/test_quartz_backend.py +0 -0
  536. {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_browser.py +0 -0
  537. {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_desktop.py +0 -0
  538. {comodor-1.2.0 → comodor-2.0.1}/tests/test_real_web_ui.py +0 -0
  539. {comodor-1.2.0 → comodor-2.0.1}/tests/test_reflex.py +0 -0
  540. {comodor-1.2.0 → comodor-2.0.1}/tests/test_revoked_writes.py +0 -0
  541. {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_budget.py +0 -0
  542. {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_catalogue.py +0 -0
  543. {comodor-1.2.0 → comodor-2.0.1}/tests/test_skill_manage.py +0 -0
  544. {comodor-1.2.0 → comodor-2.0.1}/tests/test_skills.py +0 -0
  545. {comodor-1.2.0 → comodor-2.0.1}/tests/test_slack.py +0 -0
  546. {comodor-1.2.0 → comodor-2.0.1}/tests/test_source_hygiene.py +0 -0
  547. {comodor-1.2.0 → comodor-2.0.1}/tests/test_ssrf.py +0 -0
  548. {comodor-1.2.0 → comodor-2.0.1}/tests/test_staleness.py +0 -0
  549. {comodor-1.2.0 → comodor-2.0.1}/tests/test_surface_impact_contract.py +0 -0
  550. {comodor-1.2.0 → comodor-2.0.1}/tests/test_telegram.py +0 -0
  551. {comodor-1.2.0 → comodor-2.0.1}/tests/test_tool_bridge.py +0 -0
  552. {comodor-1.2.0 → comodor-2.0.1}/tests/test_tools.py +0 -0
  553. {comodor-1.2.0 → comodor-2.0.1}/tests/test_uninstall.py +0 -0
  554. {comodor-1.2.0 → comodor-2.0.1}/tests/test_update.py +0 -0
  555. {comodor-1.2.0 → comodor-2.0.1}/tests/test_verify.py +0 -0
  556. {comodor-1.2.0 → comodor-2.0.1}/tests/test_vision_tool.py +0 -0
  557. {comodor-1.2.0 → comodor-2.0.1}/tests/test_voice.py +0 -0
  558. {comodor-1.2.0 → comodor-2.0.1}/tests/test_web.py +0 -0
  559. {comodor-1.2.0 → comodor-2.0.1}/tests/test_webhook.py +0 -0
  560. {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: 1.2.0
4
- Summary: Comodor — a self-improving terminal coding agent with a Rich TUI
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,rich,terminal,tui
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.9
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
  [![CI](https://github.com/ifekri/Comodor/actions/workflows/ci.yml/badge.svg)](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
45
43
  [![Licence](https://img.shields.io/pypi/l/comodor?color=blue&&labelColor=darkblue)](LICENSE)
46
44
 
47
- <p align="center">
48
- <a href="/docs/README.md">
49
- <img src="https://img.shields.io/badge/Docs-EN-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="English Docs" />
50
- </a>
51
- <a href="/docs/FA/README.md">
52
- <img src="https://img.shields.io/badge/Docs-FA-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Persian (Farsi) Docs" />
53
- </a>
54
- <a href="/docs/AR/README.md">
55
- <img src="https://img.shields.io/badge/Docs-AR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Arabic Docs">
56
- </a>
57
- <a href="/docs/TR/README.md">
58
- <img src="https://img.shields.io/badge/Docs-TR-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Turkish Docs" />
59
- </a>
60
- <a href="/docs/DE/README.md">
61
- <img src="https://img.shields.io/badge/Docs-DE-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Deutsch Docs" />
62
- </a>
63
- <a href="/docs/ES/README.md">
64
- <img src="https://img.shields.io/badge/Docs-ES-green?logo=github&logoColor=white&style=plastic&labelColor=darkgreen" alt="Spanish Docs" />
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
+ [![English Documentation](./.github/badget/en.svg "English Docs")](/docs/README.md)
46
+ [![Persian (Farsi) Documentation](./.github/badget/fa.svg "Persian (Farsi) Docs")](/docs/FA/README.md)
47
+ [![Arabic Documentation](./.github/badget/ar.svg "Arabic Docs")](/docs/AR/README.md)
48
+ [![Turkish Documentation](./.github/badget/tr.svg "Turkish Docs")](/docs/TR/README.md)
49
+ [![Deutsch Documentation](./.github/badget/de.svg "Deutsch Docs")](/docs/DE/README.md)
50
+ [![Spanish Documentation](./.github/badget/es.svg "Spanish Docs")](/docs/ES/README.md)
51
+ [![Russian Documentation](./.github/badget/ru.svg "Russian Docs")](/docs/RU/README.md)
52
+ [![French Documentation](./.github/badget/fr.svg "French Docs")](/docs/FR/README.md)
53
+ [![Zhongwen Documentation](./.github/badget/zh.svg "Zhongwen Docs")](/docs/ZH/README.md)
54
+
55
+ [![Comodor Website](./.github/badget/web.svg "comodor.ai")](https://comodor.ai)
56
+
57
+ [![Install On Windows](./.github/badget/win.svg)](#windows 'Install Comodor on Windows')
58
+ [![Install On Mac](./.github/badget/mac.svg)](#linux--macos 'Install Comodor on Mac')
59
+ [![Install On Linux](./.github/badget/linux.svg)](#linux--macos 'Install Comodor on Linux')
60
+ [![Install Comodor with UV](./.github/badget/uv.svg)](#install-with-uv 'Install Comodor with UV')
61
+ [![Install Comodor with PIP](./.github/badget/pip.svg)](#install-with-pip 'Install Comodor with PIP')
62
+ [![Install Comodor with PIPX](./.github/badget/pipx.svg)](#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
- `/progress` shows whether that is actually working — corrections per turn,
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 and `/undo` puts it back. [→](docs/safety.md) |
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 drives
147
- Chrome, the PNG encoder for screenshots, the Telegram client — all written here.
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
- ### Recommended installation
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
- #### Windows (Powershell)
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. Six questions the first time, never
233
- again.
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
- /help every command /undo restore the last change
254
- /mode act · plan · chat /progress proof it is improving
255
- /cost tokens and spend /computer let it use your screen
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
  [![CI](https://github.com/ifekri/Comodor/actions/workflows/ci.yml/badge.svg)](https://github.com/ifekri/Comodor/actions/workflows/ci.yml)
13
13
  [![Licence](https://img.shields.io/pypi/l/comodor?color=blue&&labelColor=darkblue)](LICENSE)
14
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')
15
+ [![English Documentation](./.github/badget/en.svg "English Docs")](/docs/README.md)
16
+ [![Persian (Farsi) Documentation](./.github/badget/fa.svg "Persian (Farsi) Docs")](/docs/FA/README.md)
17
+ [![Arabic Documentation](./.github/badget/ar.svg "Arabic Docs")](/docs/AR/README.md)
18
+ [![Turkish Documentation](./.github/badget/tr.svg "Turkish Docs")](/docs/TR/README.md)
19
+ [![Deutsch Documentation](./.github/badget/de.svg "Deutsch Docs")](/docs/DE/README.md)
20
+ [![Spanish Documentation](./.github/badget/es.svg "Spanish Docs")](/docs/ES/README.md)
21
+ [![Russian Documentation](./.github/badget/ru.svg "Russian Docs")](/docs/RU/README.md)
22
+ [![French Documentation](./.github/badget/fr.svg "French Docs")](/docs/FR/README.md)
23
+ [![Zhongwen Documentation](./.github/badget/zh.svg "Zhongwen Docs")](/docs/ZH/README.md)
24
+
25
+ [![Comodor Website](./.github/badget/web.svg "comodor.ai")](https://comodor.ai)
26
+
27
+ [![Install On Windows](./.github/badget/win.svg)](#windows 'Install Comodor on Windows')
28
+ [![Install On Mac](./.github/badget/mac.svg)](#linux--macos 'Install Comodor on Mac')
29
+ [![Install On Linux](./.github/badget/linux.svg)](#linux--macos 'Install Comodor on Linux')
30
+ [![Install Comodor with UV](./.github/badget/uv.svg)](#install-with-uv 'Install Comodor with UV')
31
+ [![Install Comodor with PIP](./.github/badget/pip.svg)](#install-with-pip 'Install Comodor with PIP')
32
+ [![Install Comodor with PIPX](./.github/badget/pipx.svg)](#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
- `/progress` shows whether that is actually working — corrections per turn,
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 and `/undo` puts it back. [→](docs/safety.md) |
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 drives
115
- Chrome, the PNG encoder for screenshots, the Telegram client — all written here.
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
- ### Recommended installation
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
- #### Windows (Powershell)
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. Six questions the first time, never
201
- again.
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
- /help every command /undo restore the last change
222
- /mode act · plan · chat /progress proof it is improving
223
- /cost tokens and spend /computer let it use your screen
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) | اللوحات، المفاتيح، الأنماط، وجميع الأوامر الـ 29 |
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
- يُظهر لك `/progress` ما إذا كان ذلك يعمل فعلًا.
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
- الآلية؛ ويعرض `/progress` الدليل.
86
+ الآلية؛ ويعرض `comodor insights` الدليل.
87
87
 
88
88
  **يسأل قبل أن يتصرف، وكل شيء قابل للتراجع.** القراءة صامتة. الكتابة تسأل.
89
- تشغيل أمر يسأل بصوت أعلى. كل كتابة محفوظة كنقطة استرجاع، ويعيد `/undo` آخر
90
- واحدة منها. [السلامة والأذونات](safety.md).
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](../CHANGELOG.md) | ما تغيّر، ولماذا |
107
- | [CONTRIBUTING](../CONTRIBUTING.md) | العمل على Comodor نفسه |
108
- | [SECURITY](../SECURITY.md) | الإبلاغ عن أمر حساس |
109
- | [RELEASING](../RELEASING.md) | كيف يُقطَع إصدار |
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) | Panels, Tasten, Modi und alle 29 Befehle |
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. `/progress`
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; `/progress` zeigt die Belege.
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, und `/undo` stellt den letzten
93
- wieder her. [Sicherheit und Berechtigungen](safety.md).
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](../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 |
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) | Paneles, teclas, modos y los 29 comandos |
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. `/progress` te muestra si eso realmente está
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; `/progress` muestra
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, y `/undo` revierte la última. [Seguridad y
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](../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 |
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
- یا همین‌طور بگویید — و یاد می‌گیرد. `/progress` نشان می‌دهد که آیا این واقعاً
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
- توضیح می‌دهد؛ `/progress` مدرک را نشان می‌دهد.
88
+ توضیح می‌دهد؛ `comodor insights` مدرک را نشان می‌دهد.
89
89
 
90
90
  **قبل از عمل می‌پرسد، و همه‌چیز برگشت‌پذیر است.** خواندن بی‌صدا انجام می‌شود.
91
- نوشتن می‌پرسد. اجرای یک فرمان بلندتر می‌پرسد. هر نوشتن یک نقطهٔ بازگشت دارد و
92
- `/undo` آخرین آن را برمی‌گرداند. [ایمنی و مجوزها](safety.md).
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](../CHANGELOG.md) | چه چیزی تغییر کرد، و چرا |
110
- | [CONTRIBUTING](../CONTRIBUTING.md) | کار روی خود کامودور |
111
- | [SECURITY](../SECURITY.md) | گزارش چیزی حساس |
112
- | [RELEASING](../RELEASING.md) | نحوهٔ برش یک انتشار |
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) | Panneaux, touches, modes, et les 29 commandes |
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. `/progress` vous montre si cela
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 ; `/progress` montre les preuves.
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, et `/undo` restaure la précédente. [Sécurité et
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](../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 |
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) | Panels, keys, modes, and all 29 commands |
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. `/progress` shows you whether that is actually working.
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; `/progress` shows the
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, and
94
- `/undo` puts the last one back. [Safety and permissions](safety.md).
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