code-puppy-core-plugins 0.0.66__tar.gz → 0.0.68__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 (374) hide show
  1. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/PKG-INFO +2 -2
  2. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +8 -3
  3. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/__init__.py +1 -0
  4. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/chunks.py +269 -0
  5. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/config.py +55 -0
  6. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/judge.py +102 -0
  7. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/locales/en-US.json +3 -0
  8. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/register_callbacks.py +54 -0
  9. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/retrieve.py +90 -0
  10. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/search.py +187 -0
  11. code_puppy_core_plugins-0.0.68/code_puppy_core_plugins/jev_grep/tool.py +121 -0
  12. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/pyproject.toml +3 -2
  13. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/.gitignore +0 -0
  14. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/LICENSE +0 -0
  15. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/README.md +0 -0
  16. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/__init__.py +0 -0
  17. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/README.md +0 -0
  18. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/__init__.py +0 -0
  19. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/agent.py +0 -0
  20. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/bridge.py +0 -0
  21. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  22. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/commands.py +0 -0
  23. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/content.py +0 -0
  24. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  25. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  26. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/permissions.py +0 -0
  27. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/persistence.py +0 -0
  28. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  29. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/replay.py +0 -0
  30. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/session.py +0 -0
  31. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/session_config.py +0 -0
  32. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/acp/state.py +0 -0
  33. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  34. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  35. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  36. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  37. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  38. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  39. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  40. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  41. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  42. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  43. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  44. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  45. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  46. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
  47. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
  48. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
  49. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  50. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  51. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  52. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  53. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  54. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  55. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  56. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  57. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  58. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  59. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  60. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/background_agents/README.md +0 -0
  61. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
  62. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
  63. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/btw/__init__.py +0 -0
  64. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  65. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  66. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/btw/side_query.py +0 -0
  67. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  68. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  69. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  70. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  71. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  72. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  73. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  74. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  75. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  76. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  77. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  78. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  79. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  80. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  81. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
  82. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  83. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  84. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  85. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  86. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  87. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
  88. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
  89. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
  90. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +0 -0
  91. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
  92. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  93. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/token_store.py +0 -0
  94. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
  95. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
  96. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
  97. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
  98. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
  99. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
  100. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
  101. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
  102. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
  103. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
  104. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
  105. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/config.py +0 -0
  106. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
  107. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
  108. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
  109. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
  110. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
  111. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  112. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/README.md +0 -0
  113. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  114. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  115. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  116. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  117. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
  118. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  119. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  120. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  121. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
  122. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  123. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  124. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
  125. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  126. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  127. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/state.py +0 -0
  128. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  129. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  130. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
  131. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  132. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  133. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  134. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
  135. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
  136. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
  137. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  138. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  139. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
  140. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
  141. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
  142. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
  143. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
  144. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
  145. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
  146. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
  147. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
  148. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
  149. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
  150. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
  151. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
  152. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
  153. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
  154. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  155. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  156. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
  157. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  158. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  159. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
  160. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
  161. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
  162. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
  163. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  164. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  165. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  166. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  167. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  168. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  169. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  170. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  171. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  172. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  173. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  174. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  175. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  176. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  177. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  178. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  179. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  180. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  181. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  182. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  183. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  184. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  185. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  186. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  187. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  188. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  189. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  190. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
  191. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
  192. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
  193. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
  194. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/fork/__init__.py +0 -0
  195. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  196. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  197. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  198. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
  199. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
  200. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  201. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  202. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
  203. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
  204. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  205. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/README.md +0 -0
  206. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  207. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/client.py +0 -0
  208. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  209. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  210. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/restore.py +0 -0
  211. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  212. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/herdr/sources.py +0 -0
  213. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  214. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
  215. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  216. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  217. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
  218. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
  219. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
  220. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  221. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  222. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
  223. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
  224. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  225. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  226. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  227. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
  228. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  229. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/mcp_binding_prompt/README.md +0 -0
  230. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +0 -0
  231. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/mcp_binding_prompt/custom_install.py +0 -0
  232. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/mcp_binding_prompt/http_form.py +0 -0
  233. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/mcp_binding_prompt/register_callbacks.py +0 -0
  234. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  235. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  236. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
  237. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
  238. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  239. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
  240. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
  241. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
  242. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
  243. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
  244. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  245. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
  246. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  247. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  248. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  249. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  250. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
  251. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
  252. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  253. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  254. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  255. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  256. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
  257. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
  258. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
  259. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
  260. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
  261. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
  262. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  263. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
  264. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
  265. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
  266. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
  267. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
  268. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
  269. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
  270. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  271. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
  272. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/README.md +0 -0
  273. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/__init__.py +0 -0
  274. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/config.py +0 -0
  275. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
  276. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/menu.py +0 -0
  277. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
  278. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  279. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  280. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
  281. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prune/__init__.py +0 -0
  282. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  283. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  284. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  285. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  286. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  287. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  288. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  289. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  290. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  291. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  292. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  293. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
  294. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  295. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  296. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  297. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  298. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  299. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  300. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  301. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
  302. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  303. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  304. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
  305. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  306. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
  307. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
  308. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
  309. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  310. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
  311. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  312. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
  313. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  314. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  315. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
  316. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  317. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/spill/__init__.py +0 -0
  318. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  319. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/spill/store.py +0 -0
  320. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  321. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
  322. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  323. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/config.py +0 -0
  324. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/payload.py +0 -0
  325. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  326. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  327. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/runner.py +0 -0
  328. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  329. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  330. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
  331. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
  332. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  333. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  334. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
  335. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
  336. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
  337. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
  338. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  339. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
  340. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
  341. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/termflow_tui.py +0 -0
  342. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/README.md +0 -0
  343. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/__init__.py +0 -0
  344. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  345. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  346. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  347. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/picker.py +0 -0
  348. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
  349. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  350. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  351. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/theme/themes.py +0 -0
  352. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  353. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
  354. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
  355. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
  356. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
  357. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  358. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  359. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  360. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
  361. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  362. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  363. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
  364. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
  365. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
  366. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  367. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  368. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  369. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  370. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  371. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  372. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/wiggum/state.py +0 -0
  373. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  374. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.68}/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.66
3
+ Version: 0.0.68
4
4
  Summary: Official plugin bundle for Code Puppy
5
5
  Project-URL: Repository, https://github.com/mpfaffenberger/code_puppy_core_plugins
6
6
  Project-URL: Homepage, https://github.com/mpfaffenberger/code_puppy_core_plugins
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Python: <3.15,>=3.11
17
17
  Requires-Dist: httpx<1,>=0.24.1
18
- Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]<3,>=2.47.0
18
+ Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai,typesafe]<3,>=2.51.0
19
19
  Description-Content-Type: text/markdown
20
20
 
21
21
  # Code Puppy Core Plugins
@@ -98,8 +98,9 @@ def create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
98
98
  if verify is None:
99
99
  verify = get_cert_bundle_path()
100
100
 
101
- # No HTTP/2 for OAuth: the UnprefixingStream tool-name rewrite breaks under
102
- # HTTP/2's compression handling, causing zlib decompression errors.
101
+ # No HTTP/2 for OAuth: kept as a precaution from core cfff821b4, which fixed
102
+ # zlib decompression errors caused by rewriting response streams to strip
103
+ # the ``cp_`` prefix. Responses are no longer rewritten -- see below.
103
104
  kwargs = {}
104
105
  # Plugin releases land before core. Old transports keep their legacy path.
105
106
  import inspect
@@ -116,7 +117,11 @@ def create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
116
117
  timeout=180,
117
118
  http2=False,
118
119
  # Claude Code OAuth requires the ``cp_`` tool-name prefix; the wire
119
- # format Anthropic's CLI uses won't accept un-prefixed tools.
120
+ # format Anthropic's CLI uses won't accept un-prefixed tools. Only
121
+ # requests are rewritten: returned ``cp_*`` calls are mapped back to
122
+ # real tool names at dispatch by core's pydantic_patches
123
+ # (``_normalize_claude_code_tool_name``), so this model needs
124
+ # ``apply_all_patches()`` -- cli_runner applies it at import.
120
125
  apply_claude_code_prefix=True,
121
126
  oauth_reauthentication_callback=lambda: _reauthenticate_after_expired_oauth(
122
127
  model_name
@@ -0,0 +1 @@
1
+ """Semantic code search powered by TypeSafe's Jev decision model."""
@@ -0,0 +1,269 @@
1
+ """Discovery and chunking: turn a directory into judgeable source snippets.
2
+
3
+ Python files are split along the
4
+ AST (functions and methods stay whole; declarations longer than
5
+ ``SPLIT_LINES`` are split into the blocks inside them so each snippet is one
6
+ behaviour). Every other file falls back to overlapping line windows. Line
7
+ coverage is exact: every non-blank line lands in at least one snippet.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import ast
13
+ import os
14
+ import subprocess
15
+ from collections import Counter
16
+ from dataclasses import dataclass, field
17
+
18
+ from code_puppy.tools.ripgrep import find_ripgrep
19
+
20
+ # Discovery is bounded by files and bytes only. Snippet count is not capped:
21
+ # only the ranked shortlist is judged, and local BM25 over the ~24k snippets
22
+ # of a repo root takes well under a second.
23
+ MAX_FILES = 20_000
24
+ MAX_FILE_BYTES = 1024 * 1024
25
+ MAX_TOTAL_BYTES = 32 * 1024 * 1024
26
+ MAX_CHUNK_CHARS = 12_000
27
+ WHOLE_DECLARATION_LINES = 160
28
+ SPLIT_LINES = 24
29
+ WINDOW, OVERLAP = 60, 10
30
+
31
+
32
+ class LineTooLong(ValueError):
33
+ """A single line is too long to judge (minified or generated source)."""
34
+
35
+
36
+ @dataclass(frozen=True)
37
+ class Chunk:
38
+ path: str
39
+ line: int
40
+ end_line: int
41
+ text: str
42
+ symbol: str | None = None
43
+
44
+
45
+ @dataclass
46
+ class Discovery:
47
+ chunks: list[Chunk] = field(default_factory=list)
48
+ files: int = 0
49
+ skipped: list[tuple[str, str]] = field(default_factory=list)
50
+ parsers: Counter = field(default_factory=Counter)
51
+
52
+
53
+ @dataclass
54
+ class _Range:
55
+ start: int
56
+ end: int
57
+ symbol: str | None
58
+
59
+
60
+ def windows(
61
+ lines: list[str],
62
+ path: str,
63
+ first_line: int = 1,
64
+ size: int = WINDOW,
65
+ overlap: int = OVERLAP,
66
+ symbol: str | None = None,
67
+ ) -> list[Chunk]:
68
+ """Fixed-size line windows; giant windows are halved, never clipped."""
69
+ out: list[Chunk] = []
70
+ step = size - overlap
71
+ for i in range(0, max(len(lines), 1), step):
72
+ part = lines[i : i + size]
73
+ text = "\n".join(part)
74
+ if len(text) > MAX_CHUNK_CHARS:
75
+ if size == 1:
76
+ raise LineTooLong(
77
+ f"line exceeds {MAX_CHUNK_CHARS} characters: {path}:{first_line + i}"
78
+ )
79
+ out.extend(
80
+ windows(part, path, first_line + i, max(1, size // 2), 0, symbol)
81
+ )
82
+ elif text.strip():
83
+ out.append(
84
+ Chunk(
85
+ path, first_line + i, first_line + i + len(part) - 1, text, symbol
86
+ )
87
+ )
88
+ if i + size >= len(lines):
89
+ break
90
+ return out
91
+
92
+
93
+ def _begin(node: ast.AST) -> int:
94
+ decorators = getattr(node, "decorator_list", [])
95
+ return min([node.lineno, *(d.lineno for d in decorators)])
96
+
97
+
98
+ def _partition(node: ast.AST, start: int, end: int, symbol, depth: int = 0):
99
+ """Split a long body into its blocks, covering every line of [start, end]."""
100
+ body = getattr(node, "body", None)
101
+ if not isinstance(body, list) or end - start < SPLIT_LINES:
102
+ return None
103
+ stmts = [s for s in body if hasattr(s, "end_lineno")]
104
+ if not stmts:
105
+ return None
106
+ if len(stmts) == 1:
107
+ return (
108
+ _partition(stmts[0], start, end, symbol, depth + 1) if depth < 3 else None
109
+ )
110
+
111
+ out: list[_Range] = []
112
+ cursor = start
113
+ group: list[ast.stmt] = []
114
+
115
+ def flush(last: bool) -> None:
116
+ nonlocal cursor
117
+ if not group:
118
+ return
119
+ stop = end if last else min(end, group[-1].end_lineno)
120
+ if stop >= cursor:
121
+ inner = None
122
+ if len(group) == 1 and depth < 3:
123
+ inner = _partition(group[0], cursor, stop, symbol, depth + 1)
124
+ out.extend(inner or [_Range(cursor, stop, symbol)])
125
+ cursor = stop + 1
126
+ group.clear()
127
+
128
+ for stmt in stmts:
129
+ span = stmt.end_lineno - _begin(stmt) + 1
130
+ if group and (span >= 6 or stmt.end_lineno - cursor + 1 > 20):
131
+ flush(False)
132
+ group.append(stmt)
133
+ if span >= 6 and stmt is not stmts[-1]:
134
+ flush(False)
135
+ flush(True)
136
+ return out if len(out) > 1 else None
137
+
138
+
139
+ def _python_ranges(text: str) -> list[_Range]:
140
+ tree = ast.parse(text)
141
+ ranges: list[_Range] = []
142
+
143
+ def emit(node: ast.AST, start: int, symbol: str | None) -> None:
144
+ ranges.extend(
145
+ _partition(node, start, node.end_lineno, symbol)
146
+ or [_Range(start, node.end_lineno, symbol)]
147
+ )
148
+
149
+ for node in tree.body:
150
+ if isinstance(node, ast.ClassDef):
151
+ ranges.append(_Range(_begin(node), node.body[0].lineno - 1, node.name))
152
+ for member in node.body:
153
+ name = getattr(member, "name", "body")
154
+ emit(member, _begin(member), f"{node.name}.{name}")
155
+ else:
156
+ emit(node, _begin(node), getattr(node, "name", None))
157
+ return _merge_short_neighbours(ranges)
158
+
159
+
160
+ def _merge_short_neighbours(ranges: list[_Range]) -> list[_Range]:
161
+ """Fold runs of imports/one-liners into one target (each costs a judgment)."""
162
+
163
+ def mergeable(r: _Range) -> bool:
164
+ return r.end - r.start <= 1 and "." not in (r.symbol or "")
165
+
166
+ merged: list[_Range] = []
167
+ for r in ranges:
168
+ last = merged[-1] if merged else None
169
+ if (
170
+ last
171
+ and mergeable(last)
172
+ and mergeable(r)
173
+ and r.start <= last.end + 1
174
+ and r.end - last.start < 12
175
+ and len(f"{last.symbol} {r.symbol}") < 60
176
+ ):
177
+ names = dict.fromkeys(s for s in (last.symbol, r.symbol) if s)
178
+ last.end, last.symbol = r.end, ", ".join(names) or None
179
+ else:
180
+ merged.append(_Range(r.start, r.end, r.symbol))
181
+ return merged
182
+
183
+
184
+ def _chunks_from_ranges(
185
+ lines: list[str], path: str, ranges: list[_Range]
186
+ ) -> list[Chunk]:
187
+ out: list[Chunk] = []
188
+ next_line = 1
189
+ for r in ranges:
190
+ start, end = min(r.start, next_line), min(r.end, len(lines))
191
+ if end < start:
192
+ continue
193
+ part = lines[start - 1 : end]
194
+ whole = (
195
+ end - start < WHOLE_DECLARATION_LINES
196
+ and len("\n".join(part)) <= MAX_CHUNK_CHARS
197
+ )
198
+ size, overlap = (len(part), 0) if whole else (WINDOW, OVERLAP)
199
+ out.extend(windows(part, path, start, size, overlap, r.symbol))
200
+ next_line = end + 1
201
+ if next_line <= len(lines):
202
+ out.extend(windows(lines[next_line - 1 :], path, next_line))
203
+ return out
204
+
205
+
206
+ def source_chunks(text: str, path: str) -> tuple[list[Chunk], str]:
207
+ """Chunk one file's text. Returns (chunks, parser_name)."""
208
+ lines = text.splitlines()
209
+ if path.endswith(".py"):
210
+ try:
211
+ ranges = _python_ranges(text)
212
+ except (SyntaxError, ValueError, RecursionError):
213
+ ranges = []
214
+ if ranges:
215
+ return _chunks_from_ranges(lines, path, ranges), "python"
216
+ return windows(lines, path), "overlapping-lines"
217
+
218
+
219
+ def list_files(directory: str, glob: str | None = None) -> list[str]:
220
+ """Files ripgrep would search: honours .gitignore, skips hidden files."""
221
+ rg = find_ripgrep()
222
+ if rg is None:
223
+ raise RuntimeError("ripgrep (rg) is required for smart_grep.")
224
+ args = [rg, "--files", "-0", *(["-g", glob] if glob else []), "--", directory]
225
+ proc = subprocess.run(args, capture_output=True, timeout=15, check=False)
226
+ if proc.returncode not in (0, 1): # 1 == no files
227
+ raise RuntimeError(
228
+ f"ripgrep discovery failed: {proc.stderr.decode(errors='replace')[:300]}"
229
+ )
230
+ files = sorted({f for f in proc.stdout.decode(errors="replace").split("\0") if f})
231
+ if len(files) > MAX_FILES:
232
+ raise RuntimeError(
233
+ f"Search exceeds {MAX_FILES} files. Narrow the directory or glob."
234
+ )
235
+ return files
236
+
237
+
238
+ def discover(directory: str, glob: str | None = None) -> Discovery:
239
+ """Read and chunk every eligible file under ``directory``."""
240
+ found = Discovery()
241
+ files = list_files(directory, glob)
242
+ found.files = len(files)
243
+ total_bytes = 0
244
+ for path in files:
245
+ if os.path.getsize(path) > MAX_FILE_BYTES:
246
+ found.skipped.append((path, "larger than 1 MiB"))
247
+ continue
248
+ with open(path, "rb") as fh:
249
+ raw = fh.read()
250
+ total_bytes += len(raw)
251
+ if total_bytes > MAX_TOTAL_BYTES:
252
+ raise RuntimeError(
253
+ "Search exceeds 32 MiB of source. Narrow the directory or glob."
254
+ )
255
+ if b"\0" in raw:
256
+ found.skipped.append((path, "binary"))
257
+ continue
258
+ try:
259
+ text = raw.decode("utf-8")
260
+ chunks, parser = source_chunks(text, path)
261
+ except UnicodeDecodeError:
262
+ found.skipped.append((path, "not UTF-8"))
263
+ continue
264
+ except LineTooLong as exc:
265
+ found.skipped.append((path, str(exc)))
266
+ continue
267
+ found.parsers[parser] += 1
268
+ found.chunks.extend(chunks)
269
+ return found
@@ -0,0 +1,55 @@
1
+ """Settings for smart_grep. Set with `/set <key> <value>` or the environment.
2
+
3
+ /set smart_grep on enable (off by default)
4
+ /set jev_api_key <key> credentials (or TYPESAFE_API_KEY)
5
+ /set smart_grep_model ... pin a Jev version, e.g. jev-1.13.0
6
+ /set smart_grep_threshold relevance cut-off, 0-1 (default 0.5)
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import os
12
+
13
+ from code_puppy.config import get_api_key, get_truthy_bool_value, get_value
14
+
15
+ ENABLED_KEY = "smart_grep"
16
+ # TypeSafe's official name first, then the Jev-branded alias. Config lookup
17
+ # is case-insensitive, so `/set jev_api_key ...` matches JEV_API_KEY.
18
+ API_KEY_NAMES = ("TYPESAFE_API_KEY", "JEV_API_KEY")
19
+ API_KEY_NAME = API_KEY_NAMES[0]
20
+ DEFAULT_MODEL = "jev-latest"
21
+ DEFAULT_THRESHOLD = 0.5
22
+
23
+
24
+ def get_typesafe_api_key() -> str:
25
+ """First key found: environment beats config, official name beats alias."""
26
+ for name in API_KEY_NAMES:
27
+ if key := os.environ.get(name):
28
+ return key
29
+ for name in API_KEY_NAMES:
30
+ if key := get_api_key(name):
31
+ return key
32
+ return ""
33
+
34
+
35
+ def is_enabled() -> bool:
36
+ """Opt-in: smart_grep sends selected source to an external service."""
37
+ return get_truthy_bool_value(ENABLED_KEY, False)
38
+
39
+
40
+ def is_available() -> bool:
41
+ """The single gate for tool exposure, prompting and execution."""
42
+ return is_enabled() and bool(get_typesafe_api_key())
43
+
44
+
45
+ def get_jev_model_name() -> str:
46
+ """Pin a version (e.g. ``jev-1.13.0``) once a threshold is tuned against it."""
47
+ return get_value("smart_grep_model") or DEFAULT_MODEL
48
+
49
+
50
+ def get_threshold() -> float:
51
+ try:
52
+ value = float(get_value("smart_grep_threshold") or DEFAULT_THRESHOLD)
53
+ except ValueError:
54
+ return DEFAULT_THRESHOLD
55
+ return value if 0 <= value <= 1 else DEFAULT_THRESHOLD
@@ -0,0 +1,102 @@
1
+ """Relevance judgments from Jev, TypeSafe's decision model, via Pydantic AI.
2
+
3
+ Relevance is scored as the product of two independent judgments -- the snippet
4
+ acts on the requested *entity*, and it performs the requested *operation* -- so
5
+ mentioning a concept is not enough; the code must do the thing. A bounded
6
+ ``float`` field on a decision model is answered with the raw probability of
7
+ yes, so there is no confidence-margin math to undo.
8
+
9
+ Every snippet is judged in its own run (its own Jev state), so neighbouring
10
+ snippets never lend each other evidence.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import asyncio
16
+ from collections.abc import Sequence
17
+
18
+ from pydantic import BaseModel, Field
19
+ from pydantic_ai import Agent
20
+ from pydantic_ai.models import Model
21
+
22
+ from .chunks import Chunk
23
+
24
+ DEFAULT_CONCURRENCY = 8
25
+ REQUEST_TIMEOUT_SECONDS = 30
26
+
27
+
28
+ class Relevance(BaseModel):
29
+ """Decide whether this source code is what a developer searching the codebase wants to find."""
30
+
31
+ entity: float = Field(
32
+ ge=0,
33
+ le=1,
34
+ description=(
35
+ "Does this code act on the thing the search is about "
36
+ "(the data, object, resource or concept it names)?"
37
+ ),
38
+ )
39
+ operation: float = Field(
40
+ ge=0,
41
+ le=1,
42
+ description=(
43
+ "Does this code itself perform the action or behaviour the search "
44
+ "describes, rather than only mentioning it, importing it, or calling "
45
+ "something with a similar name?"
46
+ ),
47
+ )
48
+
49
+ @property
50
+ def score(self) -> float:
51
+ return self.entity * self.operation
52
+
53
+
54
+ def build_jev_model(model_name: str, api_key: str) -> Model:
55
+ """A TypeSafe Jev model. Imported lazily: the SDK is an optional extra."""
56
+ from pydantic_ai.models.typesafe import TypeSafeModel
57
+ from pydantic_ai.providers.typesafe import TypeSafeProvider
58
+
59
+ return TypeSafeModel(model_name, provider=TypeSafeProvider(api_key=api_key))
60
+
61
+
62
+ def _state(chunk: Chunk) -> str:
63
+ """What Jev judges: where the snippet lives, then the snippet itself."""
64
+ where = f"{chunk.path}:{chunk.line}-{chunk.end_line}"
65
+ header = f"{where} ({chunk.symbol})" if chunk.symbol else where
66
+ return f"{header}\n\n{chunk.text}"
67
+
68
+
69
+ def build_agent(model: Model, query: str) -> Agent[None, Relevance]:
70
+ return Agent(
71
+ model,
72
+ output_type=Relevance,
73
+ instructions=(
74
+ "The text is a snippet of source code from a repository. "
75
+ f"A developer is searching the codebase for: {query}"
76
+ ),
77
+ model_settings={"timeout": REQUEST_TIMEOUT_SECONDS},
78
+ )
79
+
80
+
81
+ async def judge(
82
+ model: Model,
83
+ query: str,
84
+ chunks: Sequence[Chunk],
85
+ concurrency: int = DEFAULT_CONCURRENCY,
86
+ ) -> list[float]:
87
+ """Score each chunk in [0, 1], order preserved.
88
+
89
+ Any failed judgment fails the whole search (siblings are cancelled):
90
+ a partial scan reported as a complete one is worse than an error.
91
+ """
92
+ agent = build_agent(model, query)
93
+ gate = asyncio.Semaphore(concurrency)
94
+
95
+ async def one(chunk: Chunk) -> float:
96
+ async with gate:
97
+ result = await agent.run(_state(chunk))
98
+ return result.output.score
99
+
100
+ async with asyncio.TaskGroup() as group:
101
+ tasks = [group.create_task(one(chunk)) for chunk in chunks]
102
+ return [task.result() for task in tasks]
@@ -0,0 +1,3 @@
1
+ {
2
+ "smart_grep.summary": "smart_grep '{query}' in {directory}: {matches} matches ({evaluated}/{snippets} snippets judged)"
3
+ }
@@ -0,0 +1,54 @@
1
+ """smart_grep: semantic code search judged by TypeSafe's Jev decision model.
2
+
3
+ Registers a ``smart_grep`` tool alongside the regular ``grep``. It is opt-in:
4
+ agents only see the tool, and the smart_grep-first discovery policy is only
5
+ added to the prompt, once ``/set smart_grep on`` is set AND a Jev/TypeSafe
6
+ key is configured. ``/set`` reloads the agent, so toggling applies at once.
7
+ """
8
+
9
+ from code_puppy.callbacks import register_callback
10
+
11
+ from .config import is_available
12
+ from .tool import TOOL_NAME, register_smart_grep
13
+
14
+
15
+ def _register_tools():
16
+ return [{"name": TOOL_NAME, "register_func": register_smart_grep}]
17
+
18
+
19
+ def _advertise_when_configured(agent_name=None):
20
+ return [TOOL_NAME] if is_available() else []
21
+
22
+
23
+ def _discovery_instructions() -> str | None:
24
+ """Same live gate as tool advertisement; the key itself is never included."""
25
+ if not is_available():
26
+ return None
27
+ return """## Code discovery: smart_grep first
28
+ When smart_grep is available, use it as your first tool for gathering code
29
+ context about an unfamiliar implementation. Describe the behavior you need to
30
+ find in plain English, scoped to the relevant repository or directory. Do this
31
+ instead of guessing symbol names, running exploratory grep chains, or listing
32
+ and reading many files just to locate the implementation.
33
+
34
+ Use the returned source excerpts and line ranges to decide which files need a
35
+ targeted read. Do not automatically read every match or repeat searches when
36
+ the excerpts already answer the question. Read the relevant existing code before
37
+ editing; semantic search is discovery, not a substitute for understanding it.
38
+
39
+ Use regular grep for exact symbols, regexes, and exhaustive references. Read a
40
+ known file directly when its location is already established. Use list_files
41
+ when you actually need directory contents, not as a ritual before every search.
42
+
43
+ A lexical shortlist is not exhaustive and no matches do not prove absence.
44
+ If results are weak, rephrase or narrow the query, or use exact grep as needed.
45
+ If smart_grep is unavailable or errors, fall back to grep and targeted reads;
46
+ do not block the task or repeatedly retry a missing key or failing provider.
47
+ Respect requests to keep code local: smart_grep sends selected source, paths,
48
+ and the query to TypeSafe, so use local grep/reads for local-only work.
49
+ """
50
+
51
+
52
+ register_callback("load_prompt", _discovery_instructions)
53
+ register_callback("register_tools", _register_tools)
54
+ register_callback("register_agent_tools", _advertise_when_configured)
@@ -0,0 +1,90 @@
1
+ """Local BM25 shortlist: identifier-aware terms, path/symbol boost, synonyms.
2
+
3
+ Cheap lexical ranking decides which snippets are worth a Jev judgment. It is
4
+ a shortlist, not a verdict: code with unrelated wording can be missed, which
5
+ is why coverage is reported back to the caller.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import math
11
+ import re
12
+ from collections import Counter
13
+ from collections.abc import Sequence
14
+
15
+ from .chunks import Chunk
16
+
17
+ _STOP = frozenset(
18
+ "a an the is are was were to of in on for from with where how does do this "
19
+ "that it and or code function files file find which".split()
20
+ )
21
+
22
+ _SYNONYM_GROUPS = (
23
+ "auth authentication authenticate login signin session",
24
+ "retry retries backoff attempt",
25
+ "cache cached caching memo memoize",
26
+ "delete remove cleanup unlink",
27
+ "permission permissions authorization authorize access allowed",
28
+ "expire expired expires expiration expiry timeout ttl",
29
+ "save persist persistence storage store write",
30
+ "error errors failure failed exception throw catch",
31
+ "payment payments billing subscription invoice charge",
32
+ "cancel abort cancellation",
33
+ "parallel concurrent concurrency simultaneous",
34
+ "duplicate duplicates deduplicate dedup unique",
35
+ )
36
+ _VOCABULARY = {
37
+ term: group.split() for group in _SYNONYM_GROUPS for term in group.split()
38
+ }
39
+
40
+ _CAMEL = re.compile(r"([a-z\d])([A-Z])")
41
+ _WORD = re.compile(r"[^\W_]+")
42
+ _SYNONYM_WEIGHT = 0.3
43
+ _META_BOOST = 3
44
+ _K1, _B = 1.2, 0.75
45
+
46
+
47
+ def terms(text: str) -> list[str]:
48
+ """Lower-cased identifier-aware tokens: ``refreshToken`` -> refresh, token."""
49
+ words = _WORD.findall(_CAMEL.sub(r"\1 \2", text).lower())
50
+ return [w for w in words if len(w) > 1 and w not in _STOP]
51
+
52
+
53
+ def _query_weights(query: str) -> dict[str, float]:
54
+ weights = dict.fromkeys(terms(query), 1.0)
55
+ for term in list(weights):
56
+ for synonym in _VOCABULARY.get(term, ()):
57
+ weights.setdefault(synonym, _SYNONYM_WEIGHT)
58
+ return weights
59
+
60
+
61
+ def rank(query: str, chunks: Sequence[Chunk]) -> list[Chunk]:
62
+ """Chunks ordered by BM25 relevance to ``query`` (stable on ties)."""
63
+ weights = _query_weights(query)
64
+ docs: list[tuple[Counter, int]] = []
65
+ for chunk in chunks:
66
+ body, meta = terms(chunk.text), terms(f"{chunk.path} {chunk.symbol or ''}")
67
+ freq = Counter(body)
68
+ for word in meta:
69
+ freq[word] += _META_BOOST
70
+ docs.append((freq, len(body) + len(meta)))
71
+
72
+ n = len(docs)
73
+ average = (sum(length for _, length in docs) / n if n else 0) or 1
74
+ df = {t: sum(1 for freq, _ in docs if t in freq) for t in weights}
75
+
76
+ def score(doc: tuple[Counter, int]) -> float:
77
+ freq, length = doc
78
+ total = 0.0
79
+ for word, weight in weights.items():
80
+ tf = freq.get(word, 0)
81
+ if not tf:
82
+ continue
83
+ idf = math.log(1 + (n - df[word] + 0.5) / (df[word] + 0.5))
84
+ norm = _K1 * (1 - _B + _B * length / average)
85
+ total += weight * idf * tf * (_K1 + 1) / (tf + norm)
86
+ return total
87
+
88
+ scored = [(score(doc), chunk) for doc, chunk in zip(docs, chunks)]
89
+ scored.sort(key=lambda sc: (-sc[0], sc[1].path, sc[1].line))
90
+ return [chunk for _, chunk in scored]