code-puppy 0.0.650__tar.gz → 0.0.652__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 (513) hide show
  1. {code_puppy-0.0.650 → code_puppy-0.0.652}/PKG-INFO +1 -1
  2. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/cli_runner.py +102 -98
  3. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/config_commands.py +37 -36
  4. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/config.py +3 -2
  5. code_puppy-0.0.652/code_puppy/i18n/audit.py +298 -0
  6. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locale.py +15 -36
  7. code_puppy-0.0.652/code_puppy/i18n/locales/en-US.json +113 -0
  8. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/code_puppy_agent/SKILL.md +10 -4
  9. {code_puppy-0.0.650 → code_puppy-0.0.652}/pyproject.toml +1 -1
  10. code_puppy-0.0.650/code_puppy/i18n/locales/en-US.json +0 -23
  11. {code_puppy-0.0.650 → code_puppy-0.0.652}/.gitignore +0 -0
  12. {code_puppy-0.0.650 → code_puppy-0.0.652}/LICENSE +0 -0
  13. {code_puppy-0.0.650 → code_puppy-0.0.652}/README.md +0 -0
  14. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/__init__.py +0 -0
  15. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/__main__.py +0 -0
  16. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/__init__.py +0 -0
  17. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_builder.py +0 -0
  18. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_compaction.py +0 -0
  19. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_diagnostics.py +0 -0
  20. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_history.py +0 -0
  21. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_key_listeners.py +0 -0
  22. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_non_streaming_render.py +0 -0
  23. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_run_signals.py +0 -0
  24. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_runtime.py +0 -0
  25. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/_steer_processor.py +0 -0
  26. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_code_puppy.py +0 -0
  27. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_creator_agent.py +0 -0
  28. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_helios.py +0 -0
  29. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_manager.py +0 -0
  30. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_planning.py +0 -0
  31. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/agent_qa_kitten.py +0 -0
  32. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/base_agent.py +0 -0
  33. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/event_stream_handler.py +0 -0
  34. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/json_agent.py +0 -0
  35. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/retry_profiles.py +0 -0
  36. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/run_stats.py +0 -0
  37. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/smooth_stream.py +0 -0
  38. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/agents/subagent_stream_handler.py +0 -0
  39. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/callbacks.py +0 -0
  40. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/chatgpt_codex_client.py +0 -0
  41. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/claude_cache_client.py +0 -0
  42. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/__init__.py +0 -0
  43. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/add_model_menu.py +0 -0
  44. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/agent_menu.py +0 -0
  45. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/attachments.py +0 -0
  46. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/autosave_menu.py +0 -0
  47. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/autosave_search.py +0 -0
  48. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/clipboard.py +0 -0
  49. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/colors_menu.py +0 -0
  50. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/command_handler.py +0 -0
  51. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/command_registry.py +0 -0
  52. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/config_apply.py +0 -0
  53. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/core_commands.py +0 -0
  54. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/diff_menu.py +0 -0
  55. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/file_index.py +0 -0
  56. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/file_path_completion.py +0 -0
  57. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/image_utils.py +0 -0
  58. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/judges_menu.py +0 -0
  59. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/load_context_completion.py +0 -0
  60. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/__init__.py +0 -0
  61. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/base.py +0 -0
  62. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  63. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  64. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  65. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/edit_command.py +0 -0
  66. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/handler.py +0 -0
  67. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/help_command.py +0 -0
  68. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/install_command.py +0 -0
  69. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/install_menu.py +0 -0
  70. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/list_command.py +0 -0
  71. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/logs_command.py +0 -0
  72. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/remove_command.py +0 -0
  73. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/restart_command.py +0 -0
  74. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/search_command.py +0 -0
  75. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
  76. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  77. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/start_command.py +0 -0
  78. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/status_command.py +0 -0
  79. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  80. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/stop_command.py +0 -0
  81. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/trust_command.py +0 -0
  82. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/utils.py +0 -0
  83. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  84. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp_binding_menu.py +0 -0
  85. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/mcp_completion.py +0 -0
  86. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/model_picker_completion.py +0 -0
  87. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/model_settings_menu.py +0 -0
  88. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/onboarding_slides.py +0 -0
  89. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/onboarding_wizard.py +0 -0
  90. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/pagination.py +0 -0
  91. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/pin_command_completion.py +0 -0
  92. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  93. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/session_commands.py +0 -0
  94. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu.py +0 -0
  95. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_catalog.py +0 -0
  96. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_render.py +0 -0
  97. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_schema.py +0 -0
  98. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_settings.py +0 -0
  99. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_shims.py +0 -0
  100. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/set_menu_values.py +0 -0
  101. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/shell_passthrough.py +0 -0
  102. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/skills_completion.py +0 -0
  103. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/uc_menu.py +0 -0
  104. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/utils.py +0 -0
  105. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/command_line/wiggum_state.py +0 -0
  106. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/error_logging.py +0 -0
  107. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/gemini_code_assist.py +0 -0
  108. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/gemini_model.py +0 -0
  109. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/README.md +0 -0
  110. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/__init__.py +0 -0
  111. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/aliases.py +0 -0
  112. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/engine.py +0 -0
  113. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/executor.py +0 -0
  114. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/matcher.py +0 -0
  115. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/models.py +0 -0
  116. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/registry.py +0 -0
  117. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/hook_engine/validator.py +0 -0
  118. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/http_utils.py +0 -0
  119. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/__init__.py +0 -0
  120. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/catalog.py +0 -0
  121. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/formats.py +0 -0
  122. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/es-AR.json +0 -0
  123. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/es-CL.json +0 -0
  124. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/es-CO.json +0 -0
  125. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/es-MX.json +0 -0
  126. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/es.json +0 -0
  127. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/locales/fr-CA.json +0 -0
  128. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/plurals.py +0 -0
  129. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/pseudo.py +0 -0
  130. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/i18n/translate.py +0 -0
  131. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/keymap.py +0 -0
  132. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/list_filtering.py +0 -0
  133. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/main.py +0 -0
  134. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/__init__.py +0 -0
  135. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/agent_bindings.py +0 -0
  136. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/async_lifecycle.py +0 -0
  137. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/blocking_startup.py +0 -0
  138. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  139. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/circuit_breaker.py +0 -0
  140. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/config_wizard.py +0 -0
  141. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/dashboard.py +0 -0
  142. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/error_isolation.py +0 -0
  143. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/examples/retry_example.py +0 -0
  144. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/health_monitor.py +0 -0
  145. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/managed_server.py +0 -0
  146. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/manager.py +0 -0
  147. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/mcp_logs.py +0 -0
  148. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/project_config.py +0 -0
  149. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/registry.py +0 -0
  150. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/retry_manager.py +0 -0
  151. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  152. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/status_tracker.py +0 -0
  153. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/system_tools.py +0 -0
  154. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
  155. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_prompts/__init__.py +0 -0
  156. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/mcp_prompts/hook_creator.py +0 -0
  157. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/__init__.py +0 -0
  158. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/bar_painters.py +0 -0
  159. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/bar_rendering.py +0 -0
  160. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/bottom_bar.py +0 -0
  161. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/bus.py +0 -0
  162. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/chords.py +0 -0
  163. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/commands.py +0 -0
  164. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_actions.py +0 -0
  165. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_completion.py +0 -0
  166. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_display.py +0 -0
  167. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_history.py +0 -0
  168. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_keys.py +0 -0
  169. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/editor_paste.py +0 -0
  170. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/external_editor.py +0 -0
  171. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/inline_bar.py +0 -0
  172. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/line_editor.py +0 -0
  173. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/markdown_patches.py +0 -0
  174. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/message_queue.py +0 -0
  175. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/messages.py +0 -0
  176. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/pause_controller.py +0 -0
  177. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/prompt_prefix_style.py +0 -0
  178. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/queue_console.py +0 -0
  179. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/renderers.py +0 -0
  180. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/rich_renderer.py +0 -0
  181. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/run_ui.py +0 -0
  182. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/run_ui_wiring.py +0 -0
  183. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/spinner/__init__.py +0 -0
  184. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/subagent_console.py +0 -0
  185. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/messaging/transcript_guard.py +0 -0
  186. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/model_descriptions.py +0 -0
  187. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/model_factory.py +0 -0
  188. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/model_switching.py +0 -0
  189. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/model_utils.py +0 -0
  190. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/models.json +0 -0
  191. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/models_dev_api.json +0 -0
  192. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/models_dev_parser.py +0 -0
  193. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/__init__.py +0 -0
  194. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/README.md +0 -0
  195. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/__init__.py +0 -0
  196. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/agent.py +0 -0
  197. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/bridge.py +0 -0
  198. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/capabilities.py +0 -0
  199. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/commands.py +0 -0
  200. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/content.py +0 -0
  201. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/io_delegation.py +0 -0
  202. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/mcp_config.py +0 -0
  203. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/permissions.py +0 -0
  204. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/persistence.py +0 -0
  205. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/register_callbacks.py +0 -0
  206. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/replay.py +0 -0
  207. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/session.py +0 -0
  208. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/session_config.py +0 -0
  209. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/acp/state.py +0 -0
  210. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/__init__.py +0 -0
  211. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/config.py +0 -0
  212. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/discovery.py +0 -0
  213. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/downloader.py +0 -0
  214. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
  215. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/installer.py +0 -0
  216. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/metadata.py +0 -0
  217. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
  218. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
  219. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
  220. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
  221. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
  222. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
  223. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
  224. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
  225. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/aws_bedrock/config.py +0 -0
  226. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
  227. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
  228. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/README.md +0 -0
  229. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
  230. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/config.py +0 -0
  231. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
  232. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
  233. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/token.py +0 -0
  234. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/azure_foundry/utils.py +0 -0
  235. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/btw/__init__.py +0 -0
  236. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/btw/inline_view.py +0 -0
  237. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/btw/register_callbacks.py +0 -0
  238. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/btw/side_query.py +0 -0
  239. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  240. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  241. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  242. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  243. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  244. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/usage.py +0 -0
  245. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  246. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
  247. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
  248. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
  249. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  250. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  251. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  252. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  253. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
  254. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
  255. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  256. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
  257. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  258. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  259. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  260. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/code_puppy_agent/__init__.py +0 -0
  261. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/code_puppy_agent/register_callbacks.py +0 -0
  262. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/config.py +0 -0
  263. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/context_indicator/__init__.py +0 -0
  264. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
  265. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/context_indicator/usage.py +0 -0
  266. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
  267. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/copilot_auth/config.py +0 -0
  268. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
  269. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
  270. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/copilot_auth/utils.py +0 -0
  271. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  272. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  273. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
  274. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
  275. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
  276. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
  277. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
  278. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
  279. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
  280. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/startup_lock.py +0 -0
  281. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
  282. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
  283. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
  284. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
  285. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
  286. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
  287. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/emoji_filter/config.py +0 -0
  288. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
  289. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
  290. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  291. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/example_custom_command/README.md +0 -0
  292. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  293. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  294. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  295. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/__init__.py +0 -0
  296. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  297. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  298. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  299. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  300. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  301. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  302. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  303. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  304. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  305. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  306. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  307. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  308. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  309. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  310. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  311. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  312. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  313. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  314. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  315. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  316. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  317. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  318. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  319. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  320. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  321. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/installer.py +0 -0
  322. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/flux_bootstrap/register_callbacks.py +0 -0
  323. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
  324. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/force_push_guard/detector.py +0 -0
  325. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
  326. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
  327. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/fork/__init__.py +0 -0
  328. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/fork/register_callbacks.py +0 -0
  329. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
  330. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
  331. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
  332. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
  333. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/__init__.py +0 -0
  334. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/config.py +0 -0
  335. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/oauth_flow.py +0 -0
  336. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/register_callbacks.py +0 -0
  337. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/test_plugin.py +0 -0
  338. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/grok_oauth/utils.py +0 -0
  339. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/herdr/README.md +0 -0
  340. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/herdr/__init__.py +0 -0
  341. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/herdr/client.py +0 -0
  342. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/herdr/register_callbacks.py +0 -0
  343. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/herdr/reporter.py +0 -0
  344. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_creator/__init__.py +0 -0
  345. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
  346. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_manager/__init__.py +0 -0
  347. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_manager/config.py +0 -0
  348. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
  349. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
  350. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/no_tools/__init__.py +0 -0
  351. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/no_tools/register_callbacks.py +0 -0
  352. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/oauth_pasteback.py +0 -0
  353. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  354. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/obsidian_agent/README.md +0 -0
  355. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
  356. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
  357. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
  358. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/ollama/__init__.py +0 -0
  359. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
  360. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
  361. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/ollama_setup/completer.py +0 -0
  362. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
  363. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/__init__.py +0 -0
  364. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugin_contributions.py +0 -0
  365. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugin_meta.py +0 -0
  366. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugin_text_utils.py +0 -0
  367. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
  368. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugins_menu_layout.py +0 -0
  369. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/plugins_menu_render.py +0 -0
  370. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/project_trust_flow.py +0 -0
  371. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
  372. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/pop_command/__init__.py +0 -0
  373. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
  374. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
  375. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prompt_newline/config.py +0 -0
  376. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
  377. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prune/__init__.py +0 -0
  378. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prune/prune_menu.py +0 -0
  379. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prune/prune_model.py +0 -0
  380. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prune/prune_render.py +0 -0
  381. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/prune/register_callbacks.py +0 -0
  382. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/README.md +0 -0
  383. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
  384. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
  385. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/config.py +0 -0
  386. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
  387. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
  388. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
  389. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
  390. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
  391. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
  392. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/state.py +0 -0
  393. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
  394. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
  395. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/README.md +0 -0
  396. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/__init__.py +0 -0
  397. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/builtin_frames.py +0 -0
  398. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/commands.py +0 -0
  399. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/picker.py +0 -0
  400. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/register_callbacks.py +0 -0
  401. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/puppy_spinner/spinners.py +0 -0
  402. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/quick_resume/__init__.py +0 -0
  403. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/quick_resume/register_callbacks.py +0 -0
  404. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/review_pr/__init__.py +0 -0
  405. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
  406. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  407. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  408. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  409. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  410. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/stack_dump/__init__.py +0 -0
  411. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/stack_dump/register_callbacks.py +0 -0
  412. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/__init__.py +0 -0
  413. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/config.py +0 -0
  414. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/payload.py +0 -0
  415. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
  416. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
  417. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/runner.py +0 -0
  418. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/statusline/statusline_command.py +0 -0
  419. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/steer_queue/__init__.py +0 -0
  420. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/steer_queue/queue_menu.py +0 -0
  421. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/steer_queue/register_callbacks.py +0 -0
  422. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/README.md +0 -0
  423. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/__init__.py +0 -0
  424. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/coalesce_patch.py +0 -0
  425. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/panel_render.py +0 -0
  426. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/register_callbacks.py +0 -0
  427. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/resume_repaint.py +0 -0
  428. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/subagent_panel/state.py +0 -0
  429. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
  430. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
  431. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/README.md +0 -0
  432. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/__init__.py +0 -0
  433. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
  434. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/content_styles.py +0 -0
  435. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/osc_palette.py +0 -0
  436. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/picker.py +0 -0
  437. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/prompt_toolkit_theme.py +0 -0
  438. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/register_callbacks.py +0 -0
  439. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/rich_themes.py +0 -0
  440. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/theme/themes.py +0 -0
  441. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
  442. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
  443. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
  444. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/trust.py +0 -0
  445. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/trust_notice.py +0 -0
  446. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
  447. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/universal_constructor/models.py +0 -0
  448. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
  449. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/universal_constructor/registry.py +0 -0
  450. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
  451. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
  452. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
  453. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wiggum/__init__.py +0 -0
  454. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wiggum/judge.py +0 -0
  455. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wiggum/judge_config.py +0 -0
  456. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
  457. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/wiggum/state.py +0 -0
  458. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/yolo_cli/__init__.py +0 -0
  459. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/plugins/yolo_cli/register_callbacks.py +0 -0
  460. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/provider_credentials.py +0 -0
  461. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/provider_identity.py +0 -0
  462. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/pydantic_patches.py +0 -0
  463. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/reopenable_async_client.py +0 -0
  464. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/round_robin_model.py +0 -0
  465. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/secret_store.py +0 -0
  466. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/secret_store_backends.py +0 -0
  467. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/session_lifecycle.py +0 -0
  468. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/session_migration.py +0 -0
  469. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/session_storage.py +0 -0
  470. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/status_display.py +0 -0
  471. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/summarization_agent.py +0 -0
  472. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/terminal_utils.py +0 -0
  473. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/__init__.py +0 -0
  474. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/agent_tools.py +0 -0
  475. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/__init__.py +0 -0
  476. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/constants.py +0 -0
  477. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
  478. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/handler.py +0 -0
  479. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/models.py +0 -0
  480. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/registration.py +0 -0
  481. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/renderers.py +0 -0
  482. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
  483. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/theme.py +0 -0
  484. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
  485. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/__init__.py +0 -0
  486. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_control.py +0 -0
  487. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_interactions.py +0 -0
  488. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_locator_resolver.py +0 -0
  489. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_locators.py +0 -0
  490. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_manager.py +0 -0
  491. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_navigation.py +0 -0
  492. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_page_snapshot.py +0 -0
  493. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  494. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_scripts.py +0 -0
  495. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_semantic_interactions.py +0 -0
  496. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/browser/browser_workflows.py +0 -0
  497. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/command_runner.py +0 -0
  498. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/common.py +0 -0
  499. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/display.py +0 -0
  500. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/file_modifications.py +0 -0
  501. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/file_operations.py +0 -0
  502. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/fs_access.py +0 -0
  503. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/image_tools.py +0 -0
  504. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/io_backends.py +0 -0
  505. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/model_tools.py +0 -0
  506. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/shell_backgrounding.py +0 -0
  507. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/skills_tools.py +0 -0
  508. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/subagent_context.py +0 -0
  509. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/subagent_invocation.py +0 -0
  510. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/tools_content.py +0 -0
  511. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/tools/universal_constructor.py +0 -0
  512. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/undo_manager.py +0 -0
  513. {code_puppy-0.0.650 → code_puppy-0.0.652}/code_puppy/version_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.650
3
+ Version: 0.0.652
4
4
  Summary: Code generation agent
5
5
  Project-URL: repository, https://github.com/mpfaffenberger/code_puppy
6
6
  Project-URL: HomePage, https://github.com/mpfaffenberger/code_puppy
@@ -20,6 +20,7 @@ from rich.console import Console
20
20
 
21
21
  from code_puppy import __version__, callbacks, plugins
22
22
  from code_puppy.agents import get_current_agent
23
+ from code_puppy.i18n import t
23
24
  from code_puppy.command_line.attachments import (
24
25
  parse_prompt_attachments,
25
26
  resolve_user_prompt,
@@ -83,12 +84,7 @@ def _render_turn_exception(exc: Exception) -> None:
83
84
  )
84
85
  from code_puppy.messaging import emit_error
85
86
 
86
- emit_error(
87
- f"\U0001f50c The model connection hit a transient error "
88
- f"({type(exc).__name__}) and didn't recover after auto-retries. "
89
- "This is almost always a VPN/WiFi/provider blip \u2014 just re-run "
90
- "your last prompt. Your session history is intact."
91
- )
87
+ emit_error(t("cli.error.model_transient", error_type=type(exc).__name__))
92
88
  return
93
89
 
94
90
  log_error(
@@ -132,8 +128,10 @@ def apply_quick_resume(args) -> bool:
132
128
  # Diagnostic identifies the lookup scope without leaking full local paths.
133
129
  cwd, branch = get_quick_resume_location(target_path)
134
130
  emit_info(
135
- "\U0001f50d Quick Resume selected - finding latest session for "
136
- f"{format_quick_resume_scope(cwd, branch)}"
131
+ t(
132
+ "cli.resume.quick_searching",
133
+ scope=format_quick_resume_scope(cwd, branch),
134
+ )
137
135
  )
138
136
 
139
137
  quick_resume_pickle = resolve_quick_resume_pickle(target_path)
@@ -141,7 +139,7 @@ def apply_quick_resume(args) -> bool:
141
139
  args.resume = quick_resume_pickle
142
140
  return True
143
141
 
144
- emit_info("No previous session found for this scope; starting fresh.")
142
+ emit_info(t("cli.resume.none_found"))
145
143
  return False
146
144
 
147
145
 
@@ -267,14 +265,14 @@ async def main():
267
265
  # Print directly to console to avoid the 'dim' style from emit_system_message
268
266
  display_console.print("\n".join(lines))
269
267
  except ImportError:
270
- emit_system_message("🐶 Code Puppy is Loading...")
268
+ emit_system_message(t("cli.loading"))
271
269
 
272
270
  # Truecolor warning moved to interactive_mode() so it prints LAST
273
271
  # after all the help stuff - max visibility for the ugly red box!
274
272
 
275
273
  available_port = find_available_port()
276
274
  if available_port is None:
277
- emit_error("No available ports in range 8090-9010!")
275
+ emit_error(t("cli.error.no_ports"))
278
276
  return
279
277
 
280
278
  # Early model setting if specified via command line
@@ -333,14 +331,16 @@ async def main():
333
331
  models_config = ModelFactory.load_config()
334
332
  available_models = list(models_config.keys()) if models_config else []
335
333
 
336
- emit_error(f"Model '{model_name}' not found")
337
- emit_system_message(f"Available models: {', '.join(available_models)}")
334
+ emit_error(t("cli.model.not_found", model=model_name))
335
+ emit_system_message(
336
+ t("cli.model.available", models=", ".join(available_models))
337
+ )
338
338
  sys.exit(1)
339
339
 
340
340
  # Model is valid, show confirmation (already set earlier)
341
- emit_system_message(f"🎯 Using model: {model_name}")
341
+ emit_system_message(t("cli.model.using", model=model_name))
342
342
  except Exception as e:
343
- emit_error(f"Error validating model: {str(e)}")
343
+ emit_error(t("cli.model.validate_error", error=str(e)))
344
344
  sys.exit(1)
345
345
 
346
346
  # Handle agent selection from command line
@@ -355,17 +355,17 @@ async def main():
355
355
  # First check if the agent exists by getting available agents
356
356
  available_agents = get_available_agents()
357
357
  if agent_name not in available_agents:
358
- emit_error(f"Agent '{agent_name}' not found")
358
+ emit_error(t("cli.agent.not_found", agent=agent_name))
359
359
  emit_system_message(
360
- f"Available agents: {', '.join(available_agents.keys())}"
360
+ t("cli.agent.available", agents=", ".join(available_agents.keys()))
361
361
  )
362
362
  sys.exit(1)
363
363
 
364
364
  # Agent exists, set it
365
365
  set_current_agent(agent_name)
366
- emit_system_message(f"🤖 Using agent: {agent_name}")
366
+ emit_system_message(t("cli.agent.using", agent=agent_name))
367
367
  except Exception as e:
368
- emit_error(f"Error setting agent: {str(e)}")
368
+ emit_error(t("cli.agent.set_error", error=str(e)))
369
369
  sys.exit(1)
370
370
 
371
371
  current_version = __version__
@@ -377,10 +377,8 @@ async def main():
377
377
  "on",
378
378
  )
379
379
  if no_version_update:
380
- version_msg = f"Current version: {current_version}"
381
- update_disabled_msg = (
382
- "Update phase disabled because NO_VERSION_UPDATE is set to 1 or true"
383
- )
380
+ version_msg = t("version.current", version=current_version)
381
+ update_disabled_msg = t("cli.version.update_disabled")
384
382
  emit_system_message(version_msg)
385
383
  emit_system_message(update_disabled_msg)
386
384
  else:
@@ -444,13 +442,18 @@ async def main():
444
442
  emit_info(resolve_exc.hint)
445
443
  available = list_sessions(sessions_dir)
446
444
  if available:
447
- emit_info(f"Available sessions: {', '.join(available[:10])}")
445
+ emit_info(
446
+ t(
447
+ "cli.resume.available_sessions",
448
+ sessions=", ".join(available[:10]),
449
+ )
450
+ )
448
451
  sys.exit(1)
449
452
 
450
453
  # When lazy-create fired, announce it so scripts and users can
451
454
  # distinguish first-run creation from a normal resume.
452
455
  if lazy_created:
453
- emit_info(f"Created new session: {session_name}")
456
+ emit_info(t("cli.resume.created", session=session_name))
454
457
 
455
458
  try:
456
459
  history = load_session(session_name, session_dir)
@@ -475,11 +478,15 @@ async def main():
475
478
 
476
479
  if not lazy_created:
477
480
  emit_success(
478
- f"Resumed: {len(history)} messages "
479
- f"({total_tokens} tokens) from {session_name}"
481
+ t(
482
+ "cli.resume.resumed",
483
+ messages=len(history),
484
+ tokens=total_tokens,
485
+ session=session_name,
486
+ )
480
487
  )
481
488
  except Exception as e:
482
- emit_error(f"Failed to resume from {resume_target}: {e}")
489
+ emit_error(t("cli.resume.failed", target=resume_target, error=e))
483
490
  sys.exit(1)
484
491
 
485
492
  global shutdown_flag
@@ -672,40 +679,22 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
672
679
  display_console = message_renderer.console
673
680
  from code_puppy.messaging import emit_info, emit_system_message
674
681
 
675
- emit_system_message(
676
- "Type '/exit', '/quit', or press Ctrl+D to exit the interactive mode."
677
- )
678
- emit_system_message("Type 'clear' to reset the conversation history.")
679
- emit_system_message("Type /help to view all commands")
680
- emit_system_message(
681
- "Type @ for path completion, or /model to pick a model. Toggle multiline with Alt+M or F2; newline: Shift+Enter."
682
- )
683
- emit_system_message("Paste images: Ctrl+V (even on Mac!), F3, or /paste command.")
682
+ emit_system_message(t("cli.help.exit"))
683
+ emit_system_message(t("cli.help.clear"))
684
+ emit_system_message(t("cli.help.commands"))
685
+ emit_system_message(t("cli.help.completion"))
686
+ emit_system_message(t("cli.help.paste_images"))
684
687
  import platform
685
688
 
686
689
  if platform.system() == "Darwin":
687
- emit_system_message(
688
- "💡 macOS tip: Use Ctrl+V (not Cmd+V) to paste images in terminal."
689
- )
690
+ emit_system_message(t("cli.help.macos_paste"))
690
691
  cancel_key = get_cancel_agent_display_name()
691
- emit_system_message(
692
- f"Press {cancel_key} during processing to cancel the current task or inference."
693
- )
694
- emit_system_message(
695
- "Use Ctrl+X Ctrl+E to open $EDITOR (Notepad on Windows); "
696
- "Ctrl+X Ctrl+B to background running shell commands; "
697
- "Ctrl+X Ctrl+X to kill running shell commands."
698
- )
699
- emit_system_message(
700
- "Use /autosave_load to manually load a previous autosave session."
701
- )
702
- emit_system_message(
703
- "Use /diff to configure diff highlighting colors for file changes."
704
- )
705
- emit_system_message("To re-run the tutorial, use /tutorial.")
706
- emit_system_message(
707
- "!<command> to run shell commands directly (e.g., !git status)",
708
- )
692
+ emit_system_message(t("cli.help.cancel_key", cancel_key=cancel_key))
693
+ emit_system_message(t("cli.help.editor_shortcuts"))
694
+ emit_system_message(t("cli.help.autosave_load"))
695
+ emit_system_message(t("cli.help.diff"))
696
+ emit_system_message(t("cli.help.tutorial"))
697
+ emit_system_message(t("cli.help.shell_passthrough"))
709
698
  # Print truecolor warning LAST so it's the most visible thing on startup
710
699
  # Big ugly red box should be impossible to miss! 🔴
711
700
  print_truecolor_warning(display_console)
@@ -727,7 +716,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
727
716
  from code_puppy.messaging import emit_info, emit_success, emit_system_message
728
717
 
729
718
  agent = get_current_agent()
730
- emit_info(f"Processing initial command: {initial_command}")
719
+ emit_info(t("cli.initial_command.processing", command=initial_command))
731
720
 
732
721
  try:
733
722
  # Skip the run UI if a tool is already waiting for user input
@@ -763,15 +752,13 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
763
752
  )
764
753
  get_message_bus().emit(response_msg)
765
754
 
766
- emit_success("🐶 Continuing in Interactive Mode")
767
- emit_system_message(
768
- "Your command and response are preserved in the conversation history."
769
- )
755
+ emit_success(t("cli.initial_command.continuing"))
756
+ emit_system_message(t("cli.initial_command.preserved"))
770
757
 
771
758
  except Exception as e:
772
759
  from code_puppy.messaging import emit_error
773
760
 
774
- emit_error(f"Error processing initial command: {str(e)}")
761
+ emit_error(t("cli.initial_command.error", error=str(e)))
775
762
 
776
763
  # Check if prompt_toolkit is installed
777
764
  try:
@@ -782,7 +769,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
782
769
  except ImportError:
783
770
  from code_puppy.messaging import emit_warning
784
771
 
785
- emit_warning("Warning: prompt_toolkit not installed. Installing now...")
772
+ emit_warning(t("cli.prompt_toolkit.installing"))
786
773
  try:
787
774
  import subprocess
788
775
 
@@ -791,7 +778,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
791
778
  )
792
779
  from code_puppy.messaging import emit_success
793
780
 
794
- emit_success("Successfully installed prompt_toolkit")
781
+ emit_success(t("cli.prompt_toolkit.installed"))
795
782
  from code_puppy.command_line.prompt_toolkit_completion import (
796
783
  get_input_with_combined_completion,
797
784
  get_prompt_with_active_model,
@@ -799,8 +786,8 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
799
786
  except Exception as e:
800
787
  from code_puppy.messaging import emit_error, emit_warning
801
788
 
802
- emit_error(f"Error installing prompt_toolkit: {e}")
803
- emit_warning("Falling back to basic input without tab completion")
789
+ emit_error(t("cli.prompt_toolkit.install_error", error=e))
790
+ emit_warning(t("cli.prompt_toolkit.fallback"))
804
791
 
805
792
  # Autosave loading is now manual - use /autosave_load command
806
793
 
@@ -848,7 +835,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
848
835
 
849
836
  # Get the custom prompt from the current agent, or use default
850
837
  current_agent = get_current_agent()
851
- user_prompt = current_agent.get_user_prompt() or "Enter your coding task:"
838
+ user_prompt = current_agent.get_user_prompt() or t("cli.prompt.enter_task")
852
839
 
853
840
  if not persistent_prompt:
854
841
  # Persistent path drops the per-iteration banner — the pinned
@@ -877,7 +864,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
877
864
  if queued_task is not None:
878
865
  task = queued_task
879
866
  emit_info(_prompt_echo_text(task))
880
- emit_info("running queued prompt")
867
+ emit_info(t("cli.queue.running"))
881
868
  else:
882
869
  # Raises EOFError on Ctrl+D-with-empty-buffer, which the
883
870
  # existing quit branch below handles.
@@ -922,17 +909,17 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
922
909
  from code_puppy.messaging import emit_warning
923
910
 
924
911
  await on_interactive_turn_cancel("", reason="Ctrl+C")
925
- emit_warning("\nInput cancelled")
912
+ emit_warning("\n" + t("cli.input.cancelled"))
926
913
  continue
927
914
  except EOFError:
928
915
  # Handle Ctrl+D - exit the application
929
916
  from code_puppy.messaging import emit_success
930
917
 
931
- emit_success("\nGoodbye! (Ctrl+D)")
918
+ emit_success("\n" + t("cli.goodbye_ctrld"))
932
919
 
933
920
  # Cancel any running agent task for clean shutdown
934
921
  if current_agent_task and not current_agent_task.done():
935
- emit_info("Cancelling running agent task...")
922
+ emit_info(t("cli.agent.cancelling"))
936
923
  current_agent_task.cancel()
937
924
  try:
938
925
  await current_agent_task
@@ -963,11 +950,11 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
963
950
  ]:
964
951
  from code_puppy.messaging import emit_success
965
952
 
966
- emit_success("Goodbye!")
953
+ emit_success(t("cli.goodbye"))
967
954
 
968
955
  # Cancel any running agent task for clean shutdown
969
956
  if current_agent_task and not current_agent_task.done():
970
- emit_info("Cancelling running agent task...")
957
+ emit_info(t("cli.agent.cancelling"))
971
958
  current_agent_task.cancel()
972
959
  try:
973
960
  await current_agent_task
@@ -1000,7 +987,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1000
987
  except Exception as e:
1001
988
  from code_puppy.messaging import emit_error
1002
989
 
1003
- emit_error(f"Command error: {e}")
990
+ emit_error(t("cli.command.error", error=e))
1004
991
  # Continue interactive loop instead of exiting
1005
992
  continue
1006
993
  if command_result is True:
@@ -1048,7 +1035,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1048
1035
  chosen_session = await interactive_autosave_picker()
1049
1036
 
1050
1037
  if not chosen_session:
1051
- emit_warning("Autosave load cancelled")
1038
+ emit_warning(t("cli.autosave.load_cancelled"))
1052
1039
  continue
1053
1040
 
1054
1041
  # Load the session
@@ -1068,9 +1055,13 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1068
1055
  session_path = base_dir / f"{chosen_session}.pkl"
1069
1056
 
1070
1057
  emit_success(
1071
- f"✅ Autosave loaded: {len(history)} messages ({total_tokens} tokens)\n"
1072
- f"📁 From: {session_path}"
1058
+ t(
1059
+ "cli.autosave.loaded",
1060
+ messages=len(history),
1061
+ tokens=total_tokens,
1062
+ )
1073
1063
  )
1064
+ emit_info(t("cli.autosave.loaded_path", path=session_path))
1074
1065
 
1075
1066
  # Display recent message history for context
1076
1067
  from code_puppy.command_line.autosave_menu import (
@@ -1085,7 +1076,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1085
1076
  except Exception as e:
1086
1077
  from code_puppy.messaging import emit_error
1087
1078
 
1088
- emit_error(f"Failed to load autosave: {e}")
1079
+ emit_error(t("cli.autosave.load_failed", error=e))
1089
1080
  continue
1090
1081
  else:
1091
1082
  # Command returned a prompt to execute
@@ -1171,7 +1162,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1171
1162
  from code_puppy.messaging import emit_warning
1172
1163
 
1173
1164
  await on_interactive_turn_cancel(task, reason="Ctrl+C")
1174
- emit_warning("\nCancelled")
1165
+ emit_warning("\n" + t("cli.turn.cancelled"))
1175
1166
  continue
1176
1167
  except Exception as e:
1177
1168
  turn_error = e
@@ -1219,7 +1210,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
1219
1210
  new_session_id = finalize_autosave_session()
1220
1211
  current_agent.clear_message_history()
1221
1212
  emit_system_message(
1222
- f"Context cleared. Session rotated to: {new_session_id}"
1213
+ t("cli.context.cleared", session=new_session_id)
1223
1214
  )
1224
1215
 
1225
1216
  delay = float(continuation.get("delay") or 0)
@@ -1317,19 +1308,28 @@ async def run_prompt_with_attachments(
1317
1308
  # Build summary of all attachments
1318
1309
  summary_parts = []
1319
1310
  if resolved.file_attachments:
1320
- summary_parts.append(f"files: {len(resolved.file_attachments)}")
1311
+ summary_parts.append(
1312
+ t("cli.attachments.files", count=len(resolved.file_attachments))
1313
+ )
1321
1314
  if resolved.clipboard_images:
1322
- summary_parts.append(f"clipboard images: {len(resolved.clipboard_images)}")
1315
+ summary_parts.append(
1316
+ t(
1317
+ "cli.attachments.clipboard_images",
1318
+ count=len(resolved.clipboard_images),
1319
+ )
1320
+ )
1323
1321
  if resolved.link_attachments:
1324
- summary_parts.append(f"urls: {len(resolved.link_attachments)}")
1322
+ summary_parts.append(
1323
+ t("cli.attachments.urls", count=len(resolved.link_attachments))
1324
+ )
1325
1325
  if summary_parts:
1326
- emit_system_message("Attachments detected -> " + ", ".join(summary_parts))
1326
+ emit_system_message(
1327
+ t("cli.attachments.detected", summary=", ".join(summary_parts))
1328
+ )
1327
1329
 
1328
1330
  cleaned_prompt = resolved.text
1329
1331
  if not cleaned_prompt:
1330
- emit_warning(
1331
- "Prompt is empty after removing attachments; add instructions and retry."
1332
- )
1332
+ emit_warning(t("cli.attachments.empty_prompt"))
1333
1333
  return None, None
1334
1334
 
1335
1335
  attachments = resolved.attachments
@@ -1356,7 +1356,7 @@ async def run_prompt_with_attachments(
1356
1356
  result = await agent_task
1357
1357
  return result, agent_task
1358
1358
  except asyncio.CancelledError:
1359
- emit_info("Agent task cancelled")
1359
+ emit_info(t("cli.agent.task_cancelled"))
1360
1360
  return None, agent_task
1361
1361
 
1362
1362
  if use_run_ui:
@@ -1416,22 +1416,20 @@ async def execute_single_prompt(
1416
1416
  try:
1417
1417
  command_result = handle_command(command_prompt)
1418
1418
  except Exception as command_error:
1419
- emit_error(f"Command error: {command_error}")
1419
+ emit_error(t("cli.command.error", error=command_error))
1420
1420
  return
1421
1421
 
1422
1422
  if command_result is True:
1423
1423
  return
1424
1424
  if command_result == "__AUTOSAVE_LOAD__":
1425
- emit_warning(
1426
- "/autosave_load requires interactive mode; use -r SESSION in headless mode."
1427
- )
1425
+ emit_warning(t("cli.autosave.headless_unsupported"))
1428
1426
  return
1429
1427
  if isinstance(command_result, str):
1430
1428
  prompt = command_result
1431
1429
 
1432
1430
  effective_session_name = session_name or get_current_session_name()
1433
1431
  agent = None
1434
- emit_info(f"Executing prompt: {prompt}")
1432
+ emit_info(t("cli.headless.executing", prompt=prompt))
1435
1433
 
1436
1434
  try:
1437
1435
  agent = get_current_agent()
@@ -1456,9 +1454,9 @@ async def execute_single_prompt(
1456
1454
  agent.set_message_history(list(result.all_messages()))
1457
1455
 
1458
1456
  except asyncio.CancelledError:
1459
- emit_warning("Execution cancelled by user")
1457
+ emit_warning(t("cli.headless.cancelled"))
1460
1458
  except Exception as error:
1461
- emit_error(f"Error executing prompt: {error}")
1459
+ emit_error(t("cli.headless.error", error=error))
1462
1460
  finally:
1463
1461
  try:
1464
1462
  session_agent = agent or get_current_agent()
@@ -1476,7 +1474,13 @@ async def execute_single_prompt(
1476
1474
  except Exception as save_error:
1477
1475
  # The response has already been emitted; a persistence failure
1478
1476
  # must not hide the primary result.
1479
- emit_error(f"Failed to save session {effective_session_name}: {save_error}")
1477
+ emit_error(
1478
+ t(
1479
+ "cli.headless.save_failed",
1480
+ session=effective_session_name,
1481
+ error=save_error,
1482
+ )
1483
+ )
1480
1484
 
1481
1485
 
1482
1486
  def _force_utf8_stdio():