agent-cli 0.98.5__tar.gz → 0.100.0__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 (451) hide show
  1. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/pytest.yml +1 -1
  2. {agent_cli-0.98.5 → agent_cli-0.100.0}/.pre-commit-config.yaml +1 -1
  3. {agent_cli-0.98.5 → agent_cli-0.100.0}/PKG-INFO +16 -1
  4. {agent_cli-0.98.5 → agent_cli-0.100.0}/README.md +15 -0
  5. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/transcribe.py +44 -7
  6. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/cli.py +5 -3
  7. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/launch.py +34 -0
  8. agent_cli-0.100.0/agent_cli/dev/terminals/cmux.py +247 -0
  9. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/registry.py +2 -0
  10. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/opts.py +25 -0
  11. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/asr.py +206 -2
  12. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/dev.md +1 -0
  13. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/transcribe.md +22 -0
  14. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/macos-app.md +6 -0
  15. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Package.resolved +2 -2
  16. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Package.swift +1 -1
  17. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommand.swift +21 -3
  18. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AgentRuntime.swift +78 -0
  19. agent_cli-0.100.0/macos/AgentCLI/Sources/AgentCLI/LiveTranscriptionPreview.swift +110 -0
  20. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/RecordingIndicatorController.swift +9 -1
  21. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/Shortcuts.swift +4 -1
  22. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/TranscriptionSettings.swift +5 -0
  23. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/VoiceLevelOverlay.swift +86 -9
  24. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/AgentCommandTests.swift +40 -3
  25. agent_cli-0.100.0/macos/AgentCLI/Tests/AgentCLITests/LivePreviewSwiftTestingTests.swift +62 -0
  26. agent_cli-0.100.0/macos/AgentCLI/Tests/AgentCLITests/LiveTranscriptionPreviewTests.swift +24 -0
  27. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/VoiceLevelMeterTests.swift +13 -1
  28. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/appcast.xml +31 -40
  29. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_transcribe.py +156 -0
  30. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_transcribe_recovery.py +14 -6
  31. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_launch.py +30 -0
  32. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_terminals.py +295 -0
  33. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_asr.py +211 -0
  34. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  35. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  36. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude-plugin/README.md +0 -0
  37. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude-plugin/marketplace.json +0 -0
  38. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude-plugin/plugin.json +0 -0
  39. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude-plugin/skills/agent-cli-dev/SKILL.md +0 -0
  40. {agent_cli-0.98.5 → agent_cli-0.100.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  41. {agent_cli-0.98.5 → agent_cli-0.100.0}/.cursorrules +0 -0
  42. {agent_cli-0.98.5 → agent_cli-0.100.0}/.dockerignore +0 -0
  43. {agent_cli-0.98.5 → agent_cli-0.100.0}/.env.example +0 -0
  44. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/logo.svg +0 -0
  45. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/release-drafter.yml +0 -0
  46. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/renovate.json +0 -0
  47. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/scripts/check_extras_sync.py +0 -0
  48. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/scripts/check_plugin_skill_sync.py +0 -0
  49. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/scripts/normalize_appcast.py +0 -0
  50. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/scripts/sync_extras.py +0 -0
  51. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/scripts/sync_requirements.py +0 -0
  52. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/automerge.yml +0 -0
  53. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/docker.yml +0 -0
  54. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/docs.yml +0 -0
  55. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/markdown-code-runner.yml +0 -0
  56. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/release-drafter.yml +0 -0
  57. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/release.yml +0 -0
  58. {agent_cli-0.98.5 → agent_cli-0.100.0}/.github/workflows/toc.yaml +0 -0
  59. {agent_cli-0.98.5 → agent_cli-0.100.0}/.gitignore +0 -0
  60. {agent_cli-0.98.5 → agent_cli-0.100.0}/.jscpd.json +0 -0
  61. {agent_cli-0.98.5 → agent_cli-0.100.0}/.prompts/docs-review.md +0 -0
  62. {agent_cli-0.98.5 → agent_cli-0.100.0}/.prompts/pr-review.md +0 -0
  63. {agent_cli-0.98.5 → agent_cli-0.100.0}/CLAUDE.md +0 -0
  64. {agent_cli-0.98.5 → agent_cli-0.100.0}/LICENSE +0 -0
  65. {agent_cli-0.98.5 → agent_cli-0.100.0}/LLAMA_SERVER_USAGE.md +0 -0
  66. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/__init__.py +0 -0
  67. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/__main__.py +0 -0
  68. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_extras.json +0 -0
  69. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_overrides/nemo-whisper.txt +0 -0
  70. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/.gitkeep +0 -0
  71. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/audio.txt +0 -0
  72. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/diarization.txt +0 -0
  73. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
  74. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/kokoro.txt +0 -0
  75. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/llm.txt +0 -0
  76. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/memory.txt +0 -0
  77. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  78. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/nemo-whisper.txt +0 -0
  79. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/piper.txt +0 -0
  80. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/rag.txt +0 -0
  81. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/server.txt +0 -0
  82. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/speed.txt +0 -0
  83. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/vad.txt +0 -0
  84. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/vectordb.txt +0 -0
  85. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  86. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_requirements/wyoming.txt +0 -0
  87. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/_tools.py +0 -0
  88. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/__init__.py +0 -0
  89. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  90. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/assistant.py +0 -0
  91. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/autocorrect.py +0 -0
  92. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/chat.py +0 -0
  93. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/diarize_live_session.py +0 -0
  94. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/memory/__init__.py +0 -0
  95. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/memory/add.py +0 -0
  96. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/memory/proxy.py +0 -0
  97. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/rag_proxy.py +0 -0
  98. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/speak.py +0 -0
  99. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/speakers.py +0 -0
  100. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/transcribe_live.py +0 -0
  101. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/agents/voice_edit.py +0 -0
  102. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/api.py +0 -0
  103. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/cli.py +0 -0
  104. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/config.py +0 -0
  105. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/config_cmd.py +0 -0
  106. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/constants.py +0 -0
  107. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/__init__.py +0 -0
  108. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/alignment.py +0 -0
  109. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/audio.py +0 -0
  110. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/audio_format.py +0 -0
  111. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/chroma.py +0 -0
  112. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/deps.py +0 -0
  113. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/diarization.py +0 -0
  114. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/openai_proxy.py +0 -0
  115. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/process.py +0 -0
  116. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/reranker.py +0 -0
  117. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/speaker_identity.py +0 -0
  118. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/sse.py +0 -0
  119. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/transcription_logger.py +0 -0
  120. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/utils.py +0 -0
  121. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/vad.py +0 -0
  122. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/core/watch.py +0 -0
  123. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/daemon/__init__.py +0 -0
  124. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/daemon/cli.py +0 -0
  125. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/__init__.py +0 -0
  126. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/_branch_name.py +0 -0
  127. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/_config.py +0 -0
  128. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/_output.py +0 -0
  129. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/cleanup.py +0 -0
  130. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  131. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  132. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/base.py +0 -0
  133. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  134. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  135. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  136. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  137. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  138. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  139. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  140. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  141. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/__init__.py +0 -0
  142. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/base.py +0 -0
  143. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/cursor.py +0 -0
  144. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/emacs.py +0 -0
  145. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  146. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/nano.py +0 -0
  147. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/neovim.py +0 -0
  148. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/registry.py +0 -0
  149. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/sublime.py +0 -0
  150. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/vim.py +0 -0
  151. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/vscode.py +0 -0
  152. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/editors/zed.py +0 -0
  153. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/hooks.py +0 -0
  154. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/project.py +0 -0
  155. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/registry.py +0 -0
  156. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/skill/SKILL.md +0 -0
  157. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/skill/examples.md +0 -0
  158. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/__init__.py +0 -0
  159. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  160. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/base.py +0 -0
  161. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/gnome.py +0 -0
  162. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  163. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/kitty.py +0 -0
  164. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/tmux.py +0 -0
  165. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/warp.py +0 -0
  166. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/terminals/zellij.py +0 -0
  167. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/dev/worktree.py +0 -0
  168. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/docs_gen.py +0 -0
  169. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/example-config.toml +0 -0
  170. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/__init__.py +0 -0
  171. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/common.py +0 -0
  172. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/extras.py +0 -0
  173. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/hotkeys.py +0 -0
  174. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/launchd.py +0 -0
  175. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/service_config.py +0 -0
  176. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/services.py +0 -0
  177. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/install/systemd.py +0 -0
  178. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/__init__.py +0 -0
  179. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_files.py +0 -0
  180. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_filters.py +0 -0
  181. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_git.py +0 -0
  182. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_indexer.py +0 -0
  183. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_ingest.py +0 -0
  184. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_persistence.py +0 -0
  185. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_prompt.py +0 -0
  186. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_retrieval.py +0 -0
  187. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_store.py +0 -0
  188. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_streaming.py +0 -0
  189. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/_tasks.py +0 -0
  190. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/api.py +0 -0
  191. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/client.py +0 -0
  192. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/engine.py +0 -0
  193. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/entities.py +0 -0
  194. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/memory/models.py +0 -0
  195. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/py.typed +0 -0
  196. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/__init__.py +0 -0
  197. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_indexer.py +0 -0
  198. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_indexing.py +0 -0
  199. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_prompt.py +0 -0
  200. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_retriever.py +0 -0
  201. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_store.py +0 -0
  202. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/_utils.py +0 -0
  203. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/api.py +0 -0
  204. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/client.py +0 -0
  205. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/engine.py +0 -0
  206. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/rag/models.py +0 -0
  207. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  208. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/__init__.py +0 -0
  209. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  210. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  211. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  212. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  213. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  214. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  215. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  216. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  217. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  218. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  219. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  220. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  221. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  222. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  223. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
  224. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  225. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/setup-linux.sh +0 -0
  226. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  227. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/setup-macos.sh +0 -0
  228. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
  229. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  230. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/scripts/start-all-services.sh +0 -0
  231. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/__init__.py +0 -0
  232. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/cli.py +0 -0
  233. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/common.py +0 -0
  234. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/model_manager.py +0 -0
  235. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/model_registry.py +0 -0
  236. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/proxy/__init__.py +0 -0
  237. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/proxy/api.py +0 -0
  238. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/streaming.py +0 -0
  239. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/__init__.py +0 -0
  240. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/api.py +0 -0
  241. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  242. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/backends/base.py +0 -0
  243. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  244. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/backends/piper.py +0 -0
  245. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/model_manager.py +0 -0
  246. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/model_registry.py +0 -0
  247. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  248. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/__init__.py +0 -0
  249. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/api.py +0 -0
  250. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  251. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/base.py +0 -0
  252. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  253. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  254. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/nemo.py +0 -0
  255. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
  256. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/languages.py +0 -0
  257. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/model_manager.py +0 -0
  258. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/model_registry.py +0 -0
  259. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  260. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/__init__.py +0 -0
  261. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/_wyoming_utils.py +0 -0
  262. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/llm.py +0 -0
  263. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/tts.py +0 -0
  264. {agent_cli-0.98.5 → agent_cli-0.100.0}/agent_cli/services/wake_word.py +0 -0
  265. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/docker-compose.yml +0 -0
  266. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/memory-proxy.Dockerfile +0 -0
  267. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/rag-proxy.Dockerfile +0 -0
  268. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/transcribe-proxy.Dockerfile +0 -0
  269. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/tts.Dockerfile +0 -0
  270. {agent_cli-0.98.5 → agent_cli-0.100.0}/docker/whisper.Dockerfile +0 -0
  271. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/CNAME +0 -0
  272. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/architecture/index.md +0 -0
  273. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/architecture/memory.md +0 -0
  274. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/architecture/rag.md +0 -0
  275. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/assistant.md +0 -0
  276. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/autocorrect.md +0 -0
  277. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/chat.md +0 -0
  278. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/config.md +0 -0
  279. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/daemon.md +0 -0
  280. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/diarize-live-session.md +0 -0
  281. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/index.md +0 -0
  282. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/install-extras.md +0 -0
  283. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/install-hotkeys.md +0 -0
  284. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/install-services.md +0 -0
  285. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/memory.md +0 -0
  286. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/rag-proxy.md +0 -0
  287. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/server/index.md +0 -0
  288. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/server/transcribe-proxy.md +0 -0
  289. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/server/tts.md +0 -0
  290. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/server/whisper.md +0 -0
  291. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/speak.md +0 -0
  292. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/speakers.md +0 -0
  293. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/start-services.md +0 -0
  294. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/transcribe-live.md +0 -0
  295. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/commands/voice-edit.md +0 -0
  296. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/configuration.md +0 -0
  297. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/getting-started.md +0 -0
  298. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/iOS_Shortcut_Guide.md +0 -0
  299. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/index.md +0 -0
  300. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/docker.md +0 -0
  301. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/index.md +0 -0
  302. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/linux.md +0 -0
  303. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/macos.md +0 -0
  304. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/nixos.md +0 -0
  305. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/installation/windows.md +0 -0
  306. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/logo-avatar.svg +0 -0
  307. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/logo-clean.svg +0 -0
  308. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  309. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/run_markdown_code_runner.py +0 -0
  310. {agent_cli-0.98.5 → agent_cli-0.100.0}/docs/system-integration.md +0 -0
  311. {agent_cli-0.98.5 → agent_cli-0.100.0}/example.agent-cli-config.toml +0 -0
  312. {agent_cli-0.98.5 → agent_cli-0.100.0}/justfile +0 -0
  313. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/README.md +0 -0
  314. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Resources/AgentCLI.entitlements +0 -0
  315. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Resources/Info.plist +0 -0
  316. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Resources/dmg-background.svg +0 -0
  317. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AgentCLIApp.swift +0 -0
  318. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AgentCommandRunner.swift +0 -0
  319. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AppDelegate.swift +0 -0
  320. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AppMetadata.swift +0 -0
  321. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/AppUpdater.swift +0 -0
  322. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/BootstrapState.swift +0 -0
  323. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/CommandResult.swift +0 -0
  324. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/ConfigurableHotkeyController.swift +0 -0
  325. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/FocusedTextTarget.swift +0 -0
  326. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/LoginItemController.swift +0 -0
  327. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatus.swift +0 -0
  328. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityStatusRow.swift +0 -0
  329. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/MenuActivityTracker.swift +0 -0
  330. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/MenuBarIcon.swift +0 -0
  331. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/RecentTranscriptionReader.swift +0 -0
  332. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/RecordingSoundSettings.swift +0 -0
  333. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/RuntimeSettings.swift +0 -0
  334. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/SettingsWindowController.swift +0 -0
  335. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/StatusMenuController.swift +0 -0
  336. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Sources/AgentCLI/TranscriptPasteController.swift +0 -0
  337. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/ConfigurableHotkeyControllerTests.swift +0 -0
  338. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/LoginItemControllerTests.swift +0 -0
  339. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/RecentTranscriptionReaderTests.swift +0 -0
  340. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/RecordingIndicatorControllerTests.swift +0 -0
  341. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/AgentCLI/Tests/AgentCLITests/ShortcutDefaultsTests.swift +0 -0
  342. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/build-macos-app.sh +0 -0
  343. {agent_cli-0.98.5 → agent_cli-0.100.0}/macos/test-macos-app-e2e.sh +0 -0
  344. {agent_cli-0.98.5 → agent_cli-0.100.0}/pyproject.toml +0 -0
  345. {agent_cli-0.98.5 → agent_cli-0.100.0}/reddit.md +0 -0
  346. {agent_cli-0.98.5 → agent_cli-0.100.0}/shell.nix +0 -0
  347. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/__init__.py +0 -0
  348. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/__init__.py +0 -0
  349. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_fix_my_text.py +0 -0
  350. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_interactive.py +0 -0
  351. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_interactive_extra.py +0 -0
  352. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_memory_add.py +0 -0
  353. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_speak.py +0 -0
  354. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_speak_e2e.py +0 -0
  355. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_speakers.py +0 -0
  356. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_transcribe_agent.py +0 -0
  357. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_transcribe_e2e.py +0 -0
  358. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_transcribe_live.py +0 -0
  359. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_tts_common.py +0 -0
  360. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_tts_common_extra.py +0 -0
  361. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_voice_agent_common.py +0 -0
  362. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_voice_edit.py +0 -0
  363. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  364. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/agents/test_wake_word_assistant.py +0 -0
  365. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/conftest.py +0 -0
  366. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/__init__.py +0 -0
  367. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_audio.py +0 -0
  368. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_audio_format.py +0 -0
  369. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_audio_levels.py +0 -0
  370. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_chroma.py +0 -0
  371. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_sse.py +0 -0
  372. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_vad.py +0 -0
  373. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/core/test_watch.py +0 -0
  374. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/__init__.py +0 -0
  375. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_cleanup.py +0 -0
  376. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_cli.py +0 -0
  377. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_coding_agents.py +0 -0
  378. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_editors.py +0 -0
  379. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_hooks.py +0 -0
  380. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_project.py +0 -0
  381. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_verification.py +0 -0
  382. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/dev/test_worktree.py +0 -0
  383. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/install/__init__.py +0 -0
  384. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/install/test_extras.py +0 -0
  385. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/install/test_launchd.py +0 -0
  386. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/__init__.py +0 -0
  387. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_api_health.py +0 -0
  388. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_api_integration_liveish.py +0 -0
  389. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_client.py +0 -0
  390. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_engine.py +0 -0
  391. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_files.py +0 -0
  392. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_filters.py +0 -0
  393. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_git_integration.py +0 -0
  394. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_indexer.py +0 -0
  395. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_memory_integration.py +0 -0
  396. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_proxy_passthrough.py +0 -0
  397. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_store.py +0 -0
  398. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/memory/test_utils.py +0 -0
  399. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/mocks/__init__.py +0 -0
  400. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/mocks/audio.py +0 -0
  401. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/mocks/llm.py +0 -0
  402. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/mocks/wyoming.py +0 -0
  403. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/__init__.py +0 -0
  404. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_api.py +0 -0
  405. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_engine.py +0 -0
  406. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_history.py +0 -0
  407. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_indexer.py +0 -0
  408. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_indexing.py +0 -0
  409. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_rag_client.py +0 -0
  410. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  411. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  412. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_retriever.py +0 -0
  413. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_store.py +0 -0
  414. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/rag/test_utils.py +0 -0
  415. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_alignment.py +0 -0
  416. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_api.py +0 -0
  417. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_api_integration.py +0 -0
  418. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_asr_recovery.py +0 -0
  419. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_audio_e2e.py +0 -0
  420. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_cli.py +0 -0
  421. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_config.py +0 -0
  422. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_config_cmd.py +0 -0
  423. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_daemon.py +0 -0
  424. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_diarization.py +0 -0
  425. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_diarize_live_session.py +0 -0
  426. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_docs_gen.py +0 -0
  427. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_env_vars.py +0 -0
  428. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_faster_whisper_backend.py +0 -0
  429. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_json_output.py +0 -0
  430. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_llm.py +0 -0
  431. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_llm_gemini.py +0 -0
  432. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_macos_app.py +0 -0
  433. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_memory_tools.py +0 -0
  434. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_mlx_backend.py +0 -0
  435. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_nemo_backend.py +0 -0
  436. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_normalize_appcast.py +0 -0
  437. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_process_manager.py +0 -0
  438. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_requires_extras.py +0 -0
  439. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_server_streaming.py +0 -0
  440. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_server_tts.py +0 -0
  441. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_server_whisper.py +0 -0
  442. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_services.py +0 -0
  443. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_speaker_identity.py +0 -0
  444. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_tools.py +0 -0
  445. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_transformers_backend.py +0 -0
  446. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_tts.py +0 -0
  447. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_utils.py +0 -0
  448. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_wake_word.py +0 -0
  449. {agent_cli-0.98.5 → agent_cli-0.100.0}/tests/test_wyoming_utils.py +0 -0
  450. {agent_cli-0.98.5 → agent_cli-0.100.0}/uv.lock +0 -0
  451. {agent_cli-0.98.5 → agent_cli-0.100.0}/zensical.toml +0 -0
@@ -43,6 +43,6 @@ jobs:
43
43
  run: uv run --extra audio --extra diarization --extra llm --extra rag --extra memory --extra vad --extra faster-whisper --extra piper --extra kokoro --extra server --extra speed --extra test pytest -vvv
44
44
  - name: Upload coverage reports to Codecov
45
45
  if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.13'
46
- uses: codecov/codecov-action@v6.0.1
46
+ uses: codecov/codecov-action@v7.0.0
47
47
  env:
48
48
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -11,7 +11,7 @@ repos:
11
11
  - id: end-of-file-fixer
12
12
  - id: mixed-line-ending
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: "v0.15.15"
14
+ rev: "v0.15.16"
15
15
  hooks:
16
16
  - id: ruff
17
17
  args: ["--fix"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.98.5
3
+ Version: 0.100.0
4
4
  Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
5
5
  Project-URL: Homepage, https://github.com/basnijholt/agent-cli
6
6
  Author-email: Bas Nijholt <bas@nijho.lt>
@@ -1031,6 +1031,21 @@ the `[defaults]` section of your configuration file.
1031
1031
  │ provide context for │
1032
1032
  │ LLM cleanup. │
1033
1033
  ╰────────────────────────────────────────────────────────────────────────────────────────╯
1034
+ ╭─ Live Preview ─────────────────────────────────────────────────────────────────────────╮
1035
+ │ --live-preview-log PATH Write rolling live transcription │
1036
+ │ preview events to JSONL while │
1037
+ │ recording. │
1038
+ │ --live-preview-interval FLOAT Seconds between live preview │
1039
+ │ retranscriptions. │
1040
+ │ [default: 2.0] │
1041
+ │ --live-preview-window FLOAT Seconds of recent audio to include │
1042
+ │ in each live preview │
1043
+ │ retranscription. │
1044
+ │ [default: 15.0] │
1045
+ │ --live-preview-console,--live-previ… Print rolling live transcription │
1046
+ │ preview updates to the terminal │
1047
+ │ while recording. │
1048
+ ╰────────────────────────────────────────────────────────────────────────────────────────╯
1034
1049
  ╭─ Diarization ──────────────────────────────────────────────────────────────────────────╮
1035
1050
  │ --diarize --no-diarize Enable speaker │
1036
1051
  │ diarization │
@@ -923,6 +923,21 @@ the `[defaults]` section of your configuration file.
923
923
  │ provide context for │
924
924
  │ LLM cleanup. │
925
925
  ╰────────────────────────────────────────────────────────────────────────────────────────╯
926
+ ╭─ Live Preview ─────────────────────────────────────────────────────────────────────────╮
927
+ │ --live-preview-log PATH Write rolling live transcription │
928
+ │ preview events to JSONL while │
929
+ │ recording. │
930
+ │ --live-preview-interval FLOAT Seconds between live preview │
931
+ │ retranscriptions. │
932
+ │ [default: 2.0] │
933
+ │ --live-preview-window FLOAT Seconds of recent audio to include │
934
+ │ in each live preview │
935
+ │ retranscription. │
936
+ │ [default: 15.0] │
937
+ │ --live-preview-console,--live-previ… Print rolling live transcription │
938
+ │ preview updates to the terminal │
939
+ │ while recording. │
940
+ ╰────────────────────────────────────────────────────────────────────────────────────────╯
926
941
  ╭─ Diarization ──────────────────────────────────────────────────────────────────────────╮
927
942
  │ --diarize --no-diarize Enable speaker │
928
943
  │ diarization │
@@ -365,13 +365,20 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
365
365
  emit_output: bool = True,
366
366
  raise_diarization_errors: bool = False,
367
367
  audio_level_callback: Callable[[bytes], None] | None = None,
368
+ live_preview_log: Path | None = None,
369
+ live_preview_interval: float = 2.0,
370
+ live_preview_window: float = 15.0,
371
+ live_preview_console: bool = False,
368
372
  ) -> TranscriptResult:
369
373
  """Unified async entry point for both live and file-based transcription."""
370
374
  start_time = time.monotonic()
371
375
  transcript: str | None
372
376
  saved_recording_path: Path | None = None
377
+ live_preview_console_active = (
378
+ live_preview_console and audio_file_path is None and provider_cfg.asr_provider == "wyoming"
379
+ )
373
380
 
374
- with maybe_live(not general_cfg.quiet) as live:
381
+ with maybe_live(not general_cfg.quiet and not live_preview_console_active) as live:
375
382
  if audio_file_path:
376
383
  # File-based transcription
377
384
  # Determine if we can use native format support (skip PCM conversion)
@@ -447,6 +454,17 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
447
454
  openai_asr_cfg,
448
455
  gemini_asr_cfg,
449
456
  )
457
+ live_preview_config = (
458
+ asr.LivePreviewConfig(
459
+ log_file=live_preview_log,
460
+ interval_seconds=live_preview_interval,
461
+ window_seconds=live_preview_window,
462
+ console=live_preview_console,
463
+ )
464
+ if (live_preview_log or live_preview_console)
465
+ and provider_cfg.asr_provider == "wyoming"
466
+ else None
467
+ )
450
468
  transcript = await live_transcriber(
451
469
  logger=LOGGER,
452
470
  stop_event=stop_event,
@@ -456,6 +474,7 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
456
474
  extra_instructions=extra_instructions,
457
475
  recording_path_callback=_set_saved_recording_path,
458
476
  audio_level_callback=audio_level_callback,
477
+ live_preview_config=live_preview_config,
459
478
  )
460
479
 
461
480
  elapsed = time.monotonic() - start_time
@@ -650,6 +669,10 @@ def transcribe( # noqa: PLR0912, PLR0911, PLR0915, C901
650
669
  print_args: bool = opts.PRINT_ARGS,
651
670
  transcription_log: Path | None = opts.TRANSCRIPTION_LOG,
652
671
  voice_level_log: Path | None = opts.VOICE_LEVEL_LOG,
672
+ live_preview_log: Path | None = opts.LIVE_PREVIEW_LOG,
673
+ live_preview_interval: float = opts.LIVE_PREVIEW_INTERVAL,
674
+ live_preview_window: float = opts.LIVE_PREVIEW_WINDOW,
675
+ live_preview_console: bool = opts.LIVE_PREVIEW_CONSOLE,
653
676
  # --- Diarization Options ---
654
677
  diarize: bool = opts.DIARIZE,
655
678
  diarize_format: opts.DiarizeFormat = opts.DIARIZE_FORMAT,
@@ -697,18 +720,24 @@ def transcribe( # noqa: PLR0912, PLR0911, PLR0915, C901
697
720
 
698
721
  setup_logging(log_level, log_file, quiet=effective_quiet)
699
722
 
723
+ enroll_speakers = _option_default(enroll_speakers)
724
+ identify_speakers = _option_default(identify_speakers)
725
+ remember_unknown_speakers = _option_default(remember_unknown_speakers)
726
+ speaker_profiles_file = _option_default(speaker_profiles_file)
727
+ speaker_match_threshold = _option_default(speaker_match_threshold)
728
+ live_preview_log = _option_default(live_preview_log)
729
+ live_preview_interval = _option_default(live_preview_interval)
730
+ live_preview_window = _option_default(live_preview_window)
731
+ live_preview_console = _option_default(live_preview_console)
732
+
700
733
  # Expand user path for transcription log
701
734
  if transcription_log:
702
735
  transcription_log = transcription_log.expanduser()
703
736
  voice_level_log = _option_default(voice_level_log)
704
737
  if voice_level_log:
705
738
  voice_level_log = voice_level_log.expanduser()
706
-
707
- enroll_speakers = _option_default(enroll_speakers)
708
- identify_speakers = _option_default(identify_speakers)
709
- remember_unknown_speakers = _option_default(remember_unknown_speakers)
710
- speaker_profiles_file = _option_default(speaker_profiles_file)
711
- speaker_match_threshold = _option_default(speaker_match_threshold)
739
+ if live_preview_log:
740
+ live_preview_log = live_preview_log.expanduser()
712
741
 
713
742
  # Validate diarization options
714
743
  if not diarize and (enroll_speakers or remember_unknown_speakers):
@@ -850,6 +879,10 @@ def transcribe( # noqa: PLR0912, PLR0911, PLR0915, C901
850
879
  diarization_cfg=diarization_cfg,
851
880
  emit_output=not json_output,
852
881
  raise_diarization_errors=diarize,
882
+ live_preview_log=live_preview_log,
883
+ live_preview_interval=live_preview_interval,
884
+ live_preview_window=live_preview_window,
885
+ live_preview_console=live_preview_console,
853
886
  ),
854
887
  )
855
888
  except ImportError as exc:
@@ -942,6 +975,10 @@ def transcribe( # noqa: PLR0912, PLR0911, PLR0915, C901
942
975
  audio_level_callback=audio_level_writer.write_chunk
943
976
  if audio_level_writer
944
977
  else None,
978
+ live_preview_log=live_preview_log,
979
+ live_preview_interval=live_preview_interval,
980
+ live_preview_window=live_preview_window,
981
+ live_preview_console=live_preview_console,
945
982
  ),
946
983
  )
947
984
  except ImportError as exc:
@@ -618,11 +618,13 @@ def new(
618
618
  summary_lines.append(
619
619
  f"[bold]Agent Handle:[/bold] {agent_handle.handle} ({agent_handle.terminal_name})",
620
620
  )
621
- if agent_handle.session_name:
621
+ if agent_handle.session_name and agent_handle.terminal_name == "tmux":
622
622
  summary_lines.append(f"[bold]tmux Session:[/bold] {agent_handle.session_name}")
623
623
  summary_lines.append(
624
624
  f"[bold]Attach:[/bold] tmux attach -t {shlex.quote(agent_handle.session_name)}",
625
625
  )
626
+ elif agent_handle.session_name and agent_handle.terminal_name == "cmux":
627
+ summary_lines.append(f"[bold]cmux Workspace:[/bold] {agent_handle.session_name}")
626
628
 
627
629
  console.print()
628
630
  console.print(
@@ -1146,7 +1148,7 @@ def start_agent(
1146
1148
  f"{handle.terminal_name} handle: {handle.handle}"
1147
1149
  + (
1148
1150
  f" (attach with: tmux attach -t {shlex.quote(handle.session_name)})"
1149
- if handle.session_name
1151
+ if handle.session_name and handle.terminal_name == "tmux"
1150
1152
  else ""
1151
1153
  ),
1152
1154
  )
@@ -1280,7 +1282,7 @@ def list_terminals_cmd(
1280
1282
  ) -> None:
1281
1283
  """List available terminal multiplexers and their status.
1282
1284
 
1283
- Shows supported terminals: tmux, zellij, kitty, iTerm2, Terminal.app,
1285
+ Shows supported terminals: tmux, zellij, cmux, kitty, iTerm2, Terminal.app,
1284
1286
  Warp, GNOME Terminal.
1285
1287
 
1286
1288
  These are used to open new tabs when launching AI agents with `dev new --start-agent`.
@@ -321,6 +321,36 @@ def _launch_in_tmux(
321
321
  return handle
322
322
 
323
323
 
324
+ def _launch_in_cmux(
325
+ path: Path,
326
+ agent: CodingAgent,
327
+ terminal: terminals.Terminal,
328
+ full_cmd: str,
329
+ tab_name: str,
330
+ repo_root: Path | None,
331
+ ) -> TerminalHandle | None:
332
+ """Launch an agent in a cmux tab inside a workspace named after the repo."""
333
+ from .terminals.cmux import Cmux # noqa: PLC0415
334
+
335
+ if not isinstance(terminal, Cmux):
336
+ warn("Could not open new tab in cmux")
337
+ return None
338
+
339
+ workspace_name = (repo_root or path).name
340
+ handle = terminal.open_in_workspace(
341
+ path,
342
+ full_cmd,
343
+ tab_name=tab_name,
344
+ workspace_name=workspace_name,
345
+ )
346
+ if handle is None:
347
+ warn("Could not open new tab in cmux")
348
+ return None
349
+
350
+ success(f"Started {agent.name} in cmux workspace {workspace_name!r}")
351
+ return handle
352
+
353
+
324
354
  def _launch_in_terminal(
325
355
  path: Path,
326
356
  agent: CodingAgent,
@@ -332,6 +362,10 @@ def _launch_in_terminal(
332
362
  tmux_session: str | None,
333
363
  ) -> tuple[bool, TerminalHandle | None]:
334
364
  """Launch an agent in the resolved terminal."""
365
+ if terminal.name == "cmux":
366
+ handle = _launch_in_cmux(path, agent, terminal, full_cmd, tab_name, repo_root)
367
+ return handle is not None, handle
368
+
335
369
  if terminal.name == "tmux":
336
370
  handle = _launch_in_tmux(
337
371
  path,
@@ -0,0 +1,247 @@
1
+ """cmux terminal adapter.
2
+
3
+ cmux (https://cmux.dev) is a Ghostty-based macOS terminal organized as
4
+ windows > workspaces > panes > surfaces (tabs), controlled via a Unix
5
+ socket through the bundled ``cmux`` CLI.
6
+
7
+ agent-cli maps repos to workspaces: each repo gets a workspace named after
8
+ it, and each worktree launch opens a new tab inside that workspace.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import hashlib
14
+ import json
15
+ import os
16
+ import shlex
17
+ import shutil
18
+ import subprocess
19
+ from typing import TYPE_CHECKING
20
+
21
+ from agent_cli.dev.worktree import get_main_repo_root
22
+
23
+ from .base import Terminal, TerminalHandle
24
+
25
+ if TYPE_CHECKING:
26
+ from pathlib import Path
27
+
28
+ # Named colors accepted by `cmux workspace-action --action set-color`.
29
+ _WORKSPACE_COLORS = (
30
+ "Red",
31
+ "Crimson",
32
+ "Orange",
33
+ "Amber",
34
+ "Olive",
35
+ "Green",
36
+ "Teal",
37
+ "Aqua",
38
+ "Blue",
39
+ "Navy",
40
+ "Indigo",
41
+ "Purple",
42
+ "Magenta",
43
+ "Rose",
44
+ "Brown",
45
+ "Charcoal",
46
+ )
47
+
48
+
49
+ class Cmux(Terminal):
50
+ """cmux - Ghostty-based terminal with workspaces for AI coding agents."""
51
+
52
+ name = "cmux"
53
+
54
+ def detect(self) -> bool:
55
+ """Detect if running inside cmux via its auto-set environment variables."""
56
+ return bool(
57
+ os.environ.get("CMUX_WORKSPACE_ID") or os.environ.get("CMUX_SURFACE_ID"),
58
+ )
59
+
60
+ def is_available(self) -> bool:
61
+ """Check if the cmux CLI is available."""
62
+ return shutil.which("cmux") is not None
63
+
64
+ def open_new_tab(
65
+ self,
66
+ path: Path,
67
+ command: str | None = None,
68
+ tab_name: str | None = None,
69
+ ) -> bool:
70
+ """Open a new tab in a workspace named after the repo containing ``path``."""
71
+ repo_root = get_main_repo_root(path)
72
+ workspace_name = (repo_root or path).name
73
+ handle = self.open_in_workspace(path, command, tab_name, workspace_name=workspace_name)
74
+ return handle is not None
75
+
76
+ def open_in_workspace(
77
+ self,
78
+ path: Path,
79
+ command: str | None = None,
80
+ tab_name: str | None = None,
81
+ *,
82
+ workspace_name: str,
83
+ ) -> TerminalHandle | None:
84
+ """Open a tab in the named cmux workspace, creating the workspace if needed.
85
+
86
+ Workspace targets are always passed explicitly because the cmux CLI
87
+ otherwise defaults to the caller's workspace (``CMUX_WORKSPACE_ID``).
88
+ """
89
+ if not self.is_available():
90
+ return None
91
+ workspaces = self._list_workspaces()
92
+ if workspaces is None:
93
+ # The cmux CLI itself failed (e.g. app not running); creating a
94
+ # workspace would fail too, or duplicate one we could not see.
95
+ return None
96
+ workspace_ref = next(
97
+ (w.get("ref") for w in workspaces if w.get("title") == workspace_name),
98
+ None,
99
+ )
100
+ if workspace_ref is None:
101
+ return self._create_workspace(path, command, tab_name, workspace_name=workspace_name)
102
+ return self._open_tab(
103
+ path,
104
+ command,
105
+ tab_name,
106
+ workspace_ref=workspace_ref,
107
+ workspace_name=workspace_name,
108
+ )
109
+
110
+ def _list_workspaces(self) -> list[dict] | None:
111
+ """List workspace dicts via the cmux CLI, or None when the CLI call fails."""
112
+ stdout = self._run(["workspace", "list", "--json"])
113
+ if stdout is None:
114
+ return None
115
+ try:
116
+ data = json.loads(stdout)
117
+ except json.JSONDecodeError:
118
+ return None
119
+ workspaces = data.get("workspaces", [])
120
+ return workspaces if isinstance(workspaces, list) else None
121
+
122
+ def _create_workspace(
123
+ self,
124
+ path: Path,
125
+ command: str | None,
126
+ tab_name: str | None,
127
+ *,
128
+ workspace_name: str,
129
+ ) -> TerminalHandle | None:
130
+ """Create a workspace whose initial tab starts in ``path`` running ``command``."""
131
+ cmd = ["workspace", "create", "--name", workspace_name, "--cwd", str(path)]
132
+ if command:
133
+ cmd.extend(["--command", command])
134
+ workspace_ref = self._parse_ok_ref(self._run(cmd), "workspace:")
135
+ if workspace_ref is None:
136
+ return None
137
+ self._run(
138
+ [
139
+ "workspace-action",
140
+ "--action",
141
+ "set-color",
142
+ "--workspace",
143
+ workspace_ref,
144
+ "--color",
145
+ self._workspace_color(workspace_name),
146
+ ],
147
+ )
148
+ if tab_name:
149
+ # The freshly created workspace has a single tab, which is its
150
+ # focused tab, so rename-tab needs no explicit surface target.
151
+ self._run(["rename-tab", "--workspace", workspace_ref, "--title", tab_name])
152
+ return TerminalHandle(
153
+ terminal_name=self.name,
154
+ handle=workspace_ref,
155
+ session_name=workspace_name,
156
+ )
157
+
158
+ def _open_tab(
159
+ self,
160
+ path: Path,
161
+ command: str | None,
162
+ tab_name: str | None,
163
+ *,
164
+ workspace_ref: str,
165
+ workspace_name: str,
166
+ ) -> TerminalHandle | None:
167
+ """Open a new tab in an existing workspace and run ``command`` in ``path``."""
168
+ surface_ref = self._parse_ok_ref(
169
+ self._run(["new-surface", "--workspace", workspace_ref]),
170
+ "surface:",
171
+ )
172
+ if surface_ref is None:
173
+ return None
174
+ if tab_name:
175
+ self._run(
176
+ [
177
+ "rename-tab",
178
+ "--workspace",
179
+ workspace_ref,
180
+ "--surface",
181
+ surface_ref,
182
+ "--title",
183
+ tab_name,
184
+ ],
185
+ )
186
+ # New surfaces don't accept a cwd/command, so type it into the shell.
187
+ # The terminal buffers the input until the shell is ready, and cmux
188
+ # turns the literal \n escape sequence into Enter.
189
+ shell_cmd = f"cd {shlex.quote(str(path))}"
190
+ if command:
191
+ shell_cmd += f" && {command}"
192
+ sent = self._run(
193
+ [
194
+ "send",
195
+ "--workspace",
196
+ workspace_ref,
197
+ "--surface",
198
+ surface_ref,
199
+ "--",
200
+ shell_cmd + "\\n",
201
+ ],
202
+ )
203
+ if sent is None:
204
+ # The command never reached the tab, so the agent is not running;
205
+ # remove the idle tab and report failure instead of a dead handle.
206
+ self._run(["close-surface", "--workspace", workspace_ref, "--surface", surface_ref])
207
+ return None
208
+ return TerminalHandle(
209
+ terminal_name=self.name,
210
+ handle=surface_ref,
211
+ session_name=workspace_name,
212
+ )
213
+
214
+ @staticmethod
215
+ def _workspace_color(workspace_name: str) -> str:
216
+ """Pick a deterministic cmux named color for a workspace."""
217
+ digest = hashlib.sha256(workspace_name.encode()).hexdigest()
218
+ return _WORKSPACE_COLORS[int(digest[:8], 16) % len(_WORKSPACE_COLORS)]
219
+
220
+ @staticmethod
221
+ def _run(args: list[str]) -> str | None:
222
+ """Run a cmux CLI command and return its stdout, or None on failure."""
223
+ env = {**os.environ, "CMUX_QUIET": "1"}
224
+ try:
225
+ result = subprocess.run(
226
+ ["cmux", *args], # noqa: S607
227
+ check=True,
228
+ capture_output=True,
229
+ text=True,
230
+ env=env,
231
+ )
232
+ except (subprocess.CalledProcessError, OSError):
233
+ return None
234
+ return result.stdout
235
+
236
+ @staticmethod
237
+ def _parse_ok_ref(stdout: str | None, prefix: str) -> str | None:
238
+ """Extract the first ``<prefix>N`` ref from an ``OK ...`` response line."""
239
+ if not stdout:
240
+ return None
241
+ for line in stdout.splitlines():
242
+ if not line.startswith("OK"):
243
+ continue
244
+ for token in line.split():
245
+ if token.startswith(prefix):
246
+ return token
247
+ return None
@@ -6,6 +6,7 @@ from agent_cli.dev.registry import Registry
6
6
 
7
7
  from .apple_terminal import AppleTerminal
8
8
  from .base import Terminal # noqa: TC001
9
+ from .cmux import Cmux
9
10
  from .gnome import GnomeTerminal
10
11
  from .iterm2 import ITerm2
11
12
  from .kitty import Kitty
@@ -18,6 +19,7 @@ from .zellij import Zellij
18
19
  _TERMINALS: list[type[Terminal]] = [
19
20
  Tmux,
20
21
  Zellij,
22
+ Cmux,
21
23
  ITerm2,
22
24
  Kitty,
23
25
  Warp,
@@ -436,6 +436,31 @@ VOICE_LEVEL_LOG: Path | None = typer.Option(
436
436
  hidden=True,
437
437
  rich_help_panel="General Options",
438
438
  )
439
+ LIVE_PREVIEW_LOG: Path | None = typer.Option(
440
+ None,
441
+ "--live-preview-log",
442
+ help="Write rolling live transcription preview events to JSONL while recording.",
443
+ rich_help_panel="Live Preview",
444
+ )
445
+ LIVE_PREVIEW_INTERVAL: float = typer.Option(
446
+ 2.0,
447
+ "--live-preview-interval",
448
+ help="Seconds between live preview retranscriptions.",
449
+ rich_help_panel="Live Preview",
450
+ )
451
+ LIVE_PREVIEW_WINDOW: float = typer.Option(
452
+ 15.0,
453
+ "--live-preview-window",
454
+ help="Seconds of recent audio to include in each live preview retranscription.",
455
+ rich_help_panel="Live Preview",
456
+ )
457
+ LIVE_PREVIEW_CONSOLE: bool = typer.Option(
458
+ False, # noqa: FBT003
459
+ "--live-preview-console",
460
+ "--live-preview-stdout",
461
+ help="Print rolling live transcription preview updates to the terminal while recording.",
462
+ rich_help_panel="Live Preview",
463
+ )
439
464
 
440
465
  # --- Server Options ---
441
466
  SERVER_HOST: str = typer.Option(