devrites 7.1.2 → 7.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +9 -4
- package/docs/dsh.md +85 -0
- package/engine/internal/devritespaths/paths.go +2 -0
- package/engine/internal/hostpack/hostpack.go +29 -5
- package/engine/internal/install/apply.go +14 -2
- package/engine/internal/install/install.go +7 -3
- package/engine/internal/install/merge.go +1 -0
- package/engine/internal/install/preflight.go +9 -2
- package/engine/internal/install/update.go +1 -1
- package/engine/internal/lib/dispatch_packet.go +1 -1
- package/pack/generated/README.md +3 -1
- package/pack/generated/dsh/AGENTS.md +27 -0
- package/pack/generated/dsh/agents/devrites-code-reviewer.md +180 -0
- package/pack/generated/dsh/agents/devrites-devex-reviewer.md +137 -0
- package/pack/generated/dsh/agents/devrites-doubt-reviewer.md +100 -0
- package/pack/generated/dsh/agents/devrites-evidence-scout.md +93 -0
- package/pack/generated/dsh/agents/devrites-frontend-reviewer.md +139 -0
- package/pack/generated/dsh/agents/devrites-performance-reviewer.md +142 -0
- package/pack/generated/dsh/agents/devrites-plan-drafter.md +113 -0
- package/pack/generated/dsh/agents/devrites-plan-reviewer.md +167 -0
- package/pack/generated/dsh/agents/devrites-proof-runner.md +101 -0
- package/pack/generated/dsh/agents/devrites-retrospector.md +82 -0
- package/pack/generated/dsh/agents/devrites-security-auditor.md +146 -0
- package/pack/generated/dsh/agents/devrites-simplifier-reviewer.md +113 -0
- package/pack/generated/dsh/agents/devrites-slice-wright.md +240 -0
- package/pack/generated/dsh/agents/devrites-spec-reviewer.md +105 -0
- package/pack/generated/dsh/agents/devrites-strategy-reviewer.md +109 -0
- package/pack/generated/dsh/agents/devrites-test-analyst.md +110 -0
- package/pack/generated/dsh/agents/devrites-upgrade-planner.md +107 -0
- package/pack/generated/dsh/agents/fast-builder.md +92 -0
- package/pack/generated/dsh/agents/fast-checker.md +61 -0
- package/pack/generated/dsh/agents/fast-critic.md +71 -0
- package/pack/generated/dsh/agents/fast-planner.md +95 -0
- package/pack/generated/dsh/agents/overhaul-backend-engineer.md +70 -0
- package/pack/generated/dsh/agents/overhaul-boundary.md +64 -0
- package/pack/generated/dsh/agents/overhaul-craft.md +85 -0
- package/pack/generated/dsh/agents/overhaul-frontend-engineer.md +73 -0
- package/pack/generated/dsh/agents/overhaul-implementer.md +72 -0
- package/pack/generated/dsh/agents/overhaul-recon.md +77 -0
- package/pack/generated/dsh/agents/overhaul-specialist.md +67 -0
- package/pack/generated/dsh/agents/overhaul-verifier.md +73 -0
- package/pack/generated/dsh/runtime/codebase-memory.patch.yml +16 -0
- package/pack/generated/dsh/runtime/cordis.patch.yml +1762 -0
- package/pack/generated/dsh/runtime/specialist.mjs +85 -0
- package/pack/generated/dsh/skills/devrites-api-interface/SKILL.md +65 -0
- package/pack/generated/dsh/skills/devrites-audit/SKILL.md +60 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/SKILL.md +109 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/reference/browser-performance.md +19 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/reference/visual-verdict.md +38 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/SKILL.md +119 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +41 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/hypotheses.md +23 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/regression-test.md +33 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/dsh/skills/devrites-doubt/SKILL.md +83 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/SKILL.md +89 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/design-references.md +120 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/quality-standards.md +286 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/shape.md +61 -0
- package/pack/generated/dsh/skills/devrites-interview/SKILL.md +107 -0
- package/pack/generated/dsh/skills/devrites-lib/SKILL.md +98 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/candidate-integrity.md +59 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/intent-map.md +86 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/orchestration-profiles.md +48 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/parallel-dispatch.md +184 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/reply-contract.md +123 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/README.md +70 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +32 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/afk-hitl.md +467 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/agents.md +231 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/anti-patterns.md +50 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/architecture-health.md +64 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/assumption-checkpoints.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/audit-coverage.md +107 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/browser-proof-checklist.md +37 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-navigation.md +69 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-review.md +178 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/coding-style.md +53 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/context-hygiene.md +136 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/core.md +202 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/data-integrity.md +144 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/debug-recovery.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/definition-of-done.md +25 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/deprecation.md +49 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/developer-experience.md +128 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/development-workflow.md +31 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/documentation.md +55 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/duplicate-code.md +129 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/edge-case-trace.md +94 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/elicitation.md +114 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/error-handling.md +49 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/gates.md +159 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/git-workflow.md +51 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/glossary.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/hooks.md +41 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/integration-reliability.md +121 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/loop-operations.md +123 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/observability.md +90 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/one-shot-actions.md +105 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/patterns.md +70 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/performance.md +88 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/principles.md +56 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/prose-style.md +127 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/release/ship-checklist.md +12 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/repository-topology.md +82 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/README.md +28 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ci-workflows.md +50 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/default.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/go.md +47 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/python.md +46 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/react.md +55 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/shell.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/stack-profile.md +155 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ts-js.md +74 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review-checklist.md +14 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/security-checklist.md +30 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/security.md +283 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/skill-authoring.md +269 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/spec-grammar.md +214 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/test-proof-checklist.md +18 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/testing.md +295 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/tooling.md +125 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/verification-methods.md +143 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/windows.md +60 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/workflow-artifacts.md +435 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/workspace-artifact-schema.md +312 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/SKILL.md +81 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/examples.md +136 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/dsh/skills/devrites-source-driven/SKILL.md +54 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/SKILL.md +135 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/reference/visual-direction-probe.md +50 -0
- package/pack/generated/dsh/skills/overhaul/SKILL.md +221 -0
- package/pack/generated/dsh/skills/overhaul/references/audit-domains.md +390 -0
- package/pack/generated/dsh/skills/overhaul/references/lifecycle.md +314 -0
- package/pack/generated/dsh/skills/overhaul/references/orchestration.md +291 -0
- package/pack/generated/dsh/skills/overhaul/references/records.md +203 -0
- package/pack/generated/dsh/skills/overhaul/references/repair-and-measurement.md +310 -0
- package/pack/generated/dsh/skills/overhaul/references/review-and-report.md +139 -0
- package/pack/generated/dsh/skills/overhaul/references/scope-and-safety.md +233 -0
- package/pack/generated/dsh/skills/overhaul/references/scoring.md +261 -0
- package/pack/generated/dsh/skills/overhaul/references/stack-profiles.md +316 -0
- package/pack/generated/dsh/skills/rite/SKILL.md +157 -0
- package/pack/generated/dsh/skills/rite/reference/menu.md +49 -0
- package/pack/generated/dsh/skills/rite-adopt/SKILL.md +64 -0
- package/pack/generated/dsh/skills/rite-adopt/reference/adoption.md +25 -0
- package/pack/generated/dsh/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +167 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/decision-policy.md +44 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +164 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +118 -0
- package/pack/generated/dsh/skills/rite-build/SKILL.md +126 -0
- package/pack/generated/dsh/skills/rite-build/reference/afk-discipline.md +153 -0
- package/pack/generated/dsh/skills/rite-build/reference/anti-patterns.md +27 -0
- package/pack/generated/dsh/skills/rite-build/reference/checkpoint-protocol.md +115 -0
- package/pack/generated/dsh/skills/rite-build/reference/checkpoint.md +79 -0
- package/pack/generated/dsh/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/dsh/skills/rite-build/reference/one-slice-cycle.md +57 -0
- package/pack/generated/dsh/skills/rite-build/reference/output.md +29 -0
- package/pack/generated/dsh/skills/rite-build/reference/parallel-batch.md +260 -0
- package/pack/generated/dsh/skills/rite-build/reference/phase-contract.md +130 -0
- package/pack/generated/dsh/skills/rite-build/reference/spec-drift-guard.md +91 -0
- package/pack/generated/dsh/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/dsh/skills/rite-build/reference/wright-dispatch.md +198 -0
- package/pack/generated/dsh/skills/rite-clarify/SKILL.md +104 -0
- package/pack/generated/dsh/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/dsh/skills/rite-clarify/reference/decision-coverage.md +56 -0
- package/pack/generated/dsh/skills/rite-converge/SKILL.md +167 -0
- package/pack/generated/dsh/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/dsh/skills/rite-converge/reference/convergence-assessment.md +70 -0
- package/pack/generated/dsh/skills/rite-customize/SKILL.md +64 -0
- package/pack/generated/dsh/skills/rite-define/SKILL.md +203 -0
- package/pack/generated/dsh/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/dsh/skills/rite-define/reference/gates.md +160 -0
- package/pack/generated/dsh/skills/rite-define/reference/plan-template.md +153 -0
- package/pack/generated/dsh/skills/rite-doctor/SKILL.md +107 -0
- package/pack/generated/dsh/skills/rite-dogfood/SKILL.md +57 -0
- package/pack/generated/dsh/skills/rite-explain/SKILL.md +154 -0
- package/pack/generated/dsh/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/dsh/skills/rite-fast/SKILL.md +185 -0
- package/pack/generated/dsh/skills/rite-fast/reference/artifacts.md +107 -0
- package/pack/generated/dsh/skills/rite-fast/reference/check-and-triage.md +51 -0
- package/pack/generated/dsh/skills/rite-frame/SKILL.md +119 -0
- package/pack/generated/dsh/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/dsh/skills/rite-handoff/SKILL.md +117 -0
- package/pack/generated/dsh/skills/rite-handoff/reference/handoff-template.md +56 -0
- package/pack/generated/dsh/skills/rite-harness/SKILL.md +76 -0
- package/pack/generated/dsh/skills/rite-harness/reference/feature-map.md +60 -0
- package/pack/generated/dsh/skills/rite-learn/SKILL.md +107 -0
- package/pack/generated/dsh/skills/rite-plan/SKILL.md +215 -0
- package/pack/generated/dsh/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/dsh/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/dsh/skills/rite-plan/reference/replan-and-repair.md +114 -0
- package/pack/generated/dsh/skills/rite-plan/reference/slicing.md +187 -0
- package/pack/generated/dsh/skills/rite-plan/reference/task-breakdown.md +50 -0
- package/pack/generated/dsh/skills/rite-polish/SKILL.md +128 -0
- package/pack/generated/dsh/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/dsh/skills/rite-polish/reference/anti-ai-slop.md +210 -0
- package/pack/generated/dsh/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/dsh/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/dsh/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/dsh/skills/rite-polish/reference/code.md +87 -0
- package/pack/generated/dsh/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/dsh/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/dsh/skills/rite-polish/reference/harden-checklist.md +110 -0
- package/pack/generated/dsh/skills/rite-polish/reference/ledger.md +67 -0
- package/pack/generated/dsh/skills/rite-polish/reference/ui.md +146 -0
- package/pack/generated/dsh/skills/rite-pov/SKILL.md +71 -0
- package/pack/generated/dsh/skills/rite-pr-feedback/SKILL.md +61 -0
- package/pack/generated/dsh/skills/rite-pressure-test/SKILL.md +76 -0
- package/pack/generated/dsh/skills/rite-prototype/SKILL.md +106 -0
- package/pack/generated/dsh/skills/rite-prove/SKILL.md +151 -0
- package/pack/generated/dsh/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/dsh/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/dsh/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/dsh/skills/rite-prove/reference/failure-triage.md +53 -0
- package/pack/generated/dsh/skills/rite-prove/reference/proof-ladder.md +39 -0
- package/pack/generated/dsh/skills/rite-prove/reference/test-command-discovery.md +36 -0
- package/pack/generated/dsh/skills/rite-quick/SKILL.md +97 -0
- package/pack/generated/dsh/skills/rite-resolve/SKILL.md +113 -0
- package/pack/generated/dsh/skills/rite-resolve/reference/answer-protocol.md +129 -0
- package/pack/generated/dsh/skills/rite-review/SKILL.md +190 -0
- package/pack/generated/dsh/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/dsh/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/dsh/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/dsh/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/dsh/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/dsh/skills/rite-review/reference/performance-checklist.md +99 -0
- package/pack/generated/dsh/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/dsh/skills/rite-review/reference/security-review.md +44 -0
- package/pack/generated/dsh/skills/rite-seal/SKILL.md +99 -0
- package/pack/generated/dsh/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/dsh/skills/rite-seal/reference/final-evidence.md +41 -0
- package/pack/generated/dsh/skills/rite-seal/reference/go-no-go.md +32 -0
- package/pack/generated/dsh/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/dsh/skills/rite-seal/reference/phase-contract.md +56 -0
- package/pack/generated/dsh/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/dsh/skills/rite-seal/reference/seal-template.md +32 -0
- package/pack/generated/dsh/skills/rite-ship/SKILL.md +101 -0
- package/pack/generated/dsh/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/dsh/skills/rite-ship/reference/close-out.md +69 -0
- package/pack/generated/dsh/skills/rite-ship/reference/git-ship.md +128 -0
- package/pack/generated/dsh/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/dsh/skills/rite-ship/reference/ship-template.md +40 -0
- package/pack/generated/dsh/skills/rite-spec/SKILL.md +169 -0
- package/pack/generated/dsh/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/dsh/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/dsh/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/dsh/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/dsh/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/dsh/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/dsh/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/dsh/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/dsh/skills/rite-spec/reference/spec-template.md +160 -0
- package/pack/generated/dsh/skills/rite-spec/reference/state-workspace.md +240 -0
- package/pack/generated/dsh/skills/rite-status/SKILL.md +74 -0
- package/pack/generated/dsh/skills/rite-temper/SKILL.md +137 -0
- package/pack/generated/dsh/skills/rite-temper/reference/anti-patterns.md +30 -0
- package/pack/generated/dsh/skills/rite-temper/reference/review-dimensions.md +66 -0
- package/pack/generated/dsh/skills/rite-temper/reference/scope-modes.md +52 -0
- package/pack/generated/dsh/skills/rite-temper/reference/significance.md +55 -0
- package/pack/generated/dsh/skills/rite-temper/reference/strategy-template.md +101 -0
- package/pack/generated/dsh/skills/rite-upgrade/SKILL.md +142 -0
- package/pack/generated/dsh/skills/rite-vet/SKILL.md +242 -0
- package/pack/generated/dsh/skills/rite-vet/reference/anti-patterns.md +43 -0
- package/pack/generated/dsh/skills/rite-vet/reference/artifacts.md +248 -0
- package/pack/generated/dsh/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/dsh/skills/rite-vet/reference/depth.md +59 -0
- package/pack/generated/dsh/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/dsh/skills/rite-vet/reference/review-axes.md +210 -0
- package/pack/generated/dsh/skills/rite-watch-pr/SKILL.md +87 -0
- package/pack/generated/dsh/skills/rite-zoom-out/SKILL.md +76 -0
- package/package.json +3 -1
- package/scripts/build-host-artifacts.sh +6 -2
- package/scripts/dsh-generate.py +165 -0
- package/scripts/dsh-specialist.mjs +85 -0
- package/scripts/install-lib.sh +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
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
|
+
## [7.2.1](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.0...v7.2.1) (2026-10-29)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **agents:** restore DSH code intelligence and skill discovery ([#185](https://github.com/ViktorsBaikers/DevRites/issues/185)) ([ab67651](https://github.com/ViktorsBaikers/DevRites/commit/ab67651aa3a9555fdf68e40859f3451ab20f42e7))
|
|
10
|
+
|
|
11
|
+
## [7.2.0](https://github.com/ViktorsBaikers/DevRites/compare/v7.1.2...v7.2.0) (2026-10-28)
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
* **installer:** add DSH specialist integration ([#184](https://github.com/ViktorsBaikers/DevRites/issues/184)) ([0fe9f07](https://github.com/ViktorsBaikers/DevRites/commit/0fe9f07be170eef1c581b9401b565a8688dc64b4))
|
|
16
|
+
|
|
5
17
|
## [7.1.2](https://github.com/ViktorsBaikers/DevRites/compare/v7.1.1...v7.1.2) (2026-10-28)
|
|
6
18
|
|
|
7
19
|
### Fixed
|
package/README.md
CHANGED
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
DevRites is a repository-local workflow for AI coding agents. It turns a
|
|
25
25
|
feature request into a spec, a sliced plan, working code, recorded proof, a
|
|
26
26
|
release decision, and an explicit ship step. It runs inside Claude Code, Codex,
|
|
27
|
-
omp, pi,
|
|
27
|
+
omp, pi, Devin CLI, and DSH.
|
|
28
28
|
|
|
29
29
|
DevRites keeps that work in `.devrites/` inside your repository, where chat
|
|
30
30
|
history can't lose it. After you clear the conversation, switch hosts, or hand
|
|
31
31
|
the feature to another engineer, the next session reads the same plan,
|
|
32
32
|
decisions, and evidence before it continues.
|
|
33
33
|
|
|
34
|
-
**Status:** [`v7.1
|
|
34
|
+
**Status:** [`v7.2.1`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.1): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
35
35
|
|
|
36
36
|
This is the latest published release; `main` may contain unreleased work.
|
|
37
37
|
|
|
@@ -64,8 +64,7 @@ root, then run /rite-doctor ($rite-doctor in Codex) and report any FAIL line
|
|
|
64
64
|
with its fix.
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
The installer adds project-local support for Claude Code, Codex, omp, pi, and
|
|
68
|
-
Devin CLI. It does not write skills, agents, or hooks to `~/.claude`,
|
|
67
|
+
The installer adds project-local support for Claude Code, Codex, omp, pi, Devin CLI, and DSH. It does not write skills, agents, or hooks to `~/.claude`,
|
|
69
68
|
`~/.codex`, `~/.pi`, or `~/.config/devin`.
|
|
70
69
|
|
|
71
70
|
**2. Pick the smallest route** that still protects the work.
|
|
@@ -306,6 +305,7 @@ Run `npx devrites@latest --help` for common flags and
|
|
|
306
305
|
| `--no-omp` | Skip `.omp` skills, agents, and command stubs. |
|
|
307
306
|
| `--no-pi` | Skip `.pi` skills, agents, prompt commands, and the pi `AGENTS.md` block. |
|
|
308
307
|
| `--no-devin` | Skip `.devin` skills, agents, and the Devin `AGENTS.md` block. |
|
|
308
|
+
| `--no-dsh` | Skip `.dsh` skills, named presets, permission guard, and the DSH `AGENTS.md` block. |
|
|
309
309
|
| `--no-agents` | Skip hook-free native specialist profiles. |
|
|
310
310
|
| `--no-skills` | Skip skills and their bundled standards. |
|
|
311
311
|
| `--no-binary` | Do not keep the shared `devrites-engine` binary in a user or system bin directory. On `uninstall`, keep the existing binary. |
|
|
@@ -424,6 +424,10 @@ that the intended publishing step produced it. See
|
|
|
424
424
|
|
|
425
425
|
## Hosts
|
|
426
426
|
|
|
427
|
+
For DSH, launch `npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml`
|
|
428
|
+
and select the **DevRites** agent preset before starting a workflow. See the
|
|
429
|
+
[DSH integration guide](docs/dsh.md) for permissions, dispatch, and result collection.
|
|
430
|
+
|
|
427
431
|
| Host | Skills | Agents | Also installs | Invoke |
|
|
428
432
|
| --- | --- | --- | --- | --- |
|
|
429
433
|
| **Claude Code** | `.claude/skills/` | `.claude/agents/` | Native root permissions merged into `.claude/settings.json` | `/rite-spec` |
|
|
@@ -431,6 +435,7 @@ that the intended publishing step produced it. See
|
|
|
431
435
|
| **omp** | `.omp/skills/` | `.omp/agents/` | Command stubs in `.omp/commands/`; `.omp/config.yml` hiding duplicate DevRites skills (only if absent) | `/rite-spec` or `/skill:rite-spec` |
|
|
432
436
|
| **pi** | `.pi/skills/` | `.pi/agents/` | Prompt commands in `.pi/prompts/`, marked block in `AGENTS.md`; with Codex, `.pi/settings.json` skipping the `.agents/skills` copies (only if absent) | `/rite-spec` or `/skill:rite-spec` |
|
|
433
437
|
| **Devin CLI** | `.devin/skills/` | `.devin/agents/` | Marked block in `AGENTS.md` | `/rite-spec` |
|
|
438
|
+
| **DSH** | `.dsh/skills/` | Named native agent presets; profiles in `.dsh/agents/` | `.dsh/cordis.patch.yml`, role permission guard, marked block in `AGENTS.md` | `/rite-spec` in the DevRites preset |
|
|
434
439
|
|
|
435
440
|
On every host, among the lifecycle `devrites-*` specialists only
|
|
436
441
|
`devrites-slice-wright` is writable and the rest are read-only and hook-free;
|
package/docs/dsh.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# DSH integration
|
|
2
|
+
|
|
3
|
+
The standard DevRites installer ships project-local DSH skills and named native
|
|
4
|
+
agent presets. To launch from the installed project's root:
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Choose **DevRites** (`devrites-orchestrator`) in the agent preset selector for a
|
|
11
|
+
new conversation, then use `/rite` or `/rite-spec`. The overlay loads alongside
|
|
12
|
+
your DSH profile; the installer does not edit your global DSH configuration.
|
|
13
|
+
Use `--no-dsh` with DevRites install/update to omit this host. Updates and
|
|
14
|
+
uninstall manage the same files through the existing hashed manifest.
|
|
15
|
+
|
|
16
|
+
Skills live under `.dsh/skills`, with native invocation flags preserved. Presets
|
|
17
|
+
with skill access mount DSH's filesystem skill provider before the skill tool
|
|
18
|
+
so installed skills are discovered in that preset's scope. The
|
|
19
|
+
`.dsh/agents` files retain the expanded canonical specialist instructions.
|
|
20
|
+
`.dsh/cordis.patch.yml` and `.dsh/specialist.mjs` register those exact identities
|
|
21
|
+
as native DSH presets and enforce their tool and permission boundaries.
|
|
22
|
+
|
|
23
|
+
The orchestrator calls `subagent` with an exact `agent_preset`, a self-contained
|
|
24
|
+
`prompt`, and a short `description`. Its configured backend is `spawn`, which creates a fresh
|
|
25
|
+
Session without the parent conversation. An omitted or unknown role is denied;
|
|
26
|
+
generic dispatch and fork are not substitutes. Specialists cannot delegate.
|
|
27
|
+
The root may use `list_agents`, `send_message`, and `interrupt_agent` to manage
|
|
28
|
+
its native children.
|
|
29
|
+
|
|
30
|
+
DSH delivers each child's final text and terminal status to the parent in a
|
|
31
|
+
settlement notice. A returned child id means dispatch was admitted; `inactive`
|
|
32
|
+
activity alone does not prove successful completion. The orchestrator collects
|
|
33
|
+
and reconciles every terminal result, including failures, before dependent work.
|
|
34
|
+
|
|
35
|
+
Read-only roles retain only their mapped tools and run shell commands under the
|
|
36
|
+
read-only sandbox. Shell-capable roles also receive native job tools to collect
|
|
37
|
+
background command output and stop their jobs. Writers have a workspace-write ceiling. The guard narrows
|
|
38
|
+
DSH's inherited parent override before each allowed call, preserves an existing
|
|
39
|
+
read-only parent boundary, and denies explicit sandbox escalation. Confining
|
|
40
|
+
shell and filesystem providers are required; an unconfined composition fails
|
|
41
|
+
closed. Tool access derives from canonical agent frontmatter; unsupported
|
|
42
|
+
Claude-specific tools are omitted. The writer's exact file list
|
|
43
|
+
remains a task contract checked by the orchestrator, as on the other hosts.
|
|
44
|
+
|
|
45
|
+
Codebase Memory MCP is optional. Install `codebase-memory-mcp` separately and
|
|
46
|
+
make the binary available on `PATH`, then load the supplied connection overlay:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
dsh web --patch .dsh/codebase-memory.patch.yml --patch .dsh/cordis.patch.yml
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The optional overlay registers one global `@deepseek-ai/dsh-mcp-client` stdio
|
|
53
|
+
connection named `codebase-memory-mcp`. If your DSH configuration already provides
|
|
54
|
+
that global connection, use only `.dsh/cordis.patch.yml`. Installation does not
|
|
55
|
+
install the MCP binary, start a server, or change global configuration. Without
|
|
56
|
+
the overlay or a configured connection, grep/glob/read remain available.
|
|
57
|
+
|
|
58
|
+
For a browser served on a local interface, keep launcher flags before app flags:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
dsh web --patch .dsh/codebase-memory.patch.yml --patch .dsh/cordis.patch.yml --no-open --host <local-interface-ip> --port 3080
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Canonical `mcp__codebase-memory-mcp__*` grants expand to a finite set of query
|
|
65
|
+
tools: index status, projects, schema, architecture, graph and code search, call
|
|
66
|
+
paths, snippets, file outlines, graph queries, change detection, coverage, and
|
|
67
|
+
graph comparisons. Individual supported query grants are also preserved. Roles
|
|
68
|
+
without a canonical grant receive none. Other MCP namespaces, unknown tools,
|
|
69
|
+
`delete_project`, `manage_adr`, and `ingest_traces` are denied. Only the root
|
|
70
|
+
orchestrator may use `index_repository`, with `persistence` omitted or `false`
|
|
71
|
+
for cache-only indexing; all specialists, including writers, cannot index.
|
|
72
|
+
|
|
73
|
+
Use graph queries first for structural questions, checking index status,
|
|
74
|
+
freshness, and coverage and verifying material findings in source. Use
|
|
75
|
+
grep/glob for literal searches. An unavailable server or missing index falls
|
|
76
|
+
back to grep/glob/read; a specialist may hand indexing to the parent. The tool
|
|
77
|
+
catalog refreshes when DSH registers or removes tools, including later successful
|
|
78
|
+
connections. DSH may retain registrations during a temporary connection loss.
|
|
79
|
+
MCP calls use the external server's permissions, outside DSH's shell/filesystem
|
|
80
|
+
sandbox. LSP integration is outside this adapter's scope.
|
|
81
|
+
|
|
82
|
+
The adapter targets the published DSH `0.2.1-rc.2` plugin interfaces, checked
|
|
83
|
+
against [DeepSeek Harness source](https://github.com/deepseek-ai/deepseek-harness)
|
|
84
|
+
at `f3803c96974ad4a94195fb97e5c637e9c2a3afe3`. DSH is a developer preview;
|
|
85
|
+
changes to its preset, tools, or sandbox interfaces require revalidation.
|
|
@@ -18,12 +18,14 @@ const (
|
|
|
18
18
|
OmpSkillsTarget = ".omp/skills"
|
|
19
19
|
PiSkillsTarget = ".pi/skills"
|
|
20
20
|
DevinSkillsTarget = ".devin/skills"
|
|
21
|
+
DshSkillsTarget = ".dsh/skills"
|
|
21
22
|
ClaudeAgentsTarget = ".claude/agents"
|
|
22
23
|
CodexAgentsTarget = ".codex/agents"
|
|
23
24
|
OmpAgentsTarget = ".omp/agents"
|
|
24
25
|
OmpCommandsTarget = ".omp/commands"
|
|
25
26
|
PiAgentsTarget = ".pi/agents"
|
|
26
27
|
DevinAgentsTarget = ".devin/agents"
|
|
28
|
+
DshAgentsTarget = ".dsh/agents"
|
|
27
29
|
PiPromptsTarget = ".pi/prompts"
|
|
28
30
|
ClaudeWorkflowsTarget = ".claude/workflows"
|
|
29
31
|
|
|
@@ -19,12 +19,14 @@ const (
|
|
|
19
19
|
OmpSkillsTarget = devritespaths.OmpSkillsTarget
|
|
20
20
|
PiSkillsTarget = devritespaths.PiSkillsTarget
|
|
21
21
|
DevinSkillsTarget = devritespaths.DevinSkillsTarget
|
|
22
|
+
DshSkillsTarget = devritespaths.DshSkillsTarget
|
|
22
23
|
ClaudeAgentsTarget = devritespaths.ClaudeAgentsTarget
|
|
23
24
|
CodexAgentsTarget = devritespaths.CodexAgentsTarget
|
|
24
25
|
OmpAgentsTarget = devritespaths.OmpAgentsTarget
|
|
25
26
|
OmpCommandsTarget = devritespaths.OmpCommandsTarget
|
|
26
27
|
PiAgentsTarget = devritespaths.PiAgentsTarget
|
|
27
28
|
DevinAgentsTarget = devritespaths.DevinAgentsTarget
|
|
29
|
+
DshAgentsTarget = devritespaths.DshAgentsTarget
|
|
28
30
|
PiPromptsTarget = devritespaths.PiPromptsTarget
|
|
29
31
|
ClaudeWorkflowsTarget = devritespaths.ClaudeWorkflowsTarget
|
|
30
32
|
)
|
|
@@ -111,6 +113,15 @@ var DevinAgentsMerge = MarkerMerge{
|
|
|
111
113
|
MarkerText: "AGENTS.md contains a DevRites managed block between BEGIN/END DEVRITES DEVIN markers.",
|
|
112
114
|
}
|
|
113
115
|
|
|
116
|
+
var DshAgentsMerge = MarkerMerge{
|
|
117
|
+
TargetRel: "AGENTS.md",
|
|
118
|
+
PayloadRel: "dsh/AGENTS.md",
|
|
119
|
+
Begin: "<!-- BEGIN DEVRITES DSH -->",
|
|
120
|
+
End: "<!-- END DEVRITES DSH -->",
|
|
121
|
+
MarkerRel: ".claude/devrites.dsh-agents-merge",
|
|
122
|
+
MarkerText: "AGENTS.md contains a DevRites managed block between BEGIN/END DEVRITES DSH markers.\n",
|
|
123
|
+
}
|
|
124
|
+
|
|
114
125
|
var CodexConfigMerge = MarkerMerge{
|
|
115
126
|
TargetRel: ".codex/config.toml",
|
|
116
127
|
PayloadRel: "codex/config.toml",
|
|
@@ -166,6 +177,7 @@ var LegacyCodexHooksMerge = ManagedMerge{
|
|
|
166
177
|
}
|
|
167
178
|
|
|
168
179
|
var managedMerges = []ManagedMerge{
|
|
180
|
+
{MarkerRel: DshAgentsMerge.MarkerRel, TargetRel: DshAgentsMerge.TargetRel, Begin: DshAgentsMerge.Begin, End: DshAgentsMerge.End, DryRun: "AGENTS.md DevRites DSH block"},
|
|
169
181
|
{
|
|
170
182
|
MarkerRel: CodexAgentsMerge.MarkerRel,
|
|
171
183
|
TargetRel: CodexAgentsMerge.TargetRel,
|
|
@@ -202,7 +214,7 @@ var managedMerges = []ManagedMerge{
|
|
|
202
214
|
LegacyCodexHooksMerge,
|
|
203
215
|
}
|
|
204
216
|
|
|
205
|
-
func RequiredPayload(withCodex, withOmp, withPi, withDevin bool) []string {
|
|
217
|
+
func RequiredPayload(withCodex, withOmp, withPi, withDevin, withDsh bool) []string {
|
|
206
218
|
required := []string{
|
|
207
219
|
"claude/skills",
|
|
208
220
|
"claude/agents",
|
|
@@ -240,11 +252,14 @@ func RequiredPayload(withCodex, withOmp, withPi, withDevin bool) []string {
|
|
|
240
252
|
"devin/AGENTS.md",
|
|
241
253
|
)
|
|
242
254
|
}
|
|
255
|
+
if withDsh {
|
|
256
|
+
required = append(required, "dsh/skills", "dsh/agents", "dsh/runtime/cordis.patch.yml", "dsh/runtime/specialist.mjs", "dsh/AGENTS.md")
|
|
257
|
+
}
|
|
243
258
|
return required
|
|
244
259
|
}
|
|
245
260
|
|
|
246
|
-
func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin bool) error {
|
|
247
|
-
for _, rel := range RequiredPayload(withCodex, withOmp, withPi, withDevin) {
|
|
261
|
+
func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin, withDsh bool) error {
|
|
262
|
+
for _, rel := range RequiredPayload(withCodex, withOmp, withPi, withDevin, withDsh) {
|
|
248
263
|
if _, err := fs.Stat(payload, rel); err != nil {
|
|
249
264
|
return fmt.Errorf("missing %s", rel)
|
|
250
265
|
}
|
|
@@ -252,7 +267,7 @@ func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin bool)
|
|
|
252
267
|
return nil
|
|
253
268
|
}
|
|
254
269
|
|
|
255
|
-
func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin bool) []Tree {
|
|
270
|
+
func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin, withDsh bool) []Tree {
|
|
256
271
|
var trees []Tree
|
|
257
272
|
if withSkills {
|
|
258
273
|
trees = append(trees, Tree{PayloadPrefix: "claude/skills", TargetPrefix: ClaudeSkillsTarget})
|
|
@@ -274,6 +289,9 @@ func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin
|
|
|
274
289
|
if withDevin {
|
|
275
290
|
trees = append(trees, Tree{PayloadPrefix: "devin/skills", TargetPrefix: DevinSkillsTarget})
|
|
276
291
|
}
|
|
292
|
+
if withDsh {
|
|
293
|
+
trees = append(trees, Tree{PayloadPrefix: "dsh/skills", TargetPrefix: DshSkillsTarget})
|
|
294
|
+
}
|
|
277
295
|
}
|
|
278
296
|
if withAgents {
|
|
279
297
|
trees = append(trees, Tree{PayloadPrefix: "claude/agents", TargetPrefix: ClaudeAgentsTarget})
|
|
@@ -290,13 +308,16 @@ func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin
|
|
|
290
308
|
trees = append(trees, Tree{PayloadPrefix: "devin/agents", TargetPrefix: DevinAgentsTarget})
|
|
291
309
|
}
|
|
292
310
|
}
|
|
311
|
+
if withAgents && withDsh {
|
|
312
|
+
trees = append(trees, Tree{PayloadPrefix: "dsh/agents", TargetPrefix: DshAgentsTarget}, Tree{PayloadPrefix: "dsh/runtime", TargetPrefix: ".dsh"})
|
|
313
|
+
}
|
|
293
314
|
if withSkills && withAgents {
|
|
294
315
|
trees = append(trees, Tree{PayloadPrefix: "claude/workflows", TargetPrefix: ClaudeWorkflowsTarget})
|
|
295
316
|
}
|
|
296
317
|
return trees
|
|
297
318
|
}
|
|
298
319
|
|
|
299
|
-
func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin bool) []string {
|
|
320
|
+
func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin, withDsh bool) []string {
|
|
300
321
|
targets := []string{filepath.ToSlash(filepath.Join(ClaudeSkillsTarget, alias.Name, "SKILL.md"))}
|
|
301
322
|
if withCodex {
|
|
302
323
|
targets = append(targets, filepath.ToSlash(filepath.Join(CodexSkillsTarget, alias.Name, "SKILL.md")))
|
|
@@ -310,6 +331,9 @@ func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin bool) []str
|
|
|
310
331
|
if withDevin {
|
|
311
332
|
targets = append(targets, filepath.ToSlash(filepath.Join(DevinSkillsTarget, alias.Name, "SKILL.md")))
|
|
312
333
|
}
|
|
334
|
+
if withDsh {
|
|
335
|
+
targets = append(targets, filepath.ToSlash(filepath.Join(DshSkillsTarget, alias.Name, "SKILL.md")))
|
|
336
|
+
}
|
|
313
337
|
return targets
|
|
314
338
|
}
|
|
315
339
|
|
|
@@ -26,6 +26,7 @@ func (r *runner) install() error {
|
|
|
26
26
|
fmt.Fprintf(r.opts.Stdout, " omp : %s\n", yesno(r.opts.WithOmp))
|
|
27
27
|
fmt.Fprintf(r.opts.Stdout, " pi : %s\n", yesno(r.opts.WithPi))
|
|
28
28
|
fmt.Fprintf(r.opts.Stdout, " devin : %s\n", yesno(r.opts.WithDevin))
|
|
29
|
+
fmt.Fprintf(r.opts.Stdout, " dsh : %s\n", yesno(r.opts.WithDsh))
|
|
29
30
|
fmt.Fprintf(r.opts.Stdout, " aliases: %s\n", r.opts.AliasMode)
|
|
30
31
|
if r.opts.DryRun {
|
|
31
32
|
fmt.Fprintln(r.opts.Stdout, " (dry run - no changes will be made)")
|
|
@@ -43,7 +44,7 @@ func (r *runner) install() error {
|
|
|
43
44
|
return err
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
|
|
47
|
+
for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
|
|
47
48
|
if err := r.installTree(tree.PayloadPrefix, tree.TargetPrefix); err != nil {
|
|
48
49
|
return fmt.Errorf("install tree %s: %w", tree.TargetPrefix, err)
|
|
49
50
|
}
|
|
@@ -54,7 +55,7 @@ func (r *runner) install() error {
|
|
|
54
55
|
if err != nil {
|
|
55
56
|
return fmt.Errorf("render alias skill %s: %w", alias.Name, err)
|
|
56
57
|
}
|
|
57
|
-
for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
|
|
58
|
+
for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
|
|
58
59
|
if err := r.installData(data, rel); err != nil {
|
|
59
60
|
return fmt.Errorf("install alias: %w", err)
|
|
60
61
|
}
|
|
@@ -79,6 +80,11 @@ func (r *runner) install() error {
|
|
|
79
80
|
return fmt.Errorf("merge %s: %w", hostpack.DevinAgentsMerge.TargetRel, err)
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
if r.opts.WithSkills && r.opts.WithDsh {
|
|
84
|
+
if err := r.mergeMarkerFile(hostpack.DshAgentsMerge); err != nil {
|
|
85
|
+
return fmt.Errorf("merge %s: %w", hostpack.DshAgentsMerge.TargetRel, err)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
82
88
|
if r.opts.WithSkills {
|
|
83
89
|
if err := r.seedClaudeSettings(); err != nil {
|
|
84
90
|
return fmt.Errorf("seed claude settings: %w", err)
|
|
@@ -112,6 +118,9 @@ func (r *runner) install() error {
|
|
|
112
118
|
}
|
|
113
119
|
fmt.Fprintf(r.opts.Stdout, " installed: %d overwritten: %d skipped(conflict): %d pruned: %d\n", r.stats.installed, r.stats.overwrote, r.stats.skipped, r.stats.pruned)
|
|
114
120
|
if !r.opts.DryRun && r.opts.WithSkills {
|
|
121
|
+
if r.opts.WithDsh && r.opts.WithAgents {
|
|
122
|
+
fmt.Fprintln(r.opts.Stdout, "DSH: run npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml, then select the DevRites preset.")
|
|
123
|
+
}
|
|
115
124
|
claudeHosts := "Claude"
|
|
116
125
|
if r.opts.WithDevin {
|
|
117
126
|
claudeHosts = "Claude/Devin"
|
|
@@ -445,6 +454,9 @@ func (r *runner) flagsString() string {
|
|
|
445
454
|
if !r.opts.WithDevin {
|
|
446
455
|
flags = append(flags, "--no-devin")
|
|
447
456
|
}
|
|
457
|
+
if !r.opts.WithDsh {
|
|
458
|
+
flags = append(flags, "--no-dsh")
|
|
459
|
+
}
|
|
448
460
|
if !r.opts.WithBinary {
|
|
449
461
|
flags = append(flags, "--no-binary")
|
|
450
462
|
}
|
|
@@ -37,6 +37,7 @@ type Options struct {
|
|
|
37
37
|
WithOmp bool
|
|
38
38
|
WithPi bool
|
|
39
39
|
WithDevin bool
|
|
40
|
+
WithDsh bool
|
|
40
41
|
WithBinary bool
|
|
41
42
|
KeepBinary bool
|
|
42
43
|
AliasMode string
|
|
@@ -91,6 +92,7 @@ func DefaultOptions(mode Mode) Options {
|
|
|
91
92
|
WithOmp: true,
|
|
92
93
|
WithPi: true,
|
|
93
94
|
WithDevin: true,
|
|
95
|
+
WithDsh: true,
|
|
94
96
|
WithBinary: true,
|
|
95
97
|
AliasMode: "safe",
|
|
96
98
|
Stdout: io.Discard,
|
|
@@ -145,6 +147,7 @@ func parseArgs(args []string, opts *Options) error {
|
|
|
145
147
|
noOmp := flags.Bool("no-omp", !opts.WithOmp, "")
|
|
146
148
|
noPi := flags.Bool("no-pi", !opts.WithPi, "")
|
|
147
149
|
noDevin := flags.Bool("no-devin", !opts.WithDevin, "")
|
|
150
|
+
noDsh := flags.Bool("no-dsh", !opts.WithDsh, "")
|
|
148
151
|
noAgents := flags.Bool("no-agents", !opts.WithAgents, "")
|
|
149
152
|
noSkills := flags.Bool("no-skills", !opts.WithSkills, "")
|
|
150
153
|
noBinary := flags.Bool("no-binary", !opts.WithBinary, "")
|
|
@@ -174,6 +177,7 @@ func parseArgs(args []string, opts *Options) error {
|
|
|
174
177
|
opts.WithOmp = !*noOmp
|
|
175
178
|
opts.WithPi = !*noPi
|
|
176
179
|
opts.WithDevin = !*noDevin
|
|
180
|
+
opts.WithDsh = !*noDsh
|
|
177
181
|
opts.WithAgents = !*noAgents
|
|
178
182
|
opts.WithSkills = !*noSkills
|
|
179
183
|
opts.WithBinary = !*noBinary
|
|
@@ -220,7 +224,7 @@ func usage(mode Mode) string {
|
|
|
220
224
|
case ModeUpdate:
|
|
221
225
|
return "usage: devrites-engine update [--target DIR] [--dry-run] [--force] [--check] [install flags] [--source-dir DIR --payload-dir DIR]\n"
|
|
222
226
|
default:
|
|
223
|
-
return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-omp] [--no-pi] [--no-devin] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
|
|
227
|
+
return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-omp] [--no-pi] [--no-devin] [--no-dsh] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
|
|
224
228
|
}
|
|
225
229
|
}
|
|
226
230
|
|
|
@@ -351,7 +355,7 @@ func (r *runner) validatePayload() error {
|
|
|
351
355
|
if r.payload == "" {
|
|
352
356
|
return fmt.Errorf("generated install payload not found; pass --payload-dir or run scripts/build-host-artifacts.sh")
|
|
353
357
|
}
|
|
354
|
-
if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin); err != nil {
|
|
358
|
+
if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh); err != nil {
|
|
355
359
|
return fmt.Errorf("generated install payload under %s: %w", r.payload, err)
|
|
356
360
|
}
|
|
357
361
|
return nil
|
|
@@ -370,7 +374,7 @@ func isGlobalTarget(target string) bool {
|
|
|
370
374
|
if target == h {
|
|
371
375
|
return true
|
|
372
376
|
}
|
|
373
|
-
for _, rel := range []string{".claude", ".codex", ".omp", ".pi", ".devin", filepath.Join(".config", "devin"), ".agents"} {
|
|
377
|
+
for _, rel := range []string{".claude", ".codex", ".omp", ".pi", ".devin", ".dsh", filepath.Join(".config", "devin"), ".agents"} {
|
|
374
378
|
global := filepath.Join(h, rel)
|
|
375
379
|
globals := []string{global}
|
|
376
380
|
if resolved, err := filepath.EvalSymlinks(global); err == nil {
|
|
@@ -176,6 +176,7 @@ func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.Marke
|
|
|
176
176
|
{r.opts.WithCodex, hostpack.CodexAgentsMerge},
|
|
177
177
|
{r.opts.WithPi, hostpack.PiAgentsMerge},
|
|
178
178
|
{r.opts.WithDevin, hostpack.DevinAgentsMerge},
|
|
179
|
+
{r.opts.WithDsh, hostpack.DshAgentsMerge},
|
|
179
180
|
} {
|
|
180
181
|
if other.enabled && other.merge.TargetRel == merge.TargetRel && other.merge.Begin != merge.Begin {
|
|
181
182
|
merges = append(merges, other.merge)
|
|
@@ -90,6 +90,7 @@ func (r *runner) preflightMerges() error {
|
|
|
90
90
|
{r.opts.WithCodex, hostpack.CodexAgentsMerge},
|
|
91
91
|
{r.opts.WithPi, hostpack.PiAgentsMerge},
|
|
92
92
|
{r.opts.WithDevin, hostpack.DevinAgentsMerge},
|
|
93
|
+
{r.opts.WithDsh, hostpack.DshAgentsMerge},
|
|
93
94
|
} {
|
|
94
95
|
if !m.enabled {
|
|
95
96
|
continue
|
|
@@ -160,7 +161,7 @@ func (r *runner) isPinnedAlias(rel string) bool {
|
|
|
160
161
|
|
|
161
162
|
func (r *runner) desiredInstallPaths() (map[string]bool, error) {
|
|
162
163
|
out := map[string]bool{".devrites/README.md": true}
|
|
163
|
-
for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
|
|
164
|
+
for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
|
|
164
165
|
err := fs.WalkDir(r.payloadFS, tree.PayloadPrefix, func(path string, d fs.DirEntry, err error) error {
|
|
165
166
|
if err != nil {
|
|
166
167
|
return err
|
|
@@ -181,7 +182,7 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
|
|
|
181
182
|
}
|
|
182
183
|
if r.opts.WithSkills && r.opts.AliasMode == "all" {
|
|
183
184
|
for _, alias := range hostpack.Aliases {
|
|
184
|
-
for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
|
|
185
|
+
for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
|
|
185
186
|
out[rel] = true
|
|
186
187
|
}
|
|
187
188
|
}
|
|
@@ -196,6 +197,9 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
|
|
|
196
197
|
if r.opts.WithSkills && r.opts.WithDevin {
|
|
197
198
|
out[hostpack.DevinAgentsMerge.MarkerRel] = true
|
|
198
199
|
}
|
|
200
|
+
if r.opts.WithSkills && r.opts.WithDsh {
|
|
201
|
+
out[hostpack.DshAgentsMerge.MarkerRel] = true
|
|
202
|
+
}
|
|
199
203
|
if r.opts.WithSkills {
|
|
200
204
|
out[hostpack.ClaudeSettingsMerge.MarkerRel] = true
|
|
201
205
|
}
|
|
@@ -218,6 +222,9 @@ func (r *runner) installMergeTargets() []string {
|
|
|
218
222
|
if r.opts.WithDevin {
|
|
219
223
|
out = append(out, hostpack.DevinAgentsMerge.TargetRel)
|
|
220
224
|
}
|
|
225
|
+
if r.opts.WithDsh {
|
|
226
|
+
out = append(out, hostpack.DshAgentsMerge.TargetRel)
|
|
227
|
+
}
|
|
221
228
|
}
|
|
222
229
|
return out
|
|
223
230
|
}
|
|
@@ -65,7 +65,7 @@ func runUpdate(opts Options) error {
|
|
|
65
65
|
if err != nil {
|
|
66
66
|
return fmt.Errorf("resolve payload %s: %w", opts.PayloadDir, err)
|
|
67
67
|
}
|
|
68
|
-
if err := hostpack.ValidatePayload(os.DirFS(payload), true, true, true, true); err != nil {
|
|
68
|
+
if err := hostpack.ValidatePayload(os.DirFS(payload), true, true, true, true, true); err != nil {
|
|
69
69
|
return fmt.Errorf("local update payload under %s is invalid: %w", payload, err)
|
|
70
70
|
}
|
|
71
71
|
installFlags := manifestHeader(mf, "devrites-flags")
|
|
@@ -68,7 +68,7 @@ func lintKnownRoles(root, phase string, roles []string) error {
|
|
|
68
68
|
skillsRoots = append(skillsRoots, dir)
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills"} {
|
|
71
|
+
for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills", ".dsh/skills"} {
|
|
72
72
|
dir := filepath.Join(project, filepath.FromSlash(rel))
|
|
73
73
|
if info, err := os.Stat(filepath.Join(dir, "devrites-lib")); err == nil && info.IsDir() {
|
|
74
74
|
skillsRoots = append(skillsRoots, dir)
|
package/pack/generated/README.md
CHANGED
|
@@ -13,6 +13,8 @@ This directory is generated by `scripts/build-host-artifacts.sh`.
|
|
|
13
13
|
- `devin/` contains Devin CLI skill mirrors, custom subagent profiles with
|
|
14
14
|
`allowed-tools` allowlists, and an `AGENTS.md` bridge block.
|
|
15
15
|
|
|
16
|
+
- `dsh/` contains DSH skills, canonical role profiles, a native preset overlay, and a permission guard.
|
|
17
|
+
|
|
16
18
|
Do not edit these files by hand. Edit `pack/.claude/`,
|
|
17
19
|
`scripts/codex-generate.sh`, `scripts/omp-generate.sh`,
|
|
18
|
-
`scripts/pi-generate.sh`,
|
|
20
|
+
`scripts/pi-generate.sh`, `scripts/devin-generate.sh`, or `scripts/dsh-generate.py`, then rebuild.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- BEGIN DEVRITES DSH -->
|
|
2
|
+
# DevRites for DSH
|
|
3
|
+
|
|
4
|
+
Use the installed skills under `.dsh/skills` and invoke `/rite` or `/rite-<verb>`.
|
|
5
|
+
Read `.dsh/skills/devrites-lib/reference/standards/core.md` before a workflow.
|
|
6
|
+
Dispatch means call `subagent` with `agent_preset` set to the exact named specialist,
|
|
7
|
+
a self-contained `prompt`, and a short `description`. Every dispatch uses the native
|
|
8
|
+
`spawn` provider, a fresh Session with zero parent conversation. Never use a generic
|
|
9
|
+
agent, inherit the orchestrator preset, or use `subagent_fork` as a substitute.
|
|
10
|
+
Include the exact project-relative allowed paths and required evidence in the prompt.
|
|
11
|
+
The child id returned by `subagent` is an admission receipt, not a completed result.
|
|
12
|
+
Collect the native parent settlement notice for each id, including final text and
|
|
13
|
+
terminal status. `list_agents` activity `inactive` does not prove success. Reconcile
|
|
14
|
+
every result and compare returned paths with the contract before continuing.
|
|
15
|
+
Missing preset, failed activation, interrupted execution, or missing result blocks
|
|
16
|
+
the dependent work. Report the failure; never impersonate the specialist inline.
|
|
17
|
+
The orchestrator writes workspace bookkeeping; only the named writer writes source
|
|
18
|
+
and tests within its path contract. No skill or result authorizes commits, pushes,
|
|
19
|
+
publishing, deployment, or other irreversible actions without explicit approval.
|
|
20
|
+
Use configured Codebase Memory MCP queries first for structural code questions.
|
|
21
|
+
Check index status, freshness, and coverage before relying on graph results; verify
|
|
22
|
+
material findings in source. Only the orchestrator may index, using cache-only
|
|
23
|
+
`index_repository` with persistence omitted or false. Children never index: hand
|
|
24
|
+
missing or stale coverage to the parent, or use grep/glob/read for source fallback.
|
|
25
|
+
If the MCP server or index is unavailable, continue with grep/glob/read. Keep
|
|
26
|
+
grep/glob for literal searches. MCP permissions are separate from the file sandbox.
|
|
27
|
+
<!-- END DEVRITES DSH -->
|