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,288 @@
1
+ """ChatGPT OAuth plugin callbacks aligned with ChatMock flow.
2
+
3
+ Provides OAuth authentication for ChatGPT models and registers
4
+ the 'chatgpt_oauth' model type handler.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import os
10
+ from pathlib import Path
11
+ from typing import Any, Dict, List, Optional, Tuple
12
+
13
+ from code_puppy.callbacks import register_callback
14
+ from code_puppy.i18n import t
15
+ from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
16
+ from code_puppy.model_switching import set_model_and_reload_agent
17
+ from code_puppy_core_plugins.agent_skills.discovery import refresh_skill_cache
18
+
19
+ from .config import CHATGPT_OAUTH_CONFIG, get_token_storage_path
20
+ from .oauth_flow import run_oauth_flow
21
+ from .usage import get_usage_status, refresh_usage_in_background
22
+ from .utils import (
23
+ get_valid_access_token,
24
+ load_chatgpt_models,
25
+ load_stored_tokens,
26
+ remove_chatgpt_models,
27
+ )
28
+
29
+
30
+ def _custom_help() -> List[Tuple[str, str]]:
31
+ return [
32
+ (
33
+ "chatgpt-auth",
34
+ "Authenticate with ChatGPT via OAuth and import available models",
35
+ ),
36
+ ("codex-auth", "Alias for /chatgpt-auth"),
37
+ (
38
+ "chatgpt-status",
39
+ "Check ChatGPT OAuth authentication status and configured models",
40
+ ),
41
+ ("codex-status", "Alias for /chatgpt-status"),
42
+ ("chatgpt-logout", "Remove ChatGPT OAuth tokens and imported models"),
43
+ ("codex-logout", "Alias for /chatgpt-logout"),
44
+ ("codex-imagegen <prompt>", "Generate an image with Codex OAuth"),
45
+ ]
46
+
47
+
48
+ def _handle_chatgpt_status() -> None:
49
+ tokens = load_stored_tokens()
50
+ if tokens and tokens.get("access_token"):
51
+ emit_success("🔐 ChatGPT OAuth: Authenticated")
52
+
53
+ api_key = tokens.get("api_key")
54
+ if api_key:
55
+ os.environ[CHATGPT_OAUTH_CONFIG["api_key_env_var"]] = api_key
56
+ emit_info("✅ OAuth access token available for API requests")
57
+ else:
58
+ emit_warning("⚠️ No access token obtained. Authentication may have failed.")
59
+
60
+ chatgpt_models = [
61
+ name
62
+ for name, cfg in load_chatgpt_models().items()
63
+ if cfg.get("oauth_source") == "chatgpt-oauth-plugin"
64
+ ]
65
+ if chatgpt_models:
66
+ emit_info(f"🎯 Configured ChatGPT models: {', '.join(chatgpt_models)}")
67
+ else:
68
+ emit_warning("⚠️ No ChatGPT models configured yet.")
69
+ else:
70
+ emit_warning("🔓 ChatGPT OAuth: Not authenticated")
71
+ emit_info("🌐 Run /chatgpt-auth to launch the browser sign-in flow.")
72
+
73
+
74
+ def _handle_chatgpt_logout() -> None:
75
+ was_authenticated = _is_codex_oauth_authenticated()
76
+
77
+ token_path = get_token_storage_path()
78
+ if token_path.exists():
79
+ token_path.unlink()
80
+ emit_info("Removed ChatGPT OAuth tokens")
81
+
82
+ if CHATGPT_OAUTH_CONFIG["api_key_env_var"] in os.environ:
83
+ del os.environ[CHATGPT_OAUTH_CONFIG["api_key_env_var"]]
84
+
85
+ removed = remove_chatgpt_models()
86
+ if removed:
87
+ emit_info(f"Removed {removed} ChatGPT models from configuration")
88
+
89
+ emit_success("ChatGPT logout complete")
90
+
91
+ if was_authenticated:
92
+ _reload_active_agent()
93
+ # Mirror the tool-unbinding reload above: the codex-imagegen skill is auth-gated
94
+ # too, so drop it from the skill cache instead of leaving it visible until restart.
95
+ refresh_skill_cache()
96
+
97
+
98
+ def _is_codex_oauth_authenticated() -> bool:
99
+ """Whether Codex OAuth tokens are present on disk."""
100
+ tokens = load_stored_tokens()
101
+ return bool(tokens and tokens.get("access_token") and tokens.get("account_id"))
102
+
103
+
104
+ def _reload_active_agent() -> None:
105
+ """Reload the active agent so tool advertisement changes take effect."""
106
+ from code_puppy.agents import get_current_agent
107
+
108
+ try:
109
+ current_agent = get_current_agent()
110
+ except Exception:
111
+ return
112
+ if current_agent is None:
113
+ return
114
+ try:
115
+ if hasattr(current_agent, "refresh_config"):
116
+ try:
117
+ current_agent.refresh_config()
118
+ except Exception:
119
+ pass
120
+ current_agent.reload_code_generation_agent()
121
+ except Exception as exc:
122
+ emit_warning(t("codex.logout.reload_failed", error=str(exc)))
123
+
124
+
125
+ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
126
+ if not name:
127
+ return None
128
+
129
+ if name in {"chatgpt-auth", "codex-auth"}:
130
+ run_oauth_flow()
131
+ set_model_and_reload_agent("codex-gpt-5.6-sol")
132
+ # Auth just succeeded: re-discover the auth-gated codex-imagegen skill now
133
+ # rather than waiting for the next process restart.
134
+ refresh_skill_cache()
135
+ return True
136
+
137
+ if name in {"chatgpt-status", "codex-status"}:
138
+ _handle_chatgpt_status()
139
+ return True
140
+
141
+ if name in {"chatgpt-logout", "codex-logout"}:
142
+ _handle_chatgpt_logout()
143
+ return True
144
+
145
+ if name == "codex-imagegen":
146
+ from .image_generation import (
147
+ CodexImageGenerationError,
148
+ emit_iterm_image,
149
+ generate_image,
150
+ )
151
+
152
+ _, _, prompt = command.partition(" ")
153
+ if not prompt.strip():
154
+ emit_warning(t("codex.imagegen.usage"))
155
+ return True
156
+ emit_info(t("codex.imagegen.generating"))
157
+ try:
158
+ output_path = generate_image(prompt)
159
+ except CodexImageGenerationError as exc:
160
+ emit_error(str(exc))
161
+ else:
162
+ emit_success(t("codex.imagegen.saved", path=str(output_path)))
163
+ emit_iterm_image(output_path)
164
+ return True
165
+
166
+ return None
167
+
168
+
169
+ def _create_chatgpt_oauth_model(
170
+ model_name: str, model_config: Dict, config: Dict
171
+ ) -> Any:
172
+ """Create a ChatGPT OAuth model instance.
173
+
174
+ This handler is registered via the 'register_model_type' callback to handle
175
+ models with type='chatgpt_oauth'.
176
+ """
177
+ from pydantic_ai.models.openai import OpenAIResponsesModel
178
+ from pydantic_ai.providers.openai import OpenAIProvider
179
+
180
+ from code_puppy.chatgpt_codex_client import create_codex_async_client
181
+ from code_puppy.http_utils import get_cert_bundle_path
182
+
183
+ # Get a valid access token (refreshing if needed)
184
+ access_token = get_valid_access_token()
185
+ if not access_token:
186
+ emit_warning(
187
+ f"Failed to get valid ChatGPT OAuth token; skipping model '{model_config.get('name')}'. "
188
+ "Run /chatgpt-auth to authenticate."
189
+ )
190
+ return None
191
+
192
+ # Get account_id from stored tokens (required for ChatGPT-Account-Id header)
193
+ tokens = load_stored_tokens()
194
+ account_id = tokens.get("account_id", "") if tokens else ""
195
+ if not account_id:
196
+ emit_warning(
197
+ f"No account_id found in ChatGPT OAuth tokens; skipping model '{model_config.get('name')}'. "
198
+ "Run /chatgpt-auth to re-authenticate."
199
+ )
200
+ return None
201
+
202
+ # Refresh plan limits without delaying model creation or terminal rendering.
203
+ refresh_usage_in_background(access_token, account_id)
204
+
205
+ # Build headers for ChatGPT Codex API
206
+ originator = CHATGPT_OAUTH_CONFIG.get("originator", "codex_cli_rs")
207
+ client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.144.1")
208
+
209
+ headers = {
210
+ "ChatGPT-Account-Id": account_id,
211
+ "originator": originator,
212
+ "User-Agent": f"{originator}/{client_version}",
213
+ }
214
+ # Merge with any headers from model config
215
+ config_headers = model_config.get("custom_endpoint", {}).get("headers", {})
216
+ headers.update(config_headers)
217
+
218
+ # Get base URL - Codex API uses chatgpt.com, not api.openai.com
219
+ base_url = model_config.get("custom_endpoint", {}).get(
220
+ "url", CHATGPT_OAUTH_CONFIG["api_base_url"]
221
+ )
222
+
223
+ # Create HTTP client with Codex interceptor for store=false injection
224
+ verify = get_cert_bundle_path()
225
+ client = create_codex_async_client(headers=headers, verify=verify)
226
+
227
+ provider = OpenAIProvider(
228
+ api_key=access_token,
229
+ base_url=base_url,
230
+ http_client=client,
231
+ )
232
+
233
+ # ChatGPT Codex API only supports Responses format
234
+ return OpenAIResponsesModel(model_name=model_config["name"], provider=provider)
235
+
236
+
237
+ def _register_imagegen_skill() -> list[dict[str, str]]:
238
+ # Same auth gate as _advertise_imagegen_tool: hide the skill so a model can't
239
+ # activate it, attempt codex_imagegen(...), and only then discover it's unavailable.
240
+ if not _is_codex_oauth_authenticated():
241
+ return []
242
+ return [
243
+ {
244
+ "name": "codex-imagegen",
245
+ "skill_md_path": str(Path(__file__).with_name("IMAGEGEN_SKILL.md")),
246
+ }
247
+ ]
248
+
249
+
250
+ def _register_imagegen_tools() -> list[dict[str, Any]]:
251
+ from .image_tool import register_tools_callback
252
+
253
+ return register_tools_callback()
254
+
255
+
256
+ def _advertise_imagegen_tool(agent_name: str | None = None) -> list[str]:
257
+ del agent_name
258
+ if not _is_codex_oauth_authenticated():
259
+ return []
260
+ return ["codex_imagegen"]
261
+
262
+
263
+ def _register_model_types() -> List[Dict[str, Any]]:
264
+ """Register the chatgpt_oauth model type handler."""
265
+ return [{"type": "chatgpt_oauth", "handler": _create_chatgpt_oauth_model}]
266
+
267
+
268
+ def _refresh_usage_on_agent_run(
269
+ agent_name: str, model_name: str, session_id: str | None = None
270
+ ) -> None:
271
+ """Keep limits fresh for Codex runs; the actual HTTP request is asynchronous."""
272
+ del agent_name, session_id
273
+ if not model_name.startswith("codex-"):
274
+ return
275
+ tokens = load_stored_tokens() or {}
276
+ refresh_usage_in_background(
277
+ tokens.get("access_token", ""), tokens.get("account_id", "")
278
+ )
279
+
280
+
281
+ register_callback("custom_command_help", _custom_help)
282
+ register_callback("custom_command", _handle_custom_command)
283
+ register_callback("usage_status", get_usage_status)
284
+ register_callback("register_model_type", _register_model_types)
285
+ register_callback("register_skills", _register_imagegen_skill)
286
+ register_callback("register_tools", _register_imagegen_tools)
287
+ register_callback("register_agent_tools", _advertise_imagegen_tool)
288
+ register_callback("agent_run_start", _refresh_usage_on_agent_run)