@opengsd/gsd-path 1.3.1 → 1.5.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.md +2 -207
- package/CHANGELOG.md +331 -69
- package/DOCS.md +25 -9
- package/FULL.md +12 -5
- package/GUIDE.md +1 -1
- package/HOOKS.md +104 -14
- package/QUICK.md +5 -2
- package/README.md +131 -111
- package/RUNTIME.md +2 -2
- package/UPDATE.md +61 -11
- package/WORKFLOW.md +44 -7
- package/package.json +13 -9
- package/platforms/shared-agents/dispatch.md +13 -0
- package/scripts/_common.py +619 -18
- package/scripts/archive_milestone.py +160 -86
- package/scripts/bootstrap_repository.py +8 -5
- package/scripts/build_recovery.py +100 -32
- package/scripts/build_state.py +143 -24
- package/scripts/check_docs_audit.py +91 -7
- package/scripts/check_handoffs.py +662 -50
- package/scripts/check_task_briefs.py +338 -30
- package/scripts/check_update.py +2 -2
- package/scripts/core_hook_gate.py +10 -1
- package/scripts/core_hook_settings.py +11 -4
- package/scripts/detect_project.py +587 -32
- package/scripts/discussion_records.py +19 -13
- package/scripts/discussion_validate.py +152 -50
- package/scripts/dispatch_driver.py +501 -46
- package/scripts/git_guard.py +118 -31
- package/scripts/guard_hook.py +1567 -194
- package/scripts/install.mjs +77 -46
- package/scripts/install.py +611 -50
- package/scripts/integration.py +580 -25
- package/scripts/isolation.py +1438 -57
- package/scripts/lean_verification.py +99 -19
- package/scripts/loop_run.py +31 -29
- package/scripts/members.py +706 -0
- package/scripts/migrate_core.py +2 -2
- package/scripts/path_config.py +5 -5
- package/scripts/pipeline_diagnose.py +82 -31
- package/scripts/pipeline_git.py +124 -34
- package/scripts/pipeline_state.py +287 -87
- package/scripts/pipeline_undo.py +218 -30
- package/scripts/promote_lookahead.py +1 -1
- package/scripts/review_panel.py +1 -1
- package/scripts/runtime_store.py +55 -11
- package/scripts/skill-resources.json +37 -5
- package/scripts/state_checkpoint.py +135 -44
- package/scripts/state_promote.py +2 -0
- package/scripts/status_runtime.py +58 -10
- package/scripts/sync_skill_resources.py +8 -7
- package/scripts/task_context.py +12 -3
- package/scripts/token_budget.py +12 -8
- package/scripts/wizard.mjs +1 -0
- package/scripts/workflow_run.py +107 -30
- package/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path/BUILD.md +7 -1
- package/skills/gsd-path/DECIDE.md +11 -4
- package/skills/gsd-path/DEFINE.md +36 -4
- package/skills/gsd-path/DOCS-AUDIT.md +6 -4
- package/skills/gsd-path/INSPECT.md +5 -4
- package/skills/gsd-path/PLAN.md +18 -4
- package/skills/gsd-path/RESEARCH.md +13 -1
- package/skills/gsd-path/ROADMAP.md +2 -1
- package/skills/gsd-path/SHIP.md +33 -11
- package/skills/gsd-path/SKILL.md +45 -1
- package/skills/gsd-path/references/build-native.md +63 -15
- package/skills/gsd-path/references/codebase-mapper.md +2 -1
- package/skills/gsd-path/references/dispatch.md +13 -0
- package/skills/gsd-path/references/docs-auditor.md +7 -1
- package/skills/gsd-path/references/operating-rules.md +214 -0
- package/skills/gsd-path/references/planner.md +22 -4
- package/skills/gsd-path/references/reviewer-final.md +20 -2
- package/skills/gsd-path/references/reviewer-wave.md +18 -5
- package/skills/gsd-path/references/reviewer.md +3 -1
- package/skills/gsd-path/references/spec-probes.md +150 -0
- package/skills/gsd-path/scripts/_common.py +619 -18
- package/skills/gsd-path/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path/scripts/bootstrap_repository.py +8 -5
- package/skills/gsd-path/scripts/build_recovery.py +100 -32
- package/skills/gsd-path/scripts/build_state.py +143 -24
- package/skills/gsd-path/scripts/check_docs_audit.py +91 -7
- package/skills/gsd-path/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path/scripts/check_update.py +2 -2
- package/skills/gsd-path/scripts/detect_project.py +587 -32
- package/skills/gsd-path/scripts/discussion_records.py +19 -13
- package/skills/gsd-path/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path/scripts/dispatch_driver.py +501 -46
- package/skills/gsd-path/scripts/git_guard.py +118 -31
- package/skills/gsd-path/scripts/integration.py +580 -25
- package/skills/gsd-path/scripts/isolation.py +1438 -57
- package/skills/gsd-path/scripts/lean_verification.py +99 -19
- package/skills/gsd-path/scripts/loop_run.py +31 -29
- package/skills/gsd-path/scripts/members.py +706 -0
- package/skills/gsd-path/scripts/path_config.py +5 -5
- package/skills/gsd-path/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path/scripts/review_panel.py +1 -1
- package/skills/gsd-path/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path/scripts/state_promote.py +2 -0
- package/skills/gsd-path/scripts/status_runtime.py +58 -10
- package/skills/gsd-path/scripts/task_context.py +12 -3
- package/skills/gsd-path/scripts/token_budget.py +12 -8
- package/skills/gsd-path/scripts/workflow_run.py +107 -30
- package/skills/gsd-path/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path/templates/codebase.md +1 -1
- package/skills/gsd-path/templates/docs-audit.md +6 -2
- package/skills/gsd-path/templates/final-review.md +16 -4
- package/skills/gsd-path/templates/gap-review.md +2 -1
- package/skills/gsd-path/templates/intent.md +30 -0
- package/skills/gsd-path/templates/patch-findings.md +3 -3
- package/skills/gsd-path/templates/plan.md +17 -2
- package/skills/gsd-path/templates/research-handoff.md +14 -3
- package/skills/gsd-path/templates/state.md +1 -1
- package/skills/gsd-path/templates/task.md +1 -0
- package/skills/gsd-path/templates/wave-review.md +16 -4
- package/skills/gsd-path-build/SKILL.md +7 -1
- package/skills/gsd-path-build/references/build-native.md +63 -15
- package/skills/gsd-path-build/references/dispatch.md +13 -0
- package/skills/gsd-path-build/references/operating-rules.md +214 -0
- package/skills/gsd-path-build/references/reviewer-final.md +20 -2
- package/skills/gsd-path-build/references/reviewer-wave.md +18 -5
- package/skills/gsd-path-build/references/reviewer.md +3 -1
- package/skills/gsd-path-build/references/spec-probes.md +150 -0
- package/skills/gsd-path-build/scripts/_common.py +619 -18
- package/skills/gsd-path-build/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-build/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-build/scripts/build_state.py +143 -24
- package/skills/gsd-path-build/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-build/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-build/scripts/detect_project.py +587 -32
- package/skills/gsd-path-build/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-build/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-build/scripts/dispatch_driver.py +501 -46
- package/skills/gsd-path-build/scripts/integration.py +580 -25
- package/skills/gsd-path-build/scripts/isolation.py +1438 -57
- package/skills/gsd-path-build/scripts/loop_run.py +31 -29
- package/skills/gsd-path-build/scripts/members.py +706 -0
- package/skills/gsd-path-build/scripts/path_config.py +5 -5
- package/skills/gsd-path-build/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-build/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-build/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-build/scripts/review_panel.py +1 -1
- package/skills/gsd-path-build/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-build/scripts/state_promote.py +2 -0
- package/skills/gsd-path-build/scripts/task_context.py +12 -3
- package/skills/gsd-path-build/scripts/token_budget.py +12 -8
- package/skills/gsd-path-build/scripts/workflow_run.py +107 -30
- package/skills/gsd-path-build/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-build/templates/task.md +1 -0
- package/skills/gsd-path-build/templates/wave-review.md +16 -4
- package/skills/gsd-path-decide/SKILL.md +11 -4
- package/skills/gsd-path-decide/references/dispatch.md +13 -0
- package/skills/gsd-path-decide/references/operating-rules.md +214 -0
- package/skills/gsd-path-decide/scripts/_common.py +619 -18
- package/skills/gsd-path-decide/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-decide/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-decide/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-decide/scripts/detect_project.py +587 -32
- package/skills/gsd-path-decide/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-decide/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-decide/scripts/integration.py +580 -25
- package/skills/gsd-path-decide/scripts/isolation.py +1438 -57
- package/skills/gsd-path-decide/scripts/loop_run.py +31 -29
- package/skills/gsd-path-decide/scripts/members.py +706 -0
- package/skills/gsd-path-decide/scripts/path_config.py +5 -5
- package/skills/gsd-path-decide/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-decide/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-decide/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-decide/scripts/review_panel.py +1 -1
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-decide/scripts/state_promote.py +2 -0
- package/skills/gsd-path-decide/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-define/SKILL.md +36 -4
- package/skills/gsd-path-define/references/operating-rules.md +214 -0
- package/skills/gsd-path-define/references/spec-probes.md +150 -0
- package/skills/gsd-path-define/scripts/_common.py +619 -18
- package/skills/gsd-path-define/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-define/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-define/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-define/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-define/scripts/detect_project.py +587 -32
- package/skills/gsd-path-define/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-define/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-define/scripts/integration.py +580 -25
- package/skills/gsd-path-define/scripts/isolation.py +1438 -57
- package/skills/gsd-path-define/scripts/loop_run.py +31 -29
- package/skills/gsd-path-define/scripts/members.py +706 -0
- package/skills/gsd-path-define/scripts/path_config.py +5 -5
- package/skills/gsd-path-define/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-define/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-define/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-define/scripts/review_panel.py +1 -1
- package/skills/gsd-path-define/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-define/scripts/state_promote.py +2 -0
- package/skills/gsd-path-define/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-define/templates/intent.md +30 -0
- package/skills/gsd-path-define/templates/state.md +1 -1
- package/skills/gsd-path-discuss/SKILL.md +2 -1
- package/skills/gsd-path-discuss/references/operating-rules.md +214 -0
- package/skills/gsd-path-discuss/scripts/_common.py +619 -18
- package/skills/gsd-path-discuss/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-discuss/scripts/loop_run.py +31 -29
- package/skills/gsd-path-discuss/scripts/path_config.py +5 -5
- package/skills/gsd-path-discuss/scripts/review_panel.py +1 -1
- package/skills/gsd-path-discuss/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-docs-audit/SKILL.md +6 -4
- package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +7 -1
- package/skills/gsd-path-docs-audit/references/operating-rules.md +214 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +619 -18
- package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +91 -7
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +587 -32
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-docs-audit/scripts/integration.py +580 -25
- package/skills/gsd-path-docs-audit/scripts/isolation.py +1438 -57
- package/skills/gsd-path-docs-audit/scripts/loop_run.py +31 -29
- package/skills/gsd-path-docs-audit/scripts/members.py +706 -0
- package/skills/gsd-path-docs-audit/scripts/path_config.py +5 -5
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-docs-audit/scripts/review_panel.py +1 -1
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +2 -0
- package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +6 -2
- package/skills/gsd-path-forensics/SKILL.md +2 -1
- package/skills/gsd-path-forensics/references/operating-rules.md +214 -0
- package/skills/gsd-path-forensics/scripts/_common.py +619 -18
- package/skills/gsd-path-forensics/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-forensics/scripts/loop_run.py +31 -29
- package/skills/gsd-path-forensics/scripts/path_config.py +5 -5
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +82 -31
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +218 -30
- package/skills/gsd-path-forensics/scripts/review_panel.py +1 -1
- package/skills/gsd-path-forensics/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-inspect/SKILL.md +5 -4
- package/skills/gsd-path-inspect/references/codebase-mapper.md +2 -1
- package/skills/gsd-path-inspect/references/dispatch.md +13 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +7 -1
- package/skills/gsd-path-inspect/references/operating-rules.md +214 -0
- package/skills/gsd-path-inspect/scripts/_common.py +619 -18
- package/skills/gsd-path-inspect/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-inspect/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +91 -7
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-inspect/scripts/detect_project.py +587 -32
- package/skills/gsd-path-inspect/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-inspect/scripts/integration.py +580 -25
- package/skills/gsd-path-inspect/scripts/isolation.py +1438 -57
- package/skills/gsd-path-inspect/scripts/loop_run.py +31 -29
- package/skills/gsd-path-inspect/scripts/members.py +706 -0
- package/skills/gsd-path-inspect/scripts/path_config.py +5 -5
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-inspect/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-inspect/scripts/review_panel.py +1 -1
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-inspect/scripts/state_promote.py +2 -0
- package/skills/gsd-path-inspect/scripts/workflow_run.py +107 -30
- package/skills/gsd-path-inspect/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-inspect/templates/codebase.md +1 -1
- package/skills/gsd-path-inspect/templates/docs-audit.md +6 -2
- package/skills/gsd-path-inspect/templates/state.md +1 -1
- package/skills/gsd-path-loop/SKILL.md +2 -1
- package/skills/gsd-path-loop/references/operating-rules.md +214 -0
- package/skills/gsd-path-loop/scripts/_common.py +619 -18
- package/skills/gsd-path-loop/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-loop/scripts/loop_run.py +31 -29
- package/skills/gsd-path-loop/scripts/path_config.py +5 -5
- package/skills/gsd-path-loop/scripts/review_panel.py +1 -1
- package/skills/gsd-path-loop/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-migrate/SKILL.md +2 -1
- package/skills/gsd-path-migrate/references/operating-rules.md +214 -0
- package/skills/gsd-path-migrate/scripts/_common.py +619 -18
- package/skills/gsd-path-migrate/scripts/core_hook_gate.py +10 -1
- package/skills/gsd-path-migrate/scripts/core_hook_settings.py +11 -4
- package/skills/gsd-path-migrate/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-migrate/scripts/loop_run.py +31 -29
- package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -2
- package/skills/gsd-path-migrate/scripts/path_config.py +5 -5
- package/skills/gsd-path-migrate/scripts/review_panel.py +1 -1
- package/skills/gsd-path-plan/SKILL.md +18 -4
- package/skills/gsd-path-plan/references/dispatch.md +13 -0
- package/skills/gsd-path-plan/references/operating-rules.md +214 -0
- package/skills/gsd-path-plan/references/planner.md +22 -4
- package/skills/gsd-path-plan/references/spec-probes.md +150 -0
- package/skills/gsd-path-plan/scripts/_common.py +619 -18
- package/skills/gsd-path-plan/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-plan/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-plan/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-plan/scripts/detect_project.py +587 -32
- package/skills/gsd-path-plan/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-plan/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-plan/scripts/integration.py +580 -25
- package/skills/gsd-path-plan/scripts/isolation.py +1438 -57
- package/skills/gsd-path-plan/scripts/loop_run.py +31 -29
- package/skills/gsd-path-plan/scripts/members.py +706 -0
- package/skills/gsd-path-plan/scripts/path_config.py +5 -5
- package/skills/gsd-path-plan/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-plan/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-plan/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-plan/scripts/review_panel.py +1 -1
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-plan/scripts/state_promote.py +2 -0
- package/skills/gsd-path-plan/scripts/workflow_run.py +107 -30
- package/skills/gsd-path-plan/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
- package/skills/gsd-path-plan/templates/plan.md +17 -2
- package/skills/gsd-path-plan/templates/task.md +1 -0
- package/skills/gsd-path-research/SKILL.md +13 -1
- package/skills/gsd-path-research/references/dispatch.md +13 -0
- package/skills/gsd-path-research/references/operating-rules.md +214 -0
- package/skills/gsd-path-research/scripts/_common.py +619 -18
- package/skills/gsd-path-research/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-research/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-research/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-research/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-research/scripts/detect_project.py +587 -32
- package/skills/gsd-path-research/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-research/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-research/scripts/integration.py +580 -25
- package/skills/gsd-path-research/scripts/isolation.py +1438 -57
- package/skills/gsd-path-research/scripts/loop_run.py +31 -29
- package/skills/gsd-path-research/scripts/members.py +706 -0
- package/skills/gsd-path-research/scripts/path_config.py +5 -5
- package/skills/gsd-path-research/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-research/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-research/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-research/scripts/review_panel.py +1 -1
- package/skills/gsd-path-research/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-research/scripts/state_promote.py +2 -0
- package/skills/gsd-path-research/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-research/templates/research-handoff.md +14 -3
- package/skills/gsd-path-roadmap/SKILL.md +2 -1
- package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
- package/skills/gsd-path-roadmap/references/operating-rules.md +214 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +619 -18
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-roadmap/scripts/detect_project.py +587 -32
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-roadmap/scripts/integration.py +580 -25
- package/skills/gsd-path-roadmap/scripts/isolation.py +1438 -57
- package/skills/gsd-path-roadmap/scripts/loop_run.py +31 -29
- package/skills/gsd-path-roadmap/scripts/members.py +706 -0
- package/skills/gsd-path-roadmap/scripts/path_config.py +5 -5
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-roadmap/scripts/review_panel.py +1 -1
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-roadmap/scripts/state_promote.py +2 -0
- package/skills/gsd-path-roadmap/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-ship/SKILL.md +33 -11
- package/skills/gsd-path-ship/references/dispatch.md +13 -0
- package/skills/gsd-path-ship/references/operating-rules.md +214 -0
- package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
- package/skills/gsd-path-ship/references/reviewer-wave.md +18 -5
- package/skills/gsd-path-ship/references/reviewer.md +3 -1
- package/skills/gsd-path-ship/references/spec-probes.md +150 -0
- package/skills/gsd-path-ship/scripts/_common.py +619 -18
- package/skills/gsd-path-ship/scripts/archive_milestone.py +160 -86
- package/skills/gsd-path-ship/scripts/build_recovery.py +100 -32
- package/skills/gsd-path-ship/scripts/build_state.py +143 -24
- package/skills/gsd-path-ship/scripts/check_handoffs.py +662 -50
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +338 -30
- package/skills/gsd-path-ship/scripts/detect_project.py +587 -32
- package/skills/gsd-path-ship/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-ship/scripts/discussion_validate.py +152 -50
- package/skills/gsd-path-ship/scripts/integration.py +580 -25
- package/skills/gsd-path-ship/scripts/isolation.py +1438 -57
- package/skills/gsd-path-ship/scripts/lean_verification.py +99 -19
- package/skills/gsd-path-ship/scripts/loop_run.py +31 -29
- package/skills/gsd-path-ship/scripts/members.py +706 -0
- package/skills/gsd-path-ship/scripts/path_config.py +5 -5
- package/skills/gsd-path-ship/scripts/pipeline_git.py +124 -34
- package/skills/gsd-path-ship/scripts/pipeline_state.py +287 -87
- package/skills/gsd-path-ship/scripts/promote_lookahead.py +1 -1
- package/skills/gsd-path-ship/scripts/review_panel.py +1 -1
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +135 -44
- package/skills/gsd-path-ship/scripts/state_promote.py +2 -0
- package/skills/gsd-path-ship/scripts/workflow_run.py +107 -30
- package/skills/gsd-path-ship/scripts/worktree_paths.py +72 -10
- package/skills/gsd-path-ship/templates/final-review.md +16 -4
- package/skills/gsd-path-ship/templates/gap-review.md +2 -1
- package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
- package/skills/gsd-path-ship/templates/wave-review.md +16 -4
- package/skills/gsd-path-undo/SKILL.md +2 -1
- package/skills/gsd-path-undo/references/operating-rules.md +214 -0
- package/skills/gsd-path-undo/scripts/_common.py +619 -18
- package/skills/gsd-path-undo/scripts/discussion_records.py +19 -13
- package/skills/gsd-path-undo/scripts/loop_run.py +31 -29
- package/skills/gsd-path-undo/scripts/path_config.py +5 -5
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +218 -30
- package/skills/gsd-path-undo/scripts/review_panel.py +1 -1
- package/skills/gsd-path-undo/scripts/worktree_paths.py +72 -10
- package/skills/path/BUILD.md +7 -1
- package/skills/path/DECIDE.md +11 -4
- package/skills/path/DEFINE.md +36 -4
- package/skills/path/DOCS-AUDIT.md +6 -4
- package/skills/path/INSPECT.md +5 -4
- package/skills/path/PLAN.md +18 -4
- package/skills/path/RESEARCH.md +13 -1
- package/skills/path/ROADMAP.md +2 -1
- package/skills/path/SHIP.md +33 -11
- package/skills/path/SKILL.md +45 -1
- package/skills/path/references/build-native.md +63 -15
- package/skills/path/references/codebase-mapper.md +2 -1
- package/skills/path/references/dispatch.md +13 -0
- package/skills/path/references/docs-auditor.md +7 -1
- package/skills/path/references/operating-rules.md +214 -0
- package/skills/path/references/planner.md +22 -4
- package/skills/path/references/reviewer-final.md +20 -2
- package/skills/path/references/reviewer-wave.md +18 -5
- package/skills/path/references/reviewer.md +3 -1
- package/skills/path/references/spec-probes.md +150 -0
- package/skills/path/scripts/_common.py +619 -18
- package/skills/path/scripts/archive_milestone.py +160 -86
- package/skills/path/scripts/bootstrap_repository.py +8 -5
- package/skills/path/scripts/build_recovery.py +100 -32
- package/skills/path/scripts/build_state.py +143 -24
- package/skills/path/scripts/check_docs_audit.py +91 -7
- package/skills/path/scripts/check_handoffs.py +662 -50
- package/skills/path/scripts/check_task_briefs.py +338 -30
- package/skills/path/scripts/check_update.py +2 -2
- package/skills/path/scripts/detect_project.py +587 -32
- package/skills/path/scripts/discussion_records.py +19 -13
- package/skills/path/scripts/discussion_validate.py +152 -50
- package/skills/path/scripts/dispatch_driver.py +501 -46
- package/skills/path/scripts/git_guard.py +118 -31
- package/skills/path/scripts/integration.py +580 -25
- package/skills/path/scripts/isolation.py +1438 -57
- package/skills/path/scripts/lean_verification.py +99 -19
- package/skills/path/scripts/loop_run.py +31 -29
- package/skills/path/scripts/members.py +706 -0
- package/skills/path/scripts/path_config.py +5 -5
- package/skills/path/scripts/pipeline_git.py +124 -34
- package/skills/path/scripts/pipeline_state.py +287 -87
- package/skills/path/scripts/promote_lookahead.py +1 -1
- package/skills/path/scripts/review_panel.py +1 -1
- package/skills/path/scripts/state_checkpoint.py +135 -44
- package/skills/path/scripts/state_promote.py +2 -0
- package/skills/path/scripts/status_runtime.py +58 -10
- package/skills/path/scripts/task_context.py +12 -3
- package/skills/path/scripts/token_budget.py +12 -8
- package/skills/path/scripts/workflow_run.py +107 -30
- package/skills/path/scripts/worktree_paths.py +72 -10
- package/skills/path/templates/codebase.md +1 -1
- package/skills/path/templates/docs-audit.md +6 -2
- package/skills/path/templates/final-review.md +16 -4
- package/skills/path/templates/gap-review.md +2 -1
- package/skills/path/templates/intent.md +30 -0
- package/skills/path/templates/patch-findings.md +3 -3
- package/skills/path/templates/plan.md +17 -2
- package/skills/path/templates/research-handoff.md +14 -3
- package/skills/path/templates/state.md +1 -1
- package/skills/path/templates/task.md +1 -0
- package/skills/path/templates/wave-review.md +16 -4
- package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
package/scripts/install.mjs
CHANGED
|
@@ -14,32 +14,12 @@ export const CLAUDE_BRIDGE = "@../AGENTS.md\n@../WORKFLOW.md\n";
|
|
|
14
14
|
export const HOOKS_DIRECTORY = ".gsd-path";
|
|
15
15
|
export const GUARD_SCRIPTS = ["guard_hook.py", "git_guard.py"];
|
|
16
16
|
export const GUARD_MARKER = "gsd-path guard";
|
|
17
|
-
export const PROJECT_RUNTIME_SCRIPTS = [
|
|
18
|
-
"pipeline_state.py",
|
|
19
|
-
"roadmap.py",
|
|
20
|
-
"check_handoffs.py",
|
|
21
|
-
"check_task_briefs.py",
|
|
22
|
-
"isolation.py",
|
|
23
|
-
"discussion_records.py",
|
|
24
|
-
"pipeline_git.py",
|
|
25
|
-
"promote_lookahead.py",
|
|
26
|
-
"detect_project.py",
|
|
27
|
-
"pipeline_diagnose.py",
|
|
28
|
-
"pipeline_undo.py",
|
|
29
|
-
"archive_milestone.py",
|
|
30
|
-
"review_panel.py",
|
|
31
|
-
"_common.py",
|
|
32
|
-
"worktree_paths.py",
|
|
33
|
-
"build_recovery.py",
|
|
34
|
-
"state_checkpoint.py",
|
|
35
|
-
"state_promote.py",
|
|
36
|
-
"discussion_validate.py",
|
|
37
|
-
"integration.py",
|
|
38
|
-
];
|
|
39
17
|
export const PROJECT_RUNTIME_MARKER = "gsd-path project runtime";
|
|
40
18
|
export const PROJECT_STATUS_LAUNCHER = "status_runtime.py";
|
|
41
19
|
export const PROJECT_STATUS_MARKER = "gsd-path project status launcher";
|
|
42
20
|
const INSTALL_LOCK_NAME = ".gsd-path-install-lock";
|
|
21
|
+
const LOCAL_EDITS_NOTE =
|
|
22
|
+
"; local edits inside these skills are not carried forward (see UPDATE.md#local-additions)";
|
|
43
23
|
const INSTALL_LOCK_OWNER = "owner.json";
|
|
44
24
|
const INSTALL_LOCK_SCHEMA = "gsd-path/install-lock/v2";
|
|
45
25
|
export const CLAUDE_MATCHER = ".*";
|
|
@@ -151,15 +131,22 @@ export const GIT_HOOKS = [
|
|
|
151
131
|
];
|
|
152
132
|
export const GIT_HOOK_NAMES = GIT_HOOKS.map(([name]) => name);
|
|
153
133
|
|
|
154
|
-
// Every interpreter a managed hook may legitimately be pinned to.
|
|
155
|
-
|
|
134
|
+
// Every interpreter a managed hook may legitimately be pinned to. Each is a
|
|
135
|
+
// command prefix: python.org Windows installs may put only `py` on PATH.
|
|
136
|
+
const INTERPRETER_CANDIDATES = ["python3", "python", "py -3"];
|
|
137
|
+
|
|
138
|
+
// Run a Python interpreter command prefix (for example "py -3") with args.
|
|
139
|
+
function spawnPython(interpreter, args, options) {
|
|
140
|
+
const [command, ...prefix] = interpreter.split(" ");
|
|
141
|
+
return spawnSync(command, [...prefix, ...args], options);
|
|
142
|
+
}
|
|
156
143
|
|
|
157
|
-
// Probe for a runnable Python interpreter (python3, then python
|
|
158
|
-
// hooks never hard-code an interpreter that does not exist on this
|
|
159
|
-
// (python3 is typically absent on Windows).
|
|
144
|
+
// Probe for a runnable Python interpreter (python3, then python, then py -3)
|
|
145
|
+
// so emitted hooks never hard-code an interpreter that does not exist on this
|
|
146
|
+
// machine (python3 is typically absent on Windows).
|
|
160
147
|
export function detectPythonInterpreter() {
|
|
161
148
|
for (const candidate of INTERPRETER_CANDIDATES) {
|
|
162
|
-
const result =
|
|
149
|
+
const result = spawnPython(
|
|
163
150
|
candidate,
|
|
164
151
|
["-B", "-c", "import sys; raise SystemExit(sys.version_info < (3, 9))"],
|
|
165
152
|
{ stdio: "ignore" }
|
|
@@ -225,9 +212,10 @@ export const EXPLICIT_ONLY_TARGETS = new Set([
|
|
|
225
212
|
"cursor",
|
|
226
213
|
"zed",
|
|
227
214
|
"kimi",
|
|
215
|
+
"muse",
|
|
228
216
|
"shared-agents",
|
|
229
217
|
]);
|
|
230
|
-
const SHARED_AGENT_TARGETS = new Set(["codex", "antigravity", "zed"]);
|
|
218
|
+
const SHARED_AGENT_TARGETS = new Set(["codex", "antigravity", "zed", "muse"]);
|
|
231
219
|
export const SHARED_AGENT_PROFILE = "shared-agents";
|
|
232
220
|
export const CURSOR_AGENT_FILENAME = "gsd-path.md";
|
|
233
221
|
export const CURSOR_AGENT_BACKUP_NAME = "cursor-agent-gsd-path.md";
|
|
@@ -241,7 +229,7 @@ const MANIFEST = JSON.parse(
|
|
|
241
229
|
);
|
|
242
230
|
|
|
243
231
|
function sharedInvocations(text) {
|
|
244
|
-
const pattern = /(`?)(\$gsd-path(?:-[a-z0-9]+)*|\$path)( status)?\1(?: \(Codex\) (?:and|or) (`?)\/(gsd-path(?:-[a-z0-9]+)*|path)( status)?\4 \((?:other hosts|Antigravity\/Zed)\))?/g;
|
|
232
|
+
const pattern = /(`?)(\$gsd-path(?:-[a-z0-9]+)*|\$path)( status)?\1(?: \(Codex\) (?:and|or) (`?)\/(gsd-path(?:-[a-z0-9]+)*|path)( status)?\4 \((?:other hosts|Antigravity\/Zed\/Muse)\))?/g;
|
|
245
233
|
return text.replace(pattern, (_match, quote, token, arguments_, pairedQuote, pairedSkill, pairedArguments) => {
|
|
246
234
|
const skill = token.slice(1);
|
|
247
235
|
const argumentsText = arguments_ || "";
|
|
@@ -250,7 +238,7 @@ function sharedInvocations(text) {
|
|
|
250
238
|
}
|
|
251
239
|
const codex = `${MANIFEST.hosts.codex.invocation_prefix}${skill}`;
|
|
252
240
|
const others = `${MANIFEST.hosts.antigravity.invocation_prefix}${skill}`;
|
|
253
|
-
return `${quote}${codex}${argumentsText}${quote} (Codex) or ${quote}${others}${argumentsText}${quote} (Antigravity/Zed)`;
|
|
241
|
+
return `${quote}${codex}${argumentsText}${quote} (Codex) or ${quote}${others}${argumentsText}${quote} (Antigravity/Zed/Muse)`;
|
|
254
242
|
});
|
|
255
243
|
}
|
|
256
244
|
export function skillNamesForManifest(manifest) {
|
|
@@ -368,7 +356,7 @@ export function defaultRoot(target, env = process.env) {
|
|
|
368
356
|
}
|
|
369
357
|
if (target === "antigravity") return absolutePath("~/.gemini/antigravity-cli/skills");
|
|
370
358
|
if (target === "cursor") return absolutePath("~/.cursor/skills");
|
|
371
|
-
if (target === "zed") return absolutePath("~/.agents/skills");
|
|
359
|
+
if (target === "zed" || target === "muse") return absolutePath("~/.agents/skills");
|
|
372
360
|
if (target === "kiro") {
|
|
373
361
|
return absolutePath(path.join(env.KIRO_HOME || expandUser("~/.kiro"), "skills"));
|
|
374
362
|
}
|
|
@@ -399,7 +387,9 @@ function isOwnedRouterAlias(skillDir) {
|
|
|
399
387
|
const versionFile = path.join(skillDir, "VERSION");
|
|
400
388
|
if (!isFile(versionFile)) return isManagedProjectRuntime(runtime); // installs before alias version stamping
|
|
401
389
|
try {
|
|
402
|
-
return /^[0-9]+(?:\.[0-9]+)
|
|
390
|
+
return /^[0-9]+(?:\.[0-9]+)+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(
|
|
391
|
+
fs.readFileSync(versionFile, "utf8").trim()
|
|
392
|
+
);
|
|
403
393
|
} catch {
|
|
404
394
|
return false;
|
|
405
395
|
}
|
|
@@ -475,12 +465,17 @@ function materializedResourceBytes(source, destination) {
|
|
|
475
465
|
return Buffer.from(rewriteRouterAliasSkill(data.toString("utf8"), alias, canonical));
|
|
476
466
|
}
|
|
477
467
|
|
|
468
|
+
// The JavaScript realpath keeps Windows 8.3 short names (C:\Users\LONGNA~1);
|
|
469
|
+
// Python's resolve() expands them, and both installers must hash one lock
|
|
470
|
+
// identity per target, so Windows asks the OS for the final path as Python does.
|
|
471
|
+
const realpath = process.platform === "win32" ? fs.realpathSync.native : fs.realpathSync;
|
|
472
|
+
|
|
478
473
|
function resolveNonStrict(value) {
|
|
479
474
|
let prefix = path.resolve(value);
|
|
480
475
|
const suffix = [];
|
|
481
476
|
for (;;) {
|
|
482
477
|
try {
|
|
483
|
-
return path.join(
|
|
478
|
+
return path.join(realpath(prefix), ...suffix);
|
|
484
479
|
} catch {
|
|
485
480
|
const parent = path.dirname(prefix);
|
|
486
481
|
if (parent === prefix) return path.join(prefix, ...suffix);
|
|
@@ -1045,7 +1040,7 @@ async function applyTarget(plan, stagedRoot, transaction) {
|
|
|
1045
1040
|
const destination = path.join(plan.root, name);
|
|
1046
1041
|
hooks.reserveDirectory(destination);
|
|
1047
1042
|
transaction.installed.push(destination);
|
|
1048
|
-
|
|
1043
|
+
copyIntoReservedDirectory(path.join(stagedRoot, name), destination);
|
|
1049
1044
|
await tick();
|
|
1050
1045
|
}
|
|
1051
1046
|
if (cursorAgent !== null) {
|
|
@@ -1059,6 +1054,18 @@ function reserveDirectory(destination) {
|
|
|
1059
1054
|
fs.mkdirSync(destination);
|
|
1060
1055
|
}
|
|
1061
1056
|
|
|
1057
|
+
// Node 26 rejects recursive cpSync when the destination directory already exists
|
|
1058
|
+
// and errorOnExist is set. Reserve the skill directory, then copy each staged entry.
|
|
1059
|
+
export function copyIntoReservedDirectory(source, destination) {
|
|
1060
|
+
for (const entry of fs.readdirSync(source, { withFileTypes: true })) {
|
|
1061
|
+
fs.cpSync(path.join(source, entry.name), path.join(destination, entry.name), {
|
|
1062
|
+
recursive: true,
|
|
1063
|
+
errorOnExist: true,
|
|
1064
|
+
force: false,
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1062
1069
|
function reserveFile(destination) {
|
|
1063
1070
|
const descriptor = fs.openSync(destination, "wx", 0o644);
|
|
1064
1071
|
try {
|
|
@@ -1090,7 +1097,7 @@ function rollbackTarget(transaction) {
|
|
|
1090
1097
|
removePath(destination);
|
|
1091
1098
|
}
|
|
1092
1099
|
for (const [original, stored] of [...transaction.moved].reverse()) {
|
|
1093
|
-
if (lexists(stored))
|
|
1100
|
+
if (lexists(stored)) renameRetrying(stored, original);
|
|
1094
1101
|
}
|
|
1095
1102
|
if (transaction.backup !== null) {
|
|
1096
1103
|
try {
|
|
@@ -1200,7 +1207,7 @@ export function deploymentPlans(plans) {
|
|
|
1200
1207
|
if (group.length > 1) {
|
|
1201
1208
|
if (!targets.every((name) => SHARED_AGENT_TARGETS.has(name))) {
|
|
1202
1209
|
throw new InstallerError(
|
|
1203
|
-
`only Codex, Antigravity, and
|
|
1210
|
+
`only Codex, Antigravity, Zed, and Muse may share a skills root: ${targets.join(", ")}`
|
|
1204
1211
|
);
|
|
1205
1212
|
}
|
|
1206
1213
|
profile = SHARED_AGENT_PROFILE;
|
|
@@ -1314,13 +1321,34 @@ function plannedBackupRoots(legacyRoot, deployments) {
|
|
|
1314
1321
|
return planned;
|
|
1315
1322
|
}
|
|
1316
1323
|
|
|
1324
|
+
// Access denied and busy: on Windows a scanner or indexer that briefly opens a
|
|
1325
|
+
// freshly written file blocks moving it or the directory holding it.
|
|
1326
|
+
const WINDOWS_BUSY_CODES = new Set(["EPERM", "EACCES", "EBUSY"]);
|
|
1327
|
+
const RENAME_ATTEMPTS = 20;
|
|
1328
|
+
|
|
1329
|
+
function renameRetrying(from, to) {
|
|
1330
|
+
if (process.platform !== "win32") return fs.renameSync(from, to);
|
|
1331
|
+
for (let attempt = 0; ; attempt += 1) {
|
|
1332
|
+
try {
|
|
1333
|
+
return fs.renameSync(from, to);
|
|
1334
|
+
} catch (error) {
|
|
1335
|
+
// A directory moved onto an existing directory also reports EPERM; that
|
|
1336
|
+
// is not transient, so never retry it.
|
|
1337
|
+
if (!WINDOWS_BUSY_CODES.has(error.code)
|
|
1338
|
+
|| fs.lstatSync(to, { throwIfNoEntry: false })?.isDirectory()
|
|
1339
|
+
|| attempt === RENAME_ATTEMPTS - 1) throw error;
|
|
1340
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, Math.min(10 * 2 ** attempt, 250));
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1317
1345
|
// Test-injection points; production callers never touch these.
|
|
1318
1346
|
export const hooks = {
|
|
1319
1347
|
mismatches,
|
|
1320
1348
|
applyTarget,
|
|
1321
|
-
rename:
|
|
1349
|
+
rename: renameRetrying,
|
|
1322
1350
|
renameInstallLock: fs.renameSync.bind(fs),
|
|
1323
|
-
renameInstallStage:
|
|
1351
|
+
renameInstallStage: renameRetrying,
|
|
1324
1352
|
processIdentity,
|
|
1325
1353
|
reserveDirectory,
|
|
1326
1354
|
reserveFile,
|
|
@@ -1332,7 +1360,7 @@ export const hooks = {
|
|
|
1332
1360
|
// Project installation already requires Python; keep runtime lifecycle ownership there.
|
|
1333
1361
|
function projectAdapter(source, project, action, payload = {}, env = process.env) {
|
|
1334
1362
|
const interpreter = requiredPythonRuntime("project runtime");
|
|
1335
|
-
const result =
|
|
1363
|
+
const result = spawnPython(interpreter, ["-B", path.join(SCRIPT_DIRECTORY, "install.py"), "--adapter-request"], {
|
|
1336
1364
|
input: JSON.stringify({ source, project, action, ...payload }), encoding: "utf8", env: { ...process.env, ...env },
|
|
1337
1365
|
});
|
|
1338
1366
|
if (result.error || result.status !== 0) {
|
|
@@ -1484,7 +1512,7 @@ export async function install(sourceRoot, plans, options = {}) {
|
|
|
1484
1512
|
if (legacyTransaction.backup !== null) {
|
|
1485
1513
|
results.push(
|
|
1486
1514
|
`codex-legacy: backed up ${legacyTransaction.moved.length} entries to ` +
|
|
1487
|
-
`${legacyTransaction.backup}`
|
|
1515
|
+
`${legacyTransaction.backup}${LOCAL_EDITS_NOTE}`
|
|
1488
1516
|
);
|
|
1489
1517
|
}
|
|
1490
1518
|
}
|
|
@@ -1503,7 +1531,7 @@ export async function install(sourceRoot, plans, options = {}) {
|
|
|
1503
1531
|
if (transaction.backup !== null) {
|
|
1504
1532
|
results.push(
|
|
1505
1533
|
`${plan.targets.join("+")}: backed up ${transaction.moved.length} entries ` +
|
|
1506
|
-
`to ${transaction.backup}`
|
|
1534
|
+
`to ${transaction.backup}${LOCAL_EDITS_NOTE}`
|
|
1507
1535
|
);
|
|
1508
1536
|
}
|
|
1509
1537
|
}
|
|
@@ -1533,7 +1561,7 @@ export async function install(sourceRoot, plans, options = {}) {
|
|
|
1533
1561
|
}
|
|
1534
1562
|
|
|
1535
1563
|
// Documented project-relative skill roots (verified against each host's
|
|
1536
|
-
// official skills docs). Codex, Zed, and Antigravity all discover the
|
|
1564
|
+
// official skills docs). Codex, Zed, Muse, and Antigravity all discover the
|
|
1537
1565
|
// project-level .agents/skills standard directory.
|
|
1538
1566
|
export function localRoot(target, projectDir) {
|
|
1539
1567
|
const relative = LOCAL_ROOTS[target];
|
|
@@ -1559,6 +1587,7 @@ export function parseCli(argv) {
|
|
|
1559
1587
|
"dry-run": { type: "boolean", default: false },
|
|
1560
1588
|
local: { type: "boolean", default: false },
|
|
1561
1589
|
project: { type: "string" },
|
|
1590
|
+
"member-of": { type: "string" },
|
|
1562
1591
|
doctor: { type: "boolean", default: false },
|
|
1563
1592
|
hooks: { type: "boolean", default: false },
|
|
1564
1593
|
"hooks-init": { type: "boolean", default: false },
|
|
@@ -1653,6 +1682,7 @@ function usage() {
|
|
|
1653
1682
|
" --doctor read-only health check of installs, hooks, and state\n" +
|
|
1654
1683
|
" --hooks with --project: install guard hooks (see HOOKS.md)\n" +
|
|
1655
1684
|
" --hooks-init add guards to an existing project without changing its contracts\n" +
|
|
1685
|
+
" --member-of PATH with --project: install member git hooks that run PATH's guard\n" +
|
|
1656
1686
|
" --runtime-restore restore the exact declared runtime from --source-root\n" +
|
|
1657
1687
|
" --runtime-upgrade explicitly select the supplied package runtime\n" +
|
|
1658
1688
|
" --runtime-migrate migrate a legacy runtime for review; add --update to continue upgrading\n" +
|
|
@@ -1702,9 +1732,10 @@ export async function main(argv, env = process.env) {
|
|
|
1702
1732
|
ui.error("--runtime-migrate --update requires --project and cannot be combined with another runtime, doctor, or hook operation");
|
|
1703
1733
|
return 2;
|
|
1704
1734
|
}
|
|
1705
|
-
if (!migrateAndUpdate && ["
|
|
1735
|
+
if (!migrateAndUpdate && (values["member-of"] !== undefined
|
|
1736
|
+
|| ["runtime-restore", "runtime-upgrade", "runtime-migrate"].some(name => values[name]))) {
|
|
1706
1737
|
const interpreter = requiredPythonRuntime("project runtime");
|
|
1707
|
-
const result =
|
|
1738
|
+
const result = spawnPython(interpreter, ["-B", path.join(SCRIPT_DIRECTORY, "install.py"),
|
|
1708
1739
|
...argv.filter(arg => arg !== "--no-color")], { stdio: "inherit", env });
|
|
1709
1740
|
return result.status ?? 1;
|
|
1710
1741
|
}
|
|
@@ -1809,7 +1840,7 @@ export async function main(argv, env = process.env) {
|
|
|
1809
1840
|
}
|
|
1810
1841
|
if (migrateAndUpdate) {
|
|
1811
1842
|
const interpreter = requiredPythonRuntime("project runtime");
|
|
1812
|
-
const migration =
|
|
1843
|
+
const migration = spawnPython(interpreter, ["-B", path.join(SCRIPT_DIRECTORY, "install.py"),
|
|
1813
1844
|
"--runtime-migrate", "--project", project, "--source-root", sourceRoot,
|
|
1814
1845
|
...(values["dry-run"] ? ["--dry-run"] : [])], { stdio: "inherit", env });
|
|
1815
1846
|
if (migration.error || migration.status !== 0) {
|