code-puppy-core-plugins 0.0.2__py3-none-any.whl
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.
- code_puppy_core_plugins/__init__.py +5 -0
- code_puppy_core_plugins/acp/README.md +266 -0
- code_puppy_core_plugins/acp/__init__.py +8 -0
- code_puppy_core_plugins/acp/agent.py +494 -0
- code_puppy_core_plugins/acp/bridge.py +309 -0
- code_puppy_core_plugins/acp/capabilities.py +73 -0
- code_puppy_core_plugins/acp/commands.py +116 -0
- code_puppy_core_plugins/acp/content.py +115 -0
- code_puppy_core_plugins/acp/io_delegation.py +231 -0
- code_puppy_core_plugins/acp/mcp_config.py +66 -0
- code_puppy_core_plugins/acp/permissions.py +159 -0
- code_puppy_core_plugins/acp/persistence.py +197 -0
- code_puppy_core_plugins/acp/register_callbacks.py +110 -0
- code_puppy_core_plugins/acp/replay.py +114 -0
- code_puppy_core_plugins/acp/session.py +329 -0
- code_puppy_core_plugins/acp/session_config.py +179 -0
- code_puppy_core_plugins/acp/state.py +135 -0
- code_puppy_core_plugins/agent_skills/__init__.py +22 -0
- code_puppy_core_plugins/agent_skills/config.py +208 -0
- code_puppy_core_plugins/agent_skills/discovery.py +337 -0
- code_puppy_core_plugins/agent_skills/downloader.py +392 -0
- code_puppy_core_plugins/agent_skills/enabled_skills.py +82 -0
- code_puppy_core_plugins/agent_skills/installer.py +22 -0
- code_puppy_core_plugins/agent_skills/metadata.py +219 -0
- code_puppy_core_plugins/agent_skills/prompt_builder.py +49 -0
- code_puppy_core_plugins/agent_skills/provider.py +52 -0
- code_puppy_core_plugins/agent_skills/register_callbacks.py +309 -0
- code_puppy_core_plugins/agent_skills/remote_catalog.py +322 -0
- code_puppy_core_plugins/agent_skills/skill_catalog.py +257 -0
- code_puppy_core_plugins/agent_skills/skill_commands.py +102 -0
- code_puppy_core_plugins/agent_skills/skills_install_menu.py +698 -0
- code_puppy_core_plugins/agent_skills/skills_menu.py +794 -0
- code_puppy_core_plugins/aws_bedrock/__init__.py +14 -0
- code_puppy_core_plugins/aws_bedrock/config.py +101 -0
- code_puppy_core_plugins/aws_bedrock/register_callbacks.py +243 -0
- code_puppy_core_plugins/aws_bedrock/utils.py +186 -0
- code_puppy_core_plugins/azure_foundry/README.md +238 -0
- code_puppy_core_plugins/azure_foundry/__init__.py +15 -0
- code_puppy_core_plugins/azure_foundry/config.py +126 -0
- code_puppy_core_plugins/azure_foundry/discovery.py +189 -0
- code_puppy_core_plugins/azure_foundry/register_callbacks.py +506 -0
- code_puppy_core_plugins/azure_foundry/token.py +182 -0
- code_puppy_core_plugins/azure_foundry/utils.py +375 -0
- code_puppy_core_plugins/btw/__init__.py +1 -0
- code_puppy_core_plugins/btw/inline_view.py +135 -0
- code_puppy_core_plugins/btw/register_callbacks.py +106 -0
- code_puppy_core_plugins/btw/side_query.py +91 -0
- code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +83 -0
- code_puppy_core_plugins/chatgpt_oauth/__init__.py +8 -0
- code_puppy_core_plugins/chatgpt_oauth/config.py +52 -0
- code_puppy_core_plugins/chatgpt_oauth/image_generation.py +253 -0
- code_puppy_core_plugins/chatgpt_oauth/image_tool.py +70 -0
- code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +461 -0
- code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +288 -0
- code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +663 -0
- code_puppy_core_plugins/chatgpt_oauth/usage.py +113 -0
- code_puppy_core_plugins/chatgpt_oauth/utils.py +534 -0
- code_puppy_core_plugins/claude_code_hooks/__init__.py +1 -0
- code_puppy_core_plugins/claude_code_hooks/config.py +137 -0
- code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +383 -0
- code_puppy_core_plugins/claude_code_oauth/README.md +167 -0
- code_puppy_core_plugins/claude_code_oauth/SETUP.md +93 -0
- code_puppy_core_plugins/claude_code_oauth/__init__.py +25 -0
- code_puppy_core_plugins/claude_code_oauth/config.py +59 -0
- code_puppy_core_plugins/claude_code_oauth/fast_mode.py +122 -0
- code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +64 -0
- code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +719 -0
- code_puppy_core_plugins/claude_code_oauth/test_plugin.py +285 -0
- code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +240 -0
- code_puppy_core_plugins/claude_code_oauth/utils.py +663 -0
- code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +155 -0
- code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +104 -0
- code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +147 -0
- code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +39 -0
- code_puppy_core_plugins/code_puppy_agent/SKILL.md +180 -0
- code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +136 -0
- code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +160 -0
- code_puppy_core_plugins/code_puppy_agent/__init__.py +5 -0
- code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +46 -0
- code_puppy_core_plugins/computer_use/NativeCapture.swift +123 -0
- code_puppy_core_plugins/computer_use/README.md +109 -0
- code_puppy_core_plugins/computer_use/__init__.py +1 -0
- code_puppy_core_plugins/computer_use/accessibility.py +163 -0
- code_puppy_core_plugins/computer_use/activation.py +75 -0
- code_puppy_core_plugins/computer_use/backend.py +584 -0
- code_puppy_core_plugins/computer_use/backend_types.py +5 -0
- code_puppy_core_plugins/computer_use/capture.py +110 -0
- code_puppy_core_plugins/computer_use/commands.py +62 -0
- code_puppy_core_plugins/computer_use/geometry.py +81 -0
- code_puppy_core_plugins/computer_use/inline_image.py +56 -0
- code_puppy_core_plugins/computer_use/keycodes.py +47 -0
- code_puppy_core_plugins/computer_use/policy.py +144 -0
- code_puppy_core_plugins/computer_use/register_callbacks.py +96 -0
- code_puppy_core_plugins/computer_use/safety.py +18 -0
- code_puppy_core_plugins/computer_use/settle.py +64 -0
- code_puppy_core_plugins/computer_use/state.py +86 -0
- code_puppy_core_plugins/computer_use/tools.py +469 -0
- code_puppy_core_plugins/context_indicator/__init__.py +14 -0
- code_puppy_core_plugins/context_indicator/register_callbacks.py +249 -0
- code_puppy_core_plugins/context_indicator/usage.py +40 -0
- code_puppy_core_plugins/copilot_auth/__init__.py +11 -0
- code_puppy_core_plugins/copilot_auth/config.py +93 -0
- code_puppy_core_plugins/copilot_auth/reasoning_client.py +409 -0
- code_puppy_core_plugins/copilot_auth/register_callbacks.py +460 -0
- code_puppy_core_plugins/copilot_auth/utils.py +587 -0
- code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- code_puppy_core_plugins/customizable_commands/register_callbacks.py +464 -0
- code_puppy_core_plugins/dbos_durable_exec/__init__.py +1 -0
- code_puppy_core_plugins/dbos_durable_exec/cancel.py +15 -0
- code_puppy_core_plugins/dbos_durable_exec/commands.py +31 -0
- code_puppy_core_plugins/dbos_durable_exec/config.py +31 -0
- code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +83 -0
- code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +45 -0
- code_puppy_core_plugins/dbos_durable_exec/runtime.py +65 -0
- code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +155 -0
- code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +16 -0
- code_puppy_core_plugins/dbos_durable_exec/wrapper.py +58 -0
- code_puppy_core_plugins/destructive_command_guard/AGENTS.md +79 -0
- code_puppy_core_plugins/destructive_command_guard/__init__.py +14 -0
- code_puppy_core_plugins/destructive_command_guard/detector.py +374 -0
- code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +165 -0
- code_puppy_core_plugins/emoji_filter/__init__.py +12 -0
- code_puppy_core_plugins/emoji_filter/config.py +26 -0
- code_puppy_core_plugins/emoji_filter/register_callbacks.py +238 -0
- code_puppy_core_plugins/emoji_filter/stripper.py +45 -0
- code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +116 -0
- code_puppy_core_plugins/example_custom_command/README.md +328 -0
- code_puppy_core_plugins/example_custom_command/register_callbacks.py +66 -0
- code_puppy_core_plugins/file_permission_handler/__init__.py +4 -0
- code_puppy_core_plugins/file_permission_handler/register_callbacks.py +575 -0
- code_puppy_core_plugins/flux_bootstrap/__init__.py +5 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +173 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +86 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +167 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +392 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +51 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +129 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +211 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +181 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +71 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +16 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +103 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +108 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +195 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +221 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +151 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +208 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +180 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +304 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +120 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +179 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +46 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +155 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +154 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +248 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +345 -0
- code_puppy_core_plugins/flux_bootstrap/installer.py +256 -0
- code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +71 -0
- code_puppy_core_plugins/force_push_guard/__init__.py +5 -0
- code_puppy_core_plugins/force_push_guard/detector.py +96 -0
- code_puppy_core_plugins/force_push_guard/register_callbacks.py +161 -0
- code_puppy_core_plugins/fork/__init__.py +7 -0
- code_puppy_core_plugins/fork/register_callbacks.py +445 -0
- code_puppy_core_plugins/frontend_emitter/__init__.py +25 -0
- code_puppy_core_plugins/frontend_emitter/emitter.py +249 -0
- code_puppy_core_plugins/frontend_emitter/register_callbacks.py +412 -0
- code_puppy_core_plugins/frontend_emitter/session_context.py +50 -0
- code_puppy_core_plugins/grok_oauth/__init__.py +6 -0
- code_puppy_core_plugins/grok_oauth/config.py +49 -0
- code_puppy_core_plugins/grok_oauth/oauth_flow.py +213 -0
- code_puppy_core_plugins/grok_oauth/register_callbacks.py +132 -0
- code_puppy_core_plugins/grok_oauth/utils.py +195 -0
- code_puppy_core_plugins/herdr/README.md +168 -0
- code_puppy_core_plugins/herdr/__init__.py +9 -0
- code_puppy_core_plugins/herdr/client.py +339 -0
- code_puppy_core_plugins/herdr/register_callbacks.py +140 -0
- code_puppy_core_plugins/herdr/reporter.py +212 -0
- code_puppy_core_plugins/herdr/smoke.py +143 -0
- code_puppy_core_plugins/herdr/sources.py +133 -0
- code_puppy_core_plugins/hook_creator/__init__.py +1 -0
- code_puppy_core_plugins/hook_creator/register_callbacks.py +33 -0
- code_puppy_core_plugins/hook_manager/__init__.py +1 -0
- code_puppy_core_plugins/hook_manager/config.py +290 -0
- code_puppy_core_plugins/hook_manager/hooks_menu.py +571 -0
- code_puppy_core_plugins/hook_manager/register_callbacks.py +227 -0
- code_puppy_core_plugins/meta_oauth/__init__.py +1 -0
- code_puppy_core_plugins/meta_oauth/config.py +55 -0
- code_puppy_core_plugins/meta_oauth/oauth_flow.py +109 -0
- code_puppy_core_plugins/meta_oauth/register_callbacks.py +154 -0
- code_puppy_core_plugins/meta_oauth/utils.py +252 -0
- code_puppy_core_plugins/namespace_skill_search/README.md +118 -0
- code_puppy_core_plugins/namespace_skill_search/__init__.py +15 -0
- code_puppy_core_plugins/namespace_skill_search/namespaces.py +125 -0
- code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +99 -0
- code_puppy_core_plugins/namespace_skill_search/search_tool.py +158 -0
- code_puppy_core_plugins/no_tools/__init__.py +0 -0
- code_puppy_core_plugins/no_tools/register_callbacks.py +42 -0
- code_puppy_core_plugins/oauth_pasteback.py +110 -0
- code_puppy_core_plugins/oauth_puppy_html.py +194 -0
- code_puppy_core_plugins/obsidian_agent/README.md +52 -0
- code_puppy_core_plugins/obsidian_agent/__init__.py +8 -0
- code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +147 -0
- code_puppy_core_plugins/obsidian_agent/register_callbacks.py +13 -0
- code_puppy_core_plugins/ollama/__init__.py +1 -0
- code_puppy_core_plugins/ollama/register_callbacks.py +127 -0
- code_puppy_core_plugins/ollama_setup/__init__.py +5 -0
- code_puppy_core_plugins/ollama_setup/completer.py +38 -0
- code_puppy_core_plugins/ollama_setup/register_callbacks.py +419 -0
- code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- code_puppy_core_plugins/plugin_list/plugin_contributions.py +348 -0
- code_puppy_core_plugins/plugin_list/plugin_meta.py +67 -0
- code_puppy_core_plugins/plugin_list/plugin_text_utils.py +173 -0
- code_puppy_core_plugins/plugin_list/plugins_menu.py +455 -0
- code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +194 -0
- code_puppy_core_plugins/plugin_list/plugins_menu_render.py +431 -0
- code_puppy_core_plugins/plugin_list/project_trust_flow.py +162 -0
- code_puppy_core_plugins/plugin_list/register_callbacks.py +281 -0
- code_puppy_core_plugins/pop_command/__init__.py +1 -0
- code_puppy_core_plugins/pop_command/register_callbacks.py +191 -0
- code_puppy_core_plugins/prompt_newline/__init__.py +13 -0
- code_puppy_core_plugins/prompt_newline/config.py +21 -0
- code_puppy_core_plugins/prompt_newline/register_callbacks.py +163 -0
- code_puppy_core_plugins/prune/__init__.py +1 -0
- code_puppy_core_plugins/prune/prune_menu.py +308 -0
- code_puppy_core_plugins/prune/prune_model.py +517 -0
- code_puppy_core_plugins/prune/prune_render.py +354 -0
- code_puppy_core_plugins/prune/register_callbacks.py +388 -0
- code_puppy_core_plugins/puppy_kennel/README.md +203 -0
- code_puppy_core_plugins/puppy_kennel/__init__.py +6 -0
- code_puppy_core_plugins/puppy_kennel/commands.py +206 -0
- code_puppy_core_plugins/puppy_kennel/config.py +36 -0
- code_puppy_core_plugins/puppy_kennel/kennel.py +368 -0
- code_puppy_core_plugins/puppy_kennel/packer.py +152 -0
- code_puppy_core_plugins/puppy_kennel/recorder.py +83 -0
- code_puppy_core_plugins/puppy_kennel/register_callbacks.py +109 -0
- code_puppy_core_plugins/puppy_kennel/retriever.py +28 -0
- code_puppy_core_plugins/puppy_kennel/schema.py +78 -0
- code_puppy_core_plugins/puppy_kennel/state.py +68 -0
- code_puppy_core_plugins/puppy_kennel/tools.py +449 -0
- code_puppy_core_plugins/puppy_kennel/wings.py +110 -0
- code_puppy_core_plugins/puppy_spinner/README.md +93 -0
- code_puppy_core_plugins/puppy_spinner/__init__.py +11 -0
- code_puppy_core_plugins/puppy_spinner/builtin_frames.py +172 -0
- code_puppy_core_plugins/puppy_spinner/commands.py +116 -0
- code_puppy_core_plugins/puppy_spinner/picker.py +379 -0
- code_puppy_core_plugins/puppy_spinner/register_callbacks.py +193 -0
- code_puppy_core_plugins/puppy_spinner/spinners.py +444 -0
- code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- code_puppy_core_plugins/quick_resume/register_callbacks.py +77 -0
- code_puppy_core_plugins/review_pr/__init__.py +1 -0
- code_puppy_core_plugins/review_pr/register_callbacks.py +162 -0
- code_puppy_core_plugins/shell_safety/__init__.py +6 -0
- code_puppy_core_plugins/shell_safety/agent_shell_safety.py +69 -0
- code_puppy_core_plugins/shell_safety/command_cache.py +156 -0
- code_puppy_core_plugins/shell_safety/register_callbacks.py +203 -0
- code_puppy_core_plugins/stack_dump/__init__.py +1 -0
- code_puppy_core_plugins/stack_dump/register_callbacks.py +79 -0
- code_puppy_core_plugins/statusline/__init__.py +14 -0
- code_puppy_core_plugins/statusline/config.py +68 -0
- code_puppy_core_plugins/statusline/payload.py +138 -0
- code_puppy_core_plugins/statusline/prompt_patch.py +76 -0
- code_puppy_core_plugins/statusline/register_callbacks.py +45 -0
- code_puppy_core_plugins/statusline/runner.py +122 -0
- code_puppy_core_plugins/statusline/statusline_command.py +197 -0
- code_puppy_core_plugins/steer_queue/__init__.py +10 -0
- code_puppy_core_plugins/steer_queue/queue_menu.py +444 -0
- code_puppy_core_plugins/steer_queue/register_callbacks.py +138 -0
- code_puppy_core_plugins/subagent_panel/README.md +102 -0
- code_puppy_core_plugins/subagent_panel/__init__.py +24 -0
- code_puppy_core_plugins/subagent_panel/coalesce_patch.py +242 -0
- code_puppy_core_plugins/subagent_panel/panel_render.py +145 -0
- code_puppy_core_plugins/subagent_panel/register_callbacks.py +535 -0
- code_puppy_core_plugins/subagent_panel/resume_repaint.py +112 -0
- code_puppy_core_plugins/subagent_panel/state.py +231 -0
- code_puppy_core_plugins/switch_agent_resume/__init__.py +5 -0
- code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +314 -0
- code_puppy_core_plugins/theme/README.md +86 -0
- code_puppy_core_plugins/theme/__init__.py +14 -0
- code_puppy_core_plugins/theme/bundled_palettes.py +346 -0
- code_puppy_core_plugins/theme/content_styles.py +146 -0
- code_puppy_core_plugins/theme/osc_palette.py +178 -0
- code_puppy_core_plugins/theme/picker.py +358 -0
- code_puppy_core_plugins/theme/prompt_toolkit_theme.py +113 -0
- code_puppy_core_plugins/theme/register_callbacks.py +348 -0
- code_puppy_core_plugins/theme/rich_themes.py +202 -0
- code_puppy_core_plugins/theme/themes.py +720 -0
- code_puppy_core_plugins/timestamp_heartbeat/__init__.py +1 -0
- code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +114 -0
- code_puppy_core_plugins/token_ratio_learner/__init__.py +5 -0
- code_puppy_core_plugins/token_ratio_learner/ratios.py +208 -0
- code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +213 -0
- code_puppy_core_plugins/universal_constructor/__init__.py +13 -0
- code_puppy_core_plugins/universal_constructor/models.py +138 -0
- code_puppy_core_plugins/universal_constructor/provider.py +62 -0
- code_puppy_core_plugins/universal_constructor/register_callbacks.py +75 -0
- code_puppy_core_plugins/universal_constructor/registry.py +302 -0
- code_puppy_core_plugins/universal_constructor/sandbox.py +584 -0
- code_puppy_core_plugins/wide_completion_menu/__init__.py +6 -0
- code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +165 -0
- code_puppy_core_plugins/wiggum/__init__.py +1 -0
- code_puppy_core_plugins/wiggum/goal_runs.py +91 -0
- code_puppy_core_plugins/wiggum/judge.py +299 -0
- code_puppy_core_plugins/wiggum/judge_config.py +249 -0
- code_puppy_core_plugins/wiggum/judges_menu.py +814 -0
- code_puppy_core_plugins/wiggum/register_callbacks.py +569 -0
- code_puppy_core_plugins/wiggum/state.py +89 -0
- code_puppy_core_plugins/yolo_cli/__init__.py +1 -0
- code_puppy_core_plugins/yolo_cli/register_callbacks.py +41 -0
- code_puppy_core_plugins-0.0.2.dist-info/METADATA +64 -0
- code_puppy_core_plugins-0.0.2.dist-info/RECORD +313 -0
- code_puppy_core_plugins-0.0.2.dist-info/WHEEL +4 -0
- code_puppy_core_plugins-0.0.2.dist-info/entry_points.txt +55 -0
- code_puppy_core_plugins-0.0.2.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# Example Custom Command Plugin
|
|
2
|
+
|
|
3
|
+
> **Note**: This example demonstrates **custom commands** via the callback system.
|
|
4
|
+
> For **built-in commands**, see the built-in command files in `code_puppy/command_line/`.
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This plugin demonstrates how to create custom commands using Code Puppy's callback system.
|
|
9
|
+
|
|
10
|
+
**Important**: Custom commands use `register_callback()`, NOT `@register_command`.
|
|
11
|
+
|
|
12
|
+
## Command Types in Code Puppy
|
|
13
|
+
|
|
14
|
+
### 1. Built-in Commands (Core Functionality)
|
|
15
|
+
- Use `@register_command` decorator
|
|
16
|
+
- Located in `code_puppy/command_line/core_commands.py`, `session_commands.py`, `config_commands.py`
|
|
17
|
+
- Examples: `/help`, `/cd`, `/set`, `/agent`
|
|
18
|
+
- Check those files for implementation examples
|
|
19
|
+
|
|
20
|
+
### 2. Custom Commands (Plugins) ← **This Example**
|
|
21
|
+
- Use `register_callback()` function
|
|
22
|
+
- Located in plugin directories like this one
|
|
23
|
+
- Examples: `/woof`, `/echo` (from this plugin)
|
|
24
|
+
- Designed for plugin-specific functionality
|
|
25
|
+
|
|
26
|
+
## How This Plugin Works
|
|
27
|
+
|
|
28
|
+
### File Structure
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
code_puppy/plugins/example_custom_command/
|
|
32
|
+
├── register_callbacks.py # Plugin implementation
|
|
33
|
+
└── README.md # This file
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Implementation
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from code_puppy.callbacks import register_callback
|
|
40
|
+
from code_puppy.messaging import emit_info
|
|
41
|
+
|
|
42
|
+
# Optional dependency on the sibling ``customizable_commands`` plugin.
|
|
43
|
+
# Returning a ``MarkdownCommandResult`` tells the dispatcher to forward
|
|
44
|
+
# the wrapped content to the agent as a user prompt.
|
|
45
|
+
try:
|
|
46
|
+
from code_puppy_core_plugins.customizable_commands.register_callbacks import (
|
|
47
|
+
MarkdownCommandResult,
|
|
48
|
+
)
|
|
49
|
+
except ImportError:
|
|
50
|
+
MarkdownCommandResult = None
|
|
51
|
+
|
|
52
|
+
# 1. Define help entries for your commands
|
|
53
|
+
def _custom_help():
|
|
54
|
+
return [
|
|
55
|
+
("woof", "Ask the agent for a dog fact (or any prompt you tack on)"),
|
|
56
|
+
("echo", "Echo back your text (display only)"),
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
# 2. Define command handler
|
|
60
|
+
def _handle_custom_command(command: str, name: str):
|
|
61
|
+
"""Handle custom commands."""
|
|
62
|
+
if name == "woof":
|
|
63
|
+
parts = command.split(maxsplit=1)
|
|
64
|
+
prompt = parts[1] if len(parts) == 2 else "Tell me a dog fact"
|
|
65
|
+
emit_info(f"🐶 Woof! sending prompt: {prompt}")
|
|
66
|
+
# Forward to the agent when possible; otherwise degrade gracefully
|
|
67
|
+
# to display-only so the user still sees the echoed prompt.
|
|
68
|
+
if MarkdownCommandResult is not None:
|
|
69
|
+
return MarkdownCommandResult(prompt)
|
|
70
|
+
return prompt
|
|
71
|
+
|
|
72
|
+
if name == "echo":
|
|
73
|
+
# Display-only: dispatcher echoes the returned string and stops.
|
|
74
|
+
parts = command.split(maxsplit=1)
|
|
75
|
+
if len(parts) == 2:
|
|
76
|
+
return parts[1]
|
|
77
|
+
return ""
|
|
78
|
+
|
|
79
|
+
return None # Not our command
|
|
80
|
+
|
|
81
|
+
# 3. Register callbacks
|
|
82
|
+
register_callback("custom_command_help", _custom_help)
|
|
83
|
+
register_callback("custom_command", _handle_custom_command)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Commands Provided
|
|
87
|
+
|
|
88
|
+
### `/woof [text]`
|
|
89
|
+
|
|
90
|
+
**Description**: Playful command that sends a prompt to the model.
|
|
91
|
+
|
|
92
|
+
**Behavior**:
|
|
93
|
+
- Without text: Sends "Tell me a dog fact" to the model
|
|
94
|
+
- With text: Sends your text as the prompt
|
|
95
|
+
|
|
96
|
+
**Examples**:
|
|
97
|
+
```bash
|
|
98
|
+
/woof
|
|
99
|
+
# → Sends prompt: "Tell me a dog fact"
|
|
100
|
+
|
|
101
|
+
/woof What's the best breed?
|
|
102
|
+
# → Sends prompt: "What's the best breed?"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `/echo <text>`
|
|
106
|
+
|
|
107
|
+
**Description**: Display-only command that shows your text.
|
|
108
|
+
|
|
109
|
+
**Behavior**:
|
|
110
|
+
- Shows the text you provide via `emit_info`
|
|
111
|
+
- Does **not** send anything to the model — the dispatcher treats a bare
|
|
112
|
+
`str` return as display-only and short-circuits the REPL
|
|
113
|
+
|
|
114
|
+
**Examples**:
|
|
115
|
+
```bash
|
|
116
|
+
/echo Hello world
|
|
117
|
+
# → Displays: "example plugin echo -> Hello world"
|
|
118
|
+
# → No model round-trip
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Creating Your Own Plugin
|
|
122
|
+
|
|
123
|
+
Plugins can live at any of the three discovery tiers:
|
|
124
|
+
|
|
125
|
+
| Tier | Location | Scope |
|
|
126
|
+
|------|----------|-------|
|
|
127
|
+
| **Builtin** | `code_puppy/plugins/<name>/` | Shipped with Code Puppy |
|
|
128
|
+
| **User** | `~/.code_puppy/plugins/<name>/` | Personal, all projects |
|
|
129
|
+
| **Project** | `<CWD>/.code_puppy/plugins/<name>/` | Repo-specific, team-shared |
|
|
130
|
+
|
|
131
|
+
All tiers use the exact same `register_callbacks.py` pattern.
|
|
132
|
+
|
|
133
|
+
### Step 1: Create Plugin Directory
|
|
134
|
+
|
|
135
|
+
**Builtin plugin** (shipped with Code Puppy):
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
mkdir -p code_puppy/plugins/my_plugin
|
|
139
|
+
touch code_puppy/plugins/my_plugin/__init__.py
|
|
140
|
+
touch code_puppy/plugins/my_plugin/register_callbacks.py
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**User plugin** (personal, applies to all projects):
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
mkdir -p ~/.code_puppy/plugins/my_plugin
|
|
147
|
+
touch ~/.code_puppy/plugins/my_plugin/register_callbacks.py
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Project plugin** (shared with your team via git):
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
mkdir -p .code_puppy/plugins/my_plugin
|
|
154
|
+
touch .code_puppy/plugins/my_plugin/register_callbacks.py
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> **Note:** Code Puppy never auto-creates `.code_puppy/plugins/` — your team
|
|
158
|
+
> opts in by creating the directory. Project plugins load last (after builtin
|
|
159
|
+
> and user), giving them highest precedence for override-style hooks.
|
|
160
|
+
|
|
161
|
+
### Step 2: Implement Callbacks
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
# code_puppy/plugins/my_plugin/register_callbacks.py
|
|
165
|
+
|
|
166
|
+
from code_puppy.callbacks import register_callback
|
|
167
|
+
from code_puppy.messaging import emit_info, emit_success
|
|
168
|
+
|
|
169
|
+
def _custom_help():
|
|
170
|
+
"""Provide help text for /help display."""
|
|
171
|
+
return [
|
|
172
|
+
("mycommand", "Description of my command"),
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
def _handle_custom_command(command: str, name: str):
|
|
176
|
+
"""Handle your custom commands."""
|
|
177
|
+
if name == "mycommand":
|
|
178
|
+
# Your command logic here
|
|
179
|
+
emit_success("My command executed!")
|
|
180
|
+
return True # Command handled
|
|
181
|
+
|
|
182
|
+
return None # Not our command
|
|
183
|
+
|
|
184
|
+
# Register the callbacks
|
|
185
|
+
register_callback("custom_command_help", _custom_help)
|
|
186
|
+
register_callback("custom_command", _handle_custom_command)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Step 3: Test Your Plugin
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Restart Code Puppy to load the plugin
|
|
193
|
+
code-puppy
|
|
194
|
+
|
|
195
|
+
# Try your command
|
|
196
|
+
/mycommand
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Return Value Behaviors
|
|
200
|
+
|
|
201
|
+
Your `_handle_custom_command` function can return:
|
|
202
|
+
|
|
203
|
+
| Return Value | Behavior |
|
|
204
|
+
|-------------|----------|
|
|
205
|
+
| `None` | Command not recognized, try next plugin |
|
|
206
|
+
| `True` | Command handled successfully, no model invocation |
|
|
207
|
+
| `str` | Display-only message — dispatcher emits it and stops (agent NOT invoked) |
|
|
208
|
+
| `MarkdownCommandResult(content)` | Forwards `content` to the agent as a user prompt |
|
|
209
|
+
|
|
210
|
+
## Best Practices
|
|
211
|
+
|
|
212
|
+
### ✅ DO:
|
|
213
|
+
|
|
214
|
+
- **Use for plugin-specific features**: OAuth flows, integrations, utilities
|
|
215
|
+
- **Return `True` for display-only commands**: Avoid unnecessary model calls
|
|
216
|
+
- **Return strings to invoke the model**: Let users interact naturally
|
|
217
|
+
- **Provide clear help text**: Users see this in `/help`
|
|
218
|
+
- **Handle errors gracefully**: Use try/except and emit_error
|
|
219
|
+
- **Keep commands simple**: Complex logic → separate module
|
|
220
|
+
|
|
221
|
+
### ❌ DON'T:
|
|
222
|
+
|
|
223
|
+
- **Don't use `@register_command`**: That's for built-in commands only
|
|
224
|
+
- **Don't modify global state**: Use Code Puppy's config system
|
|
225
|
+
- **Don't make blocking calls**: Keep commands fast and responsive
|
|
226
|
+
- **Don't invoke the model directly**: return a `MarkdownCommandResult` and let the dispatcher forward it
|
|
227
|
+
- **Don't duplicate built-in commands**: Check existing commands first
|
|
228
|
+
|
|
229
|
+
## Command Execution Order
|
|
230
|
+
|
|
231
|
+
1. **Built-in commands** checked first (via registry)
|
|
232
|
+
2. **Legacy fallback** checked (for backward compatibility)
|
|
233
|
+
3. **Custom commands** checked (via callbacks) ← Your plugin runs here
|
|
234
|
+
4. If no match, show "Unknown command" warning
|
|
235
|
+
|
|
236
|
+
## Available Messaging Functions
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
from code_puppy.messaging import (
|
|
240
|
+
emit_info, # Blue info message
|
|
241
|
+
emit_success, # Green success message
|
|
242
|
+
emit_warning, # Yellow warning message
|
|
243
|
+
emit_error, # Red error message
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
# Examples
|
|
247
|
+
emit_info("Processing...")
|
|
248
|
+
emit_success("Done!")
|
|
249
|
+
emit_warning("This might take a while")
|
|
250
|
+
emit_error("Something went wrong")
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Testing Your Plugin
|
|
254
|
+
|
|
255
|
+
### Manual Testing
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Start Code Puppy
|
|
259
|
+
code-puppy
|
|
260
|
+
|
|
261
|
+
# Test your commands
|
|
262
|
+
/mycommand
|
|
263
|
+
/help # Verify your command appears
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Unit Testing
|
|
267
|
+
|
|
268
|
+
```python
|
|
269
|
+
# tests/test_my_plugin.py
|
|
270
|
+
|
|
271
|
+
from code_puppy.plugins.my_plugin.register_callbacks import _handle_custom_command
|
|
272
|
+
|
|
273
|
+
def test_my_command():
|
|
274
|
+
result = _handle_custom_command("/mycommand", "mycommand")
|
|
275
|
+
assert result is True
|
|
276
|
+
|
|
277
|
+
def test_unknown_command():
|
|
278
|
+
result = _handle_custom_command("/unknown", "unknown")
|
|
279
|
+
assert result is None
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Plugin Discovery Tiers
|
|
283
|
+
|
|
284
|
+
| Feature | Builtin | User | Project |
|
|
285
|
+
|---------|---------|------|---------|
|
|
286
|
+
| **Location** | `code_puppy/plugins/` | `~/.code_puppy/plugins/` | `<CWD>/.code_puppy/plugins/` |
|
|
287
|
+
| **Load order** | First | Second | Last (highest precedence) |
|
|
288
|
+
| **Auto-created** | N/A (in package) | No | No — team must create intentionally |
|
|
289
|
+
| **Name collisions** | N/A | Warning logged | Warning logged, still loads (shadow) |
|
|
290
|
+
| **Module namespace** | `code_puppy.plugins.<name>` | `<name>.register_callbacks` | `project_plugins.<name>.register_callbacks` |
|
|
291
|
+
| **Shared via git** | Yes (in repo) | No (local only) | Yes (in `.code_puppy/`) |
|
|
292
|
+
|
|
293
|
+
## Difference from Built-in Commands
|
|
294
|
+
|
|
295
|
+
| Feature | Built-in Commands | Custom Commands (Plugins) |
|
|
296
|
+
|---------|------------------|---------------------------|
|
|
297
|
+
| **Decorator/Function** | `@register_command` | `register_callback()` |
|
|
298
|
+
| **Location** | `core_commands.py`, etc. | Plugin directory |
|
|
299
|
+
| **Purpose** | Core functionality | Plugin features |
|
|
300
|
+
| **Auto-discovery** | Via imports | Via plugin loader |
|
|
301
|
+
| **Priority** | Checked first | Checked last |
|
|
302
|
+
| **Help display** | Automatic | Manual via callback |
|
|
303
|
+
|
|
304
|
+
## Example Plugins in This Repo
|
|
305
|
+
|
|
306
|
+
- **`example_custom_command/`** (this plugin) - Basic command examples
|
|
307
|
+
- **`customizable_commands/`** - Markdown file commands
|
|
308
|
+
- **`claude_code_oauth/`** - OAuth integration example
|
|
309
|
+
- **`chatgpt_oauth/`** - Another OAuth example
|
|
310
|
+
- **`file_permission_handler/`** - File system integration
|
|
311
|
+
|
|
312
|
+
## Further Reading
|
|
313
|
+
|
|
314
|
+
- `code_puppy/callbacks.py` - Callback system implementation
|
|
315
|
+
- `code_puppy/command_line/command_handler.py` - Command dispatcher
|
|
316
|
+
- `code_puppy/command_line/core_commands.py` - Example built-in commands
|
|
317
|
+
- `code_puppy/command_line/command_registry.py` - Registry system
|
|
318
|
+
|
|
319
|
+
## Questions?
|
|
320
|
+
|
|
321
|
+
If you're unsure whether to create a custom command or a built-in command:
|
|
322
|
+
|
|
323
|
+
- **Is it core Code Puppy functionality?** → Use `@register_command` (built-in)
|
|
324
|
+
- Add to appropriate category file: `core_commands.py`, `session_commands.py`, or `config_commands.py`
|
|
325
|
+
- **Is it plugin-specific?** → Use `register_callback()` (custom)
|
|
326
|
+
- Create a plugin directory and use the callback system (like this example)
|
|
327
|
+
- **Is it a prompt template?** → Use markdown file in `.claude/commands/`
|
|
328
|
+
- The `customizable_commands` plugin will auto-load `.md` files
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from code_puppy.callbacks import register_callback
|
|
2
|
+
from code_puppy.messaging import emit_info
|
|
3
|
+
|
|
4
|
+
# Optional sibling ``customizable_commands`` dep: a ``MarkdownCommandResult`` return
|
|
5
|
+
# forwards the content to the agent as a prompt; absent plugin falls back to
|
|
6
|
+
# display-only behavior rather than failing the whole plugin load.
|
|
7
|
+
try:
|
|
8
|
+
from code_puppy_core_plugins.customizable_commands.register_callbacks import (
|
|
9
|
+
MarkdownCommandResult,
|
|
10
|
+
)
|
|
11
|
+
except ImportError: # pragma: no cover - defensive fallback
|
|
12
|
+
MarkdownCommandResult = None
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _custom_help():
|
|
16
|
+
return [
|
|
17
|
+
("woof", "Ask the agent for a dog fact (or any prompt you tack on)"),
|
|
18
|
+
("echo", "Echo back your text (display only)"),
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _handle_custom_command(command: str, name: str):
|
|
23
|
+
"""Handle a demo custom command.
|
|
24
|
+
|
|
25
|
+
Custom commands registered via the ``custom_command`` callback may return:
|
|
26
|
+
|
|
27
|
+
- ``None`` -- not our command, let other plugins try.
|
|
28
|
+
- ``True`` -- fully handled, no further action.
|
|
29
|
+
- ``str`` -- display-only message; the dispatcher emits
|
|
30
|
+
it and stops (the agent is NOT invoked).
|
|
31
|
+
- ``MarkdownCommandResult`` -- the wrapped ``.content`` is forwarded to
|
|
32
|
+
the agent as a user prompt.
|
|
33
|
+
|
|
34
|
+
Supports:
|
|
35
|
+
- /woof [text] -> sends a prompt to the agent (defaults to a dog fact)
|
|
36
|
+
- /echo <text> -> displays the text (no agent round-trip)
|
|
37
|
+
"""
|
|
38
|
+
if not name:
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
if name == "woof":
|
|
42
|
+
parts = command.split(maxsplit=1)
|
|
43
|
+
prompt = parts[1] if len(parts) == 2 else "Tell me a dog fact"
|
|
44
|
+
emit_info(f"🐶 Woof! sending prompt: {prompt}")
|
|
45
|
+
# Forward to the agent when possible; otherwise degrade gracefully
|
|
46
|
+
# to display-only so the user at least sees the echoed prompt.
|
|
47
|
+
if MarkdownCommandResult is not None:
|
|
48
|
+
return MarkdownCommandResult(prompt)
|
|
49
|
+
return prompt
|
|
50
|
+
|
|
51
|
+
if name == "echo":
|
|
52
|
+
# Display-only: return the text after the command name and let the
|
|
53
|
+
# dispatcher's ``str`` branch emit it.
|
|
54
|
+
rest = command.split(maxsplit=1)
|
|
55
|
+
if len(rest) == 2:
|
|
56
|
+
text = rest[1]
|
|
57
|
+
emit_info(f"example plugin echo -> {text}")
|
|
58
|
+
return text
|
|
59
|
+
emit_info("example plugin echo (empty)")
|
|
60
|
+
return ""
|
|
61
|
+
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
register_callback("custom_command_help", _custom_help)
|
|
66
|
+
register_callback("custom_command", _handle_custom_command)
|