code-puppy-core-plugins 0.0.20__tar.gz → 0.0.22__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 (343) hide show
  1. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/PKG-INFO +1 -2
  2. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +59 -148
  3. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/skills_menu.py +40 -152
  4. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +5 -0
  5. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +2 -0
  6. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +5 -3
  7. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +1 -5
  8. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/example_custom_command/README.md +11 -3
  9. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_manager/hooks_menu.py +36 -114
  10. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/ollama_setup/completer.py +1 -2
  11. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +12 -2
  12. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/plugins_menu.py +85 -96
  13. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +4 -1
  14. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prune/prune_menu.py +31 -128
  15. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/picker.py +70 -137
  16. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/prompt_patch.py +4 -1
  17. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/steer_queue/queue_menu.py +96 -181
  18. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/steer_queue/register_callbacks.py +2 -3
  19. code_puppy_core_plugins-0.0.22/code_puppy_core_plugins/termflow_tui.py +175 -0
  20. code_puppy_core_plugins-0.0.22/code_puppy_core_plugins/wiggum/judges_menu.py +607 -0
  21. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/pyproject.toml +3 -3
  22. code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +0 -194
  23. code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/wide_completion_menu/__init__.py +0 -6
  24. code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +0 -165
  25. code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/wiggum/judges_menu.py +0 -814
  26. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/.gitignore +0 -0
  27. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/LICENSE +0 -0
  28. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/README.md +0 -0
  29. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/__init__.py +0 -0
  30. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/README.md +0 -0
  31. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/__init__.py +0 -0
  32. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/agent.py +0 -0
  33. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/bridge.py +0 -0
  34. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  35. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/commands.py +0 -0
  36. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/content.py +0 -0
  37. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  38. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  39. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/permissions.py +0 -0
  40. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/persistence.py +0 -0
  41. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  42. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/replay.py +0 -0
  43. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/session.py +0 -0
  44. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/session_config.py +0 -0
  45. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/acp/state.py +0 -0
  46. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  47. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  48. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  49. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  50. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  51. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  52. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
  53. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  54. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
  55. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  56. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  57. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  58. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  59. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
  60. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
  61. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  62. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  63. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  64. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  65. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  66. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  67. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  68. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  69. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  70. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  71. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  72. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  73. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/btw/__init__.py +0 -0
  74. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  75. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  76. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/btw/side_query.py +0 -0
  77. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  78. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  79. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  80. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  81. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  82. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  83. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  84. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  85. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  86. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  87. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  88. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  89. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  90. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  91. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
  92. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  93. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  94. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  95. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  96. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  97. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
  98. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
  99. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
  100. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  101. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
  102. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
  103. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
  104. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
  105. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
  106. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
  107. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
  108. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  109. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/README.md +0 -0
  110. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  111. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  112. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  113. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  114. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
  115. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  116. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  117. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  118. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
  119. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  120. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  121. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
  122. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  123. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  124. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/state.py +0 -0
  125. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  126. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  127. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
  128. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  129. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  130. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  131. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
  132. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  133. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  134. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
  135. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
  136. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
  137. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
  138. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
  139. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
  140. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
  141. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
  142. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
  143. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
  144. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
  145. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
  146. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
  147. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
  148. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
  149. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  150. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  151. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
  152. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  153. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  154. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
  155. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
  156. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
  157. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  158. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  159. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  160. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  161. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  162. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  163. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  164. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  165. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  166. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  167. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  168. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  169. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  170. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  171. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  172. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  173. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  174. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  175. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  176. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  177. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  178. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  179. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  180. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  181. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  182. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  183. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  184. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
  185. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
  186. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
  187. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
  188. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/fork/__init__.py +0 -0
  189. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  190. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  191. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  192. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
  193. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
  194. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  195. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  196. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
  197. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
  198. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  199. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/README.md +0 -0
  200. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  201. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/client.py +0 -0
  202. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  203. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  204. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  205. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/herdr/sources.py +0 -0
  206. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  207. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
  208. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  209. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  210. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
  211. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
  212. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  213. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  214. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
  215. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
  216. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  217. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  218. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  219. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
  220. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  221. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  222. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  223. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
  224. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
  225. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  226. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
  227. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
  228. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
  229. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
  230. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
  231. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  232. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
  233. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  234. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  235. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  236. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  237. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
  238. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
  239. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  240. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  241. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  242. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
  243. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  244. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
  245. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
  246. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
  247. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
  248. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
  249. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  250. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
  251. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  252. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  253. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prune/__init__.py +0 -0
  254. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  255. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  256. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  257. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  258. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  259. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  260. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  261. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  262. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  263. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  264. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
  265. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  266. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  267. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  268. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  269. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  270. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  271. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  272. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
  273. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  274. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
  275. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  276. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
  277. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
  278. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
  279. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  280. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
  281. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  282. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
  283. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  284. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  285. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
  286. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/shell_safety/__init__.py +0 -0
  287. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/shell_safety/agent_shell_safety.py +0 -0
  288. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/shell_safety/command_cache.py +0 -0
  289. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/shell_safety/register_callbacks.py +0 -0
  290. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  291. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/spill/__init__.py +0 -0
  292. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  293. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/spill/store.py +0 -0
  294. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  295. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
  296. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  297. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/config.py +0 -0
  298. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/payload.py +0 -0
  299. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  300. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/runner.py +0 -0
  301. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  302. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  303. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  304. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  305. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
  306. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
  307. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
  308. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
  309. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  310. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
  311. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
  312. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/README.md +0 -0
  313. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/__init__.py +0 -0
  314. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  315. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  316. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  317. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/picker.py +0 -0
  318. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
  319. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  320. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  321. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/theme/themes.py +0 -0
  322. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  323. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
  324. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
  325. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
  326. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
  327. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  328. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  329. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  330. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
  331. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  332. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  333. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
  334. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
  335. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
  336. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  337. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  338. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  339. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  340. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  341. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/wiggum/state.py +0 -0
  342. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  343. {code_puppy_core_plugins-0.0.20 → code_puppy_core_plugins-0.0.22}/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.20
3
+ Version: 0.0.22
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
@@ -15,7 +15,6 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Python: <3.15,>=3.11
17
17
  Requires-Dist: httpx<1,>=0.24.1
18
- Requires-Dist: prompt-toolkit<4,>=3.0.0
19
18
  Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]<3,>=2.31.0
20
19
  Description-Content-Type: text/markdown
21
20
 
@@ -14,16 +14,9 @@ it shows an empty menu and returns False.
14
14
  """
15
15
 
16
16
  import logging
17
- import sys
18
- import time
19
17
  from pathlib import Path
20
18
  from typing import List, Optional
21
19
 
22
- from prompt_toolkit.application import Application
23
- from prompt_toolkit.key_binding import KeyBindings
24
- from prompt_toolkit.layout import Dimension, Layout, VSplit, Window
25
- from prompt_toolkit.layout.controls import FormattedTextControl
26
- from prompt_toolkit.widgets import Frame
27
20
 
28
21
  from code_puppy.command_line.pagination import (
29
22
  ensure_visible_page,
@@ -39,7 +32,6 @@ from code_puppy_core_plugins.agent_skills.skill_catalog import (
39
32
  catalog,
40
33
  )
41
34
  from code_puppy.tools.command_runner import set_awaiting_user_input
42
- from code_puppy.callbacks import on_prompt_toolkit_style
43
35
 
44
36
  logger = logging.getLogger(__name__)
45
37
 
@@ -122,8 +114,6 @@ class SkillsInstallMenu:
122
114
  self.pending_entry: Optional[SkillCatalogEntry] = None
123
115
 
124
116
  # UI controls
125
- self.menu_control: Optional[FormattedTextControl] = None
126
- self.preview_control: Optional[FormattedTextControl] = None
127
117
 
128
118
  self._initialize_catalog()
129
119
 
@@ -407,14 +397,7 @@ class SkillsInstallMenu:
407
397
  return lines
408
398
 
409
399
  def update_display(self) -> None:
410
- """Refresh all three panels of the TUI display."""
411
-
412
- if self.view_mode == "categories":
413
- self.menu_control.text = self._render_category_list()
414
- else:
415
- self.menu_control.text = self._render_skill_list()
416
-
417
- self.preview_control.text = self._render_details()
400
+ """Rendering is pulled fresh each paint; nothing cached here."""
418
401
 
419
402
  def _enter_category(self) -> None:
420
403
  """Enter the currently highlighted category to browse skills."""
@@ -452,37 +435,9 @@ class SkillsInstallMenu:
452
435
  self.pending_entry = entry
453
436
  self.result = "pending_install"
454
437
 
455
- def run(self) -> bool:
456
- """Run the skills install menu.
457
-
458
- Returns:
459
- True if a skill was installed, False otherwise.
460
- """
461
-
462
- # Build UI
463
- self.menu_control = FormattedTextControl(text="")
464
- self.preview_control = FormattedTextControl(text="")
465
-
466
- menu_window = Window(
467
- content=self.menu_control, wrap_lines=True, width=Dimension(weight=35)
468
- )
469
- preview_window = Window(
470
- content=self.preview_control, wrap_lines=True, width=Dimension(weight=65)
471
- )
472
-
473
- menu_frame = Frame(menu_window, width=Dimension(weight=35), title="Browse")
474
- preview_frame = Frame(
475
- preview_window, width=Dimension(weight=65), title="Details"
476
- )
477
-
478
- root_container = VSplit([menu_frame, preview_frame])
479
-
480
- kb = KeyBindings()
481
-
482
- @kb.add("up")
483
- def _(event):
484
- """Move cursor up."""
485
-
438
+ def handle_key(self, key: str) -> bool:
439
+ """Dispatch one key. True exits the menu."""
440
+ if key == "up":
486
441
  if self.view_mode == "categories":
487
442
  if self.selected_category_idx > 0:
488
443
  self.selected_category_idx -= 1
@@ -492,21 +447,15 @@ class SkillsInstallMenu:
492
447
  len(self.categories),
493
448
  PAGE_SIZE,
494
449
  )
495
- else:
496
- if self.selected_skill_idx > 0:
497
- self.selected_skill_idx -= 1
498
- self.current_page = ensure_visible_page(
499
- self.selected_skill_idx,
500
- self.current_page,
501
- len(self.current_skills),
502
- PAGE_SIZE,
503
- )
504
- self.update_display()
505
-
506
- @kb.add("down")
507
- def _(event):
508
- """Move cursor down."""
509
-
450
+ elif self.selected_skill_idx > 0:
451
+ self.selected_skill_idx -= 1
452
+ self.current_page = ensure_visible_page(
453
+ self.selected_skill_idx,
454
+ self.current_page,
455
+ len(self.current_skills),
456
+ PAGE_SIZE,
457
+ )
458
+ elif key == "down":
510
459
  if self.view_mode == "categories":
511
460
  if self.selected_category_idx < len(self.categories) - 1:
512
461
  self.selected_category_idx += 1
@@ -516,38 +465,27 @@ class SkillsInstallMenu:
516
465
  len(self.categories),
517
466
  PAGE_SIZE,
518
467
  )
519
- else:
520
- if self.selected_skill_idx < len(self.current_skills) - 1:
521
- self.selected_skill_idx += 1
522
- self.current_page = ensure_visible_page(
523
- self.selected_skill_idx,
524
- self.current_page,
525
- len(self.current_skills),
526
- PAGE_SIZE,
527
- )
528
- self.update_display()
529
-
530
- @kb.add("left")
531
- def _(event):
532
- """Navigate to previous page."""
533
-
468
+ elif self.selected_skill_idx < len(self.current_skills) - 1:
469
+ self.selected_skill_idx += 1
470
+ self.current_page = ensure_visible_page(
471
+ self.selected_skill_idx,
472
+ self.current_page,
473
+ len(self.current_skills),
474
+ PAGE_SIZE,
475
+ )
476
+ elif key == "left":
534
477
  if self.current_page > 0:
535
478
  self.current_page -= 1
536
479
  if self.view_mode == "categories":
537
480
  self.selected_category_idx = self.current_page * PAGE_SIZE
538
481
  else:
539
482
  self.selected_skill_idx = self.current_page * PAGE_SIZE
540
- self.update_display()
541
-
542
- @kb.add("right")
543
- def _(event):
544
- """Navigate to next page."""
545
-
546
- if self.view_mode == "categories":
547
- total_items = len(self.categories)
548
- else:
549
- total_items = len(self.current_skills)
550
-
483
+ elif key == "right":
484
+ total_items = (
485
+ len(self.categories)
486
+ if self.view_mode == "categories"
487
+ else len(self.current_skills)
488
+ )
551
489
  total_pages = get_total_pages(total_items, PAGE_SIZE)
552
490
  if self.current_page < total_pages - 1:
553
491
  self.current_page += 1
@@ -555,83 +493,56 @@ class SkillsInstallMenu:
555
493
  self.selected_category_idx = self.current_page * PAGE_SIZE
556
494
  else:
557
495
  self.selected_skill_idx = self.current_page * PAGE_SIZE
558
- self.update_display()
559
-
560
- @kb.add("enter")
561
- def _(event):
562
- """Select/enter the current item."""
563
-
496
+ elif key == "enter":
564
497
  if self.view_mode == "categories":
565
498
  self._enter_category()
566
499
  else:
567
500
  self._select_current_skill()
568
- event.app.exit()
569
-
570
- @kb.add("escape")
571
- def _(event):
572
- """Go back."""
573
-
574
- if self.view_mode == "skills":
575
- self._go_back_to_categories()
576
-
577
- @kb.add("backspace")
578
- def _(event):
579
- """Go back."""
580
-
501
+ return True
502
+ elif key in ("escape", "backspace"):
581
503
  if self.view_mode == "skills":
582
504
  self._go_back_to_categories()
505
+ elif key == "escape":
506
+ return True
507
+ elif key == "ctrl-c":
508
+ return True
509
+ self.update_display()
510
+ return False
583
511
 
584
- @kb.add("c-c")
585
- def _(event):
586
- """Quit the menu."""
512
+ def _render(self) -> list:
513
+ from termflow.tui.terminal import terminal_size
587
514
 
588
- event.app.exit()
515
+ from code_puppy_core_plugins.termflow_tui import two_pane
589
516
 
590
- layout = Layout(root_container)
591
- app = Application(
592
- layout=layout,
593
- key_bindings=kb,
594
- full_screen=False,
595
- mouse_support=False,
596
- style=on_prompt_toolkit_style(),
517
+ width, _ = terminal_size()
518
+ usable = max(40, width - 1)
519
+ left = (
520
+ self._render_category_list()
521
+ if self.view_mode == "categories"
522
+ else self._render_skill_list()
523
+ )
524
+ return two_pane(
525
+ left,
526
+ self._render_details(),
527
+ width=usable,
528
+ list_width=max(24, int(usable * 0.35)),
597
529
  )
598
530
 
599
- set_awaiting_user_input(True)
600
-
601
- # Enter alternate screen buffer
602
- sys.stdout.write("\033[?1049h")
603
- sys.stdout.write("\033[2J\033[H")
604
- sys.stdout.flush()
605
- time.sleep(0.05)
531
+ def run(self) -> bool:
532
+ """Run the skills install menu. True if a skill was installed."""
533
+ from code_puppy_core_plugins.termflow_tui import FragmentTUI
606
534
 
535
+ set_awaiting_user_input(True)
607
536
  try:
608
- self.update_display()
609
- sys.stdout.write("\033[2J\033[H")
610
- sys.stdout.flush()
611
-
612
- app.run(in_thread=True)
613
-
537
+ FragmentTUI(self._render, self.handle_key, use_alt_screen=True).run()
614
538
  finally:
615
- sys.stdout.write("\033[?1049l")
616
- sys.stdout.flush()
617
-
618
- # Flush any buffered input to prevent stale keypresses
619
- try:
620
- import termios
621
-
622
- termios.tcflush(sys.stdin.fileno(), termios.TCIFLUSH)
623
- except Exception:
624
- pass # ImportError on Windows, termios.error, or not a tty
625
-
626
- # Small delay to let terminal settle before any output
627
- time.sleep(0.1)
628
539
  set_awaiting_user_input(False)
629
540
 
630
- # Handle install after TUI exits
541
+ # Handle install after the TUI exits
631
542
  if self.result == "pending_install" and self.pending_entry:
632
543
  return _prompt_and_install(self.pending_entry)
633
544
 
634
- emit_info("✓ Exited skills install browser")
545
+ emit_info("Exited skills install browser")
635
546
  return False
636
547
 
637
548
 
@@ -5,16 +5,9 @@ Built with prompt_toolkit for proper interactive split-panel interface.
5
5
  """
6
6
 
7
7
  import os
8
- import sys
9
- import time
10
8
  from pathlib import Path
11
9
  from typing import List, Optional
12
10
 
13
- from prompt_toolkit.application import Application
14
- from prompt_toolkit.key_binding import KeyBindings
15
- from prompt_toolkit.layout import Dimension, Layout, VSplit, Window
16
- from prompt_toolkit.layout.controls import FormattedTextControl
17
- from prompt_toolkit.widgets import Frame
18
11
 
19
12
  from code_puppy.command_line.pagination import (
20
13
  ensure_visible_page,
@@ -43,7 +36,6 @@ from code_puppy_core_plugins.agent_skills.metadata import (
43
36
  parse_skill_metadata,
44
37
  )
45
38
  from code_puppy.tools.command_runner import set_awaiting_user_input
46
- from code_puppy.callbacks import on_prompt_toolkit_style
47
39
 
48
40
  PAGE_SIZE = 15 # Items per page
49
41
 
@@ -64,8 +56,6 @@ class SkillsMenu:
64
56
  self.result = None
65
57
 
66
58
  # UI controls (set during run)
67
- self.menu_control: Optional[FormattedTextControl] = None
68
- self.preview_control: Optional[FormattedTextControl] = None
69
59
 
70
60
  # Initialize data
71
61
  self._refresh_data()
@@ -315,183 +305,81 @@ class SkillsMenu:
315
305
  return lines or [""]
316
306
 
317
307
  def update_display(self) -> None:
318
- """Update the display based on current state."""
319
- if self.menu_control:
320
- self.menu_control.text = self._render_skill_list()
321
- if self.preview_control:
322
- self.preview_control.text = self._render_skill_details()
308
+ """Rendering is pulled fresh each paint; nothing cached here."""
323
309
 
324
- def run(self) -> bool:
325
- """Run the interactive skills browser.
326
-
327
- Returns:
328
- True if changes were made, False otherwise.
329
- """
330
- # Reset per-run state
331
- self.result = None
332
-
333
- # Build UI
334
- self.menu_control = FormattedTextControl(text="")
335
- self.preview_control = FormattedTextControl(text="")
336
-
337
- menu_window = Window(
338
- content=self.menu_control, wrap_lines=True, width=Dimension(weight=35)
339
- )
340
- preview_window = Window(
341
- content=self.preview_control, wrap_lines=True, width=Dimension(weight=65)
342
- )
343
-
344
- menu_frame = Frame(menu_window, width=Dimension(weight=35), title="Skills")
345
- preview_frame = Frame(
346
- preview_window, width=Dimension(weight=65), title="Details"
347
- )
348
-
349
- root_container = VSplit([menu_frame, preview_frame])
350
-
351
- # Key bindings
352
- kb = KeyBindings()
353
-
354
- @kb.add("up")
355
- @kb.add("c-p") # Ctrl+P
356
- @kb.add("k")
357
- def _(event):
310
+ def handle_key(self, key: str) -> bool:
311
+ """Dispatch one key. True exits the menu."""
312
+ if key in ("up", "ctrl-p", "k"):
358
313
  if self.selected_idx > 0:
359
314
  self.selected_idx -= 1
360
315
  self.current_page = ensure_visible_page(
361
- self.selected_idx,
362
- self.current_page,
363
- len(self.skills),
364
- PAGE_SIZE,
316
+ self.selected_idx, self.current_page, len(self.skills), PAGE_SIZE
365
317
  )
366
- self.update_display()
367
-
368
- @kb.add("down")
369
- @kb.add("c-n") # Ctrl+N
370
- @kb.add("j")
371
- def _(event):
318
+ elif key in ("down", "ctrl-n", "j"):
372
319
  if self.selected_idx < len(self.skills) - 1:
373
320
  self.selected_idx += 1
374
321
  self.current_page = ensure_visible_page(
375
- self.selected_idx,
376
- self.current_page,
377
- len(self.skills),
378
- PAGE_SIZE,
322
+ self.selected_idx, self.current_page, len(self.skills), PAGE_SIZE
379
323
  )
380
- self.update_display()
381
-
382
- @kb.add("left")
383
- def _(event):
384
- """Previous page."""
324
+ elif key == "left":
385
325
  if self.current_page > 0:
386
326
  self.current_page -= 1
387
327
  self.selected_idx = self.current_page * PAGE_SIZE
388
- self.update_display()
389
-
390
- @kb.add("right")
391
- def _(event):
392
- """Next page."""
328
+ elif key == "right":
393
329
  total_pages = get_total_pages(len(self.skills), PAGE_SIZE)
394
330
  if self.current_page < total_pages - 1:
395
331
  self.current_page += 1
396
332
  self.selected_idx = self.current_page * PAGE_SIZE
397
- self.update_display()
398
-
399
- @kb.add("enter")
400
- def _(event):
401
- """Toggle skill enabled/disabled."""
333
+ elif key == "enter":
402
334
  self._toggle_current_skill()
403
335
  self.result = "changed"
404
-
405
- @kb.add("t")
406
- def _(event):
407
- """Toggle skills system on/off."""
336
+ elif key == "t":
408
337
  new_state = not self.skills_enabled
409
338
  set_skills_enabled(new_state)
410
339
  self.skills_enabled = new_state
411
340
  self.result = "changed"
412
- self.update_display()
413
-
414
- @kb.add("r")
415
- def _(event):
416
- """Refresh skills."""
341
+ elif key == "r":
417
342
  refresh_skill_cache()
418
343
  self._refresh_data()
419
- self.update_display()
420
-
421
- @kb.add("c-a")
422
- def _(event):
423
- """Add a skill directory."""
344
+ elif key == "ctrl-a":
424
345
  self.result = "add_directory"
425
- event.app.exit()
426
-
427
- @kb.add("c-d")
428
- def _(event):
429
- """Show/manage directories."""
346
+ return True
347
+ elif key == "ctrl-d":
430
348
  self.result = "show_directories"
431
- event.app.exit()
432
-
433
- @kb.add("i")
434
- def _(event):
435
- """Install skills from catalog."""
349
+ return True
350
+ elif key == "i":
436
351
  self.result = "install"
437
- event.app.exit()
438
-
439
- @kb.add("q")
440
- @kb.add("escape")
441
- def _(event):
442
- self.result = "quit"
443
- event.app.exit()
444
-
445
- @kb.add("c-c")
446
- def _(event):
352
+ return True
353
+ elif key in ("q", "escape", "ctrl-c"):
447
354
  self.result = "quit"
448
- event.app.exit()
449
-
450
- layout = Layout(root_container)
451
- app = Application(
452
- layout=layout,
453
- key_bindings=kb,
454
- full_screen=False,
455
- mouse_support=False,
456
- style=on_prompt_toolkit_style(),
457
- )
355
+ return True
356
+ self.update_display()
357
+ return False
458
358
 
459
- set_awaiting_user_input(True)
359
+ def _render(self) -> list:
360
+ from termflow.tui.terminal import terminal_size
460
361
 
461
- # Enter alternate screen buffer
462
- sys.stdout.write("\033[?1049h") # Enter alternate buffer
463
- sys.stdout.write("\033[2J\033[H") # Clear and home
464
- sys.stdout.flush()
465
- time.sleep(0.05)
362
+ from code_puppy_core_plugins.termflow_tui import two_pane
466
363
 
467
- try:
468
- # Initial display
469
- self.update_display()
470
-
471
- # Clear the buffer
472
- sys.stdout.write("\033[2J\033[H")
473
- sys.stdout.flush()
364
+ width, _ = terminal_size()
365
+ usable = max(40, width - 1)
366
+ return two_pane(
367
+ self._render_skill_list(),
368
+ self._render_skill_details(),
369
+ width=usable,
370
+ list_width=max(24, int(usable * 0.35)),
371
+ )
474
372
 
475
- # Run application in a background thread to avoid event loop conflicts
476
- app.run(in_thread=True)
373
+ def run(self) -> bool:
374
+ """Run the interactive skills browser. Returns the exit reason."""
375
+ from code_puppy_core_plugins.termflow_tui import FragmentTUI
477
376
 
377
+ self.result = None
378
+ set_awaiting_user_input(True)
379
+ try:
380
+ FragmentTUI(self._render, self.handle_key, use_alt_screen=True).run()
478
381
  finally:
479
- # Exit alternate screen buffer
480
- sys.stdout.write("\033[?1049l")
481
- sys.stdout.flush()
482
-
483
- # Flush any buffered input to prevent stale keypresses
484
- try:
485
- import termios
486
-
487
- termios.tcflush(sys.stdin.fileno(), termios.TCIFLUSH)
488
- except Exception:
489
- pass # ImportError on Windows, termios.error, or not a tty
490
-
491
- # Small delay to let terminal settle before any output
492
- time.sleep(0.1)
493
382
  set_awaiting_user_input(False)
494
-
495
383
  return self.result
496
384
 
497
385
 
@@ -120,11 +120,16 @@ during agent build. It:
120
120
  # 1. Define the tool (adds to TOOL_REGISTRY)
121
121
  def _register_tools():
122
122
  return [{"name": "my_tool", "register_func": register_my_tool}]
123
+
124
+
123
125
  register_callback("register_tools", _register_tools)
124
126
 
127
+
125
128
  # 2. Advertise it to agents (adds to agent's tool list)
126
129
  def _advertise(agent_name=None):
127
130
  return ["my_tool"]
131
+
132
+
128
133
  register_callback("register_agent_tools", _advertise)
129
134
  ```
130
135
 
@@ -68,9 +68,11 @@ my_plugin/
68
68
  ```python
69
69
  from code_puppy.callbacks import register_callback
70
70
 
71
+
71
72
  def _on_load_prompt():
72
73
  return "\n## Project Rules\nAlways use type hints."
73
74
 
75
+
74
76
  register_callback("load_prompt", _on_load_prompt)
75
77
  ```
76
78
 
@@ -123,6 +123,7 @@ directly:
123
123
 
124
124
  ```python
125
125
  from code_puppy.messaging import emit_info, emit_success, emit_warning, emit_error
126
+
126
127
  emit_info("Something happened")
127
128
  ```
128
129
 
@@ -149,9 +150,10 @@ doc.
149
150
 
150
151
  ```python
151
152
  from code_puppy.i18n import t, ngettext, lazy
152
- emit_info(t("startup.welcome", name=owner)) # simple, interpolated
153
- emit_info(ngettext("files.deleted", count=n)) # plural-aware
154
- emit_info(lazy("startup.ready")) # resolved at render time
153
+
154
+ emit_info(t("startup.welcome", name=owner)) # simple, interpolated
155
+ emit_info(ngettext("files.deleted", count=n)) # plural-aware
156
+ emit_info(lazy("startup.ready")) # resolved at render time
155
157
  ```
156
158
 
157
159
  - Keys are dotted IDs; **interpolation uses `{name}` only** — no f-strings,
@@ -211,12 +211,8 @@ def _handle_copilot_login(command: str) -> None:
211
211
  " Press Enter to use github.com."
212
212
  )
213
213
  try:
214
- from prompt_toolkit import prompt as pt_prompt
215
-
216
- raw = pt_prompt("GitHub host: ", default="github.com").strip()
214
+ raw = input("GitHub host [github.com]: ").strip()
217
215
  host = raw if raw else "github.com"
218
- except ImportError:
219
- host = "github.com"
220
216
  except (EOFError, KeyboardInterrupt):
221
217
  emit_warning("Copilot login cancelled.")
222
218
  return