code-puppy-core-plugins 0.0.66__tar.gz → 0.0.67__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.67}/PKG-INFO +2 -2
  2. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/__init__.py +1 -0
  3. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/chunks.py +271 -0
  4. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/config.py +38 -0
  5. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/judge.py +102 -0
  6. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/locales/en-US.json +3 -0
  7. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/register_callbacks.py +25 -0
  8. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/retrieve.py +90 -0
  9. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/search.py +186 -0
  10. code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/tool.py +109 -0
  11. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/pyproject.toml +3 -2
  12. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/.gitignore +0 -0
  13. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/LICENSE +0 -0
  14. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/README.md +0 -0
  15. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/__init__.py +0 -0
  16. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/README.md +0 -0
  17. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/__init__.py +0 -0
  18. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/agent.py +0 -0
  19. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/bridge.py +0 -0
  20. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  21. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/commands.py +0 -0
  22. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/content.py +0 -0
  23. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  24. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  25. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/permissions.py +0 -0
  26. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/persistence.py +0 -0
  27. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  28. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/replay.py +0 -0
  29. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session.py +0 -0
  30. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session_config.py +0 -0
  31. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/state.py +0 -0
  32. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  33. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  34. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  35. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  36. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  37. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  38. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  39. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  40. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  41. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  42. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  43. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  44. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  45. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
  46. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
  47. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
  48. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  49. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  50. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  51. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  52. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  53. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  54. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  55. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  56. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  57. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  58. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  59. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/README.md +0 -0
  60. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
  61. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
  62. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/__init__.py +0 -0
  63. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  64. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  65. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/side_query.py +0 -0
  66. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  67. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  68. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  69. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  70. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  71. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  72. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  73. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  74. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  75. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  76. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  77. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  78. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  79. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  80. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
  81. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  82. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  83. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  84. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  85. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  86. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
  87. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +0 -0
  88. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
  105. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/config.py +0 -0
  106. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
  110. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  112. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/README.md +0 -0
  113. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  114. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  115. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  116. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  117. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  119. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  120. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  121. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  123. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  124. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  126. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  127. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/state.py +0 -0
  128. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  129. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  130. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  132. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  133. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  134. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  138. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  139. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  155. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  156. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  158. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  164. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  190. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/fork/__init__.py +0 -0
  195. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  196. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  197. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  198. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  201. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  202. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  205. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/README.md +0 -0
  206. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  207. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/client.py +0 -0
  208. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  209. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  210. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/restore.py +0 -0
  211. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  212. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/sources.py +0 -0
  213. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  214. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  216. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  217. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  221. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  222. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  225. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  226. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  227. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  229. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  235. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  236. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  239. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  245. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  247. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  248. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  249. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  250. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  253. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  254. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  255. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  256. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
  258. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
  259. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  263. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  271. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/profiles/README.md +0 -0
  273. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/__init__.py +0 -0
  274. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/config.py +0 -0
  275. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/profiles/menu.py +0 -0
  277. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
  278. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  279. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  280. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/prune/__init__.py +0 -0
  282. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  283. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  284. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  285. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  286. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  287. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  288. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  289. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  290. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  291. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  292. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  293. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  295. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  296. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  297. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  298. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  299. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  300. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  301. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  303. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  304. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  306. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  310. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  312. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  314. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  315. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  317. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/__init__.py +0 -0
  318. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  319. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/store.py +0 -0
  320. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  321. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  323. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/config.py +0 -0
  324. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/payload.py +0 -0
  325. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  326. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  327. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/runner.py +0 -0
  328. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  329. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  330. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
  333. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  334. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
  339. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/code_puppy_core_plugins/termflow_tui.py +0 -0
  342. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/README.md +0 -0
  343. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/__init__.py +0 -0
  344. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  345. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  346. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  347. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/picker.py +0 -0
  348. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  350. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  351. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/themes.py +0 -0
  352. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  353. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  358. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  359. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  360. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  362. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  363. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67}/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.67}/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.67}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  367. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  368. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  369. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  370. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  371. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  372. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/state.py +0 -0
  373. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  374. {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67
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
@@ -0,0 +1 @@
1
+ """Semantic code search powered by TypeSafe's Jev decision model."""
@@ -0,0 +1,271 @@
1
+ """Discovery and chunking: turn a directory into judgeable source snippets.
2
+
3
+ A port of jevgrep's client-side chunker. 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
+ MAX_FILES = 20_000
21
+ MAX_CHUNKS = 20_000
22
+ MAX_FILE_BYTES = 1024 * 1024
23
+ MAX_TOTAL_BYTES = 32 * 1024 * 1024
24
+ MAX_CHUNK_CHARS = 12_000
25
+ WHOLE_DECLARATION_LINES = 160
26
+ SPLIT_LINES = 24
27
+ WINDOW, OVERLAP = 60, 10
28
+
29
+
30
+ class LineTooLong(ValueError):
31
+ """A single line is too long to judge (minified or generated source)."""
32
+
33
+
34
+ @dataclass(frozen=True)
35
+ class Chunk:
36
+ path: str
37
+ line: int
38
+ end_line: int
39
+ text: str
40
+ symbol: str | None = None
41
+
42
+
43
+ @dataclass
44
+ class Discovery:
45
+ chunks: list[Chunk] = field(default_factory=list)
46
+ files: int = 0
47
+ skipped: list[tuple[str, str]] = field(default_factory=list)
48
+ parsers: Counter = field(default_factory=Counter)
49
+
50
+
51
+ @dataclass
52
+ class _Range:
53
+ start: int
54
+ end: int
55
+ symbol: str | None
56
+
57
+
58
+ def windows(
59
+ lines: list[str],
60
+ path: str,
61
+ first_line: int = 1,
62
+ size: int = WINDOW,
63
+ overlap: int = OVERLAP,
64
+ symbol: str | None = None,
65
+ ) -> list[Chunk]:
66
+ """Fixed-size line windows; giant windows are halved, never clipped."""
67
+ out: list[Chunk] = []
68
+ step = size - overlap
69
+ for i in range(0, max(len(lines), 1), step):
70
+ part = lines[i : i + size]
71
+ text = "\n".join(part)
72
+ if len(text) > MAX_CHUNK_CHARS:
73
+ if size == 1:
74
+ raise LineTooLong(
75
+ f"line exceeds {MAX_CHUNK_CHARS} characters: {path}:{first_line + i}"
76
+ )
77
+ out.extend(
78
+ windows(part, path, first_line + i, max(1, size // 2), 0, symbol)
79
+ )
80
+ elif text.strip():
81
+ out.append(
82
+ Chunk(
83
+ path, first_line + i, first_line + i + len(part) - 1, text, symbol
84
+ )
85
+ )
86
+ if i + size >= len(lines):
87
+ break
88
+ return out
89
+
90
+
91
+ def _begin(node: ast.AST) -> int:
92
+ decorators = getattr(node, "decorator_list", [])
93
+ return min([node.lineno, *(d.lineno for d in decorators)])
94
+
95
+
96
+ def _partition(node: ast.AST, start: int, end: int, symbol, depth: int = 0):
97
+ """Split a long body into its blocks, covering every line of [start, end]."""
98
+ body = getattr(node, "body", None)
99
+ if not isinstance(body, list) or end - start < SPLIT_LINES:
100
+ return None
101
+ stmts = [s for s in body if hasattr(s, "end_lineno")]
102
+ if not stmts:
103
+ return None
104
+ if len(stmts) == 1:
105
+ return (
106
+ _partition(stmts[0], start, end, symbol, depth + 1) if depth < 3 else None
107
+ )
108
+
109
+ out: list[_Range] = []
110
+ cursor = start
111
+ group: list[ast.stmt] = []
112
+
113
+ def flush(last: bool) -> None:
114
+ nonlocal cursor
115
+ if not group:
116
+ return
117
+ stop = end if last else min(end, group[-1].end_lineno)
118
+ if stop >= cursor:
119
+ inner = None
120
+ if len(group) == 1 and depth < 3:
121
+ inner = _partition(group[0], cursor, stop, symbol, depth + 1)
122
+ out.extend(inner or [_Range(cursor, stop, symbol)])
123
+ cursor = stop + 1
124
+ group.clear()
125
+
126
+ for stmt in stmts:
127
+ span = stmt.end_lineno - _begin(stmt) + 1
128
+ if group and (span >= 6 or stmt.end_lineno - cursor + 1 > 20):
129
+ flush(False)
130
+ group.append(stmt)
131
+ if span >= 6 and stmt is not stmts[-1]:
132
+ flush(False)
133
+ flush(True)
134
+ return out if len(out) > 1 else None
135
+
136
+
137
+ def _python_ranges(text: str) -> list[_Range]:
138
+ tree = ast.parse(text)
139
+ ranges: list[_Range] = []
140
+
141
+ def emit(node: ast.AST, start: int, symbol: str | None) -> None:
142
+ ranges.extend(
143
+ _partition(node, start, node.end_lineno, symbol)
144
+ or [_Range(start, node.end_lineno, symbol)]
145
+ )
146
+
147
+ for node in tree.body:
148
+ if isinstance(node, ast.ClassDef):
149
+ ranges.append(_Range(_begin(node), node.body[0].lineno - 1, node.name))
150
+ for member in node.body:
151
+ name = getattr(member, "name", "body")
152
+ emit(member, _begin(member), f"{node.name}.{name}")
153
+ else:
154
+ emit(node, _begin(node), getattr(node, "name", None))
155
+ return _merge_short_neighbours(ranges)
156
+
157
+
158
+ def _merge_short_neighbours(ranges: list[_Range]) -> list[_Range]:
159
+ """Fold runs of imports/one-liners into one target (each costs a judgment)."""
160
+
161
+ def mergeable(r: _Range) -> bool:
162
+ return r.end - r.start <= 1 and "." not in (r.symbol or "")
163
+
164
+ merged: list[_Range] = []
165
+ for r in ranges:
166
+ last = merged[-1] if merged else None
167
+ if (
168
+ last
169
+ and mergeable(last)
170
+ and mergeable(r)
171
+ and r.start <= last.end + 1
172
+ and r.end - last.start < 12
173
+ and len(f"{last.symbol} {r.symbol}") < 60
174
+ ):
175
+ names = dict.fromkeys(s for s in (last.symbol, r.symbol) if s)
176
+ last.end, last.symbol = r.end, ", ".join(names) or None
177
+ else:
178
+ merged.append(_Range(r.start, r.end, r.symbol))
179
+ return merged
180
+
181
+
182
+ def _chunks_from_ranges(
183
+ lines: list[str], path: str, ranges: list[_Range]
184
+ ) -> list[Chunk]:
185
+ out: list[Chunk] = []
186
+ next_line = 1
187
+ for r in ranges:
188
+ start, end = min(r.start, next_line), min(r.end, len(lines))
189
+ if end < start:
190
+ continue
191
+ part = lines[start - 1 : end]
192
+ whole = (
193
+ end - start < WHOLE_DECLARATION_LINES
194
+ and len("\n".join(part)) <= MAX_CHUNK_CHARS
195
+ )
196
+ size, overlap = (len(part), 0) if whole else (WINDOW, OVERLAP)
197
+ out.extend(windows(part, path, start, size, overlap, r.symbol))
198
+ next_line = end + 1
199
+ if next_line <= len(lines):
200
+ out.extend(windows(lines[next_line - 1 :], path, next_line))
201
+ return out
202
+
203
+
204
+ def source_chunks(text: str, path: str) -> tuple[list[Chunk], str]:
205
+ """Chunk one file's text. Returns (chunks, parser_name)."""
206
+ lines = text.splitlines()
207
+ if path.endswith(".py"):
208
+ try:
209
+ ranges = _python_ranges(text)
210
+ except (SyntaxError, ValueError, RecursionError):
211
+ ranges = []
212
+ if ranges:
213
+ return _chunks_from_ranges(lines, path, ranges), "python"
214
+ return windows(lines, path), "overlapping-lines"
215
+
216
+
217
+ def list_files(directory: str, glob: str | None = None) -> list[str]:
218
+ """Files ripgrep would search: honours .gitignore, skips hidden files."""
219
+ rg = find_ripgrep()
220
+ if rg is None:
221
+ raise RuntimeError("ripgrep (rg) is required for semantic_grep.")
222
+ args = [rg, "--files", "-0", *(["-g", glob] if glob else []), "--", directory]
223
+ proc = subprocess.run(args, capture_output=True, timeout=15, check=False)
224
+ if proc.returncode not in (0, 1): # 1 == no files
225
+ raise RuntimeError(
226
+ f"ripgrep discovery failed: {proc.stderr.decode(errors='replace')[:300]}"
227
+ )
228
+ files = sorted({f for f in proc.stdout.decode(errors="replace").split("\0") if f})
229
+ if len(files) > MAX_FILES:
230
+ raise RuntimeError(
231
+ f"Search exceeds {MAX_FILES} files. Narrow the directory or glob."
232
+ )
233
+ return files
234
+
235
+
236
+ def discover(directory: str, glob: str | None = None) -> Discovery:
237
+ """Read and chunk every eligible file under ``directory``."""
238
+ found = Discovery()
239
+ files = list_files(directory, glob)
240
+ found.files = len(files)
241
+ total_bytes = 0
242
+ for path in files:
243
+ if os.path.getsize(path) > MAX_FILE_BYTES:
244
+ found.skipped.append((path, "larger than 1 MiB"))
245
+ continue
246
+ with open(path, "rb") as fh:
247
+ raw = fh.read()
248
+ total_bytes += len(raw)
249
+ if total_bytes > MAX_TOTAL_BYTES:
250
+ raise RuntimeError(
251
+ "Search exceeds 32 MiB of source. Narrow the directory or glob."
252
+ )
253
+ if b"\0" in raw:
254
+ found.skipped.append((path, "binary"))
255
+ continue
256
+ try:
257
+ text = raw.decode("utf-8")
258
+ chunks, parser = source_chunks(text, path)
259
+ except UnicodeDecodeError:
260
+ found.skipped.append((path, "not UTF-8"))
261
+ continue
262
+ except LineTooLong as exc:
263
+ found.skipped.append((path, str(exc)))
264
+ continue
265
+ found.parsers[parser] += 1
266
+ found.chunks.extend(chunks)
267
+ if len(found.chunks) > MAX_CHUNKS:
268
+ raise RuntimeError(
269
+ f"Search exceeds {MAX_CHUNKS} snippets. Narrow the directory or glob."
270
+ )
271
+ return found
@@ -0,0 +1,38 @@
1
+ """Settings for jev_grep. Set with `/set <key> <value>` or the environment."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from code_puppy.config import get_api_key, get_value
8
+
9
+ # TypeSafe's official name first, then the Jev-branded alias. Config lookup
10
+ # is case-insensitive, so `/set jev_api_key ...` matches JEV_API_KEY.
11
+ API_KEY_NAMES = ("TYPESAFE_API_KEY", "JEV_API_KEY")
12
+ API_KEY_NAME = API_KEY_NAMES[0]
13
+ DEFAULT_MODEL = "jev-latest"
14
+ DEFAULT_THRESHOLD = 0.5
15
+
16
+
17
+ def get_typesafe_api_key() -> str:
18
+ """First key found: environment beats config, official name beats alias."""
19
+ for name in API_KEY_NAMES:
20
+ if key := os.environ.get(name):
21
+ return key
22
+ for name in API_KEY_NAMES:
23
+ if key := get_api_key(name):
24
+ return key
25
+ return ""
26
+
27
+
28
+ def get_jev_model_name() -> str:
29
+ """Pin a version (e.g. ``jev-1.13.0``) once a threshold is tuned against it."""
30
+ return get_value("jev_grep_model") or DEFAULT_MODEL
31
+
32
+
33
+ def get_threshold() -> float:
34
+ try:
35
+ value = float(get_value("jev_grep_threshold") or DEFAULT_THRESHOLD)
36
+ except ValueError:
37
+ return DEFAULT_THRESHOLD
38
+ 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
+ This replaces jevgrep's hosted ``/api/v1/grep`` backend. jevgrep documents its
4
+ score as the product of two independent judgments -- the snippet acts on the
5
+ requested *entity*, and it performs the requested *operation* -- so that is
6
+ exactly what we ask. A bounded ``float`` field on a decision model is answered
7
+ with the raw probability of 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
+ "jev_grep.summary": "semantic_grep '{query}' in {directory}: {matches} matches ({evaluated}/{snippets} snippets judged)"
3
+ }
@@ -0,0 +1,25 @@
1
+ """jev_grep: semantic code search (a jevgrep reimplementation) on TypeSafe's Jev.
2
+
3
+ Registers a ``semantic_grep`` tool alongside the regular ``grep``. It is only
4
+ advertised to agents once ``TYPESAFE_API_KEY`` is configured, so agents never
5
+ see a tool that can only fail.
6
+ """
7
+
8
+ from code_puppy.callbacks import register_callback
9
+
10
+ from .config import get_typesafe_api_key
11
+ from .tool import register_semantic_grep
12
+
13
+ TOOL_NAME = "semantic_grep"
14
+
15
+
16
+ def _register_tools():
17
+ return [{"name": TOOL_NAME, "register_func": register_semantic_grep}]
18
+
19
+
20
+ def _advertise_when_configured(agent_name=None):
21
+ return [TOOL_NAME] if get_typesafe_api_key() else []
22
+
23
+
24
+ register_callback("register_tools", _register_tools)
25
+ register_callback("register_agent_tools", _advertise_when_configured)
@@ -0,0 +1,90 @@
1
+ """Local BM25 shortlist (port of jevgrep's retrieve.mjs).
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]