devrites 5.10.1 → 5.11.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/CHANGELOG.md +13 -0
- package/README.md +24 -10
- package/bin/devrites.mjs +2 -0
- package/docs/cli.md +4 -1
- package/docs/command-map.md +7 -5
- package/docs/engine/commands.md +7 -5
- package/docs/orchestration.md +5 -2
- package/docs/skills.md +10 -4
- package/docs/usage.md +3 -1
- package/engine/commands.go +3 -0
- package/engine/help.go +190 -0
- package/engine/help_test.go +98 -0
- package/engine/internal/devritespaths/paths.go +2 -0
- package/engine/internal/hostpack/hostpack.go +39 -5
- package/engine/internal/hostpack/hostpack_test.go +27 -13
- package/engine/internal/install/apply.go +17 -4
- package/engine/internal/install/install.go +9 -2
- package/engine/internal/install/install_test.go +15 -2
- package/engine/internal/install/preflight.go +8 -2
- package/engine/internal/install/update.go +1 -1
- package/engine/internal/parallel/cli.go +90 -32
- package/engine/internal/parallel/cli_test.go +32 -0
- package/engine/main.go +15 -8
- package/engine/root_routing_test.go +4 -0
- package/install.sh +4 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +10 -5
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +12 -7
- package/pack/.claude/skills/rite-build/SKILL.md +3 -1
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +4 -3
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +3 -1
- package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/README.md +4 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +10 -5
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +12 -7
- package/pack/generated/claude/skills/rite-build/SKILL.md +3 -1
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +4 -3
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +3 -1
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +10 -5
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +12 -7
- package/pack/generated/codex/skills/rite-build/SKILL.md +3 -1
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +4 -3
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +3 -1
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/devin/AGENTS.md +23 -0
- package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
- package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
- package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
- package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
- package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
- package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
- package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
- package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
- package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
- package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
- package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
- package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
- package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
- package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
- package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
- package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
- package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
- package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
- package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
- package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
- package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
- package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
- package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
- package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
- package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
- package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
- package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
- package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
- package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/devin/skills/rite/SKILL.md +148 -0
- package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
- package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
- package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
- package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
- package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
- package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
- package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
- package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
- package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
- package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
- package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
- package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
- package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
- package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
- package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
- package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
- package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
- package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
- package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
- package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
- package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
- package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
- package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
- package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
- package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
- package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
- package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
- package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
- package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
- package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
- package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
- package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
- package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
- package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
- package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
- package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
- package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
- package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
- package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
- package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
- package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
- package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
- package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
- package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
- package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
- package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
- package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
- package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
- package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
- package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
- package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
- package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
- package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
- package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
- package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
- package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
- package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
- package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
- package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
- package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
- package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
- package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
- package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
- package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
- package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
- package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
- package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
- package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +10 -5
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +12 -7
- package/pack/generated/omp/skills/rite-build/SKILL.md +3 -1
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +4 -3
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +3 -1
- package/pack/generated/omp/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +10 -5
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +12 -7
- package/pack/generated/pi/skills/rite-build/SKILL.md +3 -1
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +4 -3
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +3 -1
- package/pack/generated/pi/skills/rite-define/reference/plan-template.md +1 -1
- package/package.json +4 -2
- package/scripts/build-host-artifacts.sh +48 -5
- package/scripts/devin-generate.sh +222 -0
- package/update.sh +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [5.11.0](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.2...v5.11.0) (2026-09-16)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
* **installer:** add Devin CLI host generation and install support ([#79](https://github.com/ViktorsBaikers/DevRites/issues/79)) ([a94056b](https://github.com/ViktorsBaikers/DevRites/commit/a94056bc20f520537395cf5c7c075e700d5a0b26))
|
|
10
|
+
|
|
11
|
+
## [5.10.2](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.1...v5.10.2) (2026-09-15)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
* **ci:** stop gosec false positive on secret-scan help ([ac8ef15](https://github.com/ViktorsBaikers/DevRites/commit/ac8ef1530f5121cf192fb9e60acef781b0e3fbb8))
|
|
16
|
+
* **rite:** honor --parallel over leftover AFK cap ([#78](https://github.com/ViktorsBaikers/DevRites/issues/78)) ([db6c299](https://github.com/ViktorsBaikers/DevRites/commit/db6c299e24be5e1b8c5739e45542f2ef8b572e3b))
|
|
17
|
+
|
|
5
18
|
## [5.10.1](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.0...v5.10.1) (2026-09-15)
|
|
6
19
|
|
|
7
20
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
# DevRites
|
|
6
6
|
|
|
7
|
-
DevRites is a repository-local workflow for building software with Claude Code
|
|
8
|
-
or
|
|
9
|
-
recorded proof, a release decision, and an explicit ship
|
|
7
|
+
DevRites is a repository-local workflow for building software with Claude Code,
|
|
8
|
+
Codex, omp, pi, or Devin CLI. It turns a feature request into a spec, a sliced
|
|
9
|
+
plan, working code, recorded proof, a release decision, and an explicit ship
|
|
10
|
+
step.
|
|
10
11
|
|
|
11
12
|
The work lives under `.devrites/`, not in chat history. A later session or a
|
|
12
13
|
different agent can read the same plan, decisions, state, and evidence before it
|
|
@@ -33,7 +34,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
|
|
|
33
34
|
Unattended runs may create local WIP checkpoint commits along the way, but they
|
|
34
35
|
remain local unless Ship's disclosed plan includes an approved remote action.
|
|
35
36
|
|
|
36
|
-
**Status:** [`v5.
|
|
37
|
+
**Status:** [`v5.11.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v5.11.0): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
37
38
|
|
|
38
39
|
This is the latest published release; `main` may contain unreleased work.
|
|
39
40
|
|
|
@@ -47,8 +48,9 @@ Run this from the root of your project. Node.js 18 or later is required.
|
|
|
47
48
|
npx devrites@latest
|
|
48
49
|
```
|
|
49
50
|
|
|
50
|
-
The installer adds project-local support for Claude Code, Codex, omp, and
|
|
51
|
-
It does not write skills, agents, or hooks to `~/.claude`, `~/.codex`,
|
|
51
|
+
The installer adds project-local support for Claude Code, Codex, omp, pi, and
|
|
52
|
+
Devin CLI. It does not write skills, agents, or hooks to `~/.claude`, `~/.codex`,
|
|
53
|
+
`~/.pi`, or `~/.config/devin`.
|
|
52
54
|
|
|
53
55
|
### 2. Choose the smallest route
|
|
54
56
|
|
|
@@ -78,8 +80,8 @@ proof and next action.
|
|
|
78
80
|
## How the lifecycle works
|
|
79
81
|
|
|
80
82
|
Claude Code supports both `/rite <verb>` and `/rite-<verb>`. Codex uses the same
|
|
81
|
-
forms with `$`: `$rite <verb>` and `$rite-<verb>`. omp and
|
|
82
|
-
slash forms (on pi they run as prompt templates under `.pi/prompts`, with
|
|
83
|
+
forms with `$`: `$rite <verb>` and `$rite-<verb>`. omp, pi, and Devin CLI use the
|
|
84
|
+
Claude slash forms (on pi they run as prompt templates under `.pi/prompts`, with
|
|
83
85
|
`/skill:rite-<verb>` equivalent). The menu and direct forms run the same skill.
|
|
84
86
|
|
|
85
87
|
| # | Stage | Direct command | What happens |
|
|
@@ -299,7 +301,9 @@ Useful install flags:
|
|
|
299
301
|
| `--dry-run` | Show planned file operations without changing anything. |
|
|
300
302
|
| `--force` | Replace or remove foreign or customized managed files. The installer still rejects symlinks and path escapes. |
|
|
301
303
|
| `--no-codex` | Skip `.agents`, `.codex`, and the Codex `AGENTS.md` block. |
|
|
304
|
+
| `--no-omp` | Skip `.omp` skills and agents. |
|
|
302
305
|
| `--no-pi` | Skip `.pi` skills, agents, prompt commands, and the pi `AGENTS.md` block. |
|
|
306
|
+
| `--no-devin` | Skip `.devin` skills, agents, and the Devin `AGENTS.md` block. |
|
|
303
307
|
| `--no-agents` | Skip hook-free native specialist profiles. |
|
|
304
308
|
| `--no-skills` | Skip skills and their bundled standards. |
|
|
305
309
|
| `--no-binary` | Do not keep the shared `devrites-engine` binary in a user or system bin directory. |
|
|
@@ -391,7 +395,7 @@ paths pass bounded streaming preflight before extraction. There is no unchecked
|
|
|
391
395
|
raw, source-archive, tag, or default-branch fallback. See
|
|
392
396
|
[`SECURITY.md`](SECURITY.md) for the representative bounds.
|
|
393
397
|
|
|
394
|
-
##
|
|
398
|
+
## Host integration
|
|
395
399
|
|
|
396
400
|
Claude Code receives skills under `.claude/skills/`, agents under
|
|
397
401
|
`.claude/agents/`, and native root permissions merged into
|
|
@@ -405,6 +409,15 @@ only `devrites-slice-wright` is writable; every other specialist is read-only.
|
|
|
405
409
|
Existing user content remains in place. Codex users invoke skills with `$rite`,
|
|
406
410
|
`$rite-spec`, or `/skills`.
|
|
407
411
|
|
|
412
|
+
Devin CLI receives the same skills under `.devin/skills/`, custom subagent
|
|
413
|
+
profiles under `.devin/agents/`, and a marked guidance block in `AGENTS.md`.
|
|
414
|
+
Profiles use `allowed-tools` with Devin tool names: only
|
|
415
|
+
`devrites-slice-wright` keeps `edit`, `write`, and `exec`; every other
|
|
416
|
+
specialist is read-only. Dispatch goes through `run_subagent` with the exact
|
|
417
|
+
`devrites-<role>` profile; a missing profile stops for HITL instead of
|
|
418
|
+
substituting `subagent_general`. Profiles load when a session starts, so reopen
|
|
419
|
+
the project after installing.
|
|
420
|
+
|
|
408
421
|
DevRites is installed through npm or the Bash bootstrap. It is not distributed
|
|
409
422
|
through Claude Code or Codex plugin stores.
|
|
410
423
|
|
|
@@ -417,7 +430,8 @@ shared contracts and engineering standards.
|
|
|
417
430
|
|
|
418
431
|
Seventeen fresh-context agent profiles ship with the pack. Claude has sixteen
|
|
419
432
|
read-only roles plus the sole source/test writer role,
|
|
420
|
-
`devrites-slice-wright`; Codex
|
|
433
|
+
`devrites-slice-wright`; Codex, omp, pi, and Devin generate the same
|
|
434
|
+
one-writer/sixteen-reader split.
|
|
421
435
|
|
|
422
436
|
The authoritative [skills catalogue](docs/skills.md) lists every skill and
|
|
423
437
|
agent. The [flow diagrams](docs/flow.md) show routing, reviewer fan-out, and
|
package/bin/devrites.mjs
CHANGED
|
@@ -63,6 +63,8 @@ Common flags:
|
|
|
63
63
|
--force Overwrite existing non-DevRites files
|
|
64
64
|
--no-codex Skip Codex support files (.agents, .codex, AGENTS.md)
|
|
65
65
|
--no-omp Skip OMP support files (.omp/skills, .omp/agents)
|
|
66
|
+
--no-pi Skip pi support files (.pi/skills, .pi/agents, .pi/prompts)
|
|
67
|
+
--no-devin Skip Devin CLI support files (.devin/skills, .devin/agents)
|
|
66
68
|
--short-aliases=all Also install /define /build /prove /seal
|
|
67
69
|
--no-agents Skip hook-free native specialist profiles
|
|
68
70
|
--no-skills Skip skills and bundled engineering standards
|
package/docs/cli.md
CHANGED
|
@@ -8,7 +8,10 @@ cross-host primitives; it never dispatches an agent or grades reviewer prose.
|
|
|
8
8
|
## Command surface
|
|
9
9
|
|
|
10
10
|
`devrites-engine help` lists the exhaustive operational surface. Standard
|
|
11
|
-
`help`, `-h`, `--help`, `version`, and `--version` forms also remain supported
|
|
11
|
+
`help`, `-h`, `--help`, `version`, and `--version` forms also remain supported.
|
|
12
|
+
Each operational command and subcommand accepts `-h` / `--help` and prints that
|
|
13
|
+
command's usage to stdout (exit 0) without requiring a workspace. Missing
|
|
14
|
+
required arguments still print usage to stderr and exit 2.
|
|
12
15
|
|
|
13
16
|
```text
|
|
14
17
|
devrites-engine install [flags]
|
package/docs/command-map.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
This page lists every shipped skill and agent, including its triggers, inputs,
|
|
4
4
|
outputs, and interactions.
|
|
5
5
|
|
|
6
|
-
DevRites ships through npm (`npx devrites ...`). Claude Code
|
|
7
|
-
comes from generated host artifacts copied by the npm
|
|
8
|
-
distributed as a Claude or Codex plugin.
|
|
6
|
+
DevRites ships through npm (`npx devrites ...`). Claude Code, Codex, omp, pi,
|
|
7
|
+
and Devin CLI support comes from generated host artifacts copied by the npm
|
|
8
|
+
installer; DevRites is not distributed as a Claude or Codex plugin.
|
|
9
9
|
|
|
10
10
|
- **Workflow diagram** (top-level flow) → [`flow.md`](flow.md).
|
|
11
11
|
- **Architecture rationale** → [`architecture.md`](architecture.md).
|
|
@@ -49,14 +49,16 @@ The Go surface is intentionally closed and deterministic:
|
|
|
49
49
|
|
|
50
50
|
`devrites-engine help` exhaustively lists the operational engine commands.
|
|
51
51
|
Standard `help`, `-h`, `--help`, `version`, and `--version` forms remain
|
|
52
|
-
available;
|
|
52
|
+
available; each operational command and subcommand also accepts `-h` / `--help`.
|
|
53
|
+
There are no legacy operational aliases. `check candidate <slug>`
|
|
53
54
|
prints exactly
|
|
54
55
|
`candidate-sha256: <64 lowercase hex>` and `candidate-files: <row count>` on a
|
|
55
56
|
pass; usage/root errors exit `2` and candidate blocks exit `3`. There are no
|
|
56
57
|
semantic readiness commands, reviewer-prose parsers, capability-ledger engine,
|
|
57
58
|
or compatibility telemetry.
|
|
58
59
|
|
|
59
|
-
Claude Code and
|
|
60
|
+
Claude Code, Codex, omp, pi, and Devin own native dispatch. Installed skills
|
|
61
|
+
and exact agents
|
|
60
62
|
own semantic readiness, traceability, acceptance/evidence quality, doubt,
|
|
61
63
|
review reconciliation, test-quality assessment, capability interpretation,
|
|
62
64
|
workspace compatibility, and
|
package/docs/engine/commands.md
CHANGED
|
@@ -27,11 +27,13 @@ workflow strategy.
|
|
|
27
27
|
| `open-visual <path-or-name> [--slug <slug>] [--no-open]` | Resolve a local visual HTML file, optionally open it in the OS browser, warn if the sibling outline is missing or inventory ids are absent from HTML, and print agent path tips. No network. |
|
|
28
28
|
| `version` | Print the engine version. |
|
|
29
29
|
|
|
30
|
-
`help`, `-h`, and `--help` print this operational inventory.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
`help`, `-h`, and `--help` print this operational inventory. Each operational
|
|
31
|
+
command and subcommand also accepts `-h` / `--help` and prints that command's
|
|
32
|
+
usage to stdout without requiring a workspace. `version` and `--version` print
|
|
33
|
+
the binary version. Other unlisted command forms are rejected as unknown; the
|
|
34
|
+
engine has no compatibility aliases or tombstones. The `add`/`upgrade`/`remove`
|
|
35
|
+
conveniences belong only to the `npx devrites` adapter, not to the engine
|
|
36
|
+
command namespace.
|
|
35
37
|
|
|
36
38
|
## Check boundary
|
|
37
39
|
|
package/docs/orchestration.md
CHANGED
|
@@ -128,8 +128,11 @@ preserved. No ad hoc copy/cherry-pick/merge occurs from the read-only root.
|
|
|
128
128
|
|
|
129
129
|
Isolation does not authorize same-worktree throughput. Parallel writers are allowed
|
|
130
130
|
**only** under the `/rite-build` batch path when path-disjoint eligibility, abort-batch,
|
|
131
|
-
and a control `parallel-lease.md` apply. `--parallel N`
|
|
132
|
-
|
|
131
|
+
and a control `parallel-lease.md` apply. `--parallel N` on `/rite-autocomplete`
|
|
132
|
+
or `/rite-build` is the batch cap for that run and wins over leftover sentinel
|
|
133
|
+
`max_parallel`; `/rite-autocomplete --parallel N` also writes or replaces only
|
|
134
|
+
that field. Absent the flag, the sentinel (default cap 10 under
|
|
135
|
+
`/rite-autocomplete`) is a **cap**: each round runs
|
|
133
136
|
the largest eligible set, recomputes after every completed round, and repeats until no
|
|
134
137
|
pending slice remains; a one-slice round is serial for that round only (see
|
|
135
138
|
[`parallel-batch.md`](../pack/.claude/skills/rite-build/reference/parallel-batch.md)).
|
package/docs/skills.md
CHANGED
|
@@ -12,11 +12,16 @@ regenerate missing payload components before installation; the engine validates
|
|
|
12
12
|
and copies them but never generates them. The installer copies Codex skill
|
|
13
13
|
mirrors to `.agents/skills`, mirrors the rules under
|
|
14
14
|
`.agents/skills/devrites-lib/reference/standards`, installs `.codex/agents`, and
|
|
15
|
-
merges native Codex configuration and guidance.
|
|
15
|
+
merges native Codex configuration and guidance. Devin CLI receives skills under
|
|
16
|
+
`.devin/skills`, custom subagent profiles under `.devin/agents`, and a marked
|
|
17
|
+
guidance block in `AGENTS.md`.
|
|
16
18
|
|
|
17
19
|
The root and reviewers never write source. Claude enforces the root boundary in
|
|
18
20
|
plan mode. Codex uses a workspace-capable root so its sole write-capable
|
|
19
|
-
slice-wright can execute, while all other specialists remain read-only.
|
|
21
|
+
slice-wright can execute, while all other specialists remain read-only. On
|
|
22
|
+
Devin, `allowed-tools` gives only `devrites-slice-wright` `edit`, `write`, and
|
|
23
|
+
`exec`; a missing required profile stops for HITL instead of substituting a
|
|
24
|
+
generic profile. The
|
|
20
25
|
installed `devrites-engine` owns strict candidate identity, deterministic checks,
|
|
21
26
|
exact proof/review/seal bindings,
|
|
22
27
|
atomic state, secret scanning, and installation diagnostics. Native/root policy
|
|
@@ -28,8 +33,9 @@ bootstraps or proxies the engine directly (see [`cli.md`](cli.md)).
|
|
|
28
33
|
|
|
29
34
|
Each phase skill names the specialist the host should run when one is needed.
|
|
30
35
|
Codex loads those project agents from `.codex/agents`, then waits for and
|
|
31
|
-
reconciles their normal results.
|
|
32
|
-
|
|
36
|
+
reconciles their normal results. Devin loads the same profiles from
|
|
37
|
+
`.devin/agents` as `run_subagent` profiles. The engine has no dispatch protocol;
|
|
38
|
+
native hosts follow the shared, host-neutral
|
|
33
39
|
[`parallel-dispatch.md`](../pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md)
|
|
34
40
|
contract when a rite names parallel reviewers.
|
|
35
41
|
|
package/docs/usage.md
CHANGED
|
@@ -413,7 +413,9 @@ remaining from the pending-slice count and ignores leftover remaining and
|
|
|
413
413
|
- **`.devrites/AFK` is per-developer, not per-repo**: gitignore it (or commit
|
|
414
414
|
it deliberately if the team agrees on AFK defaults). The sentinel is
|
|
415
415
|
read-only config: it toggles your local session mode and sets the initial
|
|
416
|
-
`max_slices` budget
|
|
416
|
+
`max_slices` budget. `/rite-autocomplete --parallel N` is the one exception:
|
|
417
|
+
it writes or replaces only `max_parallel: N` so a leftover `1` cannot keep
|
|
418
|
+
later ticks serial. The mutable remaining-slice count lives
|
|
417
419
|
in `state.md` (`AFK slices remaining`), never in the sentinel. The root
|
|
418
420
|
charges it once with each green pending → built transition and stops before
|
|
419
421
|
another dispatch at zero; malformed values fail closed.
|
package/engine/commands.go
CHANGED
|
@@ -25,6 +25,9 @@ const (
|
|
|
25
25
|
// workspace or Git state, which must never fall back after an unsafe root
|
|
26
26
|
// selection.
|
|
27
27
|
func rootModeFor(command string, args []string) rootMode {
|
|
28
|
+
if hasHelpFlag(args) || (len(args) > 0 && isHelpToken(args[0])) {
|
|
29
|
+
return rootUnused
|
|
30
|
+
}
|
|
28
31
|
subcommand := firstRootOperand(args)
|
|
29
32
|
switch command {
|
|
30
33
|
case "secret-scan", "open-visual":
|
package/engine/help.go
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"io"
|
|
6
|
+
"strings"
|
|
7
|
+
|
|
8
|
+
"github.com/devrites/devrites/internal/parallel"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
const (
|
|
12
|
+
checkUsage = `usage: devrites-engine check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes> ...
|
|
13
|
+
|
|
14
|
+
check candidate <slug>
|
|
15
|
+
check readiness <slug>
|
|
16
|
+
check readiness --emit-binding <slug>
|
|
17
|
+
check seal <slug>
|
|
18
|
+
check path-disjoint [--root <dir>] [<json-file>|-]
|
|
19
|
+
check task-graph <slug>
|
|
20
|
+
check skill-trust <path>
|
|
21
|
+
check indexes [--root <dir>]
|
|
22
|
+
`
|
|
23
|
+
|
|
24
|
+
stateUsage = `usage: devrites-engine state <resolve|merge-manifest|close> ...
|
|
25
|
+
|
|
26
|
+
state resolve <qid> "<answer>"
|
|
27
|
+
state resolve --drop <qid> ["<reason>"]
|
|
28
|
+
state resolve --batch <file>
|
|
29
|
+
state merge-manifest <slug> [<predecessor>...]
|
|
30
|
+
state close <slug>
|
|
31
|
+
`
|
|
32
|
+
|
|
33
|
+
observeUsage = `usage: devrites-engine observe summary <slug> | observe slice <slug> <SLICE-ID>
|
|
34
|
+
|
|
35
|
+
observe summary [slug]
|
|
36
|
+
observe slice <slug> <SLICE-ID>
|
|
37
|
+
`
|
|
38
|
+
|
|
39
|
+
orientUsage = "usage: devrites-engine orient [slug]"
|
|
40
|
+
migrateUsage = "usage: devrites-engine migrate <slug> [--dry-run] [--answer id=choice]"
|
|
41
|
+
// scanCmdUsage is help text for `secret-scan`. The identifier must not
|
|
42
|
+
// contain "secret": gosec G101 treats secret* string consts as credentials.
|
|
43
|
+
scanCmdUsage = "usage: devrites-engine secret-scan [--staged] [--stdin] [slug]"
|
|
44
|
+
openVisualUsage = "usage: devrites-engine open-visual <path-or-name> [--slug <slug>] [--no-open]"
|
|
45
|
+
versionUsage = "usage: devrites-engine version"
|
|
46
|
+
candidateUsage = "usage: devrites-engine check candidate <slug>"
|
|
47
|
+
readinessUsage = "usage: devrites-engine check readiness <slug>\n devrites-engine check readiness --emit-binding <slug>"
|
|
48
|
+
sealUsage = "usage: devrites-engine check seal <slug>"
|
|
49
|
+
taskGraphUsage = "usage: devrites-engine check task-graph <slug>"
|
|
50
|
+
skillTrustUsage = "usage: devrites-engine check skill-trust <path>"
|
|
51
|
+
indexesUsage = "usage: devrites-engine check indexes [--root <dir>]"
|
|
52
|
+
resolveUsage = `usage: devrites-engine state resolve <qid> "<answer>" | state resolve --drop <qid> ["<reason>"] | state resolve --batch <file>`
|
|
53
|
+
mergeManifestUsage = "usage: devrites-engine state merge-manifest <slug> [<predecessor>...]"
|
|
54
|
+
closeUsage = "usage: devrites-engine state close <slug>"
|
|
55
|
+
observeSliceUsage = "usage: devrites-engine observe slice <slug> <SLICE-ID>"
|
|
56
|
+
observeSummaryUsage = "usage: devrites-engine observe summary [slug]"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
func isHelpFlag(arg string) bool {
|
|
60
|
+
switch arg {
|
|
61
|
+
case "-h", "-help", "--help":
|
|
62
|
+
return true
|
|
63
|
+
default:
|
|
64
|
+
return false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
func isHelpToken(arg string) bool {
|
|
69
|
+
return isHelpFlag(arg) || arg == "help"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
func hasHelpFlag(args []string) bool {
|
|
73
|
+
for _, arg := range args {
|
|
74
|
+
if isHelpFlag(arg) {
|
|
75
|
+
return true
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
func shouldPrintHelp(args []string) bool {
|
|
82
|
+
if len(args) == 0 {
|
|
83
|
+
return false
|
|
84
|
+
}
|
|
85
|
+
if isHelpToken(args[0]) {
|
|
86
|
+
return true
|
|
87
|
+
}
|
|
88
|
+
if hasHelpFlag(args) {
|
|
89
|
+
return true
|
|
90
|
+
}
|
|
91
|
+
switch args[0] {
|
|
92
|
+
case "check", "state", "observe", "parallel":
|
|
93
|
+
return len(args) >= 2 && args[1] == "help"
|
|
94
|
+
default:
|
|
95
|
+
return false
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
func firstNonHelp(args []string) string {
|
|
100
|
+
for _, arg := range args {
|
|
101
|
+
if isHelpToken(arg) || strings.HasPrefix(arg, "-") {
|
|
102
|
+
continue
|
|
103
|
+
}
|
|
104
|
+
return arg
|
|
105
|
+
}
|
|
106
|
+
return ""
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
func writeHelp(stdout io.Writer, text string) int {
|
|
110
|
+
fmt.Fprintln(stdout, strings.TrimRight(text, "\n"))
|
|
111
|
+
return exitOK
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// commandHelp returns the usage text for a help request on a known command.
|
|
115
|
+
// ok is false when args are not a help request, or the command is unknown so
|
|
116
|
+
// the existing unknown-command path should run.
|
|
117
|
+
func commandHelp(args []string) (string, bool) {
|
|
118
|
+
if !shouldPrintHelp(args) {
|
|
119
|
+
return "", false
|
|
120
|
+
}
|
|
121
|
+
switch args[0] {
|
|
122
|
+
case "-h", "-help", "--help", "help":
|
|
123
|
+
return usage, true
|
|
124
|
+
case "check":
|
|
125
|
+
return helpCheck(args[1:]), true
|
|
126
|
+
case "state":
|
|
127
|
+
return helpState(args[1:]), true
|
|
128
|
+
case "observe":
|
|
129
|
+
return helpObserve(args[1:]), true
|
|
130
|
+
case "orient":
|
|
131
|
+
return orientUsage, true
|
|
132
|
+
case "parallel":
|
|
133
|
+
return parallel.CommandUsage(firstNonHelp(args[1:])), true
|
|
134
|
+
case "migrate":
|
|
135
|
+
return migrateUsage, true
|
|
136
|
+
case "secret-scan":
|
|
137
|
+
return scanCmdUsage, true
|
|
138
|
+
case "open-visual":
|
|
139
|
+
return openVisualUsage, true
|
|
140
|
+
case "version", "--version":
|
|
141
|
+
return versionUsage, true
|
|
142
|
+
default:
|
|
143
|
+
return "", false
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
func helpCheck(rest []string) string {
|
|
148
|
+
switch firstNonHelp(rest) {
|
|
149
|
+
case "candidate":
|
|
150
|
+
return candidateUsage
|
|
151
|
+
case "readiness":
|
|
152
|
+
return readinessUsage
|
|
153
|
+
case "seal":
|
|
154
|
+
return sealUsage
|
|
155
|
+
case "path-disjoint":
|
|
156
|
+
return parallel.CommandUsage("path-disjoint")
|
|
157
|
+
case "task-graph":
|
|
158
|
+
return taskGraphUsage
|
|
159
|
+
case "skill-trust":
|
|
160
|
+
return skillTrustUsage
|
|
161
|
+
case "indexes":
|
|
162
|
+
return indexesUsage
|
|
163
|
+
default:
|
|
164
|
+
return checkUsage
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
func helpState(rest []string) string {
|
|
169
|
+
switch firstNonHelp(rest) {
|
|
170
|
+
case "resolve":
|
|
171
|
+
return resolveUsage
|
|
172
|
+
case "merge-manifest":
|
|
173
|
+
return mergeManifestUsage
|
|
174
|
+
case "close":
|
|
175
|
+
return closeUsage
|
|
176
|
+
default:
|
|
177
|
+
return stateUsage
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
func helpObserve(rest []string) string {
|
|
182
|
+
switch firstNonHelp(rest) {
|
|
183
|
+
case "summary":
|
|
184
|
+
return observeSummaryUsage
|
|
185
|
+
case "slice":
|
|
186
|
+
return observeSliceUsage
|
|
187
|
+
default:
|
|
188
|
+
return observeUsage
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bytes"
|
|
5
|
+
"strings"
|
|
6
|
+
"testing"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
func TestCommandHelp(t *testing.T) {
|
|
10
|
+
t.Setenv("DEVRITES_ROOT", "")
|
|
11
|
+
tests := []struct {
|
|
12
|
+
args []string
|
|
13
|
+
want string
|
|
14
|
+
}{
|
|
15
|
+
{args: []string{"--help"}, want: "Usage:"},
|
|
16
|
+
{args: []string{"-h"}, want: "Usage:"},
|
|
17
|
+
{args: []string{"help"}, want: "Usage:"},
|
|
18
|
+
{args: []string{"check", "--help"}, want: "check candidate <slug>"},
|
|
19
|
+
{args: []string{"check", "help"}, want: "check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes>"},
|
|
20
|
+
{args: []string{"check", "candidate", "--help"}, want: "check candidate <slug>"},
|
|
21
|
+
{args: []string{"check", "readiness", "-h"}, want: "check readiness --emit-binding <slug>"},
|
|
22
|
+
{args: []string{"check", "seal", "--help"}, want: "check seal <slug>"},
|
|
23
|
+
{args: []string{"check", "path-disjoint", "--help"}, want: "check path-disjoint"},
|
|
24
|
+
{args: []string{"check", "task-graph", "--help"}, want: "check task-graph <slug>"},
|
|
25
|
+
{args: []string{"check", "skill-trust", "--help"}, want: "check skill-trust <path>"},
|
|
26
|
+
{args: []string{"check", "indexes", "--help"}, want: "check indexes [--root <dir>]"},
|
|
27
|
+
{args: []string{"state", "--help"}, want: "state <resolve|merge-manifest|close>"},
|
|
28
|
+
{args: []string{"state", "-h"}, want: "state resolve"},
|
|
29
|
+
{args: []string{"state", "help"}, want: "state close <slug>"},
|
|
30
|
+
{args: []string{"state", "resolve", "--help"}, want: `state resolve <qid> "<answer>"`},
|
|
31
|
+
{args: []string{"state", "merge-manifest", "--help"}, want: "state merge-manifest <slug>"},
|
|
32
|
+
{args: []string{"state", "close", "--help"}, want: "state close <slug>"},
|
|
33
|
+
{args: []string{"parallel", "--help"}, want: "usage: parallel <subcommand>"},
|
|
34
|
+
{args: []string{"parallel", "create", "--help"}, want: "usage: parallel create --root --slug --batch --base --json"},
|
|
35
|
+
{args: []string{"parallel", "create", "-h"}, want: "parallel create"},
|
|
36
|
+
{args: []string{"parallel", "select", "--help"}, want: "parallel select --cap"},
|
|
37
|
+
{args: []string{"observe", "--help"}, want: "observe summary"},
|
|
38
|
+
{args: []string{"observe", "summary", "--help"}, want: "observe summary"},
|
|
39
|
+
{args: []string{"observe", "slice", "--help"}, want: "observe slice <slug> <SLICE-ID>"},
|
|
40
|
+
{args: []string{"orient", "--help"}, want: "orient [slug]"},
|
|
41
|
+
{args: []string{"migrate", "--help"}, want: "migrate <slug>"},
|
|
42
|
+
{args: []string{"secret-scan", "--help"}, want: "secret-scan [--staged] [--stdin]"},
|
|
43
|
+
{args: []string{"open-visual", "--help"}, want: "open-visual <path-or-name>"},
|
|
44
|
+
{args: []string{"version", "--help"}, want: "devrites-engine version"},
|
|
45
|
+
{args: []string{"install", "--help"}, want: "usage: devrites-engine install"},
|
|
46
|
+
{args: []string{"update", "--help"}, want: "usage: devrites-engine update"},
|
|
47
|
+
{args: []string{"uninstall", "--help"}, want: "usage: devrites-engine uninstall"},
|
|
48
|
+
}
|
|
49
|
+
for _, test := range tests {
|
|
50
|
+
t.Run(strings.Join(test.args, " "), func(t *testing.T) {
|
|
51
|
+
var stdout, stderr bytes.Buffer
|
|
52
|
+
code := run(test.args, strings.NewReader(""), &stdout, &stderr)
|
|
53
|
+
if code != exitOK {
|
|
54
|
+
t.Fatalf("run(%q) = %d, want %d; stdout=%q stderr=%q", test.args, code, exitOK, stdout.String(), stderr.String())
|
|
55
|
+
}
|
|
56
|
+
if stderr.Len() != 0 {
|
|
57
|
+
t.Fatalf("run(%q) wrote stderr %q", test.args, stderr.String())
|
|
58
|
+
}
|
|
59
|
+
if !strings.Contains(stdout.String(), test.want) {
|
|
60
|
+
t.Fatalf("run(%q) stdout=%q, want %q", test.args, stdout.String(), test.want)
|
|
61
|
+
}
|
|
62
|
+
if strings.Contains(stdout.String(), "unknown") {
|
|
63
|
+
t.Fatalf("run(%q) treated help as unknown: %q", test.args, stdout.String())
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
func TestCommandHelpDoesNotRequireWorkspace(t *testing.T) {
|
|
70
|
+
t.Setenv("DEVRITES_ROOT", "")
|
|
71
|
+
for _, args := range [][]string{
|
|
72
|
+
{"state", "--help"},
|
|
73
|
+
{"check", "candidate", "--help"},
|
|
74
|
+
{"orient", "--help"},
|
|
75
|
+
{"migrate", "--help"},
|
|
76
|
+
{"parallel", "create", "--help"},
|
|
77
|
+
} {
|
|
78
|
+
var stdout, stderr bytes.Buffer
|
|
79
|
+
code := run(args, strings.NewReader(""), &stdout, &stderr)
|
|
80
|
+
if code != exitOK || stderr.Len() != 0 || !strings.Contains(stdout.String(), "usage:") {
|
|
81
|
+
t.Fatalf("run(%q) code=%d stdout=%q stderr=%q", args, code, stdout.String(), stderr.String())
|
|
82
|
+
}
|
|
83
|
+
if strings.Contains(stdout.String()+stderr.String(), "root selection") {
|
|
84
|
+
t.Fatalf("run(%q) required a workspace for help", args)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
func TestUnknownCommandHelpStillUnknown(t *testing.T) {
|
|
90
|
+
var stdout, stderr bytes.Buffer
|
|
91
|
+
args := []string{"frobnicate", "--help"}
|
|
92
|
+
if code := run(args, strings.NewReader(""), &stdout, &stderr); code != exitUsage {
|
|
93
|
+
t.Fatalf("run(%q) = %d, want %d", args, code, exitUsage)
|
|
94
|
+
}
|
|
95
|
+
if !strings.Contains(stderr.String(), `unknown command "frobnicate"`) {
|
|
96
|
+
t.Fatalf("stderr = %q, want unknown-command diagnostic", stderr.String())
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -17,10 +17,12 @@ const (
|
|
|
17
17
|
CodexSkillsTarget = ".agents/skills"
|
|
18
18
|
OmpSkillsTarget = ".omp/skills"
|
|
19
19
|
PiSkillsTarget = ".pi/skills"
|
|
20
|
+
DevinSkillsTarget = ".devin/skills"
|
|
20
21
|
ClaudeAgentsTarget = ".claude/agents"
|
|
21
22
|
CodexAgentsTarget = ".codex/agents"
|
|
22
23
|
OmpAgentsTarget = ".omp/agents"
|
|
23
24
|
PiAgentsTarget = ".pi/agents"
|
|
25
|
+
DevinAgentsTarget = ".devin/agents"
|
|
24
26
|
PiPromptsTarget = ".pi/prompts"
|
|
25
27
|
ClaudeWorkflowsTarget = ".claude/workflows"
|
|
26
28
|
|