claude-dev-env 2.15.1 → 2.17.0
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.
- package/.agents/agents/.claude/CLAUDE.md +1 -0
- package/{agents → .agents/agents}/AGENTS.md +8 -2
- package/{agents → .agents/agents}/test_agent_frontmatter.py +1 -1
- package/.agents/skills/.claude/CLAUDE.md +1 -0
- package/.agents/skills/AGENTS.md +71 -0
- package/.agents/skills/_shared/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/AGENTS.md +2 -2
- package/.agents/skills/_shared/advisor/.claude/CLAUDE.md +1 -0
- package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/AGENTS.md +22 -15
- package/{skills → .agents/skills}/_shared/pr-loop/portable-driver.md +6 -7
- package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +1 -0
- package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +9 -0
- package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/AGENTS.md +1 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/portable_converge_driver.py +25 -16
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +6 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +1 -5
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_audit_prompt.py +9 -3
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_audit_outcomes.py +1 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_fix_outcomes.py +1 -1
- package/.agents/skills/autoconverge/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/reference/convergence-gates.md +31 -0
- package/{skills → .agents/skills}/autoconverge/reference/convergence.md +8 -10
- package/{skills → .agents/skills}/autoconverge/reference/gotchas.md +1 -1
- package/{skills → .agents/skills}/autoconverge/reference/stop-conditions.md +1 -1
- package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/autoconverge/workflow/converge.codex-gate.test.mjs +1 -1
- package/{skills → .agents/skills}/autoconverge/workflow/converge.contract.test.mjs +1 -1
- package/{skills → .agents/skills}/autoconverge/workflow/converge.mjs +3 -3
- package/.agents/skills/cert-classification-rule/SKILL.md +224 -0
- package/.agents/skills/cert-classification-rule/scripts/resort_cert_folders.py +158 -0
- package/{skills → .agents/skills}/e-code-review/reference/effort-evaluation.md +1 -1
- package/.agents/skills/eli5/SKILL.md +128 -0
- package/.agents/skills/eli5/reference/task-seeds.md +11 -0
- package/.agents/skills/everything-search/.claude/CLAUDE.md +1 -0
- package/.agents/skills/fresh-branch/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/fresh-branch/scripts/test_create_fresh_branch.py +2 -3
- package/.agents/skills/grok-spawn/.claude/CLAUDE.md +1 -0
- package/.agents/skills/name-by-capability-audit/SKILL.md +67 -0
- package/.agents/skills/name-by-capability-audit/reference/fetch-commands.md +29 -0
- package/.agents/skills/name-by-capability-audit/reference/offense-examples.md +32 -0
- package/.agents/skills/name-by-capability-audit/reference/report-template.md +29 -0
- package/.agents/skills/name-by-capability-audit/reference/rule-checklist.md +38 -0
- package/.agents/skills/name-by-capability-audit/reference/task-seeds.md +9 -0
- package/.agents/skills/pr-cleanup/SKILL.md +99 -0
- package/{skills → .agents/skills}/prototype/reference/honest-limitations.md +1 -1
- package/{skills → .agents/skills}/prototype/reference/promotion-tasks.md +1 -1
- package/{skills → .agents/skills}/prototype/scripts/test_build_sandbox_settings.py +2 -2
- package/{skills → .agents/skills}/prototype/scripts/test_probe_sandbox_safety.py +1 -1
- package/{skills → .agents/skills}/prototype/workflows/promotion.md +2 -2
- package/.agents/skills/rebase/.claude/CLAUDE.md +1 -0
- package/.agents/skills/review-router/SKILL.md +51 -0
- package/.agents/skills/review-router/reference/route-policy.json +7 -0
- package/.agents/skills/review-router/reference/task-seeds.md +1 -0
- package/.agents/skills/review-router/scripts/conftest.py +4 -0
- package/.agents/skills/review-router/scripts/review_router.py +50 -0
- package/.agents/skills/review-router/scripts/review_router_cli.py +211 -0
- package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +1 -0
- package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
- package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +13 -0
- package/.agents/skills/review-router/scripts/test_review_router.py +23 -0
- package/.agents/skills/review-router/scripts/test_review_router_cli.py +47 -0
- package/.agents/skills/review-tier/SKILL.md +56 -0
- package/.agents/skills/review-tier/reference/task-seeds.md +1 -0
- package/.agents/skills/review-tier/reference/tier-policy.json +9 -0
- package/.agents/skills/review-tier/scripts/conftest.py +4 -0
- package/.agents/skills/review-tier/scripts/review_tier.py +332 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +1 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +29 -0
- package/.agents/skills/review-tier/scripts/test_generation.py +171 -0
- package/.agents/skills/review-tier/scripts/test_review_tier.py +33 -0
- package/.agents/skills/run-claude-dev-env/SKILL.md +84 -0
- package/.agents/skills/run-claude-dev-env/driver.mjs +239 -0
- package/.agents/skills/session-log/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/session-log/SKILL.md +1 -1
- package/.agents/skills/session-tidy/.claude/CLAUDE.md +1 -0
- package/.agents/skills/shared-extraction-audit/SKILL.md +160 -0
- package/.agents/skills/shared-extraction-audit/reference/examples.md +46 -0
- package/.agents/skills/shared-extraction-audit/reference/offense-taxonomy.md +100 -0
- package/.agents/skills/skill-builder/.claude/CLAUDE.md +1 -0
- package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/skill-builder/references/deterministic-elements.md +1 -1
- package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +1 -0
- package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +1 -0
- package/.agents/skills/source-command-logifix/SKILL.md +29 -0
- package/.agents/skills/source-command-sr-loop/SKILL.md +58 -0
- package/.agents/skills/task-build/.claude/CLAUDE.md +1 -0
- package/.agents/skills/update/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/AGENTS.md +45 -0
- package/.agents/skills-archived/anthropic-plan/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/anthropic-plan/AGENTS.md +1 -1
- package/.agents/skills-archived/anthropic-plan/scripts/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/anthropic-plan/templates/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/anthropic-plan/test_skill_contract.py +4 -4
- package/.agents/skills-archived/anthropic-plan/workflow/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/auditing-claude-config/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/reference/obstacles/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_code_rules_gate.py +11 -1
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_fix_hookspath.py +11 -1
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_preflight.py +11 -1
- package/.agents/skills-archived/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/bugteam/scripts/reflow_skill_md.py +3 -3
- package/.agents/skills-archived/codex-review/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/codex-review/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/codex-review/scripts/codex_usage_probe.py +11 -1
- package/{skills → .agents/skills-archived}/codex-review/scripts/run_codex_review.py +11 -1
- package/{skills → .agents/skills-archived}/codex-review/test_skill_scaffold.py +4 -4
- package/{skills → .agents/skills-archived}/copilot-finding-triage/SKILL.md +1 -1
- package/.agents/skills-archived/copilot-review/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/pr-converge/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/SKILL.md +6 -6
- package/.agents/skills-archived/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
- package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
- package/.agents/skills-archived/pr-converge/reference/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/reference/multi-pr-orchestration.md +1 -1
- package/.agents/skills-archived/pr-converge/reference/obstacles/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/reference/per-tick.md +3 -3
- package/.agents/skills-archived/pr-converge/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/scripts/_pr_converge_path_setup.py +17 -2
- package/.agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/scripts/reflow_skill_md.py +2 -2
- package/{skills → .agents/skills-archived}/pr-converge/scripts/test__pr_converge_path_setup.py +7 -4
- package/{skills → .agents/skills-archived}/pr-converge/test_portable_pacer_gate.py +6 -2
- package/.agents/skills-archived/pr-converge/workflows/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/workflows/schedule-wakeup-loop.md +1 -1
- package/.agents/skills-archived/recall/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/remember/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/split-pr/reference/proposal-format.md +1 -1
- package/.claude/CLAUDE.md +1 -0
- package/AGENTS.md +34 -58
- package/_shared/AGENTS.md +2 -0
- package/_shared/advisor/reference/sol-rung.md +2 -2
- package/_shared/advisor/reference/third-party-bind.md +1 -1
- package/_shared/advisor/scripts/tests/test_codex_sol_advisor.py +1 -1
- package/_shared/pr-loop/audit-reply-template.md +4 -0
- package/_shared/pr-loop/code-rules-gate.md +1 -1
- package/_shared/pr-loop/fix-protocol.md +7 -6
- package/_shared/pr-loop/gh-payloads.md +8 -6
- package/_shared/pr-loop/precatch-rubric.md +6 -5
- package/_shared/pr-loop/scripts/AGENTS.md +15 -0
- package/_shared/pr-loop/scripts/_pr_converge_path_setup.py +38 -0
- package/_shared/pr-loop/scripts/check_bugbot_ci.py +279 -0
- package/_shared/pr-loop/scripts/check_convergence.py +923 -0
- package/_shared/pr-loop/scripts/check_convergence_availability.py +275 -0
- package/_shared/pr-loop/scripts/check_convergence_gates.py +279 -0
- package/_shared/pr-loop/scripts/check_convergence_thread_gates.py +219 -0
- package/_shared/pr-loop/scripts/check_pending_reviews.py +154 -0
- package/_shared/pr-loop/scripts/codex_down_classifier.py +98 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/AGENTS.md +18 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/__init__.py +1 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/classifier_constants.py +35 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +82 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/findings_constants.py +18 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/run_constants.py +53 -0
- package/_shared/pr-loop/scripts/codex_usage_probe.py +570 -0
- package/_shared/pr-loop/scripts/conftest.py +43 -0
- package/_shared/pr-loop/scripts/fetch_copilot_reviews.py +134 -0
- package/_shared/pr-loop/scripts/fixtures/auth_failure_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/config_load_failure_v0.125.0.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/freeform_findings_v0.144.3.txt +6 -0
- package/_shared/pr-loop/scripts/fixtures/model_rejection_v0.125.0.jsonl +5 -0
- package/_shared/pr-loop/scripts/fixtures/structured_findings.txt +13 -0
- package/_shared/pr-loop/scripts/fixtures/success_stream_v0.144.3.jsonl +6 -0
- package/_shared/pr-loop/scripts/fixtures/unknown_failure_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/usage_limit_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/parse_codex_findings.py +207 -0
- package/_shared/pr-loop/scripts/post_fix_reply.py +168 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/AGENTS.md +18 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/__init__.py +0 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +70 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/pr_converge_constants.py +118 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +13 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/AGENTS.md +26 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/__init__.py +0 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/constants.py +69 -0
- package/_shared/pr-loop/scripts/run_codex_review.py +609 -0
- package/_shared/pr-loop/scripts/test__pr_converge_path_setup.py +30 -0
- package/_shared/pr-loop/scripts/test_check_bugbot_ci.py +312 -0
- package/_shared/pr-loop/scripts/test_check_convergence.py +438 -0
- package/_shared/pr-loop/scripts/test_check_convergence_availability.py +391 -0
- package/_shared/pr-loop/scripts/test_check_convergence_codex.py +517 -0
- package/_shared/pr-loop/scripts/test_check_convergence_contract.py +400 -0
- package/_shared/pr-loop/scripts/test_check_convergence_fixture.py +179 -0
- package/_shared/pr-loop/scripts/test_check_convergence_gates.py +84 -0
- package/_shared/pr-loop/scripts/test_check_convergence_thread_gates.py +99 -0
- package/_shared/pr-loop/scripts/test_codex_down_classifier.py +143 -0
- package/_shared/pr-loop/scripts/test_codex_usage_probe.py +683 -0
- package/_shared/pr-loop/scripts/test_parse_codex_findings.py +130 -0
- package/_shared/pr-loop/scripts/test_run_codex_review.py +969 -0
- package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +1 -1
- package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +1 -1
- package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +1 -1
- package/_shared/pr-loop/state-schema.md +20 -28
- package/_shared/process-tree/AGENTS.md +3 -3
- package/bin/AGENTS.md +17 -12
- package/bin/ever-shipped-skills.mjs +34 -3
- package/bin/install-constants.mjs +46 -12
- package/bin/install-plan.mjs +6 -1
- package/bin/install.agents-home.test.mjs +199 -0
- package/bin/install.cursor-rules.test.mjs +3 -3
- package/bin/install.mjs +153 -23
- package/bin/install.plan.test.mjs +1 -0
- package/bin/install.profile-root.test.mjs +54 -1
- package/bin/install.prune.test.mjs +23 -204
- package/bin/install.test.mjs +17 -5
- package/bin/publish-directory-pointer.mjs +175 -0
- package/bin/publish-directory-pointer.test.mjs +129 -0
- package/bin/resolve-install-root.mjs +80 -4
- package/bin/resolve-package-managed-directory.mjs +29 -0
- package/bin/resolve-package-managed-directory.test.mjs +97 -0
- package/commands/AGENTS.md +2 -0
- package/commands/sr-loop.md +3 -0
- package/docs/references/prose-style-enforcement.md +3 -7
- package/hooks/AGENTS.md +0 -3
- package/hooks/blocking/AGENTS.md +0 -2
- package/hooks/blocking/ask_user_question_shape_blocker.py +83 -0
- package/hooks/blocking/hedging_language_blocker.py +1 -0
- package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +10 -6
- package/hooks/blocking/pre_tool_use_dispatcher.py +2 -19
- package/hooks/blocking/state_description_blocker.py +1 -1
- package/hooks/blocking/test_ask_user_question_shape.py +69 -0
- package/hooks/blocking/test_code_rules_command_dispatch.py +1 -1
- package/hooks/blocking/test_code_rules_enforcer_magic_slice_bounds.py +1 -1
- package/hooks/blocking/test_code_rules_enforcer_split_annotations_length.py +1 -1
- package/hooks/blocking/test_code_rules_js_conventions.py +1 -1
- package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +1 -1
- package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +1 -1
- package/hooks/blocking/test_code_rules_js_sibling_return_object_key_drift.py +1 -1
- package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +1 -1
- package/hooks/blocking/test_fable_spawn_gate.py +1 -1
- package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +1 -1
- package/hooks/blocking/test_pre_tool_use_dispatcher.py +17 -58
- package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +9 -104
- package/hooks/blocking/test_state_description_blocker.py +1 -0
- package/hooks/blocking/test_stop_dispatcher.py +1 -26
- package/hooks/hooks.json +1 -1
- package/hooks/hooks_constants/AGENTS.md +0 -3
- package/hooks/hooks_constants/ask_user_question_shape.py +1 -1
- package/hooks/hooks_constants/ask_user_question_shape_constants.py +73 -0
- package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +1 -2
- package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -1
- package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +9 -0
- package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +0 -7
- package/hooks/hooks_constants/stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/test_ask_user_question_shape.py +1 -1
- package/hooks/hooks_constants/test_prose_metrics_parity.py +29 -107
- package/hooks/hooks_constants/test_stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/working_style_prompt_constants.py +9 -10
- package/hooks/session/AGENTS.md +4 -1
- package/hooks/session/test_working_style_prompt.py +8 -4
- package/hooks/session/working_style_prompt.py +4 -2
- package/installable-surfaces.manifest.json +2 -3
- package/package.json +4 -8
- package/rules/AGENTS.md +2 -5
- package/rules/asd-ste100-language.md +39 -0
- package/rules/ask-user-question-required.md +1 -1
- package/rules/long-horizon-autonomy.md +1 -1
- package/scripts/AGENTS.md +1 -0
- package/scripts/Show-Asset.ps1 +106 -0
- package/scripts/active_capability_references.py +38 -8
- package/scripts/claude_chain_usage.py +2 -0
- package/scripts/codex_compat_watcher.py +1 -1
- package/scripts/dev_env_scripts_constants/active_capability_constants.py +5 -2
- package/scripts/dev_env_scripts_constants/claude_chain_usage_constants.py +4 -1
- package/scripts/test_validate_instruction_pairs.py +30 -3
- package/scripts/test_verify_installable_package.py +2 -1
- package/scripts/tests/test_codex_compat_watcher.py +5 -5
- package/scripts/tests/test_engine.py +4 -4
- package/scripts/tests/test_rules.py +5 -5
- package/system-prompts/AGENTS.md +8 -0
- package/system-prompts/software-engineer.xml +8 -3
- package/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/README.md +0 -21
- package/agents/CLAUDE.md +0 -1
- package/docs/imagegen.md +0 -22
- package/hooks/blocking/eli11_reply_enforcer.py +0 -436
- package/hooks/blocking/plain_language_blocker.py +0 -758
- package/hooks/blocking/test_eli11_reply_enforcer.py +0 -390
- package/hooks/blocking/test_plain_language_blocker.py +0 -683
- package/hooks/blocking/test_plain_language_blocker_allowlist.py +0 -228
- package/hooks/diagnostic/AGENTS.md +0 -75
- package/hooks/diagnostic/CLAUDE.md +0 -1
- package/hooks/diagnostic/hook_log_extractor.py +0 -875
- package/hooks/diagnostic/hook_log_init.py +0 -202
- package/hooks/diagnostic/hook_log_stop_wrapper.py +0 -26
- package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +0 -3
- package/hooks/diagnostic/migrations/AGENTS.md +0 -16
- package/hooks/diagnostic/migrations/CLAUDE.md +0 -1
- package/hooks/diagnostic/migrations/README.md +0 -76
- package/hooks/diagnostic/queries/AGENTS.md +0 -19
- package/hooks/diagnostic/queries/CLAUDE.md +0 -1
- package/hooks/diagnostic/queries/block_details_for_hook.sql +0 -26
- package/hooks/diagnostic/queries/blocks_by_category.sql +0 -10
- package/hooks/diagnostic/queries/blocks_by_tool.sql +0 -9
- package/hooks/diagnostic/queries/blocks_last_7_days.sql +0 -11
- package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +0 -12
- package/hooks/diagnostic/queries/top_blockers_overall.sql +0 -12
- package/hooks/diagnostic/requirements-hook-logs-dev.txt +0 -2
- package/hooks/diagnostic/requirements-hook-logs.txt +0 -1
- package/hooks/diagnostic/schema.sql +0 -51
- package/hooks/diagnostic/test_hook_log_extractor.py +0 -1518
- package/hooks/diagnostic/test_hook_log_init.py +0 -227
- package/hooks/diagnostic/test_hook_log_stop_wrapper.py +0 -17
- package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +0 -94
- package/hooks/hooks_constants/hook_log_extractor_constants.py +0 -233
- package/hooks/hooks_constants/plain_language_blocker_constants.py +0 -366
- package/hooks/hooks_constants/test_hook_log_extractor_constants.py +0 -123
- package/rules/doc-prose-cuts.md +0 -58
- package/rules/eli11-replies.md +0 -36
- package/rules/opus5-communication-contract.md +0 -45
- package/rules/plain-language.md +0 -9
- package/skills/AGENTS.md +0 -72
- package/skills/CLAUDE.md +0 -1
- package/skills/_shared/CLAUDE.md +0 -1
- package/skills/_shared/advisor/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/prompts/AGENTS.md +0 -9
- package/skills/_shared/pr-loop/prompts/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/scripts/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +0 -1
- package/skills/anthropic-plan/CLAUDE.md +0 -1
- package/skills/anthropic-plan/scripts/CLAUDE.md +0 -1
- package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/CLAUDE.md +0 -1
- package/skills/anthropic-plan/templates/CLAUDE.md +0 -1
- package/skills/anthropic-plan/workflow/CLAUDE.md +0 -1
- package/skills/auditing-claude-config/CLAUDE.md +0 -1
- package/skills/autoconverge/CLAUDE.md +0 -1
- package/skills/autoconverge/reference/CLAUDE.md +0 -1
- package/skills/autoconverge/workflow/CLAUDE.md +0 -1
- package/skills/autoconverge/workflow/autoconverge_report_constants/CLAUDE.md +0 -1
- package/skills/bugteam/CLAUDE.md +0 -1
- package/skills/bugteam/reference/CLAUDE.md +0 -1
- package/skills/bugteam/reference/obstacles/CLAUDE.md +0 -1
- package/skills/bugteam/scripts/CLAUDE.md +0 -1
- package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
- package/skills/codex-review/CLAUDE.md +0 -1
- package/skills/codex-review/reference/CLAUDE.md +0 -1
- package/skills/codex-review/scripts/codex_review_scripts_constants/CLAUDE.md +0 -1
- package/skills/copilot-review/CLAUDE.md +0 -1
- package/skills/everything-search/CLAUDE.md +0 -1
- package/skills/fresh-branch/CLAUDE.md +0 -1
- package/skills/grok-spawn/CLAUDE.md +0 -1
- package/skills/grokify/evals/README.md +0 -72
- package/skills/grokify/evals/parse-payload.test.mjs +0 -171
- package/skills/grokify/evals/run-capability-evals.mjs +0 -545
- package/skills/pr-converge/CLAUDE.md +0 -1
- package/skills/pr-converge/pr_converge_skill_constants/CLAUDE.md +0 -1
- package/skills/pr-converge/reference/CLAUDE.md +0 -1
- package/skills/pr-converge/reference/obstacles/CLAUDE.md +0 -1
- package/skills/pr-converge/scripts/CLAUDE.md +0 -1
- package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +0 -1
- package/skills/pr-converge/workflows/CLAUDE.md +0 -1
- package/skills/rebase/CLAUDE.md +0 -1
- package/skills/recall/CLAUDE.md +0 -1
- package/skills/remember/CLAUDE.md +0 -1
- package/skills/session-log/CLAUDE.md +0 -1
- package/skills/session-tidy/CLAUDE.md +0 -1
- package/skills/skill-builder/CLAUDE.md +0 -1
- package/skills/skill-builder/references/CLAUDE.md +0 -1
- package/skills/skill-builder/templates/CLAUDE.md +0 -1
- package/skills/skill-builder/workflows/CLAUDE.md +0 -1
- package/skills/task-build/CLAUDE.md +0 -1
- package/skills/update/CLAUDE.md +0 -1
- /package/{agents → .agents/agents}/clean-coder.md +0 -0
- /package/{agents → .agents/agents}/code-quality-agent.md +0 -0
- /package/{agents → .agents/agents}/git-commit-crafter.md +0 -0
- /package/{agents → .agents/agents}/issue-tracker.md +0 -0
- /package/{agents → .agents/agents}/plan-packet-validator.md +0 -0
- /package/{agents → .agents/agents}/pr-description-writer.md +0 -0
- /package/{agents → .agents/agents}/session-advisor.md +0 -0
- /package/{agents → .agents/agents}/skill-writer-agent.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/advisor-protocol.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/scripts/README.md +0 -0
- /package/{skills → .agents/skills}/_shared/end-of-run-gotcha-recommendations.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/audit-contract.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/audit-reply-template.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/code-rules-gate.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/fix-protocol.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/gh-payloads.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/post-audit-thread-contract.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/precatch-rubric.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_cli_utils.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_path_resolver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_xml_utils.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/audit_category_schema.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_audit_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_converge_task_list.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_fix_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/init_loop_state.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/preflight_worktree.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/select_converge_pacer.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -0
- /package/{skills/pr-converge/pr_converge_skill_constants → .agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/teardown_worktrees.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test__path_resolver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_init_loop_state.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_write_handoff.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_handoff.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/state-schema.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/worker-spawn.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/SKILL.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/closing-report.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/copilot-findings.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/headless-safety.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/multi-pr.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/self-closing-loop.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/test_portable_pacer_gate.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/aggregate_runs.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -0
- /package/{skills/pr-converge/scripts/pr_converge_scripts_constants → .agents/skills/autoconverge/workflow/autoconverge_report_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.clean-audit.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-progress.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.p2-advance.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.path-aware.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.precatch.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.run-input.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/convergence_summary.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/render_report.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_aggregate_runs.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_convergence_summary.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_render_report.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/SKILL.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/fix.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/loop.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/low.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/medium.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/runner-selection.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/xhigh.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/effort_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/finding_pipeline_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/grok_code_review_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/effort_defaults_evidence.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/effort_evaluation.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/finding_pipeline.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/demanding.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/easy.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/medium.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/grok_code_review.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_effort_evaluation.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_finding_pipeline.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_grok_code_review.py +0 -0
- /package/{skills → .agents/skills}/e-simplify/SKILL.md +0 -0
- /package/{skills → .agents/skills}/everything-search/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/everything-search/SKILL.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/SKILL.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/create_fresh_branch.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_git_commands.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/pytest.ini +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/test_fresh_branch_git_commands.py +0 -0
- /package/{skills → .agents/skills}/grok-spawn/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/SKILL.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/reference/flag-profiles.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/reference/worker-briefs.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/SKILL.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/epic-and-sub-issue-model.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/handoff-schema.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/operation-matrix.md +0 -0
- /package/{skills → .agents/skills}/orchestrator/SKILL.md +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/__init__.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/constants.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/test_status_gate.py +0 -0
- /package/{skills → .agents/skills}/orchestrator-refresh/SKILL.md +0 -0
- /package/{skills → .agents/skills}/privacy-hygiene/SKILL.md +0 -0
- /package/{skills → .agents/skills}/privacy-hygiene/reference/sweep-procedure.md +0 -0
- /package/{skills → .agents/skills}/prototype/SKILL.md +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/build_sandbox_settings.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/conftest.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/launch_sandbox.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/probe_sandbox_safety.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/test_launch_sandbox.py +0 -0
- /package/{skills → .agents/skills}/prototype/workflows/sandbox.md +0 -0
- /package/{skills → .agents/skills}/rebase/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/rebase/SKILL.md +0 -0
- /package/{skills → .agents/skills}/session-log/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/session-log/templates/frontmatter.md +0 -0
- /package/{skills → .agents/skills}/session-tidy/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/session-tidy/SKILL.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/SKILL.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/delegation-map.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/description-field.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/progressive-disclosure.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/self-audit-checklist.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/skill-modularity.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/skill-types.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/thariq-x-post-skills.json +0 -0
- /package/{skills → .agents/skills}/skill-builder/templates/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/templates/gap-analysis.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/improve-skill.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/new-skill.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/polish-skill.md +0 -0
- /package/{skills → .agents/skills}/small-cl/SKILL.md +0 -0
- /package/{skills → .agents/skills}/task-build/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/task-build/SKILL.md +0 -0
- /package/{skills → .agents/skills}/task-build/reference/tool-routing.md +0 -0
- /package/{skills → .agents/skills}/team-advisor/SKILL.md +0 -0
- /package/{skills → .agents/skills}/team-advisor/reference/advisor-docs-review.md +0 -0
- /package/{skills → .agents/skills}/update/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/update/SKILL.md +0 -0
- /package/{skills → .agents/skills}/usage-pause/SKILL.md +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/resolve_usage_window.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/test_resolve_usage_window.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/resolve_usage_window_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
- /package/{skills/_shared/pr-loop/scripts/skills_pr_loop_constants → .agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/test_validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/README.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/build-prompt.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/reuse-audit.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/source-map.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/visual-plan.template.html +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.mjs +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/reference/probe-hook.md +0 -0
- /package/{skills → .agents/skills-archived}/beat-sheet/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/beat-sheet/reference/visual-beats.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/CONSTRAINTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/EXAMPLES.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/PROMPTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/README.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/audit-and-teammates.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/copilot-gap-analysis.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/design-rationale.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/github-pr-reviews.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-push.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-read-files.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/team-setup.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
- /package/{skills/anthropic-plan/scripts/anthropic_plan_scripts_constants → .agents/skills-archived/bugteam/scripts/bugteam_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_preflight.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/windows_safe_rmtree.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/sources.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/test_skill_additions.py +0 -0
- /package/{skills → .agents/skills-archived}/closeout/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/closeout/reference/handoff-prompt-template.md +0 -0
- /package/{skills → .agents/skills-archived}/closeout/reference/pii-redaction-checklist.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/cli-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/loop-integration.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_down_classifier.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/parse_codex_findings.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_down_classifier.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_usage_probe.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_parse_codex_findings.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_run_codex_review.py +0 -0
- /package/{skills → .agents/skills-archived}/comments/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/condensing-instructions/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/reference/tier-rubric.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/conftest.py +0 -0
- /package/{skills/autoconverge/workflow/autoconverge_report_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants}/__init__.py +0 -0
- /package/{skills/bugteam/scripts/bugteam_scripts_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants/config}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/templates/notification.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/templates/subagent-prompt.md +0 -0
- /package/{skills → .agents/skills-archived}/descriptions/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/emergencies/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/grokify/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/grokify/capability-claims.test.mjs +0 -0
- /package/{skills → .agents/skills-archived}/grokify/templates/handoff-template.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/final-validation-tasks.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/model-routing.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-schema.json +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/process-inventory.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/review-loop.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/run-record.schema.json +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/self-audit-tasks.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-seeds.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-ticket.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/constants.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/create_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/load_skill_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_create_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_run.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_protocol.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_run.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/test_skill_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/test_task_ticket_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/AGENTS.md +0 -0
- /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants → .agents/skills-archived/pr-converge/pr_converge_skill_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/convergence-gates.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/examples.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/fix-protocol.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/ground-rules.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-push.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/progress-checklist.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/state-schema.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/stop-conditions.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_bugbot_ci.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_availability.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_pending_reviews.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/conftest.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/post_fix_reply.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
- /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants/config → .agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/test_step5_host_branch.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/workflows/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-fix-protocol/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
- /package/{skills → .agents/skills-archived}/recall/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/recall/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/release-notes-html/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/remember/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/remember/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/reviewer-gates/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/reviews/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/show/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/accessibility.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/art.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/charts.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/core-design.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/erds.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/flowcharts.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/host-and-html.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/illustrative-diagrams.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/interaction.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/mockups.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/quality-gates.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/structural-diagrams.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/subject-inventory.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/svg-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/show/routing.yaml +0 -0
- /package/{skills → .agents/skills-archived}/show/samples/pr1262-v2.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/validate-artifact.py +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/validate-package.py +0 -0
- /package/{skills → .agents/skills-archived}/show/templates/html-widget.html +0 -0
- /package/{skills → .agents/skills-archived}/show/templates/svg-base.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/css-var.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/dead-ref.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/filled-glyph.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/inherited-fill.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/invalid.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/large-canvas.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/unfilled-connector.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/valid.html +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/test_validate-artifact.py +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/test_validators.py +0 -0
- /package/{skills → .agents/skills-archived}/show/workflows/create-visual.md +0 -0
- /package/{skills → .agents/skills-archived}/show/workflows/review-visual.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/path-layers.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/split-further-loop.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/splitting-principles.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/analyze_pr.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/categorize_files.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/dependency_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/git_operations_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/packing_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/plan_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/split_pr_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/execute_split_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/pack_files_into_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_git_operations.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_layer_order.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_paginate.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_process_runner.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_script_types.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_title.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_analyze_pr.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files_packing.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_execute_split_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_paginate.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_script_types.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_title.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_plan.py +0 -0
|
@@ -13,41 +13,33 @@ State each PR-loop workflow tracks across iterations. Workflows differ on persis
|
|
|
13
13
|
| `starting_sha` | str | `git rev-parse HEAD` at workflow start |
|
|
14
14
|
| `loop_comment_index` | dict | `{finding_id: {finding_comment_id, finding_comment_url, thread_node_id, fix_status, ...}}` (`thread_node_id` is the PR review thread node id — `PRRT_kwDOxxx` — captured at audit time when calling `get_review_comments`, used by `resolve_thread` at FIX time) |
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## autoconverge (workflow and portable pacer)
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Workflow runs hold round state in the workflow journal. On `pacer=portable`, the
|
|
19
|
+
continuous driver seeds `pr-converge-state.json` under the job directory and
|
|
20
|
+
advances phases through `portable_converge_driver.py`. Portable state carries
|
|
21
|
+
`current_head`, `phase`, `codex_clean_at`, `codex_down`, `codex_required`, and
|
|
22
|
+
pending `next` / `wait_seconds` stamps. Round shape and terminal gates are
|
|
23
|
+
documented in
|
|
24
|
+
[`../../.agents/skills/autoconverge/reference/convergence.md`](../../.agents/skills/autoconverge/reference/convergence.md).
|
|
25
|
+
The machine readiness checklist is
|
|
26
|
+
[`../../.agents/skills/autoconverge/reference/convergence-gates.md`](../../.agents/skills/autoconverge/reference/convergence-gates.md).
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
- `team_name` — `bugteam-pr-<N>-<YYYYMMDDHHMMSS>` or `bugteam-<YYYYMMDDHHMMSS>` for multi-PR
|
|
22
|
-
- `team_temp_dir` — absolute path resolved from `tempfile.gettempdir()`
|
|
23
|
-
- `pre_fix_sha` — `git rev-parse HEAD` immediately before each FIX
|
|
24
|
-
- `gate_round_count` — consecutive pre-audit gate failures (cap: 5 → exit `error`)
|
|
28
|
+
## Archived workflow extensions
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
Historical field lists for retired entry skills live under
|
|
31
|
+
`packages/claude-dev-env/.agents/skills-archived/`:
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Normative field list, phase enum, dual persistence, and reset semantics: [`../../skills/pr-converge/reference/state-schema.md`](../../skills/pr-converge/reference/state-schema.md). File-backed multi-PR `status` enum: [`../../skills/pr-converge/reference/multi-pr-orchestration.md`](../../skills/pr-converge/reference/multi-pr-orchestration.md).
|
|
31
|
-
|
|
32
|
-
Multi-PR runs also keep a per-PR JSON state file at `~/.claude/skills/pr-converge/state/<owner>-<repo>-<pr_number>.json`:
|
|
33
|
-
|
|
34
|
-
| Field | Type | Description |
|
|
35
|
-
|---|---|---|
|
|
36
|
-
| `repo_name` | str | Full `owner/repo` |
|
|
37
|
-
| `pr_number` | int | PR number |
|
|
38
|
-
| `status` | enum | `open`, `blocked_escalation`, `fixing`, `ready_candidate`, `closed` |
|
|
39
|
-
| `copilot_review` | enum | `none`, `requested`, `pending`, `commented`, `approved` |
|
|
40
|
-
| `bugbot_review` | enum | Same vocabulary as `copilot_review`; one of `none`, `requested`, `pending`, `commented`, `approved` |
|
|
41
|
-
| `last_seen_comment_id` | int \| null | Highest processed review-comment id (incremental polling watermark) |
|
|
42
|
-
| `review_comments` | list[object] | Optional cache; `{id, author, path, line}` per entry |
|
|
43
|
-
| `escalation_queue` | list[object] | Pending human-judgment items: `{comment_id, summary, created_at}` |
|
|
33
|
+
- **bugteam** — inline orchestrator state, `team_name`, `gate_round_count`, exit payload fields. See [`../../.agents/skills-archived/bugteam/SKILL.md`](../../.agents/skills-archived/bugteam/SKILL.md).
|
|
34
|
+
- **pr-converge** — file-backed multi-PR state, phase enum, dual persistence. See [`../../.agents/skills-archived/pr-converge/reference/state-schema.md`](../../.agents/skills-archived/pr-converge/reference/state-schema.md) and [`../../.agents/skills-archived/pr-converge/reference/multi-pr-orchestration.md`](../../.agents/skills-archived/pr-converge/reference/multi-pr-orchestration.md).
|
|
44
35
|
|
|
45
36
|
## Reset semantics
|
|
46
37
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
38
|
+
- **autoconverge** — portable state resets on a fresh `open-run`; workflow journal is per run id.
|
|
39
|
+
- **Archived bugteam** — cleared on each new invocation; see archived skill body.
|
|
40
|
+
- **Archived pr-converge** — see archived [`state-schema.md`](../../.agents/skills-archived/pr-converge/reference/state-schema.md); multi-PR file state persists across orchestrator runs and only `last_seen_comment_id` advances monotonically.
|
|
49
41
|
|
|
50
42
|
## Convergence checks
|
|
51
43
|
|
|
52
|
-
-
|
|
53
|
-
- pr-converge
|
|
44
|
+
- **autoconverge** — `packages/claude-dev-env/_shared/pr-loop/scripts/check_convergence.py` is the single readiness source; gate labels are listed in [`../../.agents/skills/autoconverge/reference/convergence-gates.md`](../../.agents/skills/autoconverge/reference/convergence-gates.md). On pass, mark the PR ready (`gh pr ready`).
|
|
45
|
+
- **Archived pr-converge** — same script and archived [`convergence-gates.md`](../../.agents/skills-archived/pr-converge/reference/convergence-gates.md) reference.
|
|
@@ -9,10 +9,10 @@ never outlive the run and hold the capture pipe open.
|
|
|
9
9
|
| Caller | Use |
|
|
10
10
|
|---|---|
|
|
11
11
|
| `scripts/grok_headless_runner.py` | Kills a timed-out worker's tree between drain attempts |
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
12
|
+
| `_shared/pr-loop/scripts/run_codex_review.py` | Kills the review tree on timeout, then drains |
|
|
13
|
+
| `_shared/pr-loop/scripts/codex_usage_probe.py` | Tears the app-server tree down after the rate-limits exchange |
|
|
14
14
|
|
|
15
|
-
A
|
|
15
|
+
A PR-loop script reaches this home the way convergence scripts reach
|
|
16
16
|
`_shared/pr-loop/scripts`: it puts the directory on `sys.path` and imports by
|
|
17
17
|
module name. `bin/install.mjs` copies `_shared` and `scripts` together, and
|
|
18
18
|
every install group that carries a consumer carries `_shared`, so the import
|
package/bin/AGENTS.md
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
# bin
|
|
2
2
|
|
|
3
|
-
The installer and its companion modules. Running `npx claude-dev-env` (or `node bin/install.mjs`) copies package files into the managed root (`~/.claude/` by default; `CLAUDE_CONFIG_DIR` or `--target` selects another), merges hook entries into that root's `settings.json`, installs Git hooks, writes `~/.mypy.ini` under the process home, and copies Codex exec-policy files into `~/.codex/rules` (`CODEX_HOME/rules` when that variable is set), and generates Cursor `.mdc` files into `~/.cursor/rules` from the installed Claude rules.
|
|
3
|
+
The installer and its companion modules. Running `npx claude-dev-env` (or `node bin/install.mjs`) copies package files into the managed root (`~/.claude/` by default; `CLAUDE_CONFIG_DIR` or `--target` selects another), copies skills and agents into the agents home (`~/.agents/` for the default root) and publishes directory pointers at `skills/` and `agents/` under the managed root, merges hook entries into that root's `settings.json`, installs Git hooks, writes `~/.mypy.ini` under the process home, and copies Codex exec-policy files into `~/.codex/rules` (`CODEX_HOME/rules` when that variable is set), and generates Cursor `.mdc` files into `~/.cursor/rules` from the installed Claude rules.
|
|
4
4
|
|
|
5
5
|
## Files
|
|
6
6
|
|
|
7
7
|
| File | Purpose |
|
|
8
8
|
|---|---|
|
|
9
|
-
| `install.mjs` | Main installer: builds a read-only plan via `install-plan.mjs`, then runs mutations inside `install-transaction.mjs` recovery (copy content directories, merge hooks, install skills, prune, git hooks, mypy.ini); routes `CLAUDE_HOME`, the manifest path, and `~/.mypy.ini` through `resolve-install-root.mjs`; resolves single or multi-profile targets before mutation and writes one ownership manifest per target |
|
|
10
|
-
| `resolve-install-root.mjs` | Pure install-root resolver: precedence `--target` > `CLAUDE_CONFIG_DIR` > `~/.claude`, separator-boundary containment, and the declared external allowlist for `~/.mypy.ini` plus files under the Codex rules directory and the
|
|
9
|
+
| `install.mjs` | Main installer: builds a read-only plan via `install-plan.mjs`, then runs mutations inside `install-transaction.mjs` recovery (publish skill/agent lookup pointers, copy content directories, merge hooks, install skills, prune, git hooks, mypy.ini); routes `CLAUDE_HOME`, the agents home, the manifest path, and `~/.mypy.ini` through `resolve-install-root.mjs`; resolves single or multi-profile targets before mutation and writes one ownership manifest per target |
|
|
10
|
+
| `resolve-install-root.mjs` | Pure install-root resolver: precedence `--target` > `CLAUDE_CONFIG_DIR` > `~/.claude`, sibling `.agents` home (or `<root>.agents` for a named profile), separator-boundary containment, and the declared external allowlist for `~/.mypy.ini` plus files under the Codex rules directory, the Cursor home, and the agents home |
|
|
11
|
+
| `resolve-package-managed-directory.mjs` | Package-source resolver: skills and agents under `.agents/<name>/`, with a package-root `<name>/` fallback for dependency packages |
|
|
12
|
+
| `resolve-package-managed-directory.test.mjs` | Real-filesystem tests for the source resolver plus the live package `.agents` trees and `.claude` pointers |
|
|
13
|
+
| `publish-directory-pointer.mjs` | Directory-pointer helper: POSIX symlink or Windows junction from a Claude lookup path to the agents home; relocates a real directory at the lookup path into the target |
|
|
14
|
+
| `publish-directory-pointer.test.mjs` | Real-filesystem tests for pointer create, refresh, relocate, and unlink |
|
|
11
15
|
| `select-install-targets.mjs` | Pure target selection for main-default, explicit `--target`, and `--profile`/`--profiles`; rejects ambiguous or duplicate targets; builds per-target manifest records with `targetIdentity` and `managedRoot` |
|
|
12
16
|
| `install-plan.mjs` | Read-only install and uninstall plans: install preflight (managed root, source conflicts, Python, settings when hooks install) and uninstall preflight (settings JSON before removal, removable vs skipped manifest records), freezes plans E2/F execute |
|
|
13
17
|
| `install-transaction.mjs` | Install, update, and uninstall transaction journal: captures prior settings, manifest, managed files, and `core.hooksPath`, restores them on failure, and supports fault injection phases for recovery tests |
|
|
14
18
|
| `install.transaction.test.mjs` | Unit and sandbox installer tests for snapshot/restore and fault phases (`after_file_staging`, `after_settings_write`, `after_git_config`, `after_manifest_write`) |
|
|
15
19
|
| `install.uninstall-transaction.test.mjs` | Uninstall plan preflight and recovery: malformed/non-object settings fail before removal, each fault phase restores files/settings/manifest/`core.hooksPath`, retry succeeds, selected-root containment |
|
|
16
|
-
| `install.profile-root.test.mjs` | Contract tests for the install-root resolver: precedence, containment boundary, external allowlist, and the install.mjs import smoke check |
|
|
20
|
+
| `install.profile-root.test.mjs` | Contract tests for the install-root resolver: precedence, containment boundary, external allowlist, agents-home pairing, and the install.mjs import smoke check |
|
|
21
|
+
| `install.agents-home.test.mjs` | End-to-end tests that a sandbox install writes skills and agents under `.agents` and publishes `.claude/skills` and `.claude/agents` as directory pointers |
|
|
17
22
|
| `install.codex-rules.test.mjs` | Tests that Codex exec-policy files copy to `~/.codex/rules`, honor `CODEX_HOME`, skip `--only journal`, and uninstall without touching `default.rules` |
|
|
18
23
|
| `install.cursor-rules.test.mjs` | Tests that Cursor `.mdc` files generate into `~/.cursor/rules` from Claude rules, skip `--only journal`, and leave a local extra `.mdc` in place |
|
|
19
|
-
| `install-constants.mjs` | The named values `install.mjs` reads: `SKIPPED_SOURCE_ENTRY_NAMES` and `SKIPPED_SOURCE_FILE_EXTENSIONS` for the build artifacts the source walk leaves behind, `RUN_BACKUP_DIRECTORY_NAME_PATTERN` for the timestamp shape a run backup directory carries, `MANAGED_SKILLS_DIRECTORY_NAME` and `
|
|
20
|
-
| `ever-shipped-skills.mjs` | Static `EVER_SHIPPED_SKILL_NAMES` set of every top-level skill directory name the package has shipped; the installer subtracts the current skill set from it to prune retired skills left under `~/.
|
|
24
|
+
| `install-constants.mjs` | The named values `install.mjs` reads: `SKIPPED_SOURCE_ENTRY_NAMES` and `SKIPPED_SOURCE_FILE_EXTENSIONS` for the build artifacts the source walk leaves behind, `RUN_BACKUP_DIRECTORY_NAME_PATTERN` for the timestamp shape a run backup directory carries, `PACKAGE_AGENTS_HOME_DIRECTORY_NAME` for the `.agents` source home, `MANAGED_SKILLS_DIRECTORY_NAME` and `MANAGED_AGENTS_DIRECTORY_NAME` for the directory name each of those trees carries in a package source and under the agents home — read by the copy loops, the pointer publisher, and the prunes alike — `MANAGED_HOOKS_DIRECTORY_NAME` for the hooks tree under `~/.claude`, `SETTINGS_FILE_NAME` for the settings file the merge, the retired-hook prune, and the uninstall purge share, and `MYPY_INI_FILE_NAME` for the home-directory file `install_mypy_ini.mjs` writes, plus the Codex home and rules directory names `resolve-install-root.mjs` uses |
|
|
25
|
+
| `ever-shipped-skills.mjs` | Static `EVER_SHIPPED_SKILL_NAMES` set of every top-level skill directory name the package has shipped; the installer subtracts the current skill set from it to prune retired skills left under `~/.agents/skills` |
|
|
21
26
|
| `expand_home_directory_tokens.mjs` | Expands residual `$HOME` / `${HOME}` / `~/` tokens in settings.json hook and statusLine commands to absolute home paths at install time (literal-safe for homes that contain `$`) |
|
|
22
27
|
| `git_hooks_installer.mjs` | Installs or updates the `pre-commit`, `pre-push`, and `post-commit` Git hooks in the user's git config; writes hook scripts that delegate to the installed Python hooks |
|
|
23
28
|
| `install_mypy_ini.mjs` | Writes `~/.mypy.ini` with settings that make mypy find the hooks package and enforce strict type checking |
|
|
@@ -42,9 +47,9 @@ The decision reads the destination directory's entry names, cached one listing p
|
|
|
42
47
|
|
|
43
48
|
## Retired-skill prune
|
|
44
49
|
|
|
45
|
-
The full-install prune renames a retired skill directory into a timestamped backup rather than deleting it. Each pruned directory is renamed to `~/.claude/.claude-dev-env-pruned/<timestamp>/skills/<skill-name>/`, a backup root outside `~/.
|
|
50
|
+
The full-install prune renames a retired skill directory into a timestamped backup rather than deleting it. Each pruned directory is renamed to `~/.claude/.claude-dev-env-pruned/<timestamp>/skills/<skill-name>/`, a backup root outside `~/.agents/skills` so a backed-up directory is never re-discovered as a skill. The `skills/` segment matches the layout the stale-file prune writes, so one recovery point reads as a copy of the tree it came from. One run shares one timestamped root, so a run leaves one recovery point. A rename that fails leaves the directory in place with a logged warning and never falls back to deletion, so a prune failure costs at most a cosmetic leftover.
|
|
46
51
|
|
|
47
|
-
Matching is by directory name alone, so a user-authored directory whose name collides with a retired skill is backed up as if it were that skill. A directory is pruned when the prior install's manifest recorded it or the ever-shipped set names it, and the current install did not just write it. A name absent from all three of those sets, together with `~/.
|
|
52
|
+
Matching is by directory name alone, so a user-authored directory whose name collides with a retired skill is backed up as if it were that skill. A directory is pruned when the prior install's manifest recorded it or the ever-shipped set names it, and the current install did not just write it. A name absent from all three of those sets, together with `~/.agents/skills/_shared`, is left in place. Recovery of a wrongly-matched directory runs until the next pruning install, which keeps its own backup and retires the rest.
|
|
48
53
|
|
|
49
54
|
## Stale-file prune
|
|
50
55
|
|
|
@@ -52,7 +57,7 @@ A full install also moves aside a file under a managed root that the run leaves
|
|
|
52
57
|
|
|
53
58
|
Nothing moves unless a prior install recorded it. That single rule is what makes covering ten roots as safe as covering one: the installer reads the file list from `~/.claude/.claude-dev-env-manifest.json`, subtracts every file the run copied across all source roots, and moves what remains.
|
|
54
59
|
|
|
55
|
-
The prune runs once per root, each call confined to its own root. Per-root iteration gives the containment guard and the emptied-parent walk the root that owns each file, and it settles `_shared`: `~/.claude/_shared` and `~/.
|
|
60
|
+
The prune runs once per root, each call confined to its own root. Per-root iteration gives the containment guard and the emptied-parent walk the root that owns each file, and it settles `_shared`: `~/.claude/_shared` and `~/.agents/skills/_shared` are distinct absolute paths, so the `_shared` call and the `skills` call each see their own files and no path enters two diffs. Each root's content lands under `~/.claude/.claude-dev-env-pruned/<timestamp>/<root-name>/<relative>`. Every prune in a run shares that one timestamped root. A recorded path under no managed root — `~/.claude/CLAUDE.md`, `settings.json`, the manifest itself, and the `~/.mypy.ini` that sits in the home directory beside `~/.claude` — reaches no root's diff and stays where it is. The install summary reports the skills root's own count on the `skills:` line and the sum across roots on its own line.
|
|
56
61
|
|
|
57
62
|
The manifest diff limits the move to files the installer itself wrote. Runtime-generated content — a Python `__pycache__` entry, a ruff cache, a log — and any file a user authored under a managed root stay in place, because no install recorded them. Path comparison ignores letter case on Windows and macOS, so a package shipping `README.md` over an installed `Readme.md` keeps the bytes the run just wrote. A directory or a link standing where the manifest records a file is skipped with a warning, so the mover never renames a whole tree and never follows a link out of `~/.claude`. A directory emptied by a move is removed, walking up to the root the file sat under. A move that fails logs a warning and leaves the file in place, so a prune failure costs at most a stale file. The installer records each such path in the fresh manifest when the file is still on disk, so the file stays inside the next full install's diff and gets another attempt.
|
|
58
63
|
|
|
@@ -80,7 +85,7 @@ A run that moves nothing sweeps nothing, so every recovery point the user holds
|
|
|
80
85
|
|
|
81
86
|
`--uninstall` builds a read-only uninstall plan, captures a recovery snapshot, then removes each file the plan lists.
|
|
82
87
|
|
|
83
|
-
Settings JSON is validated before any removal. A malformed or non-object `settings.json` fails closed with the managed files still on disk. Each manifest record passes a containment guard: the path resolves under `~/.claude`, or it names the `~/.mypy.ini` the install writes in the home directory, or it sits under the Codex rules directory. Every other record is skipped with a warning and counted. Skipping keeps one malformed record — hand-edited, or written by an installer that ran against a different home — from stranding the user with a half-removed install. The purge removes every legitimate record, clears the manifest, and reports the skipped count.
|
|
88
|
+
Settings JSON is validated before any removal. A malformed or non-object `settings.json` fails closed with the managed files still on disk. Each manifest record passes a containment guard: the path resolves under `~/.claude`, or it names the `~/.mypy.ini` the install writes in the home directory, or it sits under the Codex rules directory, or it sits under the Cursor home, or it sits under the agents home. Every other record is skipped with a warning and counted. Skipping keeps one malformed record — hand-edited, or written by an installer that ran against a different home — from stranding the user with a half-removed install. The purge removes every legitimate record, clears the manifest, and reports the skipped count.
|
|
84
89
|
|
|
85
90
|
The uninstall runs inside the same snapshot/restore journal as install: prior settings, manifest, managed files, and `core.hooksPath` restore when a later phase fails, so a retry starts from a complete ownership record. The journal is discarded only after a successful commit.
|
|
86
91
|
|
|
@@ -94,8 +99,8 @@ Every prune runs behind the same two gates: a full install, and every declared d
|
|
|
94
99
|
|
|
95
100
|
| Export | Description |
|
|
96
101
|
|---|---|
|
|
97
|
-
| `CONTENT_DIRECTORIES` | Array of package subdirectory names copied verbatim to `~/.claude/` |
|
|
98
|
-
| `MANAGED_TOP_LEVEL_DIRECTORY_NAMES` | The content directories plus `skills` and `hooks`; the stale-file prune walks it to give each root its own diff, and the uninstall purge reads it to find the root a recorded file belongs to |
|
|
102
|
+
| `CONTENT_DIRECTORIES` | Array of package subdirectory names copied verbatim to `~/.claude/` (skills and agents are outside this list; they copy into the agents home) |
|
|
103
|
+
| `MANAGED_TOP_LEVEL_DIRECTORY_NAMES` | The content directories plus `skills`, `agents`, and `hooks`; the stale-file prune walks it to give each root its own diff, and the uninstall purge reads it to find the root a recorded file belongs to |
|
|
99
104
|
| `collectFiles(directory)` | Lists every file under a source directory, skipping the build-artifact names and extensions in `install-constants.mjs` |
|
|
100
105
|
| `pythonCandidatesForPlatform(platform)` | Returns ordered Python interpreter candidates to probe; `py -3` first on Windows to avoid Microsoft Store alias issues |
|
|
101
106
|
| `isWindowsStorePythonStub(path)` | Returns true when the path resolves to the non-spawnable WindowsApps stub |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The installer subtracts the skills the current package installs from this set
|
|
5
5
|
* to learn which shipped skills have retired, so a full reinstall can remove a
|
|
6
|
-
* retired skill left behind under ~/.
|
|
6
|
+
* retired skill left behind under ~/.agents/skills. Because the current set is
|
|
7
7
|
* subtracted at runtime, restoring a retired skill to the package protects it
|
|
8
8
|
* automatically — it re-enters the installed set and drops out of the retired
|
|
9
9
|
* set on the next install.
|
|
@@ -12,41 +12,64 @@
|
|
|
12
12
|
* installs from the npm tarball, which carries no source-repo history. Refresh
|
|
13
13
|
* it by running, from the repository root:
|
|
14
14
|
*
|
|
15
|
-
* git log --all --pretty=format: --name-only --
|
|
15
|
+
* git log --all --pretty=format: --name-only -- \
|
|
16
|
+
* 'packages/claude-dev-env/.agents/skills/*\/SKILL.md' \
|
|
17
|
+
* 'packages/claude-dev-env/skills/*\/SKILL.md' | sort -u
|
|
16
18
|
*
|
|
17
19
|
* and pasting each distinct top-level skill directory name below.
|
|
18
20
|
*/
|
|
19
21
|
export const EVER_SHIPPED_SKILL_NAMES = new Set([
|
|
22
|
+
'agent-prompt',
|
|
20
23
|
'anthropic-plan',
|
|
21
24
|
'auditing-claude-config',
|
|
22
25
|
'autoconverge',
|
|
26
|
+
'balatro',
|
|
23
27
|
'bdd-protocol',
|
|
24
28
|
'beat-sheet',
|
|
25
29
|
'bg-agent',
|
|
30
|
+
'build-goal-prompt',
|
|
26
31
|
'bugteam',
|
|
27
32
|
'caveman',
|
|
28
33
|
'closeout',
|
|
29
34
|
'code',
|
|
35
|
+
'comments',
|
|
36
|
+
'condensing-instructions',
|
|
30
37
|
'codex-review',
|
|
38
|
+
'context7-mcp',
|
|
31
39
|
'copilot-finding-triage',
|
|
32
40
|
'copilot-review',
|
|
33
41
|
'deep-research',
|
|
42
|
+
'descriptions',
|
|
43
|
+
'emergencies',
|
|
34
44
|
'everything-search',
|
|
35
45
|
'findbugs',
|
|
36
46
|
'fixbugs',
|
|
37
47
|
'fresh-branch',
|
|
48
|
+
'gen-9-patch-icons',
|
|
49
|
+
'gen-all-icons',
|
|
50
|
+
'gen-clock-numbers',
|
|
51
|
+
'gen-icon-tray',
|
|
52
|
+
'gen-main-icons',
|
|
53
|
+
'gen-misc-icons',
|
|
38
54
|
'gh-paginate',
|
|
39
55
|
'gotcha',
|
|
40
56
|
'grok-spawn',
|
|
41
57
|
'grokify',
|
|
58
|
+
'icon-review-sheet',
|
|
42
59
|
'imagegen',
|
|
43
60
|
'implement',
|
|
44
61
|
'issue-tracker',
|
|
45
62
|
'log-audit',
|
|
46
63
|
'logifix',
|
|
64
|
+
'midjourney-prompt',
|
|
65
|
+
'midjourney-submit',
|
|
47
66
|
'monitor-open-prs',
|
|
48
67
|
'orchestrator',
|
|
49
68
|
'orchestrator-refresh',
|
|
69
|
+
'plan-to-pr',
|
|
70
|
+
'pmax',
|
|
71
|
+
'pmid',
|
|
72
|
+
'pmin',
|
|
50
73
|
'post-audit-findings',
|
|
51
74
|
'pr-consistency-audit',
|
|
52
75
|
'pr-converge',
|
|
@@ -57,21 +80,29 @@ export const EVER_SHIPPED_SKILL_NAMES = new Set([
|
|
|
57
80
|
'pr-scope-resolve',
|
|
58
81
|
'pre-compact',
|
|
59
82
|
'privacy-hygiene',
|
|
83
|
+
'prompt-generator',
|
|
60
84
|
'qbug',
|
|
61
85
|
'rebase',
|
|
62
86
|
'recall',
|
|
87
|
+
'reconcile-account',
|
|
88
|
+
'reddit-post-optimizer',
|
|
63
89
|
'refine',
|
|
90
|
+
'release-notes-html',
|
|
64
91
|
'remember',
|
|
65
92
|
'research-mode',
|
|
66
93
|
'reviewer-gates',
|
|
94
|
+
'reviews',
|
|
95
|
+
'run-claude-dev-env',
|
|
67
96
|
'session-log',
|
|
68
97
|
'session-tidy',
|
|
98
|
+
'show',
|
|
69
99
|
'skill-builder',
|
|
100
|
+
'small-cl',
|
|
101
|
+
'split-pr',
|
|
70
102
|
'structure-prompt',
|
|
71
103
|
'task-build',
|
|
72
104
|
'team-advisor',
|
|
73
105
|
'update',
|
|
74
106
|
'usage-pause',
|
|
75
107
|
'verified-build',
|
|
76
|
-
'split-pr',
|
|
77
108
|
]);
|
|
@@ -44,30 +44,64 @@ export const SKIPPED_SOURCE_FILE_EXTENSIONS = new Set(['.pyc', '.pyo']);
|
|
|
44
44
|
export const RUN_BACKUP_DIRECTORY_NAME_PATTERN =
|
|
45
45
|
/^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z$/;
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Package subdirectory that holds the canonical skill and agent source trees.
|
|
49
|
+
*
|
|
50
|
+
* This package keeps those trees at `<package-root>/.agents/skills` and
|
|
51
|
+
* `<package-root>/.agents/agents`. `packages/claude-dev-env/.claude/skills` and
|
|
52
|
+
* `.claude/agents` are directory pointers to that home. A dependency package
|
|
53
|
+
* may still keep `skills/` and `agents/` at its package root; the source
|
|
54
|
+
* resolver tries this directory first and falls back to the package-root name.
|
|
55
|
+
*/
|
|
56
|
+
export const PACKAGE_AGENTS_HOME_DIRECTORY_NAME = '.agents';
|
|
57
|
+
|
|
47
58
|
/**
|
|
48
59
|
* The directory name skill directories carry in a package source and under
|
|
49
|
-
*
|
|
60
|
+
* the agents home.
|
|
50
61
|
*
|
|
51
|
-
* The copy loop reads `<package-root
|
|
52
|
-
* dependency
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* the
|
|
62
|
+
* The copy loop reads `<package-root>/.agents/skills` (or `<package-root>/skills`
|
|
63
|
+
* when a dependency still ships that layout) and writes `~/.agents/skills`.
|
|
64
|
+
* Claude Code still looks up skills at `~/.claude/skills`, which the installer
|
|
65
|
+
* publishes as a directory pointer to that agents-home folder. The dependency
|
|
66
|
+
* walk reads the resolved skills source, the retired-skill prune reads the
|
|
67
|
+
* installed directory through the pointer, and the per-root stale-file prune
|
|
68
|
+
* names it as one of its roots. One spelling serves every one of them, so the
|
|
69
|
+
* copy destination and the prune target stay the same directory.
|
|
56
70
|
*/
|
|
57
71
|
export const MANAGED_SKILLS_DIRECTORY_NAME = 'skills';
|
|
58
72
|
|
|
73
|
+
/**
|
|
74
|
+
* The directory name agent definition files carry in a package source and under
|
|
75
|
+
* the agents home.
|
|
76
|
+
*
|
|
77
|
+
* The copy loop reads `<package-root>/.agents/agents` (or `<package-root>/agents`
|
|
78
|
+
* when a dependency still ships that layout) and writes `~/.agents/agents`.
|
|
79
|
+
* Claude Code still looks up agents at `~/.claude/agents`, which the installer
|
|
80
|
+
* publishes as a directory pointer to that agents-home folder.
|
|
81
|
+
*/
|
|
82
|
+
export const MANAGED_AGENTS_DIRECTORY_NAME = 'agents';
|
|
83
|
+
|
|
59
84
|
/**
|
|
60
85
|
* The directory name hook scripts carry in a package source and under
|
|
61
|
-
*
|
|
86
|
+
* the agents home.
|
|
62
87
|
*
|
|
63
|
-
* The copy loop reads `<package-root
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* retired-hook diff takes its relative paths against it, and the per-root
|
|
67
|
-
* stale-file prune names it as one of its roots.
|
|
88
|
+
* The copy loop reads `<package-root>/.agents/hooks` (or `<package-root>/hooks`
|
|
89
|
+
* for a dependency with the legacy layout) and writes `~/.agents/hooks`.
|
|
90
|
+
* Claude and Codex lookup paths point at that canonical directory.
|
|
68
91
|
*/
|
|
69
92
|
export const MANAGED_HOOKS_DIRECTORY_NAME = 'hooks';
|
|
70
93
|
|
|
94
|
+
/**
|
|
95
|
+
* The directory name reusable scripts carry in a package source and under the
|
|
96
|
+
* agents home.
|
|
97
|
+
*/
|
|
98
|
+
export const MANAGED_SCRIPTS_DIRECTORY_NAME = 'scripts';
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Directory name Codex uses for installed hook scripts.
|
|
102
|
+
*/
|
|
103
|
+
export const CODEX_HOOKS_DIRECTORY_NAME = 'hooks';
|
|
104
|
+
|
|
71
105
|
/**
|
|
72
106
|
* The `~/.claude` file name that holds the user's harness settings.
|
|
73
107
|
*
|
package/bin/install-plan.mjs
CHANGED
|
@@ -285,7 +285,12 @@ export function describeInstallMutations(plan) {
|
|
|
285
285
|
if (plan.shouldPurgeBeforeReinstall) {
|
|
286
286
|
allMutations.push('purge_managed_installation');
|
|
287
287
|
}
|
|
288
|
-
allMutations.push(
|
|
288
|
+
allMutations.push(
|
|
289
|
+
'ensure_managed_root',
|
|
290
|
+
'publish_directory_pointers',
|
|
291
|
+
'copy_content_trees',
|
|
292
|
+
'copy_skills',
|
|
293
|
+
);
|
|
289
294
|
if (plan.shouldInstallHooks) {
|
|
290
295
|
allMutations.push(
|
|
291
296
|
'copy_hook_files',
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end install layout: skills and agents live under the agents home,
|
|
3
|
+
* and the Claude lookup paths are directory pointers to that home.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { test } from 'node:test';
|
|
7
|
+
import { strict as assert } from 'node:assert';
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import {
|
|
10
|
+
existsSync,
|
|
11
|
+
lstatSync,
|
|
12
|
+
mkdirSync,
|
|
13
|
+
mkdtempSync,
|
|
14
|
+
readFileSync,
|
|
15
|
+
realpathSync,
|
|
16
|
+
rmSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from 'node:fs';
|
|
19
|
+
import { tmpdir } from 'node:os';
|
|
20
|
+
import { dirname, join } from 'node:path';
|
|
21
|
+
import { fileURLToPath } from 'node:url';
|
|
22
|
+
import { CONTENT_DIRECTORIES } from './install.mjs';
|
|
23
|
+
import {
|
|
24
|
+
MANAGED_AGENTS_DIRECTORY_NAME,
|
|
25
|
+
MANAGED_SKILLS_DIRECTORY_NAME,
|
|
26
|
+
} from './install-constants.mjs';
|
|
27
|
+
import { isDirectoryPointerTo } from './publish-directory-pointer.mjs';
|
|
28
|
+
|
|
29
|
+
const THIS_DIRECTORY = dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
const INSTALLER_PATH = join(THIS_DIRECTORY, 'install.mjs');
|
|
31
|
+
const PACKAGE_DIRECTORY = dirname(THIS_DIRECTORY);
|
|
32
|
+
const SHIPPED_SKILL_NAME = 'privacy-hygiene';
|
|
33
|
+
const ELI5_SKILL_NAME = 'eli5';
|
|
34
|
+
const SHIPPED_AGENT_FILE_NAME = 'clean-coder.md';
|
|
35
|
+
const PERSONAL_SKILL_NAME = 'my-notes';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param {string} homeDirectory
|
|
39
|
+
* @param {string[]} extraArguments
|
|
40
|
+
* @returns {string}
|
|
41
|
+
*/
|
|
42
|
+
function runInstaller(homeDirectory, extraArguments) {
|
|
43
|
+
return execFileSync('node', [INSTALLER_PATH, ...extraArguments], {
|
|
44
|
+
cwd: PACKAGE_DIRECTORY,
|
|
45
|
+
encoding: 'utf8',
|
|
46
|
+
env: {
|
|
47
|
+
...process.env,
|
|
48
|
+
HOME: homeDirectory,
|
|
49
|
+
USERPROFILE: homeDirectory,
|
|
50
|
+
GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
|
|
51
|
+
CODEX_HOME: join(homeDirectory, '.codex'),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
test('CONTENT_DIRECTORIES omits agents because that tree installs to the agents home', () => {
|
|
57
|
+
assert.equal(CONTENT_DIRECTORIES.includes(MANAGED_AGENTS_DIRECTORY_NAME), false);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('a full install writes skills and agents under .agents and points .claude at them', () => {
|
|
61
|
+
const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-home-'));
|
|
62
|
+
const claudeHome = join(homeDirectory, '.claude');
|
|
63
|
+
const agentsHome = join(homeDirectory, '.agents');
|
|
64
|
+
const skillsInstallDirectory = join(agentsHome, MANAGED_SKILLS_DIRECTORY_NAME);
|
|
65
|
+
const agentsInstallDirectory = join(agentsHome, MANAGED_AGENTS_DIRECTORY_NAME);
|
|
66
|
+
const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
|
|
67
|
+
const agentsLookupDirectory = join(claudeHome, MANAGED_AGENTS_DIRECTORY_NAME);
|
|
68
|
+
try {
|
|
69
|
+
runInstaller(homeDirectory, []);
|
|
70
|
+
|
|
71
|
+
const canonicalSkillFile = join(
|
|
72
|
+
skillsInstallDirectory, SHIPPED_SKILL_NAME, 'SKILL.md',
|
|
73
|
+
);
|
|
74
|
+
const canonicalEli5SkillFile = join(
|
|
75
|
+
skillsInstallDirectory, ELI5_SKILL_NAME, 'SKILL.md',
|
|
76
|
+
);
|
|
77
|
+
const lookupSkillFile = join(
|
|
78
|
+
skillsLookupDirectory, SHIPPED_SKILL_NAME, 'SKILL.md',
|
|
79
|
+
);
|
|
80
|
+
const lookupEli5SkillFile = join(
|
|
81
|
+
skillsLookupDirectory, ELI5_SKILL_NAME, 'SKILL.md',
|
|
82
|
+
);
|
|
83
|
+
const canonicalAgentFile = join(agentsInstallDirectory, SHIPPED_AGENT_FILE_NAME);
|
|
84
|
+
const lookupAgentFile = join(agentsLookupDirectory, SHIPPED_AGENT_FILE_NAME);
|
|
85
|
+
|
|
86
|
+
assert.equal(existsSync(canonicalSkillFile), true, 'skill file lives under .agents/skills');
|
|
87
|
+
assert.equal(existsSync(canonicalEli5SkillFile), true, 'ELI5 skill file lives under .agents/skills');
|
|
88
|
+
assert.equal(existsSync(canonicalAgentFile), true, 'agent file lives under .agents/agents');
|
|
89
|
+
assert.equal(lstatSync(skillsLookupDirectory).isSymbolicLink(), true);
|
|
90
|
+
assert.equal(lstatSync(agentsLookupDirectory).isSymbolicLink(), true);
|
|
91
|
+
assert.equal(
|
|
92
|
+
isDirectoryPointerTo(skillsLookupDirectory, skillsInstallDirectory),
|
|
93
|
+
true,
|
|
94
|
+
);
|
|
95
|
+
assert.equal(
|
|
96
|
+
isDirectoryPointerTo(agentsLookupDirectory, agentsInstallDirectory),
|
|
97
|
+
true,
|
|
98
|
+
);
|
|
99
|
+
assert.equal(
|
|
100
|
+
readFileSync(lookupSkillFile, 'utf8'),
|
|
101
|
+
readFileSync(canonicalSkillFile, 'utf8'),
|
|
102
|
+
);
|
|
103
|
+
assert.equal(
|
|
104
|
+
readFileSync(lookupEli5SkillFile, 'utf8'),
|
|
105
|
+
readFileSync(canonicalEli5SkillFile, 'utf8'),
|
|
106
|
+
);
|
|
107
|
+
assert.equal(realpathSync(lookupSkillFile), realpathSync(canonicalSkillFile));
|
|
108
|
+
assert.equal(realpathSync(lookupEli5SkillFile), realpathSync(canonicalEli5SkillFile));
|
|
109
|
+
assert.equal(
|
|
110
|
+
readFileSync(lookupAgentFile, 'utf8'),
|
|
111
|
+
readFileSync(canonicalAgentFile, 'utf8'),
|
|
112
|
+
);
|
|
113
|
+
assert.equal(realpathSync(lookupAgentFile), realpathSync(canonicalAgentFile));
|
|
114
|
+
assert.equal(
|
|
115
|
+
lstatSync(skillsInstallDirectory).isSymbolicLink(),
|
|
116
|
+
false,
|
|
117
|
+
'the agents-home skills directory is a real directory',
|
|
118
|
+
);
|
|
119
|
+
assert.equal(
|
|
120
|
+
lstatSync(agentsInstallDirectory).isSymbolicLink(),
|
|
121
|
+
false,
|
|
122
|
+
'the agents-home agents directory is a real directory',
|
|
123
|
+
);
|
|
124
|
+
} finally {
|
|
125
|
+
rmSync(homeDirectory, { recursive: true, force: true });
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('a real skills directory from an older install lands in .agents and stays readable through the pointer', () => {
|
|
130
|
+
const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-relocate-'));
|
|
131
|
+
const claudeHome = join(homeDirectory, '.claude');
|
|
132
|
+
const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
|
|
133
|
+
const personalSkillFile = join(
|
|
134
|
+
skillsLookupDirectory, PERSONAL_SKILL_NAME, 'notes.md',
|
|
135
|
+
);
|
|
136
|
+
try {
|
|
137
|
+
mkdirSync(join(skillsLookupDirectory, PERSONAL_SKILL_NAME), { recursive: true });
|
|
138
|
+
writeFileSync(personalSkillFile, 'keep this personal skill\n');
|
|
139
|
+
|
|
140
|
+
runInstaller(homeDirectory, []);
|
|
141
|
+
|
|
142
|
+
const canonicalPersonalFile = join(
|
|
143
|
+
homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
|
|
144
|
+
PERSONAL_SKILL_NAME, 'notes.md',
|
|
145
|
+
);
|
|
146
|
+
assert.equal(lstatSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME)).isSymbolicLink(), true);
|
|
147
|
+
assert.equal(existsSync(canonicalPersonalFile), true);
|
|
148
|
+
assert.equal(
|
|
149
|
+
readFileSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md'), 'utf8'),
|
|
150
|
+
'keep this personal skill\n',
|
|
151
|
+
);
|
|
152
|
+
assert.equal(
|
|
153
|
+
realpathSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md')),
|
|
154
|
+
realpathSync(canonicalPersonalFile),
|
|
155
|
+
);
|
|
156
|
+
} finally {
|
|
157
|
+
rmSync(homeDirectory, { recursive: true, force: true });
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test('uninstall removes managed skill files from the agents home and leaves a personal skill reachable through the pointer', () => {
|
|
162
|
+
const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-uninstall-'));
|
|
163
|
+
const claudeHome = join(homeDirectory, '.claude');
|
|
164
|
+
const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
|
|
165
|
+
try {
|
|
166
|
+
mkdirSync(join(skillsLookupDirectory, PERSONAL_SKILL_NAME), { recursive: true });
|
|
167
|
+
writeFileSync(
|
|
168
|
+
join(skillsLookupDirectory, PERSONAL_SKILL_NAME, 'notes.md'),
|
|
169
|
+
'keep this personal skill\n',
|
|
170
|
+
);
|
|
171
|
+
runInstaller(homeDirectory, []);
|
|
172
|
+
runInstaller(homeDirectory, ['--uninstall']);
|
|
173
|
+
|
|
174
|
+
const shippedSkillFile = join(
|
|
175
|
+
homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
|
|
176
|
+
SHIPPED_SKILL_NAME, 'SKILL.md',
|
|
177
|
+
);
|
|
178
|
+
const personalSkillFile = join(
|
|
179
|
+
homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
|
|
180
|
+
PERSONAL_SKILL_NAME, 'notes.md',
|
|
181
|
+
);
|
|
182
|
+
assert.equal(existsSync(shippedSkillFile), false);
|
|
183
|
+
assert.equal(existsSync(personalSkillFile), true);
|
|
184
|
+
assert.equal(
|
|
185
|
+
isDirectoryPointerTo(
|
|
186
|
+
join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME),
|
|
187
|
+
join(homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME),
|
|
188
|
+
),
|
|
189
|
+
true,
|
|
190
|
+
'the lookup pointer stays so a personal skill remains discoverable',
|
|
191
|
+
);
|
|
192
|
+
assert.equal(
|
|
193
|
+
readFileSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md'), 'utf8'),
|
|
194
|
+
'keep this personal skill\n',
|
|
195
|
+
);
|
|
196
|
+
} finally {
|
|
197
|
+
rmSync(homeDirectory, { recursive: true, force: true });
|
|
198
|
+
}
|
|
199
|
+
});
|
|
@@ -45,7 +45,7 @@ test('resolveInstallRoot names ~/.cursor/rules and allows generated mdc files un
|
|
|
45
45
|
);
|
|
46
46
|
assert.equal(resolution.cursorRulesInstallDirectory, expectedDirectory);
|
|
47
47
|
assert.equal(
|
|
48
|
-
isAllowedInstallDestination(join(expectedDirectory, '
|
|
48
|
+
isAllowedInstallDestination(join(expectedDirectory, 'asd-ste100-language.mdc'), resolution),
|
|
49
49
|
true,
|
|
50
50
|
);
|
|
51
51
|
assert.equal(
|
|
@@ -72,7 +72,7 @@ test('a full install writes stem-named Cursor rules and leaves a local extra mdc
|
|
|
72
72
|
homeDirectory,
|
|
73
73
|
DEFAULT_CURSOR_DIRECTORY_NAME,
|
|
74
74
|
CURSOR_RULES_DIRECTORY_NAME,
|
|
75
|
-
'
|
|
75
|
+
'asd-ste100-language.mdc',
|
|
76
76
|
);
|
|
77
77
|
assert.equal(existsSync(generatedPath), true);
|
|
78
78
|
const generatedText = readFileSync(generatedPath, 'utf8');
|
|
@@ -90,7 +90,7 @@ test('--only journal skips Cursor rule generation; --only core writes them', ()
|
|
|
90
90
|
homeDirectory,
|
|
91
91
|
DEFAULT_CURSOR_DIRECTORY_NAME,
|
|
92
92
|
CURSOR_RULES_DIRECTORY_NAME,
|
|
93
|
-
'
|
|
93
|
+
'asd-ste100-language.mdc',
|
|
94
94
|
);
|
|
95
95
|
runInstaller(homeDirectory, ['--only', 'journal']);
|
|
96
96
|
assert.equal(existsSync(generatedPath), false);
|