@daniellins/power-claude 0.16.3
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.
Potentially problematic release.
This version of @daniellins/power-claude might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/README.md +121 -0
- package/bin/cli.js +124 -0
- package/installer/__tests__/doctor-ready-oracles.test.cjs +140 -0
- package/installer/__tests__/merge-settings.test.cjs +330 -0
- package/installer/adopt.js +161 -0
- package/installer/copy.js +203 -0
- package/installer/doctor.js +266 -0
- package/installer/install.js +155 -0
- package/installer/manifest.js +102 -0
- package/installer/motor-scripts.js +50 -0
- package/installer/motor-scripts.json +39 -0
- package/installer/uninstall.js +99 -0
- package/installer/update.js +376 -0
- package/installer/util.js +113 -0
- package/installer/wizard.js +64 -0
- package/package.json +26 -0
- package/scripts/__fixtures__/anti-path-demo/agents/ap-writer.md +13 -0
- package/scripts/__fixtures__/anti-path-demo/templates/write-tmpl.md +7 -0
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.smoke.json +10 -0
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.yaml +25 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/agents/content-chief.md +1 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/workflows/wf-criacao-redteam.yaml +3 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod-spec.json +13 -0
- package/scripts/__fixtures__/fidelity/fake-green-average-in-band.yaml +21 -0
- package/scripts/__fixtures__/fidelity/fake-green-average.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-denominator.yaml +19 -0
- package/scripts/__fixtures__/fidelity/fake-green-missing-evidence.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-threshold.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-weight.yaml +18 -0
- package/scripts/__fixtures__/fidelity/golden.yaml +31 -0
- package/scripts/__fixtures__/fidelity/trindade-incoherent.yaml +15 -0
- package/scripts/__fixtures__/forge-canonical/pod-spec-example.json +37 -0
- package/scripts/__fixtures__/migrate-squad/authored/agents/offer-engineer.md +17 -0
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/no-source.md +7 -0
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/value-stack-method.md +8 -0
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.smoke.json +24 -0
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.spec.json +45 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/HEADLINE.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/README.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/agents/hormozi-offer.md +14 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/dead-redundant.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/method-guide.md +6 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/veto-screen.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/config/config.yaml +2 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/data/case-library.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/scripts/validate-mvn.py +16 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/sops/sop-sample.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/squad-io.yaml +14 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/tasks/gather-context.md +7 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/templates/output-tmpl.md +5 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/workflows/wf-sample.yaml +24 -0
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-checkpoint.yaml +21 -0
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-demo.yaml +22 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/agents/maker.md +13 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.consolidated.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.jsonl +83 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/templates/make-tmpl.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/workflows/wf-a.yaml +16 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/agents/user.md +13 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.consolidated.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.jsonl +14 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/templates/use-tmpl.md +6 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/workflows/wf-b.yaml +16 -0
- package/scripts/__fixtures__/pod-run/agents/forge-chief.md +13 -0
- package/scripts/__fixtures__/pod-run/agents/pod-critic.md +13 -0
- package/scripts/__fixtures__/pod-run/templates/build-tmpl.md +8 -0
- package/scripts/__fixtures__/pod-run/templates/gate-tmpl.md +6 -0
- package/scripts/__fixtures__/pod-run/workflows/wf-min.yaml +43 -0
- package/scripts/__fixtures__/pod-run/workflows/wf-skip-modes.yaml +50 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-all-skippable.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-criteria-escalar-de-bloco.yaml +40 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-skip-mode-desconhecido.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-unknown-key.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-cycle.yaml +26 -0
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-backedge.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-forward.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-handoff-open.yaml +27 -0
- package/scripts/__fixtures__/pod-workflow/invalid-knowledge-shape.yaml +18 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-agent.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-outputs.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-template.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-veto.yaml +13 -0
- package/scripts/__fixtures__/pod-workflow/invalid-template-not-on-disk.yaml +16 -0
- package/scripts/__fixtures__/pod-workflow/invalid-veto-prose.yaml +17 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/a.md +4 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/b.md +4 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/c.md +4 -0
- package/scripts/__fixtures__/pod-workflow/templates/step-tmpl.md +7 -0
- package/scripts/__fixtures__/pod-workflow/valid-checkpoint-skip-modes.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/valid-fix-loop.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/valid-knowledge.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/valid-veto-always-true.yaml +20 -0
- package/scripts/__fixtures__/pod-workflow/valid.yaml +27 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-reporter.md +13 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-researcher.md +13 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-synth.md +13 -0
- package/scripts/__fixtures__/smoke-canary/memory/learnings.consolidated.md +10 -0
- package/scripts/__fixtures__/smoke-canary/memory/learnings.jsonl +448 -0
- package/scripts/__fixtures__/smoke-canary/templates/report-tmpl.md +9 -0
- package/scripts/__fixtures__/smoke-canary/templates/research-tmpl.md +7 -0
- package/scripts/__fixtures__/smoke-canary/templates/synth-tmpl.md +9 -0
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.smoke.json +11 -0
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml +53 -0
- package/scripts/__fixtures__/source-audit/fake-green-bronze-unsignaled.yaml +10 -0
- package/scripts/__fixtures__/source-audit/fake-green-counts.yaml +9 -0
- package/scripts/__fixtures__/source-audit/fake-green-missing-evidence.yaml +9 -0
- package/scripts/__fixtures__/source-audit/fake-green-unclassified.yaml +10 -0
- package/scripts/__fixtures__/source-audit/fake-green-verdict.yaml +10 -0
- package/scripts/__fixtures__/source-audit/golden-blocked.yaml +10 -0
- package/scripts/__fixtures__/source-audit/golden.yaml +11 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-count.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-field.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-fileref.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-json.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-section.md +13 -0
- package/scripts/__fixtures__/sweep-forms/specs/wf-forms.spec.json +5 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_count.md +5 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_field.md +3 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_fileref.md +3 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_json.md +0 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_section.md +3 -0
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.smoke.json +13 -0
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.yaml +67 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-1-noop-state-json.fixture.md +18 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-2-crash-buildworkflowyaml.fixture.md +26 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-3-nasce-verde-skip-modes.fixture.md +29 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-4-guarda-sem-irmao.fixture.md +17 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5a-diff-stat-sem-guarda.fixture.md +17 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5b-test-f-sobre-diretorio.fixture.md +20 -0
- package/scripts/__fixtures__/veto-checks/copy-clean.md +4 -0
- package/scripts/__fixtures__/veto-checks/copy-dashes.md +4 -0
- package/scripts/__fixtures__/veto-checks/n8n-bad.md +18 -0
- package/scripts/__fixtures__/veto-checks/n8n-ok.md +22 -0
- package/scripts/__fixtures__/veto-checks/page-bad.html +7 -0
- package/scripts/__fixtures__/veto-checks/phash/copy.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct2.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/make-fixtures.cjs +203 -0
- package/scripts/__fixtures__/veto-checks/phash/ref.png +0 -0
- package/scripts/__fixtures__/veto-checks/slide-ok.html +15 -0
- package/scripts/__fixtures__/veto-checks/slide-overflow.html +14 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/agents/vc-checker.md +13 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/templates/check-tmpl.md +6 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.smoke.json +10 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.yaml +19 -0
- package/scripts/__fixtures__/voz-do-dono/README.md +23 -0
- package/scripts/__fixtures__/voz-do-dono/dono-escalar.yaml +9 -0
- package/scripts/__fixtures__/voz-do-dono/dono-guia.yaml +10 -0
- package/scripts/__fixtures__/voz-do-dono/peca-3a-pessoa.md +6 -0
- package/scripts/__fixtures__/voz-do-dono/peca-com-lexico-proibido.md +6 -0
- package/scripts/__fixtures__/voz-do-dono/peca-limpa-1a-pessoa.md +6 -0
- package/scripts/__tests__/derive-ready-transitions.test.cjs +269 -0
- package/scripts/__tests__/enforce-cycle-authority.test.cjs +869 -0
- package/scripts/__tests__/enforce-git-push-authority.test.cjs +701 -0
- package/scripts/__tests__/enforce-ready-oracles.test.cjs +745 -0
- package/scripts/__tests__/motor-scripts.test.cjs +339 -0
- package/scripts/__tests__/pc-run-pod-counter.test.cjs +58 -0
- package/scripts/__tests__/pc-run-pod.test.cjs +578 -0
- package/scripts/__tests__/validate-pod-workflow.test.cjs +90 -0
- package/scripts/__tests__/validate-story-acs.test.cjs +607 -0
- package/scripts/anti-path.test.cjs +163 -0
- package/scripts/arena.cjs +514 -0
- package/scripts/arena.test.cjs +213 -0
- package/scripts/brief-leitura-obrigatoria.test.cjs +364 -0
- package/scripts/consolidate-knowledge-runner.test.cjs +249 -0
- package/scripts/default-funcional.test.cjs +153 -0
- package/scripts/derive-ready-transitions.cjs +325 -0
- package/scripts/forge-additive.test.cjs +158 -0
- package/scripts/forge-assess-tier.cjs +205 -0
- package/scripts/forge-assess-tier.test.cjs +114 -0
- package/scripts/forge-canonical.test.cjs +624 -0
- package/scripts/forge-generate.cjs +1303 -0
- package/scripts/forge-harden-learning.cjs +921 -0
- package/scripts/forge-harden-learning.test.cjs +242 -0
- package/scripts/forge-ingest-memory.cjs +136 -0
- package/scripts/forge-upgrade-pod.cjs +368 -0
- package/scripts/forge.test.cjs +609 -0
- package/scripts/harden-knowledge.test.cjs +612 -0
- package/scripts/harness-g5-lite.cjs +243 -0
- package/scripts/harness-g5-lite.test.cjs +134 -0
- package/scripts/hn-carousel-contrato-entrada.test.cjs +96 -0
- package/scripts/migrate-squad-orchestration.test.cjs +146 -0
- package/scripts/migration-manifest-sf3.2.test.cjs +382 -0
- package/scripts/migration-manifest-sf3.3.test.cjs +170 -0
- package/scripts/migration-manifest-sf5.5.test.cjs +189 -0
- package/scripts/migration-manifest.cjs +1146 -0
- package/scripts/migration-manifest.test.cjs +186 -0
- package/scripts/npm-scope-invocation.test.cjs +194 -0
- package/scripts/owner-layer.cjs +442 -0
- package/scripts/owner-layer.test.cjs +358 -0
- package/scripts/pc-run-pipeline.cjs +289 -0
- package/scripts/pc-run-pipeline.test.cjs +256 -0
- package/scripts/pc-run-pod-countgte.test.cjs +66 -0
- package/scripts/pc-run-pod.cjs +1355 -0
- package/scripts/phash-gate.test.cjs +433 -0
- package/scripts/pod-export-compile.cjs +487 -0
- package/scripts/pod-export-compile.test.cjs +312 -0
- package/scripts/pod-export-executor.cjs +678 -0
- package/scripts/pod-export-executor.test.cjs +1341 -0
- package/scripts/pod-export-hardening.test.cjs +531 -0
- package/scripts/pod-export-postprocess.cjs +427 -0
- package/scripts/pod-export-postprocess.test.cjs +558 -0
- package/scripts/pod-export-queue-race.test.cjs +865 -0
- package/scripts/pod-export-release.cjs +473 -0
- package/scripts/pod-export-release.test.cjs +267 -0
- package/scripts/pod-export-service.cjs +1297 -0
- package/scripts/pod-export-service.test.cjs +489 -0
- package/scripts/pod-export-tools.cjs +470 -0
- package/scripts/pod-export-ui.cjs +805 -0
- package/scripts/pod-export-ui.test.cjs +301 -0
- package/scripts/pod-memory-budget.test.cjs +309 -0
- package/scripts/pod-memory-note.cjs +357 -0
- package/scripts/pod-memory-note.test.cjs +452 -0
- package/scripts/pod-memory.cjs +1252 -0
- package/scripts/pod-memory.test.cjs +951 -0
- package/scripts/render-png.test.cjs +307 -0
- package/scripts/smoke-isolation.test.cjs +100 -0
- package/scripts/smoke-pod-workflow.cjs +755 -0
- package/scripts/smoke-sweep.test.cjs +170 -0
- package/scripts/validate-adopt.js +235 -0
- package/scripts/validate-branding.js +84 -0
- package/scripts/validate-budgets.js +140 -0
- package/scripts/validate-fidelity-output.cjs +267 -0
- package/scripts/validate-fidelity-output.test.cjs +101 -0
- package/scripts/validate-install.js +230 -0
- package/scripts/validate-no-clone.cjs +220 -0
- package/scripts/validate-no-clone.test.cjs +77 -0
- package/scripts/validate-pipeline.cjs +145 -0
- package/scripts/validate-pod-workflow.cjs +878 -0
- package/scripts/validate-source-audit.cjs +170 -0
- package/scripts/validate-source-audit.test.cjs +90 -0
- package/scripts/validate-story-acs.cjs +862 -0
- package/scripts/validate-update-scope-motor.js +421 -0
- package/scripts/veto-checks/html-valid.cjs +92 -0
- package/scripts/veto-checks/lexical-check.cjs +62 -0
- package/scripts/veto-checks/phash-gate.cjs +589 -0
- package/scripts/veto-checks/render-gate.cjs +165 -0
- package/scripts/veto-checks/render-png.cjs +358 -0
- package/scripts/veto-checks.test.cjs +219 -0
- package/scripts/watcher-audit.cjs +178 -0
- package/template/.claude/CLAUDE.md +103 -0
- package/template/.claude/agents/pc-analyst.md +100 -0
- package/template/.claude/agents/pc-architect.md +32 -0
- package/template/.claude/agents/pc-dev.md +27 -0
- package/template/.claude/agents/pc-devops.md +45 -0
- package/template/.claude/agents/pc-planner.md +32 -0
- package/template/.claude/agents/pc-po.md +25 -0
- package/template/.claude/agents/pc-qa.md +25 -0
- package/template/.claude/commands/power/academy.md +9 -0
- package/template/.claude/commands/power/automation.md +9 -0
- package/template/.claude/commands/power/content-carousel.md +267 -0
- package/template/.claude/commands/power/content.md +9 -0
- package/template/.claude/commands/power/dev.md +9 -0
- package/template/.claude/commands/power/forge.md +224 -0
- package/template/.claude/commands/power/hormozi.md +221 -0
- package/template/.claude/commands/power/modo.md +57 -0
- package/template/.claude/hooks/README.md +114 -0
- package/template/.claude/hooks/context-budget.cjs +64 -0
- package/template/.claude/hooks/enforce-cycle-authority.cjs +457 -0
- package/template/.claude/hooks/enforce-git-push-authority.cjs +925 -0
- package/template/.claude/hooks/enforce-ready-oracles.cjs +502 -0
- package/template/.claude/rules/authority.md +76 -0
- package/template/.claude/rules/curadoria-de-conhecimento.md +30 -0
- package/template/.claude/rules/model-matrix.md +34 -0
- package/template/.claude/rules/orchestration.md +133 -0
- package/template/.claude/settings.json +50 -0
- package/template/.claude/skills/pc-apply-qa-fixes/SKILL.md +108 -0
- package/template/.claude/skills/pc-apply-qa-fixes/references/fix-loop.md +40 -0
- package/template/.claude/skills/pc-apply-qa-fixes/references/fix-request-template.md +70 -0
- package/template/.claude/skills/pc-arena/SKILL.md +96 -0
- package/template/.claude/skills/pc-close-story/SKILL.md +105 -0
- package/template/.claude/skills/pc-commit/SKILL.md +108 -0
- package/template/.claude/skills/pc-develop-story/SKILL.md +116 -0
- package/template/.claude/skills/pc-full-cycle/SKILL.md +150 -0
- package/template/.claude/skills/pc-pipeline/SKILL.md +63 -0
- package/template/.claude/skills/pc-pipeline/references/gate-templates.md +46 -0
- package/template/.claude/skills/pc-review-story/SKILL.md +129 -0
- package/template/.claude/skills/pc-review-story/references/false-positive-detection.md +50 -0
- package/template/.claude/skills/pc-review-story/references/nfr-assess.md +47 -0
- package/template/.claude/skills/pc-review-story/references/risk-profile.md +75 -0
- package/template/.claude/skills/pc-review-story/references/security-checklist.md +69 -0
- package/template/.claude/skills/pc-review-story/references/test-design.md +37 -0
- package/template/.claude/skills/pc-review-story/references/trace-requirements.md +46 -0
- package/template/.claude/skills/pc-run-pod/SKILL.md +123 -0
- package/template/.claude/skills/pc-validate-story/SKILL.md +114 -0
- package/template/.claude/skills/pc-wave/SKILL.md +133 -0
- package/template/.env.example +10 -0
- package/template/knowledge/analyst/brainstorming.md +40 -0
- package/template/knowledge/analyst/brief-skeleton.md +32 -0
- package/template/knowledge/analyst/competitor-skeleton.md +39 -0
- package/template/knowledge/analyst/elicitation-menu.md +49 -0
- package/template/knowledge/analyst/market-research-skeleton.md +36 -0
- package/template/knowledge/analyst/research-prompt-structure.md +48 -0
- package/template/knowledge/analyst/roi-skeleton.md +51 -0
- package/template/knowledge/voice-dna/README.md +99 -0
- package/template/knowledge/voice-dna/voice-dna.example.yaml +157 -0
- package/template/pods/README.md +64 -0
- package/template/pods/academy/README.md +37 -0
- package/template/pods/academy/agents/academy-chief.md +27 -0
- package/template/pods/academy/examples/palestra.example.md +142 -0
- package/template/pods/academy/pod-spec.json +44 -0
- package/template/pods/academy/templates/materiais-tmpl.md +17 -0
- package/template/pods/academy/templates/revisao-didatica-tmpl.md +20 -0
- package/template/pods/academy/workflows/wf-materiais-revisao.yaml +30 -0
- package/template/pods/authority-content/README.md +43 -0
- package/template/pods/authority-content/agents/content-chief.md +28 -0
- package/template/pods/authority-content/pod-spec.json +45 -0
- package/template/pods/authority-content/templates/criacao-na-voz-tmpl.md +17 -0
- package/template/pods/authority-content/templates/red-team-factual-tmpl.md +23 -0
- package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +30 -0
- package/template/pods/automation/README.md +37 -0
- package/template/pods/automation/agents/langgraph-architect.md +30 -0
- package/template/pods/automation/agents/n8n-architect.md +30 -0
- package/template/pods/automation/examples/README.md +46 -0
- package/template/pods/automation/examples/n8n-content-radar.example.json +380 -0
- package/template/pods/automation/knowledge/langgraph-patterns.md +126 -0
- package/template/pods/automation/knowledge/n8n-patterns.md +131 -0
- package/template/pods/automation/memory/README.md +16 -0
- package/template/pods/automation/memory/learnings.consolidated.md +8 -0
- package/template/pods/automation/memory/learnings.jsonl +0 -0
- package/template/pods/automation/pod-spec.json +109 -0
- package/template/pods/automation/specs/wf-langgraph-build.spec.json +107 -0
- package/template/pods/automation/squad-io.yaml +28 -0
- package/template/pods/automation/templates/lg-build-tmpl.md +17 -0
- package/template/pods/automation/templates/lg-design-tmpl.md +23 -0
- package/template/pods/automation/templates/lg-discover-tmpl.md +20 -0
- package/template/pods/automation/templates/lg-handoff-tmpl.md +20 -0
- package/template/pods/automation/templates/lg-test-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-build-tmpl.md +14 -0
- package/template/pods/automation/templates/n8n-design-tmpl.md +23 -0
- package/template/pods/automation/templates/n8n-discover-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-handoff-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-test-tmpl.md +20 -0
- package/template/pods/automation/workflows/wf-langgraph-build.smoke.json +11 -0
- package/template/pods/automation/workflows/wf-langgraph-build.yaml +64 -0
- package/template/pods/automation/workflows/wf-n8n-build.smoke.json +11 -0
- package/template/pods/automation/workflows/wf-n8n-build.yaml +65 -0
- package/template/pods/content-carousel/README.md +91 -0
- package/template/pods/content-carousel/agents/carousel-builder.md +28 -0
- package/template/pods/content-carousel/agents/carousel-visual.md +24 -0
- package/template/pods/content-carousel/agents/hn-curator.md +74 -0
- package/template/pods/content-carousel/config/heuristic-watcher-rubric.yaml +59 -0
- package/template/pods/content-carousel/knowledge/aquisicao-ancora.md +443 -0
- package/template/pods/content-carousel/knowledge/cta-brief.md +25 -0
- package/template/pods/content-carousel/knowledge/dono.example.yaml +45 -0
- package/template/pods/content-carousel/knowledge/identidade-visual-mascote.md +62 -0
- package/template/pods/content-carousel/knowledge/image-generation.md +62 -0
- package/template/pods/content-carousel/knowledge/selecao-de-ancora.md +60 -0
- package/template/pods/content-carousel/knowledge/slides-html.md +56 -0
- package/template/pods/content-carousel/memory/README.md +18 -0
- package/template/pods/content-carousel/memory/learnings.consolidated.md +6 -0
- package/template/pods/content-carousel/memory/learnings.jsonl +0 -0
- package/template/pods/content-carousel/pod-spec.json +100 -0
- package/template/pods/content-carousel/squad-io.yaml +10 -0
- package/template/pods/content-carousel/templates/assembly-tmpl.md +23 -0
- package/template/pods/content-carousel/templates/digest-tmpl.md +29 -0
- package/template/pods/content-carousel/templates/visuals-tmpl.md +20 -0
- package/template/pods/content-carousel/workflows/wf-content-carousel.smoke.json +23 -0
- package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +80 -0
- package/template/pods/dev-ia/README.md +45 -0
- package/template/pods/dev-ia/agents/db-architect.md +33 -0
- package/template/pods/dev-ia/agents/ux-architect.md +29 -0
- package/template/pods/dev-ia/knowledge/db/migration-protocol.md +95 -0
- package/template/pods/dev-ia/knowledge/db/rls-patterns.md +101 -0
- package/template/pods/dev-ia/knowledge/db/schema-review-checklist.md +76 -0
- package/template/pods/dev-ia/memory/README.md +16 -0
- package/template/pods/dev-ia/memory/learnings.consolidated.md +8 -0
- package/template/pods/dev-ia/memory/learnings.jsonl +0 -0
- package/template/pods/dev-ia/pod-spec.json +34 -0
- package/template/pods/dev-ia/templates/schema-review-tmpl.md +23 -0
- package/template/pods/dev-ia/templates/ux-flow-review-tmpl.md +23 -0
- package/template/pods/dev-ia/tools/db-ops/backup-manager.sh +321 -0
- package/template/pods/dev-ia/tools/db-ops/best-practices-auditor.sh +534 -0
- package/template/pods/dev-ia/tools/db-ops/bootstrap-runner.sh +255 -0
- package/template/pods/dev-ia/tools/db-ops/data-loader.sh +616 -0
- package/template/pods/dev-ia/tools/db-ops/detect-database.sh +113 -0
- package/template/pods/dev-ia/tools/db-ops/explain-analyzer.sh +285 -0
- package/template/pods/dev-ia/tools/db-ops/health-checker.sh +323 -0
- package/template/pods/dev-ia/tools/db-ops/migration-runner.sh +308 -0
- package/template/pods/dev-ia/tools/db-ops/postgresql-schema-loader.sh +334 -0
- package/template/pods/dev-ia/tools/db-ops/query-runner.sh +171 -0
- package/template/pods/dev-ia/tools/db-ops/rls-policy-installer.sh +480 -0
- package/template/pods/dev-ia/tools/db-ops/rls-test-suite.sh +172 -0
- package/template/pods/dev-ia/tools/db-ops/schema-context-loader.sh +176 -0
- package/template/pods/hormozi-method/README.md +52 -0
- package/template/pods/hormozi-method/agents/acquisition-strategist.md +33 -0
- package/template/pods/hormozi-method/agents/conversion-copywriter.md +34 -0
- package/template/pods/hormozi-method/agents/monetization-architect.md +35 -0
- package/template/pods/hormozi-method/agents/offer-engineer.md +37 -0
- package/template/pods/hormozi-method/knowledge/core-four-leads.md +51 -0
- package/template/pods/hormozi-method/knowledge/grand-slam-offer.md +66 -0
- package/template/pods/hormozi-method/knowledge/growth-decision.md +38 -0
- package/template/pods/hormozi-method/knowledge/hooks-and-ads.md +56 -0
- package/template/pods/hormozi-method/knowledge/launch-email.md +31 -0
- package/template/pods/hormozi-method/knowledge/money-model.md +46 -0
- package/template/pods/hormozi-method/knowledge/opportunity-screening.md +44 -0
- package/template/pods/hormozi-method/knowledge/pages.md +25 -0
- package/template/pods/hormozi-method/knowledge/pos-lancamento-leads.md +56 -0
- package/template/pods/hormozi-method/knowledge/pricing.md +36 -0
- package/template/pods/hormozi-method/knowledge/retention-ltv.md +37 -0
- package/template/pods/hormozi-method/knowledge/scale-roadmap.md +35 -0
- package/template/pods/hormozi-method/knowledge/swipefiles-curados.md +44 -0
- package/template/pods/hormozi-method/knowledge/value-equation-diagnostic.md +77 -0
- package/template/pods/hormozi-method/memory/README.md +16 -0
- package/template/pods/hormozi-method/memory/learnings.consolidated.md +6 -0
- package/template/pods/hormozi-method/memory/learnings.jsonl +0 -0
- package/template/pods/hormozi-method/pod-spec.json +50 -0
- package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +149 -0
- package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +125 -0
- package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +117 -0
- package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +132 -0
- package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +121 -0
- package/template/pods/hormozi-method/squad-io.yaml +43 -0
- package/template/pods/hormozi-method/templates/conversion-copywriter-tmpl.md +20 -0
- package/template/pods/hormozi-method/templates/launch-execucao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-fechamento-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-pos-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-preparacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/lm-copy-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/lm-distribuicao-tmpl.md +18 -0
- package/template/pods/hormozi-method/templates/lm-estrategia-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/mm-arquitetura-tmpl.md +18 -0
- package/template/pods/hormozi-method/templates/mm-copy-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/mm-diagnostico-tmpl.md +14 -0
- package/template/pods/hormozi-method/templates/monetization-architect-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/offer-engineer-tmpl.md +20 -0
- package/template/pods/hormozi-method/templates/paid-criativos-tmpl.md +19 -0
- package/template/pods/hormozi-method/templates/paid-fundacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/paid-teste-escala-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-diagnostico-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-priorizacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-roadmap-tmpl.md +17 -0
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.smoke.json +12 -0
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +56 -0
- package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.smoke.json +9 -0
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-money-model-design.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.smoke.json +9 -0
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +46 -0
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +44 -0
- package/template/pods/squad-forge/README.md +53 -0
- package/template/pods/squad-forge/agents/forge-chief.md +31 -0
- package/template/pods/squad-forge/agents/mind-extractor.md +29 -0
- package/template/pods/squad-forge/agents/pod-critic.md +26 -0
- package/template/pods/squad-forge/config/heuristic-watcher-rubric.yaml +74 -0
- package/template/pods/squad-forge/knowledge/fidelity-rubric.yaml +176 -0
- package/template/pods/squad-forge/knowledge/g6-memory-check.md +17 -0
- package/template/pods/squad-forge/knowledge/memory-ingest.md +16 -0
- package/template/pods/squad-forge/knowledge/source-audit-rubric.yaml +60 -0
- package/template/pods/squad-forge/memory/README.md +16 -0
- package/template/pods/squad-forge/memory/learnings.consolidated.md +8 -0
- package/template/pods/squad-forge/memory/learnings.jsonl +0 -0
- package/template/pods/squad-forge/pod-spec.json +166 -0
- package/template/pods/squad-forge/squad-io.yaml +13 -0
- package/template/pods/squad-forge/tasks/pipeline.md +158 -0
- package/template/pods/squad-forge/templates/discovery-tmpl.md +40 -0
- package/template/pods/squad-forge/templates/generation-tmpl.md +18 -0
- package/template/pods/squad-forge/templates/red-team-tmpl.md +17 -0
- package/template/pods/squad-forge/templates/register-tmpl.md +17 -0
- package/template/pods/squad-forge/templates/workflow-tmpl.yaml +101 -0
- package/template/pods/squad-forge/workflows/wf-forge.smoke.json +12 -0
- package/template/pods/squad-forge/workflows/wf-forge.yaml +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniel Lins
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# POWER CLAUDE
|
|
2
|
+
|
|
3
|
+
Framework enxuto de agentes para Claude Code — **pods por job-to-be-done**, com budget de tokens como gate de qualidade.
|
|
4
|
+
|
|
5
|
+
## Princípios
|
|
6
|
+
|
|
7
|
+
1. **Pods por job-to-be-done** — em vez de dezenas de agentes genéricos, cada pod resolve um trabalho concreto (criar conteúdo com autoridade, montar aulas, automatizar processos, desenvolver com IA, forjar novos pods). Você instala só o que usa.
|
|
8
|
+
2. **Budget de tokens como gate** — todo agente declara `budget_tokens` no frontmatter e um validador determinístico (`scripts/validate-budgets.js`) bloqueia qualquer agente que estoure o próprio budget, o teto global (1.500 tokens) ou 150 linhas. Contexto enxuto não é convenção: é gate.
|
|
9
|
+
3. **Enforcement determinístico** — regras críticas viram hooks e scripts, não pedidos educados no prompt. Exemplo: o hook `enforce-git-push-authority.cjs` bloqueia `git push` fora do fluxo autorizado, direto no `PreToolUse`.
|
|
10
|
+
4. **Verificação adversarial embutida** — os pods incluem agentes críticos (red-team) que revisam o próprio output antes de você confiar nele.
|
|
11
|
+
5. **Garantia por código, não por prosa** — um pod é dado declarativo (`workflows/wf-*.yaml` + templates de etapa + `squad-io.yaml`), executado por um runner determinístico (`scripts/pc-run-pod.cjs`, skill `pc-run-pod`) que verifica o artefato EM DISCO — existe, casa com o template, todas as `veto.assertions` passam — antes de liberar a etapa seguinte. A garantia de processo é código, não prosa no prompt do agente.
|
|
12
|
+
|
|
13
|
+
Documentação operacional de cada mecanismo (uso, não só decisão): `docs/mecanismos/`.
|
|
14
|
+
|
|
15
|
+
## O que mudou na v0.3 (runner, memória evolutiva, migração)
|
|
16
|
+
|
|
17
|
+
**Runner determinístico.** Todo workflow de pod roda por um contrato `wf-*.yaml` validado estaticamente (`scripts/validate-pod-workflow.cjs` — ciclos, handoffs abertos, vetos malformados, templates ausentes) e provado em runtime pelo smoke dinâmico (`scripts/smoke-pod-workflow.cjs`). O runner (`scripts/pc-run-pod.cjs`, skill `pc-run-pod`) despacha um subagente fresco por etapa, aplica checkpoints bloqueantes e retoma por run-id.
|
|
18
|
+
|
|
19
|
+
**Memória evolutiva dos pods.** Um pod aprende do próprio uso, sem virar ruído: log cru append-only + consolidado podado por budget de tokens (`scripts/pod-memory.cjs`), watcher heurístico que audita aderência ao consolidado (`scripts/watcher-audit.cjs`) e ingest inicial de memória com dedupe (`scripts/forge-ingest-memory.cjs`). O runner injeta só o consolidado no brief do agente — nunca o log cru.
|
|
20
|
+
|
|
21
|
+
**`*migrate-squad` — migração squad legado → pod com gates completos.** Comando do `forge-chief` que leva um squad inteiro pelas fases F0 (inventário) → F1 (triagem, para no humano) → F2 (geração + gates por workflow) → F3 (fechamento), com raiz de confiança em código no manifest de migração (`scripts/migration-manifest.cjs`) e paridade decidida pela máquina entre G5-LITE (2 runs) e G5-FULL (5 runs) via `scripts/harness-g5-lite.cjs`.
|
|
22
|
+
|
|
23
|
+
## Instalação
|
|
24
|
+
|
|
25
|
+
Enquanto o pacote não está publicado no npm, instale direto do GitHub:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd seu-projeto
|
|
29
|
+
npx github:daniellins/power-claude install
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Quando publicado no npm:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx @daniellins/power-claude install
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
O instalador pergunta quais pods instalar, se deve inicializar git e registra tudo em `.power-claude/manifest.json`. Em modo não-interativo:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx @daniellins/power-claude install --yes
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
O instalador **nunca sobrescreve** arquivos seus: conflitos são perguntados (interativo) ou preservados (`--yes`). O `.claude/settings.json` recebe merge aditivo em `hooks`/`permissions` (a entrada nova do template é acrescentada sem remover nem alterar o que você já tem); nas demais chaves, suas chaves vencem, as do template entram só onde faltam.
|
|
45
|
+
|
|
46
|
+
## Comandos do CLI
|
|
47
|
+
|
|
48
|
+
| Comando | O que faz |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `power-claude install` | Instala o framework no diretório atual (default) |
|
|
51
|
+
| `power-claude adopt` | Adota uma instalação montada à mão (sem manifest): classifica o disco contra o template (idêntico / modificado / ausente), gera o `.power-claude/manifest.json` sem sobrescrever nada e coloca a instalação ao alcance do `update` |
|
|
52
|
+
| `power-claude update` | Atualiza; arquivos que você modificou são preservados (com diff resumido no modo interativo) |
|
|
53
|
+
| `power-claude doctor` | Diagnóstico: integridade do manifest, hooks, `.gitignore`, gate de budgets, tamanho do CLAUDE.md |
|
|
54
|
+
| `power-claude uninstall` | Remove apenas o que o instalador colocou e continua intacto; o que você modificou fica |
|
|
55
|
+
| `power-claude --help` / `--version` | Ajuda / versão |
|
|
56
|
+
|
|
57
|
+
Flag global: `--yes` (`-y`) para modo não-interativo.
|
|
58
|
+
|
|
59
|
+
## Estrutura instalada
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
seu-projeto/
|
|
63
|
+
├── .claude/
|
|
64
|
+
│ ├── CLAUDE.md # instruções enxutas (budget ~2.000 tokens)
|
|
65
|
+
│ ├── settings.json # hooks + permissions (merge com o seu)
|
|
66
|
+
│ └── hooks/
|
|
67
|
+
│ └── enforce-git-push-authority.cjs
|
|
68
|
+
├── pods/
|
|
69
|
+
│ ├── academy/ # aulas, palestras, treinamentos
|
|
70
|
+
│ ├── authority-content/ # conteúdo com voz própria e fact-check
|
|
71
|
+
│ ├── automation/ # N8N + Langgraph
|
|
72
|
+
│ ├── dev-ia/ # ciclo de desenvolvimento com IA
|
|
73
|
+
│ └── squad-forge/ # cria novos agentes e pods
|
|
74
|
+
├── knowledge/
|
|
75
|
+
│ └── voice-dna/ # DNA de voz para conteúdo autoral
|
|
76
|
+
├── scripts/
|
|
77
|
+
│ └── validate-budgets.js # gate de budget dos agentes
|
|
78
|
+
└── .power-claude/
|
|
79
|
+
└── manifest.json # estado da instalação (base do update/uninstall)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Nota honesta sobre o runner/memória/migração:** `power-claude install` copia `template/` inteiro (inclui a skill `pc-run-pod` em `.claude/skills/`) mais `scripts/validate-budgets.js` avulso — **só isso é distribuído automaticamente** (`installer/install.js`/`copy.js`). Os scripts que o runner, a memória e o `*migrate-squad` invocam (`pc-run-pod.cjs`, `pod-memory.cjs`, `migration-manifest.cjs`, `validate-pod-workflow.cjs`, `smoke-pod-workflow.cjs`, `harness-g5-lite.cjs`, `watcher-audit.cjs`, `forge-*.cjs`, `validate-no-clone.cjs`) vivem só em `scripts/` na raiz deste repositório e **não são copiados para o projeto instalado**. Hoje essas capacidades operam via o próprio repositório do framework (dogfooding) ou por sync manual dos scripts para o projeto consumidor — gap registrado em `BACKLOG.md`.
|
|
83
|
+
|
|
84
|
+
## Personalização — opcional, em três degraus
|
|
85
|
+
|
|
86
|
+
**Nenhum pod exige que você construa um DNA de voz.** Os pods que assinam peças **em seu nome**
|
|
87
|
+
perguntam quem é você — **uma vez, três campos** (nome, handle, uma linha de autoridade). Tudo o
|
|
88
|
+
mais — voz, tom, léxico, objetivos — é opcional, tem default funcional, e vai se ajustando com o
|
|
89
|
+
seu feedback durante o uso.
|
|
90
|
+
|
|
91
|
+
| Degrau | O que você fornece | Onde mora | O que muda |
|
|
92
|
+
|---|---|---|---|
|
|
93
|
+
| **1 — sem voz** | nada | — | Roda. Saída correta, tom neutro. |
|
|
94
|
+
| **2 — guia de estilo** | pessoa gramatical, léxico proibido, uma linha de tom | `pods/<pod>/knowledge/dono.yaml` (cópia de `dono.example.yaml`) | O texto para de soar como assistente. Melhor custo-benefício. |
|
|
95
|
+
| **3 — DNA de voz** | um corpus do que você já escreveu | `knowledge/voice-dna/voice-dna.yaml`, extraído por `/power:forge` → `mind-extractor` → `*extract {corpus}` | O texto passa a soar como você, com evidência citada por campo. |
|
|
96
|
+
|
|
97
|
+
**Uma ressalva honesta, porque os pods não são iguais.** Os pods de **método** (`dev-ia`,
|
|
98
|
+
`automation`, `hormozi-method`) não dependem de quem você é: sem personalizar nenhum campo, a
|
|
99
|
+
saída deles é a mesma. Já os pods de **identidade** (`content-carousel`, `authority-content`,
|
|
100
|
+
`academy`, `squad-forge`) produzem peças assinadas — sem o trio de atribuição, a saída não é
|
|
101
|
+
neutra, é **genérica**, que é exatamente o defeito que esses pods existem para evitar. Por isso o
|
|
102
|
+
trio é a única coisa que um pod pode pedir antes de prosseguir; voz e estilo, nunca.
|
|
103
|
+
|
|
104
|
+
**Nada disso vai para o pacote.** O DNA de voz e a configuração de dono são dado pessoal: o
|
|
105
|
+
template distribui só os `*.example.*`, e um oráculo (`scripts/owner-layer.cjs` +
|
|
106
|
+
`scripts/owner-layer.test.cjs`) reprova o empacotamento se qualquer arquivo dessa camada sair sem
|
|
107
|
+
ser um placeholder marcado. Passo a passo de instanciação: `knowledge/voice-dna/README.md` na sua
|
|
108
|
+
instalação.
|
|
109
|
+
|
|
110
|
+
## Validação no repositório do framework
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
npm test # suíte completa: instalador, adopt, runner, memória, migração, smoke/sweep
|
|
114
|
+
npm run validate # budgets + branding + validate-no-clone
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Licença
|
|
118
|
+
|
|
119
|
+
[MIT](./LICENSE) — Copyright (c) 2026 **Daniel Lins**.
|
|
120
|
+
|
|
121
|
+
Use, copie e adapte à vontade, mantendo a atribuição a Daniel Lins conforme a licença.
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
/**
|
|
4
|
+
* power-claude — CLI do framework POWER CLAUDE.
|
|
5
|
+
*
|
|
6
|
+
* Uso:
|
|
7
|
+
* npx @daniellins/power-claude [install] [--yes] instala no diretório atual (default)
|
|
8
|
+
* npx @daniellins/power-claude adopt [--yes] adota instalação sem manifest
|
|
9
|
+
* npx @daniellins/power-claude update [--yes] [--scope motor]
|
|
10
|
+
* atualiza uma instalação existente
|
|
11
|
+
* npx @daniellins/power-claude doctor diagnóstico da instalação
|
|
12
|
+
* npx @daniellins/power-claude uninstall [--yes] remove a instalação
|
|
13
|
+
* npx @daniellins/power-claude --help | --version
|
|
14
|
+
*
|
|
15
|
+
* Node >= 18, sem dependências externas.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const path = require('node:path');
|
|
19
|
+
const pkg = require(path.join(__dirname, '..', 'package.json'));
|
|
20
|
+
|
|
21
|
+
const COMMANDS = new Set(['install', 'adopt', 'update', 'doctor', 'uninstall']);
|
|
22
|
+
|
|
23
|
+
const HELP = `power-claude ${pkg.version} — ${pkg.description}
|
|
24
|
+
|
|
25
|
+
Uso:
|
|
26
|
+
npx @daniellins/power-claude [comando] [flags]
|
|
27
|
+
|
|
28
|
+
Comandos:
|
|
29
|
+
install Instala o framework no diretório atual (default)
|
|
30
|
+
adopt Adota uma instalação sem manifest (gera o manifest a partir do
|
|
31
|
+
disco para que o update passe a alcançá-la)
|
|
32
|
+
update Atualiza uma instalação existente (preserva suas modificações)
|
|
33
|
+
doctor Diagnóstico: manifest, hooks, .gitignore, budgets, CLAUDE.md
|
|
34
|
+
uninstall Remove apenas o que o instalador colocou (manifest-driven)
|
|
35
|
+
|
|
36
|
+
Flags:
|
|
37
|
+
-y, --yes Modo não-interativo (assume padrões; nunca sobrescreve nem
|
|
38
|
+
remove arquivos modificados por você)
|
|
39
|
+
--scope motor
|
|
40
|
+
Só em "update": restringe a atualização aos scripts do motor
|
|
41
|
+
(installer/motor-scripts.json) com owner instalado, e trata
|
|
42
|
+
divergência como DEFASAGEM — sobrescreve, como o install
|
|
43
|
+
sempre fez. Imprime a tabela sha256 antes→depois e pede UMA
|
|
44
|
+
confirmação para o conjunto. Não toca o template.
|
|
45
|
+
-h, --help Mostra esta ajuda
|
|
46
|
+
-v, --version Mostra a versão
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
function parseArgs(argv) {
|
|
50
|
+
const args = { command: 'install', yes: false, help: false, version: false, scope: null };
|
|
51
|
+
for (let i = 0; i < argv.length; i++) {
|
|
52
|
+
const raw = argv[i];
|
|
53
|
+
if (raw === '--yes' || raw === '-y') args.yes = true;
|
|
54
|
+
else if (raw === '--help' || raw === '-h') args.help = true;
|
|
55
|
+
else if (raw === '--version' || raw === '-v') args.version = true;
|
|
56
|
+
else if (raw === '--scope') {
|
|
57
|
+
args.scope = argv[++i];
|
|
58
|
+
if (!args.scope) {
|
|
59
|
+
console.error('--scope exige um valor (ex.: --scope motor)\n');
|
|
60
|
+
console.error(HELP);
|
|
61
|
+
process.exit(2);
|
|
62
|
+
}
|
|
63
|
+
} else if (raw.startsWith('--scope=')) args.scope = raw.slice('--scope='.length);
|
|
64
|
+
else if (COMMANDS.has(raw)) args.command = raw;
|
|
65
|
+
else {
|
|
66
|
+
console.error(`Argumento desconhecido: ${raw}\n`);
|
|
67
|
+
console.error(HELP);
|
|
68
|
+
process.exit(2);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return args;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function main() {
|
|
75
|
+
const args = parseArgs(process.argv.slice(2));
|
|
76
|
+
|
|
77
|
+
if (args.help) {
|
|
78
|
+
console.log(HELP);
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
if (args.version) {
|
|
82
|
+
console.log(pkg.version);
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (args.scope !== null && args.command !== 'update') {
|
|
87
|
+
console.error(`--scope só se aplica ao comando "update" (recebido em "${args.command}").\n`);
|
|
88
|
+
console.error(HELP);
|
|
89
|
+
return 2;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
switch (args.command) {
|
|
93
|
+
case 'install': {
|
|
94
|
+
const { install } = require('../installer/install');
|
|
95
|
+
return install({ yes: args.yes });
|
|
96
|
+
}
|
|
97
|
+
case 'adopt': {
|
|
98
|
+
const { adopt } = require('../installer/adopt');
|
|
99
|
+
return adopt({ yes: args.yes });
|
|
100
|
+
}
|
|
101
|
+
case 'update': {
|
|
102
|
+
const { update } = require('../installer/update');
|
|
103
|
+
return update({ yes: args.yes, scope: args.scope });
|
|
104
|
+
}
|
|
105
|
+
case 'doctor': {
|
|
106
|
+
const { doctor } = require('../installer/doctor');
|
|
107
|
+
return doctor();
|
|
108
|
+
}
|
|
109
|
+
case 'uninstall': {
|
|
110
|
+
const { uninstall } = require('../installer/uninstall');
|
|
111
|
+
return uninstall({ yes: args.yes });
|
|
112
|
+
}
|
|
113
|
+
default:
|
|
114
|
+
console.error(HELP);
|
|
115
|
+
return 2;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
main()
|
|
120
|
+
.then((code) => process.exit(code || 0))
|
|
121
|
+
.catch((error) => {
|
|
122
|
+
console.error(`Erro: ${error.message}`);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
});
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
/**
|
|
4
|
+
* doctor-ready-oracles.test.cjs — a checagem de distribuição da trava de
|
|
5
|
+
* `Ready` no `installer/doctor.js` (story SF13.2, `ADR-032` `DF-SF13.2-4`).
|
|
6
|
+
*
|
|
7
|
+
* ESCOPO DELIBERADAMENTE ESTREITO. Este é o 1º teste de `doctor.js` no repo,
|
|
8
|
+
* e cobre SÓ a checagem desta story — não é mandato para cobrir as outras
|
|
9
|
+
* checagens já existentes no arquivo. Cobri-las por arrasto seria emendar
|
|
10
|
+
* escopo numa story já STANDARD.
|
|
11
|
+
*
|
|
12
|
+
* O que a checagem existe para impedir: o hook e o validador viajam por
|
|
13
|
+
* canais DIFERENTES. Numa instalação em skew (`ADR-019`) o hook chega e
|
|
14
|
+
* `scripts/validate-story-acs.cjs` não — e a trava degrada para `ask` em toda
|
|
15
|
+
* transição `Draft`→`Ready`, para sempre. Guard que sempre pergunta é guard
|
|
16
|
+
* desligado com uma tecla a mais.
|
|
17
|
+
*
|
|
18
|
+
* Os 3 sub-casos são o remédio para o não-bloqueante 4 do `*review`: o
|
|
19
|
+
* controle positivo precisa DISCRIMINAR (linha `[OK ]` explícita), não
|
|
20
|
+
* apenas "não ter FALHA" — que seria vacuamente verdadeiro sem uma linha de
|
|
21
|
+
* código nova.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const fs = require('node:fs');
|
|
25
|
+
const os = require('node:os');
|
|
26
|
+
const path = require('node:path');
|
|
27
|
+
|
|
28
|
+
const { doctor } = require(path.resolve(__dirname, '..', 'doctor.js'));
|
|
29
|
+
|
|
30
|
+
const LABEL = 'Validador de ACs presente (exigido pela trava de Ready)';
|
|
31
|
+
|
|
32
|
+
let failures = 0;
|
|
33
|
+
const tmpDirs = [];
|
|
34
|
+
|
|
35
|
+
function assert(ok, msg) {
|
|
36
|
+
if (ok) {
|
|
37
|
+
console.log(`[OK ] ${msg}`);
|
|
38
|
+
} else {
|
|
39
|
+
console.error(`[FALHA] ${msg}`);
|
|
40
|
+
failures++;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Instalação mínima: `.claude/settings.json` (com ou sem o hook) e `scripts/`. */
|
|
45
|
+
function mkFixture({ withValidator, withHook }) {
|
|
46
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'doctor-ero-'));
|
|
47
|
+
tmpDirs.push(dir);
|
|
48
|
+
fs.mkdirSync(path.join(dir, '.claude'), { recursive: true });
|
|
49
|
+
const hooks = withHook
|
|
50
|
+
? {
|
|
51
|
+
PreToolUse: [{
|
|
52
|
+
matcher: 'Edit|Write',
|
|
53
|
+
hooks: [{ type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/hooks/enforce-ready-oracles.cjs"' }],
|
|
54
|
+
}],
|
|
55
|
+
}
|
|
56
|
+
: {};
|
|
57
|
+
fs.writeFileSync(path.join(dir, '.claude', 'settings.json'), JSON.stringify({ hooks }));
|
|
58
|
+
if (withValidator) {
|
|
59
|
+
fs.mkdirSync(path.join(dir, 'scripts'), { recursive: true });
|
|
60
|
+
fs.writeFileSync(path.join(dir, 'scripts', 'validate-story-acs.cjs'), 'module.exports = {};\n');
|
|
61
|
+
}
|
|
62
|
+
return dir;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Roda o `doctor` sobre a fixture capturando `console.log`. A fixture não é
|
|
67
|
+
* uma instalação completa (sem manifest, sem .gitignore), então outras
|
|
68
|
+
* checagens falham — irrelevante: este teste olha SÓ a linha desta story.
|
|
69
|
+
*/
|
|
70
|
+
async function runDoctor(dir) {
|
|
71
|
+
const lines = [];
|
|
72
|
+
const origLog = console.log;
|
|
73
|
+
const cwd0 = process.cwd();
|
|
74
|
+
console.log = (...args) => lines.push(args.join(' '));
|
|
75
|
+
process.chdir(dir);
|
|
76
|
+
try {
|
|
77
|
+
await doctor();
|
|
78
|
+
} catch (err) {
|
|
79
|
+
lines.push(`[EXCECAO] ${err && err.message}`);
|
|
80
|
+
} finally {
|
|
81
|
+
process.chdir(cwd0);
|
|
82
|
+
console.log = origLog;
|
|
83
|
+
}
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function linhaDaChecagem(lines) {
|
|
88
|
+
return lines.filter((l) => l.includes(LABEL));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function main() {
|
|
92
|
+
console.log('POWER CLAUDE — checagem de distribuição da trava de Ready no doctor (SF13.2)');
|
|
93
|
+
|
|
94
|
+
const okLines = await runDoctor(mkFixture({ withValidator: true, withHook: true }));
|
|
95
|
+
const failLines = await runDoctor(mkFixture({ withValidator: false, withHook: true }));
|
|
96
|
+
const skipLines = await runDoctor(mkFixture({ withValidator: false, withHook: false }));
|
|
97
|
+
|
|
98
|
+
const okLine = linhaDaChecagem(okLines);
|
|
99
|
+
const failLine = linhaDaChecagem(failLines);
|
|
100
|
+
const skipLine = linhaDaChecagem(skipLines);
|
|
101
|
+
|
|
102
|
+
assert(okLine.length === 1, 'a checagem emite exatamente 1 linha quando o hook está registrado (positivo)');
|
|
103
|
+
assert(
|
|
104
|
+
okLine.some((l) => /\[OK\s*\]/.test(l)),
|
|
105
|
+
'hook registrado + validador presente ⇒ [OK ] EXPLÍCITO (a checagem rodou e passou, não foi pulada)',
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
assert(
|
|
109
|
+
failLine.some((l) => /\[FALHA\]/.test(l)),
|
|
110
|
+
'hook registrado + validador ausente ⇒ [FALHA]',
|
|
111
|
+
);
|
|
112
|
+
assert(
|
|
113
|
+
failLine.some((l) => /adopt/.test(l) && /update/.test(l)),
|
|
114
|
+
'a FALHA nomeia o comando de conserto (fixCmd: adopt + update --scope motor)',
|
|
115
|
+
);
|
|
116
|
+
assert(
|
|
117
|
+
failLine.some((l) => /Draft.*Ready/.test(l)),
|
|
118
|
+
'a FALHA explica a CONSEQUÊNCIA — toda transição Draft→Ready passa a pedir aprovação',
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
assert(
|
|
122
|
+
skipLine.some((l) => /\[AVISO\]/.test(l) && /checagem pulada/.test(l)),
|
|
123
|
+
'hook NÃO registrado ⇒ [AVISO] "checagem pulada" (a checagem é condicional, não incondicional)',
|
|
124
|
+
);
|
|
125
|
+
assert(
|
|
126
|
+
!skipLine.some((l) => /\[FALHA\]/.test(l)),
|
|
127
|
+
'controle negativo: numa instalação sem a trava, exigir o validador seria FALHA inventada',
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
for (const d of tmpDirs) fs.rmSync(d, { recursive: true, force: true });
|
|
131
|
+
|
|
132
|
+
if (failures > 0) {
|
|
133
|
+
console.error(`\nSuíte FALHOU: ${failures} violação(ões).`);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
console.log('\nSuíte verde.');
|
|
137
|
+
process.exit(0);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
main();
|