code-puppy-core-plugins 0.0.41__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.41 → code_puppy_core_plugins-0.0.43}/PKG-INFO +1 -1
  2. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/config.py +7 -2
  3. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +2 -2
  4. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +51 -1
  5. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/utils.py +32 -8
  6. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/README.md +47 -0
  7. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/__init__.py +1 -0
  8. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/config.py +111 -0
  9. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/locales/en-US.json +18 -0
  10. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/menu.py +95 -0
  11. code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/register_callbacks.py +88 -0
  12. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/pyproject.toml +2 -1
  13. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/.gitignore +0 -0
  14. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/LICENSE +0 -0
  15. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/README.md +0 -0
  16. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/__init__.py +0 -0
  17. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/README.md +0 -0
  18. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/__init__.py +0 -0
  19. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/agent.py +0 -0
  20. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/bridge.py +0 -0
  21. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  22. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/commands.py +0 -0
  23. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/content.py +0 -0
  24. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  25. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  26. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/permissions.py +0 -0
  27. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/persistence.py +0 -0
  28. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  29. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/replay.py +0 -0
  30. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session.py +0 -0
  31. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session_config.py +0 -0
  32. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/state.py +0 -0
  33. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  34. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  35. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  36. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  37. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  38. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  39. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
  40. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  41. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
  42. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  43. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  44. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  45. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  46. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
  47. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
  48. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  49. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
  50. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  51. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
  52. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
  53. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
  54. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  55. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  56. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  57. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  58. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  59. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  60. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  61. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  62. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  63. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  64. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  65. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/__init__.py +0 -0
  66. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  67. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  68. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/side_query.py +0 -0
  69. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  70. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  71. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  72. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  73. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  74. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  75. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  76. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
  100. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/config.py +0 -0
  101. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
  105. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  107. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/README.md +0 -0
  108. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  109. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  110. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  111. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  112. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  114. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  115. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  116. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  118. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  119. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  121. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  122. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/state.py +0 -0
  123. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  124. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  125. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  127. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  128. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  129. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  132. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  133. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  149. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  150. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  152. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  158. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  184. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/__init__.py +0 -0
  189. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  190. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  191. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  192. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  195. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  196. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  199. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/README.md +0 -0
  200. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  201. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/client.py +0 -0
  202. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  203. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  204. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  205. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/sources.py +0 -0
  206. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  207. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  209. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  210. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  214. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  215. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  218. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  219. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  220. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  222. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  223. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  224. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  227. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  233. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  235. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  236. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  237. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  238. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  241. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  242. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  243. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  244. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
  246. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
  247. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  251. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  259. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  261. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  262. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/__init__.py +0 -0
  264. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  265. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  266. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  267. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  268. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  269. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  270. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  271. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  272. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  273. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  274. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  275. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  277. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  278. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  279. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  280. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  281. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  282. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  283. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  285. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  286. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  288. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  292. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  294. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  296. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  297. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  299. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/__init__.py +0 -0
  300. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  301. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/store.py +0 -0
  302. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  303. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  305. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/config.py +0 -0
  306. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/payload.py +0 -0
  307. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  308. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  309. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/runner.py +0 -0
  310. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  311. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  312. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  315. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  316. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  321. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/termflow_tui.py +0 -0
  324. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/README.md +0 -0
  325. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/__init__.py +0 -0
  326. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  327. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  328. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  329. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/picker.py +0 -0
  330. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  332. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  333. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/themes.py +0 -0
  334. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  335. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  340. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  341. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  342. {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  344. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  345. {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  349. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  350. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  351. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  352. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  353. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  354. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/state.py +0 -0
  355. {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  356. {code_puppy_core_plugins-0.0.41 → 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.41
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
@@ -28,8 +28,13 @@ CHATGPT_OAUTH_CONFIG: Dict[str, Any] = {
28
28
  # backend serves — never the raw number (openai/codex#31860, #32806).
29
29
  "default_context_length": 258400,
30
30
  "api_key_env_var": "CHATGPT_OAUTH_API_KEY",
31
- # Codex CLI version info (for User-Agent header)
32
- "client_version": "0.144.1",
31
+ # Codex CLI version info (for User-Agent header AND the /models
32
+ # ``client_version`` query param). The catalog gates models on it:
33
+ # gpt-6-astra has ``minimal_client_version: 0.153.0``, so an older value
34
+ # here silently hides newer models. Bump when a new generation lands.
35
+ "client_version": "0.153.3",
36
+ # Model selected right after a successful OAuth login.
37
+ "default_model": "codex-gpt-6-astra",
33
38
  "originator": "codex_cli_rs",
34
39
  }
35
40
 
@@ -129,7 +129,7 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
129
129
 
130
130
  if name in {"chatgpt-auth", "codex-auth"}:
131
131
  run_oauth_flow()
132
- set_model_and_reload_agent("codex-gpt-5.6-sol")
132
+ set_model_and_reload_agent(CHATGPT_OAUTH_CONFIG["default_model"])
133
133
  # Auth just succeeded: re-discover the auth-gated codex-imagegen skill now
134
134
  # rather than waiting for the next process restart.
135
135
  refresh_skill_cache()
@@ -205,7 +205,7 @@ def _create_chatgpt_oauth_model(
205
205
 
206
206
  # Build headers for ChatGPT Codex API
207
207
  originator = CHATGPT_OAUTH_CONFIG.get("originator", "codex_cli_rs")
208
- client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.144.1")
208
+ client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.153.3")
209
209
 
210
210
  headers = {
211
211
  "ChatGPT-Account-Id": account_id,
@@ -314,10 +314,47 @@ def test_auth_command_refreshes_skill_cache():
314
314
  )
315
315
 
316
316
  oauth_flow.assert_called_once_with()
317
- set_model.assert_called_once_with("codex-gpt-5.6-sol")
317
+ set_model.assert_called_once_with("codex-gpt-6-astra")
318
318
  refresh_skills.assert_called_once_with()
319
319
 
320
320
 
321
+ def test_default_model_is_in_fallback_catalog():
322
+ """A default that isn't in the fallback list would 404 when /models is down."""
323
+ from code_puppy_core_plugins.chatgpt_oauth.config import CHATGPT_OAUTH_CONFIG
324
+
325
+ default = CHATGPT_OAUTH_CONFIG["default_model"]
326
+ prefix = CHATGPT_OAUTH_CONFIG["prefix"]
327
+ assert default.startswith(prefix)
328
+ assert default[len(prefix) :] in utils.DEFAULT_CODEX_MODELS
329
+
330
+
331
+ def test_client_version_meets_gpt6_minimum():
332
+ """gpt-6-astra carries minimal_client_version 0.153.0 in the catalog."""
333
+ from code_puppy_core_plugins.chatgpt_oauth.config import CHATGPT_OAUTH_CONFIG
334
+
335
+ version = tuple(int(p) for p in CHATGPT_OAUTH_CONFIG["client_version"].split("."))
336
+ assert version >= (0, 153, 0)
337
+
338
+
339
+ @pytest.mark.parametrize(
340
+ "name,xhigh,max_effort,responses_controls",
341
+ [
342
+ ("gpt-6-astra", True, True, True),
343
+ ("gpt-6-astra-pro", True, True, True),
344
+ ("gpt-5.6-sol", True, True, True),
345
+ ("gpt-5.5", True, False, False),
346
+ ("gpt-5.4-mini", True, False, False),
347
+ ("gpt-5.3-codex-spark", True, False, False),
348
+ ("codex-auto-review", True, False, False),
349
+ ("gpt-4o", False, False, False),
350
+ ],
351
+ )
352
+ def test_reasoning_gates_by_gpt_generation(name, xhigh, max_effort, responses_controls):
353
+ assert utils._supports_xhigh_reasoning(name) is xhigh
354
+ assert utils._supports_max_reasoning(name) is max_effort
355
+ assert utils._supports_responses_reasoning_controls(name) is responses_controls
356
+
357
+
321
358
  def test_codex_imagegen_agent_tool(tmp_path):
322
359
  registered = {}
323
360
 
@@ -679,5 +716,18 @@ def test_add_models_to_chatgpt_config(tmp_path):
679
716
  assert loaded["codex-gpt-4o"]["context_length"] == 258400
680
717
 
681
718
 
719
+ def test_gpt6_astra_entry_gets_full_reasoning_surface(tmp_path):
720
+ with patch.object(
721
+ utils, "get_chatgpt_models_path", return_value=tmp_path / "chatgpt_models.json"
722
+ ):
723
+ assert utils.add_models_to_extra_config(["gpt-6-astra"])
724
+ entry = utils.load_chatgpt_models()["codex-gpt-6-astra"]
725
+
726
+ assert entry["supports_xhigh_reasoning"] is True
727
+ assert entry["supports_max_reasoning"] is True
728
+ assert "reasoning_context" in entry["supported_settings"]
729
+ assert "reasoning_mode" in entry["supported_settings"]
730
+
731
+
682
732
  if __name__ == "__main__":
683
733
  pytest.main([__file__, "-v"])
@@ -7,10 +7,11 @@ import datetime
7
7
  import hashlib
8
8
  import json
9
9
  import logging
10
+ import re
10
11
  import secrets
11
12
  import time
12
13
  from dataclasses import dataclass
13
- from typing import Any, Dict, List, Optional, Union
14
+ from typing import Any, Dict, List, Optional, Tuple, Union
14
15
  from urllib.parse import parse_qs as urllib_parse_qs
15
16
  from urllib.parse import urlencode, urlparse
16
17
 
@@ -377,6 +378,7 @@ def exchange_code_for_tokens(
377
378
  # Models known to work with ChatGPT OAuth tokens (sourced from codex-rs CLI
378
379
  # and shell-scripts/codex-call.sh).
379
380
  DEFAULT_CODEX_MODELS = [
381
+ "gpt-6-astra",
380
382
  "gpt-5.6-sol",
381
383
  "gpt-5.6-terra",
382
384
  "gpt-5.6-luna",
@@ -399,17 +401,39 @@ CODEX_MODEL_CONTEXT_LENGTHS = {
399
401
  }
400
402
 
401
403
 
404
+ _GPT_VERSION_RE = re.compile(r"^gpt-(\d+)(?:\.(\d+))?")
405
+
406
+
407
+ def _gpt_version(model_name: str) -> Optional[Tuple[int, int]]:
408
+ """``(major, minor)`` for a ``gpt-X[.Y]...`` Codex slug, else ``None``.
409
+
410
+ Kept local (rather than importing ``code_puppy.model_utils``) so this
411
+ plugin doesn't hard-require a core release that ships the shared helper.
412
+ """
413
+ match = _GPT_VERSION_RE.match(model_name.lower())
414
+ if not match:
415
+ return None
416
+ return int(match.group(1)), int(match.group(2) or 0)
417
+
418
+
419
+ def _gpt_at_least(model_name: str, minimum: Tuple[int, int]) -> bool:
420
+ version = _gpt_version(model_name)
421
+ return version is not None and version >= minimum
422
+
423
+
402
424
  def _supports_xhigh_reasoning(model_name: str) -> bool:
403
425
  """Return whether a ChatGPT OAuth model supports xhigh reasoning."""
404
- normalized_model_name = model_name.lower()
405
- return "codex" in normalized_model_name or normalized_model_name.startswith(
406
- ("gpt-5.4", "gpt-5.5", "gpt-5.6")
407
- )
426
+ return "codex" in model_name.lower() or _gpt_at_least(model_name, (5, 4))
408
427
 
409
428
 
410
429
  def _supports_max_reasoning(model_name: str) -> bool:
411
430
  """Return whether a ChatGPT OAuth model supports max reasoning effort."""
412
- return model_name.lower().startswith("gpt-5.6")
431
+ return _gpt_at_least(model_name, (5, 6))
432
+
433
+
434
+ def _supports_responses_reasoning_controls(model_name: str) -> bool:
435
+ """GPT-5.6+ (incl. GPT-6) expose reasoning_context / reasoning_mode."""
436
+ return _gpt_at_least(model_name, (5, 6))
413
437
 
414
438
 
415
439
  def fetch_chatgpt_models(access_token: str, account_id: str) -> List[CodexModelInfo]:
@@ -431,7 +455,7 @@ def fetch_chatgpt_models(access_token: str, account_id: str) -> List[CodexModelI
431
455
  import platform
432
456
 
433
457
  # Build the models URL with client version
434
- client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.144.1")
458
+ client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.153.3")
435
459
  base_url = CHATGPT_OAUTH_CONFIG["api_base_url"].rstrip("/")
436
460
  models_url = f"{base_url}/models"
437
461
 
@@ -525,7 +549,7 @@ def add_models_to_extra_config(models: List[Union[str, CodexModelInfo]]) -> bool
525
549
  # Responses-API models always support reasoning effort, summaries,
526
550
  # and text verbosity; per-model extras are added below.
527
551
  supported_settings = ["reasoning_effort", "summary", "verbosity"]
528
- if model_name.lower().startswith("gpt-5.6"):
552
+ if _supports_responses_reasoning_controls(model_name):
529
553
  supported_settings.extend(["reasoning_context", "reasoning_mode"])
530
554
 
531
555
  # xhigh: codex + GPT-5.4+; max: GPT-5.6+. Separate flags so a stronger
@@ -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.41"
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"