godpowers 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +37 -0
- package/CHANGELOG.md +639 -0
- package/INSPIRATION.md +52 -0
- package/LICENSE +21 -0
- package/README.md +232 -0
- package/SKILL.md +500 -0
- package/agents/god-archaeologist.md +139 -0
- package/agents/god-architect.md +92 -0
- package/agents/god-auditor.md +150 -0
- package/agents/god-browser-tester.md +144 -0
- package/agents/god-context-writer.md +137 -0
- package/agents/god-coordinator.md +138 -0
- package/agents/god-debt-assessor.md +132 -0
- package/agents/god-debugger.md +77 -0
- package/agents/god-deploy-engineer.md +87 -0
- package/agents/god-deps-auditor.md +111 -0
- package/agents/god-design-reviewer.md +137 -0
- package/agents/god-designer.md +171 -0
- package/agents/god-docs-writer.md +102 -0
- package/agents/god-executor.md +76 -0
- package/agents/god-explorer.md +110 -0
- package/agents/god-harden-auditor.md +163 -0
- package/agents/god-incident-investigator.md +144 -0
- package/agents/god-launch-strategist.md +103 -0
- package/agents/god-migration-strategist.md +126 -0
- package/agents/god-observability-engineer.md +76 -0
- package/agents/god-orchestrator.md +728 -0
- package/agents/god-org-context-loader.md +124 -0
- package/agents/god-planner.md +73 -0
- package/agents/god-pm.md +105 -0
- package/agents/god-quality-reviewer.md +74 -0
- package/agents/god-reconciler.md +230 -0
- package/agents/god-reconstructor.md +124 -0
- package/agents/god-repo-scaffolder.md +60 -0
- package/agents/god-retrospective.md +109 -0
- package/agents/god-roadmap-reconciler.md +123 -0
- package/agents/god-roadmap-updater.md +89 -0
- package/agents/god-roadmapper.md +82 -0
- package/agents/god-spec-reviewer.md +70 -0
- package/agents/god-spike-runner.md +119 -0
- package/agents/god-stack-selector.md +93 -0
- package/agents/god-standards-check.md +132 -0
- package/agents/god-storyteller.md +116 -0
- package/agents/god-updater.md +174 -0
- package/bin/install.js +514 -0
- package/extensions/data-pack/README.md +33 -0
- package/extensions/data-pack/agents/god-dashboard-builder.md +66 -0
- package/extensions/data-pack/agents/god-etl-engineer.md +64 -0
- package/extensions/data-pack/agents/god-ml-feature-engineer.md +66 -0
- package/extensions/data-pack/manifest.yaml +39 -0
- package/extensions/data-pack/package.json +42 -0
- package/extensions/data-pack/skills/god-dashboard.md +28 -0
- package/extensions/data-pack/skills/god-etl.md +28 -0
- package/extensions/data-pack/skills/god-ml-feature.md +28 -0
- package/extensions/data-pack/workflows/dashboard-arc.yaml +13 -0
- package/extensions/data-pack/workflows/etl-arc.yaml +13 -0
- package/extensions/data-pack/workflows/ml-feature-arc.yaml +13 -0
- package/extensions/launch-pack/README.md +36 -0
- package/extensions/launch-pack/agents/god-indie-hackers-strategist.md +128 -0
- package/extensions/launch-pack/agents/god-oss-release-strategist.md +125 -0
- package/extensions/launch-pack/agents/god-product-hunt-strategist.md +118 -0
- package/extensions/launch-pack/agents/god-show-hn-strategist.md +113 -0
- package/extensions/launch-pack/manifest.yaml +45 -0
- package/extensions/launch-pack/package.json +41 -0
- package/extensions/launch-pack/skills/god-indie-hackers.md +39 -0
- package/extensions/launch-pack/skills/god-oss-release.md +43 -0
- package/extensions/launch-pack/skills/god-product-hunt.md +41 -0
- package/extensions/launch-pack/skills/god-show-hn.md +40 -0
- package/extensions/launch-pack/workflows/indie-hackers.yaml +13 -0
- package/extensions/launch-pack/workflows/oss-release.yaml +13 -0
- package/extensions/launch-pack/workflows/product-hunt.yaml +13 -0
- package/extensions/launch-pack/workflows/show-hn.yaml +13 -0
- package/extensions/security-pack/README.md +48 -0
- package/extensions/security-pack/agents/god-hipaa-auditor.md +117 -0
- package/extensions/security-pack/agents/god-pci-auditor.md +100 -0
- package/extensions/security-pack/agents/god-soc2-auditor.md +107 -0
- package/extensions/security-pack/manifest.yaml +39 -0
- package/extensions/security-pack/package.json +42 -0
- package/extensions/security-pack/skills/god-hipaa-audit.md +41 -0
- package/extensions/security-pack/skills/god-pci-audit.md +40 -0
- package/extensions/security-pack/skills/god-soc2-audit.md +42 -0
- package/extensions/security-pack/workflows/hipaa-arc.yaml +15 -0
- package/extensions/security-pack/workflows/pci-arc.yaml +15 -0
- package/extensions/security-pack/workflows/soc2-arc.yaml +15 -0
- package/hooks/pre-tool-use.sh +40 -0
- package/hooks/session-start.sh +74 -0
- package/lib/README.md +28 -0
- package/lib/agent-browser-driver.js +215 -0
- package/lib/agent-cache.js +194 -0
- package/lib/agent-validator.js +275 -0
- package/lib/artifact-diff.js +168 -0
- package/lib/artifact-linter.js +142 -0
- package/lib/awesome-design.js +312 -0
- package/lib/browser-bridge.js +209 -0
- package/lib/budget.js +215 -0
- package/lib/checkpoint.js +390 -0
- package/lib/code-scanner.js +262 -0
- package/lib/context-budget.js +170 -0
- package/lib/context-writer.js +348 -0
- package/lib/cost-tracker.js +325 -0
- package/lib/cross-artifact-impact.js +162 -0
- package/lib/cross-repo-linkage.js +150 -0
- package/lib/design-detector.js +167 -0
- package/lib/design-spec.js +348 -0
- package/lib/drift-detector.js +212 -0
- package/lib/event-reader.js +174 -0
- package/lib/events.js +183 -0
- package/lib/extensions.js +257 -0
- package/lib/have-nots-validator.js +647 -0
- package/lib/impact.js +314 -0
- package/lib/impeccable-bridge.js +139 -0
- package/lib/intent.js +177 -0
- package/lib/linkage.js +232 -0
- package/lib/meta-linter.js +263 -0
- package/lib/multi-repo-detector.js +182 -0
- package/lib/otel-exporter.js +308 -0
- package/lib/recipes.js +186 -0
- package/lib/reverse-sync.js +332 -0
- package/lib/review-required.js +224 -0
- package/lib/router.js +278 -0
- package/lib/runtime-audit.js +455 -0
- package/lib/runtime-test.js +309 -0
- package/lib/skillui-bridge.js +216 -0
- package/lib/state-lock.js +201 -0
- package/lib/state.js +142 -0
- package/lib/story-validator.js +301 -0
- package/lib/suite-state.js +220 -0
- package/lib/workflow-parser.js +109 -0
- package/lib/workflow-runner.js +221 -0
- package/package.json +63 -0
- package/references/HAVE-NOTS.md +573 -0
- package/references/building/BUILD-ANTIPATTERNS.md +102 -0
- package/references/building/BUILD-VERTICAL-SLICES.md +75 -0
- package/references/building/BUILD-WAVES.md +61 -0
- package/references/building/README.md +17 -0
- package/references/design/COLOR.md +122 -0
- package/references/design/DESIGN-ANATOMY.md +121 -0
- package/references/design/DESIGN-ANTIPATTERNS.md +108 -0
- package/references/design/INTERACTION.md +148 -0
- package/references/design/MOTION.md +120 -0
- package/references/design/RESPONSIVE.md +157 -0
- package/references/design/SPATIAL.md +109 -0
- package/references/design/TYPOGRAPHY.md +121 -0
- package/references/design/UX-WRITING.md +135 -0
- package/references/orchestration/MODE-DETECTION.md +74 -0
- package/references/orchestration/README.md +18 -0
- package/references/orchestration/SCALE-DETECTION.md +81 -0
- package/references/planning/ARCH-ANATOMY.md +143 -0
- package/references/planning/ARCH-ANTIPATTERNS.md +52 -0
- package/references/planning/PRD-ANATOMY.md +117 -0
- package/references/planning/PRD-ANTIPATTERNS.md +138 -0
- package/references/planning/README.md +16 -0
- package/references/planning/ROADMAP-ANATOMY.md +43 -0
- package/references/planning/ROADMAP-ANTIPATTERNS.md +94 -0
- package/references/planning/STACK-ANATOMY.md +60 -0
- package/references/planning/STACK-ANTIPATTERNS.md +95 -0
- package/references/shared/GLOSSARY.md +80 -0
- package/references/shared/ORCHESTRATORS.md +76 -0
- package/references/shared/README.md +14 -0
- package/references/shipping/DEPLOY-ANTIPATTERNS.md +64 -0
- package/references/shipping/DEPLOY-PATTERNS.md +110 -0
- package/references/shipping/HARDEN-ANTIPATTERNS.md +66 -0
- package/references/shipping/HARDEN-OWASP-WORKSHEETS.md +89 -0
- package/references/shipping/LAUNCH-ANTIPATTERNS.md +68 -0
- package/references/shipping/OBSERVE-ANTIPATTERNS.md +62 -0
- package/references/shipping/OBSERVE-SLO-EXAMPLES.md +107 -0
- package/references/shipping/README.md +18 -0
- package/routing/god-add-backlog.yaml +24 -0
- package/routing/god-add-tests.yaml +27 -0
- package/routing/god-add-todo.yaml +24 -0
- package/routing/god-agent-audit.yaml +24 -0
- package/routing/god-arch.yaml +46 -0
- package/routing/god-archaeology.yaml +28 -0
- package/routing/god-audit.yaml +32 -0
- package/routing/god-budget.yaml +24 -0
- package/routing/god-build-agent.yaml +24 -0
- package/routing/god-build.yaml +46 -0
- package/routing/god-cache-clear.yaml +24 -0
- package/routing/god-check-todos.yaml +24 -0
- package/routing/god-context-scan.yaml +24 -0
- package/routing/god-context.yaml +44 -0
- package/routing/god-cost.yaml +24 -0
- package/routing/god-debug.yaml +28 -0
- package/routing/god-deploy.yaml +34 -0
- package/routing/god-design-impact.yaml +25 -0
- package/routing/god-design.yaml +67 -0
- package/routing/god-discuss.yaml +27 -0
- package/routing/god-docs.yaml +33 -0
- package/routing/god-doctor.yaml +27 -0
- package/routing/god-explore.yaml +27 -0
- package/routing/god-extension-add.yaml +24 -0
- package/routing/god-extension-info.yaml +24 -0
- package/routing/god-extension-list.yaml +24 -0
- package/routing/god-extension-remove.yaml +24 -0
- package/routing/god-extract-learnings.yaml +24 -0
- package/routing/god-fast.yaml +27 -0
- package/routing/god-feature.yaml +34 -0
- package/routing/god-graph.yaml +24 -0
- package/routing/god-harden.yaml +41 -0
- package/routing/god-help.yaml +27 -0
- package/routing/god-hotfix.yaml +34 -0
- package/routing/god-hygiene.yaml +28 -0
- package/routing/god-init.yaml +37 -0
- package/routing/god-intel.yaml +24 -0
- package/routing/god-launch.yaml +41 -0
- package/routing/god-lifecycle.yaml +27 -0
- package/routing/god-link.yaml +24 -0
- package/routing/god-lint.yaml +24 -0
- package/routing/god-list-assumptions.yaml +27 -0
- package/routing/god-locate.yaml +24 -0
- package/routing/god-logs.yaml +24 -0
- package/routing/god-map-codebase.yaml +24 -0
- package/routing/god-metrics.yaml +24 -0
- package/routing/god-mode.yaml +31 -0
- package/routing/god-next.yaml +27 -0
- package/routing/god-note.yaml +24 -0
- package/routing/god-observe.yaml +34 -0
- package/routing/god-org-context.yaml +28 -0
- package/routing/god-party.yaml +24 -0
- package/routing/god-pause-work.yaml +27 -0
- package/routing/god-plant-seed.yaml +24 -0
- package/routing/god-postmortem.yaml +34 -0
- package/routing/god-pr-branch.yaml +25 -0
- package/routing/god-prd.yaml +49 -0
- package/routing/god-quick.yaml +28 -0
- package/routing/god-reconcile.yaml +48 -0
- package/routing/god-reconstruct.yaml +36 -0
- package/routing/god-redo.yaml +27 -0
- package/routing/god-refactor.yaml +36 -0
- package/routing/god-repair.yaml +27 -0
- package/routing/god-repo.yaml +35 -0
- package/routing/god-restore.yaml +27 -0
- package/routing/god-resume-work.yaml +27 -0
- package/routing/god-review-changes.yaml +25 -0
- package/routing/god-review.yaml +28 -0
- package/routing/god-roadmap-check.yaml +39 -0
- package/routing/god-roadmap-update.yaml +37 -0
- package/routing/god-roadmap.yaml +42 -0
- package/routing/god-rollback.yaml +27 -0
- package/routing/god-scan.yaml +24 -0
- package/routing/god-set-profile.yaml +24 -0
- package/routing/god-settings.yaml +24 -0
- package/routing/god-skip.yaml +27 -0
- package/routing/god-smite.yaml +29 -0
- package/routing/god-spike.yaml +35 -0
- package/routing/god-sprint.yaml +25 -0
- package/routing/god-stack.yaml +41 -0
- package/routing/god-standards.yaml +24 -0
- package/routing/god-status.yaml +27 -0
- package/routing/god-stories.yaml +24 -0
- package/routing/god-story-build.yaml +25 -0
- package/routing/god-story-close.yaml +25 -0
- package/routing/god-story-verify.yaml +25 -0
- package/routing/god-story.yaml +24 -0
- package/routing/god-suite-init.yaml +24 -0
- package/routing/god-suite-patch.yaml +25 -0
- package/routing/god-suite-release.yaml +25 -0
- package/routing/god-suite-status.yaml +25 -0
- package/routing/god-suite-sync.yaml +25 -0
- package/routing/god-sync.yaml +33 -0
- package/routing/god-tech-debt.yaml +32 -0
- package/routing/god-test-extension.yaml +24 -0
- package/routing/god-test-runtime.yaml +25 -0
- package/routing/god-thread.yaml +24 -0
- package/routing/god-trace.yaml +24 -0
- package/routing/god-undo.yaml +27 -0
- package/routing/god-update-deps.yaml +39 -0
- package/routing/god-upgrade.yaml +33 -0
- package/routing/god-version.yaml +24 -0
- package/routing/god-workstream.yaml +24 -0
- package/routing/god.yaml +24 -0
- package/routing/recipes/add-feature-defer-current-milestone.yaml +21 -0
- package/routing/recipes/add-feature-future-conditional.yaml +21 -0
- package/routing/recipes/add-feature-mid-arc-pause.yaml +33 -0
- package/routing/recipes/add-feature-next-milestone.yaml +23 -0
- package/routing/recipes/add-feature-parallel.yaml +29 -0
- package/routing/recipes/add-feature-prd-update.yaml +21 -0
- package/routing/recipes/add-feature-small.yaml +24 -0
- package/routing/recipes/add-feature-tiny.yaml +24 -0
- package/routing/recipes/bluefield-org-aware.yaml +27 -0
- package/routing/recipes/broken-install.yaml +22 -0
- package/routing/recipes/brownfield-onboarding.yaml +32 -0
- package/routing/recipes/bug-no-urgency.yaml +21 -0
- package/routing/recipes/capture-idea.yaml +22 -0
- package/routing/recipes/capture-todo.yaml +21 -0
- package/routing/recipes/clean-pr.yaml +21 -0
- package/routing/recipes/code-cleanup.yaml +23 -0
- package/routing/recipes/docs-drift.yaml +21 -0
- package/routing/recipes/existing-codebase-onboarding.yaml +32 -0
- package/routing/recipes/extract-learnings.yaml +22 -0
- package/routing/recipes/greenfield-fast.yaml +25 -0
- package/routing/recipes/greenfield-manual.yaml +32 -0
- package/routing/recipes/greenfield-with-ideation.yaml +29 -0
- package/routing/recipes/incident-postmortem.yaml +24 -0
- package/routing/recipes/major-framework-upgrade.yaml +23 -0
- package/routing/recipes/monthly-deps.yaml +22 -0
- package/routing/recipes/multi-repo-suite.yaml +56 -0
- package/routing/recipes/parallel-engineers.yaml +26 -0
- package/routing/recipes/pause-handoff.yaml +21 -0
- package/routing/recipes/production-broken.yaml +26 -0
- package/routing/recipes/rerun-tier.yaml +21 -0
- package/routing/recipes/returning-after-break.yaml +31 -0
- package/routing/recipes/state-drift.yaml +21 -0
- package/routing/recipes/undo-last.yaml +21 -0
- package/routing/recipes/weekly-health-check.yaml +24 -0
- package/routing/recipes/whats-next.yaml +22 -0
- package/routing/recipes/where-am-i.yaml +21 -0
- package/schema/events.v1.json +63 -0
- package/schema/extension-manifest.v1.json +84 -0
- package/schema/intent.v1.yaml.json +116 -0
- package/schema/recipe.v1.json +120 -0
- package/schema/routing.v1.json +163 -0
- package/schema/state.v1.json +146 -0
- package/schema/workflow.v1.json +96 -0
- package/skills/god-add-backlog.md +40 -0
- package/skills/god-add-tests.md +53 -0
- package/skills/god-add-todo.md +32 -0
- package/skills/god-agent-audit.md +87 -0
- package/skills/god-arch.md +81 -0
- package/skills/god-archaeology.md +48 -0
- package/skills/god-audit.md +65 -0
- package/skills/god-budget.md +103 -0
- package/skills/god-build-agent.md +91 -0
- package/skills/god-build.md +90 -0
- package/skills/god-cache-clear.md +75 -0
- package/skills/god-check-todos.md +42 -0
- package/skills/god-context-scan.md +125 -0
- package/skills/god-context.md +147 -0
- package/skills/god-cost.md +118 -0
- package/skills/god-debug.md +30 -0
- package/skills/god-deploy.md +76 -0
- package/skills/god-design-impact.md +86 -0
- package/skills/god-design.md +275 -0
- package/skills/god-discuss.md +46 -0
- package/skills/god-docs.md +81 -0
- package/skills/god-doctor.md +94 -0
- package/skills/god-explore.md +50 -0
- package/skills/god-export-otel.md +87 -0
- package/skills/god-extension-add.md +79 -0
- package/skills/god-extension-info.md +75 -0
- package/skills/god-extension-list.md +55 -0
- package/skills/god-extension-remove.md +66 -0
- package/skills/god-extract-learnings.md +60 -0
- package/skills/god-fast.md +47 -0
- package/skills/god-feature.md +114 -0
- package/skills/god-graph.md +56 -0
- package/skills/god-harden.md +106 -0
- package/skills/god-help.md +66 -0
- package/skills/god-hotfix.md +139 -0
- package/skills/god-hygiene.md +104 -0
- package/skills/god-init.md +161 -0
- package/skills/god-intel.md +36 -0
- package/skills/god-launch.md +86 -0
- package/skills/god-lifecycle.md +119 -0
- package/skills/god-link.md +90 -0
- package/skills/god-lint.md +128 -0
- package/skills/god-list-assumptions.md +56 -0
- package/skills/god-locate.md +97 -0
- package/skills/god-logs.md +57 -0
- package/skills/god-map-codebase.md +45 -0
- package/skills/god-metrics.md +51 -0
- package/skills/god-mode.md +159 -0
- package/skills/god-next.md +257 -0
- package/skills/god-note.md +39 -0
- package/skills/god-observe.md +76 -0
- package/skills/god-org-context.md +81 -0
- package/skills/god-party.md +87 -0
- package/skills/god-pause-work.md +64 -0
- package/skills/god-plant-seed.md +59 -0
- package/skills/god-postmortem.md +103 -0
- package/skills/god-pr-branch.md +50 -0
- package/skills/god-prd.md +90 -0
- package/skills/god-quick.md +50 -0
- package/skills/god-reconcile.md +90 -0
- package/skills/god-reconstruct.md +72 -0
- package/skills/god-redo.md +73 -0
- package/skills/god-refactor.md +137 -0
- package/skills/god-repair.md +82 -0
- package/skills/god-repo.md +49 -0
- package/skills/god-restore.md +91 -0
- package/skills/god-resume-work.md +42 -0
- package/skills/god-review-changes.md +93 -0
- package/skills/god-review.md +52 -0
- package/skills/god-roadmap-check.md +66 -0
- package/skills/god-roadmap-update.md +64 -0
- package/skills/god-roadmap.md +77 -0
- package/skills/god-rollback.md +88 -0
- package/skills/god-scan.md +106 -0
- package/skills/god-set-profile.md +58 -0
- package/skills/god-settings.md +44 -0
- package/skills/god-skip.md +78 -0
- package/skills/god-smite.md +86 -0
- package/skills/god-spike.md +120 -0
- package/skills/god-sprint.md +77 -0
- package/skills/god-stack.md +74 -0
- package/skills/god-standards.md +62 -0
- package/skills/god-status.md +99 -0
- package/skills/god-stories.md +60 -0
- package/skills/god-story-build.md +76 -0
- package/skills/god-story-close.md +82 -0
- package/skills/god-story-verify.md +71 -0
- package/skills/god-story.md +55 -0
- package/skills/god-suite-init.md +75 -0
- package/skills/god-suite-patch.md +64 -0
- package/skills/god-suite-release.md +58 -0
- package/skills/god-suite-status.md +63 -0
- package/skills/god-suite-sync.md +49 -0
- package/skills/god-sync.md +102 -0
- package/skills/god-tech-debt.md +56 -0
- package/skills/god-test-extension.md +87 -0
- package/skills/god-test-runtime.md +144 -0
- package/skills/god-thread.md +39 -0
- package/skills/god-trace.md +50 -0
- package/skills/god-undo.md +68 -0
- package/skills/god-update-deps.md +134 -0
- package/skills/god-upgrade.md +139 -0
- package/skills/god-version.md +37 -0
- package/skills/god-workstream.md +61 -0
- package/skills/god.md +207 -0
- package/templates/ARCH.md +99 -0
- package/templates/DEPS-AUDIT.md +66 -0
- package/templates/DESIGN.md +71 -0
- package/templates/DOCS-UPDATE-LOG.md +64 -0
- package/templates/HARDEN-FINDINGS.md +69 -0
- package/templates/MIGRATION.md +86 -0
- package/templates/POSTMORTEM.md +88 -0
- package/templates/PRD.md +80 -0
- package/templates/PROGRESS.md +49 -0
- package/templates/ROADMAP.md +47 -0
- package/templates/SPIKE.md +72 -0
- package/templates/STACK-DECISION.md +61 -0
- package/workflows/audit-only.yaml +22 -0
- package/workflows/bluefield-arc.yaml +87 -0
- package/workflows/brownfield-arc.yaml +44 -0
- package/workflows/deps-audit.yaml +56 -0
- package/workflows/docs-arc.yaml +22 -0
- package/workflows/feature-arc.yaml +59 -0
- package/workflows/full-arc.yaml +84 -0
- package/workflows/hotfix-arc.yaml +59 -0
- package/workflows/hygiene.yaml +43 -0
- package/workflows/migration-arc.yaml +73 -0
- package/workflows/postmortem.yaml +31 -0
- package/workflows/refactor-arc.yaml +59 -0
- package/workflows/spike.yaml +23 -0
package/bin/install.js
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Godpowers Installer
|
|
5
|
+
*
|
|
6
|
+
* Installs Godpowers globally for supported AI coding tools.
|
|
7
|
+
* Usage: npx godpowers [options]
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const fs = require('fs');
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const os = require('os');
|
|
13
|
+
|
|
14
|
+
const VERSION = require('../package.json').version;
|
|
15
|
+
|
|
16
|
+
const BANNER = `
|
|
17
|
+
██████╗ ██████╗ ██████╗
|
|
18
|
+
██╔════╝ ██╔═══██╗██╔══██╗
|
|
19
|
+
██║ ███╗██║ ██║██║ ██║
|
|
20
|
+
██║ ██║██║ ██║██║ ██║
|
|
21
|
+
╚██████╔╝╚██████╔╝██████╔╝
|
|
22
|
+
╚═════╝ ╚═════╝ ╚═════╝
|
|
23
|
+
GODPOWERS v${VERSION}
|
|
24
|
+
Ship fast. Ship right. Ship everything.
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const RUNTIMES = {
|
|
28
|
+
claude: {
|
|
29
|
+
name: 'Claude Code',
|
|
30
|
+
configDir: path.join(os.homedir(), '.claude'),
|
|
31
|
+
skillsDir: 'skills',
|
|
32
|
+
configFile: null,
|
|
33
|
+
},
|
|
34
|
+
codex: {
|
|
35
|
+
name: 'Codex',
|
|
36
|
+
configDir: path.join(os.homedir(), '.codex'),
|
|
37
|
+
skillsDir: 'skills',
|
|
38
|
+
configFile: 'config.toml',
|
|
39
|
+
},
|
|
40
|
+
cursor: {
|
|
41
|
+
name: 'Cursor',
|
|
42
|
+
configDir: path.join(os.homedir(), '.cursor'),
|
|
43
|
+
skillsDir: 'rules',
|
|
44
|
+
configFile: null,
|
|
45
|
+
},
|
|
46
|
+
windsurf: {
|
|
47
|
+
name: 'Windsurf',
|
|
48
|
+
configDir: path.join(os.homedir(), '.windsurf'),
|
|
49
|
+
skillsDir: 'rules',
|
|
50
|
+
configFile: null,
|
|
51
|
+
},
|
|
52
|
+
opencode: {
|
|
53
|
+
name: 'OpenCode',
|
|
54
|
+
configDir: path.join(os.homedir(), '.opencode'),
|
|
55
|
+
skillsDir: 'skills',
|
|
56
|
+
configFile: null,
|
|
57
|
+
},
|
|
58
|
+
gemini: {
|
|
59
|
+
name: 'Gemini CLI',
|
|
60
|
+
configDir: path.join(os.homedir(), '.gemini'),
|
|
61
|
+
skillsDir: 'skills',
|
|
62
|
+
configFile: null,
|
|
63
|
+
},
|
|
64
|
+
copilot: {
|
|
65
|
+
name: 'GitHub Copilot',
|
|
66
|
+
configDir: path.join(os.homedir(), '.copilot'),
|
|
67
|
+
skillsDir: 'skills',
|
|
68
|
+
configFile: null,
|
|
69
|
+
},
|
|
70
|
+
augment: {
|
|
71
|
+
name: 'Augment',
|
|
72
|
+
configDir: path.join(os.homedir(), '.augment'),
|
|
73
|
+
skillsDir: 'skills',
|
|
74
|
+
configFile: null,
|
|
75
|
+
},
|
|
76
|
+
trae: {
|
|
77
|
+
name: 'Trae',
|
|
78
|
+
configDir: path.join(os.homedir(), '.trae'),
|
|
79
|
+
skillsDir: 'skills',
|
|
80
|
+
configFile: null,
|
|
81
|
+
},
|
|
82
|
+
cline: {
|
|
83
|
+
name: 'Cline',
|
|
84
|
+
configDir: path.join(os.homedir(), '.cline'),
|
|
85
|
+
skillsDir: 'skills',
|
|
86
|
+
configFile: null,
|
|
87
|
+
},
|
|
88
|
+
kilo: {
|
|
89
|
+
name: 'Kilo',
|
|
90
|
+
configDir: path.join(os.homedir(), '.kilo'),
|
|
91
|
+
skillsDir: 'skills',
|
|
92
|
+
configFile: null,
|
|
93
|
+
},
|
|
94
|
+
antigravity: {
|
|
95
|
+
name: 'Antigravity',
|
|
96
|
+
configDir: path.join(os.homedir(), '.antigravity'),
|
|
97
|
+
skillsDir: 'skills',
|
|
98
|
+
configFile: null,
|
|
99
|
+
},
|
|
100
|
+
qwen: {
|
|
101
|
+
name: 'Qwen Code',
|
|
102
|
+
configDir: path.join(os.homedir(), '.qwen'),
|
|
103
|
+
skillsDir: 'skills',
|
|
104
|
+
configFile: null,
|
|
105
|
+
},
|
|
106
|
+
codebuddy: {
|
|
107
|
+
name: 'CodeBuddy',
|
|
108
|
+
configDir: path.join(os.homedir(), '.codebuddy'),
|
|
109
|
+
skillsDir: 'skills',
|
|
110
|
+
configFile: null,
|
|
111
|
+
},
|
|
112
|
+
pi: {
|
|
113
|
+
name: 'Pi',
|
|
114
|
+
configDir: path.join(os.homedir(), '.pi'),
|
|
115
|
+
skillsDir: 'skills',
|
|
116
|
+
configFile: null,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Helpers
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
|
|
124
|
+
function log(msg) {
|
|
125
|
+
console.log(` ${msg}`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function success(msg) {
|
|
129
|
+
console.log(` \x1b[32m+\x1b[0m ${msg}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function warn(msg) {
|
|
133
|
+
console.log(` \x1b[33m!\x1b[0m ${msg}`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function error(msg) {
|
|
137
|
+
console.error(` \x1b[31mx\x1b[0m ${msg}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function ensureDir(dir) {
|
|
141
|
+
if (!fs.existsSync(dir)) {
|
|
142
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function copyRecursive(src, dest) {
|
|
147
|
+
ensureDir(dest);
|
|
148
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
149
|
+
for (const entry of entries) {
|
|
150
|
+
const srcPath = path.join(src, entry.name);
|
|
151
|
+
const destPath = path.join(dest, entry.name);
|
|
152
|
+
if (entry.isDirectory()) {
|
|
153
|
+
copyRecursive(srcPath, destPath);
|
|
154
|
+
} else {
|
|
155
|
+
fs.copyFileSync(srcPath, destPath);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Parse args
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
|
|
164
|
+
function parseArgs(argv) {
|
|
165
|
+
const args = argv.slice(2);
|
|
166
|
+
const opts = {
|
|
167
|
+
runtimes: [],
|
|
168
|
+
global: false,
|
|
169
|
+
local: false,
|
|
170
|
+
all: false,
|
|
171
|
+
help: false,
|
|
172
|
+
uninstall: false,
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
for (const arg of args) {
|
|
176
|
+
switch (arg) {
|
|
177
|
+
case '-g':
|
|
178
|
+
case '--global':
|
|
179
|
+
opts.global = true;
|
|
180
|
+
break;
|
|
181
|
+
case '-l':
|
|
182
|
+
case '--local':
|
|
183
|
+
opts.local = true;
|
|
184
|
+
break;
|
|
185
|
+
case '--all':
|
|
186
|
+
opts.all = true;
|
|
187
|
+
break;
|
|
188
|
+
case '-h':
|
|
189
|
+
case '--help':
|
|
190
|
+
opts.help = true;
|
|
191
|
+
break;
|
|
192
|
+
case '-u':
|
|
193
|
+
case '--uninstall':
|
|
194
|
+
opts.uninstall = true;
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
if (arg.startsWith('--') && RUNTIMES[arg.slice(2)]) {
|
|
198
|
+
opts.runtimes.push(arg.slice(2));
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return opts;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
// Install
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
|
|
211
|
+
function installForRuntime(runtimeKey, srcDir) {
|
|
212
|
+
const runtime = RUNTIMES[runtimeKey];
|
|
213
|
+
if (!runtime) {
|
|
214
|
+
error(`Unknown runtime: ${runtimeKey}`);
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
log(`\n Installing for \x1b[36m${runtime.name}\x1b[0m to \x1b[36m${runtime.configDir}\x1b[0m\n`);
|
|
219
|
+
|
|
220
|
+
ensureDir(runtime.configDir);
|
|
221
|
+
|
|
222
|
+
// 1. Install slash command skills to skills/
|
|
223
|
+
// Each skill in skills/ becomes a slash command (e.g. /god-mode)
|
|
224
|
+
const skillsSrc = path.join(srcDir, 'skills');
|
|
225
|
+
const skillsDest = path.join(runtime.configDir, runtime.skillsDir);
|
|
226
|
+
if (fs.existsSync(skillsSrc)) {
|
|
227
|
+
ensureDir(skillsDest);
|
|
228
|
+
let count = 0;
|
|
229
|
+
for (const file of fs.readdirSync(skillsSrc)) {
|
|
230
|
+
if (file.endsWith('.md')) {
|
|
231
|
+
fs.copyFileSync(path.join(skillsSrc, file), path.join(skillsDest, file));
|
|
232
|
+
count++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
success(`Installed ${count} slash commands to skills/`);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// 2. Install specialist agents to agents/
|
|
239
|
+
// Each agent is spawnable from a skill (e.g., god-pm, god-architect, god-executor)
|
|
240
|
+
const agentsSrc = path.join(srcDir, 'agents');
|
|
241
|
+
const agentsDest = path.join(runtime.configDir, 'agents');
|
|
242
|
+
if (fs.existsSync(agentsSrc)) {
|
|
243
|
+
ensureDir(agentsDest);
|
|
244
|
+
let count = 0;
|
|
245
|
+
for (const file of fs.readdirSync(agentsSrc)) {
|
|
246
|
+
if (file.endsWith('.md')) {
|
|
247
|
+
fs.copyFileSync(path.join(agentsSrc, file), path.join(agentsDest, file));
|
|
248
|
+
count++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
success(`Installed ${count} specialist agents to agents/`);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// 3. Install the master SKILL.md (always-on context)
|
|
255
|
+
const masterSkill = path.join(srcDir, 'SKILL.md');
|
|
256
|
+
if (fs.existsSync(masterSkill)) {
|
|
257
|
+
const masterDest = path.join(skillsDest, 'godpowers.md');
|
|
258
|
+
fs.copyFileSync(masterSkill, masterDest);
|
|
259
|
+
success('Installed master SKILL.md as godpowers.md');
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// 4. Install templates
|
|
263
|
+
const templatesSrc = path.join(srcDir, 'templates');
|
|
264
|
+
if (fs.existsSync(templatesSrc)) {
|
|
265
|
+
const templatesDest = path.join(runtime.configDir, 'godpowers-templates');
|
|
266
|
+
copyRecursive(templatesSrc, templatesDest);
|
|
267
|
+
success('Installed templates/');
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// 4b. Install references (HAVE-NOTS catalog and per-tier antipatterns)
|
|
271
|
+
const referencesSrc = path.join(srcDir, 'references');
|
|
272
|
+
if (fs.existsSync(referencesSrc)) {
|
|
273
|
+
const referencesDest = path.join(runtime.configDir, 'godpowers-references');
|
|
274
|
+
copyRecursive(referencesSrc, referencesDest);
|
|
275
|
+
success('Installed references/');
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// 4c. Install workflows (declarative YAML for /god-mode and friends)
|
|
279
|
+
const workflowsSrc = path.join(srcDir, 'workflows');
|
|
280
|
+
if (fs.existsSync(workflowsSrc)) {
|
|
281
|
+
const workflowsDest = path.join(runtime.configDir, 'godpowers-workflows');
|
|
282
|
+
copyRecursive(workflowsSrc, workflowsDest);
|
|
283
|
+
success('Installed workflows/');
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// 4d. Install schemas (for validation)
|
|
287
|
+
const schemaSrc = path.join(srcDir, 'schema');
|
|
288
|
+
if (fs.existsSync(schemaSrc)) {
|
|
289
|
+
const schemaDest = path.join(runtime.configDir, 'godpowers-schema');
|
|
290
|
+
copyRecursive(schemaSrc, schemaDest);
|
|
291
|
+
success('Installed schema/');
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// 4e. Install routing definitions (per-command prerequisites + next-suggestions)
|
|
295
|
+
const routingSrc = path.join(srcDir, 'routing');
|
|
296
|
+
if (fs.existsSync(routingSrc)) {
|
|
297
|
+
const routingDest = path.join(runtime.configDir, 'godpowers-routing');
|
|
298
|
+
copyRecursive(routingSrc, routingDest);
|
|
299
|
+
success('Installed routing/');
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// 5. Install hooks (Claude Code only for now)
|
|
303
|
+
if (runtimeKey === 'claude') {
|
|
304
|
+
const hooksSrc = path.join(srcDir, 'hooks');
|
|
305
|
+
const hooksDest = path.join(runtime.configDir, 'hooks');
|
|
306
|
+
if (fs.existsSync(hooksSrc)) {
|
|
307
|
+
ensureDir(hooksDest);
|
|
308
|
+
for (const file of fs.readdirSync(hooksSrc)) {
|
|
309
|
+
const src = path.join(hooksSrc, file);
|
|
310
|
+
const dest = path.join(hooksDest, file);
|
|
311
|
+
fs.copyFileSync(src, dest);
|
|
312
|
+
try { fs.chmodSync(dest, 0o755); } catch (e) {}
|
|
313
|
+
}
|
|
314
|
+
success('Installed hooks/');
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// 6. Write VERSION
|
|
319
|
+
fs.writeFileSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'), VERSION);
|
|
320
|
+
success(`Wrote GODPOWERS_VERSION (${VERSION})`);
|
|
321
|
+
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// ---------------------------------------------------------------------------
|
|
326
|
+
// Uninstall
|
|
327
|
+
// ---------------------------------------------------------------------------
|
|
328
|
+
|
|
329
|
+
function uninstallForRuntime(runtimeKey) {
|
|
330
|
+
const runtime = RUNTIMES[runtimeKey];
|
|
331
|
+
if (!runtime) {
|
|
332
|
+
error(`Unknown runtime: ${runtimeKey}`);
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
log(`\n Uninstalling from \x1b[36m${runtime.name}\x1b[0m at \x1b[36m${runtime.configDir}\x1b[0m\n`);
|
|
337
|
+
|
|
338
|
+
const skillsDir = path.join(runtime.configDir, runtime.skillsDir);
|
|
339
|
+
const agentsDir = path.join(runtime.configDir, 'agents');
|
|
340
|
+
const templatesDir = path.join(runtime.configDir, 'godpowers-templates');
|
|
341
|
+
const referencesDir = path.join(runtime.configDir, 'godpowers-references');
|
|
342
|
+
const versionFile = path.join(runtime.configDir, 'GODPOWERS_VERSION');
|
|
343
|
+
|
|
344
|
+
let removed = 0;
|
|
345
|
+
|
|
346
|
+
// Remove all god-* skills
|
|
347
|
+
if (fs.existsSync(skillsDir)) {
|
|
348
|
+
for (const file of fs.readdirSync(skillsDir)) {
|
|
349
|
+
if (file.startsWith('god-') || file === 'godpowers.md') {
|
|
350
|
+
fs.unlinkSync(path.join(skillsDir, file));
|
|
351
|
+
removed++;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
success(`Removed ${removed} god-* skill(s)`);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Remove all god-* agents
|
|
358
|
+
let agentsRemoved = 0;
|
|
359
|
+
if (fs.existsSync(agentsDir)) {
|
|
360
|
+
for (const file of fs.readdirSync(agentsDir)) {
|
|
361
|
+
if (file.startsWith('god-')) {
|
|
362
|
+
fs.unlinkSync(path.join(agentsDir, file));
|
|
363
|
+
agentsRemoved++;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
success(`Removed ${agentsRemoved} god-* agent(s)`);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Remove templates and references directories
|
|
370
|
+
if (fs.existsSync(templatesDir)) {
|
|
371
|
+
fs.rmSync(templatesDir, { recursive: true, force: true });
|
|
372
|
+
success('Removed godpowers-templates/');
|
|
373
|
+
}
|
|
374
|
+
if (fs.existsSync(referencesDir)) {
|
|
375
|
+
fs.rmSync(referencesDir, { recursive: true, force: true });
|
|
376
|
+
success('Removed godpowers-references/');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Remove hooks (Claude Code only)
|
|
380
|
+
if (runtimeKey === 'claude') {
|
|
381
|
+
const hooksDir = path.join(runtime.configDir, 'hooks');
|
|
382
|
+
for (const hook of ['session-start.sh', 'pre-tool-use.sh']) {
|
|
383
|
+
const hookPath = path.join(hooksDir, hook);
|
|
384
|
+
if (fs.existsSync(hookPath)) {
|
|
385
|
+
fs.unlinkSync(hookPath);
|
|
386
|
+
success(`Removed hooks/${hook}`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (fs.existsSync(versionFile)) {
|
|
392
|
+
fs.unlinkSync(versionFile);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function showHelp() {
|
|
399
|
+
console.log(BANNER);
|
|
400
|
+
log('Usage: npx godpowers [options]\n');
|
|
401
|
+
log('Options:');
|
|
402
|
+
log(' -g, --global Install globally (to config directory)');
|
|
403
|
+
log(' -l, --local Install locally (to current directory)');
|
|
404
|
+
log(' --claude Install for Claude Code');
|
|
405
|
+
log(' --codex Install for Codex');
|
|
406
|
+
log(' --cursor Install for Cursor');
|
|
407
|
+
log(' --windsurf Install for Windsurf');
|
|
408
|
+
log(' --opencode Install for OpenCode');
|
|
409
|
+
log(' --gemini Install for Gemini CLI');
|
|
410
|
+
log(' --copilot Install for GitHub Copilot');
|
|
411
|
+
log(' --augment Install for Augment');
|
|
412
|
+
log(' --trae Install for Trae');
|
|
413
|
+
log(' --cline Install for Cline');
|
|
414
|
+
log(' --kilo Install for Kilo');
|
|
415
|
+
log(' --antigravity Install for Antigravity');
|
|
416
|
+
log(' --qwen Install for Qwen Code');
|
|
417
|
+
log(' --codebuddy Install for CodeBuddy');
|
|
418
|
+
log(' --pi Install for Pi');
|
|
419
|
+
log(' --all Install for all 15 runtimes');
|
|
420
|
+
log(' -u, --uninstall Uninstall Godpowers');
|
|
421
|
+
log(' -h, --help Show this help message');
|
|
422
|
+
log('');
|
|
423
|
+
log('Examples:');
|
|
424
|
+
log(' npx godpowers --claude --global');
|
|
425
|
+
log(' npx godpowers --all');
|
|
426
|
+
log(' npx godpowers --codex --cursor');
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// ---------------------------------------------------------------------------
|
|
430
|
+
// Main
|
|
431
|
+
// ---------------------------------------------------------------------------
|
|
432
|
+
|
|
433
|
+
function main() {
|
|
434
|
+
const opts = parseArgs(process.argv);
|
|
435
|
+
|
|
436
|
+
if (opts.help) {
|
|
437
|
+
showHelp();
|
|
438
|
+
process.exit(0);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
console.log(BANNER);
|
|
442
|
+
|
|
443
|
+
const srcDir = path.resolve(__dirname, '..');
|
|
444
|
+
|
|
445
|
+
// Detect non-interactive and default to claude global
|
|
446
|
+
if (opts.runtimes.length === 0 && !opts.all) {
|
|
447
|
+
if (!process.stdin.isTTY) {
|
|
448
|
+
warn('Non-interactive terminal detected, defaulting to Claude Code global install');
|
|
449
|
+
opts.runtimes = ['claude'];
|
|
450
|
+
opts.global = true;
|
|
451
|
+
} else {
|
|
452
|
+
// Interactive mode: default to claude
|
|
453
|
+
opts.runtimes = ['claude'];
|
|
454
|
+
opts.global = true;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (opts.all) {
|
|
459
|
+
opts.runtimes = Object.keys(RUNTIMES);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// Handle uninstall
|
|
463
|
+
if (opts.uninstall) {
|
|
464
|
+
let removed = 0;
|
|
465
|
+
for (const runtime of opts.runtimes) {
|
|
466
|
+
if (uninstallForRuntime(runtime)) {
|
|
467
|
+
removed++;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
log('');
|
|
471
|
+
if (removed > 0) {
|
|
472
|
+
log(`\x1b[32mUninstalled\x1b[0m from ${removed} runtime(s).`);
|
|
473
|
+
} else {
|
|
474
|
+
warn('No runtimes uninstalled.');
|
|
475
|
+
}
|
|
476
|
+
log('');
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
let installed = 0;
|
|
481
|
+
for (const runtime of opts.runtimes) {
|
|
482
|
+
if (installForRuntime(runtime, srcDir)) {
|
|
483
|
+
installed++;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
if (installed > 0) {
|
|
488
|
+
// Count slash commands for verification message
|
|
489
|
+
const skillsCount = fs.readdirSync(path.join(srcDir, 'skills')).filter(f => f.endsWith('.md')).length;
|
|
490
|
+
const agentsCount = fs.readdirSync(path.join(srcDir, 'agents')).filter(f => f.endsWith('.md')).length;
|
|
491
|
+
|
|
492
|
+
log('');
|
|
493
|
+
log(`\x1b[32mDone!\x1b[0m Installed Godpowers v${VERSION} for ${installed} runtime(s).`);
|
|
494
|
+
log('');
|
|
495
|
+
log(`\x1b[36mInstalled:\x1b[0m`);
|
|
496
|
+
log(` ${skillsCount} slash commands (try: /god-mode, /god-next, /god-status)`);
|
|
497
|
+
log(` ${agentsCount} specialist agents`);
|
|
498
|
+
log(` Templates and references for artifact discipline`);
|
|
499
|
+
log('');
|
|
500
|
+
log(`\x1b[36mNext steps:\x1b[0m`);
|
|
501
|
+
log(` 1. Open your AI coding tool in any project directory`);
|
|
502
|
+
log(` 2. Type: \x1b[36m/god-mode\x1b[0m for full autonomous arc`);
|
|
503
|
+
log(` Or: \x1b[36m/god-next\x1b[0m to see what to run next`);
|
|
504
|
+
log(` Or: \x1b[36m/god-init\x1b[0m to start a new project`);
|
|
505
|
+
log('');
|
|
506
|
+
log(`\x1b[36mDocs:\x1b[0m https://github.com/godpowers/godpowers`);
|
|
507
|
+
log('');
|
|
508
|
+
} else {
|
|
509
|
+
error('No runtimes installed. Run with --help for usage.');
|
|
510
|
+
process.exit(1);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
main();
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# @godpowers/data-pack
|
|
2
|
+
|
|
3
|
+
Data engineering specialists for Godpowers.
|
|
4
|
+
|
|
5
|
+
## What it adds
|
|
6
|
+
|
|
7
|
+
| Slash command | Agent | What it knows |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `/god-etl` | god-etl-engineer | Idempotent transforms, dead-letter, backfill, lag SLOs |
|
|
10
|
+
| `/god-ml-feature` | god-ml-feature-engineer | Training-serving consistency, freshness, drift |
|
|
11
|
+
| `/god-dashboard` | god-dashboard-builder | Question-per-chart, action-per-question, deploy annotations |
|
|
12
|
+
|
|
13
|
+
Plus 3 workflows and 18 data-specific have-nots.
|
|
14
|
+
|
|
15
|
+
## When to use
|
|
16
|
+
|
|
17
|
+
- Building data infrastructure (warehouses, lakes, feature stores)
|
|
18
|
+
- Adding ML to a product (use /god-ml-feature before /god-build for the model)
|
|
19
|
+
- Standing up internal dashboards (refuses vanity-metric dashboards)
|
|
20
|
+
|
|
21
|
+
## Install (v0.8+)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/god-extension-add @godpowers/data-pack
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Status
|
|
28
|
+
|
|
29
|
+
Scaffold ready in v0.4. Full implementation in v0.8.
|
|
30
|
+
|
|
31
|
+
## License
|
|
32
|
+
|
|
33
|
+
MIT
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: god-dashboard-builder
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: |
|
|
5
|
+
Dashboard builder. Every chart tied to a question. Every question tied to
|
|
6
|
+
an action. Refuses vanity metrics and dashboards that just exist.
|
|
7
|
+
|
|
8
|
+
Spawned by: /god-dashboard
|
|
9
|
+
Extension: @godpowers/data-pack
|
|
10
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# God Dashboard Builder
|
|
14
|
+
|
|
15
|
+
Build dashboards people actually use.
|
|
16
|
+
|
|
17
|
+
## Process
|
|
18
|
+
|
|
19
|
+
### 1. Audience
|
|
20
|
+
- Who looks at this dashboard?
|
|
21
|
+
- How often?
|
|
22
|
+
- What action will they take based on what they see?
|
|
23
|
+
|
|
24
|
+
If the answer is "no specific action", the dashboard is vanity. Don't build it.
|
|
25
|
+
|
|
26
|
+
### 2. Question per chart
|
|
27
|
+
Every chart answers ONE question:
|
|
28
|
+
- "Are we hitting the SLO?" -> error rate over time
|
|
29
|
+
- "Where are users dropping off?" -> funnel chart
|
|
30
|
+
- "Is revenue growing?" -> MRR over time
|
|
31
|
+
|
|
32
|
+
If a chart doesn't answer a question, delete it.
|
|
33
|
+
|
|
34
|
+
### 3. Annotation
|
|
35
|
+
- Every chart has a title that states the question
|
|
36
|
+
- Every chart has a target line or threshold (where applicable)
|
|
37
|
+
- Deploys annotated on the chart (so you can see deploy-related changes)
|
|
38
|
+
|
|
39
|
+
### 4. Refresh and freshness
|
|
40
|
+
- Documented update frequency
|
|
41
|
+
- Stale data indicator (if data is older than expected, show it)
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
Write `.godpowers/data/dashboards/<dashboard-name>/SPEC.md`.
|
|
46
|
+
|
|
47
|
+
## Have-Nots
|
|
48
|
+
|
|
49
|
+
#### DASH-01 Vanity metric
|
|
50
|
+
Chart shows a metric with no associated action. Fail.
|
|
51
|
+
|
|
52
|
+
#### DASH-02 No question per chart
|
|
53
|
+
Chart title is just a metric name, not a question. Fail.
|
|
54
|
+
|
|
55
|
+
#### DASH-03 No threshold
|
|
56
|
+
Chart shows a metric with a target but no visible threshold line. Fail.
|
|
57
|
+
|
|
58
|
+
#### DASH-04 No deploy annotations
|
|
59
|
+
Production dashboards without deploy markers. Hard to correlate changes
|
|
60
|
+
with code. Fail.
|
|
61
|
+
|
|
62
|
+
#### DASH-05 No staleness indicator
|
|
63
|
+
Stale data displayed as fresh. Misleading. Fail.
|
|
64
|
+
|
|
65
|
+
#### DASH-06 Dashboard sprawl
|
|
66
|
+
More than 7 charts on one dashboard. Cognitive overload. Fail.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: god-etl-engineer
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: |
|
|
5
|
+
ETL pipeline engineer. Designs idempotent, observable, recoverable
|
|
6
|
+
data pipelines. Refuses non-idempotent transforms and silent failures.
|
|
7
|
+
|
|
8
|
+
Spawned by: /god-etl
|
|
9
|
+
Extension: @godpowers/data-pack
|
|
10
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# God ETL Engineer
|
|
14
|
+
|
|
15
|
+
Build ETL pipelines that don't lie about success.
|
|
16
|
+
|
|
17
|
+
## Process
|
|
18
|
+
|
|
19
|
+
### 1. Source contract
|
|
20
|
+
- What system are we extracting from?
|
|
21
|
+
- What's the rate of change? Append-only or mutable?
|
|
22
|
+
- What's the SLA on the source (uptime, latency)?
|
|
23
|
+
|
|
24
|
+
### 2. Transform contract
|
|
25
|
+
- Idempotent (same input -> same output, every time)
|
|
26
|
+
- Deterministic (no wall-clock dependencies in business logic)
|
|
27
|
+
- Versioned (schema changes are explicit)
|
|
28
|
+
- Observable (every transform emits metrics: rows in, rows out, rows dropped)
|
|
29
|
+
|
|
30
|
+
### 3. Load contract
|
|
31
|
+
- Atomic (all-or-nothing per batch)
|
|
32
|
+
- Resumable (re-running a failed job doesn't double-write)
|
|
33
|
+
- Reversible (can roll back a bad batch)
|
|
34
|
+
|
|
35
|
+
### 4. Operational
|
|
36
|
+
- Retry with exponential backoff
|
|
37
|
+
- Dead-letter queue for poison records
|
|
38
|
+
- Backfill capability (re-run for historical date ranges)
|
|
39
|
+
- Lag SLO and alerting
|
|
40
|
+
|
|
41
|
+
## Output
|
|
42
|
+
|
|
43
|
+
Write `.godpowers/data/etl/<pipeline-name>/PIPELINE.md` with the contract
|
|
44
|
+
and operational runbook.
|
|
45
|
+
|
|
46
|
+
## Have-Nots
|
|
47
|
+
|
|
48
|
+
#### ETL-01 Non-idempotent transform
|
|
49
|
+
Re-running produces different output. Fail.
|
|
50
|
+
|
|
51
|
+
#### ETL-02 No dead-letter
|
|
52
|
+
Bad records crash the pipeline instead of being quarantined. Fail.
|
|
53
|
+
|
|
54
|
+
#### ETL-03 No backfill capability
|
|
55
|
+
Cannot re-run for a historical date range. Fail.
|
|
56
|
+
|
|
57
|
+
#### ETL-04 Wall-clock dependency
|
|
58
|
+
Transform uses `now()` mid-pipeline, making backfills wrong. Fail.
|
|
59
|
+
|
|
60
|
+
#### ETL-05 No lag SLO
|
|
61
|
+
Pipeline running but no SLO on freshness. Stale data shipped silently. Fail.
|
|
62
|
+
|
|
63
|
+
#### ETL-06 No row-count metrics
|
|
64
|
+
Pipeline emits no metrics on rows processed/dropped. Silent failure mode. Fail.
|