bigpowers 2.82.4 → 2.83.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/skills/align-grid/SKILL.md +110 -0
- package/.agents/skills/assess-impact/SKILL.md +91 -0
- package/.agents/skills/audit-code/SKILL.md +187 -0
- package/.agents/skills/audit-plan/SKILL.md +89 -0
- package/.agents/skills/build-epic/SKILL.md +105 -0
- package/.agents/skills/change-request/SKILL.md +121 -0
- package/.agents/skills/commit-message/SKILL.md +140 -0
- package/.agents/skills/compose-workflow/SKILL.md +82 -0
- package/.agents/skills/context7-mcp/SKILL.md +55 -0
- package/.agents/skills/craft-skill/SKILL.md +179 -0
- package/.agents/skills/deepen-architecture/SKILL.md +260 -0
- package/.agents/skills/define-language/SKILL.md +80 -0
- package/.agents/skills/define-success/SKILL.md +65 -0
- package/.agents/skills/delegate-task/SKILL.md +91 -0
- package/.agents/skills/deploy/SKILL.md +198 -0
- package/.agents/skills/design-interface/SKILL.md +97 -0
- package/.agents/skills/develop-tdd/SKILL.md +406 -0
- package/.agents/skills/diagnose-root/SKILL.md +24 -0
- package/.agents/skills/diagnose-stall/SKILL.md +54 -0
- package/.agents/skills/dispatch-agents/SKILL.md +118 -0
- package/.agents/skills/edit-document/SKILL.md +23 -0
- package/.agents/skills/elaborate-spec/SKILL.md +101 -0
- package/.agents/skills/enforce-first/SKILL.md +32 -0
- package/.agents/skills/evolve-skill/SKILL.md +55 -0
- package/.agents/skills/execute-plan/SKILL.md +61 -0
- package/.agents/skills/extract-design/SKILL.md +132 -0
- package/.agents/skills/find-way/SKILL.md +191 -0
- package/.agents/skills/fix-bug/SKILL.md +67 -0
- package/.agents/skills/gate-trace/SKILL.md +88 -0
- package/.agents/skills/generate-allure-report/SKILL.md +285 -0
- package/.agents/skills/grill-me/SKILL.md +96 -0
- package/.agents/skills/grill-with-docs/SKILL.md +41 -0
- package/.agents/skills/guard-git/SKILL.md +231 -0
- package/.agents/skills/harden-vps/SKILL.md +288 -0
- package/.agents/skills/hook-commits/SKILL.md +94 -0
- package/.agents/skills/inspect-quality/SKILL.md +106 -0
- package/.agents/skills/investigate-bug/SKILL.md +127 -0
- package/.agents/skills/kickoff-branch/SKILL.md +143 -0
- package/.agents/skills/maintain-wiki/SKILL.md +64 -0
- package/.agents/skills/map-codebase/SKILL.md +71 -0
- package/.agents/skills/migrate-spec/SKILL.md +862 -0
- package/.agents/skills/model-domain/SKILL.md +232 -0
- package/.agents/skills/orchestrate-project/SKILL.md +174 -0
- package/.agents/skills/organize-workspace/SKILL.md +164 -0
- package/.agents/skills/plan-refactor/SKILL.md +87 -0
- package/.agents/skills/plan-release/SKILL.md +145 -0
- package/.agents/skills/plan-tests/SKILL.md +75 -0
- package/.agents/skills/plan-work/SKILL.md +260 -0
- package/.agents/skills/publish-package/SKILL.md +328 -0
- package/.agents/skills/quick-fix/SKILL.md +114 -0
- package/.agents/skills/release-branch/SKILL.md +298 -0
- package/.agents/skills/request-review/SKILL.md +112 -0
- package/.agents/skills/research-first/SKILL.md +87 -0
- package/.agents/skills/reset-baseline/SKILL.md +21 -0
- package/.agents/skills/respond-review/SKILL.md +71 -0
- package/.agents/skills/run-benchmark/SKILL.md +85 -0
- package/.agents/skills/run-evals/SKILL.md +80 -0
- package/.agents/skills/run-planning/SKILL.md +101 -0
- package/.agents/skills/scope-work/SKILL.md +63 -0
- package/.agents/skills/search-skills/SKILL.md +73 -0
- package/.agents/skills/security-review/SKILL.md +384 -0
- package/.agents/skills/seed-conventions/SKILL.md +285 -0
- package/.agents/skills/session-state/SKILL.md +146 -0
- package/.agents/skills/setup-environment/SKILL.md +39 -0
- package/.agents/skills/simulate-agents/SKILL.md +26 -0
- package/.agents/skills/slice-tasks/SKILL.md +68 -0
- package/.agents/skills/smoke-test/SKILL.md +242 -0
- package/.agents/skills/spike-prototype/SKILL.md +95 -0
- package/.agents/skills/stocktake-skills/SKILL.md +72 -0
- package/.agents/skills/survey-context/SKILL.md +135 -0
- package/.agents/skills/terse-mode/SKILL.md +42 -0
- package/.agents/skills/trace-requirement/SKILL.md +69 -0
- package/.agents/skills/using-bigpowers/SKILL.md +111 -0
- package/.agents/skills/validate-contracts/SKILL.md +309 -0
- package/.agents/skills/validate-fix/SKILL.md +106 -0
- package/.agents/skills/verify-work/SKILL.md +191 -0
- package/.agents/skills/visual-dashboard/SKILL.md +50 -0
- package/.agents/skills/wire-ci/SKILL.md +375 -0
- package/.agents/skills/wire-observability/SKILL.md +97 -0
- package/.agents/skills/write-document/SKILL.md +255 -0
- package/.hermes/skills/align-grid/SKILL.md +110 -0
- package/.hermes/skills/assess-impact/SKILL.md +91 -0
- package/.hermes/skills/audit-code/SKILL.md +187 -0
- package/.hermes/skills/audit-plan/SKILL.md +89 -0
- package/.hermes/skills/build-epic/SKILL.md +105 -0
- package/.hermes/skills/change-request/SKILL.md +121 -0
- package/.hermes/skills/commit-message/SKILL.md +140 -0
- package/.hermes/skills/compose-workflow/SKILL.md +82 -0
- package/.hermes/skills/context7-mcp/SKILL.md +55 -0
- package/.hermes/skills/craft-skill/SKILL.md +179 -0
- package/.hermes/skills/deepen-architecture/SKILL.md +260 -0
- package/.hermes/skills/define-language/SKILL.md +80 -0
- package/.hermes/skills/define-success/SKILL.md +65 -0
- package/.hermes/skills/delegate-task/SKILL.md +91 -0
- package/.hermes/skills/deploy/SKILL.md +198 -0
- package/.hermes/skills/design-interface/SKILL.md +97 -0
- package/.hermes/skills/develop-tdd/SKILL.md +406 -0
- package/.hermes/skills/diagnose-root/SKILL.md +24 -0
- package/.hermes/skills/diagnose-stall/SKILL.md +54 -0
- package/.hermes/skills/dispatch-agents/SKILL.md +118 -0
- package/.hermes/skills/edit-document/SKILL.md +23 -0
- package/.hermes/skills/elaborate-spec/SKILL.md +101 -0
- package/.hermes/skills/enforce-first/SKILL.md +32 -0
- package/.hermes/skills/evolve-skill/SKILL.md +55 -0
- package/.hermes/skills/execute-plan/SKILL.md +61 -0
- package/.hermes/skills/extract-design/SKILL.md +132 -0
- package/.hermes/skills/find-way/SKILL.md +191 -0
- package/.hermes/skills/fix-bug/SKILL.md +67 -0
- package/.hermes/skills/gate-trace/SKILL.md +88 -0
- package/.hermes/skills/generate-allure-report/SKILL.md +285 -0
- package/.hermes/skills/grill-me/SKILL.md +96 -0
- package/.hermes/skills/grill-with-docs/SKILL.md +41 -0
- package/.hermes/skills/guard-git/SKILL.md +231 -0
- package/.hermes/skills/harden-vps/SKILL.md +288 -0
- package/.hermes/skills/hook-commits/SKILL.md +94 -0
- package/.hermes/skills/inspect-quality/SKILL.md +106 -0
- package/.hermes/skills/investigate-bug/SKILL.md +127 -0
- package/.hermes/skills/kickoff-branch/SKILL.md +143 -0
- package/.hermes/skills/maintain-wiki/SKILL.md +64 -0
- package/.hermes/skills/map-codebase/SKILL.md +71 -0
- package/.hermes/skills/migrate-spec/SKILL.md +862 -0
- package/.hermes/skills/model-domain/SKILL.md +232 -0
- package/.hermes/skills/orchestrate-project/SKILL.md +174 -0
- package/.hermes/skills/organize-workspace/SKILL.md +164 -0
- package/.hermes/skills/plan-refactor/SKILL.md +87 -0
- package/.hermes/skills/plan-release/SKILL.md +145 -0
- package/.hermes/skills/plan-tests/SKILL.md +75 -0
- package/.hermes/skills/plan-work/SKILL.md +260 -0
- package/.hermes/skills/publish-package/SKILL.md +328 -0
- package/.hermes/skills/quick-fix/SKILL.md +114 -0
- package/.hermes/skills/release-branch/SKILL.md +298 -0
- package/.hermes/skills/request-review/SKILL.md +112 -0
- package/.hermes/skills/research-first/SKILL.md +87 -0
- package/.hermes/skills/reset-baseline/SKILL.md +21 -0
- package/.hermes/skills/respond-review/SKILL.md +71 -0
- package/.hermes/skills/run-benchmark/SKILL.md +85 -0
- package/.hermes/skills/run-evals/SKILL.md +80 -0
- package/.hermes/skills/run-planning/SKILL.md +101 -0
- package/.hermes/skills/scope-work/SKILL.md +63 -0
- package/.hermes/skills/search-skills/SKILL.md +73 -0
- package/.hermes/skills/security-review/SKILL.md +384 -0
- package/.hermes/skills/seed-conventions/SKILL.md +285 -0
- package/.hermes/skills/session-state/SKILL.md +146 -0
- package/.hermes/skills/setup-environment/SKILL.md +39 -0
- package/.hermes/skills/simulate-agents/SKILL.md +26 -0
- package/.hermes/skills/slice-tasks/SKILL.md +68 -0
- package/.hermes/skills/smoke-test/SKILL.md +242 -0
- package/.hermes/skills/spike-prototype/SKILL.md +95 -0
- package/.hermes/skills/stocktake-skills/SKILL.md +72 -0
- package/.hermes/skills/survey-context/SKILL.md +135 -0
- package/.hermes/skills/terse-mode/SKILL.md +42 -0
- package/.hermes/skills/trace-requirement/SKILL.md +69 -0
- package/.hermes/skills/using-bigpowers/SKILL.md +111 -0
- package/.hermes/skills/validate-contracts/SKILL.md +309 -0
- package/.hermes/skills/validate-fix/SKILL.md +106 -0
- package/.hermes/skills/verify-work/SKILL.md +191 -0
- package/.hermes/skills/visual-dashboard/SKILL.md +50 -0
- package/.hermes/skills/wire-ci/SKILL.md +375 -0
- package/.hermes/skills/wire-observability/SKILL.md +97 -0
- package/.hermes/skills/write-document/SKILL.md +255 -0
- package/.mimocode/skills/align-grid/SKILL.md +110 -0
- package/.mimocode/skills/assess-impact/SKILL.md +91 -0
- package/.mimocode/skills/audit-code/SKILL.md +187 -0
- package/.mimocode/skills/audit-plan/SKILL.md +89 -0
- package/.mimocode/skills/build-epic/SKILL.md +105 -0
- package/.mimocode/skills/change-request/SKILL.md +121 -0
- package/.mimocode/skills/commit-message/SKILL.md +140 -0
- package/.mimocode/skills/compose-workflow/SKILL.md +82 -0
- package/.mimocode/skills/context7-mcp/SKILL.md +55 -0
- package/.mimocode/skills/craft-skill/SKILL.md +179 -0
- package/.mimocode/skills/deepen-architecture/SKILL.md +260 -0
- package/.mimocode/skills/define-language/SKILL.md +80 -0
- package/.mimocode/skills/define-success/SKILL.md +65 -0
- package/.mimocode/skills/delegate-task/SKILL.md +91 -0
- package/.mimocode/skills/deploy/SKILL.md +198 -0
- package/.mimocode/skills/design-interface/SKILL.md +97 -0
- package/.mimocode/skills/develop-tdd/SKILL.md +406 -0
- package/.mimocode/skills/diagnose-root/SKILL.md +24 -0
- package/.mimocode/skills/diagnose-stall/SKILL.md +54 -0
- package/.mimocode/skills/dispatch-agents/SKILL.md +118 -0
- package/.mimocode/skills/edit-document/SKILL.md +23 -0
- package/.mimocode/skills/elaborate-spec/SKILL.md +101 -0
- package/.mimocode/skills/enforce-first/SKILL.md +32 -0
- package/.mimocode/skills/evolve-skill/SKILL.md +55 -0
- package/.mimocode/skills/execute-plan/SKILL.md +61 -0
- package/.mimocode/skills/extract-design/SKILL.md +132 -0
- package/.mimocode/skills/find-way/SKILL.md +191 -0
- package/.mimocode/skills/fix-bug/SKILL.md +67 -0
- package/.mimocode/skills/gate-trace/SKILL.md +88 -0
- package/.mimocode/skills/generate-allure-report/SKILL.md +285 -0
- package/.mimocode/skills/grill-me/SKILL.md +96 -0
- package/.mimocode/skills/grill-with-docs/SKILL.md +41 -0
- package/.mimocode/skills/guard-git/SKILL.md +231 -0
- package/.mimocode/skills/harden-vps/SKILL.md +288 -0
- package/.mimocode/skills/hook-commits/SKILL.md +94 -0
- package/.mimocode/skills/inspect-quality/SKILL.md +106 -0
- package/.mimocode/skills/investigate-bug/SKILL.md +127 -0
- package/.mimocode/skills/kickoff-branch/SKILL.md +143 -0
- package/.mimocode/skills/maintain-wiki/SKILL.md +64 -0
- package/.mimocode/skills/map-codebase/SKILL.md +71 -0
- package/.mimocode/skills/migrate-spec/SKILL.md +862 -0
- package/.mimocode/skills/model-domain/SKILL.md +232 -0
- package/.mimocode/skills/orchestrate-project/SKILL.md +174 -0
- package/.mimocode/skills/organize-workspace/SKILL.md +164 -0
- package/.mimocode/skills/plan-refactor/SKILL.md +87 -0
- package/.mimocode/skills/plan-release/SKILL.md +145 -0
- package/.mimocode/skills/plan-tests/SKILL.md +75 -0
- package/.mimocode/skills/plan-work/SKILL.md +260 -0
- package/.mimocode/skills/publish-package/SKILL.md +328 -0
- package/.mimocode/skills/quick-fix/SKILL.md +114 -0
- package/.mimocode/skills/release-branch/SKILL.md +298 -0
- package/.mimocode/skills/request-review/SKILL.md +112 -0
- package/.mimocode/skills/research-first/SKILL.md +87 -0
- package/.mimocode/skills/reset-baseline/SKILL.md +21 -0
- package/.mimocode/skills/respond-review/SKILL.md +71 -0
- package/.mimocode/skills/run-benchmark/SKILL.md +85 -0
- package/.mimocode/skills/run-evals/SKILL.md +80 -0
- package/.mimocode/skills/run-planning/SKILL.md +101 -0
- package/.mimocode/skills/scope-work/SKILL.md +63 -0
- package/.mimocode/skills/search-skills/SKILL.md +73 -0
- package/.mimocode/skills/security-review/SKILL.md +384 -0
- package/.mimocode/skills/seed-conventions/SKILL.md +285 -0
- package/.mimocode/skills/session-state/SKILL.md +146 -0
- package/.mimocode/skills/setup-environment/SKILL.md +39 -0
- package/.mimocode/skills/simulate-agents/SKILL.md +26 -0
- package/.mimocode/skills/slice-tasks/SKILL.md +68 -0
- package/.mimocode/skills/smoke-test/SKILL.md +242 -0
- package/.mimocode/skills/spike-prototype/SKILL.md +95 -0
- package/.mimocode/skills/stocktake-skills/SKILL.md +72 -0
- package/.mimocode/skills/survey-context/SKILL.md +135 -0
- package/.mimocode/skills/terse-mode/SKILL.md +42 -0
- package/.mimocode/skills/trace-requirement/SKILL.md +69 -0
- package/.mimocode/skills/using-bigpowers/SKILL.md +111 -0
- package/.mimocode/skills/validate-contracts/SKILL.md +309 -0
- package/.mimocode/skills/validate-fix/SKILL.md +106 -0
- package/.mimocode/skills/verify-work/SKILL.md +191 -0
- package/.mimocode/skills/visual-dashboard/SKILL.md +50 -0
- package/.mimocode/skills/wire-ci/SKILL.md +375 -0
- package/.mimocode/skills/wire-observability/SKILL.md +97 -0
- package/.mimocode/skills/write-document/SKILL.md +255 -0
- package/.pi/package.json +1 -1
- package/.zcode/skills/align-grid/SKILL.md +110 -0
- package/.zcode/skills/assess-impact/SKILL.md +91 -0
- package/.zcode/skills/audit-code/SKILL.md +187 -0
- package/.zcode/skills/audit-plan/SKILL.md +89 -0
- package/.zcode/skills/build-epic/SKILL.md +105 -0
- package/.zcode/skills/change-request/SKILL.md +121 -0
- package/.zcode/skills/commit-message/SKILL.md +140 -0
- package/.zcode/skills/compose-workflow/SKILL.md +82 -0
- package/.zcode/skills/context7-mcp/SKILL.md +55 -0
- package/.zcode/skills/craft-skill/SKILL.md +179 -0
- package/.zcode/skills/deepen-architecture/SKILL.md +260 -0
- package/.zcode/skills/define-language/SKILL.md +80 -0
- package/.zcode/skills/define-success/SKILL.md +65 -0
- package/.zcode/skills/delegate-task/SKILL.md +91 -0
- package/.zcode/skills/deploy/SKILL.md +198 -0
- package/.zcode/skills/design-interface/SKILL.md +97 -0
- package/.zcode/skills/develop-tdd/SKILL.md +406 -0
- package/.zcode/skills/diagnose-root/SKILL.md +24 -0
- package/.zcode/skills/diagnose-stall/SKILL.md +54 -0
- package/.zcode/skills/dispatch-agents/SKILL.md +118 -0
- package/.zcode/skills/edit-document/SKILL.md +23 -0
- package/.zcode/skills/elaborate-spec/SKILL.md +101 -0
- package/.zcode/skills/enforce-first/SKILL.md +32 -0
- package/.zcode/skills/evolve-skill/SKILL.md +55 -0
- package/.zcode/skills/execute-plan/SKILL.md +61 -0
- package/.zcode/skills/extract-design/SKILL.md +132 -0
- package/.zcode/skills/find-way/SKILL.md +191 -0
- package/.zcode/skills/fix-bug/SKILL.md +67 -0
- package/.zcode/skills/gate-trace/SKILL.md +88 -0
- package/.zcode/skills/generate-allure-report/SKILL.md +285 -0
- package/.zcode/skills/grill-me/SKILL.md +96 -0
- package/.zcode/skills/grill-with-docs/SKILL.md +41 -0
- package/.zcode/skills/guard-git/SKILL.md +231 -0
- package/.zcode/skills/harden-vps/SKILL.md +288 -0
- package/.zcode/skills/hook-commits/SKILL.md +94 -0
- package/.zcode/skills/inspect-quality/SKILL.md +106 -0
- package/.zcode/skills/investigate-bug/SKILL.md +127 -0
- package/.zcode/skills/kickoff-branch/SKILL.md +143 -0
- package/.zcode/skills/maintain-wiki/SKILL.md +64 -0
- package/.zcode/skills/map-codebase/SKILL.md +71 -0
- package/.zcode/skills/migrate-spec/SKILL.md +862 -0
- package/.zcode/skills/model-domain/SKILL.md +232 -0
- package/.zcode/skills/orchestrate-project/SKILL.md +174 -0
- package/.zcode/skills/organize-workspace/SKILL.md +164 -0
- package/.zcode/skills/plan-refactor/SKILL.md +87 -0
- package/.zcode/skills/plan-release/SKILL.md +145 -0
- package/.zcode/skills/plan-tests/SKILL.md +75 -0
- package/.zcode/skills/plan-work/SKILL.md +260 -0
- package/.zcode/skills/publish-package/SKILL.md +328 -0
- package/.zcode/skills/quick-fix/SKILL.md +114 -0
- package/.zcode/skills/release-branch/SKILL.md +298 -0
- package/.zcode/skills/request-review/SKILL.md +112 -0
- package/.zcode/skills/research-first/SKILL.md +87 -0
- package/.zcode/skills/reset-baseline/SKILL.md +21 -0
- package/.zcode/skills/respond-review/SKILL.md +71 -0
- package/.zcode/skills/run-benchmark/SKILL.md +85 -0
- package/.zcode/skills/run-evals/SKILL.md +80 -0
- package/.zcode/skills/run-planning/SKILL.md +101 -0
- package/.zcode/skills/scope-work/SKILL.md +63 -0
- package/.zcode/skills/search-skills/SKILL.md +73 -0
- package/.zcode/skills/security-review/SKILL.md +384 -0
- package/.zcode/skills/seed-conventions/SKILL.md +285 -0
- package/.zcode/skills/session-state/SKILL.md +146 -0
- package/.zcode/skills/setup-environment/SKILL.md +39 -0
- package/.zcode/skills/simulate-agents/SKILL.md +26 -0
- package/.zcode/skills/slice-tasks/SKILL.md +68 -0
- package/.zcode/skills/smoke-test/SKILL.md +242 -0
- package/.zcode/skills/spike-prototype/SKILL.md +95 -0
- package/.zcode/skills/stocktake-skills/SKILL.md +72 -0
- package/.zcode/skills/survey-context/SKILL.md +135 -0
- package/.zcode/skills/terse-mode/SKILL.md +42 -0
- package/.zcode/skills/trace-requirement/SKILL.md +69 -0
- package/.zcode/skills/using-bigpowers/SKILL.md +111 -0
- package/.zcode/skills/validate-contracts/SKILL.md +309 -0
- package/.zcode/skills/validate-fix/SKILL.md +106 -0
- package/.zcode/skills/verify-work/SKILL.md +191 -0
- package/.zcode/skills/visual-dashboard/SKILL.md +50 -0
- package/.zcode/skills/wire-ci/SKILL.md +375 -0
- package/.zcode/skills/wire-observability/SKILL.md +97 -0
- package/.zcode/skills/write-document/SKILL.md +255 -0
- package/CHANGELOG.md +20 -0
- package/bin/setup.js +13 -4
- package/package.json +1 -1
- package/scripts/adapters/agy.sh +44 -1
- package/scripts/adapters/gemini.sh +83 -0
- package/scripts/adapters/hermes.sh +53 -1
- package/scripts/adapters/mimo.sh +41 -0
- package/scripts/adapters/zcode.sh +37 -0
- package/scripts/hooks/hermes/gateway/session-log/HOOK.yaml +5 -0
- package/scripts/hooks/hermes/gateway/session-log/handler.py +7 -0
- package/scripts/hooks/hermes/plugin/guard-git-plugin.py +14 -0
- package/scripts/hooks/hermes/shell/block-dangerous-terminal.sh +23 -0
- package/scripts/hooks/hermes/shell/hooks-config.example.yaml +7 -0
- package/scripts/install-cursor-skills-local.sh +8 -6
- package/scripts/install-cursor-skills.sh +15 -25
- package/scripts/install.sh +211 -13
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/golden-suite-gates.sh +2 -1
- package/scripts/lib/install-helpers.js +199 -4
- package/scripts/lib/sync-render.sh +43 -0
- package/scripts/lib/target-contracts.sh +22 -0
- package/scripts/targets.yaml +31 -1
- package/scripts/test-agy-hub.sh +59 -0
- package/scripts/test-gemini-adapter.sh +70 -0
- package/scripts/test-gemini-hub.sh +55 -0
- package/scripts/test-hermes-adapter.sh +85 -0
- package/scripts/test-hermes-hub.sh +51 -0
- package/scripts/test-install-helpers.js +103 -0
- package/scripts/test-install-helpers.sh +7 -0
- package/scripts/test-mimo-hub.sh +51 -0
- package/scripts/test-zcode-hub.sh +51 -0
- package/scripts/verify-install.sh +31 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// story: e60s01
|
|
3
|
+
// story: e61s02
|
|
4
|
+
// story: e64s02
|
|
5
|
+
// story: e76s02
|
|
6
|
+
// story: e69s02
|
|
7
|
+
// story: e74s02
|
|
3
8
|
// install-helpers.js — symlink helpers for bigpowers setup
|
|
4
9
|
|
|
5
10
|
const fs = require('fs');
|
|
@@ -23,6 +28,11 @@ function linkSkills(skillsDir, targetDir) {
|
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
function linkDir(src, dst) {
|
|
31
|
+
if (!fs.existsSync(src)) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
`Link source missing: ${src} (run bash scripts/sync-skills.sh first)`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
26
36
|
try {
|
|
27
37
|
const stat = fs.lstatSync(dst);
|
|
28
38
|
if (stat.isSymbolicLink()) fs.unlinkSync(dst);
|
|
@@ -38,8 +48,31 @@ function linkFile(src, dst) {
|
|
|
38
48
|
fs.symlinkSync(src, dst);
|
|
39
49
|
}
|
|
40
50
|
|
|
51
|
+
function linkRenderedSkills(renderedDir, targetDir) {
|
|
52
|
+
if (!fs.existsSync(renderedDir)) return;
|
|
53
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
54
|
+
for (const entry of fs.readdirSync(renderedDir, { withFileTypes: true })) {
|
|
55
|
+
if (!entry.isDirectory()) continue;
|
|
56
|
+
if (!fs.existsSync(path.join(renderedDir, entry.name, 'SKILL.md'))) continue;
|
|
57
|
+
linkDir(path.join(renderedDir, entry.name), path.join(targetDir, entry.name));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function bridgeHermesConfig(configPath) {
|
|
62
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
63
|
+
if (fs.existsSync(configPath)) {
|
|
64
|
+
const existing = fs.readFileSync(configPath, 'utf8');
|
|
65
|
+
if (/^instructions:/m.test(existing)) return;
|
|
66
|
+
}
|
|
67
|
+
fs.writeFileSync(configPath, 'instructions: AGENTS.md\n');
|
|
68
|
+
}
|
|
69
|
+
|
|
41
70
|
function linkHook(src, dst) {
|
|
42
|
-
if (!fs.existsSync(src))
|
|
71
|
+
if (!fs.existsSync(src)) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`Hook source missing: ${src} (expected under repo skills/ or scripts/hooks/; fix path or restore file)`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
43
76
|
try {
|
|
44
77
|
const stat = fs.lstatSync(dst);
|
|
45
78
|
if (stat.isSymbolicLink()) fs.unlinkSync(dst);
|
|
@@ -63,9 +96,14 @@ function installGlobal(tool, repoRoot) {
|
|
|
63
96
|
const hooksDir = path.join(homeDir, '.claude', 'hooks');
|
|
64
97
|
fs.mkdirSync(hooksDir, { recursive: true });
|
|
65
98
|
linkHook(
|
|
66
|
-
path.join(repoRoot, 'guard-git', 'scripts', 'block-dangerous-git.sh'),
|
|
99
|
+
path.join(repoRoot, 'skills', 'guard-git', 'scripts', 'block-dangerous-git.sh'),
|
|
67
100
|
path.join(hooksDir, 'block-dangerous-git.sh')
|
|
68
101
|
);
|
|
102
|
+
// story: e63 — hook sources SCRIPT_DIR/lib/git-guardrails-core.sh
|
|
103
|
+
linkDir(
|
|
104
|
+
path.join(repoRoot, 'skills', 'guard-git', 'scripts', 'lib'),
|
|
105
|
+
path.join(hooksDir, 'lib')
|
|
106
|
+
);
|
|
69
107
|
linkHook(
|
|
70
108
|
path.join(repoRoot, 'scripts', 'hooks', 'rtk-rewrite.sh'),
|
|
71
109
|
path.join(hooksDir, 'rtk-rewrite.sh')
|
|
@@ -77,6 +115,18 @@ function installGlobal(tool, repoRoot) {
|
|
|
77
115
|
const extDst = path.join(homeDir, '.gemini', 'config', 'plugins', 'bigpowers');
|
|
78
116
|
fs.mkdirSync(path.dirname(extDst), { recursive: true });
|
|
79
117
|
linkDir(extSrc, extDst);
|
|
118
|
+
const hooksSrc = path.join(extSrc, 'hooks');
|
|
119
|
+
const hooksDst = path.join(homeDir, '.gemini', 'hooks');
|
|
120
|
+
fs.mkdirSync(hooksDst, { recursive: true });
|
|
121
|
+
for (const hookFile of [
|
|
122
|
+
'session-start',
|
|
123
|
+
'run-hook.cmd',
|
|
124
|
+
'before-tool-git-guard.sh',
|
|
125
|
+
'before-tool-rtk.sh',
|
|
126
|
+
'before-tool-token-mgmt.sh',
|
|
127
|
+
]) {
|
|
128
|
+
linkHook(path.join(hooksSrc, hookFile), path.join(hooksDst, hookFile));
|
|
129
|
+
}
|
|
80
130
|
break;
|
|
81
131
|
}
|
|
82
132
|
case 'pi': {
|
|
@@ -85,6 +135,46 @@ function installGlobal(tool, repoRoot) {
|
|
|
85
135
|
linkSkills(skillsDir, targetDir);
|
|
86
136
|
break;
|
|
87
137
|
}
|
|
138
|
+
case 'hermes': {
|
|
139
|
+
const renderedDir = path.join(repoRoot, '.hermes', 'skills');
|
|
140
|
+
const targetDir = path.join(homeDir, '.hermes', 'skills');
|
|
141
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
142
|
+
bridgeHermesConfig(path.join(homeDir, '.hermes', 'config.yaml'));
|
|
143
|
+
const hookSrc = path.join(repoRoot, 'scripts', 'hooks', 'hermes', 'gateway', 'session-log');
|
|
144
|
+
const hookDst = path.join(homeDir, '.hermes', 'hooks', 'session-log');
|
|
145
|
+
if (fs.existsSync(hookSrc)) {
|
|
146
|
+
fs.mkdirSync(path.dirname(hookDst), { recursive: true });
|
|
147
|
+
linkDir(hookSrc, hookDst);
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case 'zcode': {
|
|
152
|
+
const renderedDir = path.join(repoRoot, '.zcode', 'skills');
|
|
153
|
+
const targetDir = path.join(homeDir, '.zcode', 'skills');
|
|
154
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
155
|
+
const agentsSrc = path.join(repoRoot, 'AGENTS.md');
|
|
156
|
+
const agentsDst = path.join(homeDir, '.zcode', 'AGENTS.md');
|
|
157
|
+
fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
|
|
158
|
+
linkFile(agentsSrc, agentsDst);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case 'mimo': {
|
|
162
|
+
const renderedDir = path.join(repoRoot, '.mimocode', 'skills');
|
|
163
|
+
const targetDir = path.join(homeDir, '.mimocode', 'skills');
|
|
164
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
165
|
+
const agentsSrc = path.join(repoRoot, 'AGENTS.md');
|
|
166
|
+
const agentsDst = path.join(homeDir, '.mimocode', 'AGENTS.md');
|
|
167
|
+
fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
|
|
168
|
+
linkFile(agentsSrc, agentsDst);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case 'antigravity':
|
|
172
|
+
case 'agy': {
|
|
173
|
+
const renderedDir = path.join(repoRoot, '.agents', 'skills');
|
|
174
|
+
const targetDir = path.join(homeDir, '.gemini', 'antigravity-cli', 'skills');
|
|
175
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
88
178
|
case 'cursor': {
|
|
89
179
|
const rulesSrc = path.join(repoRoot, '.cursor', 'rules');
|
|
90
180
|
const rulesDst = path.join(homeDir, '.cursor', 'rules');
|
|
@@ -126,6 +216,45 @@ function installLocal(tool, repoRoot) {
|
|
|
126
216
|
linkSkills(skillsDir, targetDir);
|
|
127
217
|
break;
|
|
128
218
|
}
|
|
219
|
+
case 'hermes': {
|
|
220
|
+
const renderedDir = path.join(repoRoot, '.hermes', 'skills');
|
|
221
|
+
const targetDir = path.join(cwd, '.hermes', 'skills');
|
|
222
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
223
|
+
bridgeHermesConfig(path.join(cwd, '.hermes', 'config.yaml'));
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case 'zcode': {
|
|
227
|
+
const renderedDir = path.join(repoRoot, '.zcode', 'skills');
|
|
228
|
+
const targetDir = path.join(cwd, '.zcode', 'skills');
|
|
229
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
230
|
+
const agentsSrc = path.join(repoRoot, 'AGENTS.md');
|
|
231
|
+
const agentsDst = path.join(cwd, '.zcode', 'AGENTS.md');
|
|
232
|
+
fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
|
|
233
|
+
linkFile(agentsSrc, agentsDst);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'mimo': {
|
|
237
|
+
const renderedDir = path.join(repoRoot, '.mimocode', 'skills');
|
|
238
|
+
const targetDir = path.join(cwd, '.mimocode', 'skills');
|
|
239
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
240
|
+
const agentsSrc = path.join(repoRoot, 'AGENTS.md');
|
|
241
|
+
const agentsDst = path.join(cwd, '.mimocode', 'AGENTS.md');
|
|
242
|
+
fs.mkdirSync(path.dirname(agentsDst), { recursive: true });
|
|
243
|
+
linkFile(agentsSrc, agentsDst);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
case 'antigravity':
|
|
247
|
+
case 'agy': {
|
|
248
|
+
const renderedDir = path.join(repoRoot, '.agents', 'skills');
|
|
249
|
+
const targetDir = path.join(cwd, '.agents', 'skills');
|
|
250
|
+
linkRenderedSkills(renderedDir, targetDir);
|
|
251
|
+
const agentsSrc = path.join(repoRoot, 'AGENTS.md');
|
|
252
|
+
const agentsDst = path.join(cwd, 'AGENTS.md');
|
|
253
|
+
if (!fs.existsSync(agentsDst)) {
|
|
254
|
+
linkFile(agentsSrc, agentsDst);
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
129
258
|
case 'cursor': {
|
|
130
259
|
const rulesSrc = path.join(repoRoot, '.cursor', 'rules');
|
|
131
260
|
const rulesDst = path.join(cwd, '.cursor', 'rules');
|
|
@@ -155,7 +284,7 @@ function uninstallTool(toolId, repoRoot) {
|
|
|
155
284
|
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
156
285
|
if (!entry.isSymbolicLink()) continue;
|
|
157
286
|
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
158
|
-
if (target.
|
|
287
|
+
if (target.startsWith(repoRoot)) {
|
|
159
288
|
removeSymlink(path.join(skillsDir, entry.name));
|
|
160
289
|
}
|
|
161
290
|
}
|
|
@@ -163,10 +292,20 @@ function uninstallTool(toolId, repoRoot) {
|
|
|
163
292
|
const hooksDir = path.join(homeDir, '.claude', 'hooks');
|
|
164
293
|
removeSymlink(path.join(hooksDir, 'block-dangerous-git.sh'));
|
|
165
294
|
removeSymlink(path.join(hooksDir, 'rtk-rewrite.sh'));
|
|
295
|
+
removeSymlink(path.join(hooksDir, 'lib'));
|
|
166
296
|
break;
|
|
167
297
|
}
|
|
168
298
|
case 'gemini':
|
|
169
299
|
removeSymlink(path.join(homeDir, '.gemini', 'config', 'plugins', 'bigpowers'));
|
|
300
|
+
for (const hookFile of [
|
|
301
|
+
'session-start',
|
|
302
|
+
'run-hook.cmd',
|
|
303
|
+
'before-tool-git-guard.sh',
|
|
304
|
+
'before-tool-rtk.sh',
|
|
305
|
+
'before-tool-token-mgmt.sh',
|
|
306
|
+
]) {
|
|
307
|
+
removeSymlink(path.join(homeDir, '.gemini', 'hooks', hookFile));
|
|
308
|
+
}
|
|
170
309
|
break;
|
|
171
310
|
case 'pi': {
|
|
172
311
|
const skillsDir = path.join(homeDir, '.pi', 'agent', 'skills');
|
|
@@ -174,7 +313,63 @@ function uninstallTool(toolId, repoRoot) {
|
|
|
174
313
|
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
175
314
|
if (!entry.isSymbolicLink()) continue;
|
|
176
315
|
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
177
|
-
if (target.
|
|
316
|
+
if (target.startsWith(repoRoot)) {
|
|
317
|
+
removeSymlink(path.join(skillsDir, entry.name));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case 'hermes': {
|
|
324
|
+
const skillsDir = path.join(homeDir, '.hermes', 'skills');
|
|
325
|
+
if (fs.existsSync(skillsDir)) {
|
|
326
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
327
|
+
if (!entry.isSymbolicLink()) continue;
|
|
328
|
+
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
329
|
+
if (target.startsWith(repoRoot) || target.includes('.hermes/skills')) {
|
|
330
|
+
removeSymlink(path.join(skillsDir, entry.name));
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
removeSymlink(path.join(homeDir, '.hermes', 'hooks', 'session-log'));
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
case 'zcode': {
|
|
338
|
+
const skillsDir = path.join(homeDir, '.zcode', 'skills');
|
|
339
|
+
if (fs.existsSync(skillsDir)) {
|
|
340
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
341
|
+
if (!entry.isSymbolicLink()) continue;
|
|
342
|
+
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
343
|
+
if (target.includes('bigpowers') || target.includes('.zcode/skills')) {
|
|
344
|
+
removeSymlink(path.join(skillsDir, entry.name));
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
removeSymlink(path.join(homeDir, '.zcode', 'AGENTS.md'));
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
case 'mimo': {
|
|
352
|
+
const skillsDir = path.join(homeDir, '.mimocode', 'skills');
|
|
353
|
+
if (fs.existsSync(skillsDir)) {
|
|
354
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
355
|
+
if (!entry.isSymbolicLink()) continue;
|
|
356
|
+
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
357
|
+
if (target.includes('bigpowers') || target.includes('.mimocode/skills')) {
|
|
358
|
+
removeSymlink(path.join(skillsDir, entry.name));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
removeSymlink(path.join(homeDir, '.mimocode', 'AGENTS.md'));
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
case 'antigravity':
|
|
366
|
+
case 'agy': {
|
|
367
|
+
const skillsDir = path.join(homeDir, '.gemini', 'antigravity-cli', 'skills');
|
|
368
|
+
if (fs.existsSync(skillsDir)) {
|
|
369
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
370
|
+
if (!entry.isSymbolicLink()) continue;
|
|
371
|
+
const target = fs.readlinkSync(path.join(skillsDir, entry.name));
|
|
372
|
+
if (target.includes('bigpowers') || target.includes('.agents/skills')) {
|
|
178
373
|
removeSymlink(path.join(skillsDir, entry.name));
|
|
179
374
|
}
|
|
180
375
|
}
|
|
@@ -54,6 +54,49 @@ render_gemini_command() {
|
|
|
54
54
|
} > "$GEMINI_COMMANDS/$IR_NAME.toml"
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
render_gemini_hooks_manifest() {
|
|
58
|
+
local hookdir="${GEMINI_HOOKS_DIR:-$GEMINI_EXT_DIR/hooks}"
|
|
59
|
+
mkdir -p "$hookdir"
|
|
60
|
+
cat > "$hookdir/hooks-manifest.json" <<'JSON'
|
|
61
|
+
{
|
|
62
|
+
"schema_version": 1,
|
|
63
|
+
"target": "gemini",
|
|
64
|
+
"config_path": "~/.gemini/settings.json",
|
|
65
|
+
"events_total": 11,
|
|
66
|
+
"events": [
|
|
67
|
+
"BeforeTool",
|
|
68
|
+
"AfterTool",
|
|
69
|
+
"BeforeAgent",
|
|
70
|
+
"AfterAgent",
|
|
71
|
+
"BeforeModel",
|
|
72
|
+
"BeforeToolSelection",
|
|
73
|
+
"AfterModel",
|
|
74
|
+
"SessionStart",
|
|
75
|
+
"SessionEnd",
|
|
76
|
+
"Notification",
|
|
77
|
+
"PreCompress"
|
|
78
|
+
],
|
|
79
|
+
"shipped_hooks": [
|
|
80
|
+
{
|
|
81
|
+
"event": "SessionStart",
|
|
82
|
+
"script": "session-start",
|
|
83
|
+
"matcher": "startup|clear|compact",
|
|
84
|
+
"wave": "a",
|
|
85
|
+
"status": "shipped"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"event": "BeforeTool",
|
|
89
|
+
"script": "before-tool-git-guard.sh",
|
|
90
|
+
"matcher": "run_shell_command",
|
|
91
|
+
"wave": "a",
|
|
92
|
+
"status": "template"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"polyglot_launcher": "run-hook.cmd"
|
|
96
|
+
}
|
|
97
|
+
JSON
|
|
98
|
+
}
|
|
99
|
+
|
|
57
100
|
render_pi_skill() {
|
|
58
101
|
mkdir -p "$PI_SKILLS/$IR_NAME"
|
|
59
102
|
{
|
|
@@ -42,6 +42,16 @@ assert_gemini_ext_exists() {
|
|
|
42
42
|
return 1
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
assert_gemini_hooks_manifest() {
|
|
46
|
+
local id="$1"
|
|
47
|
+
if GEMINI_EXT_DIR=".gemini/extensions/bigpowers" bash scripts/adapters/gemini.sh --validate-hooks >/dev/null 2>&1; then
|
|
48
|
+
echo "PASS $id:gemini_hooks_manifest"
|
|
49
|
+
return 0
|
|
50
|
+
fi
|
|
51
|
+
echo "FAIL $id:gemini_hooks_manifest — hook templates invalid"
|
|
52
|
+
return 1
|
|
53
|
+
}
|
|
54
|
+
|
|
45
55
|
assert_pi_skills_nonempty() {
|
|
46
56
|
local id="$1"
|
|
47
57
|
if [[ -d .pi/skills ]] && [[ -n "$(ls -A .pi/skills 2>/dev/null)" ]]; then
|
|
@@ -62,6 +72,16 @@ assert_aider_bridge() {
|
|
|
62
72
|
return 0
|
|
63
73
|
}
|
|
64
74
|
|
|
75
|
+
assert_agy_skills_nonempty() {
|
|
76
|
+
local id="$1"
|
|
77
|
+
if [[ -d .agents/skills ]] && [[ -n "$(ls -A .agents/skills 2>/dev/null)" ]]; then
|
|
78
|
+
echo "PASS $id:agy_skills_nonempty"
|
|
79
|
+
return 0
|
|
80
|
+
fi
|
|
81
|
+
echo "FAIL $id:agy_skills_nonempty — .agents/skills empty"
|
|
82
|
+
return 1
|
|
83
|
+
}
|
|
84
|
+
|
|
65
85
|
run_contract() {
|
|
66
86
|
local id="$1"
|
|
67
87
|
local contract="$2"
|
|
@@ -70,7 +90,9 @@ run_contract() {
|
|
|
70
90
|
symlink_claude_md) assert_symlink_claude_md "$id" ;;
|
|
71
91
|
cursor_rules_nonempty) assert_cursor_rules_nonempty "$id" ;;
|
|
72
92
|
gemini_ext_exists) assert_gemini_ext_exists "$id" ;;
|
|
93
|
+
gemini_hooks_manifest) assert_gemini_hooks_manifest "$id" ;;
|
|
73
94
|
pi_skills_nonempty) assert_pi_skills_nonempty "$id" ;;
|
|
95
|
+
agy_skills_nonempty) assert_agy_skills_nonempty "$id" ;;
|
|
74
96
|
aider_bridge) assert_aider_bridge "$id" ;;
|
|
75
97
|
*) echo "SKIP $id:$contract — unknown contract"; return 0 ;;
|
|
76
98
|
esac
|
package/scripts/targets.yaml
CHANGED
|
@@ -29,6 +29,7 @@ targets:
|
|
|
29
29
|
file: GEMINI.md
|
|
30
30
|
contracts:
|
|
31
31
|
- gemini_ext_exists
|
|
32
|
+
- gemini_hooks_manifest
|
|
32
33
|
|
|
33
34
|
- id: pi
|
|
34
35
|
name: pi Agent
|
|
@@ -79,12 +80,15 @@ targets:
|
|
|
79
80
|
- id: agy
|
|
80
81
|
name: Antigravity agy (proprietary beta)
|
|
81
82
|
tier: opt_in
|
|
82
|
-
skill:
|
|
83
|
+
skill:
|
|
84
|
+
adapter: agy
|
|
85
|
+
output: .agents/skills
|
|
83
86
|
context:
|
|
84
87
|
adapter: agy
|
|
85
88
|
mode: symlink
|
|
86
89
|
file: CLAUDE.md
|
|
87
90
|
contracts:
|
|
91
|
+
- agy_skills_nonempty
|
|
88
92
|
- symlink_claude_md
|
|
89
93
|
|
|
90
94
|
# Wave B (e37s10) — skills-dir adapters
|
|
@@ -128,6 +132,32 @@ targets:
|
|
|
128
132
|
contracts:
|
|
129
133
|
- agents_md_exists
|
|
130
134
|
|
|
135
|
+
- id: zcode
|
|
136
|
+
name: ZCode
|
|
137
|
+
tier: opt_in
|
|
138
|
+
skill:
|
|
139
|
+
adapter: zcode
|
|
140
|
+
output: .zcode/skills
|
|
141
|
+
context:
|
|
142
|
+
adapter: zcode
|
|
143
|
+
mode: symlink
|
|
144
|
+
file: AGENTS.md
|
|
145
|
+
contracts:
|
|
146
|
+
- agents_md_exists
|
|
147
|
+
|
|
148
|
+
- id: mimo
|
|
149
|
+
name: MiMo Code
|
|
150
|
+
tier: opt_in
|
|
151
|
+
skill:
|
|
152
|
+
adapter: mimo
|
|
153
|
+
output: .mimocode/skills
|
|
154
|
+
context:
|
|
155
|
+
adapter: mimo
|
|
156
|
+
mode: symlink
|
|
157
|
+
file: AGENTS.md
|
|
158
|
+
contracts:
|
|
159
|
+
- agents_md_exists
|
|
160
|
+
|
|
131
161
|
# Wave C (e37s11)
|
|
132
162
|
- id: qwen
|
|
133
163
|
name: Qwen (Alibaba)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e74s02
|
|
3
|
+
# Regression tests for Antigravity CLI install hub wiring (Wave B).
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
7
|
+
PASS=0
|
|
8
|
+
FAIL=0
|
|
9
|
+
|
|
10
|
+
pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
|
|
11
|
+
fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
|
|
12
|
+
|
|
13
|
+
echo "=== test-agy-hub.sh ==="
|
|
14
|
+
|
|
15
|
+
INSTALL_SH="$REPO_ROOT/scripts/install.sh"
|
|
16
|
+
HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
|
|
17
|
+
SETUP_JS="$REPO_ROOT/bin/setup.js"
|
|
18
|
+
TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
|
|
19
|
+
|
|
20
|
+
grep -q 'install_agy()' "$INSTALL_SH" && pass 'install.sh: install_agy()' || fail 'install.sh: missing install_agy()'
|
|
21
|
+
grep -q 'install_antigravity()' "$INSTALL_SH" && pass 'install.sh: install_antigravity alias' || fail 'install.sh: missing install_antigravity()'
|
|
22
|
+
grep -q 'uninstall_agy()' "$INSTALL_SH" && pass 'install.sh: uninstall_agy()' || fail 'install.sh: missing uninstall_agy()'
|
|
23
|
+
grep -q 'uninstall_antigravity()' "$INSTALL_SH" && pass 'install.sh: uninstall_antigravity alias' || fail 'install.sh: missing uninstall_antigravity()'
|
|
24
|
+
grep -q 'AGY_SKILLS_DIR=' "$INSTALL_SH" && pass 'install.sh: AGY_SKILLS_DIR' || fail 'install.sh: missing AGY_SKILLS_DIR'
|
|
25
|
+
grep -q 'antigravity-cli/skills' "$INSTALL_SH" && pass 'install.sh: antigravity-cli path' || fail 'install.sh: missing antigravity-cli path'
|
|
26
|
+
grep -q 'install_agy' "$INSTALL_SH" && grep -q 'uninstall_agy' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing agy'
|
|
27
|
+
! grep -q '\.gemini/extensions/bigpowers' <<< "$(sed -n '/install_agy/,/^}/p' "$INSTALL_SH")" \
|
|
28
|
+
&& pass 'install.sh: no gemini extension path' || fail 'install.sh: touches gemini extension path'
|
|
29
|
+
|
|
30
|
+
DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
|
|
31
|
+
echo "$DRY_OUT" | grep -q 'Antigravity CLI →' && pass 'dry-run: Antigravity CLI section' || fail 'dry-run: missing Antigravity CLI section'
|
|
32
|
+
DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
|
|
33
|
+
echo "$DRY_UNINSTALL" | grep -q 'Antigravity CLI →' && pass 'dry-run uninstall: Antigravity CLI section' || fail 'dry-run uninstall: missing Antigravity CLI section'
|
|
34
|
+
|
|
35
|
+
grep -q "case 'antigravity'" "$HELPERS_JS" && pass 'install-helpers: antigravity case' || fail 'install-helpers: missing antigravity case'
|
|
36
|
+
grep -q "case 'agy'" "$HELPERS_JS" && pass 'install-helpers: agy case' || fail 'install-helpers: missing agy case'
|
|
37
|
+
grep -q "'antigravity-cli', 'skills'" "$HELPERS_JS" && pass 'install-helpers: antigravity-cli global path' || fail 'install-helpers: missing antigravity-cli path'
|
|
38
|
+
grep -q "'\\.agents', 'skills'" "$HELPERS_JS" && pass 'install-helpers: .agents/skills local path' || fail 'install-helpers: missing .agents/skills path'
|
|
39
|
+
|
|
40
|
+
SETUP_SRC="$(cat "$SETUP_JS")"
|
|
41
|
+
echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
|
|
42
|
+
echo "$SETUP_SRC" | grep -q "'antigravity'" && pass 'setup.js: antigravity in TOOLS/SUPPORTED_IDS' || fail 'setup.js: antigravity missing'
|
|
43
|
+
echo "$SETUP_SRC" | grep -q "'agy'" && pass 'setup.js: agy in SUPPORTED_IDS' || fail 'setup.js: agy missing from SUPPORTED_IDS'
|
|
44
|
+
echo "$SETUP_SRC" | grep -q 'antigravity-cli/skills' && pass 'setup.js: antigravity-cli global path' || fail 'setup.js: wrong antigravity global path'
|
|
45
|
+
echo "$SETUP_SRC" | grep -q "'\\.agents/skills'" && pass 'setup.js: .agents/skills local path' || fail 'setup.js: wrong antigravity local path'
|
|
46
|
+
|
|
47
|
+
grep -q 'id: agy' "$TARGETS_YAML" && pass 'targets.yaml: agy row' || fail 'targets.yaml: missing agy row'
|
|
48
|
+
grep -q 'adapter: agy' "$TARGETS_YAML" && pass 'targets.yaml: agy adapter' || fail 'targets.yaml: missing agy adapter'
|
|
49
|
+
grep -q 'output: .agents/skills' "$TARGETS_YAML" && pass 'targets.yaml: agy output path' || fail 'targets.yaml: missing agy output'
|
|
50
|
+
grep -q 'agy_skills_nonempty' "$TARGETS_YAML" && pass 'targets.yaml: agy contract' || fail 'targets.yaml: missing agy contract'
|
|
51
|
+
|
|
52
|
+
grep -q 'install_agy()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_agy assertion' || fail 'verify-install: missing install_agy assertion'
|
|
53
|
+
|
|
54
|
+
bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
|
|
55
|
+
node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
|
|
56
|
+
node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
|
|
57
|
+
|
|
58
|
+
echo "test-agy-hub: $PASS passed, $FAIL failed"
|
|
59
|
+
[[ "$FAIL" -eq 0 ]] || exit 1
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e64s01
|
|
3
|
+
# Validates Gemini adapter hook templates and stdin render path.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
8
|
+
GEMINI_EXT="$REPO_ROOT/.gemini/extensions/bigpowers"
|
|
9
|
+
|
|
10
|
+
echo "=== test-gemini-adapter.sh ==="
|
|
11
|
+
|
|
12
|
+
# Test 1: validate hook templates via adapter CLI
|
|
13
|
+
echo "Test 1: validate_hook_templates"
|
|
14
|
+
GEMINI_EXT_DIR="$GEMINI_EXT" GEMINI_HOOKS_DIR="$GEMINI_EXT/hooks" \
|
|
15
|
+
bash "$REPO_ROOT/scripts/adapters/gemini.sh" --validate-hooks
|
|
16
|
+
|
|
17
|
+
# Test 2: event count
|
|
18
|
+
echo "Test 2: hook event count"
|
|
19
|
+
COUNT="$(GEMINI_EXT_DIR="$GEMINI_EXT" bash "$REPO_ROOT/scripts/adapters/gemini.sh" --list-hook-events | wc -l | tr -d ' ')"
|
|
20
|
+
if [[ "$COUNT" != "11" ]]; then
|
|
21
|
+
echo "FAIL: expected 11 events, got $COUNT"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
# Test 3: HOOKS.md documents all events
|
|
26
|
+
echo "Test 3: HOOKS.md coverage"
|
|
27
|
+
for ev in BeforeTool AfterTool BeforeAgent AfterAgent BeforeModel BeforeToolSelection AfterModel SessionStart SessionEnd Notification PreCompress; do
|
|
28
|
+
grep -q "$ev" "$GEMINI_EXT/hooks/HOOKS.md" || { echo "FAIL: HOOKS.md missing $ev"; exit 1; }
|
|
29
|
+
done
|
|
30
|
+
|
|
31
|
+
# Test 4: stdin render smoke (fallback path without sync-render sourced)
|
|
32
|
+
echo "Test 4: stdin render smoke"
|
|
33
|
+
TMP_SKILL="$GEMINI_EXT/skills/_test-gemini-adapter"
|
|
34
|
+
TMP_CMD="$GEMINI_EXT/commands/prompts/_test-gemini-adapter.md"
|
|
35
|
+
rm -rf "$TMP_SKILL" "$TMP_CMD"
|
|
36
|
+
echo '{"name":"_test-gemini-adapter","model":"","description":"adapter test","body":"test body"}' | \
|
|
37
|
+
GEMINI_SKILLS="$GEMINI_EXT/skills" GEMINI_COMMANDS="$GEMINI_EXT/commands" \
|
|
38
|
+
bash "$REPO_ROOT/scripts/adapters/gemini.sh"
|
|
39
|
+
if [[ ! -f "$TMP_SKILL/SKILL.md" ]] || [[ ! -f "$TMP_CMD" ]]; then
|
|
40
|
+
echo "FAIL: gemini adapter did not render test skill"
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
rm -rf "$TMP_SKILL" "$TMP_CMD"
|
|
44
|
+
|
|
45
|
+
# Test 5: render_hooks_manifest delegates to render_gemini_hooks_manifest override
|
|
46
|
+
# (subshell invocation — adapters are subprocess-invoked, not sourced, per Tests 1-4 above)
|
|
47
|
+
echo "Test 5: render_hooks_manifest"
|
|
48
|
+
GEMINI_EXT_DIR="$GEMINI_EXT" bash -c "
|
|
49
|
+
source '$REPO_ROOT/scripts/lib/skill-common.sh' 2>/dev/null || true
|
|
50
|
+
source '$REPO_ROOT/scripts/lib/sync-render.sh'
|
|
51
|
+
source '$REPO_ROOT/scripts/adapters/gemini.sh'
|
|
52
|
+
render_hooks_manifest
|
|
53
|
+
"
|
|
54
|
+
grep -q '"events_total": 11' "$GEMINI_EXT/hooks/hooks-manifest.json" || {
|
|
55
|
+
echo "FAIL: hooks-manifest.json invalid after render"
|
|
56
|
+
exit 1
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# Test 6: before-tool-git-guard gemini JSON shape
|
|
60
|
+
echo "Test 6: before-tool-git-guard gemini mode"
|
|
61
|
+
OUT="$(echo '{"tool_input":{"command":"git reset --hard"}}' | \
|
|
62
|
+
bash "$GEMINI_EXT/hooks/before-tool-git-guard.sh")"
|
|
63
|
+
echo "$OUT" | jq -e '.decision == "deny"' >/dev/null || {
|
|
64
|
+
echo "FAIL: git guard did not deny dangerous reset --hard"
|
|
65
|
+
echo "$OUT"
|
|
66
|
+
exit 1
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
echo "PASS: test-gemini-adapter.sh"
|
|
70
|
+
exit 0
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e64s02
|
|
3
|
+
# Regression tests for Gemini install hub wiring (Wave B).
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
7
|
+
PASS=0
|
|
8
|
+
FAIL=0
|
|
9
|
+
|
|
10
|
+
pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
|
|
11
|
+
fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
|
|
12
|
+
|
|
13
|
+
echo "=== test-gemini-hub.sh ==="
|
|
14
|
+
|
|
15
|
+
INSTALL_SH="$REPO_ROOT/scripts/install.sh"
|
|
16
|
+
HELPERS_JS="$REPO_ROOT/scripts/lib/install-helpers.js"
|
|
17
|
+
SETUP_JS="$REPO_ROOT/bin/setup.js"
|
|
18
|
+
TARGETS_YAML="$REPO_ROOT/scripts/targets.yaml"
|
|
19
|
+
|
|
20
|
+
grep -q 'install_gemini()' "$INSTALL_SH" && pass 'install.sh: install_gemini()' || fail 'install.sh: missing install_gemini()'
|
|
21
|
+
grep -q 'uninstall_gemini()' "$INSTALL_SH" && pass 'install.sh: uninstall_gemini()' || fail 'install.sh: missing uninstall_gemini()'
|
|
22
|
+
grep -q 'GEMINI_HOOKS_SRC=' "$INSTALL_SH" && pass 'install.sh: GEMINI_HOOKS_SRC' || fail 'install.sh: missing GEMINI_HOOKS_SRC'
|
|
23
|
+
grep -q 'before-tool-git-guard.sh' "$INSTALL_SH" && pass 'install.sh: Wave A git-guard hook' || fail 'install.sh: missing before-tool-git-guard.sh'
|
|
24
|
+
grep -q 'before-tool-rtk.sh' "$INSTALL_SH" && pass 'install.sh: Wave A rtk hook' || fail 'install.sh: missing before-tool-rtk.sh'
|
|
25
|
+
grep -q 'install_gemini' "$INSTALL_SH" && grep -q 'uninstall_gemini' "$INSTALL_SH" && pass 'install.sh: dispatch wired' || fail 'install.sh: dispatch missing gemini'
|
|
26
|
+
|
|
27
|
+
DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1)"
|
|
28
|
+
echo "$DRY_OUT" | grep -q 'Gemini CLI →' && pass 'dry-run: Gemini CLI section' || fail 'dry-run: missing Gemini CLI section'
|
|
29
|
+
echo "$DRY_OUT" | grep -q 'before-tool-git-guard.sh' && pass 'dry-run: git-guard hook symlink' || fail 'dry-run: missing git-guard hook'
|
|
30
|
+
DRY_UNINSTALL="$(bash "$INSTALL_SH" --dry-run --uninstall 2>&1)"
|
|
31
|
+
echo "$DRY_UNINSTALL" | grep -q 'Gemini CLI →' && pass 'dry-run uninstall: Gemini CLI section' || fail 'dry-run uninstall: missing Gemini CLI section'
|
|
32
|
+
|
|
33
|
+
grep -q "case 'gemini'" "$HELPERS_JS" && pass 'install-helpers: gemini global case' || fail 'install-helpers: missing gemini global case'
|
|
34
|
+
grep -q 'before-tool-git-guard.sh' "$HELPERS_JS" && pass 'install-helpers: gemini hook wiring' || fail 'install-helpers: missing gemini hook wiring'
|
|
35
|
+
|
|
36
|
+
SETUP_SRC="$(cat "$SETUP_JS")"
|
|
37
|
+
echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS = new Set" && pass 'setup.js: SUPPORTED_IDS set' || fail 'setup.js: missing SUPPORTED_IDS'
|
|
38
|
+
echo "$SETUP_SRC" | grep -q "'gemini'" "$SETUP_JS" && pass 'setup.js: gemini in TOOLS' || fail 'setup.js: gemini missing from TOOLS'
|
|
39
|
+
echo "$SETUP_SRC" | grep -q "'gemini'" && echo "$SETUP_SRC" | grep -q "SUPPORTED_IDS" \
|
|
40
|
+
&& grep -q "'gemini'" <<< "$(sed -n "/SUPPORTED_IDS = new Set/,/);/p" "$SETUP_JS")" \
|
|
41
|
+
&& pass 'setup.js: gemini in SUPPORTED_IDS' || fail 'setup.js: gemini not in SUPPORTED_IDS'
|
|
42
|
+
|
|
43
|
+
grep -q 'id: gemini' "$TARGETS_YAML" && pass 'targets.yaml: gemini row' || fail 'targets.yaml: missing gemini row'
|
|
44
|
+
grep -q 'adapter: gemini' "$TARGETS_YAML" && pass 'targets.yaml: gemini adapter' || fail 'targets.yaml: missing gemini adapter'
|
|
45
|
+
grep -q 'gemini_hooks_manifest' "$TARGETS_YAML" && pass 'targets.yaml: gemini_hooks_manifest contract' || fail 'targets.yaml: missing gemini_hooks_manifest'
|
|
46
|
+
|
|
47
|
+
grep -q 'install_gemini()' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: install_gemini assertion' || fail 'verify-install: missing install_gemini assertion'
|
|
48
|
+
grep -q 'gemini_hooks_manifest' "$REPO_ROOT/scripts/verify-install.sh" && pass 'verify-install: gemini hook contract' || fail 'verify-install: missing gemini hook contract'
|
|
49
|
+
|
|
50
|
+
bash -n "$INSTALL_SH" && pass 'bash -n install.sh' || fail 'bash -n install.sh'
|
|
51
|
+
node --check "$HELPERS_JS" && pass 'node --check install-helpers.js' || fail 'node --check install-helpers.js'
|
|
52
|
+
node --check "$SETUP_JS" && pass 'node --check setup.js' || fail 'node --check setup.js'
|
|
53
|
+
|
|
54
|
+
echo "test-gemini-hub: $PASS passed, $FAIL failed"
|
|
55
|
+
[[ "$FAIL" -eq 0 ]] || exit 1
|