code-puppy-core-plugins 0.0.52__tar.gz → 0.0.53__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 (364) hide show
  1. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/PKG-INFO +1 -1
  2. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/background_agents/register_callbacks.py +29 -0
  3. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/README.md +7 -0
  4. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +50 -22
  5. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/state.py +61 -3
  6. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/pyproject.toml +1 -1
  7. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/.gitignore +0 -0
  8. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/LICENSE +0 -0
  9. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/README.md +0 -0
  10. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/__init__.py +0 -0
  11. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/README.md +0 -0
  12. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/__init__.py +0 -0
  13. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/agent.py +0 -0
  14. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/bridge.py +0 -0
  15. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/capabilities.py +0 -0
  16. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/commands.py +0 -0
  17. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/content.py +0 -0
  18. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
  19. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
  20. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/permissions.py +0 -0
  21. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/persistence.py +0 -0
  22. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
  23. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/replay.py +0 -0
  24. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/session.py +0 -0
  25. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/session_config.py +0 -0
  26. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/acp/state.py +0 -0
  27. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
  28. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
  29. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
  30. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
  31. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/config.py +0 -0
  32. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
  33. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
  34. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
  35. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
  36. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
  37. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
  38. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
  39. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
  40. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
  41. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
  42. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
  43. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
  44. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
  45. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
  46. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
  47. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
  48. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
  49. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
  50. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
  51. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
  52. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
  53. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
  54. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
  55. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
  56. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
  57. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
  58. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
  59. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/background_agents/README.md +0 -0
  60. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
  61. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/btw/__init__.py +0 -0
  62. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/btw/inline_view.py +0 -0
  63. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
  64. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/btw/side_query.py +0 -0
  65. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
  66. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
  67. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
  68. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
  69. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
  70. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
  71. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
  72. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
  73. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
  74. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
  75. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
  76. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
  77. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
  78. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
  79. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
  80. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
  81. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
  82. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
  83. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
  84. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
  85. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
  86. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +0 -0
  87. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
  88. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
  89. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +0 -0
  90. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
  91. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  92. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/token_store.py +0 -0
  93. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
  94. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
  95. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
  96. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
  97. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
  98. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
  99. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
  100. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
  101. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
  102. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
  103. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
  104. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/config.py +0 -0
  105. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
  106. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
  107. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
  108. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
  109. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
  110. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
  111. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/README.md +0 -0
  112. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
  113. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
  114. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/activation.py +0 -0
  115. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/backend.py +0 -0
  116. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
  117. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/capture.py +0 -0
  118. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/commands.py +0 -0
  119. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
  120. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
  121. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
  122. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/policy.py +0 -0
  123. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
  124. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/safety.py +0 -0
  125. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/settle.py +0 -0
  126. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/state.py +0 -0
  127. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/computer_use/tools.py +0 -0
  128. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
  129. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
  130. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
  131. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
  132. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
  133. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
  134. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
  135. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
  136. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
  137. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  138. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
  139. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
  140. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
  141. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
  142. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
  143. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
  144. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
  145. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
  146. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
  147. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
  148. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
  149. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
  150. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
  151. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
  152. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
  153. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
  154. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
  155. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
  156. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
  157. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
  158. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
  159. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
  160. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
  161. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
  162. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
  163. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
  164. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
  165. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
  166. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
  167. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
  168. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
  169. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
  170. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
  171. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
  172. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
  173. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
  174. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
  175. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
  176. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
  177. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
  178. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
  179. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
  180. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
  181. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
  182. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
  183. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
  184. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
  185. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
  186. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
  187. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
  188. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
  189. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
  190. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
  191. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
  192. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
  193. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/fork/__init__.py +0 -0
  194. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
  195. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
  196. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
  197. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
  198. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
  199. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
  200. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
  201. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
  202. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
  203. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
  204. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/README.md +0 -0
  205. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/__init__.py +0 -0
  206. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/client.py +0 -0
  207. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
  208. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/reporter.py +0 -0
  209. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/smoke.py +0 -0
  210. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/herdr/sources.py +0 -0
  211. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
  212. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
  213. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
  214. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_manager/config.py +0 -0
  215. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
  216. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
  217. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
  218. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
  219. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
  220. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
  221. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
  222. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
  223. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
  224. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
  225. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
  226. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
  227. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
  228. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
  229. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
  230. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
  231. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
  232. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
  233. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
  234. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
  235. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
  236. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
  237. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
  238. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
  239. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
  240. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
  241. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
  242. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
  243. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
  244. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
  245. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/ollama/__init__.py +0 -0
  246. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
  247. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
  248. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
  249. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
  250. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
  251. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
  252. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
  253. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
  254. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
  255. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  256. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
  257. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
  258. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
  259. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
  260. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
  261. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
  262. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
  263. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
  264. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
  265. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/README.md +0 -0
  266. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/__init__.py +0 -0
  267. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/config.py +0 -0
  268. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
  269. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/menu.py +0 -0
  270. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
  271. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
  272. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
  273. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
  274. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prune/__init__.py +0 -0
  275. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
  276. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prune/prune_model.py +0 -0
  277. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prune/prune_render.py +0 -0
  278. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
  279. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
  280. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
  281. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
  282. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
  283. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
  284. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
  285. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
  286. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
  287. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
  288. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
  289. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
  290. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
  291. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
  292. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
  293. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
  294. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
  295. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
  296. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
  297. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
  298. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
  299. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
  300. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
  301. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
  302. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  303. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
  304. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
  305. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
  306. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
  307. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/session_namer/namer.py +0 -0
  308. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
  309. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
  310. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/spill/__init__.py +0 -0
  311. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
  312. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/spill/store.py +0 -0
  313. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
  314. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
  315. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/__init__.py +0 -0
  316. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/config.py +0 -0
  317. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/payload.py +0 -0
  318. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
  319. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
  320. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/runner.py +0 -0
  321. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
  322. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
  323. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
  324. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
  325. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
  326. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
  327. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
  328. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
  329. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
  330. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
  331. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/termflow_tui.py +0 -0
  332. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/README.md +0 -0
  333. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/__init__.py +0 -0
  334. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
  335. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/content_styles.py +0 -0
  336. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
  337. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/picker.py +0 -0
  338. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
  339. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
  340. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
  341. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/theme/themes.py +0 -0
  342. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
  343. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
  344. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
  345. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
  346. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
  347. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
  348. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
  349. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
  350. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
  351. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
  352. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
  353. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
  354. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
  355. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
  356. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
  357. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
  358. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/judge.py +0 -0
  359. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
  360. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
  361. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
  362. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/wiggum/state.py +0 -0
  363. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
  364. {code_puppy_core_plugins-0.0.52 → code_puppy_core_plugins-0.0.53}/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.52
3
+ Version: 0.0.53
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
@@ -3,6 +3,7 @@
3
3
  import asyncio
4
4
  import inspect
5
5
  import json
6
+ import time
6
7
  from uuid import uuid4
7
8
 
8
9
  from pydantic_ai import RunContext
@@ -13,6 +14,26 @@ _tasks: dict[str, asyncio.Task] = {}
13
14
  _sessions: set[str] = set()
14
15
 
15
16
 
17
+ async def _publish_boundary(agent_name, prompt, result, started_at):
18
+ """Publish the tool-equivalent completion signal for a detached run.
19
+
20
+ ``_invoke_agent_impl`` is called directly here (not via pydantic-ai's tool
21
+ wrapper), so nobody fires ``post_tool_call`` for the sub-agent itself.
22
+ The subagent_panel relies on that event to retire the live row at the
23
+ run's own boundary -- without it a background row would sit on its last
24
+ streamed status forever (it now outlives the main turn). Mirrors /fork.
25
+ """
26
+ from code_puppy.callbacks import on_post_tool_call
27
+
28
+ await on_post_tool_call(
29
+ "invoke_agent",
30
+ {"agent_name": agent_name, "prompt": prompt},
31
+ result,
32
+ (time.monotonic() - started_at) * 1000,
33
+ {"detached": True},
34
+ )
35
+
36
+
16
37
  async def _run(task_id, owner, context, agent_name, prompt, session_id):
17
38
  from code_puppy.agent_completion_inbox import deliver_completion
18
39
  from code_puppy.tools.subagent_invocation import _invoke_agent_impl
@@ -24,6 +45,8 @@ async def _run(task_id, owner, context, agent_name, prompt, session_id):
24
45
  if "background" in inspect.signature(_invoke_agent_impl).parameters:
25
46
  extra["background"] = True
26
47
 
48
+ started_at = time.monotonic()
49
+ result = None
27
50
  try:
28
51
  result = await _invoke_agent_impl(
29
52
  context=context,
@@ -41,6 +64,12 @@ async def _run(task_id, owner, context, agent_name, prompt, session_id):
41
64
  finally:
42
65
  _tasks.pop(task_id, None)
43
66
 
67
+ if result is not None:
68
+ try:
69
+ await _publish_boundary(agent_name, prompt, result, started_at)
70
+ except Exception:
71
+ pass # a panel hiccup must never eat the completion report
72
+
44
73
  # A fixed prefix keeps output out of the REPL's command routing. JSON
45
74
  # separates provenance from untrusted child output; no attachment expansion.
46
75
  deliver_completion(
@@ -56,6 +56,13 @@ Milo is thinking... ( o )
56
56
  (The redundant core "<check> <name> completed successfully" line is suppressed.)
57
57
  Nested agents get a compact one-liner frozen record instead of the full block:
58
58
  `<elbow> name (check) mm:ss completed model`.
59
+ - **Detached rows outlive the turn.** `FORK` and `BACKGROUND` runs are their own
60
+ asyncio tasks, so when the main agent's turn ends only the *foreground* swarm
61
+ is retired from the panel -- a still-running fork/background row keeps
62
+ ticking at the idle prompt until it finishes at its own boundary (the
63
+ launcher publishes a `post_tool_call` with `{"detached": True}`; `/fork`'s
64
+ older `{"detached_fork": True}` spelling is honoured too). Ctrl+C still
65
+ clears everything, because the cancel sweep takes detached runs down as well.
59
66
 
60
67
  ## How it works (3 monkeypatches, 1 callback -- no core edits)
61
68
 
@@ -21,6 +21,9 @@ Install strategy (startup monkeypatches of seams with no hook + callbacks):
21
21
  but KEPT in the live tree (shown 'completed') so it never vanishes
22
22
  mid-run; the whole subtree flushes to the transcript parent-first only
23
23
  when its ROOT finishes, then is removed from the live tree.
24
+ DETACHED trees (/fork, background=True) outlive the main turn: end-of-
25
+ turn cleanup only retires the foreground swarm, so a detached row keeps
26
+ ticking at the idle prompt until its own ``post_tool_call`` boundary.
24
27
  4. subagent_invocation.emit_success -> suppress the redundant
25
28
  "<check> <name> completed successfully" line (it comes from the separate
26
29
  message_queue system, NOT the bus, so it must be dropped at its source).
@@ -225,25 +228,35 @@ def _handle_frozen(console, session_id):
225
228
 
226
229
 
227
230
  def _maybe_flush_group(console):
228
- """Flush the WHOLE live panel to scrollback as one group (parent-first DFS),
229
- then clear it -- but ONLY when no agent is still active. While any agent is
230
- running, completed agents stay grouped in the live panel (shown 'completed'),
231
- so the panel remains a single cohesive block pinned above the spinner.
231
+ """Flush the settled panel rows to scrollback as one group (parent-first
232
+ DFS) -- but ONLY when the foreground swarm is idle. While any foreground
233
+ agent is running, completed agents stay grouped in the live panel (shown
234
+ 'completed'), so the panel remains a single cohesive block.
235
+
236
+ Detached trees (/fork, background) whose root is still running are NOT
237
+ part of the group: they keep their live rows and flush at their own
238
+ boundary, exactly like the rest of their lifecycle.
232
239
  """
233
- rows = state.snapshot()
234
- if not rows:
235
- return
236
- if any(not e.get("done") for e in rows):
240
+ state.snapshot() # idle-prune before deciding
241
+ if state.foreground_busy():
237
242
  return # swarm still busy -- keep the panel grouped + live
238
243
  if console is None:
239
244
  return
240
- ordered = _ordered_tree(rows)
245
+ settled = state.pop_settled()
246
+ if not settled:
247
+ return
241
248
  console.print() # breathing room between the transcript and the group
242
- for line in _row_lines(ordered, frame=None):
249
+ for line in _row_lines(_ordered_tree(settled), frame=None):
243
250
  console.print(line)
244
- state.clear()
245
- _stop_ticker() # last agent flushed — nothing left to clock
246
- _push_panel(force=True) # collapse the panel rows
251
+ _retire_ticker_if_idle()
252
+ _push_panel(force=True) # collapse the flushed rows
253
+
254
+
255
+ def _retire_ticker_if_idle() -> None:
256
+ """Stop the clock only once nothing is left to clock -- a live detached
257
+ row still needs its mm:ss advancing after the foreground flushes."""
258
+ if not state.has_active():
259
+ _stop_ticker()
247
260
 
248
261
 
249
262
  # Monkeypatch installers
@@ -442,11 +455,16 @@ async def _on_agent_run_end(
442
455
  response_text=None,
443
456
  metadata=None,
444
457
  ):
445
- """When the TOP-LEVEL turn ends, wipe all tracked sub-agents so a root that
458
+ """When the TOP-LEVEL turn ends, retire the foreground swarm so a root that
446
459
  errored or was cancelled (never flushed) can't leak its 'completed' children
447
- into the next prompt's live block. Only fires for the main agent -- sub-agent
448
- runs go through temp_agent.run(), not _runtime, and is_subagent() guards the
449
- rest.
460
+ into the next prompt's live block.
461
+
462
+ Detached trees (/fork, background) that are still running SURVIVE: their
463
+ task outlives the turn, so their live row does too -- the panel keeps
464
+ ticking at the idle prompt until they finish at their own boundary.
465
+
466
+ Only fires for the main agent -- sub-agent runs go through
467
+ temp_agent.run(), not _runtime, and is_subagent() guards the rest.
450
468
  """
451
469
  if not _runtime_enabled():
452
470
  return
@@ -458,10 +476,10 @@ async def _on_agent_run_end(
458
476
  except Exception:
459
477
  pass
460
478
  try:
461
- state.clear()
479
+ state.pop_settled() # discard foreground leftovers; detached rows stay
462
480
  except Exception:
463
481
  pass
464
- _stop_ticker() # run over — never leave an orphan clock task
482
+ _retire_ticker_if_idle() # never leave an orphan clock task
465
483
  _push_panel(force=True)
466
484
 
467
485
 
@@ -483,6 +501,15 @@ async def _on_agent_run_cancel(group_id=None):
483
501
  _push_panel(force=True)
484
502
 
485
503
 
504
+ def _is_detached_context(context) -> bool:
505
+ """Did a detached launcher (/fork or background_agents) publish this
506
+ ``post_tool_call``? Both keys mean the same thing; ``detached_fork`` is
507
+ the older spelling kept so an older /fork plugin still retires its row."""
508
+ if not isinstance(context, dict):
509
+ return False
510
+ return bool(context.get("detached") or context.get("detached_fork"))
511
+
512
+
486
513
  async def _on_post_tool_call(tool_name, tool_args, result, duration_ms, context=None):
487
514
  """Authoritative completion **state** signal for sub-agent invocations.
488
515
 
@@ -525,9 +552,10 @@ async def _on_post_tool_call(tool_name, tool_args, result, duration_ms, context=
525
552
  if not sid:
526
553
  return
527
554
  try:
528
- # Keep ordinary calls until their foreground root flushes; detached forks
529
- # have no root, so finish them at their own boundary.
530
- if isinstance(context, dict) and context.get("detached_fork"):
555
+ # Keep ordinary calls until their foreground root flushes; detached
556
+ # runs (/fork, background) have no foreground root, so finish them at
557
+ # their own boundary. ``detached_fork`` is the legacy key /fork sends.
558
+ if _is_detached_context(context):
531
559
  state.finish(sid)
532
560
  else:
533
561
  err = getattr(result, "error", None)
@@ -112,13 +112,71 @@ def mark_failed(session_id: Optional[str]) -> None:
112
112
 
113
113
 
114
114
  def clear() -> None:
115
- """Drop ALL tracked sub-agents. Called when the top-level turn ends so a
116
- root that errored/was cancelled (and thus never flushed) can't leak its
117
- 'completed' children into the next prompt's live block."""
115
+ """Drop ALL tracked sub-agents -- detached ones included. Reserved for the
116
+ cancel path (Ctrl+C takes forks/background agents down too) and for the
117
+ runtime off-switch; ordinary end-of-turn cleanup is ``pop_settled``."""
118
118
  with _LOCK:
119
119
  _AGENTS.clear()
120
120
 
121
121
 
122
+ # Detached trees (/fork + background) outlive the turn that started them
123
+ def is_detached(entry: Dict[str, Any]) -> bool:
124
+ """A ``/fork`` or ``background=True`` launch: its lifetime is its own task,
125
+ not the main agent's turn, so end-of-turn cleanup must leave it alone."""
126
+ return bool(entry.get("is_fork") or entry.get("background"))
127
+
128
+
129
+ def _root_id(agents: Dict[str, Dict[str, Any]], session_id: str) -> str:
130
+ """Walk the parent chain to the tree root. A parent that isn't registered
131
+ (the main agent, or None) makes the row a root. Cycle-safe."""
132
+ seen = set()
133
+ while True:
134
+ parent = agents[session_id].get("parent")
135
+ if not parent or parent not in agents or parent in seen:
136
+ return session_id
137
+ seen.add(session_id)
138
+ session_id = parent
139
+
140
+
141
+ def _live_detached_ids(agents: Dict[str, Dict[str, Any]]) -> set:
142
+ """Session ids of every row (root + descendants) in a detached tree whose
143
+ root is still running."""
144
+ live = set()
145
+ for sid in agents:
146
+ root = agents[_root_id(agents, sid)]
147
+ if is_detached(root) and not root.get("done"):
148
+ live.add(sid)
149
+ return live
150
+
151
+
152
+ def foreground_busy() -> bool:
153
+ """True while anything OUTSIDE a live detached tree is still running --
154
+ i.e. the foreground swarm hasn't gone idle yet, so nothing may flush."""
155
+ with _LOCK:
156
+ live = _live_detached_ids(_AGENTS)
157
+ return any(
158
+ not entry.get("done") for sid, entry in _AGENTS.items() if sid not in live
159
+ )
160
+
161
+
162
+ def pop_settled() -> List[Dict[str, Any]]:
163
+ """Remove and return every row NOT in a live detached tree (oldest first).
164
+
165
+ Live detached trees stay registered: a fork or background agent keeps
166
+ its live row across turn boundaries until it finishes at its own
167
+ boundary (``finish`` / ``mark_done``). Everything else -- the foreground
168
+ swarm, plus detached trees that already completed -- is handed back to
169
+ the caller to flush as frozen records (or discard at end of turn, when a
170
+ root that errored/was cancelled never flushed).
171
+ """
172
+ with _LOCK:
173
+ live = _live_detached_ids(_AGENTS)
174
+ settled = [entry for sid, entry in _AGENTS.items() if sid not in live]
175
+ for entry in settled:
176
+ _AGENTS.pop(entry["session_id"], None)
177
+ return sorted(settled, key=lambda e: e["start"])
178
+
179
+
122
180
  # Live status (stream_event updates only)
123
181
  def record_event(session_id: Optional[str], event_type: str, event_data: Any) -> None:
124
182
  if not session_id:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy-core-plugins"
7
- version = "0.0.52"
7
+ version = "0.0.53"
8
8
  description = "Official plugin bundle for Code Puppy"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"