bigpowers 2.83.4 → 2.84.1
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/skills/audit-code/SKILL.md +4 -7
- package/.agents/skills/grill-me/SKILL.md +12 -0
- package/.agents/skills/grill-with-docs/SKILL.md +12 -0
- package/.agents/skills/request-review/SKILL.md +1 -0
- package/.agents/skills/wire-ci/SKILL.md +164 -181
- package/.codebuddy/skills/align-grid/SKILL.md +110 -0
- package/.codebuddy/skills/assess-impact/SKILL.md +91 -0
- package/.codebuddy/skills/audit-code/SKILL.md +184 -0
- package/.codebuddy/skills/audit-plan/SKILL.md +89 -0
- package/.codebuddy/skills/build-epic/SKILL.md +105 -0
- package/.codebuddy/skills/change-request/SKILL.md +121 -0
- package/.codebuddy/skills/commit-message/SKILL.md +140 -0
- package/.codebuddy/skills/compose-workflow/SKILL.md +82 -0
- package/.codebuddy/skills/context7-mcp/SKILL.md +55 -0
- package/.codebuddy/skills/craft-skill/SKILL.md +179 -0
- package/.codebuddy/skills/deepen-architecture/SKILL.md +260 -0
- package/.codebuddy/skills/define-language/SKILL.md +80 -0
- package/.codebuddy/skills/define-success/SKILL.md +65 -0
- package/.codebuddy/skills/delegate-task/SKILL.md +91 -0
- package/.codebuddy/skills/deploy/SKILL.md +198 -0
- package/.codebuddy/skills/design-interface/SKILL.md +97 -0
- package/.codebuddy/skills/develop-tdd/SKILL.md +406 -0
- package/.codebuddy/skills/diagnose-root/SKILL.md +24 -0
- package/.codebuddy/skills/diagnose-stall/SKILL.md +54 -0
- package/.codebuddy/skills/dispatch-agents/SKILL.md +118 -0
- package/.codebuddy/skills/edit-document/SKILL.md +23 -0
- package/.codebuddy/skills/elaborate-spec/SKILL.md +101 -0
- package/.codebuddy/skills/enforce-first/SKILL.md +32 -0
- package/.codebuddy/skills/evolve-skill/SKILL.md +55 -0
- package/.codebuddy/skills/execute-plan/SKILL.md +61 -0
- package/.codebuddy/skills/extract-design/SKILL.md +132 -0
- package/.codebuddy/skills/find-way/SKILL.md +191 -0
- package/.codebuddy/skills/fix-bug/SKILL.md +67 -0
- package/.codebuddy/skills/gate-trace/SKILL.md +88 -0
- package/.codebuddy/skills/generate-allure-report/SKILL.md +285 -0
- package/.codebuddy/skills/grill-me/SKILL.md +108 -0
- package/.codebuddy/skills/grill-with-docs/SKILL.md +53 -0
- package/.codebuddy/skills/guard-git/SKILL.md +231 -0
- package/.codebuddy/skills/harden-vps/SKILL.md +288 -0
- package/.codebuddy/skills/hook-commits/SKILL.md +94 -0
- package/.codebuddy/skills/inspect-quality/SKILL.md +106 -0
- package/.codebuddy/skills/investigate-bug/SKILL.md +127 -0
- package/.codebuddy/skills/kickoff-branch/SKILL.md +143 -0
- package/.codebuddy/skills/maintain-wiki/SKILL.md +64 -0
- package/.codebuddy/skills/map-codebase/SKILL.md +71 -0
- package/.codebuddy/skills/migrate-spec/SKILL.md +862 -0
- package/.codebuddy/skills/model-domain/SKILL.md +232 -0
- package/.codebuddy/skills/orchestrate-project/SKILL.md +174 -0
- package/.codebuddy/skills/organize-workspace/SKILL.md +164 -0
- package/.codebuddy/skills/plan-refactor/SKILL.md +87 -0
- package/.codebuddy/skills/plan-release/SKILL.md +145 -0
- package/.codebuddy/skills/plan-tests/SKILL.md +75 -0
- package/.codebuddy/skills/plan-work/SKILL.md +260 -0
- package/.codebuddy/skills/publish-package/SKILL.md +328 -0
- package/.codebuddy/skills/quick-fix/SKILL.md +114 -0
- package/.codebuddy/skills/release-branch/SKILL.md +298 -0
- package/.codebuddy/skills/request-review/SKILL.md +113 -0
- package/.codebuddy/skills/research-first/SKILL.md +87 -0
- package/.codebuddy/skills/reset-baseline/SKILL.md +21 -0
- package/.codebuddy/skills/respond-review/SKILL.md +71 -0
- package/.codebuddy/skills/run-benchmark/SKILL.md +85 -0
- package/.codebuddy/skills/run-evals/SKILL.md +80 -0
- package/.codebuddy/skills/run-planning/SKILL.md +101 -0
- package/.codebuddy/skills/scope-work/SKILL.md +63 -0
- package/.codebuddy/skills/search-skills/SKILL.md +73 -0
- package/.codebuddy/skills/security-review/SKILL.md +384 -0
- package/.codebuddy/skills/seed-conventions/SKILL.md +285 -0
- package/.codebuddy/skills/session-state/SKILL.md +146 -0
- package/.codebuddy/skills/setup-environment/SKILL.md +39 -0
- package/.codebuddy/skills/simulate-agents/SKILL.md +26 -0
- package/.codebuddy/skills/slice-tasks/SKILL.md +68 -0
- package/.codebuddy/skills/smoke-test/SKILL.md +242 -0
- package/.codebuddy/skills/spike-prototype/SKILL.md +95 -0
- package/.codebuddy/skills/stocktake-skills/SKILL.md +72 -0
- package/.codebuddy/skills/survey-context/SKILL.md +135 -0
- package/.codebuddy/skills/terse-mode/SKILL.md +42 -0
- package/.codebuddy/skills/trace-requirement/SKILL.md +69 -0
- package/.codebuddy/skills/using-bigpowers/SKILL.md +111 -0
- package/.codebuddy/skills/validate-contracts/SKILL.md +309 -0
- package/.codebuddy/skills/validate-fix/SKILL.md +106 -0
- package/.codebuddy/skills/verify-work/SKILL.md +191 -0
- package/.codebuddy/skills/visual-dashboard/SKILL.md +50 -0
- package/.codebuddy/skills/wire-ci/SKILL.md +358 -0
- package/.codebuddy/skills/wire-observability/SKILL.md +97 -0
- package/.codebuddy/skills/write-document/SKILL.md +255 -0
- package/.codex/skills/align-grid/SKILL.md +110 -0
- package/.codex/skills/assess-impact/SKILL.md +91 -0
- package/.codex/skills/audit-code/SKILL.md +184 -0
- package/.codex/skills/audit-plan/SKILL.md +89 -0
- package/.codex/skills/build-epic/SKILL.md +105 -0
- package/.codex/skills/change-request/SKILL.md +121 -0
- package/.codex/skills/commit-message/SKILL.md +140 -0
- package/.codex/skills/compose-workflow/SKILL.md +82 -0
- package/.codex/skills/context7-mcp/SKILL.md +55 -0
- package/.codex/skills/craft-skill/SKILL.md +179 -0
- package/.codex/skills/deepen-architecture/SKILL.md +260 -0
- package/.codex/skills/define-language/SKILL.md +80 -0
- package/.codex/skills/define-success/SKILL.md +65 -0
- package/.codex/skills/delegate-task/SKILL.md +91 -0
- package/.codex/skills/deploy/SKILL.md +198 -0
- package/.codex/skills/design-interface/SKILL.md +97 -0
- package/.codex/skills/develop-tdd/SKILL.md +406 -0
- package/.codex/skills/diagnose-root/SKILL.md +24 -0
- package/.codex/skills/diagnose-stall/SKILL.md +54 -0
- package/.codex/skills/dispatch-agents/SKILL.md +118 -0
- package/.codex/skills/edit-document/SKILL.md +23 -0
- package/.codex/skills/elaborate-spec/SKILL.md +101 -0
- package/.codex/skills/enforce-first/SKILL.md +32 -0
- package/.codex/skills/evolve-skill/SKILL.md +55 -0
- package/.codex/skills/execute-plan/SKILL.md +61 -0
- package/.codex/skills/extract-design/SKILL.md +132 -0
- package/.codex/skills/find-way/SKILL.md +191 -0
- package/.codex/skills/fix-bug/SKILL.md +67 -0
- package/.codex/skills/gate-trace/SKILL.md +88 -0
- package/.codex/skills/generate-allure-report/SKILL.md +285 -0
- package/.codex/skills/grill-me/SKILL.md +108 -0
- package/.codex/skills/grill-with-docs/SKILL.md +53 -0
- package/.codex/skills/guard-git/SKILL.md +231 -0
- package/.codex/skills/harden-vps/SKILL.md +288 -0
- package/.codex/skills/hook-commits/SKILL.md +94 -0
- package/.codex/skills/inspect-quality/SKILL.md +106 -0
- package/.codex/skills/investigate-bug/SKILL.md +127 -0
- package/.codex/skills/kickoff-branch/SKILL.md +143 -0
- package/.codex/skills/maintain-wiki/SKILL.md +64 -0
- package/.codex/skills/map-codebase/SKILL.md +71 -0
- package/.codex/skills/migrate-spec/SKILL.md +862 -0
- package/.codex/skills/model-domain/SKILL.md +232 -0
- package/.codex/skills/orchestrate-project/SKILL.md +174 -0
- package/.codex/skills/organize-workspace/SKILL.md +164 -0
- package/.codex/skills/plan-refactor/SKILL.md +87 -0
- package/.codex/skills/plan-release/SKILL.md +145 -0
- package/.codex/skills/plan-tests/SKILL.md +75 -0
- package/.codex/skills/plan-work/SKILL.md +260 -0
- package/.codex/skills/publish-package/SKILL.md +328 -0
- package/.codex/skills/quick-fix/SKILL.md +114 -0
- package/.codex/skills/release-branch/SKILL.md +298 -0
- package/.codex/skills/request-review/SKILL.md +113 -0
- package/.codex/skills/research-first/SKILL.md +87 -0
- package/.codex/skills/reset-baseline/SKILL.md +21 -0
- package/.codex/skills/respond-review/SKILL.md +71 -0
- package/.codex/skills/run-benchmark/SKILL.md +85 -0
- package/.codex/skills/run-evals/SKILL.md +80 -0
- package/.codex/skills/run-planning/SKILL.md +101 -0
- package/.codex/skills/scope-work/SKILL.md +63 -0
- package/.codex/skills/search-skills/SKILL.md +73 -0
- package/.codex/skills/security-review/SKILL.md +384 -0
- package/.codex/skills/seed-conventions/SKILL.md +285 -0
- package/.codex/skills/session-state/SKILL.md +146 -0
- package/.codex/skills/setup-environment/SKILL.md +39 -0
- package/.codex/skills/simulate-agents/SKILL.md +26 -0
- package/.codex/skills/slice-tasks/SKILL.md +68 -0
- package/.codex/skills/smoke-test/SKILL.md +242 -0
- package/.codex/skills/spike-prototype/SKILL.md +95 -0
- package/.codex/skills/stocktake-skills/SKILL.md +72 -0
- package/.codex/skills/survey-context/SKILL.md +135 -0
- package/.codex/skills/terse-mode/SKILL.md +42 -0
- package/.codex/skills/trace-requirement/SKILL.md +69 -0
- package/.codex/skills/using-bigpowers/SKILL.md +111 -0
- package/.codex/skills/validate-contracts/SKILL.md +309 -0
- package/.codex/skills/validate-fix/SKILL.md +106 -0
- package/.codex/skills/verify-work/SKILL.md +191 -0
- package/.codex/skills/visual-dashboard/SKILL.md +50 -0
- package/.codex/skills/wire-ci/SKILL.md +358 -0
- package/.codex/skills/wire-observability/SKILL.md +97 -0
- package/.codex/skills/write-document/SKILL.md +255 -0
- package/.hermes/skills/audit-code/SKILL.md +4 -7
- package/.hermes/skills/grill-me/SKILL.md +12 -0
- package/.hermes/skills/grill-with-docs/SKILL.md +12 -0
- package/.hermes/skills/request-review/SKILL.md +1 -0
- package/.hermes/skills/wire-ci/SKILL.md +164 -181
- package/.kilocode/rules/align-grid.md +110 -0
- package/.kilocode/rules/assess-impact.md +91 -0
- package/.kilocode/rules/audit-code.md +184 -0
- package/.kilocode/rules/audit-plan.md +89 -0
- package/.kilocode/rules/build-epic.md +105 -0
- package/.kilocode/rules/change-request.md +121 -0
- package/.kilocode/rules/commit-message.md +140 -0
- package/.kilocode/rules/compose-workflow.md +82 -0
- package/.kilocode/rules/context7-mcp.md +55 -0
- package/.kilocode/rules/craft-skill.md +179 -0
- package/.kilocode/rules/deepen-architecture.md +260 -0
- package/.kilocode/rules/define-language.md +80 -0
- package/.kilocode/rules/define-success.md +65 -0
- package/.kilocode/rules/delegate-task.md +91 -0
- package/.kilocode/rules/deploy.md +198 -0
- package/.kilocode/rules/design-interface.md +97 -0
- package/.kilocode/rules/develop-tdd.md +406 -0
- package/.kilocode/rules/diagnose-root.md +24 -0
- package/.kilocode/rules/diagnose-stall.md +54 -0
- package/.kilocode/rules/dispatch-agents.md +118 -0
- package/.kilocode/rules/edit-document.md +23 -0
- package/.kilocode/rules/elaborate-spec.md +101 -0
- package/.kilocode/rules/enforce-first.md +32 -0
- package/.kilocode/rules/evolve-skill.md +55 -0
- package/.kilocode/rules/execute-plan.md +61 -0
- package/.kilocode/rules/extract-design.md +132 -0
- package/.kilocode/rules/find-way.md +191 -0
- package/.kilocode/rules/fix-bug.md +67 -0
- package/.kilocode/rules/gate-trace.md +88 -0
- package/.kilocode/rules/generate-allure-report.md +285 -0
- package/.kilocode/rules/grill-me.md +108 -0
- package/.kilocode/rules/grill-with-docs.md +53 -0
- package/.kilocode/rules/guard-git.md +231 -0
- package/.kilocode/rules/harden-vps.md +288 -0
- package/.kilocode/rules/hook-commits.md +94 -0
- package/.kilocode/rules/inspect-quality.md +106 -0
- package/.kilocode/rules/investigate-bug.md +127 -0
- package/.kilocode/rules/kickoff-branch.md +143 -0
- package/.kilocode/rules/maintain-wiki.md +64 -0
- package/.kilocode/rules/map-codebase.md +71 -0
- package/.kilocode/rules/migrate-spec.md +862 -0
- package/.kilocode/rules/model-domain.md +232 -0
- package/.kilocode/rules/orchestrate-project.md +174 -0
- package/.kilocode/rules/organize-workspace.md +164 -0
- package/.kilocode/rules/plan-refactor.md +87 -0
- package/.kilocode/rules/plan-release.md +145 -0
- package/.kilocode/rules/plan-tests.md +75 -0
- package/.kilocode/rules/plan-work.md +260 -0
- package/.kilocode/rules/publish-package.md +328 -0
- package/.kilocode/rules/quick-fix.md +114 -0
- package/.kilocode/rules/release-branch.md +298 -0
- package/.kilocode/rules/request-review.md +113 -0
- package/.kilocode/rules/research-first.md +87 -0
- package/.kilocode/rules/reset-baseline.md +21 -0
- package/.kilocode/rules/respond-review.md +71 -0
- package/.kilocode/rules/run-benchmark.md +85 -0
- package/.kilocode/rules/run-evals.md +80 -0
- package/.kilocode/rules/run-planning.md +101 -0
- package/.kilocode/rules/scope-work.md +63 -0
- package/.kilocode/rules/search-skills.md +73 -0
- package/.kilocode/rules/security-review.md +384 -0
- package/.kilocode/rules/seed-conventions.md +285 -0
- package/.kilocode/rules/session-state.md +146 -0
- package/.kilocode/rules/setup-environment.md +39 -0
- package/.kilocode/rules/simulate-agents.md +26 -0
- package/.kilocode/rules/slice-tasks.md +68 -0
- package/.kilocode/rules/smoke-test.md +242 -0
- package/.kilocode/rules/spike-prototype.md +95 -0
- package/.kilocode/rules/stocktake-skills.md +72 -0
- package/.kilocode/rules/survey-context.md +135 -0
- package/.kilocode/rules/terse-mode.md +42 -0
- package/.kilocode/rules/trace-requirement.md +69 -0
- package/.kilocode/rules/using-bigpowers.md +111 -0
- package/.kilocode/rules/validate-contracts.md +309 -0
- package/.kilocode/rules/validate-fix.md +106 -0
- package/.kilocode/rules/verify-work.md +191 -0
- package/.kilocode/rules/visual-dashboard.md +50 -0
- package/.kilocode/rules/wire-ci.md +358 -0
- package/.kilocode/rules/wire-observability.md +97 -0
- package/.kilocode/rules/write-document.md +255 -0
- package/.mimocode/skills/audit-code/SKILL.md +4 -7
- package/.mimocode/skills/grill-me/SKILL.md +12 -0
- package/.mimocode/skills/grill-with-docs/SKILL.md +12 -0
- package/.mimocode/skills/request-review/SKILL.md +1 -0
- package/.mimocode/skills/wire-ci/SKILL.md +164 -181
- package/.pi/package.json +1 -1
- package/.pi/prompts/audit-code.md +4 -7
- package/.pi/prompts/grill-me.md +12 -0
- package/.pi/prompts/grill-with-docs.md +12 -0
- package/.pi/prompts/request-review.md +1 -0
- package/.pi/prompts/wire-ci.md +164 -181
- package/.pi/skills/audit-code/SKILL.md +4 -7
- package/.pi/skills/grill-me/SKILL.md +12 -0
- package/.pi/skills/grill-with-docs/SKILL.md +12 -0
- package/.pi/skills/request-review/SKILL.md +1 -0
- package/.pi/skills/wire-ci/SKILL.md +164 -181
- package/.trae/skills/align-grid/SKILL.md +110 -0
- package/.trae/skills/assess-impact/SKILL.md +91 -0
- package/.trae/skills/audit-code/SKILL.md +184 -0
- package/.trae/skills/audit-plan/SKILL.md +89 -0
- package/.trae/skills/build-epic/SKILL.md +105 -0
- package/.trae/skills/change-request/SKILL.md +121 -0
- package/.trae/skills/commit-message/SKILL.md +140 -0
- package/.trae/skills/compose-workflow/SKILL.md +82 -0
- package/.trae/skills/context7-mcp/SKILL.md +55 -0
- package/.trae/skills/craft-skill/SKILL.md +179 -0
- package/.trae/skills/deepen-architecture/SKILL.md +260 -0
- package/.trae/skills/define-language/SKILL.md +80 -0
- package/.trae/skills/define-success/SKILL.md +65 -0
- package/.trae/skills/delegate-task/SKILL.md +91 -0
- package/.trae/skills/deploy/SKILL.md +198 -0
- package/.trae/skills/design-interface/SKILL.md +97 -0
- package/.trae/skills/develop-tdd/SKILL.md +406 -0
- package/.trae/skills/diagnose-root/SKILL.md +24 -0
- package/.trae/skills/diagnose-stall/SKILL.md +54 -0
- package/.trae/skills/dispatch-agents/SKILL.md +118 -0
- package/.trae/skills/edit-document/SKILL.md +23 -0
- package/.trae/skills/elaborate-spec/SKILL.md +101 -0
- package/.trae/skills/enforce-first/SKILL.md +32 -0
- package/.trae/skills/evolve-skill/SKILL.md +55 -0
- package/.trae/skills/execute-plan/SKILL.md +61 -0
- package/.trae/skills/extract-design/SKILL.md +132 -0
- package/.trae/skills/find-way/SKILL.md +191 -0
- package/.trae/skills/fix-bug/SKILL.md +67 -0
- package/.trae/skills/gate-trace/SKILL.md +88 -0
- package/.trae/skills/generate-allure-report/SKILL.md +285 -0
- package/.trae/skills/grill-me/SKILL.md +108 -0
- package/.trae/skills/grill-with-docs/SKILL.md +53 -0
- package/.trae/skills/guard-git/SKILL.md +231 -0
- package/.trae/skills/harden-vps/SKILL.md +288 -0
- package/.trae/skills/hook-commits/SKILL.md +94 -0
- package/.trae/skills/inspect-quality/SKILL.md +106 -0
- package/.trae/skills/investigate-bug/SKILL.md +127 -0
- package/.trae/skills/kickoff-branch/SKILL.md +143 -0
- package/.trae/skills/maintain-wiki/SKILL.md +64 -0
- package/.trae/skills/map-codebase/SKILL.md +71 -0
- package/.trae/skills/migrate-spec/SKILL.md +862 -0
- package/.trae/skills/model-domain/SKILL.md +232 -0
- package/.trae/skills/orchestrate-project/SKILL.md +174 -0
- package/.trae/skills/organize-workspace/SKILL.md +164 -0
- package/.trae/skills/plan-refactor/SKILL.md +87 -0
- package/.trae/skills/plan-release/SKILL.md +145 -0
- package/.trae/skills/plan-tests/SKILL.md +75 -0
- package/.trae/skills/plan-work/SKILL.md +260 -0
- package/.trae/skills/publish-package/SKILL.md +328 -0
- package/.trae/skills/quick-fix/SKILL.md +114 -0
- package/.trae/skills/release-branch/SKILL.md +298 -0
- package/.trae/skills/request-review/SKILL.md +113 -0
- package/.trae/skills/research-first/SKILL.md +87 -0
- package/.trae/skills/reset-baseline/SKILL.md +21 -0
- package/.trae/skills/respond-review/SKILL.md +71 -0
- package/.trae/skills/run-benchmark/SKILL.md +85 -0
- package/.trae/skills/run-evals/SKILL.md +80 -0
- package/.trae/skills/run-planning/SKILL.md +101 -0
- package/.trae/skills/scope-work/SKILL.md +63 -0
- package/.trae/skills/search-skills/SKILL.md +73 -0
- package/.trae/skills/security-review/SKILL.md +384 -0
- package/.trae/skills/seed-conventions/SKILL.md +285 -0
- package/.trae/skills/session-state/SKILL.md +146 -0
- package/.trae/skills/setup-environment/SKILL.md +39 -0
- package/.trae/skills/simulate-agents/SKILL.md +26 -0
- package/.trae/skills/slice-tasks/SKILL.md +68 -0
- package/.trae/skills/smoke-test/SKILL.md +242 -0
- package/.trae/skills/spike-prototype/SKILL.md +95 -0
- package/.trae/skills/stocktake-skills/SKILL.md +72 -0
- package/.trae/skills/survey-context/SKILL.md +135 -0
- package/.trae/skills/terse-mode/SKILL.md +42 -0
- package/.trae/skills/trace-requirement/SKILL.md +69 -0
- package/.trae/skills/using-bigpowers/SKILL.md +111 -0
- package/.trae/skills/validate-contracts/SKILL.md +309 -0
- package/.trae/skills/validate-fix/SKILL.md +106 -0
- package/.trae/skills/verify-work/SKILL.md +191 -0
- package/.trae/skills/visual-dashboard/SKILL.md +50 -0
- package/.trae/skills/wire-ci/SKILL.md +358 -0
- package/.trae/skills/wire-observability/SKILL.md +97 -0
- package/.trae/skills/write-document/SKILL.md +255 -0
- package/.windsurf/rules/align-grid.md +110 -0
- package/.windsurf/rules/assess-impact.md +91 -0
- package/.windsurf/rules/audit-code.md +184 -0
- package/.windsurf/rules/audit-plan.md +89 -0
- package/.windsurf/rules/build-epic.md +105 -0
- package/.windsurf/rules/change-request.md +121 -0
- package/.windsurf/rules/commit-message.md +140 -0
- package/.windsurf/rules/compose-workflow.md +82 -0
- package/.windsurf/rules/context7-mcp.md +55 -0
- package/.windsurf/rules/craft-skill.md +179 -0
- package/.windsurf/rules/deepen-architecture.md +260 -0
- package/.windsurf/rules/define-language.md +80 -0
- package/.windsurf/rules/define-success.md +65 -0
- package/.windsurf/rules/delegate-task.md +91 -0
- package/.windsurf/rules/deploy.md +198 -0
- package/.windsurf/rules/design-interface.md +97 -0
- package/.windsurf/rules/develop-tdd.md +406 -0
- package/.windsurf/rules/diagnose-root.md +24 -0
- package/.windsurf/rules/diagnose-stall.md +54 -0
- package/.windsurf/rules/dispatch-agents.md +118 -0
- package/.windsurf/rules/edit-document.md +23 -0
- package/.windsurf/rules/elaborate-spec.md +101 -0
- package/.windsurf/rules/enforce-first.md +32 -0
- package/.windsurf/rules/evolve-skill.md +55 -0
- package/.windsurf/rules/execute-plan.md +61 -0
- package/.windsurf/rules/extract-design.md +132 -0
- package/.windsurf/rules/find-way.md +191 -0
- package/.windsurf/rules/fix-bug.md +67 -0
- package/.windsurf/rules/gate-trace.md +88 -0
- package/.windsurf/rules/generate-allure-report.md +285 -0
- package/.windsurf/rules/grill-me.md +108 -0
- package/.windsurf/rules/grill-with-docs.md +53 -0
- package/.windsurf/rules/guard-git.md +231 -0
- package/.windsurf/rules/harden-vps.md +288 -0
- package/.windsurf/rules/hook-commits.md +94 -0
- package/.windsurf/rules/inspect-quality.md +106 -0
- package/.windsurf/rules/investigate-bug.md +127 -0
- package/.windsurf/rules/kickoff-branch.md +143 -0
- package/.windsurf/rules/maintain-wiki.md +64 -0
- package/.windsurf/rules/map-codebase.md +71 -0
- package/.windsurf/rules/migrate-spec.md +862 -0
- package/.windsurf/rules/model-domain.md +232 -0
- package/.windsurf/rules/orchestrate-project.md +174 -0
- package/.windsurf/rules/organize-workspace.md +164 -0
- package/.windsurf/rules/plan-refactor.md +87 -0
- package/.windsurf/rules/plan-release.md +145 -0
- package/.windsurf/rules/plan-tests.md +75 -0
- package/.windsurf/rules/plan-work.md +260 -0
- package/.windsurf/rules/publish-package.md +328 -0
- package/.windsurf/rules/quick-fix.md +114 -0
- package/.windsurf/rules/release-branch.md +298 -0
- package/.windsurf/rules/request-review.md +113 -0
- package/.windsurf/rules/research-first.md +87 -0
- package/.windsurf/rules/reset-baseline.md +21 -0
- package/.windsurf/rules/respond-review.md +71 -0
- package/.windsurf/rules/run-benchmark.md +85 -0
- package/.windsurf/rules/run-evals.md +80 -0
- package/.windsurf/rules/run-planning.md +101 -0
- package/.windsurf/rules/scope-work.md +63 -0
- package/.windsurf/rules/search-skills.md +73 -0
- package/.windsurf/rules/security-review.md +384 -0
- package/.windsurf/rules/seed-conventions.md +285 -0
- package/.windsurf/rules/session-state.md +146 -0
- package/.windsurf/rules/setup-environment.md +39 -0
- package/.windsurf/rules/simulate-agents.md +26 -0
- package/.windsurf/rules/slice-tasks.md +68 -0
- package/.windsurf/rules/smoke-test.md +242 -0
- package/.windsurf/rules/spike-prototype.md +95 -0
- package/.windsurf/rules/stocktake-skills.md +72 -0
- package/.windsurf/rules/survey-context.md +135 -0
- package/.windsurf/rules/terse-mode.md +42 -0
- package/.windsurf/rules/trace-requirement.md +69 -0
- package/.windsurf/rules/using-bigpowers.md +111 -0
- package/.windsurf/rules/validate-contracts.md +309 -0
- package/.windsurf/rules/validate-fix.md +106 -0
- package/.windsurf/rules/verify-work.md +191 -0
- package/.windsurf/rules/visual-dashboard.md +50 -0
- package/.windsurf/rules/wire-ci.md +358 -0
- package/.windsurf/rules/wire-observability.md +97 -0
- package/.windsurf/rules/write-document.md +255 -0
- package/.zcode/skills/audit-code/SKILL.md +4 -7
- package/.zcode/skills/grill-me/SKILL.md +12 -0
- package/.zcode/skills/grill-with-docs/SKILL.md +12 -0
- package/.zcode/skills/request-review/SKILL.md +1 -0
- package/.zcode/skills/wire-ci/SKILL.md +164 -181
- package/CHANGELOG.md +37 -0
- package/CONVENTIONS.md +22 -0
- package/README.md +14 -1
- package/SKILL-INDEX.md +84 -76
- package/bin/setup.js +9 -1
- package/instructions +1 -0
- package/package.json +1 -1
- package/scripts/adapters/cline.sh +53 -3
- package/scripts/adapters/codebuddy.sh +58 -0
- package/scripts/adapters/codex.sh +58 -0
- package/scripts/adapters/copilot.sh +58 -0
- package/scripts/adapters/kilocode.sh +44 -3
- package/scripts/adapters/opencode.sh +58 -0
- package/scripts/adapters/qwen.sh +53 -1
- package/scripts/adapters/trae.sh +58 -0
- package/scripts/adapters/windsurf.sh +52 -0
- package/scripts/bp-yaml-set.sh +2 -0
- package/scripts/generate-skill-index.sh +20 -4
- package/scripts/generate-wave-b-hub.py +31 -0
- package/scripts/golden-g04-selftest.sh +19 -0
- package/scripts/hooks/cline/HOOKS.md +16 -0
- package/scripts/hooks/cline/hooks-manifest.json +12 -0
- package/scripts/hooks/cline/plugin/guard-git-plugin.ts +16 -0
- package/scripts/hooks/codebuddy/HOOKS.md +24 -0
- package/scripts/hooks/codebuddy/hooks-manifest.json +20 -0
- package/scripts/hooks/codebuddy/pre-tool-git-guard.sh +22 -0
- package/scripts/hooks/codebuddy/settings.example.json +16 -0
- package/scripts/hooks/codex/HOOKS.md +21 -0
- package/scripts/hooks/codex/hooks-manifest.json +17 -0
- package/scripts/hooks/codex/pre-tool-git-guard.sh +22 -0
- package/scripts/hooks/codex/settings.example.json +16 -0
- package/scripts/hooks/kilocode/HOOKS.md +16 -0
- package/scripts/hooks/kilocode/hooks-manifest.json +12 -0
- package/scripts/hooks/kilocode/plugin/guard-git-plugin.ts +16 -0
- package/scripts/hooks/qwen/HOOKS.md +27 -0
- package/scripts/hooks/qwen/hooks-manifest.json +23 -0
- package/scripts/hooks/qwen/pre-tool-git-guard.sh +22 -0
- package/scripts/hooks/qwen/settings.example.json +16 -0
- package/scripts/hooks/trae/HOOKS.md +17 -0
- package/scripts/hooks/trae/hooks-manifest.json +13 -0
- package/scripts/hooks/trae/pre-tool-git-guard.sh +22 -0
- package/scripts/hooks/trae/settings.example.json +16 -0
- package/scripts/hooks/windsurf/HOOKS.md +23 -0
- package/scripts/hooks/windsurf/hooks-manifest.json +19 -0
- package/scripts/hooks/windsurf/pre-tool-git-guard.sh +22 -0
- package/scripts/hooks/windsurf/settings.example.json +16 -0
- package/scripts/install.sh +33 -373
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/context-wire.sh +5 -0
- package/scripts/lib/install-grep.sh +18 -0
- package/scripts/lib/install-helpers.js +139 -2
- package/scripts/lib/install-targets-a.sh +227 -0
- package/scripts/lib/install-targets-b.sh +226 -0
- package/scripts/lib/install-targets-c.sh +128 -0
- package/scripts/lib/install-targets-d.sh +179 -0
- package/scripts/lib/srp-engine.py +2 -70
- package/scripts/lib/srp_engine_links.py +59 -0
- package/scripts/lib/wave_b_hub_codegen_helpers.py +273 -0
- package/scripts/lib/wave_b_hub_codegen_install.py +134 -0
- package/scripts/lib/wave_b_hub_config.py +130 -0
- package/scripts/lib/wave_b_hub_patch.py +213 -0
- package/scripts/record-cycle-time.sh +3 -14
- package/scripts/targets.yaml +75 -2
- package/scripts/test-agy-hub.sh +11 -10
- package/scripts/test-cline-adapter.sh +55 -0
- package/scripts/test-cline-hub.sh +48 -0
- package/scripts/test-codebuddy-adapter.sh +63 -0
- package/scripts/test-codebuddy-hub.sh +49 -0
- package/scripts/test-codex-adapter.sh +63 -0
- package/scripts/test-codex-hub.sh +49 -0
- package/scripts/test-copilot-adapter.sh +47 -0
- package/scripts/test-copilot-hub.sh +43 -0
- package/scripts/test-gemini-hub.sh +10 -9
- package/scripts/test-hermes-hub.sh +7 -6
- package/scripts/test-install-helpers.js +9 -3
- package/scripts/test-kilocode-adapter.sh +55 -0
- package/scripts/test-kilocode-hub.sh +48 -0
- package/scripts/test-mimo-hub.sh +7 -6
- package/scripts/test-opencode-adapter.sh +47 -0
- package/scripts/test-opencode-hub.sh +43 -0
- package/scripts/test-qwen-adapter.sh +63 -0
- package/scripts/test-qwen-hub.sh +49 -0
- package/scripts/test-trae-adapter.sh +63 -0
- package/scripts/test-trae-hub.sh +49 -0
- package/scripts/test-windsurf-adapter.sh +63 -0
- package/scripts/test-windsurf-hub.sh +49 -0
- package/scripts/test-zcode-hub.sh +7 -6
- package/scripts/verify-install.sh +83 -29
- package/skills/audit-code/SKILL.md +4 -7
- package/skills/grill-me/SKILL.md +12 -0
- package/skills/grill-with-docs/SKILL.md +12 -0
- package/skills/request-review/SKILL.md +1 -0
- package/skills/visual-dashboard/scripts/frame-template.html +1 -39
- package/skills/wire-ci/REFERENCE.md +137 -152
- package/skills/wire-ci/SKILL.md +28 -30
- package/skills-lock.json +5 -5
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"""Generate helpers, hub tests, and targets rows for Wave B."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from wave_b_hub_config import prefix
|
|
5
|
+
|
|
6
|
+
def helpers_global_case(cfg: dict) -> str:
|
|
7
|
+
fn = cfg["fn"]
|
|
8
|
+
setup_id = cfg["setup_id"]
|
|
9
|
+
home = cfg["home"]
|
|
10
|
+
sub = cfg["skills_sub"]
|
|
11
|
+
rendered = cfg["rendered"]
|
|
12
|
+
kind = cfg["kind"]
|
|
13
|
+
ctx = cfg.get("context", {})
|
|
14
|
+
hooks = cfg.get("hooks")
|
|
15
|
+
story = cfg["story"]
|
|
16
|
+
|
|
17
|
+
p = []
|
|
18
|
+
p.append(f" case '{setup_id}':")
|
|
19
|
+
if setup_id != fn:
|
|
20
|
+
p.append(f" case '{fn}':")
|
|
21
|
+
|
|
22
|
+
if kind == "skill_dir":
|
|
23
|
+
p.append(f" linkRenderedSkills(path.join(repoRoot, '{rendered}'), path.join(homeDir, '{home}', '{sub}'));")
|
|
24
|
+
else:
|
|
25
|
+
p.append(f" {{")
|
|
26
|
+
p.append(f" const renderedDir = path.join(repoRoot, '{rendered}');")
|
|
27
|
+
p.append(f" const targetDir = path.join(homeDir, '{home}', '{sub}');")
|
|
28
|
+
p.append(f" fs.mkdirSync(targetDir, {{ recursive: true }});")
|
|
29
|
+
p.append(f" if (fs.existsSync(renderedDir)) {{")
|
|
30
|
+
p.append(f" for (const f of fs.readdirSync(renderedDir)) {{")
|
|
31
|
+
p.append(f" if (!f.endsWith('.md')) continue;")
|
|
32
|
+
p.append(f" linkFile(path.join(renderedDir, f), path.join(targetDir, f));")
|
|
33
|
+
p.append(f" }}")
|
|
34
|
+
p.append(f" }}")
|
|
35
|
+
p.append(f" }}")
|
|
36
|
+
|
|
37
|
+
mode = ctx.get("mode")
|
|
38
|
+
if mode == "config-bridge":
|
|
39
|
+
p.append(f" bridgeHermesConfig(path.join(homeDir, '{home}', '{ctx['bridge']}'));")
|
|
40
|
+
elif mode == "symlink":
|
|
41
|
+
p.append(f" {{")
|
|
42
|
+
p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
|
|
43
|
+
p.append(f" const agentsDst = path.join(homeDir, '{home}', '{ctx['file']}');")
|
|
44
|
+
p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
|
|
45
|
+
p.append(f" linkFile(agentsSrc, agentsDst);")
|
|
46
|
+
p.append(f" }}")
|
|
47
|
+
elif mode == "copy":
|
|
48
|
+
p.append(f" {{")
|
|
49
|
+
p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
|
|
50
|
+
p.append(f" const agentsDst = path.join(homeDir, '{home}', '{ctx['file']}');")
|
|
51
|
+
p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
|
|
52
|
+
p.append(f" if (fs.existsSync(agentsSrc)) fs.copyFileSync(agentsSrc, agentsDst);")
|
|
53
|
+
p.append(f" }}")
|
|
54
|
+
|
|
55
|
+
if hooks is True:
|
|
56
|
+
p.append(f" {{")
|
|
57
|
+
p.append(f" const hookSrc = path.join(repoRoot, 'scripts', 'hooks', '{fn}', 'pre-tool-git-guard.sh');")
|
|
58
|
+
p.append(f" const hookDst = path.join(homeDir, '{home}', 'hooks', 'pre-tool-git-guard.sh');")
|
|
59
|
+
p.append(f" if (fs.existsSync(hookSrc)) {{")
|
|
60
|
+
p.append(f" fs.mkdirSync(path.dirname(hookDst), {{ recursive: true }});")
|
|
61
|
+
p.append(f" linkHook(hookSrc, hookDst);")
|
|
62
|
+
p.append(f" }}")
|
|
63
|
+
p.append(f" }}")
|
|
64
|
+
|
|
65
|
+
p.append(f" break; // story: {story}")
|
|
66
|
+
return "\n".join(p)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def helpers_local_case(cfg: dict) -> str:
|
|
70
|
+
fn = cfg["fn"]
|
|
71
|
+
setup_id = cfg["setup_id"]
|
|
72
|
+
home = cfg["home"]
|
|
73
|
+
sub = cfg["skills_sub"]
|
|
74
|
+
rendered = cfg["rendered"]
|
|
75
|
+
kind = cfg["kind"]
|
|
76
|
+
ctx = cfg.get("context", {})
|
|
77
|
+
story = cfg["story"]
|
|
78
|
+
|
|
79
|
+
# local paths use cwd-relative versions
|
|
80
|
+
local_home = home if not home.startswith(".config") else home.replace(".config/", ".config/")
|
|
81
|
+
p = []
|
|
82
|
+
p.append(f" case '{setup_id}':")
|
|
83
|
+
if setup_id != fn:
|
|
84
|
+
p.append(f" case '{fn}':")
|
|
85
|
+
|
|
86
|
+
if kind == "skill_dir":
|
|
87
|
+
p.append(f" linkRenderedSkills(path.join(repoRoot, '{rendered}'), path.join(cwd, '{local_home}', '{sub}'));")
|
|
88
|
+
else:
|
|
89
|
+
p.append(f" {{")
|
|
90
|
+
p.append(f" const renderedDir = path.join(repoRoot, '{rendered}');")
|
|
91
|
+
p.append(f" const targetDir = path.join(cwd, '{local_home}', '{sub}');")
|
|
92
|
+
p.append(f" fs.mkdirSync(targetDir, {{ recursive: true }});")
|
|
93
|
+
p.append(f" if (fs.existsSync(renderedDir)) {{")
|
|
94
|
+
p.append(f" for (const f of fs.readdirSync(renderedDir)) {{")
|
|
95
|
+
p.append(f" if (!f.endsWith('.md')) continue;")
|
|
96
|
+
p.append(f" linkFile(path.join(renderedDir, f), path.join(targetDir, f));")
|
|
97
|
+
p.append(f" }}")
|
|
98
|
+
p.append(f" }}")
|
|
99
|
+
p.append(f" }}")
|
|
100
|
+
|
|
101
|
+
mode = ctx.get("mode")
|
|
102
|
+
if mode == "config-bridge":
|
|
103
|
+
p.append(f" bridgeHermesConfig(path.join(cwd, '{local_home}', '{ctx['bridge']}'));")
|
|
104
|
+
elif mode == "symlink":
|
|
105
|
+
p.append(f" {{")
|
|
106
|
+
p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
|
|
107
|
+
p.append(f" const agentsDst = path.join(cwd, '{local_home}', '{ctx['file']}');")
|
|
108
|
+
p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
|
|
109
|
+
p.append(f" linkFile(agentsSrc, agentsDst);")
|
|
110
|
+
p.append(f" }}")
|
|
111
|
+
elif mode == "copy":
|
|
112
|
+
p.append(f" {{")
|
|
113
|
+
p.append(f" const agentsSrc = path.join(repoRoot, 'AGENTS.md');")
|
|
114
|
+
p.append(f" const agentsDst = path.join(cwd, '{local_home}', '{ctx['file']}');")
|
|
115
|
+
p.append(f" fs.mkdirSync(path.dirname(agentsDst), {{ recursive: true }});")
|
|
116
|
+
p.append(f" if (fs.existsSync(agentsSrc)) fs.copyFileSync(agentsSrc, agentsDst);")
|
|
117
|
+
p.append(f" }}")
|
|
118
|
+
|
|
119
|
+
p.append(f" break; // story: {story}")
|
|
120
|
+
return "\n".join(p)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def helpers_uninstall_case(cfg: dict) -> str:
|
|
124
|
+
fn = cfg["fn"]
|
|
125
|
+
setup_id = cfg["setup_id"]
|
|
126
|
+
home = cfg["home"]
|
|
127
|
+
sub = cfg["skills_sub"]
|
|
128
|
+
kind = cfg["kind"]
|
|
129
|
+
ctx = cfg.get("context", {})
|
|
130
|
+
hooks = cfg.get("hooks")
|
|
131
|
+
story = cfg["story"]
|
|
132
|
+
|
|
133
|
+
p = []
|
|
134
|
+
p.append(f" case '{setup_id}':")
|
|
135
|
+
if setup_id != fn:
|
|
136
|
+
p.append(f" case '{fn}':")
|
|
137
|
+
|
|
138
|
+
if kind == "skill_dir":
|
|
139
|
+
p.append(f" {{")
|
|
140
|
+
p.append(f" const skillsDir = path.join(homeDir, '{home}', '{sub}');")
|
|
141
|
+
p.append(f" if (fs.existsSync(skillsDir)) {{")
|
|
142
|
+
p.append(f" for (const entry of fs.readdirSync(skillsDir, {{ withFileTypes: true }})) {{")
|
|
143
|
+
p.append(f" if (!entry.isSymbolicLink()) continue;")
|
|
144
|
+
p.append(f" removeSymlink(path.join(skillsDir, entry.name));")
|
|
145
|
+
p.append(f" }}")
|
|
146
|
+
p.append(f" }}")
|
|
147
|
+
p.append(f" }}")
|
|
148
|
+
else:
|
|
149
|
+
p.append(f" {{")
|
|
150
|
+
p.append(f" const rulesDir = path.join(homeDir, '{home}', '{sub}');")
|
|
151
|
+
p.append(f" if (fs.existsSync(rulesDir)) {{")
|
|
152
|
+
p.append(f" for (const f of fs.readdirSync(rulesDir)) {{")
|
|
153
|
+
p.append(f" removeSymlink(path.join(rulesDir, f));")
|
|
154
|
+
p.append(f" }}")
|
|
155
|
+
p.append(f" }}")
|
|
156
|
+
p.append(f" }}")
|
|
157
|
+
|
|
158
|
+
if ctx.get("mode") in ("symlink", "copy"):
|
|
159
|
+
p.append(f" removeSymlink(path.join(homeDir, '{home}', '{ctx['file']}'));")
|
|
160
|
+
if hooks is True:
|
|
161
|
+
p.append(f" removeSymlink(path.join(homeDir, '{home}', 'hooks', 'pre-tool-git-guard.sh'));")
|
|
162
|
+
p.append(f" break; // story: {story}")
|
|
163
|
+
return "\n".join(p)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def test_hub_sh(cfg: dict) -> str:
|
|
167
|
+
fn = cfg["fn"]
|
|
168
|
+
setup_id = cfg["setup_id"]
|
|
169
|
+
label = cfg["label"]
|
|
170
|
+
story = cfg["story"]
|
|
171
|
+
p = prefix(cfg)
|
|
172
|
+
hooks = cfg.get("hooks")
|
|
173
|
+
manifest = cfg.get("manifest")
|
|
174
|
+
|
|
175
|
+
hook_checks = ""
|
|
176
|
+
if hooks is True:
|
|
177
|
+
hook_checks = f"""grep -q '{p}_HOOK_SRC=' "$INSTALL_SH" && pass 'install.sh: hook src' || fail 'install.sh: missing hook src'
|
|
178
|
+
grep -q 'pre-tool-git-guard.sh' "$INSTALL_SH" && pass 'install.sh: git-guard hook' || fail 'install.sh: missing git-guard hook'
|
|
179
|
+
"""
|
|
180
|
+
elif hooks == "plugin":
|
|
181
|
+
hook_checks = f"""grep -q 'scripts/hooks/{fn}/plugin' "$INSTALL_SH" && pass 'install.sh: plugin hook template' || fail 'install.sh: missing plugin template'
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
manifest_checks = ""
|
|
185
|
+
if manifest:
|
|
186
|
+
manifest_checks = f"""grep -q 'id: {fn}' "$TARGETS_YAML" && pass 'targets.yaml: {fn} row' || fail 'targets.yaml: missing {fn} row'
|
|
187
|
+
grep -q 'adapter: {fn}' "$TARGETS_YAML" && pass 'targets.yaml: {fn} adapter' || fail 'targets.yaml: missing {fn} adapter'
|
|
188
|
+
grep -q '{manifest}' "$TARGETS_YAML" && pass 'targets.yaml: {manifest}' || fail 'targets.yaml: missing {manifest}'
|
|
189
|
+
grep -q 'install_{fn}()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_{fn} assertion' || fail 'verify-install: missing install_{fn} assertion'
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
return f"""#!/usr/bin/env bash
|
|
193
|
+
# story: {story}
|
|
194
|
+
# Regression tests for {label} install hub wiring (Wave B).
|
|
195
|
+
set -euo pipefail
|
|
196
|
+
|
|
197
|
+
REPO_ROOT="$(cd "$(dirname "${{BASH_SOURCE[0]}}")/.." && pwd)"
|
|
198
|
+
PASS=0
|
|
199
|
+
FAIL=0
|
|
200
|
+
|
|
201
|
+
pass() {{ echo "PASS: $1"; PASS=$((PASS + 1)); }}
|
|
202
|
+
fail() {{ echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }}
|
|
203
|
+
|
|
204
|
+
echo "=== test-{fn}-hub.sh ==="
|
|
205
|
+
|
|
206
|
+
INSTALL_SH="$REPO_ROOT/scripts/install.sh"
|
|
207
|
+
HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
|
|
208
|
+
SETUP_JS="$REPO_ROOT/bin/setup.js"
|
|
209
|
+
TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
|
|
210
|
+
|
|
211
|
+
grep -q 'install_{fn}()' "$INSTALL_SH" && pass 'install.sh: install_{fn}()' || fail 'install.sh: missing install_{fn}()'
|
|
212
|
+
grep -q 'uninstall_{fn}()' "$INSTALL_SH" && pass 'install.sh: uninstall_{fn}()' || fail 'install.sh: missing uninstall_{fn}()'
|
|
213
|
+
grep -q '{p}_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: skills dir var' || fail 'install.sh: missing skills dir var'
|
|
214
|
+
grep -q 'install_{fn}' "$INSTALL_SH" && grep -q 'uninstall_{fn}' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing {fn}'
|
|
215
|
+
|
|
216
|
+
DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
|
|
217
|
+
grep -q '{label} →' <<< "$DRY_OUT" && pass 'dry-run: {label} section' || fail 'dry-run: missing {label} section'
|
|
218
|
+
DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
|
|
219
|
+
grep -q '{label} →' <<< "$DRY_UNINSTALL" && pass 'dry-run uninstall: {label} section' || fail 'dry-run uninstall: missing {label} section'
|
|
220
|
+
|
|
221
|
+
grep -q "case '{setup_id}'" "$HELPERS_JS" && pass 'install-helpers: {setup_id} case' || fail 'install-helpers: missing {setup_id} case'
|
|
222
|
+
{hook_checks}
|
|
223
|
+
SETUP_SRC="$(cat "$SETUP_JS")"
|
|
224
|
+
echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
|
|
225
|
+
grep -q "'{setup_id}'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" && pass 'setup.js: {setup_id} in SUPPORTED_IDS' || fail 'setup.js: {setup_id} not in SUPPORTED_IDS'
|
|
226
|
+
|
|
227
|
+
{manifest_checks}
|
|
228
|
+
bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
|
|
229
|
+
node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
|
|
230
|
+
node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
|
|
231
|
+
|
|
232
|
+
echo "test-{fn}-hub: $PASS passed, $FAIL failed"
|
|
233
|
+
[[ "$FAIL" -eq 0 ]] || exit 1
|
|
234
|
+
"""
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def targets_row(cfg: dict) -> str:
|
|
238
|
+
fn = cfg["fn"]
|
|
239
|
+
label = cfg["label"]
|
|
240
|
+
rendered = cfg["rendered"]
|
|
241
|
+
ctx = cfg.get("context", {})
|
|
242
|
+
manifest = cfg.get("manifest")
|
|
243
|
+
mode = ctx.get("mode", "native")
|
|
244
|
+
contracts = [f" - {manifest}"] if manifest else [" - agents_md_exists"]
|
|
245
|
+
wire_file = ctx.get("file") or ctx.get("wire") or "AGENTS.md"
|
|
246
|
+
skill_block = ""
|
|
247
|
+
if cfg["kind"] == "rules_file":
|
|
248
|
+
skill_block = f""" skill:
|
|
249
|
+
adapter: {fn}
|
|
250
|
+
output: {rendered}"""
|
|
251
|
+
else:
|
|
252
|
+
skill_block = f""" skill:
|
|
253
|
+
adapter: {fn}
|
|
254
|
+
output: {rendered}"""
|
|
255
|
+
ctx_mode = mode if mode != "config-bridge" else "config-bridge"
|
|
256
|
+
ctx_extra = ""
|
|
257
|
+
if mode == "config-bridge":
|
|
258
|
+
ctx_extra = f"""
|
|
259
|
+
bridge_file: {ctx['bridge']}
|
|
260
|
+
bridge_key: {ctx['key']}"""
|
|
261
|
+
return f""" - id: {fn}
|
|
262
|
+
name: {label}
|
|
263
|
+
tier: opt_in
|
|
264
|
+
{skill_block}
|
|
265
|
+
context:
|
|
266
|
+
adapter: {fn}
|
|
267
|
+
mode: {ctx_mode}
|
|
268
|
+
file: {wire_file}{ctx_extra}
|
|
269
|
+
contracts:
|
|
270
|
+
{chr(10).join(contracts)}
|
|
271
|
+
"""
|
|
272
|
+
|
|
273
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"""Generate install.sh blocks for Wave B hub wiring."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from wave_b_hub_config import prefix
|
|
5
|
+
|
|
6
|
+
def install_sh_block(cfg: dict) -> str:
|
|
7
|
+
p = prefix(cfg)
|
|
8
|
+
fn = cfg["fn"]
|
|
9
|
+
label = cfg["label"]
|
|
10
|
+
story = cfg["story"]
|
|
11
|
+
home = cfg["home"]
|
|
12
|
+
sub = cfg["skills_sub"]
|
|
13
|
+
rendered = cfg["rendered"]
|
|
14
|
+
kind = cfg["kind"]
|
|
15
|
+
ctx = cfg.get("context", {})
|
|
16
|
+
hooks = cfg.get("hooks")
|
|
17
|
+
|
|
18
|
+
lines = [
|
|
19
|
+
f"# ── {label} ({story}) ───────────────────────────────────────────────────────",
|
|
20
|
+
"",
|
|
21
|
+
f'{p}_CONFIG_DIR="$HOME/{home}"',
|
|
22
|
+
f'{p}_SKILLS_DIR="${p}_CONFIG_DIR/{sub}"',
|
|
23
|
+
f'{p}_RENDERED="$REPO_ROOT/{rendered}"',
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
if ctx.get("mode") == "config-bridge":
|
|
27
|
+
lines.append(f'{p}_CONFIG_FILE="${p}_CONFIG_DIR/{ctx["bridge"]}"')
|
|
28
|
+
elif ctx.get("mode") in ("symlink", "copy"):
|
|
29
|
+
lines.append(f'{p}_CONTEXT="${p}_CONFIG_DIR/{ctx["file"]}"')
|
|
30
|
+
|
|
31
|
+
if hooks is True:
|
|
32
|
+
lines.append(f'{p}_HOOKS_DIR="${p}_CONFIG_DIR/hooks"')
|
|
33
|
+
lines.append(f'{p}_HOOK_SRC="$REPO_ROOT/scripts/hooks/{fn}/pre-tool-git-guard.sh"')
|
|
34
|
+
|
|
35
|
+
lines.extend(["", f"install_{fn}() {{", " echo \"\"", f' echo "{label} → ${p}_SKILLS_DIR/"'])
|
|
36
|
+
|
|
37
|
+
if kind == "skill_dir":
|
|
38
|
+
lines.extend([
|
|
39
|
+
f' if [[ ! -d "${p}_RENDERED" ]]; then',
|
|
40
|
+
f' echo " WARNING: ${p}_RENDERED not found — run sync-skills.sh first"',
|
|
41
|
+
" return",
|
|
42
|
+
" fi",
|
|
43
|
+
" local count=0",
|
|
44
|
+
f' for skill_dir in "${p}_RENDERED"/*/; do',
|
|
45
|
+
' [[ -f "${skill_dir}SKILL.md" ]] || continue',
|
|
46
|
+
' local name; name="$(basename "$skill_dir")"',
|
|
47
|
+
f' link "$skill_dir" "${p}_SKILLS_DIR/$name"',
|
|
48
|
+
" count=$((count + 1))",
|
|
49
|
+
" done",
|
|
50
|
+
' echo " $count skills installed"',
|
|
51
|
+
])
|
|
52
|
+
else:
|
|
53
|
+
lines.extend([
|
|
54
|
+
f' if [[ ! -d "${p}_RENDERED" ]]; then',
|
|
55
|
+
f' echo " WARNING: ${p}_RENDERED not found — run sync-skills.sh first"',
|
|
56
|
+
" return",
|
|
57
|
+
" fi",
|
|
58
|
+
" local count=0",
|
|
59
|
+
f' for rule in "${p}_RENDERED"/*.md; do',
|
|
60
|
+
' [[ -f "$rule" ]] || continue',
|
|
61
|
+
f' link "$rule" "${p}_SKILLS_DIR/$(basename "$rule")"',
|
|
62
|
+
" count=$((count + 1))",
|
|
63
|
+
" done",
|
|
64
|
+
f' echo " $count rules installed"',
|
|
65
|
+
])
|
|
66
|
+
|
|
67
|
+
mode = ctx.get("mode")
|
|
68
|
+
if mode and mode != "native":
|
|
69
|
+
ctx_target = f"${p}_CONFIG_FILE" if mode == "config-bridge" else f"${p}_CONTEXT"
|
|
70
|
+
lines.extend([
|
|
71
|
+
f' echo "{label} → context {mode} {ctx_target}"',
|
|
72
|
+
' source "$REPO_ROOT/scripts/lib/context-wire.sh"',
|
|
73
|
+
' local agents_src="$REPO_ROOT/AGENTS.md"',
|
|
74
|
+
' [[ -f "$agents_src" ]] || agents_src="$REPO_ROOT/docs/templates/AGENTS.md"',
|
|
75
|
+
])
|
|
76
|
+
if mode == "config-bridge":
|
|
77
|
+
lines.append(
|
|
78
|
+
f' wire_context_mode config-bridge "${p}_CONFIG_FILE" "{ctx["key"]}" "{ctx["wire"]}"'
|
|
79
|
+
)
|
|
80
|
+
elif mode == "symlink":
|
|
81
|
+
lines.append(f' wire_context_mode symlink "${p}_CONTEXT" "" read "$agents_src"')
|
|
82
|
+
elif mode == "copy":
|
|
83
|
+
lines.append(f' run mkdir -p "$(dirname "${p}_CONTEXT")"')
|
|
84
|
+
lines.append(f' run cp "$agents_src" "${p}_CONTEXT"')
|
|
85
|
+
|
|
86
|
+
if hooks is True:
|
|
87
|
+
lines.extend([
|
|
88
|
+
f' if [[ -f "${p}_HOOK_SRC" ]]; then',
|
|
89
|
+
f' echo "{label} Hooks → ${p}_HOOKS_DIR/"',
|
|
90
|
+
f' link "${p}_HOOK_SRC" "${p}_HOOKS_DIR/pre-tool-git-guard.sh"',
|
|
91
|
+
f' chmod +x "${p}_HOOK_SRC" 2>/dev/null || true',
|
|
92
|
+
f' echo " NOTE: copy $REPO_ROOT/scripts/hooks/{fn}/settings.example.json into tool config"',
|
|
93
|
+
" fi",
|
|
94
|
+
])
|
|
95
|
+
elif hooks == "plugin":
|
|
96
|
+
lines.extend([
|
|
97
|
+
f' if [[ -d "$REPO_ROOT/scripts/hooks/{fn}/plugin" ]]; then',
|
|
98
|
+
f' echo "{label} → hook plugin template at scripts/hooks/{fn}/plugin/ (manual install)"',
|
|
99
|
+
" fi",
|
|
100
|
+
])
|
|
101
|
+
|
|
102
|
+
lines.extend(["}", ""])
|
|
103
|
+
|
|
104
|
+
lines.append(f"uninstall_{fn}() {{")
|
|
105
|
+
lines.append(' echo ""')
|
|
106
|
+
lines.append(f' echo "{label} → removing management from ${p}_CONFIG_DIR/"')
|
|
107
|
+
if kind == "skill_dir":
|
|
108
|
+
lines.extend([
|
|
109
|
+
f' if [[ -d "${p}_SKILLS_DIR" ]]; then',
|
|
110
|
+
f' for dst in "${p}_SKILLS_DIR"/*/; do',
|
|
111
|
+
' [[ -L "${dst%/}" ]] || continue',
|
|
112
|
+
' unlink_if_managed "${dst%/}" "$REPO_ROOT/"',
|
|
113
|
+
" done",
|
|
114
|
+
" fi",
|
|
115
|
+
])
|
|
116
|
+
else:
|
|
117
|
+
lines.extend([
|
|
118
|
+
f' if [[ -d "${p}_SKILLS_DIR" ]]; then',
|
|
119
|
+
f' for dst in "${p}_SKILLS_DIR"/*.md; do',
|
|
120
|
+
' [[ -L "$dst" ]] || continue',
|
|
121
|
+
' unlink_if_managed "$dst" "$REPO_ROOT/"',
|
|
122
|
+
" done",
|
|
123
|
+
" fi",
|
|
124
|
+
])
|
|
125
|
+
if ctx.get("mode") in ("symlink", "copy"):
|
|
126
|
+
lines.append(f' unlink_if_managed "${p}_CONTEXT" "$REPO_ROOT/"')
|
|
127
|
+
if ctx.get("mode") == "config-bridge":
|
|
128
|
+
lines.append(f' # config-bridge file ${p}_CONFIG_FILE left for user')
|
|
129
|
+
if hooks is True:
|
|
130
|
+
lines.append(f' unlink_if_managed "${p}_HOOKS_DIR/pre-tool-git-guard.sh" "$REPO_ROOT/"')
|
|
131
|
+
lines.extend(["}", ""])
|
|
132
|
+
return "\n".join(lines)
|
|
133
|
+
|
|
134
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""Wave B hub epic configuration."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
HUB_ORDER = ["e65", "e68", "e72", "e66", "e67", "e70", "e73", "e62", "e71"]
|
|
5
|
+
|
|
6
|
+
HUB_EPICS: dict[str, dict] = {
|
|
7
|
+
"e65": {
|
|
8
|
+
"story": "e65s02",
|
|
9
|
+
"fn": "codex",
|
|
10
|
+
"setup_id": "codex",
|
|
11
|
+
"label": "Codex CLI",
|
|
12
|
+
"home": ".codex",
|
|
13
|
+
"skills_sub": "skills",
|
|
14
|
+
"rendered": ".codex/skills",
|
|
15
|
+
"kind": "skill_dir",
|
|
16
|
+
"context": {"mode": "config-bridge", "bridge": "config.toml", "key": "instructions", "wire": "AGENTS.md"},
|
|
17
|
+
"hooks": True,
|
|
18
|
+
"manifest": "codex_hooks_manifest",
|
|
19
|
+
},
|
|
20
|
+
"e68": {
|
|
21
|
+
"story": "e68s02",
|
|
22
|
+
"fn": "qwen",
|
|
23
|
+
"setup_id": "qwen",
|
|
24
|
+
"label": "Qwen Code",
|
|
25
|
+
"home": ".qwen",
|
|
26
|
+
"skills_sub": "skills",
|
|
27
|
+
"rendered": ".qwen/skills",
|
|
28
|
+
"kind": "skill_dir",
|
|
29
|
+
"context": {"mode": "symlink", "file": "QWEN.md"},
|
|
30
|
+
"hooks": True,
|
|
31
|
+
"manifest": "qwen_hooks_manifest",
|
|
32
|
+
},
|
|
33
|
+
"e72": {
|
|
34
|
+
"story": "e72s02",
|
|
35
|
+
"fn": "codebuddy",
|
|
36
|
+
"setup_id": "codebuddy",
|
|
37
|
+
"label": "CodeBuddy",
|
|
38
|
+
"home": ".codebuddy",
|
|
39
|
+
"skills_sub": "skills",
|
|
40
|
+
"rendered": ".codebuddy/skills",
|
|
41
|
+
"kind": "skill_dir",
|
|
42
|
+
"context": {"mode": "symlink", "file": "AGENTS.md"},
|
|
43
|
+
"hooks": True,
|
|
44
|
+
"manifest": "codebuddy_hooks_manifest",
|
|
45
|
+
},
|
|
46
|
+
"e66": {
|
|
47
|
+
"story": "e66s02",
|
|
48
|
+
"fn": "cline",
|
|
49
|
+
"setup_id": "cline",
|
|
50
|
+
"label": "Cline",
|
|
51
|
+
"home": ".cline",
|
|
52
|
+
"skills_sub": "skills",
|
|
53
|
+
"rendered": ".cline/skills",
|
|
54
|
+
"kind": "skill_dir",
|
|
55
|
+
"context": {"mode": "native"},
|
|
56
|
+
"hooks": "plugin",
|
|
57
|
+
"manifest": "cline_hooks_manifest",
|
|
58
|
+
},
|
|
59
|
+
"e67": {
|
|
60
|
+
"story": "e67s02",
|
|
61
|
+
"fn": "kilocode",
|
|
62
|
+
"setup_id": "kilo",
|
|
63
|
+
"label": "Kilo",
|
|
64
|
+
"home": ".kilocode",
|
|
65
|
+
"skills_sub": "rules",
|
|
66
|
+
"rendered": ".kilocode/rules",
|
|
67
|
+
"kind": "rules_file",
|
|
68
|
+
"context": {"mode": "copy", "file": "AGENTS.md"},
|
|
69
|
+
"hooks": "plugin",
|
|
70
|
+
"manifest": "kilocode_hooks_manifest",
|
|
71
|
+
},
|
|
72
|
+
"e70": {
|
|
73
|
+
"story": "e70s02",
|
|
74
|
+
"fn": "trae",
|
|
75
|
+
"setup_id": "trae",
|
|
76
|
+
"label": "Trae",
|
|
77
|
+
"home": ".trae",
|
|
78
|
+
"skills_sub": "skills",
|
|
79
|
+
"rendered": ".trae/skills",
|
|
80
|
+
"kind": "skill_dir",
|
|
81
|
+
"context": {"mode": "symlink", "file": "AGENTS.md"},
|
|
82
|
+
"hooks": True,
|
|
83
|
+
"manifest": "trae_hooks_manifest",
|
|
84
|
+
},
|
|
85
|
+
"e73": {
|
|
86
|
+
"story": "e73s02",
|
|
87
|
+
"fn": "windsurf",
|
|
88
|
+
"setup_id": "windsurf",
|
|
89
|
+
"label": "Windsurf",
|
|
90
|
+
"home": ".codeium/windsurf",
|
|
91
|
+
"skills_sub": "rules",
|
|
92
|
+
"rendered": ".windsurf/rules",
|
|
93
|
+
"kind": "rules_file",
|
|
94
|
+
"context": {"mode": "copy", "file": "AGENTS.md"},
|
|
95
|
+
"hooks": True,
|
|
96
|
+
"manifest": "windsurf_hooks_manifest",
|
|
97
|
+
},
|
|
98
|
+
"e62": {
|
|
99
|
+
"story": "e62s02",
|
|
100
|
+
"fn": "opencode",
|
|
101
|
+
"setup_id": "opencode",
|
|
102
|
+
"label": "OpenCode",
|
|
103
|
+
"home": ".config/opencode",
|
|
104
|
+
"skills_sub": "skills",
|
|
105
|
+
"rendered": ".opencode/skills",
|
|
106
|
+
"kind": "skill_dir",
|
|
107
|
+
"context": {"mode": "symlink", "file": "AGENTS.md"},
|
|
108
|
+
"hooks": False,
|
|
109
|
+
"manifest": None,
|
|
110
|
+
},
|
|
111
|
+
"e71": {
|
|
112
|
+
"story": "e71s02",
|
|
113
|
+
"fn": "copilot",
|
|
114
|
+
"setup_id": "copilot",
|
|
115
|
+
"label": "Copilot CLI",
|
|
116
|
+
"home": ".copilot",
|
|
117
|
+
"skills_sub": "skills",
|
|
118
|
+
"rendered": ".copilot/skills",
|
|
119
|
+
"kind": "skill_dir",
|
|
120
|
+
"context": {"mode": "copy", "file": "AGENTS.md"},
|
|
121
|
+
"hooks": False,
|
|
122
|
+
"manifest": None,
|
|
123
|
+
},
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def prefix(cfg: dict) -> str:
|
|
130
|
+
return cfg["fn"].upper().replace("-", "_")
|