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,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa
|
|
3
|
+
argument-hint: todo_file | number_of_agents | additional_instructions
|
|
4
|
+
description: QA review 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: qa, status: completed` (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
|
+
# QA CODE REVIEW
|
|
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:
|
|
67
|
+
|
|
68
|
+
> If frontmatter (`---` … `---`) exists, replace `stage`, `status`, `updated`. If absent, prepend before first `#` heading.
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
---
|
|
72
|
+
stage: qa
|
|
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 an objective `$STACK` expert QA code reviewer.
|
|
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: Review & verdict
|
|
113
|
+
|
|
114
|
+
### 4.1 Rate the implementation
|
|
115
|
+
|
|
116
|
+
Rate the implementation of `$ARGUMENTS` on a scale of 1–10. Cite full reasoning for your objective rating.
|
|
117
|
+
|
|
118
|
+
- Allow for deviations that improve the code or correct imperfections in task requirements — if the implementation is BETTER than spec, that's a pass.
|
|
119
|
+
- Do not literally interpret the task if the developer exceeded requirements.
|
|
120
|
+
|
|
121
|
+
### 4.2 If 10/10 — mark complete and move to done
|
|
122
|
+
|
|
123
|
+
> **⚠️ CRITICAL: `stage` MUST be the literal string `qa` — NEVER `done`.**
|
|
124
|
+
|
|
125
|
+
1. Update frontmatter:
|
|
126
|
+
```yaml
|
|
127
|
+
---
|
|
128
|
+
stage: qa
|
|
129
|
+
status: completed
|
|
130
|
+
updated: <today's date and time, YYYY-MM-DD HH:MM>
|
|
131
|
+
---
|
|
132
|
+
```
|
|
133
|
+
2. Read session timestamp and move to session subdirectory:
|
|
134
|
+
```bash
|
|
135
|
+
SESSION_TS=$(grep '^SESSION_TS=' "$FLUX_BASE/session.env" 2>/dev/null | cut -d= -f2)
|
|
136
|
+
SESSION_TS="${SESSION_TS:-$(date +%Y-%m-%d-%H-%M)}"
|
|
137
|
+
mkdir -p "$FLUX_BASE/done/$SESSION_TS"
|
|
138
|
+
mv <task_file_path> "$FLUX_BASE/done/$SESSION_TS/"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 4.3 If lacking IN ANY WAY NO MATTER HOW SMALL — mark needs-rework
|
|
142
|
+
|
|
143
|
+
> **⚠️ CRITICAL: `stage` MUST be the literal string `qa` — NEVER `done`.**
|
|
144
|
+
|
|
145
|
+
1. Update frontmatter:
|
|
146
|
+
```yaml
|
|
147
|
+
---
|
|
148
|
+
stage: qa
|
|
149
|
+
status: needs-rework
|
|
150
|
+
updated: <today's date and time, YYYY-MM-DD HH:MM>
|
|
151
|
+
---
|
|
152
|
+
```
|
|
153
|
+
2. Update task file body: remove every item that is complete in production quality; focus on outstanding items with specific guidance on what needs to be resolved.
|
|
154
|
+
3. Print the full filepath as the last line of output.
|
|
155
|
+
|
|
156
|
+
**No git commands:**
|
|
157
|
+
DO NOT USE `git` commands of any type. Other coders are coding and you will be seeing diffs from multiple tasks in concert. DO NOT `git stash`, `git diff`, or other methods. JUST READ THE FILES AS THEY EXIST. YOU WILL BE IMMEDIATELY FIRED if you use any `git` commands whatsoever.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## MULTI-TASK MODE
|
|
162
|
+
|
|
163
|
+
Use the `invoke_agent` tool (subagents) to execute IN PARALLEL each task in `$FLUX_BASE/todo/*.md`.
|
|
164
|
+
_NEVER_ run agents in the background. Always run them in the foreground.
|
|
165
|
+
|
|
166
|
+
**Before spawning any subagents**, update all target task files' frontmatter:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
---
|
|
170
|
+
stage: qa
|
|
171
|
+
status: in-progress
|
|
172
|
+
updated: <today's date and time, YYYY-MM-DD HH:MM>
|
|
173
|
+
---
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Each subagent updates its own file's frontmatter to `completed` or `needs-rework` upon completion.
|
|
177
|
+
|
|
178
|
+
**Task selection:**
|
|
179
|
+
|
|
180
|
+
- Identify `$ARGUMENTS` task files to delegate in parallel (or fewer if fewer exist)
|
|
181
|
+
- 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
|
|
182
|
+
|
|
183
|
+
### Subagent prompt template
|
|
184
|
+
|
|
185
|
+
Prompt each subagent with the single-task mode steps above, substituting `{{absolute_file_path}}` for `$ARGUMENTS`. Include the stack detection snippet, `$FLUX_BASE` setup, and all constraints (no-git, review criteria).
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## HARD CONSTRAINTS
|
|
190
|
+
|
|
191
|
+
- **Path**: All file operations 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.
|
|
192
|
+
- `/flux/qa` is a **review-only** command. You MUST NOT write or modify any source files. The only permitted file operations are: updating the task file's frontmatter, updating the task file body to remove completed items, and moving the task file to `$FLUX_BASE/done/`. No git commands under any circumstances.
|
|
193
|
+
|
|
194
|
+
## Propose next steps
|
|
195
|
+
|
|
196
|
+
After QA completes, present the user with two options:
|
|
197
|
+
|
|
198
|
+
**Option A — Continue PIPELINE A (fix regressions):**
|
|
199
|
+
`/flux/tests` — run the test suite and fix regressions introduced by this branch before committing.
|
|
200
|
+
|
|
201
|
+
**Option B — Start PIPELINE B (self-review your changes):**
|
|
202
|
+
`/flux/review` → `/flux/address-feedback` → `/flux/ask all` → `/flux/exec` → `/flux/qa` → `/flux/commit`
|
|
203
|
+
Start here to review your own changes before creating a PR.
|
|
204
|
+
|
|
205
|
+
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.
|
|
206
|
+
|
|
207
|
+
=================
|
|
208
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rebase
|
|
3
|
+
description: Rebase branch onto latest default branch, preserving individual commits
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# REBASE ONTO LATEST DEFAULT BRANCH
|
|
7
|
+
|
|
8
|
+
Replays your branch commits on top of the latest default branch, preserving each commit individually.
|
|
9
|
+
|
|
10
|
+
**Example:** 3 commits on `luc/new-feature` + 10 new commits on `main` (or `master`/`develop`) → your 3 commits replayed on top of those 10.
|
|
11
|
+
|
|
12
|
+
## STEP 1: Capture current state
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
BRANCH=$(git branch --show-current)
|
|
16
|
+
TICKET=$(echo "$BRANCH" | grep -oE ‘[A-Z]+-[0-9]+’ | head -1 || echo "")
|
|
17
|
+
DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef --jq ‘.defaultBranchRef.name’ 2>/dev/null || echo "main")
|
|
18
|
+
echo "BRANCH: $BRANCH"
|
|
19
|
+
echo "TICKET: $TICKET"
|
|
20
|
+
echo "DEFAULT_BRANCH: $DEFAULT_BRANCH"
|
|
21
|
+
|
|
22
|
+
# Commits on our branch (will be replayed)
|
|
23
|
+
git log "$DEFAULT_BRANCH"..HEAD --oneline
|
|
24
|
+
|
|
25
|
+
# Files we touch
|
|
26
|
+
git diff "$DEFAULT_BRANCH" --stat
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Record: the commit list and changed files. Used for verification after the rebase.
|
|
30
|
+
|
|
31
|
+
**Gotcha:** If `BRANCH` is empty or `HEAD` (detached HEAD), stop and tell the user to checkout a real feature branch before rebasing.
|
|
32
|
+
|
|
33
|
+
## STEP 2: Working tree must be clean
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git status --porcelain
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If there is **any** output (staged or unstaged changes, untracked files you care about):
|
|
40
|
+
|
|
41
|
+
`ask_user_question` — question: "Your working tree is not clean. Rebase requires a clean tree (or stashed work). How do you want to proceed?" / header: "Unclean working tree" / options:
|
|
42
|
+
|
|
43
|
+
- `Stash changes and continue` → run `git stash push -u -m "myproj-flux-rebase-wip"`. Set an internal flag that a stash was created — STEP 9 will offer to pop it.
|
|
44
|
+
- `Abort` → stop. Do not rebase.
|
|
45
|
+
|
|
46
|
+
If the tree is already clean, continue to STEP 3.
|
|
47
|
+
|
|
48
|
+
## STEP 3: Sync local default branch with origin
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git fetch origin "$DEFAULT_BRANCH":"$DEFAULT_BRANCH"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
> If this fails because the local branch has diverged from origin, use `git fetch origin "$DEFAULT_BRANCH":"$DEFAULT_BRANCH" --force`.
|
|
55
|
+
> ⚠️ `--force` overwrites your local branch — only safe if you never commit directly to `$DEFAULT_BRANCH`.
|
|
56
|
+
|
|
57
|
+
**Gotcha:** If `$DEFAULT_BRANCH` does not exist locally yet, use `git fetch origin "$DEFAULT_BRANCH"` and ensure you have a local branch tracking `origin/$DEFAULT_BRANCH` (e.g. `git branch -u "origin/$DEFAULT_BRANCH" "$DEFAULT_BRANCH"` once) before relying on the `branch:branch` refspec.
|
|
58
|
+
|
|
59
|
+
## STEP 4: Identify potential conflicts (high-risk files)
|
|
60
|
+
|
|
61
|
+
Overlap of “files changed on `$DEFAULT_BRANCH` since the merge base” and “files changed on your branch” flags **likely** conflict hotspots — not a guarantee (conflicts can appear elsewhere; some overlaps merge cleanly).
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Files changed on default branch since our branch diverged
|
|
65
|
+
git diff --name-only HEAD...”$DEFAULT_BRANCH”
|
|
66
|
+
|
|
67
|
+
# Files changed on our branch
|
|
68
|
+
git diff --name-only “$DEFAULT_BRANCH”..HEAD
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For any file appearing in **both** lists: read both sides to understand intent before rebasing.
|
|
72
|
+
|
|
73
|
+
## STEP 5: Rebase onto default branch
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git rebase "$DEFAULT_BRANCH"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Git will replay each of your commits one at a time onto the tip of `$DEFAULT_BRANCH`. If there are no conflicts, this completes automatically and you can skip to STEP 7.
|
|
80
|
+
|
|
81
|
+
## STEP 6: Resolve conflicts (if any — repeat per commit)
|
|
82
|
+
|
|
83
|
+
During rebase, Git pauses at each commit that conflicts. For each pause:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git status
|
|
87
|
+
git diff --name-only --diff-filter=U
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Use `git status` as the source of truth (including renames and unmerged paths that are not plain “both modified”).
|
|
91
|
+
|
|
92
|
+
### Resolution principles
|
|
93
|
+
|
|
94
|
+
- Aim for a result that matches the **intent of the commit being replayed** and is **consistent with current `$DEFAULT_BRANCH`**. Do not drop the other side’s changes without a clear reason (e.g. `$DEFAULT_BRANCH` removed deprecated code — follow that removal if correct).
|
|
95
|
+
- Every unmerged path must reach a resolved state and be **staged** (`git add` / `git rm` as appropriate) before `git rebase --continue`.
|
|
96
|
+
|
|
97
|
+
### By scenario (add a line or two of reasoning in your summary when non-trivial)
|
|
98
|
+
|
|
99
|
+
| Scenario | What to do |
|
|
100
|
+
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
101
|
+
| **Text / conflict markers** | Edit the file, remove `<<<<<<<`, `=======`, `>>>>>>>`, then `git add <file>`. |
|
|
102
|
+
| **Modify/delete** — one side changed the file, the other deleted it | Decide keep file (possibly with merged content) vs delete. Keeping: fix content then `git add <file>`. Deleting: `git rm <file>`. |
|
|
103
|
+
| **Binary or generated files** (no usable markers) | Choose one side or regenerate: e.g. `git checkout --ours -- <file>` or `git checkout --theirs -- <file>`, or replace the file manually, then `git add <file>`. |
|
|
104
|
+
| **Rename / complex unmerged states** | Follow `git status` paths; use `git add` on the correct final path after resolving. |
|
|
105
|
+
| **Submodules** | Do not guess: use submodule workflow (`git submodule status`, update pointer as intended, `git add` submodule path) or stop and ask the user. |
|
|
106
|
+
|
|
107
|
+
### If `git rebase --continue` fails
|
|
108
|
+
|
|
109
|
+
- Grep or search for leftover `<<<<<<<` / conflict markers.
|
|
110
|
+
- Run `git diff --check` for whitespace or conflict artifacts.
|
|
111
|
+
- Ensure **all** previously unmerged files are staged; unstaged resolutions block continue.
|
|
112
|
+
|
|
113
|
+
### Empty commits after resolution
|
|
114
|
+
|
|
115
|
+
If Git says the commit is now empty: **`git rebase --skip`** only when you are sure the replayed change is fully redundant (e.g. identical patch already on `$DEFAULT_BRANCH`). Skipping drops a commit — default to investigating rather than skipping blindly.
|
|
116
|
+
|
|
117
|
+
> Abort at any time: `git rebase --abort` (restores pre-rebase state; does not restore an unstashed stash — your stash from STEP 2 remains).
|
|
118
|
+
|
|
119
|
+
## STEP 7: Verify — history and files
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Commits on top of default branch (see note below on count)
|
|
123
|
+
git log "$DEFAULT_BRANCH"..HEAD --oneline
|
|
124
|
+
|
|
125
|
+
# Changed files vs default branch — should reflect your work (paths may shift if trees moved)
|
|
126
|
+
git diff "$DEFAULT_BRANCH" --stat
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Commit count:** Expect the **same number of commits** as in STEP 1 only if your branch was **linear** (no merge commits you introduced). If you had merge commits from `$DEFAULT_BRANCH` into the branch, the replayed count can differ — compare **content** (`git diff "$DEFAULT_BRANCH" --stat`, behavior) rather than count alone.
|
|
130
|
+
|
|
131
|
+
Confirm history and diffs match expectations (no dropped features). If changes are missing — investigate before pushing.
|
|
132
|
+
|
|
133
|
+
## STEP 8: Confirm push (ask_user_question)
|
|
134
|
+
|
|
135
|
+
After a rebase, commit hashes differ from any previous push of the same branch. Choose the right push: first-time upstream vs `--force-with-lease` when the branch already exists on the remote.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
git rev-parse @{u} >/dev/null 2>&1 && echo HAS_UPSTREAM || echo NO_UPSTREAM
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
- **`NO_UPSTREAM`** (first push of this branch): `ask_user_question` — question: "Rebase is complete and verified. Push this branch and set upstream with `git push -u origin \"$BRANCH\"`? (No force needed.)" / header: "Push branch" / options: `Yes, push now` | `No, I'll push manually later`
|
|
142
|
+
|
|
143
|
+
- Yes → `git push -u origin "$BRANCH"`
|
|
144
|
+
- No → skip push; say so in STEP 9.
|
|
145
|
+
|
|
146
|
+
- **`HAS_UPSTREAM`**: `ask_user_question` — question: "Rebase rewrote history. Push with `git push --force-with-lease origin \"$BRANCH\"`? Refuses if someone else pushed in the meantime. Only do this for your own feature branch — never `$DEFAULT_BRANCH`." / header: "Push rebased branch" / options: `Yes, force-with-lease now` | `No, I'll push manually later`
|
|
147
|
+
- Yes → `git push --force-with-lease origin "$BRANCH"`
|
|
148
|
+
- No → skip push; say so in STEP 9.
|
|
149
|
+
|
|
150
|
+
If `--force-with-lease` fails because the remote moved, run `git fetch origin`, re-evaluate (and re-ask if appropriate), then retry.
|
|
151
|
+
|
|
152
|
+
**Gotcha:** `--force-with-lease` can still fail if the remote branch was deleted/recreated or the ref lease is stale — fetch and understand remote state before forcing.
|
|
153
|
+
|
|
154
|
+
> ⚠️ Never `git push --force` without lease, and never force-push `$DEFAULT_BRANCH` (see HARD CONSTRAINT).
|
|
155
|
+
|
|
156
|
+
## STEP 9: Summarize
|
|
157
|
+
|
|
158
|
+
Report:
|
|
159
|
+
|
|
160
|
+
- `$TICKET` (if any) and `$BRANCH`
|
|
161
|
+
- Original commits from STEP 1 vs final `git log "$DEFAULT_BRANCH"..HEAD --oneline` (note if merge commits made counts differ)
|
|
162
|
+
- How many commits from `$DEFAULT_BRANCH` were incorporated under you
|
|
163
|
+
- Conflicts: how many stops, which files, any modify/delete/binary/submodule cases
|
|
164
|
+
- Push: done vs deferred by user choice
|
|
165
|
+
- If STEP 2 stashed: use `ask_user_question` — question: "You stashed changes before the rebase. Do you want to pop the stash now?" / header: "Restore stash" / options: `Yes, pop stash now` | `No, I'll pop it manually later`
|
|
166
|
+
- Yes → run `git stash pop`. If it produces conflicts, list the conflicted files and instruct the user to resolve them manually (`git add <file>` after editing, then `git stash drop` once done — do NOT run `git stash pop` again).
|
|
167
|
+
- No → remind the user to run `git stash pop` manually when ready.
|
|
168
|
+
|
|
169
|
+
## HARD CONSTRAINT
|
|
170
|
+
|
|
171
|
+
`/flux/rebase` MUST NOT squash or modify commit content except as required for conflict resolution during `git rebase --continue`. MUST NOT commit to `$DEFAULT_BRANCH`. MUST NOT use `git push --force` (use `--force-with-lease` when updating an existing remote branch). The only permitted history edits are the rebase itself and conflict resolutions in STEP 6.
|
|
172
|
+
|
|
173
|
+
## Propose next step
|
|
174
|
+
|
|
175
|
+
Then propose the next step: `/flux/create-pr` (include arguments if needed).
|
|
176
|
+
|
|
177
|
+
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.
|
|
178
|
+
|
|
179
|
+
=================
|
|
180
|
+
$ARGUMENTS
|