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.
Files changed (313) hide show
  1. code_puppy_core_plugins/__init__.py +5 -0
  2. code_puppy_core_plugins/acp/README.md +266 -0
  3. code_puppy_core_plugins/acp/__init__.py +8 -0
  4. code_puppy_core_plugins/acp/agent.py +494 -0
  5. code_puppy_core_plugins/acp/bridge.py +309 -0
  6. code_puppy_core_plugins/acp/capabilities.py +73 -0
  7. code_puppy_core_plugins/acp/commands.py +116 -0
  8. code_puppy_core_plugins/acp/content.py +115 -0
  9. code_puppy_core_plugins/acp/io_delegation.py +231 -0
  10. code_puppy_core_plugins/acp/mcp_config.py +66 -0
  11. code_puppy_core_plugins/acp/permissions.py +159 -0
  12. code_puppy_core_plugins/acp/persistence.py +197 -0
  13. code_puppy_core_plugins/acp/register_callbacks.py +110 -0
  14. code_puppy_core_plugins/acp/replay.py +114 -0
  15. code_puppy_core_plugins/acp/session.py +329 -0
  16. code_puppy_core_plugins/acp/session_config.py +179 -0
  17. code_puppy_core_plugins/acp/state.py +135 -0
  18. code_puppy_core_plugins/agent_skills/__init__.py +22 -0
  19. code_puppy_core_plugins/agent_skills/config.py +208 -0
  20. code_puppy_core_plugins/agent_skills/discovery.py +337 -0
  21. code_puppy_core_plugins/agent_skills/downloader.py +392 -0
  22. code_puppy_core_plugins/agent_skills/enabled_skills.py +82 -0
  23. code_puppy_core_plugins/agent_skills/installer.py +22 -0
  24. code_puppy_core_plugins/agent_skills/metadata.py +219 -0
  25. code_puppy_core_plugins/agent_skills/prompt_builder.py +49 -0
  26. code_puppy_core_plugins/agent_skills/provider.py +52 -0
  27. code_puppy_core_plugins/agent_skills/register_callbacks.py +309 -0
  28. code_puppy_core_plugins/agent_skills/remote_catalog.py +322 -0
  29. code_puppy_core_plugins/agent_skills/skill_catalog.py +257 -0
  30. code_puppy_core_plugins/agent_skills/skill_commands.py +102 -0
  31. code_puppy_core_plugins/agent_skills/skills_install_menu.py +698 -0
  32. code_puppy_core_plugins/agent_skills/skills_menu.py +794 -0
  33. code_puppy_core_plugins/aws_bedrock/__init__.py +14 -0
  34. code_puppy_core_plugins/aws_bedrock/config.py +101 -0
  35. code_puppy_core_plugins/aws_bedrock/register_callbacks.py +243 -0
  36. code_puppy_core_plugins/aws_bedrock/utils.py +186 -0
  37. code_puppy_core_plugins/azure_foundry/README.md +238 -0
  38. code_puppy_core_plugins/azure_foundry/__init__.py +15 -0
  39. code_puppy_core_plugins/azure_foundry/config.py +126 -0
  40. code_puppy_core_plugins/azure_foundry/discovery.py +189 -0
  41. code_puppy_core_plugins/azure_foundry/register_callbacks.py +506 -0
  42. code_puppy_core_plugins/azure_foundry/token.py +182 -0
  43. code_puppy_core_plugins/azure_foundry/utils.py +375 -0
  44. code_puppy_core_plugins/btw/__init__.py +1 -0
  45. code_puppy_core_plugins/btw/inline_view.py +135 -0
  46. code_puppy_core_plugins/btw/register_callbacks.py +106 -0
  47. code_puppy_core_plugins/btw/side_query.py +91 -0
  48. code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +83 -0
  49. code_puppy_core_plugins/chatgpt_oauth/__init__.py +8 -0
  50. code_puppy_core_plugins/chatgpt_oauth/config.py +52 -0
  51. code_puppy_core_plugins/chatgpt_oauth/image_generation.py +253 -0
  52. code_puppy_core_plugins/chatgpt_oauth/image_tool.py +70 -0
  53. code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +461 -0
  54. code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +288 -0
  55. code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +663 -0
  56. code_puppy_core_plugins/chatgpt_oauth/usage.py +113 -0
  57. code_puppy_core_plugins/chatgpt_oauth/utils.py +534 -0
  58. code_puppy_core_plugins/claude_code_hooks/__init__.py +1 -0
  59. code_puppy_core_plugins/claude_code_hooks/config.py +137 -0
  60. code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +383 -0
  61. code_puppy_core_plugins/claude_code_oauth/README.md +167 -0
  62. code_puppy_core_plugins/claude_code_oauth/SETUP.md +93 -0
  63. code_puppy_core_plugins/claude_code_oauth/__init__.py +25 -0
  64. code_puppy_core_plugins/claude_code_oauth/config.py +59 -0
  65. code_puppy_core_plugins/claude_code_oauth/fast_mode.py +122 -0
  66. code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +64 -0
  67. code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +719 -0
  68. code_puppy_core_plugins/claude_code_oauth/test_plugin.py +285 -0
  69. code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +240 -0
  70. code_puppy_core_plugins/claude_code_oauth/utils.py +663 -0
  71. code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +155 -0
  72. code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +104 -0
  73. code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +147 -0
  74. code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +39 -0
  75. code_puppy_core_plugins/code_puppy_agent/SKILL.md +180 -0
  76. code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +136 -0
  77. code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +160 -0
  78. code_puppy_core_plugins/code_puppy_agent/__init__.py +5 -0
  79. code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +46 -0
  80. code_puppy_core_plugins/computer_use/NativeCapture.swift +123 -0
  81. code_puppy_core_plugins/computer_use/README.md +109 -0
  82. code_puppy_core_plugins/computer_use/__init__.py +1 -0
  83. code_puppy_core_plugins/computer_use/accessibility.py +163 -0
  84. code_puppy_core_plugins/computer_use/activation.py +75 -0
  85. code_puppy_core_plugins/computer_use/backend.py +584 -0
  86. code_puppy_core_plugins/computer_use/backend_types.py +5 -0
  87. code_puppy_core_plugins/computer_use/capture.py +110 -0
  88. code_puppy_core_plugins/computer_use/commands.py +62 -0
  89. code_puppy_core_plugins/computer_use/geometry.py +81 -0
  90. code_puppy_core_plugins/computer_use/inline_image.py +56 -0
  91. code_puppy_core_plugins/computer_use/keycodes.py +47 -0
  92. code_puppy_core_plugins/computer_use/policy.py +144 -0
  93. code_puppy_core_plugins/computer_use/register_callbacks.py +96 -0
  94. code_puppy_core_plugins/computer_use/safety.py +18 -0
  95. code_puppy_core_plugins/computer_use/settle.py +64 -0
  96. code_puppy_core_plugins/computer_use/state.py +86 -0
  97. code_puppy_core_plugins/computer_use/tools.py +469 -0
  98. code_puppy_core_plugins/context_indicator/__init__.py +14 -0
  99. code_puppy_core_plugins/context_indicator/register_callbacks.py +249 -0
  100. code_puppy_core_plugins/context_indicator/usage.py +40 -0
  101. code_puppy_core_plugins/copilot_auth/__init__.py +11 -0
  102. code_puppy_core_plugins/copilot_auth/config.py +93 -0
  103. code_puppy_core_plugins/copilot_auth/reasoning_client.py +409 -0
  104. code_puppy_core_plugins/copilot_auth/register_callbacks.py +460 -0
  105. code_puppy_core_plugins/copilot_auth/utils.py +587 -0
  106. code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
  107. code_puppy_core_plugins/customizable_commands/register_callbacks.py +464 -0
  108. code_puppy_core_plugins/dbos_durable_exec/__init__.py +1 -0
  109. code_puppy_core_plugins/dbos_durable_exec/cancel.py +15 -0
  110. code_puppy_core_plugins/dbos_durable_exec/commands.py +31 -0
  111. code_puppy_core_plugins/dbos_durable_exec/config.py +31 -0
  112. code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +83 -0
  113. code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +45 -0
  114. code_puppy_core_plugins/dbos_durable_exec/runtime.py +65 -0
  115. code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +155 -0
  116. code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +16 -0
  117. code_puppy_core_plugins/dbos_durable_exec/wrapper.py +58 -0
  118. code_puppy_core_plugins/destructive_command_guard/AGENTS.md +79 -0
  119. code_puppy_core_plugins/destructive_command_guard/__init__.py +14 -0
  120. code_puppy_core_plugins/destructive_command_guard/detector.py +374 -0
  121. code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +165 -0
  122. code_puppy_core_plugins/emoji_filter/__init__.py +12 -0
  123. code_puppy_core_plugins/emoji_filter/config.py +26 -0
  124. code_puppy_core_plugins/emoji_filter/register_callbacks.py +238 -0
  125. code_puppy_core_plugins/emoji_filter/stripper.py +45 -0
  126. code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +116 -0
  127. code_puppy_core_plugins/example_custom_command/README.md +328 -0
  128. code_puppy_core_plugins/example_custom_command/register_callbacks.py +66 -0
  129. code_puppy_core_plugins/file_permission_handler/__init__.py +4 -0
  130. code_puppy_core_plugins/file_permission_handler/register_callbacks.py +575 -0
  131. code_puppy_core_plugins/flux_bootstrap/__init__.py +5 -0
  132. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +173 -0
  133. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +86 -0
  134. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +167 -0
  135. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +392 -0
  136. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +51 -0
  137. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +129 -0
  138. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +211 -0
  139. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +181 -0
  140. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +71 -0
  141. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +16 -0
  142. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +103 -0
  143. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +108 -0
  144. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +195 -0
  145. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +221 -0
  146. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +151 -0
  147. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +208 -0
  148. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +180 -0
  149. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +304 -0
  150. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +120 -0
  151. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +179 -0
  152. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +46 -0
  153. code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +155 -0
  154. code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +154 -0
  155. code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +248 -0
  156. code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +345 -0
  157. code_puppy_core_plugins/flux_bootstrap/installer.py +256 -0
  158. code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +71 -0
  159. code_puppy_core_plugins/force_push_guard/__init__.py +5 -0
  160. code_puppy_core_plugins/force_push_guard/detector.py +96 -0
  161. code_puppy_core_plugins/force_push_guard/register_callbacks.py +161 -0
  162. code_puppy_core_plugins/fork/__init__.py +7 -0
  163. code_puppy_core_plugins/fork/register_callbacks.py +445 -0
  164. code_puppy_core_plugins/frontend_emitter/__init__.py +25 -0
  165. code_puppy_core_plugins/frontend_emitter/emitter.py +249 -0
  166. code_puppy_core_plugins/frontend_emitter/register_callbacks.py +412 -0
  167. code_puppy_core_plugins/frontend_emitter/session_context.py +50 -0
  168. code_puppy_core_plugins/grok_oauth/__init__.py +6 -0
  169. code_puppy_core_plugins/grok_oauth/config.py +49 -0
  170. code_puppy_core_plugins/grok_oauth/oauth_flow.py +213 -0
  171. code_puppy_core_plugins/grok_oauth/register_callbacks.py +132 -0
  172. code_puppy_core_plugins/grok_oauth/utils.py +195 -0
  173. code_puppy_core_plugins/herdr/README.md +168 -0
  174. code_puppy_core_plugins/herdr/__init__.py +9 -0
  175. code_puppy_core_plugins/herdr/client.py +339 -0
  176. code_puppy_core_plugins/herdr/register_callbacks.py +140 -0
  177. code_puppy_core_plugins/herdr/reporter.py +212 -0
  178. code_puppy_core_plugins/herdr/smoke.py +143 -0
  179. code_puppy_core_plugins/herdr/sources.py +133 -0
  180. code_puppy_core_plugins/hook_creator/__init__.py +1 -0
  181. code_puppy_core_plugins/hook_creator/register_callbacks.py +33 -0
  182. code_puppy_core_plugins/hook_manager/__init__.py +1 -0
  183. code_puppy_core_plugins/hook_manager/config.py +290 -0
  184. code_puppy_core_plugins/hook_manager/hooks_menu.py +571 -0
  185. code_puppy_core_plugins/hook_manager/register_callbacks.py +227 -0
  186. code_puppy_core_plugins/meta_oauth/__init__.py +1 -0
  187. code_puppy_core_plugins/meta_oauth/config.py +55 -0
  188. code_puppy_core_plugins/meta_oauth/oauth_flow.py +109 -0
  189. code_puppy_core_plugins/meta_oauth/register_callbacks.py +154 -0
  190. code_puppy_core_plugins/meta_oauth/utils.py +252 -0
  191. code_puppy_core_plugins/namespace_skill_search/README.md +118 -0
  192. code_puppy_core_plugins/namespace_skill_search/__init__.py +15 -0
  193. code_puppy_core_plugins/namespace_skill_search/namespaces.py +125 -0
  194. code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +99 -0
  195. code_puppy_core_plugins/namespace_skill_search/search_tool.py +158 -0
  196. code_puppy_core_plugins/no_tools/__init__.py +0 -0
  197. code_puppy_core_plugins/no_tools/register_callbacks.py +42 -0
  198. code_puppy_core_plugins/oauth_pasteback.py +110 -0
  199. code_puppy_core_plugins/oauth_puppy_html.py +194 -0
  200. code_puppy_core_plugins/obsidian_agent/README.md +52 -0
  201. code_puppy_core_plugins/obsidian_agent/__init__.py +8 -0
  202. code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +147 -0
  203. code_puppy_core_plugins/obsidian_agent/register_callbacks.py +13 -0
  204. code_puppy_core_plugins/ollama/__init__.py +1 -0
  205. code_puppy_core_plugins/ollama/register_callbacks.py +127 -0
  206. code_puppy_core_plugins/ollama_setup/__init__.py +5 -0
  207. code_puppy_core_plugins/ollama_setup/completer.py +38 -0
  208. code_puppy_core_plugins/ollama_setup/register_callbacks.py +419 -0
  209. code_puppy_core_plugins/plugin_list/__init__.py +0 -0
  210. code_puppy_core_plugins/plugin_list/plugin_contributions.py +348 -0
  211. code_puppy_core_plugins/plugin_list/plugin_meta.py +67 -0
  212. code_puppy_core_plugins/plugin_list/plugin_text_utils.py +173 -0
  213. code_puppy_core_plugins/plugin_list/plugins_menu.py +455 -0
  214. code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +194 -0
  215. code_puppy_core_plugins/plugin_list/plugins_menu_render.py +431 -0
  216. code_puppy_core_plugins/plugin_list/project_trust_flow.py +162 -0
  217. code_puppy_core_plugins/plugin_list/register_callbacks.py +281 -0
  218. code_puppy_core_plugins/pop_command/__init__.py +1 -0
  219. code_puppy_core_plugins/pop_command/register_callbacks.py +191 -0
  220. code_puppy_core_plugins/prompt_newline/__init__.py +13 -0
  221. code_puppy_core_plugins/prompt_newline/config.py +21 -0
  222. code_puppy_core_plugins/prompt_newline/register_callbacks.py +163 -0
  223. code_puppy_core_plugins/prune/__init__.py +1 -0
  224. code_puppy_core_plugins/prune/prune_menu.py +308 -0
  225. code_puppy_core_plugins/prune/prune_model.py +517 -0
  226. code_puppy_core_plugins/prune/prune_render.py +354 -0
  227. code_puppy_core_plugins/prune/register_callbacks.py +388 -0
  228. code_puppy_core_plugins/puppy_kennel/README.md +203 -0
  229. code_puppy_core_plugins/puppy_kennel/__init__.py +6 -0
  230. code_puppy_core_plugins/puppy_kennel/commands.py +206 -0
  231. code_puppy_core_plugins/puppy_kennel/config.py +36 -0
  232. code_puppy_core_plugins/puppy_kennel/kennel.py +368 -0
  233. code_puppy_core_plugins/puppy_kennel/packer.py +152 -0
  234. code_puppy_core_plugins/puppy_kennel/recorder.py +83 -0
  235. code_puppy_core_plugins/puppy_kennel/register_callbacks.py +109 -0
  236. code_puppy_core_plugins/puppy_kennel/retriever.py +28 -0
  237. code_puppy_core_plugins/puppy_kennel/schema.py +78 -0
  238. code_puppy_core_plugins/puppy_kennel/state.py +68 -0
  239. code_puppy_core_plugins/puppy_kennel/tools.py +449 -0
  240. code_puppy_core_plugins/puppy_kennel/wings.py +110 -0
  241. code_puppy_core_plugins/puppy_spinner/README.md +93 -0
  242. code_puppy_core_plugins/puppy_spinner/__init__.py +11 -0
  243. code_puppy_core_plugins/puppy_spinner/builtin_frames.py +172 -0
  244. code_puppy_core_plugins/puppy_spinner/commands.py +116 -0
  245. code_puppy_core_plugins/puppy_spinner/picker.py +379 -0
  246. code_puppy_core_plugins/puppy_spinner/register_callbacks.py +193 -0
  247. code_puppy_core_plugins/puppy_spinner/spinners.py +444 -0
  248. code_puppy_core_plugins/quick_resume/__init__.py +0 -0
  249. code_puppy_core_plugins/quick_resume/register_callbacks.py +77 -0
  250. code_puppy_core_plugins/review_pr/__init__.py +1 -0
  251. code_puppy_core_plugins/review_pr/register_callbacks.py +162 -0
  252. code_puppy_core_plugins/shell_safety/__init__.py +6 -0
  253. code_puppy_core_plugins/shell_safety/agent_shell_safety.py +69 -0
  254. code_puppy_core_plugins/shell_safety/command_cache.py +156 -0
  255. code_puppy_core_plugins/shell_safety/register_callbacks.py +203 -0
  256. code_puppy_core_plugins/stack_dump/__init__.py +1 -0
  257. code_puppy_core_plugins/stack_dump/register_callbacks.py +79 -0
  258. code_puppy_core_plugins/statusline/__init__.py +14 -0
  259. code_puppy_core_plugins/statusline/config.py +68 -0
  260. code_puppy_core_plugins/statusline/payload.py +138 -0
  261. code_puppy_core_plugins/statusline/prompt_patch.py +76 -0
  262. code_puppy_core_plugins/statusline/register_callbacks.py +45 -0
  263. code_puppy_core_plugins/statusline/runner.py +122 -0
  264. code_puppy_core_plugins/statusline/statusline_command.py +197 -0
  265. code_puppy_core_plugins/steer_queue/__init__.py +10 -0
  266. code_puppy_core_plugins/steer_queue/queue_menu.py +444 -0
  267. code_puppy_core_plugins/steer_queue/register_callbacks.py +138 -0
  268. code_puppy_core_plugins/subagent_panel/README.md +102 -0
  269. code_puppy_core_plugins/subagent_panel/__init__.py +24 -0
  270. code_puppy_core_plugins/subagent_panel/coalesce_patch.py +242 -0
  271. code_puppy_core_plugins/subagent_panel/panel_render.py +145 -0
  272. code_puppy_core_plugins/subagent_panel/register_callbacks.py +535 -0
  273. code_puppy_core_plugins/subagent_panel/resume_repaint.py +112 -0
  274. code_puppy_core_plugins/subagent_panel/state.py +231 -0
  275. code_puppy_core_plugins/switch_agent_resume/__init__.py +5 -0
  276. code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +314 -0
  277. code_puppy_core_plugins/theme/README.md +86 -0
  278. code_puppy_core_plugins/theme/__init__.py +14 -0
  279. code_puppy_core_plugins/theme/bundled_palettes.py +346 -0
  280. code_puppy_core_plugins/theme/content_styles.py +146 -0
  281. code_puppy_core_plugins/theme/osc_palette.py +178 -0
  282. code_puppy_core_plugins/theme/picker.py +358 -0
  283. code_puppy_core_plugins/theme/prompt_toolkit_theme.py +113 -0
  284. code_puppy_core_plugins/theme/register_callbacks.py +348 -0
  285. code_puppy_core_plugins/theme/rich_themes.py +202 -0
  286. code_puppy_core_plugins/theme/themes.py +720 -0
  287. code_puppy_core_plugins/timestamp_heartbeat/__init__.py +1 -0
  288. code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +114 -0
  289. code_puppy_core_plugins/token_ratio_learner/__init__.py +5 -0
  290. code_puppy_core_plugins/token_ratio_learner/ratios.py +208 -0
  291. code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +213 -0
  292. code_puppy_core_plugins/universal_constructor/__init__.py +13 -0
  293. code_puppy_core_plugins/universal_constructor/models.py +138 -0
  294. code_puppy_core_plugins/universal_constructor/provider.py +62 -0
  295. code_puppy_core_plugins/universal_constructor/register_callbacks.py +75 -0
  296. code_puppy_core_plugins/universal_constructor/registry.py +302 -0
  297. code_puppy_core_plugins/universal_constructor/sandbox.py +584 -0
  298. code_puppy_core_plugins/wide_completion_menu/__init__.py +6 -0
  299. code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +165 -0
  300. code_puppy_core_plugins/wiggum/__init__.py +1 -0
  301. code_puppy_core_plugins/wiggum/goal_runs.py +91 -0
  302. code_puppy_core_plugins/wiggum/judge.py +299 -0
  303. code_puppy_core_plugins/wiggum/judge_config.py +249 -0
  304. code_puppy_core_plugins/wiggum/judges_menu.py +814 -0
  305. code_puppy_core_plugins/wiggum/register_callbacks.py +569 -0
  306. code_puppy_core_plugins/wiggum/state.py +89 -0
  307. code_puppy_core_plugins/yolo_cli/__init__.py +1 -0
  308. code_puppy_core_plugins/yolo_cli/register_callbacks.py +41 -0
  309. code_puppy_core_plugins-0.0.2.dist-info/METADATA +64 -0
  310. code_puppy_core_plugins-0.0.2.dist-info/RECORD +313 -0
  311. code_puppy_core_plugins-0.0.2.dist-info/WHEEL +4 -0
  312. code_puppy_core_plugins-0.0.2.dist-info/entry_points.txt +55 -0
  313. 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,5 @@
1
+ """Ollama cloud model setup plugin.
2
+
3
+ Provides `/ollama-setup <model>` to pull an Ollama cloud model and register
4
+ it in ~/.code_puppy/extra_models.json so it's immediately usable.
5
+ """
@@ -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
+ )