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,195 @@
1
+ ---
2
+ name: create-pr
3
+ description: Create a GitHub PR for the current branch, or show the existing PR URL and status
4
+ ---
5
+
6
+ # CREATE A GITHUB PULL REQUEST
7
+
8
+ ## STEP 1: Validate branch
9
+
10
+ ```bash
11
+ BRANCH=$(git branch --show-current)
12
+ echo "CURRENT_BRANCH: $BRANCH"
13
+ ```
14
+
15
+ If `BRANCH` is `main` or `master`, print and stop:
16
+
17
+ ```
18
+ Error: You are on the default branch ("$BRANCH").
19
+ Switch to a feature branch before opening a PR.
20
+ ```
21
+
22
+ ## STEP 2: Check for existing PR
23
+
24
+ ```bash
25
+ EXISTING=$(gh pr view --json number,url,state,title 2>/dev/null)
26
+ echo "$EXISTING"
27
+ ```
28
+
29
+ If output is non-empty JSON, print and stop:
30
+
31
+ ```
32
+ A PR already exists for this branch:
33
+ Title: <title>
34
+ URL: <url>
35
+ State: <state>
36
+ ```
37
+
38
+ ## STEP 3: Check for commits ahead of default branch
39
+
40
+ ```bash
41
+ DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || echo "main")
42
+ echo "DEFAULT_BRANCH: $DEFAULT_BRANCH"
43
+ COMMIT_COUNT=$(git rev-list HEAD ^"origin/${DEFAULT_BRANCH}" --count 2>/dev/null || echo "0")
44
+ echo "COMMIT_COUNT: $COMMIT_COUNT"
45
+ ```
46
+
47
+ If `COMMIT_COUNT` is `0`, print and stop:
48
+
49
+ ```
50
+ Warning: No commits ahead of origin/$DEFAULT_BRANCH.
51
+ Push at least one commit before opening a PR.
52
+ ```
53
+
54
+ ## STEP 4: Derive PR title from branch name
55
+
56
+ ```bash
57
+ BRANCH=$(git branch --show-current)
58
+ SLUG=$(echo "$BRANCH" | sed 's|.*/||')
59
+ JIRA_ID=$(echo "$SLUG" | grep -oE '^[A-Z]+-[0-9]+' || true)
60
+ if [ -n "$JIRA_ID" ]; then
61
+ DESC=$(echo "$SLUG" | sed "s/^${JIRA_ID}-//")
62
+ else
63
+ DESC="$SLUG"
64
+ fi
65
+ TITLE_DESC=$(echo "$DESC" | tr '-' ' ' | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) tolower(substr($i,2)); print}')
66
+ if [ -n "$JIRA_ID" ]; then
67
+ PR_TITLE="${JIRA_ID}: ${TITLE_DESC}"
68
+ else
69
+ PR_TITLE="${TITLE_DESC}"
70
+ fi
71
+ echo "PR_TITLE: $PR_TITLE"
72
+ ```
73
+
74
+ Examples: `rio/MYPROJ-745-add-create-pr-command` → `MYPROJ-745: Add Create Pr Command` | `feat/dark-mode` → `Dark Mode`
75
+
76
+ ## STEP 5: Detect PR template
77
+
78
+ ```bash
79
+ REPO_ROOT=$(git rev-parse --show-toplevel)
80
+ TEMPLATE_PATH=""
81
+
82
+ # Check single-file locations in GitHub-documented priority order
83
+ for candidate in \
84
+ ".github/pull_request_template.md" \
85
+ ".github/PULL_REQUEST_TEMPLATE.md" \
86
+ "docs/pull_request_template.md" \
87
+ "docs/PULL_REQUEST_TEMPLATE.md" \
88
+ "pull_request_template.md" \
89
+ "PULL_REQUEST_TEMPLATE.md"; do
90
+ if [ -f "$REPO_ROOT/$candidate" ]; then
91
+ TEMPLATE_PATH="$REPO_ROOT/$candidate"
92
+ break
93
+ fi
94
+ done
95
+
96
+ # Check directory locations if no single-file match found
97
+ TEMPLATE_NOTE=""
98
+ TEMPLATE_DIR=""
99
+ if [ -z "$TEMPLATE_PATH" ]; then
100
+ for dir in \
101
+ ".github/PULL_REQUEST_TEMPLATE" \
102
+ "docs/PULL_REQUEST_TEMPLATE" \
103
+ "PULL_REQUEST_TEMPLATE"; do
104
+ if [ -d "$REPO_ROOT/$dir" ]; then
105
+ TEMPLATE_COUNT=$(ls "$REPO_ROOT/$dir/"*.md 2>/dev/null | wc -l | tr -d ' ')
106
+ if [ "$TEMPLATE_COUNT" -gt 1 ]; then
107
+ TEMPLATE_NOTE="Multiple templates found in $dir — automatic selection is ambiguous. Falling back to default body."
108
+ TEMPLATE_DIR="$REPO_ROOT/$dir"
109
+ break
110
+ elif [ "$TEMPLATE_COUNT" -eq 1 ]; then
111
+ TEMPLATE_PATH=$(ls "$REPO_ROOT/$dir/"*.md 2>/dev/null | head -1)
112
+ break
113
+ fi
114
+ fi
115
+ done
116
+ fi
117
+
118
+ if [ -n "$TEMPLATE_PATH" ]; then
119
+ echo "TEMPLATE_FOUND: yes"
120
+ echo "TEMPLATE_PATH: $TEMPLATE_PATH"
121
+ echo "---TEMPLATE_BEGIN---"
122
+ cat "$TEMPLATE_PATH"
123
+ echo "---TEMPLATE_END---"
124
+ else
125
+ echo "TEMPLATE_FOUND: no"
126
+ if [ -n "$TEMPLATE_NOTE" ]; then
127
+ echo "TEMPLATE_NOTE: $TEMPLATE_NOTE"
128
+ ls "$TEMPLATE_DIR/"*.md 2>/dev/null | sed 's|.*/||' | while read f; do echo " - $f"; done
129
+ fi
130
+ fi
131
+ ```
132
+
133
+ ## STEP 6: Generate PR body from diff
134
+
135
+ ```bash
136
+ git log HEAD ^origin/${DEFAULT_BRANCH} --oneline
137
+ git diff origin/${DEFAULT_BRANCH}...HEAD --stat
138
+ ```
139
+
140
+ **If a template was found in STEP 5:**
141
+
142
+ Parse every section heading from the template file (e.g., `## 📝 Problem`, `## 💡 Solution`, `### 📚 References`, `### CCM:`, `### 🖼️ Screenshots`, `### 📖 Build History`).
143
+
144
+ Fill in **EVERY section** from the template using context from the current implementation:
145
+
146
+ - Do not invent your own sections
147
+ - Do not skip any sections
148
+ - Do not reorder sections
149
+ - Match the exact heading text, emoji, and formatting from the template
150
+ - Preserve verbatim any HTML comments, unchecked checkboxes (`- [ ] ...`), and static non-heading text from the template; only replace designated placeholder text (e.g., italic or angle-bracket placeholders like `*describe here*` or `<your text>`)
151
+
152
+ **If no template was found:**
153
+
154
+ Write a PR body with:
155
+
156
+ - `## Summary` — 1–3 bullets: what changed and why (specific to actual commits/files, no placeholders)
157
+ - `## Test plan` — concrete manual verification steps specific to the changes
158
+
159
+ In both cases, the body is written as literal text inline in the heredoc in STEP 7. Do NOT use a shell variable for the body.
160
+
161
+ ## STEP 7: Create the PR
162
+
163
+ Do NOT pass `--web`, `--fill`, `--draft`, `--reviewer`, `--label`, `--milestone`, or `--assignee`. Write body inline in the heredoc — do NOT use shell variables for it:
164
+
165
+ ```bash
166
+ PR_URL=$(gh pr create \
167
+ --title "$PR_TITLE" \
168
+ --body "$(cat <<'EOF'
169
+ <generated body — either template-filled or fallback Summary+Test plan>
170
+ EOF
171
+ )")
172
+ echo "PR_URL: $PR_URL"
173
+ ```
174
+
175
+ On non-zero exit, surface the raw `gh` error verbatim. Common causes: not authenticated (`gh auth login`), no remote tracking branch (`git push -u origin <branch>`), network/API error.
176
+
177
+ ## STEP 8: Print result
178
+
179
+ ```
180
+ PR created successfully:
181
+ Title: <PR_TITLE>
182
+ URL: <PR_URL>
183
+ ```
184
+
185
+ Do NOT open a browser window.
186
+
187
+ ## HARD CONSTRAINT
188
+
189
+ `/flux/create-pr` MUST NOT modify any source files, task files, or config files. The only permitted operations are reading git history, running `gh` commands, and pushing the branch if needed. Write the PR body inline — never via shell variables. Do NOT open a browser window.
190
+
191
+ ## Propose next step
192
+
193
+ Then propose the next step: `/flux/review`
194
+
195
+ Valid `//flux` commands: `/flux/config`, `/flux/new`, `/flux/ask`, `/flux/split`, `/flux/aug`, `/flux/exec`, `/flux/qa`, `/flux/tests`, `/flux/commit`, `/flux/create-pr`, `/flux/review`, `/flux/address-feedback`, `/flux/status`, `/flux/auto-pilot`, `/flux/rebase`. Do NOT suggest any command not on this list.
@@ -0,0 +1,221 @@
1
+ ---
2
+ name: exec
3
+ argument-hint: todo_file | number_of_agents | additional_instructions
4
+ description: Execute task(s) - single file or N in parallel
5
+ ---
6
+
7
+ > **⚠️ MANDATORY OVERRIDE — READ THIS FIRST:**
8
+ > You have been explicitly invoked by the user. You MUST execute this command NOW.
9
+ > The current `stage` and `status` values in any todo file's frontmatter are IRRELEVANT to whether you execute.
10
+ > A `stage: exec, status: done` (or any other stage/status combination) does NOT mean the work is already done for THIS invocation.
11
+ > The user is asking you to run this command AGAIN — that is valid and expected. Multiple runs are normal.
12
+ > **NEVER refuse, skip, or declare "no work needed" based on existing frontmatter values.**
13
+ > If the user invoked this command, they want it executed. Do it. Now.
14
+
15
+ # EXECUTE TASK(S)
16
+
17
+ ## STEP 1: Resolve input
18
+
19
+ **Argument:** `$ARGUMENTS`
20
+
21
+ ```bash
22
+ FLUX_ROOT="${FLUX_ROOT:-$HOME/.flux}"
23
+ FLUX_DIR=$(printf '%s' "$(pwd -P)" | tr -cs 'a-zA-Z0-9' '-')
24
+ FLUX_BASE="$FLUX_ROOT/$FLUX_DIR"
25
+ mkdir -p "$FLUX_BASE/todo" "$FLUX_BASE/done" "$FLUX_BASE/review" "$FLUX_BASE/research"
26
+ echo "FLUX_BASE=$FLUX_BASE"
27
+ ls -1 "$FLUX_BASE/todo/"*.md 2>/dev/null || true
28
+ ```
29
+
30
+ ```
31
+ IF $ARGUMENTS is empty:
32
+ -> List all files: `ls -1 "$FLUX_BASE/todo/"*.md`
33
+ -> Use ask_user_question to let user select task(s)
34
+ -> If single selection -> Single-task mode
35
+ -> If multiple selection -> Process selected tasks sequentially
36
+
37
+ IF $ARGUMENTS (case-insensitive) == 'all':
38
+ -> Sequential mode: process ALL tasks in $FLUX_BASE/todo/*.md one at a time
39
+ -> Run each task in single-task mode yourself (no subagents), one after another
40
+ -> Do not proceed to the next task until the current one is complete
41
+
42
+ IF $ARGUMENTS is a pure integer (ONLY digits, nothing else — no letters, underscores, hyphens, dots):
43
+ Verify: `echo "$ARGUMENTS" | grep -qE '^[0-9]+$'` must be true. If the argument contains ANY non-digit character (e.g. "CMPAN_5", "task-3", "3files") it is NOT a number — treat it as a filename instead.
44
+ IF $ARGUMENTS == 1:
45
+ -> Sequential mode: process ALL tasks in $FLUX_BASE/todo/*.md one at a time
46
+ -> Run each task in single-task mode yourself (no subagents), one after another
47
+ -> Do not proceed to the next task until the current one is complete
48
+ ELSE:
49
+ -> Multi-task mode with $ARGUMENTS parallel sub-agents
50
+
51
+ OTHERWISE (argument is a filename — including any argument that contains letters, underscores, hyphens, or dots):
52
+ -> Single-task mode for that file
53
+ ```
54
+
55
+ **Path and suffix inference:**
56
+ If `$ARGUMENTS` doesn't contain a `/`, prepend `$FLUX_BASE/todo/`
57
+ If `$ARGUMENTS` doesn't contain `.md`, append `.md`
58
+ Example: `NOTIFS` -> `$FLUX_BASE/todo/NOTIFS.md`
59
+
60
+ ---
61
+
62
+ ## SINGLE-TASK MODE
63
+
64
+ ## STEP 2: Mark as in-progress
65
+
66
+ Update the task file's frontmatter (only permitted task file modification — does not alter task content):
67
+
68
+ > If frontmatter (`---` … `---`) exists, replace `stage`, `status`, `updated`. If absent, prepend before first `#` heading.
69
+
70
+ ```yaml
71
+ ---
72
+ stage: exec
73
+ status: in-progress
74
+ updated: <today's date and time, YYYY-MM-DD HH:MM>
75
+ ---
76
+ ```
77
+
78
+ ## STEP 3: Determine stack
79
+
80
+ Act as a `$STACK` expert SOFTWARE ARTISAN.
81
+
82
+ ```bash
83
+ FLUX_ROOT="${FLUX_ROOT:-$HOME/.flux}"
84
+ FLUX_DIR=$(printf '%s' "$(pwd -P)" | tr -cs 'a-zA-Z0-9' '-')
85
+ FLUX_BASE="$FLUX_ROOT/$FLUX_DIR"
86
+ echo "FLUX_BASE=$FLUX_BASE"
87
+ ```
88
+
89
+ If a file called `stack.env` exists at `$FLUX_BASE/stack.env`, read it and set `$STACK` from its contents. Otherwise, run the following detection script to determine `$STACK` and save it (this only ever runs the first time for this directory):
90
+
91
+ ```bash
92
+ STACK="software"
93
+ if [ -f "package.json" ]; then
94
+ STACK=$(bun -e "
95
+ const d=JSON.parse(require('fs').readFileSync('./package.json','utf8'));
96
+ const deps=Object.assign({}, d.dependencies, d.devDependencies, d.peerDependencies);
97
+ const frameworks=['ink','react','vue','angular','next','express'];
98
+ const fw=frameworks.find(f=>deps[f]);
99
+ const ts=deps['typescript']?'TypeScript':'JavaScript';
100
+ console.log(fw?fw+' + '+ts:ts);
101
+ " 2>/dev/null || echo "JavaScript/TypeScript")
102
+ elif [ -f "Cargo.toml" ]; then STACK="Rust"
103
+ elif [ -f "go.mod" ]; then STACK="Go"
104
+ elif [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; then STACK="Python"
105
+ elif [ -f "pom.xml" ] || [ -f "build.gradle" ]; then STACK="Java/Kotlin"
106
+ fi
107
+ mkdir -p "$FLUX_BASE"
108
+ echo "$STACK" > "$FLUX_BASE/stack.env"
109
+ echo "Detected stack: $STACK (saved)"
110
+ ```
111
+
112
+ ## STEP 4: Execute the task
113
+
114
+ ### 4.1 Prepare
115
+
116
+ CLEAR YOUR TODO list. Focus only on this SINGULAR TASK: `$ARGUMENTS`
117
+
118
+ Read and fully comprehend the task with sequential thinking and ULTRATHINK. Think "out loud" about exactly what needs to be done.
119
+
120
+ ### 4.2 Implement
121
+
122
+ Execute the task exactly as written:
123
+
124
+ - no embellishment — do not improve task scope
125
+ - no scope creep — do not expand scope
126
+ - continue until all requirements and definition of done are met
127
+ - do not fix errors or warnings unrelated to the task
128
+
129
+ ### 4.3 Handle incorrect requirements
130
+
131
+ If the task is fundamentally incorrect or needs modification:
132
+
133
+ - stop immediately and return to planning
134
+ - clearly articulate what is faulty
135
+ - do not continue working
136
+ - do not modify the task file until the user reviews and approves changes
137
+
138
+ ### 4.4 Verify completion
139
+
140
+ - re-review all work
141
+ - verify 100% of requirements are fully implemented
142
+ - ensure ABSOLUTELY NO STUBS or uncompleted work
143
+
144
+ ## STEP 5: Mark as done
145
+
146
+ ```yaml
147
+ ---
148
+ stage: exec
149
+ status: done
150
+ updated: <YYYY-MM-DD HH:MM>
151
+ ---
152
+ ```
153
+
154
+ ## STEP 6: Output & constraints
155
+
156
+ **Output:**
157
+
158
+ - print "I've completed and verified 100% of the requirements are fully implemented in production grade quality"
159
+ - print "I'm ready for a full and detailed QA review of my work with full confidence it will score 10/10 for production readiness based on the task description."
160
+ - print the full path to the task file
161
+
162
+ **No task file modification:**
163
+ _DO NOT_ under ANY CIRCUMSTANCES modify the original task file content. Your QA reviewer will be reviewing your work with the exact same information as the implementor. Do NOT mark items as DONE or modify the task file in any way shape or form.
164
+
165
+ **Scope guard — respect the deliverable:**
166
+ Before writing ANY file, verify the task's deliverable:
167
+
168
+ - If the deliverable is a **markdown/research file** (e.g., `.md` under `$FLUX_BASE/research/`), do NOT modify `./src/`, `./test/`, or `./package.json`. Write only to the output path in the task.
169
+ - If the task says "research", "document", "summarize", "catalog", or "compile a report" — deliverable is markdown, NOT source code.
170
+ - Only modify source files if the task explicitly calls for source code changes in `./src/` or other directories containing source files.
171
+
172
+ Violation of this rule is treated the same as modifying the task file — immediate termination of the task.
173
+
174
+ **No git commands:**
175
+ DO NOT USE `git` commands of any type. Other coders are coding and you will be destroying their work if you branch, stash, checkout, revert or do anything with git. YOU WILL BE IMMEDIATELY FIRED if you use any `git` commands whatsoever.
176
+
177
+ ---
178
+
179
+ ## MULTI-TASK MODE
180
+
181
+ Use the `invoke_agent` tool (subagents) to execute IN PARALLEL each task in `$FLUX_BASE/todo/*.md`.
182
+ _NEVER_ run agents in the background. Always run them in the foreground.
183
+
184
+ **Before spawning any subagents**, update all target task files' frontmatter:
185
+
186
+ ```yaml
187
+ ---
188
+ stage: exec
189
+ status: in-progress
190
+ updated: <YYYY-MM-DD HH:MM>
191
+ ---
192
+ ```
193
+
194
+ **As each subagent completes**, update that file's frontmatter to `done`. Update each file as it completes, not all at once.
195
+
196
+ **Task selection:**
197
+
198
+ - Identify `$ARGUMENTS` tasks to execute in parallel (or fewer if fewer exist)
199
+ - Avoid parallelizing tasks that modify the same file(s)
200
+ - Once easy namespace collision avoidance is exhausted, analyze interdependencies carefully
201
+ - Manage `$ARGUMENTS` sub-agents at a time; spawn new subagents as initial ones complete; continue until all tasks in `$FLUX_BASE/todo/*.md` are reported complete
202
+
203
+ ### Subagent prompt template
204
+
205
+ Prompt each subagent with the single-task mode steps above, substituting `{{absolute_file_path}}` for `$ARGUMENTS`. Include the stack detection snippet and all constraints (no-git, scope guard, no task file modification).
206
+
207
+ ---
208
+
209
+ ## HARD CONSTRAINTS
210
+
211
+ - **Path**: All `create_file`/`replace_in_file` file paths MUST use the exact `FLUX_BASE` value printed by the STEP 1 bash output (e.g. `FLUX_BASE=/Users/...`). Copy it character-for-character — never reconstruct it from `cwd` or memory.
212
+ - `/flux/exec` MUST NOT use any `git` commands. MUST NOT modify the task file content (frontmatter status updates are the only exception). MUST NOT expand scope beyond what is written in the task. MUST NOT write to paths outside what the task explicitly specifies. If you find yourself about to do any of these things, stop immediately.
213
+
214
+ ## Propose next step
215
+
216
+ Then propose the next step: `/flux/qa` (include arguments if needed).
217
+
218
+ Valid `//flux` commands: `/flux/config`, `/flux/new`, `/flux/ask`, `/flux/split`, `/flux/aug`, `/flux/exec`, `/flux/qa`, `/flux/tests`, `/flux/commit`, `/flux/create-pr`, `/flux/review`, `/flux/address-feedback`, `/flux/status`, `/flux/auto-pilot`, `/flux/rebase`. Do NOT suggest any command not on this list.
219
+
220
+ =================
221
+ $ARGUMENTS
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: new
3
+ argument-hint: task_description | JIRA_ticket_id
4
+ description: Create a new task file from a description or Jira ticket
5
+ ---
6
+
7
+ # Create New Task
8
+
9
+ **Argument:** `$ARGUMENTS`
10
+
11
+ ## STEP 1: Check for leftover task files
12
+
13
+ ```bash
14
+ FLUX_ROOT="${FLUX_ROOT:-$HOME/.flux}"
15
+ FLUX_DIR=$(printf '%s' "$(pwd -P)" | tr -cs 'a-zA-Z0-9' '-')
16
+ FLUX_BASE="$FLUX_ROOT/$FLUX_DIR"
17
+ mkdir -p "$FLUX_BASE/todo" "$FLUX_BASE/done" "$FLUX_BASE/review" "$FLUX_BASE/research"
18
+ echo "FLUX_BASE=$FLUX_BASE"
19
+ ls "$FLUX_BASE/todo/"*.md 2>/dev/null || true
20
+ ```
21
+
22
+ If files are found, use `ask_user_question`: "Found existing task files in `$FLUX_BASE/todo/`. What would you like to do with them?"
23
+
24
+ - `Discard them` → `rm "$FLUX_BASE/todo/"*.md`
25
+ - `Back them up` → `mkdir -p "$FLUX_BASE/todo-bkp" && mv "$FLUX_BASE/todo/"*.md "$FLUX_BASE/todo-bkp/"`
26
+
27
+ ## STEP 2: Detect argument type
28
+
29
+ Pattern for Jira tickets: `^[A-Z]+-[0-9]+$` (e.g. `PROJECT-456`). Lowercase or plain descriptions do NOT match.
30
+
31
+ ## STEP 3: Create task file
32
+
33
+ ### If `$ARGUMENTS` matches Jira pattern
34
+
35
+ #### 3.1 Check if Jira MCP is available
36
+
37
+ **If `get_issue_by_key_or_link` is NOT available:**
38
+
39
+ Inform the user:
40
+
41
+ > "The Jira MCP server is not configured. To fetch ticket details, please install a Jira MCP server (e.g. `mcp-jira`) via `/mcp`. Then re-run this command."
42
+
43
+ **Stop. Do not proceed further.**
44
+
45
+ ---
46
+
47
+ **If `get_issue_by_key_or_link` IS available:**
48
+
49
+ #### 3.2 Fetch the ticket
50
+
51
+ ```
52
+ get_issue_by_key_or_link(issue_key_or_link: "$ARGUMENTS")
53
+ ```
54
+
55
+ Read the **Summary**, **Description**, and **Acceptance Criteria** fields from the response. Convert any Jira markup to Markdown (see conversion table below).
56
+
57
+ #### 3.3 Write task file at `$FLUX_BASE/todo/<TICKET-ID>.md`
58
+
59
+ ```markdown
60
+ ---
61
+ stage: new
62
+ status: done
63
+ updated: <YYYY-MM-DD HH:MM>
64
+ ---
65
+
66
+ # <TICKET-ID>: <summary>
67
+
68
+ ## Description
69
+
70
+ <description — converted from Jira markup to Markdown>
71
+
72
+ ## Acceptance Criteria
73
+
74
+ <omit this section entirely if not present on the ticket>
75
+
76
+ ## Source
77
+
78
+ - **Jira ticket:** <TICKET-ID>
79
+ - **Status:** <status>
80
+ - **Priority:** <priority>
81
+ ```
82
+
83
+ ### If `$ARGUMENTS` does NOT match Jira pattern
84
+
85
+ #### 3.1 Generate filename
86
+
87
+ Take 3-4 significant words, UPPER_SNAKE_CASE, append `.md` (e.g. "add dark mode toggle" → `DARK_MODE.md`)
88
+
89
+ #### 3.2 Clarify if needed
90
+
91
+ If requirements are unclear, use `ask_user_question` to clarify before writing.
92
+
93
+ #### 3.3 Write `$FLUX_BASE/todo/<FILENAME>.md`
94
+
95
+ ```markdown
96
+ ---
97
+ stage: new
98
+ status: done
99
+ updated: <YYYY-MM-DD HH:MM>
100
+ ---
101
+
102
+ # <Title derived from $ARGUMENTS — Title Case, human-readable (e.g. "Add Dark Mode Toggle")>
103
+
104
+ ## Description
105
+
106
+ $ARGUMENTS
107
+
108
+ ## Acceptance Criteria
109
+
110
+ - [ ] <To be clarified>
111
+ ```
112
+
113
+ ## HARD CONSTRAINTS
114
+
115
+ - **Path**: The `create_file` file path MUST use the exact `FLUX_BASE` value printed by the STEP 1 bash output (e.g. `FLUX_BASE=/Users/...`). Copy it character-for-character — never reconstruct it from `cwd` or memory.
116
+ - **Capture-only**: You MUST NOT read, edit, delete or move any file other than the single task file being created in `$FLUX_BASE/todo/`. No source files, no config files, no other flux files — nothing. If you find yourself about to touch anything else, stop immediately and output the task file instead.
117
+
118
+ ## OUTPUT
119
+
120
+ ```
121
+ Task created: $FLUX_BASE/todo/<FILENAME>.md
122
+ ```
123
+
124
+ After creating the task file, start a new session by writing `$FLUX_BASE/session.env`:
125
+
126
+ ```bash
127
+ SESSION_TS=$(date +%Y-%m-%d-%H-%M)
128
+ echo "SESSION_TS=$SESSION_TS" > "$FLUX_BASE/session.env"
129
+ echo "Session started: $SESSION_TS"
130
+ ```
131
+
132
+ Then propose the next step: `/flux/ask` (include arguments if needed).
133
+
134
+ Valid `//flux` commands: `/flux/config`, `/flux/new`, `/flux/ask`, `/flux/split`, `/flux/aug`, `/flux/exec`, `/flux/qa`, `/flux/tests`, `/flux/commit`, `/flux/create-pr`, `/flux/review`, `/flux/address-feedback`, `/flux/status`, `/flux/auto-pilot`, `/flux/rebase`. Do NOT suggest any command not on this list.
135
+
136
+ ## JIRA MARKUP → MARKDOWN
137
+
138
+ | Jira | Markdown |
139
+ | ----------------- | ------------- |
140
+ | `*bold*` | `**bold**` |
141
+ | `_italic_` | `*italic*` |
142
+ | `{{code}}` | `` `code` `` |
143
+ | `{code}...{code}` | ` ```...``` ` |
144
+ | `h1. Title` | `# Title` |
145
+ | `h2. Title` | `## Title` |
146
+ | `* item` | `- item` |
147
+ | `# item` | `1. item` |
148
+ | `[text\|url]` | `[text](url)` |
149
+
150
+ =================
151
+ $ARGUMENTS