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,147 @@
|
|
|
1
|
+
"""Obsidian Agent for working with Obsidian vaults via the official CLI."""
|
|
2
|
+
|
|
3
|
+
from code_puppy.agents.base_agent import BaseAgent
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ObsidianAgent(BaseAgent):
|
|
7
|
+
"""Specialized agent for safe Obsidian CLI automation."""
|
|
8
|
+
|
|
9
|
+
@property
|
|
10
|
+
def name(self) -> str:
|
|
11
|
+
return "obsidian-agent"
|
|
12
|
+
|
|
13
|
+
@property
|
|
14
|
+
def display_name(self) -> str:
|
|
15
|
+
return "Obsidian Agent 🪨"
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def description(self) -> str:
|
|
19
|
+
return (
|
|
20
|
+
"Automates and assists with Obsidian vaults via the official "
|
|
21
|
+
"obsidian CLI using careful discovery and safe write workflows."
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def get_available_tools(self) -> list[str]:
|
|
25
|
+
"""Tools used for CLI execution and explicit user confirmation."""
|
|
26
|
+
return ["agent_run_shell_command", "ask_user_question"]
|
|
27
|
+
|
|
28
|
+
def get_user_prompt(self) -> str:
|
|
29
|
+
"""Prompt shown when users switch to the agent directly."""
|
|
30
|
+
return (
|
|
31
|
+
"What would you like me to do in Obsidian? Tell me the vault name "
|
|
32
|
+
"or path if you want a specific vault targeted."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def get_system_prompt(self) -> str:
|
|
36
|
+
"""Return the Obsidian Agent system prompt."""
|
|
37
|
+
return """
|
|
38
|
+
You are Obsidian Agent 🪨, a careful, pragmatic assistant for helping users work with Obsidian vaults through the official `obsidian` CLI.
|
|
39
|
+
|
|
40
|
+
## Purpose
|
|
41
|
+
|
|
42
|
+
- Query, inspect, and update Obsidian vault content from the terminal.
|
|
43
|
+
- Prefer Obsidian-aware CLI operations over direct filesystem edits when links, properties, templates, tasks, sync, publish, or app state matter.
|
|
44
|
+
- Never claim a vault was changed unless you actually used tools and verified the result.
|
|
45
|
+
|
|
46
|
+
## Obsidian CLI assumptions
|
|
47
|
+
|
|
48
|
+
The official CLI requires:
|
|
49
|
+
- Obsidian desktop 1.12.7 or newer.
|
|
50
|
+
- Settings → General → Command line interface enabled.
|
|
51
|
+
- The Obsidian desktop app running, or available to be launched by the first CLI command.
|
|
52
|
+
|
|
53
|
+
Useful diagnostics:
|
|
54
|
+
- `which obsidian`
|
|
55
|
+
- `obsidian version`
|
|
56
|
+
- `obsidian help`
|
|
57
|
+
- `obsidian help <command>`
|
|
58
|
+
- `obsidian vaults total verbose`
|
|
59
|
+
|
|
60
|
+
## Command construction
|
|
61
|
+
|
|
62
|
+
- Use `agent_run_shell_command` for every actual Obsidian CLI operation.
|
|
63
|
+
- Commands are one-shot, for example `obsidian read path='Projects/Plan.md'`.
|
|
64
|
+
- Use parameters as `key=value`; flags are bare words.
|
|
65
|
+
- Prefer `format=json` when supported so results are easier to parse.
|
|
66
|
+
- When targeting a specific vault, put it first: `obsidian vault='<name-or-id>' <command> ...`.
|
|
67
|
+
- Prefer `path='<vault-relative-path>'` when the exact path is known.
|
|
68
|
+
- Use `file='<note name>'` only when Obsidian link/name resolution is desired.
|
|
69
|
+
- Quote user-provided vault names, paths, queries, and content carefully. Be especially cautious with apostrophes, semicolons, backticks, dollar signs, pipes, ampersands, and newlines.
|
|
70
|
+
|
|
71
|
+
## Safety policy
|
|
72
|
+
|
|
73
|
+
- Discover before modifying whenever practical: list, search, or read before write.
|
|
74
|
+
- Read before write for note edits.
|
|
75
|
+
- Preserve user content, frontmatter/properties, links, task status, and metadata.
|
|
76
|
+
- Prefer minimal commands such as `append`, `prepend`, `property:set`, task status changes, or template-based creation.
|
|
77
|
+
- Do not output entire notes unnecessarily.
|
|
78
|
+
- Ask for explicit confirmation before destructive, broad, or hard-to-reverse operations.
|
|
79
|
+
- For broad or multi-file changes, first provide a concise plan with target vault, affected files, intended changes, backup/history considerations, and command classes to run.
|
|
80
|
+
|
|
81
|
+
## Read-only operations
|
|
82
|
+
|
|
83
|
+
Generally safe to run for discovery:
|
|
84
|
+
- `help`, `version`, `vault`, `vaults`
|
|
85
|
+
- `file`, `files`, `folder`, `folders`, `read`
|
|
86
|
+
- `search`, `search:context`
|
|
87
|
+
- `backlinks`, `links`, `unresolved`, `orphans`, `deadends`
|
|
88
|
+
- `outline`, `tags`, `tag`, `tasks`, `properties`, `aliases`
|
|
89
|
+
- `templates`, `template:read`
|
|
90
|
+
- `plugins`, `plugins:enabled`, `themes`, `theme`
|
|
91
|
+
- `wordcount`, `recents`, `tabs`, `bookmarks`
|
|
92
|
+
- `history`, `history:list`, `history:read`, `diff`
|
|
93
|
+
- `sync:status`, `sync:history`, `sync:read`, `sync:deleted`
|
|
94
|
+
- `publish:site`, `publish:list`, `publish:status`
|
|
95
|
+
- `workspaces`, `workspace`, `commands`, `hotkeys`, `hotkey`
|
|
96
|
+
|
|
97
|
+
## Write operations needing clear user intent
|
|
98
|
+
|
|
99
|
+
Run only when the user's request clearly asks for the action:
|
|
100
|
+
- `create`, `append`, `prepend`
|
|
101
|
+
- `daily`, `daily:append`, `daily:prepend`
|
|
102
|
+
- `property:set`, `property:remove`
|
|
103
|
+
- `task toggle`, `task done`, `task todo`, `task status`
|
|
104
|
+
- `open`, `search:open`, `template:insert`
|
|
105
|
+
- `workspace:save`, `workspace:load`
|
|
106
|
+
- `bookmark`, `base:create`, `unique`, `web`, `tab:open`
|
|
107
|
+
|
|
108
|
+
## Destructive or scary operations needing explicit confirmation
|
|
109
|
+
|
|
110
|
+
Always ask first unless the user has already explicitly confirmed the exact operation:
|
|
111
|
+
- `delete`, especially `delete permanent`
|
|
112
|
+
- `move`, `rename`
|
|
113
|
+
- `history:restore`, `sync:restore`
|
|
114
|
+
- `publish:add changed`, `publish:remove`
|
|
115
|
+
- `plugin:install`, `plugin:uninstall`, `plugin:enable`, `plugin:disable`, `plugin:reload`
|
|
116
|
+
- `theme:install`, `theme:uninstall`, `theme:set`
|
|
117
|
+
- `snippet:enable`, `snippet:disable`
|
|
118
|
+
- `plugins:restrict on/off`
|
|
119
|
+
- `sync on`, `sync off`
|
|
120
|
+
- `reload`, `restart`
|
|
121
|
+
- `eval`, `dev:cdp`, `dev:debug`, `dev:mobile`
|
|
122
|
+
|
|
123
|
+
Never run arbitrary JavaScript through `eval` unless explicitly requested and the code is understood.
|
|
124
|
+
|
|
125
|
+
## Common workflows
|
|
126
|
+
|
|
127
|
+
- Find notes: run `obsidian search query='<text>' format=json`, inspect results, then read or use `search:context` for relevant files.
|
|
128
|
+
- Add a daily note task: run `obsidian daily:append content='- [ ] Task text'` after resolving any vault targeting ambiguity.
|
|
129
|
+
- Mark a task done: use `obsidian task ref='<path:line>' done` when a line reference is available.
|
|
130
|
+
- Create from a template: list or read templates if needed, then run `create path='<path>' template='<template>' open`.
|
|
131
|
+
- Clean unresolved links: run `unresolved verbose format=json`, present a plan and affected files, then ask for confirmation before edits.
|
|
132
|
+
|
|
133
|
+
## Troubleshooting
|
|
134
|
+
|
|
135
|
+
If a command fails:
|
|
136
|
+
1. Report the failure clearly.
|
|
137
|
+
2. Run the smallest relevant diagnostic command.
|
|
138
|
+
3. Explain the likely cause and next step.
|
|
139
|
+
4. Do not retry destructive or write commands blindly.
|
|
140
|
+
|
|
141
|
+
## Tool usage rules
|
|
142
|
+
|
|
143
|
+
- Use `agent_run_shell_command(command, cwd=None, timeout=60)` for Obsidian CLI commands, tests, and diagnostics.
|
|
144
|
+
- Use `ask_user_question(questions)` for explicit confirmation or structured input.
|
|
145
|
+
- Continue independently for safe read-only discovery.
|
|
146
|
+
- Stop and ask when vault targeting, destructive operations, broad changes, or ambiguous intent require user input.
|
|
147
|
+
"""
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Register the Obsidian Agent plugin."""
|
|
2
|
+
|
|
3
|
+
from code_puppy.callbacks import register_callback
|
|
4
|
+
|
|
5
|
+
from .agent_obsidian import ObsidianAgent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def register_agents() -> list[dict[str, object]]:
|
|
9
|
+
"""Register the Obsidian Agent with Code Puppy's agent catalog."""
|
|
10
|
+
return [{"name": "obsidian-agent", "class": ObsidianAgent}]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
register_callback("register_agents", register_agents)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Ollama plugin — registers the 'ollama' model type for local OpenAI Chat Completions-compatible endpoints."""
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"""Ollama model type handler for OpenAI Chat Completions-compatible endpoints.
|
|
2
|
+
|
|
3
|
+
Registers the 'ollama' model type so users can connect Code Puppy to local
|
|
4
|
+
inference servers (Ollama, LM Studio, vLLM, llama.cpp, etc.) via
|
|
5
|
+
~/.code_puppy/extra_models.json.
|
|
6
|
+
|
|
7
|
+
Minimal config (Ollama on localhost with defaults):
|
|
8
|
+
{
|
|
9
|
+
"ollama-qwen3": {
|
|
10
|
+
"type": "ollama",
|
|
11
|
+
"name": "qwen3:30b",
|
|
12
|
+
"context_length": 131072
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
Full config (remote server, same custom_endpoint format as custom_openai):
|
|
17
|
+
{
|
|
18
|
+
"lmstudio-codellama": {
|
|
19
|
+
"type": "ollama",
|
|
20
|
+
"name": "codellama:34b",
|
|
21
|
+
"context_length": 16384,
|
|
22
|
+
"custom_endpoint": {
|
|
23
|
+
"url": "http://192.168.1.50:1234/v1",
|
|
24
|
+
"api_key": "$LM_STUDIO_KEY"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Note: Code Puppy requires models with strong tool/function calling support.
|
|
30
|
+
Models without tool calling will notwork properly.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
import logging
|
|
34
|
+
import os
|
|
35
|
+
from typing import Any
|
|
36
|
+
|
|
37
|
+
from pydantic_ai.models.openai import OpenAIChatModel
|
|
38
|
+
from pydantic_ai.providers.openai import OpenAIProvider
|
|
39
|
+
|
|
40
|
+
from code_puppy.callbacks import register_callback
|
|
41
|
+
from code_puppy.http_utils import create_async_client
|
|
42
|
+
from code_puppy.model_factory import get_custom_config
|
|
43
|
+
|
|
44
|
+
logger = logging.getLogger(__name__)
|
|
45
|
+
|
|
46
|
+
# Ollama defaults
|
|
47
|
+
_DEFAULT_OLLAMA_BASE_URL = "http://localhost:11434/v1"
|
|
48
|
+
_DEFAULT_OLLAMA_API_KEY = "ollama"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def create_ollama_model(
|
|
52
|
+
model_name: str,
|
|
53
|
+
model_config: dict[str, Any],
|
|
54
|
+
config: dict[str, Any],
|
|
55
|
+
) -> OpenAIChatModel | None:
|
|
56
|
+
"""Create a model for an OpenAI Chat Completions-compatible endpoint.
|
|
57
|
+
|
|
58
|
+
When ``custom_endpoint`` is present in *model_config*, the standard
|
|
59
|
+
``get_custom_config()`` helper is used (same path as ``custom_openai``
|
|
60
|
+
and ``codex`` model types).
|
|
61
|
+
|
|
62
|
+
When ``custom_endpoint`` is absent, sensible Ollama defaults are applied:
|
|
63
|
+
- base URL from ``OLLAMA_HOST`` env var, or ``http://localhost:11434/v1``
|
|
64
|
+
- api_key ``"ollama"`` (required non-empty by OpenAIProvider, not validated by Ollama)
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
model_name: The config key name of the model.
|
|
68
|
+
model_config: The model's configuration dict.
|
|
69
|
+
config: The full models configuration (unused, kept for API compat).
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
OpenAIChatModel instance, or None if creation fails.
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
if "custom_endpoint" in model_config:
|
|
76
|
+
url, headers, verify, api_key, _timeout = get_custom_config(model_config)
|
|
77
|
+
else:
|
|
78
|
+
# Derive base URL: OLLAMA_HOST env var → default
|
|
79
|
+
ollama_host = os.environ.get("OLLAMA_HOST", "").rstrip("/")
|
|
80
|
+
if ollama_host:
|
|
81
|
+
url = (
|
|
82
|
+
ollama_host if ollama_host.endswith("/v1") else f"{ollama_host}/v1"
|
|
83
|
+
)
|
|
84
|
+
else:
|
|
85
|
+
url = _DEFAULT_OLLAMA_BASE_URL
|
|
86
|
+
headers = {}
|
|
87
|
+
verify = None
|
|
88
|
+
api_key = _DEFAULT_OLLAMA_API_KEY
|
|
89
|
+
|
|
90
|
+
client = create_async_client(headers=headers, verify=verify)
|
|
91
|
+
|
|
92
|
+
provider_args: dict[str, Any] = {
|
|
93
|
+
"base_url": url,
|
|
94
|
+
"http_client": client,
|
|
95
|
+
}
|
|
96
|
+
if api_key:
|
|
97
|
+
provider_args["api_key"] = api_key
|
|
98
|
+
else:
|
|
99
|
+
provider_args["api_key"] = _DEFAULT_OLLAMA_API_KEY
|
|
100
|
+
|
|
101
|
+
provider = OpenAIProvider(**provider_args)
|
|
102
|
+
|
|
103
|
+
actual_model_name = model_config.get("name", model_name)
|
|
104
|
+
model = OpenAIChatModel(actual_model_name, provider=provider)
|
|
105
|
+
model.provider = (
|
|
106
|
+
provider # Expose for connection-pooling cleanup (project convention)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
logger.info("Created ollama model: %s -> %s", actual_model_name, url)
|
|
110
|
+
return model
|
|
111
|
+
|
|
112
|
+
except Exception as e:
|
|
113
|
+
logger.error("Failed to create ollama model '%s': %s", model_name, e)
|
|
114
|
+
return None
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _get_ollama_model_types():
|
|
118
|
+
"""Return the ollama model type handler for the register_model_type hook."""
|
|
119
|
+
return [
|
|
120
|
+
{
|
|
121
|
+
"type": "ollama",
|
|
122
|
+
"handler": create_ollama_model,
|
|
123
|
+
},
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
register_callback("register_model_type", _get_ollama_model_types)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Tab-completion for ``/ollama-setup <model>``."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Iterable
|
|
6
|
+
|
|
7
|
+
from prompt_toolkit.completion import Completer, Completion
|
|
8
|
+
from prompt_toolkit.document import Document
|
|
9
|
+
|
|
10
|
+
from code_puppy_core_plugins.ollama_setup.register_callbacks import CLOUD_MODELS
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class OllamaSetupCompleter(Completer):
|
|
14
|
+
"""Completes cloud model names after ``/ollama-setup ``."""
|
|
15
|
+
|
|
16
|
+
trigger = "/ollama-setup"
|
|
17
|
+
|
|
18
|
+
def get_completions(
|
|
19
|
+
self, document: Document, complete_event: object
|
|
20
|
+
) -> Iterable[Completion]:
|
|
21
|
+
text = document.text_before_cursor.lstrip()
|
|
22
|
+
|
|
23
|
+
if not text.startswith(self.trigger + " "):
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
# Everything after "/ollama-setup "
|
|
27
|
+
after = text[len(self.trigger) + 1 :]
|
|
28
|
+
partial = after.strip().lower()
|
|
29
|
+
start_pos = -len(after) if after else 0
|
|
30
|
+
|
|
31
|
+
for tag, meta in CLOUD_MODELS.items():
|
|
32
|
+
if not partial or tag.lower().startswith(partial):
|
|
33
|
+
yield Completion(
|
|
34
|
+
tag,
|
|
35
|
+
start_position=start_pos,
|
|
36
|
+
display=tag,
|
|
37
|
+
display_meta=meta["description"],
|
|
38
|
+
)
|