code-puppy-core-plugins 0.0.13__tar.gz → 0.0.14__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 (337) hide show
  1. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/PKG-INFO +1 -1
  2. code_puppy_core_plugins-0.0.14/code_puppy_core_plugins/theme/bundled_palettes.py +34 -0
  3. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/osc_palette.py +33 -65
  4. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/picker.py +50 -166
  5. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/pyproject.toml +1 -1
  6. code_puppy_core_plugins-0.0.13/code_puppy_core_plugins/theme/bundled_palettes.py +0 -346
  7. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/.gitignore +0 -0
  8. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/LICENSE +0 -0
  9. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/README.md +0 -0
  10. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/__init__.py +0 -0
  11. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/README.md +0 -0
  12. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/__init__.py +0 -0
  13. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/agent.py +0 -0
  14. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/bridge.py +0 -0
  15. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  16. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/commands.py +0 -0
  17. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/content.py +0 -0
  18. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  19. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  20. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/permissions.py +0 -0
  21. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/persistence.py +0 -0
  22. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  23. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/replay.py +0 -0
  24. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/session.py +0 -0
  25. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/session_config.py +0 -0
  26. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/acp/state.py +0 -0
  27. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  28. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  29. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  30. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  31. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  32. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  33. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
  34. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  35. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
  36. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  37. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  38. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  39. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  40. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
  41. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
  42. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  43. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
  44. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  45. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  46. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  47. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  48. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  49. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  50. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  51. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  52. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  53. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  54. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  55. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  56. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/btw/__init__.py +0 -0
  57. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  58. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  59. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/btw/side_query.py +0 -0
  60. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  61. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  62. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  63. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  64. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  65. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  66. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  67. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  68. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  69. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  70. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  71. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  72. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  73. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  74. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  75. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  76. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  77. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  78. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  79. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
  80. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
  81. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
  82. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  83. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
  84. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
  85. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
  86. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
  87. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
  88. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
  89. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
  90. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
  91. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
  92. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
  93. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  94. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/README.md +0 -0
  95. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  96. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  97. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  98. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  99. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
  100. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  101. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  102. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  103. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
  104. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  105. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  106. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
  107. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  108. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  109. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/state.py +0 -0
  110. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  111. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  112. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
  113. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  114. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  115. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  116. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
  117. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
  118. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  119. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  120. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
  121. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
  122. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
  123. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
  124. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
  125. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
  126. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
  127. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
  128. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
  129. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
  130. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
  131. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
  132. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
  133. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
  134. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
  135. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  136. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  137. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
  138. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  139. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  140. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
  141. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
  142. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
  143. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
  144. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  145. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  146. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  147. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  148. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  149. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  150. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  151. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  152. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  153. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  154. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  155. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  156. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  157. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  158. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  159. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  160. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  161. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  162. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  163. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  164. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  165. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  166. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  167. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  168. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  169. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  170. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  171. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
  172. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
  173. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
  174. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
  175. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/fork/__init__.py +0 -0
  176. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  177. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  178. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  179. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
  180. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
  181. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  182. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  183. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
  184. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
  185. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  186. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/README.md +0 -0
  187. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  188. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/client.py +0 -0
  189. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  190. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  191. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  192. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/herdr/sources.py +0 -0
  193. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  194. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
  195. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  196. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  197. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
  198. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
  199. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  200. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  201. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
  202. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
  203. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  204. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  205. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  206. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
  207. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  208. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  209. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  210. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
  211. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
  212. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  213. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
  214. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
  215. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
  216. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
  217. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
  218. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  219. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
  220. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  221. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  222. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  223. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  224. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
  225. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
  226. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  227. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  228. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  229. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  230. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
  231. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  232. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
  233. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
  234. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
  235. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
  236. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +0 -0
  237. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
  238. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
  239. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
  240. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  241. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
  242. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  243. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  244. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
  245. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prune/__init__.py +0 -0
  246. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  247. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  248. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  249. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  250. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  251. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  252. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  253. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  254. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  255. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  256. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  257. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
  258. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  259. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  260. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  261. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  262. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  263. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  264. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  265. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
  266. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  267. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  268. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
  269. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  270. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
  271. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
  272. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
  273. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  274. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
  275. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  276. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
  277. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/shell_safety/__init__.py +0 -0
  278. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/shell_safety/agent_shell_safety.py +0 -0
  279. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/shell_safety/command_cache.py +0 -0
  280. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/shell_safety/register_callbacks.py +0 -0
  281. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  282. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/spill/__init__.py +0 -0
  283. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  284. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/spill/store.py +0 -0
  285. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  286. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
  287. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  288. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/config.py +0 -0
  289. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/payload.py +0 -0
  290. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  291. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  292. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/runner.py +0 -0
  293. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  294. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  295. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
  296. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
  297. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  298. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  299. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
  300. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
  301. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
  302. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
  303. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  304. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
  305. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
  306. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/README.md +0 -0
  307. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/__init__.py +0 -0
  308. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  309. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
  310. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  311. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  312. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/theme/themes.py +0 -0
  313. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  314. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
  315. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
  316. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
  317. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
  318. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  319. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  320. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  321. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
  322. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  323. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  324. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
  325. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
  326. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
  327. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wide_completion_menu/__init__.py +0 -0
  328. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +0 -0
  329. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  330. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  331. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  332. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  333. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  334. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  335. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/wiggum/state.py +0 -0
  336. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  337. {code_puppy_core_plugins-0.0.13 → code_puppy_core_plugins-0.0.14}/code_puppy_core_plugins/yolo_cli/register_callbacks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: code-puppy-core-plugins
3
- Version: 0.0.13
3
+ Version: 0.0.14
4
4
  Summary: Official plugin bundle for Code Puppy
5
5
  Project-URL: Repository, https://github.com/mpfaffenberger/code_puppy_core_plugins
6
6
  Project-URL: Homepage, https://github.com/mpfaffenberger/code_puppy_core_plugins
@@ -0,0 +1,34 @@
1
+ """Bundled terminal palettes, served from termflow.
2
+
3
+ The palette data graduated into ``termflow.themes`` (the canonical
4
+ copy); this module re-exposes each palette in the plugin's historical
5
+ dict shape (``{"bg", "fg", "ansi"}``) so themes.py and downstream
6
+ consumers keep working unchanged.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from termflow.themes import get_palette
12
+
13
+
14
+ def _palette_dict(name: str) -> dict:
15
+ palette = get_palette(name)
16
+ if palette is None: # pragma: no cover - termflow always bundles these
17
+ raise KeyError(f"termflow is missing bundled palette {name!r}")
18
+ return palette.to_dict()
19
+
20
+
21
+ CATPPUCCIN_MOCHA = _palette_dict("catppuccin_mocha")
22
+ CATPPUCCIN_LATTE = _palette_dict("catppuccin_latte")
23
+ TOKYO_NIGHT = _palette_dict("tokyo_night")
24
+ GREEN_SCREEN = _palette_dict("green_screen")
25
+ DEEP_BLACK = _palette_dict("deep_black")
26
+ SOLARIZED_LIGHT = _palette_dict("solarized_light")
27
+ GITHUB_LIGHT = _palette_dict("github_light")
28
+ ROSE_PINE_DAWN = _palette_dict("rose_pine_dawn")
29
+ OCEAN = _palette_dict("ocean")
30
+ FOREST = _palette_dict("forest")
31
+ SUNSET = _palette_dict("sunset")
32
+ VAPORWAVE = _palette_dict("vaporwave")
33
+ PURPLE_PUPPY = _palette_dict("purple_puppy")
34
+ BUBBLEGUM_PINK = _palette_dict("bubblegum_pink")
@@ -1,20 +1,15 @@
1
- """Terminal-level palette swap via OSC escape sequences.
1
+ """Terminal palette swap: Code Puppy persistence over termflow's OSC engine.
2
2
 
3
- This module reaches *past* Code Puppy and recolors the whole terminal window
4
- (bg, fg, ANSI palette slots) using widely-supported xterm OSC sequences:
3
+ The escape-sequence machinery (OSC 4/10/11 builders, palette
4
+ application, reset) lives in ``termflow.themes.osc``. This module adds
5
+ what is Code Puppy's business alone:
5
6
 
6
- OSC 10 ; spec BEL -> set default foreground
7
- OSC 11 ; spec BEL -> set default background
8
- OSC 4 ; N ; spec BEL -> set ANSI palette slot N (0..15)
9
- OSC 110 BEL -> reset foreground
10
- OSC 111 BEL -> reset background
11
- OSC 104 BEL -> reset whole palette
7
+ * persisting the applied palette to config so the next session replays it
8
+ * re-firing the persisted palette on plugin load
9
+ * an atexit restore so the terminal never stays stuck in a theme
12
10
 
13
- Supported by iTerm2, Terminal.app, Alacritty, kitty, VS Code, GNOME
14
- Terminal, Windows Terminal. Unsupported terminals silently ignore them.
15
-
16
- We always register an atexit handler so the terminal is restored when
17
- Code Puppy quits, even if the user forgets to /theme default first.
11
+ Emission is routed through the local :func:`_emit` (which tests patch)
12
+ via a callback stream handed to termflow.
18
13
  """
19
14
 
20
15
  from __future__ import annotations
@@ -22,18 +17,18 @@ from __future__ import annotations
22
17
  import atexit
23
18
  import json
24
19
  import sys
25
- from typing import Optional, Sequence
20
+ from typing import Optional
26
21
 
27
- from code_puppy.config import get_value, set_config_value
22
+ from termflow.themes import osc as tf_osc
23
+ from termflow.themes.osc import BEL, ESC, _osc # noqa: F401 (re-exported API)
28
24
 
29
- BEL = "\007"
30
- ESC = "\033"
25
+ from code_puppy.config import get_value, set_config_value
31
26
 
32
27
  _CONFIG_KEY = "osc_palette_json"
33
28
  _atexit_registered = False
34
29
 
35
30
 
36
- # --- Low-level emit ---------------------------------------------------------
31
+ # --- Emission ---------------------------------------------------------------
37
32
  def _emit(seq: str) -> None:
38
33
  """Write an escape sequence to stdout, ignoring failures (closed tty etc.)."""
39
34
  try:
@@ -43,37 +38,31 @@ def _emit(seq: str) -> None:
43
38
  pass
44
39
 
45
40
 
46
- def _osc(code: str, *args: str) -> str:
47
- """Build an OSC escape: ESC ] code ; args... BEL"""
48
- payload = ";".join((code,) + args)
49
- return f"{ESC}]{payload}{BEL}"
41
+ class _EmitStream:
42
+ """File-like shim routing termflow's writes through :func:`_emit`.
50
43
 
44
+ Looks up the module global at call time so test patches of ``_emit``
45
+ keep working.
46
+ """
51
47
 
52
- # --- Public escape builders -------------------------------------------------
53
- def set_bg(color: str) -> None:
54
- _emit(_osc("11", color))
55
-
56
-
57
- def set_fg(color: str) -> None:
58
- _emit(_osc("10", color))
59
-
48
+ def write(self, seq: str) -> int:
49
+ _emit(seq)
50
+ return len(seq)
60
51
 
61
- def set_ansi_slot(slot: int, color: str) -> None:
62
- if not 0 <= slot <= 15:
63
- return
64
- _emit(_osc("4", str(slot), color))
52
+ def flush(self) -> None:
53
+ pass
65
54
 
66
55
 
67
- def reset_bg() -> None:
68
- _emit(_osc("111"))
56
+ def set_bg(color: str) -> None:
57
+ tf_osc.set_bg(color, _EmitStream())
69
58
 
70
59
 
71
- def reset_fg() -> None:
72
- _emit(_osc("110"))
60
+ def set_fg(color: str) -> None:
61
+ tf_osc.set_fg(color, _EmitStream())
73
62
 
74
63
 
75
- def reset_ansi() -> None:
76
- _emit(_osc("104"))
64
+ def set_ansi_slot(slot: int, color: str) -> None:
65
+ tf_osc.set_ansi_slot(slot, color, _EmitStream())
77
66
 
78
67
 
79
68
  # --- High-level API ---------------------------------------------------------
@@ -82,13 +71,6 @@ def apply_palette(
82
71
  ) -> None:
83
72
  """Apply a palette dict to the live terminal.
84
73
 
85
- Palette shape:
86
- {
87
- "bg": "#rrggbb", # optional
88
- "fg": "#rrggbb", # optional
89
- "ansi": ["#rrggbb", ...] # optional, 0..16 entries
90
- }
91
-
92
74
  `persist=True` writes the palette to config so the next Code Puppy
93
75
  session can replay it. `register_reset=True` ensures we always
94
76
  restore the terminal at process exit.
@@ -96,17 +78,7 @@ def apply_palette(
96
78
  if not isinstance(palette, dict):
97
79
  return
98
80
 
99
- bg = palette.get("bg")
100
- fg = palette.get("fg")
101
- ansi: Sequence[str] = palette.get("ansi") or []
102
-
103
- if bg:
104
- set_bg(bg)
105
- if fg:
106
- set_fg(fg)
107
- for i, color in enumerate(ansi[:16]):
108
- if color:
109
- set_ansi_slot(i, color)
81
+ tf_osc.apply_palette(palette, output=_EmitStream(), register_reset=False)
110
82
 
111
83
  if persist:
112
84
  try:
@@ -120,9 +92,7 @@ def apply_palette(
120
92
 
121
93
  def reset_palette(persist: bool = True) -> None:
122
94
  """Restore the terminal's original bg/fg/ANSI palette."""
123
- reset_ansi()
124
- reset_bg()
125
- reset_fg()
95
+ tf_osc.reset_palette(output=_EmitStream())
126
96
  if persist:
127
97
  try:
128
98
  set_config_value(_CONFIG_KEY, "")
@@ -160,9 +130,7 @@ def _at_exit_reset() -> None:
160
130
  doesn't stay stuck in a weird color after Code Puppy dies.
161
131
  """
162
132
  try:
163
- reset_ansi()
164
- reset_bg()
165
- reset_fg()
133
+ reset_palette(persist=False)
166
134
  except Exception:
167
135
  pass
168
136
 
@@ -1,9 +1,10 @@
1
- """Interactive theme picker TUI.
1
+ """Interactive theme picker TUI, built on termflow's MenuBuilder.
2
2
 
3
- Reuses prompt_toolkit's full-screen pattern (cribbed from
4
- ``code_puppy.command_line.colors_menu``) but pared down to the curated
5
- theme choices, with a live preview that shows banners AND content text
6
- in the theme's body styles.
3
+ The left column lists the curated themes (paged); the right pane shows a
4
+ live preview with banners, content text styles, the inline-markup remap,
5
+ and the terminal palette swatches. Rendering the preview still goes
6
+ through Rich (it is the best ANSI paintbrush we have) -- the menu chrome
7
+ and event loop are pure termflow.
7
8
  """
8
9
 
9
10
  from __future__ import annotations
@@ -11,16 +12,10 @@ from __future__ import annotations
11
12
  import asyncio
12
13
  import io
13
14
  import random
14
- import sys
15
15
  from typing import Optional
16
16
 
17
- from prompt_toolkit import Application
18
- from prompt_toolkit.formatted_text import ANSI, FormattedText
19
- from prompt_toolkit.key_binding import KeyBindings
20
- from prompt_toolkit.layout import Layout, VSplit, Window
21
- from prompt_toolkit.layout.controls import FormattedTextControl
22
- from prompt_toolkit.widgets import Frame
23
17
  from rich.console import Console
18
+ from termflow.tui import MenuBuilder, MenuItem
24
19
 
25
20
  from code_puppy.command_line.colors_menu import (
26
21
  BANNER_DISPLAY_INFO,
@@ -34,7 +29,10 @@ from .themes import (
34
29
  content_styles_for,
35
30
  terminal_palette_for,
36
31
  )
37
- from code_puppy.callbacks import on_prompt_toolkit_style
32
+
33
+ THEMES_PER_PAGE = 5
34
+ LIST_WIDTH = 40
35
+ PREVIEW_WIDTH = 70
38
36
 
39
37
  # A few representative banners to show in the preview pane (keeps it readable).
40
38
  PREVIEW_BANNERS = [
@@ -59,8 +57,6 @@ CONTENT_SAMPLES = [
59
57
 
60
58
  # Inline-markup samples to demonstrate the Level 2 color remap.
61
59
  # These mirror the kind of hardcoded tags scattered through the renderer.
62
- THEMES_PER_PAGE = 5
63
-
64
60
  INLINE_MARKUP_SAMPLES = [
65
61
  "[bold cyan]bold cyan headline[/bold cyan]",
66
62
  "[dim cyan]dim cyan detail[/dim cyan]",
@@ -69,8 +65,8 @@ INLINE_MARKUP_SAMPLES = [
69
65
  ]
70
66
 
71
67
 
72
- def _render_preview(theme_name: str, surprise_seed: int) -> ANSI:
73
- """Render a full-color preview of the theme using Rich -> ANSI.
68
+ def _render_preview(theme_name: str, surprise_seed: int) -> str:
69
+ """Render a full-color ANSI preview of the theme via Rich.
74
70
 
75
71
  ``surprise_seed`` makes the "Surprise Me" preview stable while highlighted
76
72
  (otherwise it would re-roll on every redraw - dizzying).
@@ -79,7 +75,7 @@ def _render_preview(theme_name: str, surprise_seed: int) -> ANSI:
79
75
  console = Console(
80
76
  file=buffer,
81
77
  force_terminal=True,
82
- width=70,
78
+ width=PREVIEW_WIDTH,
83
79
  legacy_windows=False,
84
80
  color_system="truecolor",
85
81
  no_color=False,
@@ -123,7 +119,7 @@ def _render_preview(theme_name: str, surprise_seed: int) -> ANSI:
123
119
  console.print(f" [dim]{first_line}[/dim]")
124
120
  console.print()
125
121
 
126
- # Content text samples (the new bit - Level 1 theming)
122
+ # Content text samples (Level 1 theming)
127
123
  console.print("[bold]" + "-" * 60 + "[/bold]")
128
124
  console.print("[bold dim]content text styles:[/bold dim]")
129
125
  for key, text in CONTENT_SAMPLES:
@@ -188,56 +184,43 @@ def _render_preview(theme_name: str, surprise_seed: int) -> ANSI:
188
184
  console.print(
189
185
  "[bold yellow]\u26a1[/bold yellow] [dim]Resets terminal bg/fg/ANSI palette too.[/dim]"
190
186
  )
191
- return ANSI(buffer.getvalue())
192
-
193
-
194
- def _total_pages() -> int:
195
- return max(1, (len(MENU) + THEMES_PER_PAGE - 1) // THEMES_PER_PAGE)
187
+ return buffer.getvalue()
196
188
 
197
189
 
198
- def _page_for_index(selected_index: int) -> int:
199
- return selected_index // THEMES_PER_PAGE
190
+ def build_theme_menu(**menu_overrides):
191
+ """Build the termflow Menu for the theme catalog.
200
192
 
193
+ ``menu_overrides`` forward to the builder (``key_source``, ``output``,
194
+ ``size``, ``alt_screen``) so tests can drive the menu headlessly.
195
+ """
196
+ # Stable seed for "Surprise Me" preview per highlight; bumps on each focus
197
+ # so re-highlighting rolls fresh colors without flickering mid-highlight.
198
+ surprise_seed = [random.randint(0, 1_000_000)]
201
199
 
202
- def _move_page(selected_index: int, delta: int) -> int:
203
- """Move one page while retaining the selected row where possible."""
204
- return max(0, min(selected_index + delta * THEMES_PER_PAGE, len(MENU) - 1))
205
-
200
+ def _on_highlight(item: MenuItem) -> None:
201
+ if item.value == "surprise":
202
+ surprise_seed[0] = random.randint(0, 1_000_000)
206
203
 
207
- def _format_menu(selected_index: int) -> FormattedText:
208
- """Build the current page of the left-hand menu."""
209
- page = _page_for_index(selected_index)
210
- page_start = page * THEMES_PER_PAGE
211
- page_end = min(page_start + THEMES_PER_PAGE, len(MENU))
212
- lines: list[tuple[str, str]] = [
213
- ("class:tui.header", "Pick a Theme"),
214
- ("class:tui.muted", f" Page {page + 1}/{_total_pages()}"),
215
- ("", "\n\n"),
204
+ items = [
205
+ MenuItem(
206
+ f"{theme['icon']} {theme['label']}",
207
+ value=name,
208
+ description=theme["blurb"],
209
+ )
210
+ for name, theme in MENU
216
211
  ]
217
- for i in range(page_start, page_end):
218
- _, theme = MENU[i]
219
- prefix = "> " if i == selected_index else " "
220
- style = "class:tui.selected" if i == selected_index else "class:tui.body"
221
- line = f"{prefix}{i + 1}. {theme['icon']} {theme['label']}"
222
- lines.append((style, line))
223
- lines.append(("", "\n"))
224
- lines.append(("class:tui.muted", f" {theme['blurb']}"))
225
- lines.append(("", "\n\n"))
226
-
227
- lines.append(("", "\n"))
228
- lines.extend(
229
- [
230
- ("class:tui.help-key", "Up/Down"),
231
- ("class:tui.help", " Navigate | "),
232
- ("class:tui.help-key", "PgUp/PgDn"),
233
- ("class:tui.help", " Page\n"),
234
- ("class:tui.help-key", "Enter"),
235
- ("class:tui.help", " Apply | "),
236
- ("class:tui.help-key", "Esc / Ctrl-C"),
237
- ("class:tui.help", " Cancel"),
238
- ]
212
+ builder = (
213
+ MenuBuilder("Pick a Theme")
214
+ .items(items)
215
+ .page_size(THEMES_PER_PAGE)
216
+ .list_width(LIST_WIDTH)
217
+ .preview(lambda item: _render_preview(item.value, surprise_seed[0]))
218
+ .on_highlight(_on_highlight)
219
+ .footer_hint("Up/Down navigate - PgUp/PgDn page - Enter apply - Esc cancel")
239
220
  )
240
- return FormattedText(lines)
221
+ for name, value in menu_overrides.items():
222
+ getattr(builder, name)(value)
223
+ return builder.build()
241
224
 
242
225
 
243
226
  async def interactive_theme_picker() -> Optional[str]:
@@ -248,111 +231,12 @@ async def interactive_theme_picker() -> Optional[str]:
248
231
  """
249
232
  from code_puppy.tools.command_runner import set_awaiting_user_input
250
233
 
251
- selected = [0]
252
- result: list[Optional[str]] = [None]
253
- # Stable seed for "Surprise Me" preview per highlight; bumps on each focus.
254
- surprise_seed = [random.randint(0, 1_000_000)]
255
-
256
234
  set_awaiting_user_input(True)
257
- sys.stdout.write("\033[?1049h\033[2J\033[H")
258
- sys.stdout.flush()
259
- await asyncio.sleep(0.05)
260
-
261
- kb = KeyBindings()
262
-
263
- def _refresh_surprise_seed_if_focused() -> None:
264
- name, _ = MENU[selected[0]]
265
- if name == "surprise":
266
- surprise_seed[0] = random.randint(0, 1_000_000)
267
-
268
- @kb.add("up")
269
- @kb.add("c-p")
270
- def _(event):
271
- selected[0] = (selected[0] - 1) % len(MENU)
272
- _refresh_surprise_seed_if_focused()
273
- event.app.invalidate()
274
-
275
- @kb.add("down")
276
- @kb.add("c-n")
277
- def _(event):
278
- selected[0] = (selected[0] + 1) % len(MENU)
279
- _refresh_surprise_seed_if_focused()
280
- event.app.invalidate()
281
-
282
- @kb.add("pageup")
283
- def _(event):
284
- selected[0] = _move_page(selected[0], -1)
285
- _refresh_surprise_seed_if_focused()
286
- event.app.invalidate()
287
-
288
- @kb.add("pagedown")
289
- def _(event):
290
- selected[0] = _move_page(selected[0], 1)
291
- _refresh_surprise_seed_if_focused()
292
- event.app.invalidate()
293
-
294
- @kb.add("enter")
295
- def _(event):
296
- result[0] = MENU[selected[0]][0]
297
- event.app.exit()
298
-
299
- @kb.add("escape")
300
- @kb.add("c-c")
301
- def _(event):
302
- result[0] = None
303
- event.app.exit()
304
-
305
- def _current_preview_style() -> str:
306
- """Dynamic prompt_toolkit style for the preview pane.
307
-
308
- Paints the WHOLE right pane background with the selected theme's bg,
309
- and picks a readable fg, so the user instantly sees the new color.
310
- Updates every render via prompt_toolkit's dynamic-style support.
311
- """
312
- name, _ = MENU[selected[0]]
313
- try:
314
- tp = terminal_palette_for(name)
315
- except Exception:
316
- tp = None
317
- if not tp:
318
- return ""
319
- bg = tp.get("bg")
320
- fg = tp.get("fg", "")
321
- parts = []
322
- if bg:
323
- parts.append(f"bg:{bg}")
324
- if fg:
325
- parts.append(f"fg:{fg}")
326
- return " ".join(parts)
327
-
328
- left = Window(
329
- content=FormattedTextControl(lambda: _format_menu(selected[0])),
330
- width=40,
331
- )
332
- right = Window(
333
- content=FormattedTextControl(
334
- lambda: _render_preview(MENU[selected[0]][0], surprise_seed[0])
335
- ),
336
- style=_current_preview_style,
337
- )
338
-
339
- layout = Layout(
340
- VSplit([Frame(left, title="Themes"), Frame(right, title="Live Preview")])
341
- )
342
- app = Application(
343
- layout=layout,
344
- key_bindings=kb,
345
- full_screen=False,
346
- mouse_support=False,
347
- color_depth="DEPTH_24_BIT",
348
- style=on_prompt_toolkit_style(),
349
- )
350
-
351
235
  try:
352
- await app.run_async()
236
+ # The menu blocks on raw stdin reads; keep the event loop breathing.
237
+ result = await asyncio.to_thread(build_theme_menu().run)
353
238
  finally:
354
239
  set_awaiting_user_input(False)
355
- sys.stdout.write("\033[?1049l")
356
- sys.stdout.flush()
357
-
358
- return result[0]
240
+ if result.cancelled or result.item is None:
241
+ return None
242
+ return result.item.value
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy-core-plugins"
7
- version = "0.0.13"
7
+ version = "0.0.14"
8
8
  description = "Official plugin bundle for Code Puppy"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"