code-puppy-core-plugins 0.0.42__tar.gz → 0.0.43__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 (356) hide show
  1. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/PKG-INFO +1 -1
  2. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/README.md +47 -0
  3. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/__init__.py +1 -0
  4. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/config.py +111 -0
  5. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/locales/en-US.json +18 -0
  6. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/menu.py +95 -0
  7. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/register_callbacks.py +88 -0
  8. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/pyproject.toml +2 -1
  9. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/.gitignore +0 -0
  10. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/LICENSE +0 -0
  11. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/README.md +0 -0
  12. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/__init__.py +0 -0
  13. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/README.md +0 -0
  14. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/__init__.py +0 -0
  15. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/agent.py +0 -0
  16. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/bridge.py +0 -0
  17. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  18. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/commands.py +0 -0
  19. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/content.py +0 -0
  20. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  21. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  22. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/permissions.py +0 -0
  23. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/persistence.py +0 -0
  24. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  25. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/replay.py +0 -0
  26. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session.py +0 -0
  27. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session_config.py +0 -0
  28. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/state.py +0 -0
  29. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  30. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  31. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  32. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  33. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  34. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  35. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
  36. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  37. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
  38. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  39. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  40. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  41. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  42. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
  43. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
  44. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  45. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
  46. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  47. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
  48. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
  49. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
  50. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  51. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  52. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  53. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  54. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  55. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  56. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  57. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  58. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  59. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  60. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  61. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/__init__.py +0 -0
  62. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  63. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  64. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/side_query.py +0 -0
  65. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  66. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  67. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  68. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  69. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  70. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  71. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  72. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  73. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  74. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  75. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  76. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  77. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  78. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  79. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
  80. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  81. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  82. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  83. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  84. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  85. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
  86. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
  87. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
  88. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  89. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
  90. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
  91. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
  92. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
  93. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
  94. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
  95. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
  96. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
  97. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
  98. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
  99. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
  100. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/config.py +0 -0
  101. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
  102. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
  103. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
  104. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
  105. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
  106. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  107. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/README.md +0 -0
  108. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  109. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  110. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  111. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  112. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
  113. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  114. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  115. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  116. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
  117. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  118. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  119. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
  120. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  121. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  122. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/state.py +0 -0
  123. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  124. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  125. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
  126. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  127. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  128. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  129. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
  130. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
  131. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  132. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  133. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
  134. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
  135. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
  136. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
  137. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
  138. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
  139. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
  140. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
  141. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
  142. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
  143. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
  144. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
  145. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
  146. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
  147. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
  148. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  149. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  150. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
  151. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  152. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  153. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
  154. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
  155. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
  156. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
  157. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  158. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  159. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  160. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  161. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  162. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  163. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  164. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  165. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  166. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  167. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  168. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  169. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  170. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  171. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  172. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  173. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  174. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  175. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  176. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  177. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  178. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  179. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  180. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  181. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  182. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  183. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  184. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
  185. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
  186. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
  187. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
  188. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/__init__.py +0 -0
  189. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  190. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  191. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  192. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
  193. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
  194. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  195. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  196. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
  197. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
  198. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  199. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/README.md +0 -0
  200. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  201. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/client.py +0 -0
  202. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  203. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  204. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  205. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/sources.py +0 -0
  206. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  207. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
  208. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  209. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  210. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
  211. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
  212. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
  213. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  214. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  215. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
  216. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
  217. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  218. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  219. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  220. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
  221. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  222. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  223. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  224. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
  225. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
  226. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  227. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
  228. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
  229. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
  230. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
  231. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
  232. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  233. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
  234. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  235. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  236. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  237. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  238. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
  239. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
  240. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  241. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  242. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  243. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  244. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
  245. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
  246. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
  247. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
  248. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
  249. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
  250. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  251. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
  252. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
  253. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
  254. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
  255. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
  256. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
  257. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
  258. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  259. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
  260. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  261. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  262. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
  263. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/__init__.py +0 -0
  264. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  265. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  266. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  267. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  268. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  269. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  270. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  271. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  272. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  273. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  274. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  275. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
  276. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  277. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  278. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  279. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  280. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  281. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  282. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  283. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
  284. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  285. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  286. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
  287. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  288. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
  289. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
  290. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
  291. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  292. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
  293. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  294. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
  295. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  296. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  297. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
  298. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  299. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/__init__.py +0 -0
  300. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  301. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/store.py +0 -0
  302. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  303. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
  304. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  305. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/config.py +0 -0
  306. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/payload.py +0 -0
  307. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  308. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  309. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/runner.py +0 -0
  310. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  311. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  312. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
  313. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
  314. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  315. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  316. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
  317. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
  318. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
  319. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
  320. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  321. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
  322. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
  323. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/termflow_tui.py +0 -0
  324. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/README.md +0 -0
  325. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/__init__.py +0 -0
  326. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  327. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  328. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  329. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/picker.py +0 -0
  330. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
  331. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  332. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  333. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/themes.py +0 -0
  334. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  335. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
  336. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
  337. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
  338. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
  339. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  340. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  341. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  342. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
  343. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  344. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  345. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
  346. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
  347. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
  348. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  349. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  350. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  351. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  352. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  353. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  354. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/state.py +0 -0
  355. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  356. {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/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.42
3
+ Version: 0.0.43
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,47 @@
1
+ # Configuration profiles
2
+
3
+ Use different model/agent harness settings without having terminals overwrite
4
+ each other's pins:
5
+
6
+ ```text
7
+ /profile # keyboard menu: c creates, Enter activates
8
+ /profile create web # snapshot this process's current config
9
+ /profile use web # switch only this running process
10
+ /profile list
11
+ ```
12
+
13
+ ```sh
14
+ code-puppy --profile web
15
+ code-puppy --profile default
16
+ code-puppy # always the default profile
17
+ ```
18
+
19
+ Named profiles store INI settings in
20
+ `~/.code_puppy/profiles/<name>/puppy.cfg` (or under
21
+ `$XDG_CONFIG_HOME/code_puppy/profiles` when configured). `default` keeps using
22
+ the existing `puppy.cfg`; no global active-profile pointer is needed.
23
+ A nonexistent CLI profile exits with status 2, rather than silently
24
+ running the wrong harness. Names are lowercase letters/digits/underscores/
25
+ hyphens, 1–64 characters, starting with a letter or digit.
26
+
27
+ All `puppy.cfg` settings are snapshotted, including agent model pins, model
28
+ settings, token limits and `/set` values. Changes persist within that profile.
29
+ Two processes deliberately using the **same** profile still share its settings;
30
+ use distinct names for independent harnesses. Switching rebuilds the current
31
+ agent while retaining its conversation, rather than changing agent identity.
32
+
33
+ Model catalogs, credentials, custom agent definitions, skills, MCP server files
34
+ and conversation storage remain shared. Profiles do not restrict which agents
35
+ a model may invoke. A profile is a settings preset, not a security sandbox.
36
+ Provider API keys are stored once in the OS keyring, with the existing
37
+ permission-hardened `secrets.json` fallback. Creating or selecting a profile
38
+ migrates recognized legacy credentials from all profile configs, checking for
39
+ conflicts before writing and removing legacy values only after verified storage.
40
+ Conflicting values block the operation without choosing a winner. Reconcile the
41
+ reported key in the legacy configs and shared store, then retry. Values are never
42
+ included in the conflict message. Environment-only keys are not copied.
43
+ Custom model API-key and secret-header environment references are recognized;
44
+ unrelated arbitrary secrets cannot be inferred, so configs still need care.
45
+ Data is INI, not executed Python. The plugin's `config.py` contains storage logic.
46
+
47
+ No deletion or overwrite operation is exposed in this initial version.
@@ -0,0 +1 @@
1
+ """Process-local configuration profiles."""
@@ -0,0 +1,111 @@
1
+ """Profile persistence; ordinary INI data, never executable Python presets.
2
+
3
+ The legacy config is the default profile. Selecting a profile only redirects
4
+ this process's config I/O; there is deliberately no global 'active' pointer.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import io
10
+ import re
11
+ from pathlib import Path
12
+
13
+ from code_puppy import config
14
+ from code_puppy.atomic_io import atomic_write_bytes, path_lock
15
+ from code_puppy.config_file import load_config
16
+ from code_puppy.i18n import t
17
+
18
+ _active = "default"
19
+ _NAME = re.compile(r"[a-z0-9][a-z0-9_-]{0,63}\Z")
20
+ _RESERVED = {"con", "prn", "aux", "nul"} | {
21
+ f"{prefix}{i}" for prefix in ("com", "lpt") for i in range(1, 10)
22
+ }
23
+
24
+
25
+ def validate_name(name: str) -> str:
26
+ if not _NAME.fullmatch(name) or name in _RESERVED:
27
+ raise ValueError(t("profiles.invalid_name"))
28
+ return name
29
+
30
+
31
+ def profile_path(name: str) -> Path:
32
+ validate_name(name)
33
+ root = Path(config.CONFIG_DIR)
34
+ if name == "default":
35
+ return root / "puppy.cfg"
36
+ directory = root / "profiles" / name
37
+ # Do not follow profile aliases outside the profiles directory.
38
+ if (
39
+ (root / "profiles").is_symlink()
40
+ or directory.is_symlink()
41
+ or (directory / "puppy.cfg").is_symlink()
42
+ ):
43
+ raise ValueError(t("profiles.symlink"))
44
+ return directory / "puppy.cfg"
45
+
46
+
47
+ def active_profile() -> str:
48
+ return _active
49
+
50
+
51
+ def list_profiles() -> list[str]:
52
+ root = Path(config.CONFIG_DIR) / "profiles"
53
+ if not root.exists():
54
+ return ["default"]
55
+ return ["default"] + sorted(
56
+ p.name
57
+ for p in root.iterdir()
58
+ if p.name != "default"
59
+ and _NAME.fullmatch(p.name)
60
+ and not p.is_symlink()
61
+ and not (p / "puppy.cfg").is_symlink()
62
+ and (p / "puppy.cfg").is_file()
63
+ )
64
+
65
+
66
+ def create_profile(name: str) -> None:
67
+ """Snapshot current settings without overwriting an existing profile."""
68
+ target = profile_path(name)
69
+ if name == "default":
70
+ raise ValueError(t("profiles.exists", name=name))
71
+ if target.exists():
72
+ raise ValueError(t("profiles.exists", name=name))
73
+ migrate_credentials()
74
+ snapshot = load_config(str(config.CONFIG_FILE))
75
+ from code_puppy.shared_credentials import is_credential_key
76
+
77
+ # A concurrently running older Puppy may have written a plaintext key
78
+ # after migration. Never duplicate it into the new profile.
79
+ for section in [snapshot.default_section, *snapshot.sections()]:
80
+ for key in list(snapshot[section]):
81
+ if is_credential_key(key):
82
+ snapshot[section].pop(key, None)
83
+ buffer = io.StringIO()
84
+ snapshot.write(buffer)
85
+ target.parent.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
86
+ target.parent.mkdir(mode=0o700, exist_ok=True)
87
+ with path_lock(str(target)):
88
+ if target.exists():
89
+ raise ValueError(t("profiles.exists", name=name))
90
+ atomic_write_bytes(str(target), buffer.getvalue().encode("utf-8"))
91
+
92
+
93
+ def activate_profile(name: str) -> None:
94
+ """Select a config for this process; missing named profiles fail closed."""
95
+ global _active
96
+ target = profile_path(name)
97
+ if name != "default" and not target.is_file():
98
+ raise ValueError(t("profiles.missing", name=name))
99
+ # Validate accessibility before changing any runtime state.
100
+ load_config(str(target))
101
+ migrate_credentials()
102
+ config.CONFIG_FILE = str(target)
103
+ config.reset_session_model()
104
+ config.clear_model_cache()
105
+ _active = name
106
+
107
+
108
+ def migrate_credentials() -> None:
109
+ from code_puppy.shared_credentials import migrate
110
+
111
+ migrate([str(profile_path(name)) for name in list_profiles()])
@@ -0,0 +1,18 @@
1
+ {
2
+ "profiles.title": "Configuration profiles (* active in this process)",
3
+ "profiles.cli_help": "Use a named configuration profile for this run (default: default)",
4
+ "profiles.help": "Create and switch isolated configuration profiles",
5
+ "profiles.invalid_name": "Use 1–64 lowercase letters, digits, underscores or hyphens; start with a letter or digit.",
6
+ "profiles.symlink": "Symlinked profiles are not supported.",
7
+ "profiles.exists": "Profile '{name}' already exists.",
8
+ "profiles.missing": "Profile '{name}' does not exist. Create it with /profile create {name}.",
9
+ "profiles.error": "Profile error: {detail}",
10
+ "profiles.created": "Created '{name}' from the current settings. Select it with Enter or /profile use {name}.",
11
+ "profiles.active": "Active profile: {name} (this process only).",
12
+ "profiles.list": "Active: {active}\nProfiles: {names}",
13
+ "profiles.usage": "/profile | /profile list | /profile create NAME | /profile use NAME",
14
+ "profiles.keys": "↑/↓ select · Enter activate · c create · Esc/q close",
15
+ "profiles.new_name": "New profile name: {name}",
16
+ "profiles.row": "{cursor} {active} {name}",
17
+ "profiles.no_tty": "The profile menu needs a terminal. Use /profile list, create NAME or use NAME instead."
18
+ }
@@ -0,0 +1,95 @@
1
+ """Small keyboard-driven profile picker with inline profile creation."""
2
+
3
+ from code_puppy.i18n import t
4
+ from code_puppy_core_plugins.termflow_tui import FragmentTUI, fragments_to_lines
5
+
6
+ from . import config
7
+
8
+
9
+ class ProfileMenu:
10
+ def __init__(self):
11
+ self.names = config.list_profiles()
12
+ self.index = (
13
+ self.names.index(config.active_profile())
14
+ if config.active_profile() in self.names
15
+ else 0
16
+ )
17
+ self.creating = False
18
+ self.name = ""
19
+ self.message = ""
20
+
21
+ def render(self):
22
+ fragments = [("class:tui.title", t("profiles.title") + "\n\n")]
23
+ # Keep the selection visible even with a large profile collection.
24
+ start = max(0, self.index - 5)
25
+ for index in range(start, min(len(self.names), start + 10)):
26
+ name = self.names[index]
27
+ label = t(
28
+ "profiles.row",
29
+ cursor=">" if index == self.index else " ",
30
+ name=name,
31
+ active="*" if name == config.active_profile() else " ",
32
+ )
33
+ fragments.append(
34
+ (
35
+ "class:tui.selected" if index == self.index else "class:tui.text",
36
+ label + "\n",
37
+ )
38
+ )
39
+ fragments.append(("class:tui.help", "\n" + t("profiles.keys") + "\n"))
40
+ if self.creating:
41
+ fragments.append(
42
+ ("class:tui.input", t("profiles.new_name", name=self.name) + "\n")
43
+ )
44
+ if self.message:
45
+ fragments.append(("class:tui.warning", self.message))
46
+ return fragments_to_lines(fragments)
47
+
48
+ def on_key(self, key):
49
+ if key in ("ctrl-c", "\x03", "\x1b", "escape"):
50
+ if self.creating:
51
+ self.creating = False
52
+ return False
53
+ return True
54
+ try:
55
+ if self.creating:
56
+ if key in ("\r", "\n", "enter"):
57
+ config.create_profile(self.name)
58
+ self.names = config.list_profiles()
59
+ self.index = self.names.index(self.name)
60
+ self.creating = False
61
+ self.message = t("profiles.created", name=self.name)
62
+ elif key in ("\x7f", "\b", "backspace"):
63
+ self.name = self.name[:-1]
64
+ elif (
65
+ len(key) == 1
66
+ and key.isascii()
67
+ and key.isprintable()
68
+ and len(self.name) < 64
69
+ ):
70
+ self.name += key
71
+ elif key in ("up", "\x1b[A", "k"):
72
+ self.index = (self.index - 1) % len(self.names)
73
+ elif key in ("down", "\x1b[B", "j"):
74
+ self.index = (self.index + 1) % len(self.names)
75
+ elif key == "c":
76
+ self.creating, self.name, self.message = True, "", ""
77
+ elif key in ("\r", "\n", "enter"):
78
+ from .register_callbacks import switch_profile
79
+
80
+ switch_profile(self.names[self.index])
81
+ self.message = t("profiles.active", name=config.active_profile())
82
+ elif key == "q":
83
+ return True
84
+ except (OSError, ValueError, RuntimeError) as exc:
85
+ self.message = t("profiles.error", detail=str(exc))
86
+ return False
87
+
88
+
89
+ def run_menu():
90
+ import sys
91
+
92
+ if not sys.stdin.isatty():
93
+ raise ValueError(t("profiles.no_tty"))
94
+ menu = ProfileMenu()
95
+ FragmentTUI(menu.render, menu.on_key).run()
@@ -0,0 +1,88 @@
1
+ """CLI and slash-command entry points for configuration profiles."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shlex
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ from code_puppy.callbacks import register_callback
10
+ from code_puppy.i18n import add_catalog_dir, t
11
+
12
+ from . import config
13
+
14
+ add_catalog_dir(Path(__file__).parent / "locales")
15
+
16
+
17
+ def register_cli_args(parser):
18
+ parser.add_argument(
19
+ "--profile", metavar="NAME", default="default", help=t("profiles.cli_help")
20
+ )
21
+
22
+
23
+ def handle_cli_args(args):
24
+ try:
25
+ config.activate_profile(getattr(args, "profile", "default"))
26
+ except (OSError, ValueError) as exc:
27
+ print(t("profiles.error", detail=str(exc)), file=sys.stderr)
28
+ return {"handled": True, "exit_code": 2}
29
+ return None
30
+
31
+
32
+ def switch_profile(name):
33
+ """Rebuild the current agent so cached model settings cannot leak."""
34
+ from code_puppy.agents.agent_manager import (
35
+ get_current_agent_name,
36
+ set_current_agent,
37
+ )
38
+
39
+ previous = config.active_profile()
40
+ agent = get_current_agent_name()
41
+ config.activate_profile(name)
42
+ try:
43
+ set_current_agent(agent)
44
+ except Exception:
45
+ config.activate_profile(previous)
46
+ raise
47
+
48
+
49
+ def custom_command(command, name):
50
+ if name != "profile":
51
+ return None
52
+ from code_puppy.messaging import emit_error, emit_info
53
+
54
+ try:
55
+ parts = shlex.split(command)[1:]
56
+ if not parts:
57
+ from .menu import run_menu
58
+
59
+ run_menu()
60
+ elif parts == ["list"]:
61
+ emit_info(
62
+ t(
63
+ "profiles.list",
64
+ active=config.active_profile(),
65
+ names=", ".join(config.list_profiles()),
66
+ )
67
+ )
68
+ elif len(parts) == 2 and parts[0] == "create":
69
+ config.create_profile(parts[1])
70
+ emit_info(t("profiles.created", name=parts[1]))
71
+ elif len(parts) == 2 and parts[0] == "use":
72
+ switch_profile(parts[1])
73
+ emit_info(t("profiles.active", name=parts[1]))
74
+ else:
75
+ emit_info(t("profiles.usage"))
76
+ except (OSError, ValueError, RuntimeError) as exc:
77
+ emit_error(t("profiles.error", detail=str(exc)))
78
+ return True
79
+
80
+
81
+ def custom_help():
82
+ return [("profile", t("profiles.help"))]
83
+
84
+
85
+ register_callback("register_cli_args", register_cli_args)
86
+ register_callback("handle_cli_args", handle_cli_args)
87
+ register_callback("custom_command", custom_command)
88
+ register_callback("custom_command_help", custom_help)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy-core-plugins"
7
- version = "0.0.42"
7
+ version = "0.0.43"
8
8
  description = "Official plugin bundle for Code Puppy"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -69,6 +69,7 @@ ollama_setup = "code_puppy_core_plugins.ollama_setup.register_callbacks"
69
69
  openrouter_oauth = "code_puppy_core_plugins.openrouter_oauth.register_callbacks"
70
70
  plugin_list = "code_puppy_core_plugins.plugin_list.register_callbacks"
71
71
  pop_command = "code_puppy_core_plugins.pop_command.register_callbacks"
72
+ profiles = "code_puppy_core_plugins.profiles.register_callbacks"
72
73
  prompt_newline = "code_puppy_core_plugins.prompt_newline.register_callbacks"
73
74
  prune = "code_puppy_core_plugins.prune.register_callbacks"
74
75
  puppy_kennel = "code_puppy_core_plugins.puppy_kennel.register_callbacks"