code-puppy-core-plugins 0.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- code_puppy_core_plugins/__init__.py +5 -0
- code_puppy_core_plugins/acp/README.md +266 -0
- code_puppy_core_plugins/acp/__init__.py +8 -0
- code_puppy_core_plugins/acp/agent.py +494 -0
- code_puppy_core_plugins/acp/bridge.py +309 -0
- code_puppy_core_plugins/acp/capabilities.py +73 -0
- code_puppy_core_plugins/acp/commands.py +116 -0
- code_puppy_core_plugins/acp/content.py +115 -0
- code_puppy_core_plugins/acp/io_delegation.py +231 -0
- code_puppy_core_plugins/acp/mcp_config.py +66 -0
- code_puppy_core_plugins/acp/permissions.py +159 -0
- code_puppy_core_plugins/acp/persistence.py +197 -0
- code_puppy_core_plugins/acp/register_callbacks.py +110 -0
- code_puppy_core_plugins/acp/replay.py +114 -0
- code_puppy_core_plugins/acp/session.py +329 -0
- code_puppy_core_plugins/acp/session_config.py +179 -0
- code_puppy_core_plugins/acp/state.py +135 -0
- code_puppy_core_plugins/agent_skills/__init__.py +22 -0
- code_puppy_core_plugins/agent_skills/config.py +208 -0
- code_puppy_core_plugins/agent_skills/discovery.py +337 -0
- code_puppy_core_plugins/agent_skills/downloader.py +392 -0
- code_puppy_core_plugins/agent_skills/enabled_skills.py +82 -0
- code_puppy_core_plugins/agent_skills/installer.py +22 -0
- code_puppy_core_plugins/agent_skills/metadata.py +219 -0
- code_puppy_core_plugins/agent_skills/prompt_builder.py +49 -0
- code_puppy_core_plugins/agent_skills/provider.py +52 -0
- code_puppy_core_plugins/agent_skills/register_callbacks.py +309 -0
- code_puppy_core_plugins/agent_skills/remote_catalog.py +322 -0
- code_puppy_core_plugins/agent_skills/skill_catalog.py +257 -0
- code_puppy_core_plugins/agent_skills/skill_commands.py +102 -0
- code_puppy_core_plugins/agent_skills/skills_install_menu.py +698 -0
- code_puppy_core_plugins/agent_skills/skills_menu.py +794 -0
- code_puppy_core_plugins/aws_bedrock/__init__.py +14 -0
- code_puppy_core_plugins/aws_bedrock/config.py +101 -0
- code_puppy_core_plugins/aws_bedrock/register_callbacks.py +243 -0
- code_puppy_core_plugins/aws_bedrock/utils.py +186 -0
- code_puppy_core_plugins/azure_foundry/README.md +238 -0
- code_puppy_core_plugins/azure_foundry/__init__.py +15 -0
- code_puppy_core_plugins/azure_foundry/config.py +126 -0
- code_puppy_core_plugins/azure_foundry/discovery.py +189 -0
- code_puppy_core_plugins/azure_foundry/register_callbacks.py +506 -0
- code_puppy_core_plugins/azure_foundry/token.py +182 -0
- code_puppy_core_plugins/azure_foundry/utils.py +375 -0
- code_puppy_core_plugins/btw/__init__.py +1 -0
- code_puppy_core_plugins/btw/inline_view.py +135 -0
- code_puppy_core_plugins/btw/register_callbacks.py +106 -0
- code_puppy_core_plugins/btw/side_query.py +91 -0
- code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +83 -0
- code_puppy_core_plugins/chatgpt_oauth/__init__.py +8 -0
- code_puppy_core_plugins/chatgpt_oauth/config.py +52 -0
- code_puppy_core_plugins/chatgpt_oauth/image_generation.py +253 -0
- code_puppy_core_plugins/chatgpt_oauth/image_tool.py +70 -0
- code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +461 -0
- code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +288 -0
- code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +663 -0
- code_puppy_core_plugins/chatgpt_oauth/usage.py +113 -0
- code_puppy_core_plugins/chatgpt_oauth/utils.py +534 -0
- code_puppy_core_plugins/claude_code_hooks/__init__.py +1 -0
- code_puppy_core_plugins/claude_code_hooks/config.py +137 -0
- code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +383 -0
- code_puppy_core_plugins/claude_code_oauth/README.md +167 -0
- code_puppy_core_plugins/claude_code_oauth/SETUP.md +93 -0
- code_puppy_core_plugins/claude_code_oauth/__init__.py +25 -0
- code_puppy_core_plugins/claude_code_oauth/config.py +59 -0
- code_puppy_core_plugins/claude_code_oauth/fast_mode.py +122 -0
- code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +64 -0
- code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +719 -0
- code_puppy_core_plugins/claude_code_oauth/test_plugin.py +285 -0
- code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +240 -0
- code_puppy_core_plugins/claude_code_oauth/utils.py +663 -0
- code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +155 -0
- code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +104 -0
- code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +147 -0
- code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +39 -0
- code_puppy_core_plugins/code_puppy_agent/SKILL.md +180 -0
- code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +136 -0
- code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +160 -0
- code_puppy_core_plugins/code_puppy_agent/__init__.py +5 -0
- code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +46 -0
- code_puppy_core_plugins/computer_use/NativeCapture.swift +123 -0
- code_puppy_core_plugins/computer_use/README.md +109 -0
- code_puppy_core_plugins/computer_use/__init__.py +1 -0
- code_puppy_core_plugins/computer_use/accessibility.py +163 -0
- code_puppy_core_plugins/computer_use/activation.py +75 -0
- code_puppy_core_plugins/computer_use/backend.py +584 -0
- code_puppy_core_plugins/computer_use/backend_types.py +5 -0
- code_puppy_core_plugins/computer_use/capture.py +110 -0
- code_puppy_core_plugins/computer_use/commands.py +62 -0
- code_puppy_core_plugins/computer_use/geometry.py +81 -0
- code_puppy_core_plugins/computer_use/inline_image.py +56 -0
- code_puppy_core_plugins/computer_use/keycodes.py +47 -0
- code_puppy_core_plugins/computer_use/policy.py +144 -0
- code_puppy_core_plugins/computer_use/register_callbacks.py +96 -0
- code_puppy_core_plugins/computer_use/safety.py +18 -0
- code_puppy_core_plugins/computer_use/settle.py +64 -0
- code_puppy_core_plugins/computer_use/state.py +86 -0
- code_puppy_core_plugins/computer_use/tools.py +469 -0
- code_puppy_core_plugins/context_indicator/__init__.py +14 -0
- code_puppy_core_plugins/context_indicator/register_callbacks.py +249 -0
- code_puppy_core_plugins/context_indicator/usage.py +40 -0
- code_puppy_core_plugins/copilot_auth/__init__.py +11 -0
- code_puppy_core_plugins/copilot_auth/config.py +93 -0
- code_puppy_core_plugins/copilot_auth/reasoning_client.py +409 -0
- code_puppy_core_plugins/copilot_auth/register_callbacks.py +460 -0
- code_puppy_core_plugins/copilot_auth/utils.py +587 -0
- code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- code_puppy_core_plugins/customizable_commands/register_callbacks.py +464 -0
- code_puppy_core_plugins/dbos_durable_exec/__init__.py +1 -0
- code_puppy_core_plugins/dbos_durable_exec/cancel.py +15 -0
- code_puppy_core_plugins/dbos_durable_exec/commands.py +31 -0
- code_puppy_core_plugins/dbos_durable_exec/config.py +31 -0
- code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +83 -0
- code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +45 -0
- code_puppy_core_plugins/dbos_durable_exec/runtime.py +65 -0
- code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +155 -0
- code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +16 -0
- code_puppy_core_plugins/dbos_durable_exec/wrapper.py +58 -0
- code_puppy_core_plugins/destructive_command_guard/AGENTS.md +79 -0
- code_puppy_core_plugins/destructive_command_guard/__init__.py +14 -0
- code_puppy_core_plugins/destructive_command_guard/detector.py +374 -0
- code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +165 -0
- code_puppy_core_plugins/emoji_filter/__init__.py +12 -0
- code_puppy_core_plugins/emoji_filter/config.py +26 -0
- code_puppy_core_plugins/emoji_filter/register_callbacks.py +238 -0
- code_puppy_core_plugins/emoji_filter/stripper.py +45 -0
- code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +116 -0
- code_puppy_core_plugins/example_custom_command/README.md +328 -0
- code_puppy_core_plugins/example_custom_command/register_callbacks.py +66 -0
- code_puppy_core_plugins/file_permission_handler/__init__.py +4 -0
- code_puppy_core_plugins/file_permission_handler/register_callbacks.py +575 -0
- code_puppy_core_plugins/flux_bootstrap/__init__.py +5 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +173 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +86 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +167 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +392 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +51 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +129 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +211 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +181 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +71 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +16 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +103 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +108 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +195 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +221 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +151 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +208 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +180 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +304 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +120 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +179 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +46 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +155 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +154 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +248 -0
- code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +345 -0
- code_puppy_core_plugins/flux_bootstrap/installer.py +256 -0
- code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +71 -0
- code_puppy_core_plugins/force_push_guard/__init__.py +5 -0
- code_puppy_core_plugins/force_push_guard/detector.py +96 -0
- code_puppy_core_plugins/force_push_guard/register_callbacks.py +161 -0
- code_puppy_core_plugins/fork/__init__.py +7 -0
- code_puppy_core_plugins/fork/register_callbacks.py +445 -0
- code_puppy_core_plugins/frontend_emitter/__init__.py +25 -0
- code_puppy_core_plugins/frontend_emitter/emitter.py +249 -0
- code_puppy_core_plugins/frontend_emitter/register_callbacks.py +412 -0
- code_puppy_core_plugins/frontend_emitter/session_context.py +50 -0
- code_puppy_core_plugins/grok_oauth/__init__.py +6 -0
- code_puppy_core_plugins/grok_oauth/config.py +49 -0
- code_puppy_core_plugins/grok_oauth/oauth_flow.py +213 -0
- code_puppy_core_plugins/grok_oauth/register_callbacks.py +132 -0
- code_puppy_core_plugins/grok_oauth/utils.py +195 -0
- code_puppy_core_plugins/herdr/README.md +168 -0
- code_puppy_core_plugins/herdr/__init__.py +9 -0
- code_puppy_core_plugins/herdr/client.py +339 -0
- code_puppy_core_plugins/herdr/register_callbacks.py +140 -0
- code_puppy_core_plugins/herdr/reporter.py +212 -0
- code_puppy_core_plugins/herdr/smoke.py +143 -0
- code_puppy_core_plugins/herdr/sources.py +133 -0
- code_puppy_core_plugins/hook_creator/__init__.py +1 -0
- code_puppy_core_plugins/hook_creator/register_callbacks.py +33 -0
- code_puppy_core_plugins/hook_manager/__init__.py +1 -0
- code_puppy_core_plugins/hook_manager/config.py +290 -0
- code_puppy_core_plugins/hook_manager/hooks_menu.py +571 -0
- code_puppy_core_plugins/hook_manager/register_callbacks.py +227 -0
- code_puppy_core_plugins/meta_oauth/__init__.py +1 -0
- code_puppy_core_plugins/meta_oauth/config.py +55 -0
- code_puppy_core_plugins/meta_oauth/oauth_flow.py +109 -0
- code_puppy_core_plugins/meta_oauth/register_callbacks.py +154 -0
- code_puppy_core_plugins/meta_oauth/utils.py +252 -0
- code_puppy_core_plugins/namespace_skill_search/README.md +118 -0
- code_puppy_core_plugins/namespace_skill_search/__init__.py +15 -0
- code_puppy_core_plugins/namespace_skill_search/namespaces.py +125 -0
- code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +99 -0
- code_puppy_core_plugins/namespace_skill_search/search_tool.py +158 -0
- code_puppy_core_plugins/no_tools/__init__.py +0 -0
- code_puppy_core_plugins/no_tools/register_callbacks.py +42 -0
- code_puppy_core_plugins/oauth_pasteback.py +110 -0
- code_puppy_core_plugins/oauth_puppy_html.py +194 -0
- code_puppy_core_plugins/obsidian_agent/README.md +52 -0
- code_puppy_core_plugins/obsidian_agent/__init__.py +8 -0
- code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +147 -0
- code_puppy_core_plugins/obsidian_agent/register_callbacks.py +13 -0
- code_puppy_core_plugins/ollama/__init__.py +1 -0
- code_puppy_core_plugins/ollama/register_callbacks.py +127 -0
- code_puppy_core_plugins/ollama_setup/__init__.py +5 -0
- code_puppy_core_plugins/ollama_setup/completer.py +38 -0
- code_puppy_core_plugins/ollama_setup/register_callbacks.py +419 -0
- code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- code_puppy_core_plugins/plugin_list/plugin_contributions.py +348 -0
- code_puppy_core_plugins/plugin_list/plugin_meta.py +67 -0
- code_puppy_core_plugins/plugin_list/plugin_text_utils.py +173 -0
- code_puppy_core_plugins/plugin_list/plugins_menu.py +455 -0
- code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +194 -0
- code_puppy_core_plugins/plugin_list/plugins_menu_render.py +431 -0
- code_puppy_core_plugins/plugin_list/project_trust_flow.py +162 -0
- code_puppy_core_plugins/plugin_list/register_callbacks.py +281 -0
- code_puppy_core_plugins/pop_command/__init__.py +1 -0
- code_puppy_core_plugins/pop_command/register_callbacks.py +191 -0
- code_puppy_core_plugins/prompt_newline/__init__.py +13 -0
- code_puppy_core_plugins/prompt_newline/config.py +21 -0
- code_puppy_core_plugins/prompt_newline/register_callbacks.py +163 -0
- code_puppy_core_plugins/prune/__init__.py +1 -0
- code_puppy_core_plugins/prune/prune_menu.py +308 -0
- code_puppy_core_plugins/prune/prune_model.py +517 -0
- code_puppy_core_plugins/prune/prune_render.py +354 -0
- code_puppy_core_plugins/prune/register_callbacks.py +388 -0
- code_puppy_core_plugins/puppy_kennel/README.md +203 -0
- code_puppy_core_plugins/puppy_kennel/__init__.py +6 -0
- code_puppy_core_plugins/puppy_kennel/commands.py +206 -0
- code_puppy_core_plugins/puppy_kennel/config.py +36 -0
- code_puppy_core_plugins/puppy_kennel/kennel.py +368 -0
- code_puppy_core_plugins/puppy_kennel/packer.py +152 -0
- code_puppy_core_plugins/puppy_kennel/recorder.py +83 -0
- code_puppy_core_plugins/puppy_kennel/register_callbacks.py +109 -0
- code_puppy_core_plugins/puppy_kennel/retriever.py +28 -0
- code_puppy_core_plugins/puppy_kennel/schema.py +78 -0
- code_puppy_core_plugins/puppy_kennel/state.py +68 -0
- code_puppy_core_plugins/puppy_kennel/tools.py +449 -0
- code_puppy_core_plugins/puppy_kennel/wings.py +110 -0
- code_puppy_core_plugins/puppy_spinner/README.md +93 -0
- code_puppy_core_plugins/puppy_spinner/__init__.py +11 -0
- code_puppy_core_plugins/puppy_spinner/builtin_frames.py +172 -0
- code_puppy_core_plugins/puppy_spinner/commands.py +116 -0
- code_puppy_core_plugins/puppy_spinner/picker.py +379 -0
- code_puppy_core_plugins/puppy_spinner/register_callbacks.py +193 -0
- code_puppy_core_plugins/puppy_spinner/spinners.py +444 -0
- code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- code_puppy_core_plugins/quick_resume/register_callbacks.py +77 -0
- code_puppy_core_plugins/review_pr/__init__.py +1 -0
- code_puppy_core_plugins/review_pr/register_callbacks.py +162 -0
- code_puppy_core_plugins/shell_safety/__init__.py +6 -0
- code_puppy_core_plugins/shell_safety/agent_shell_safety.py +69 -0
- code_puppy_core_plugins/shell_safety/command_cache.py +156 -0
- code_puppy_core_plugins/shell_safety/register_callbacks.py +203 -0
- code_puppy_core_plugins/stack_dump/__init__.py +1 -0
- code_puppy_core_plugins/stack_dump/register_callbacks.py +79 -0
- code_puppy_core_plugins/statusline/__init__.py +14 -0
- code_puppy_core_plugins/statusline/config.py +68 -0
- code_puppy_core_plugins/statusline/payload.py +138 -0
- code_puppy_core_plugins/statusline/prompt_patch.py +76 -0
- code_puppy_core_plugins/statusline/register_callbacks.py +45 -0
- code_puppy_core_plugins/statusline/runner.py +122 -0
- code_puppy_core_plugins/statusline/statusline_command.py +197 -0
- code_puppy_core_plugins/steer_queue/__init__.py +10 -0
- code_puppy_core_plugins/steer_queue/queue_menu.py +444 -0
- code_puppy_core_plugins/steer_queue/register_callbacks.py +138 -0
- code_puppy_core_plugins/subagent_panel/README.md +102 -0
- code_puppy_core_plugins/subagent_panel/__init__.py +24 -0
- code_puppy_core_plugins/subagent_panel/coalesce_patch.py +242 -0
- code_puppy_core_plugins/subagent_panel/panel_render.py +145 -0
- code_puppy_core_plugins/subagent_panel/register_callbacks.py +535 -0
- code_puppy_core_plugins/subagent_panel/resume_repaint.py +112 -0
- code_puppy_core_plugins/subagent_panel/state.py +231 -0
- code_puppy_core_plugins/switch_agent_resume/__init__.py +5 -0
- code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +314 -0
- code_puppy_core_plugins/theme/README.md +86 -0
- code_puppy_core_plugins/theme/__init__.py +14 -0
- code_puppy_core_plugins/theme/bundled_palettes.py +346 -0
- code_puppy_core_plugins/theme/content_styles.py +146 -0
- code_puppy_core_plugins/theme/osc_palette.py +178 -0
- code_puppy_core_plugins/theme/picker.py +358 -0
- code_puppy_core_plugins/theme/prompt_toolkit_theme.py +113 -0
- code_puppy_core_plugins/theme/register_callbacks.py +348 -0
- code_puppy_core_plugins/theme/rich_themes.py +202 -0
- code_puppy_core_plugins/theme/themes.py +720 -0
- code_puppy_core_plugins/timestamp_heartbeat/__init__.py +1 -0
- code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +114 -0
- code_puppy_core_plugins/token_ratio_learner/__init__.py +5 -0
- code_puppy_core_plugins/token_ratio_learner/ratios.py +208 -0
- code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +213 -0
- code_puppy_core_plugins/universal_constructor/__init__.py +13 -0
- code_puppy_core_plugins/universal_constructor/models.py +138 -0
- code_puppy_core_plugins/universal_constructor/provider.py +62 -0
- code_puppy_core_plugins/universal_constructor/register_callbacks.py +75 -0
- code_puppy_core_plugins/universal_constructor/registry.py +302 -0
- code_puppy_core_plugins/universal_constructor/sandbox.py +584 -0
- code_puppy_core_plugins/wide_completion_menu/__init__.py +6 -0
- code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +165 -0
- code_puppy_core_plugins/wiggum/__init__.py +1 -0
- code_puppy_core_plugins/wiggum/goal_runs.py +91 -0
- code_puppy_core_plugins/wiggum/judge.py +299 -0
- code_puppy_core_plugins/wiggum/judge_config.py +249 -0
- code_puppy_core_plugins/wiggum/judges_menu.py +814 -0
- code_puppy_core_plugins/wiggum/register_callbacks.py +569 -0
- code_puppy_core_plugins/wiggum/state.py +89 -0
- code_puppy_core_plugins/yolo_cli/__init__.py +1 -0
- code_puppy_core_plugins/yolo_cli/register_callbacks.py +41 -0
- code_puppy_core_plugins-0.0.2.dist-info/METADATA +64 -0
- code_puppy_core_plugins-0.0.2.dist-info/RECORD +313 -0
- code_puppy_core_plugins-0.0.2.dist-info/WHEEL +4 -0
- code_puppy_core_plugins-0.0.2.dist-info/entry_points.txt +55 -0
- code_puppy_core_plugins-0.0.2.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,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
|