dsh-compound-engineering 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +160 -2
- package/README.zh.md +161 -0
- package/cordis.patch.yml +6 -0
- package/lib/frontmatter.js +167 -0
- package/lib/index.js +46 -0
- package/lib/provider.js +201 -0
- package/package.json +62 -4
- package/skills/CODING_STANDARDS.md +68 -0
- package/skills/ce-babysit-pr/SKILL.md +59 -0
- package/skills/ce-babysit-pr/references/branch-currency.md +22 -0
- package/skills/ce-babysit-pr/references/envelope.md +44 -0
- package/skills/ce-babysit-pr/references/pipeline.md +15 -0
- package/skills/ce-babysit-pr/references/report.md +20 -0
- package/skills/ce-babysit-pr/references/settle.md +37 -0
- package/skills/ce-babysit-pr/references/setup.md +33 -0
- package/skills/ce-babysit-pr/references/stack-commands.md +39 -0
- package/skills/ce-babysit-pr/references/stack.md +43 -0
- package/skills/ce-babysit-pr/references/tick.md +102 -0
- package/skills/ce-babysit-pr/references/watch-loop.md +222 -0
- package/skills/ce-babysit-pr/scripts/pr-snapshot +3656 -0
- package/skills/ce-bakeoff/SKILL.md +48 -0
- package/skills/ce-bakeoff/references/candidates.md +37 -0
- package/skills/ce-bakeoff/references/judging.md +19 -0
- package/skills/ce-bakeoff/references/output.md +11 -0
- package/skills/ce-bakeoff/references/verification.md +15 -0
- package/skills/ce-brainstorm/SKILL.md +69 -0
- package/skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
- package/skills/ce-brainstorm/references/approaches.md +57 -0
- package/skills/ce-brainstorm/references/bakeoff.md +9 -0
- package/skills/ce-brainstorm/references/blindspot-pass.md +70 -0
- package/skills/ce-brainstorm/references/brainstorm-sections.md +458 -0
- package/skills/ce-brainstorm/references/dialogue.md +89 -0
- package/skills/ce-brainstorm/references/handoff.md +187 -0
- package/skills/ce-brainstorm/references/html-rendering.md +638 -0
- package/skills/ce-brainstorm/references/interaction-rules.md +33 -0
- package/skills/ce-brainstorm/references/markdown-rendering.md +242 -0
- package/skills/ce-brainstorm/references/model-tiers.md +13 -0
- package/skills/ce-brainstorm/references/output-mode.md +26 -0
- package/skills/ce-brainstorm/references/phase-0.md +104 -0
- package/skills/ce-brainstorm/references/plan-write.md +32 -0
- package/skills/ce-brainstorm/references/product-pressure-test.md +42 -0
- package/skills/ce-brainstorm/references/reasoning-elevation.md +124 -0
- package/skills/ce-brainstorm/references/settled-decisions.md +45 -0
- package/skills/ce-brainstorm/references/synthesis-summary.md +149 -0
- package/skills/ce-brainstorm/references/universal-brainstorming.md +72 -0
- package/skills/ce-brainstorm/references/verdict-routing.md +26 -0
- package/skills/ce-brainstorm/references/visual-probes.md +164 -0
- package/skills/ce-brainstorm/scripts/elevation-dispatch.sh +288 -0
- package/skills/ce-brainstorm/scripts/light-webserver.js +1275 -0
- package/skills/ce-brainstorm/scripts/packs-resolve.py +737 -0
- package/skills/ce-brainstorm/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-code-review/SKILL.md +40 -0
- package/skills/ce-code-review/references/action-class-rubric.md +67 -0
- package/skills/ce-code-review/references/cross-model-recovery.md +38 -0
- package/skills/ce-code-review/references/cross-model-review.md +191 -0
- package/skills/ce-code-review/references/depth-paths.md +32 -0
- package/skills/ce-code-review/references/diff-scope.md +59 -0
- package/skills/ce-code-review/references/dispatch-reviewers.md +135 -0
- package/skills/ce-code-review/references/findings-schema.json +125 -0
- package/skills/ce-code-review/references/finish-input.md +118 -0
- package/skills/ce-code-review/references/finish-review.md +202 -0
- package/skills/ce-code-review/references/intent-and-plan.md +73 -0
- package/skills/ce-code-review/references/modes-and-output.md +156 -0
- package/skills/ce-code-review/references/persona-catalog.md +66 -0
- package/skills/ce-code-review/references/personas/adversarial-reviewer.md +111 -0
- package/skills/ce-code-review/references/personas/agent-native-reviewer.md +173 -0
- package/skills/ce-code-review/references/personas/api-contract-reviewer.md +44 -0
- package/skills/ce-code-review/references/personas/correctness-reviewer.md +48 -0
- package/skills/ce-code-review/references/personas/data-migration-reviewer.md +111 -0
- package/skills/ce-code-review/references/personas/deployment-verification-agent.md +157 -0
- package/skills/ce-code-review/references/personas/julik-frontend-races-reviewer.md +45 -0
- package/skills/ce-code-review/references/personas/learnings-researcher.md +260 -0
- package/skills/ce-code-review/references/personas/maintainability-reviewer.md +85 -0
- package/skills/ce-code-review/references/personas/performance-reviewer.md +45 -0
- package/skills/ce-code-review/references/personas/previous-comments-reviewer.md +59 -0
- package/skills/ce-code-review/references/personas/project-standards-reviewer.md +77 -0
- package/skills/ce-code-review/references/personas/reliability-reviewer.md +49 -0
- package/skills/ce-code-review/references/personas/security-reviewer.md +50 -0
- package/skills/ce-code-review/references/personas/swift-ios-reviewer.md +99 -0
- package/skills/ce-code-review/references/personas/testing-reviewer.md +51 -0
- package/skills/ce-code-review/references/review-output-template.md +172 -0
- package/skills/ce-code-review/references/scope.md +176 -0
- package/skills/ce-code-review/references/select-and-route.md +93 -0
- package/skills/ce-code-review/references/subagent-template.md +206 -0
- package/skills/ce-code-review/references/validator-batch-template.md +67 -0
- package/skills/ce-code-review/scripts/cross-model-adversarial-review.sh +1275 -0
- package/skills/ce-code-review/scripts/findings-mechanics.py +274 -0
- package/skills/ce-code-review/scripts/packs-resolve.py +737 -0
- package/skills/ce-code-review/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-code-review/scripts/review-scope.py +419 -0
- package/skills/ce-code-review/scripts/run-log.py +280 -0
- package/skills/ce-commit/SKILL.md +60 -0
- package/skills/ce-commit-push-pr/SKILL.md +69 -0
- package/skills/ce-commit-push-pr/references/apply-and-handoff.md +79 -0
- package/skills/ce-commit-push-pr/references/branch-creation.md +47 -0
- package/skills/ce-commit-push-pr/references/commit-and-push.md +26 -0
- package/skills/ce-commit-push-pr/references/compose.md +29 -0
- package/skills/ce-commit-push-pr/references/context.md +42 -0
- package/skills/ce-commit-push-pr/references/gh-stack-cli.md +83 -0
- package/skills/ce-commit-push-pr/references/pr-description-writing.md +208 -0
- package/skills/ce-commit-push-pr/references/stack-submit.md +81 -0
- package/skills/ce-compound/SKILL.md +79 -0
- package/skills/ce-compound/assets/resolution-template.md +96 -0
- package/skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
- package/skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
- package/skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
- package/skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
- package/skills/ce-compound/references/agents/performance-oracle.md +108 -0
- package/skills/ce-compound/references/agents/security-sentinel.md +91 -0
- package/skills/ce-compound/references/agents/session-historian.md +82 -0
- package/skills/ce-compound/references/assembly.md +127 -0
- package/skills/ce-compound/references/concepts-vocabulary.md +98 -0
- package/skills/ce-compound/references/enhancement.md +42 -0
- package/skills/ce-compound/references/grounding-validation.md +89 -0
- package/skills/ce-compound/references/lightweight.md +56 -0
- package/skills/ce-compound/references/modes.md +13 -0
- package/skills/ce-compound/references/refresh-and-discoverability.md +96 -0
- package/skills/ce-compound/references/report.md +115 -0
- package/skills/ce-compound/references/research.md +144 -0
- package/skills/ce-compound/references/schema.yaml +236 -0
- package/skills/ce-compound/references/session-history.md +73 -0
- package/skills/ce-compound/references/yaml-schema.md +130 -0
- package/skills/ce-compound/scripts/packs-resolve.py +737 -0
- package/skills/ce-compound/scripts/session-history/__pycache__/dsh_session.cpython-314.pyc +0 -0
- package/skills/ce-compound/scripts/session-history/discover-sessions.sh +290 -0
- package/skills/ce-compound/scripts/session-history/discover_dsh.py +123 -0
- package/skills/ce-compound/scripts/session-history/dsh_session.py +225 -0
- package/skills/ce-compound/scripts/session-history/extract-errors.py +178 -0
- package/skills/ce-compound/scripts/session-history/extract-metadata.py +301 -0
- package/skills/ce-compound/scripts/session-history/extract-skeleton.py +346 -0
- package/skills/ce-compound/scripts/validate-doc-claims.py +497 -0
- package/skills/ce-compound/scripts/validate-frontmatter.py +137 -0
- package/skills/ce-compound-refresh/SKILL.md +88 -0
- package/skills/ce-compound-refresh/assets/resolution-template.md +96 -0
- package/skills/ce-compound-refresh/references/classify.md +42 -0
- package/skills/ce-compound-refresh/references/commit.md +7 -0
- package/skills/ce-compound-refresh/references/concepts-vocabulary.md +116 -0
- package/skills/ce-compound-refresh/references/discoverability.md +15 -0
- package/skills/ce-compound-refresh/references/investigate.md +23 -0
- package/skills/ce-compound-refresh/references/modes.md +27 -0
- package/skills/ce-compound-refresh/references/per-action-flows.md +142 -0
- package/skills/ce-compound-refresh/references/report.md +23 -0
- package/skills/ce-compound-refresh/references/schema.yaml +236 -0
- package/skills/ce-compound-refresh/references/scope.md +18 -0
- package/skills/ce-compound-refresh/references/worth-audit.md +35 -0
- package/skills/ce-compound-refresh/references/yaml-schema.md +130 -0
- package/skills/ce-compound-refresh/scripts/validate-doc-claims.py +497 -0
- package/skills/ce-compound-refresh/scripts/validate-frontmatter.py +137 -0
- package/skills/ce-debug/SKILL.md +122 -0
- package/skills/ce-debug/references/anti-patterns.md +91 -0
- package/skills/ce-debug/references/defense-in-depth.md +39 -0
- package/skills/ce-debug/references/fix.md +21 -0
- package/skills/ce-debug/references/investigate.md +114 -0
- package/skills/ce-debug/references/investigation-techniques.md +384 -0
- package/skills/ce-debug/references/pipeline-mode.md +78 -0
- package/skills/ce-debug/references/post-fix-handoff.md +60 -0
- package/skills/ce-debug/references/return-to-caller.md +57 -0
- package/skills/ce-doc-review/SKILL.md +75 -0
- package/skills/ce-doc-review/references/bulk-preview.md +146 -0
- package/skills/ce-doc-review/references/cross-model-review.md +207 -0
- package/skills/ce-doc-review/references/decision-primer.md +47 -0
- package/skills/ce-doc-review/references/dispatch.md +56 -0
- package/skills/ce-doc-review/references/document-intake.md +44 -0
- package/skills/ce-doc-review/references/findings-schema.json +85 -0
- package/skills/ce-doc-review/references/modes.md +20 -0
- package/skills/ce-doc-review/references/open-questions-defer.md +158 -0
- package/skills/ce-doc-review/references/persona-selection.md +41 -0
- package/skills/ce-doc-review/references/personas/adversarial-document-reviewer.md +109 -0
- package/skills/ce-doc-review/references/personas/coherence-reviewer.md +69 -0
- package/skills/ce-doc-review/references/personas/design-lens-reviewer.md +48 -0
- package/skills/ce-doc-review/references/personas/feasibility-reviewer.md +50 -0
- package/skills/ce-doc-review/references/personas/product-lens-reviewer.md +85 -0
- package/skills/ce-doc-review/references/personas/scope-guardian-reviewer.md +83 -0
- package/skills/ce-doc-review/references/personas/security-lens-reviewer.md +41 -0
- package/skills/ce-doc-review/references/personas/whole-doc-reviewer.md +25 -0
- package/skills/ce-doc-review/references/rendering-floor.md +175 -0
- package/skills/ce-doc-review/references/review-output-template.md +123 -0
- package/skills/ce-doc-review/references/subagent-template.md +188 -0
- package/skills/ce-doc-review/references/synthesis-and-presentation.md +350 -0
- package/skills/ce-doc-review/references/walkthrough.md +347 -0
- package/skills/ce-doc-review/scripts/cross-model-doc-review.sh +1270 -0
- package/skills/ce-doc-review/scripts/packs-resolve.py +737 -0
- package/skills/ce-doc-review/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-dogfood/SKILL.md +66 -0
- package/skills/ce-dogfood/agents/openai.yaml +2 -0
- package/skills/ce-dogfood/references/dogfood-report-template.md +97 -0
- package/skills/ce-dogfood/references/phases.md +167 -0
- package/skills/ce-dogfood/references/test-matrix-taxonomy.md +62 -0
- package/skills/ce-dogfood/scripts/packs-resolve.py +737 -0
- package/skills/ce-explain/SKILL.md +81 -0
- package/skills/ce-explain/references/agents/behavior-trace-scout.md +19 -0
- package/skills/ce-explain/references/agents/work-recap-scout.md +23 -0
- package/skills/ce-explain/references/check-in.md +18 -0
- package/skills/ce-explain/references/destinations.md +35 -0
- package/skills/ce-explain/references/explainer-html.md +29 -0
- package/skills/ce-explain/references/explainer-markdown.md +24 -0
- package/skills/ce-explain/references/intake.md +50 -0
- package/skills/ce-explain/references/orchestration.md +46 -0
- package/skills/ce-handoff/SKILL.md +54 -0
- package/skills/ce-handoff/references/create.md +88 -0
- package/skills/ce-handoff/references/resume.md +46 -0
- package/skills/ce-ideate/SKILL.md +75 -0
- package/skills/ce-ideate/references/agents/issue-intelligence-analyst.md +166 -0
- package/skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
- package/skills/ce-ideate/references/agents/slack-researcher.md +127 -0
- package/skills/ce-ideate/references/agents/web-researcher.md +121 -0
- package/skills/ce-ideate/references/decomposition.md +39 -0
- package/skills/ce-ideate/references/divergent-ideation.md +112 -0
- package/skills/ce-ideate/references/grounding.md +138 -0
- package/skills/ce-ideate/references/html-rendering.md +638 -0
- package/skills/ce-ideate/references/ideation-sections.md +191 -0
- package/skills/ce-ideate/references/issue-intelligence.md +44 -0
- package/skills/ce-ideate/references/markdown-rendering.md +242 -0
- package/skills/ce-ideate/references/output-mode.md +34 -0
- package/skills/ce-ideate/references/post-ideation-workflow.md +169 -0
- package/skills/ce-ideate/references/scope-gates.md +148 -0
- package/skills/ce-ideate/references/universal-ideation.md +119 -0
- package/skills/ce-ideate/references/user-research-artifacts.md +28 -0
- package/skills/ce-ideate/references/web-research-cache.md +56 -0
- package/skills/ce-noslop/SKILL.md +45 -0
- package/skills/ce-noslop/references/patterns.md +61 -0
- package/skills/ce-noslop/references/terminology.md +3 -0
- package/skills/ce-optimize/SKILL.md +64 -0
- package/skills/ce-optimize/references/agents/learnings-researcher.md +247 -0
- package/skills/ce-optimize/references/agents/repo-research-analyst.md +258 -0
- package/skills/ce-optimize/references/example-expensive-benchmark-spec.yaml +88 -0
- package/skills/ce-optimize/references/example-hard-spec.yaml +64 -0
- package/skills/ce-optimize/references/example-judge-spec.yaml +83 -0
- package/skills/ce-optimize/references/example-text-target-spec.yaml +80 -0
- package/skills/ce-optimize/references/experiment-log-schema.yaml +563 -0
- package/skills/ce-optimize/references/experiment-prompt-template.md +143 -0
- package/skills/ce-optimize/references/judge-prompt-template.md +117 -0
- package/skills/ce-optimize/references/loop.md +286 -0
- package/skills/ce-optimize/references/measurement.md +168 -0
- package/skills/ce-optimize/references/optimize-spec-schema.yaml +570 -0
- package/skills/ce-optimize/references/persistence.md +93 -0
- package/skills/ce-optimize/references/spec.md +107 -0
- package/skills/ce-optimize/references/text-targets.md +51 -0
- package/skills/ce-optimize/references/usage-guide.md +147 -0
- package/skills/ce-optimize/references/wrap-up.md +54 -0
- package/skills/ce-optimize/scripts/decide.mjs +676 -0
- package/skills/ce-optimize/scripts/experiment-worktree.sh +330 -0
- package/skills/ce-optimize/scripts/measure.sh +140 -0
- package/skills/ce-optimize/scripts/parallel-probe.sh +134 -0
- package/skills/ce-plan/SKILL.md +60 -0
- package/skills/ce-plan/references/agents/agent-native-planning-strategist.md +66 -0
- package/skills/ce-plan/references/agents/architecture-strategist.md +46 -0
- package/skills/ce-plan/references/agents/best-practices-researcher.md +118 -0
- package/skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
- package/skills/ce-plan/references/agents/framework-docs-researcher.md +97 -0
- package/skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
- package/skills/ce-plan/references/agents/learnings-researcher.md +268 -0
- package/skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
- package/skills/ce-plan/references/agents/performance-oracle.md +108 -0
- package/skills/ce-plan/references/agents/repo-research-analyst.md +262 -0
- package/skills/ce-plan/references/agents/security-sentinel.md +91 -0
- package/skills/ce-plan/references/agents/slack-researcher.md +131 -0
- package/skills/ce-plan/references/agents/spec-flow-analyzer.md +84 -0
- package/skills/ce-plan/references/agents/web-researcher.md +125 -0
- package/skills/ce-plan/references/approach-altitude.md +55 -0
- package/skills/ce-plan/references/bakeoff.md +9 -0
- package/skills/ce-plan/references/deepening-workflow.md +263 -0
- package/skills/ce-plan/references/final-review.md +134 -0
- package/skills/ce-plan/references/html-rendering.md +638 -0
- package/skills/ce-plan/references/intake.md +158 -0
- package/skills/ce-plan/references/markdown-rendering.md +242 -0
- package/skills/ce-plan/references/output-contracts.md +29 -0
- package/skills/ce-plan/references/output-mode.md +45 -0
- package/skills/ce-plan/references/plan-handoff.md +116 -0
- package/skills/ce-plan/references/plan-sections.md +489 -0
- package/skills/ce-plan/references/reasoning-elevation.md +124 -0
- package/skills/ce-plan/references/research.md +211 -0
- package/skills/ce-plan/references/resume.md +61 -0
- package/skills/ce-plan/references/settled-decisions.md +45 -0
- package/skills/ce-plan/references/structure.md +207 -0
- package/skills/ce-plan/references/synthesis-summary.md +260 -0
- package/skills/ce-plan/references/universal-planning.md +170 -0
- package/skills/ce-plan/scripts/elevation-dispatch.sh +288 -0
- package/skills/ce-plan/scripts/packs-resolve.py +737 -0
- package/skills/ce-plan/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-polish/SKILL.md +22 -0
- package/skills/ce-polish/agents/openai.yaml +2 -0
- package/skills/ce-polish/references/dev-server-astro.md +58 -0
- package/skills/ce-polish/references/dev-server-detection.md +40 -0
- package/skills/ce-polish/references/dev-server-next.md +61 -0
- package/skills/ce-polish/references/dev-server-nuxt.md +58 -0
- package/skills/ce-polish/references/dev-server-procfile.md +59 -0
- package/skills/ce-polish/references/dev-server-rails.md +50 -0
- package/skills/ce-polish/references/dev-server-remix.md +58 -0
- package/skills/ce-polish/references/dev-server-sveltekit.md +58 -0
- package/skills/ce-polish/references/dev-server-vite.md +48 -0
- package/skills/ce-polish/references/install-riffrec.md +35 -0
- package/skills/ce-polish/references/launch-json-schema.md +177 -0
- package/skills/ce-polish/references/live-loop.md +98 -0
- package/skills/ce-polish/references/live-remote.md +35 -0
- package/skills/ce-polish/references/live-start.md +93 -0
- package/skills/ce-polish/references/live-stream-contract.md +253 -0
- package/skills/ce-polish/references/run.md +67 -0
- package/skills/ce-polish/scripts/detect-project-type.sh +277 -0
- package/skills/ce-polish/scripts/detect-riffrec.sh +225 -0
- package/skills/ce-polish/scripts/live-endpoint.js +2841 -0
- package/skills/ce-polish/scripts/read-launch-json.sh +117 -0
- package/skills/ce-polish/scripts/resolve-package-manager.sh +95 -0
- package/skills/ce-polish/scripts/resolve-port.sh +307 -0
- package/skills/ce-pov/SKILL.md +64 -0
- package/skills/ce-pov/references/agents/external-evidence-researcher.md +26 -0
- package/skills/ce-pov/references/agents/pov-peer.md +43 -0
- package/skills/ce-pov/references/agents/precedent-activity-scout.md +21 -0
- package/skills/ce-pov/references/agents/project-grounding-scout.md +32 -0
- package/skills/ce-pov/references/boundaries.md +36 -0
- package/skills/ce-pov/references/cross-model-panel.md +596 -0
- package/skills/ce-pov/references/followup.md +9 -0
- package/skills/ce-pov/references/grounding.md +47 -0
- package/skills/ce-pov/references/intake.md +61 -0
- package/skills/ce-pov/references/invocation.md +47 -0
- package/skills/ce-pov/references/method.md +68 -0
- package/skills/ce-pov/references/pov-schema.json +56 -0
- package/skills/ce-pov/references/report.md +7 -0
- package/skills/ce-pov/scripts/cross-model-pov.sh +1110 -0
- package/skills/ce-pov/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-product-pulse/SKILL.md +81 -0
- package/skills/ce-product-pulse/agents/openai.yaml +2 -0
- package/skills/ce-product-pulse/references/config.md +20 -0
- package/skills/ce-product-pulse/references/interview.md +260 -0
- package/skills/ce-product-pulse/references/report-template.md +89 -0
- package/skills/ce-product-pulse/references/run.md +46 -0
- package/skills/ce-product-pulse/references/setup.md +43 -0
- package/skills/ce-promote/SKILL.md +90 -0
- package/skills/ce-promote/agents/openai.yaml +2 -0
- package/skills/ce-promote/references/spiral-cli.md +149 -0
- package/skills/ce-proof/SKILL.md +65 -0
- package/skills/ce-proof/references/api.md +176 -0
- package/skills/ce-proof/references/workflows.md +124 -0
- package/skills/ce-prototype/SKILL.md +59 -0
- package/skills/ce-prototype/assets/annotate.css +206 -0
- package/skills/ce-prototype/assets/annotate.js +837 -0
- package/skills/ce-prototype/references/annotation-loop.md +32 -0
- package/skills/ce-prototype/references/build.md +39 -0
- package/skills/ce-prototype/references/craft-floor.md +43 -0
- package/skills/ce-prototype/references/preview.md +118 -0
- package/skills/ce-prototype/references/scoping.md +38 -0
- package/skills/ce-prototype/references/write-back.md +37 -0
- package/skills/ce-prototype/scripts/light-webserver.js +1275 -0
- package/skills/ce-resolve-pr-feedback/SKILL.md +60 -0
- package/skills/ce-resolve-pr-feedback/references/agents/pr-comment-resolver.md +59 -0
- package/skills/ce-resolve-pr-feedback/references/evaluation-rubric.md +141 -0
- package/skills/ce-resolve-pr-feedback/references/full-mode.md +336 -0
- package/skills/ce-resolve-pr-feedback/references/pipeline-mode.md +23 -0
- package/skills/ce-resolve-pr-feedback/references/resume.md +60 -0
- package/skills/ce-resolve-pr-feedback/references/return-to-caller.md +111 -0
- package/skills/ce-resolve-pr-feedback/references/targeted-mode.md +48 -0
- package/skills/ce-resolve-pr-feedback/scripts/get-pr-comments +176 -0
- package/skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment +84 -0
- package/skills/ce-resolve-pr-feedback/scripts/pending-feedback.py +287 -0
- package/skills/ce-resolve-pr-feedback/scripts/reply-to-pr-thread +57 -0
- package/skills/ce-resolve-pr-feedback/scripts/resolve-pr-thread +23 -0
- package/skills/ce-retune/SKILL.md +42 -0
- package/skills/ce-retune/agents/openai.yaml +2 -0
- package/skills/ce-retune/references/baseline-mining.md +122 -0
- package/skills/ce-retune/references/corpus-audit.md +128 -0
- package/skills/ce-retune/references/cut-passes.md +129 -0
- package/skills/ce-retune/references/halt-taxonomy.md +123 -0
- package/skills/ce-retune/references/noise-floor.md +131 -0
- package/skills/ce-retune/references/workflow-shapes.md +73 -0
- package/skills/ce-riffrec-feedback-analysis/SKILL.md +33 -0
- package/skills/ce-riffrec-feedback-analysis/references/analyzer.md +18 -0
- package/skills/ce-riffrec-feedback-analysis/references/compound-engineering-feedback-format.md +116 -0
- package/skills/ce-riffrec-feedback-analysis/references/extensive-analysis.md +98 -0
- package/skills/ce-riffrec-feedback-analysis/references/install-riffrec.md +27 -0
- package/skills/ce-riffrec-feedback-analysis/references/quick-bug-report.md +38 -0
- package/skills/ce-riffrec-feedback-analysis/scripts/analyze_riffrec_zip.py +1306 -0
- package/skills/ce-setup/SKILL.md +103 -0
- package/skills/ce-setup/agents/openai.yaml +2 -0
- package/skills/ce-setup/assets/compounding-directive.md +11 -0
- package/skills/ce-setup/assets/noslop-directive.md +7 -0
- package/skills/ce-setup/assets/pack-rule-template.md +11 -0
- package/skills/ce-setup/references/acpx-cache-warm.md +14 -0
- package/skills/ce-setup/references/config-template.yaml +210 -0
- package/skills/ce-setup/references/legacy-codex-tool-map.md +15 -0
- package/skills/ce-setup/references/pack-scaffold.md +45 -0
- package/skills/ce-setup/references/repo-fixes.md +121 -0
- package/skills/ce-setup/scripts/check-health +929 -0
- package/skills/ce-setup/scripts/packs-resolve.py +737 -0
- package/skills/ce-simplify-code/SKILL.md +76 -0
- package/skills/ce-simplify-code/references/personas/code-quality-reviewer.md +17 -0
- package/skills/ce-simplify-code/references/personas/code-reuse-reviewer.md +7 -0
- package/skills/ce-simplify-code/references/personas/comment-reviewer.md +24 -0
- package/skills/ce-simplify-code/references/personas/efficiency-reviewer.md +11 -0
- package/skills/ce-simplify-code/references/personas/test-value-reviewer.md +23 -0
- package/skills/ce-simplify-code/references/reviewer-dispatch.md +11 -0
- package/skills/ce-simplify-code/references/standalone-report.md +25 -0
- package/skills/ce-strategy/SKILL.md +61 -0
- package/skills/ce-strategy/references/grounding.md +22 -0
- package/skills/ce-strategy/references/interview.md +179 -0
- package/skills/ce-strategy/references/strategy-template.md +94 -0
- package/skills/ce-strategy/references/update-run.md +33 -0
- package/skills/ce-sweep/SKILL.md +93 -0
- package/skills/ce-sweep/agents/openai.yaml +2 -0
- package/skills/ce-sweep/references/agents/media-analyzer.md +54 -0
- package/skills/ce-sweep/references/interview.md +208 -0
- package/skills/ce-sweep/references/model-tiers.md +13 -0
- package/skills/ce-sweep/references/plan-template.md +62 -0
- package/skills/ce-sweep/references/run.md +126 -0
- package/skills/ce-sweep/references/sources/email.md +57 -0
- package/skills/ce-sweep/references/sources/github-issues.md +59 -0
- package/skills/ce-sweep/references/sources/slack.md +61 -0
- package/skills/ce-sweep/references/state-schema.md +157 -0
- package/skills/ce-sweep/references/subagent-template.md +60 -0
- package/skills/ce-sweep/scripts/analyze_riffrec_zip.py +1306 -0
- package/skills/ce-sweep/scripts/sweep-state.py +793 -0
- package/skills/ce-test-browser/SKILL.md +50 -0
- package/skills/ce-test-browser/references/agent-browser-driver.md +47 -0
- package/skills/ce-test-browser/references/pipeline-orchestration.md +45 -0
- package/skills/ce-test-browser/references/route-and-report.md +129 -0
- package/skills/ce-test-browser/scripts/resolve-port.sh +41 -0
- package/skills/ce-test-xcode/SKILL.md +26 -0
- package/skills/ce-test-xcode/agents/openai.yaml +2 -0
- package/skills/ce-test-xcode/references/setup-and-build.md +32 -0
- package/skills/ce-test-xcode/references/test-and-report.md +64 -0
- package/skills/ce-work/SKILL.md +62 -0
- package/skills/ce-work/references/agents/figma-design-sync.md +27 -0
- package/skills/ce-work/references/agents/implementation-worker.md +17 -0
- package/skills/ce-work/references/cross-model-execution.md +191 -0
- package/skills/ce-work/references/execution-engines.md +64 -0
- package/skills/ce-work/references/execution-strategy.md +73 -0
- package/skills/ce-work/references/implementation-loop.md +107 -0
- package/skills/ce-work/references/implementation-result-schema.json +52 -0
- package/skills/ce-work/references/input-triage.md +50 -0
- package/skills/ce-work/references/non-code-execution.md +23 -0
- package/skills/ce-work/references/return-to-caller.md +33 -0
- package/skills/ce-work/references/review-findings-followup.md +82 -0
- package/skills/ce-work/references/shipping-workflow.md +89 -0
- package/skills/ce-work/references/tracker-defer.md +150 -0
- package/skills/ce-work/references/work-intake.md +51 -0
- package/skills/ce-work/references/workspace-setup.md +27 -0
- package/skills/ce-work/scripts/__pycache__/unit_workspace_jobs.cpython-314.pyc +0 -0
- package/skills/ce-work/scripts/__pycache__/unit_workspace_state.cpython-314.pyc +0 -0
- package/skills/ce-work/scripts/cross-model-work.sh +1385 -0
- package/skills/ce-work/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-work/scripts/unit-workspace.py +215 -0
- package/skills/ce-work/scripts/unit_workspace_ignored.py +93 -0
- package/skills/ce-work/scripts/unit_workspace_integration.py +677 -0
- package/skills/ce-work/scripts/unit_workspace_jobs.py +1216 -0
- package/skills/ce-work/scripts/unit_workspace_lifecycle.py +981 -0
- package/skills/ce-work/scripts/unit_workspace_state.py +1379 -0
- package/skills/ce-work/scripts/unit_workspace_transaction.py +612 -0
- package/skills/ce-worktree/SKILL.md +54 -0
- package/skills/lfg/SKILL.md +59 -0
- package/skills/lfg/references/debug-return.md +25 -0
- package/skills/lfg/references/intake.md +30 -0
- package/skills/lfg/references/next-work-handoff.md +96 -0
- package/skills/lfg/references/plan-brief.md +36 -0
- package/skills/lfg/references/review-followup.md +78 -0
- package/skills/lfg/references/shipping.md +65 -0
- package/skills/lfg/references/stage-routing.md +49 -0
- package/skills/lfg/references/task-visibility.md +11 -0
- package/skills/lfg/references/tracker-defer.md +150 -0
- package/skills/lfg/references/work-return.md +27 -0
- package/skills/wtf/SKILL.md +33 -0
- package/skills/wtf/agents/openai.yaml +2 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Every
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,161 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-compound-engineering
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
English | [简体中文](README.zh.md)
|
|
4
|
+
|
|
5
|
+
[Every's compound-engineering](https://github.com/EveryInc/compound-engineering-plugin) methodology, packaged as a skill bundle for DeepSeek Harness.
|
|
6
|
+
|
|
7
|
+
**The idea**: most AI coding tools restart from zero on every task. compound-engineering compounds instead — every problem you solve gets written down in the repo, so the next time something similar comes up, the answer is already there. Each change makes the next one cheaper.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
brainstorm → plan → work → review → compound
|
|
11
|
+
└─ write what you learned back into the repo
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
All 36 skills ship with the package. Nothing to configure after install.
|
|
15
|
+
|
|
16
|
+
**Optional: `jq`.** Six scripts shell out to it — the cross-model workers (`ce-work`, `ce-code-review`, `ce-doc-review`, `ce-pov`) and `elevation-dispatch` (`ce-plan`, `ce-brainstorm`). Without `jq` on `PATH` none of them break the surrounding skill, but they degrade in two different ways:
|
|
17
|
+
|
|
18
|
+
- `ce-code-review` / `ce-doc-review` / `ce-pov` print `jq not installed; skipping` and exit 0 — that round of cross-model review is simply skipped.
|
|
19
|
+
- `ce-work`'s cross-model path reports `transport unavailable (pre-egress, shared): jq not found` and exits 2, which the caller treats as the cross-model channel being unavailable.
|
|
20
|
+
- `elevation-dispatch` emits a `status:failed` envelope, and the caller degrades to inline execution.
|
|
21
|
+
|
|
22
|
+
Either way you lose the multi-model cross-check. Install it if you want those paths live:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
winget install jqlang.jq # Windows
|
|
26
|
+
brew install jq # macOS
|
|
27
|
+
apt install jq # Debian/Ubuntu
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
dsh plugin --profile web add dsh-compound-engineering
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Replace `web` with the profile you actually use (`headless`, `tui`, ...). The command also adds the package to `dsh.profile.bundles` for you.
|
|
37
|
+
|
|
38
|
+
Or do it by hand: add the dependency to the profile's `package.json`, then list it in `dsh.profile.bundles`.
|
|
39
|
+
|
|
40
|
+
```jsonc
|
|
41
|
+
{
|
|
42
|
+
"dependencies": { "dsh-compound-engineering": "^0.1.0" },
|
|
43
|
+
"dsh": { "profile": { "bundles": ["dsh-compound-engineering"] } }
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Restart DSH. Type `/ce-plan` in a session and the skills are there.
|
|
48
|
+
|
|
49
|
+
## Skills you will actually reach for
|
|
50
|
+
|
|
51
|
+
| Skill | When |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| `/ce-brainstorm` | The idea is still vague; force it into a concrete proposal |
|
|
54
|
+
| `/ce-plan` | Requirements are clear; you want an executable plan |
|
|
55
|
+
| `/ce-work` | Execute the plan |
|
|
56
|
+
| `/ce-code-review` | Find problems before review does (can fan out across models) |
|
|
57
|
+
| `/ce-compound` | **Wrap up**: write the non-obvious conclusions into the repo |
|
|
58
|
+
| `/ce-debug` | Stuck; locate the root cause systematically |
|
|
59
|
+
| `/ce-commit-push-pr` | Commit, push, and open a PR in one go |
|
|
60
|
+
|
|
61
|
+
`/lfg` chains brainstorm through PR.
|
|
62
|
+
|
|
63
|
+
The other 28 skills live in `skills/`, or just ask the model what it can see.
|
|
64
|
+
|
|
65
|
+
## ce-compound is the part that differs
|
|
66
|
+
|
|
67
|
+
Most "memory" plugins remember conversations. `ce-compound` remembers the **repo**:
|
|
68
|
+
|
|
69
|
+
- It reads your local dsh session history first to recover what was already tried and why it failed
|
|
70
|
+
- Output goes into `<repo>/docs/solutions/`, committed and reviewed alongside code
|
|
71
|
+
- The next person — or the next model — working in that repo reads it
|
|
72
|
+
|
|
73
|
+
It deliberately does not record which lines changed; git already has that. It records why, which neither the code nor the tests can tell you.
|
|
74
|
+
|
|
75
|
+
## Adapting to DeepSeek Harness
|
|
76
|
+
|
|
77
|
+
Upstream targets 14 hosts including Claude Code. The port does this:
|
|
78
|
+
|
|
79
|
+
**Capabilities are matched by capability, not by tool name.** Upstream was already written that way ("the host's blocking question tool"), so the 36 skill bodies work nearly as-is. What got added is the DSH spelling: `ask_user_question`, `todo_write`, `subagent`, `web_fetch`, `web_search`.
|
|
80
|
+
|
|
81
|
+
**Session history gained a dsh platform.** `skills/ce-compound/scripts/session-history/dsh_session.py` reads DSH's own session files. One trap worth knowing: DSH's `session.v4.jsonl.zstd` is **concatenated zstd frames**, one per append. Plain `zstd -d` or `compression.zstd.decompress` stops after the first frame and silently loses the rest of the session, so the script scans frame boundaries itself and decompresses frame by frame. It needs Python 3.14+; on older interpreters it degrades quietly to "no dsh sessions".
|
|
82
|
+
|
|
83
|
+
**The session-history extractors are dsh-only.** `extract-metadata.py`, `extract-skeleton.py`, and `extract-errors.py` decode dsh session files and nothing else, which dropped ~845 lines of Claude Code / Codex / Cursor / Pi / oh-my-pi branching. `discover-sessions.sh` keeps its other probes so a mixed-tool repo can still enumerate files, but run the documented pipeline with `--platform dsh`. Sessions carry a recorded `cwd` but no git branch, so filtering is by working directory, not by branch.
|
|
84
|
+
|
|
85
|
+
**Dev-server config prefers `.dsh/launch.json`.** `ce-polish` looks in `.dsh/` → `.claude/` → `.vscode/`.
|
|
86
|
+
|
|
87
|
+
**Host identity allowlists accept `dsh`.** Several cross-model scripts only knew `codex|claude|grok|cursor|opencode|antigravity|omp`, so reporting `dsh` honestly was rejected.
|
|
88
|
+
|
|
89
|
+
**Task tracking, subagents, and web fetching** each gained a DSH form. Subagents use `subagent` directly rather than faking a `subagent_type`.
|
|
90
|
+
|
|
91
|
+
**Windows works for the `ce-work` unit pipeline.** That path was POSIX-only upstream. Four things had to change, and any of them will bite you if you port similar code:
|
|
92
|
+
|
|
93
|
+
- `fcntl` does not exist. Locking goes through `msvcrt.locking`, which is non-blocking and raises instead of waiting, so the wrapper retries with exponential backoff for up to 30s.
|
|
94
|
+
- `os.open()` **cannot open a directory** on Windows — the kernel rejects it without `FILE_FLAG_BACKUP_SEMANTICS`. Every `open(path, O_DIRECTORY)` + `fstat(fd)` ownership check became a path-based `GetNamedSecurityInfoW` call. `dir_fd` is unavailable for the same reason, so the "directory handle" is a real fd on POSIX and a plain path on Windows; `close_dir_handle()` papers over the difference.
|
|
95
|
+
- Mode bits are synthetic: a `0o700` mkdir reports `0o777` and a `0o600` file reports `0o666`. Every `st_mode != 0o700` gate would fail unconditionally. Ownership is checked against the current user's SID instead, and privacy comes from the hardened ACL (`icacls /inheritance:r`), not from a mode.
|
|
96
|
+
- `\n` turns into `\r\n` and `0x1A` ends the read when the CRT opens a descriptor in text mode, so binary opens pass `O_BINARY`.
|
|
97
|
+
|
|
98
|
+
`os.lstat()` does return stable, non-zero `st_dev`/`st_ino` on Windows, so the controller's recorded directory identity still verifies.
|
|
99
|
+
|
|
100
|
+
**Text is read as UTF-8 explicitly.** Python on a Chinese Windows defaults to GBK and throws `UnicodeDecodeError` on most of upstream's own skill files.
|
|
101
|
+
|
|
102
|
+
## Development
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm test # JS unit + integration, then the Python suites
|
|
106
|
+
npm run test:smoke # three layers: provider / registry / plugin lifecycle
|
|
107
|
+
npm run test:py # Python suites only (session reader, Windows compat)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Integration tests need to find a DSH runtime: they import by package name first, then scan `~/.dsh/runtime/versions/*`. Point `DSH_RUNTIME` at it to override.
|
|
111
|
+
|
|
112
|
+
After pulling in upstream changes, re-run the two idempotent patch scripts:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
python scripts/patch-dsh-capabilities.py # add DSH forms to skill bodies
|
|
116
|
+
python scripts/patch-host-allowlists.py # add dsh to cross-model host allowlists
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### With `file:` installs, refresh the copy after editing source
|
|
120
|
+
|
|
121
|
+
`dsh plugin add file:<local path>` goes through pnpm directory dependencies, so `node_modules/` holds a **copy**, not a symlink. pnpm records the dependency's contents in its lockfile (`resolution: {directory: ..., type: directory}`), which means `pnpm install`, `pnpm update`, and even re-running `dsh plugin add` will **not** refresh that copy after you edit source. You keep running the old code, and since the skill catalog comes from the stale copy, changes under `lib/` look like they did nothing.
|
|
122
|
+
|
|
123
|
+
Check whether you are hitting this (a hash mismatch means yes):
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
md5sum skills/ce-work/scripts/unit_workspace_state.py \
|
|
127
|
+
~/.dsh/profiles/web/node_modules/dsh-compound-engineering/skills/ce-work/scripts/unit_workspace_state.py
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Rebuilding the copy is the shortest fix:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
python -c "
|
|
134
|
+
import shutil, os
|
|
135
|
+
dst = os.path.expanduser('~/.dsh/profiles/web/node_modules/dsh-compound-engineering')
|
|
136
|
+
shutil.rmtree(dst, ignore_errors=True)
|
|
137
|
+
shutil.copytree('<source dir>', dst,
|
|
138
|
+
ignore=shutil.ignore_patterns('node_modules','.git','__pycache__','*.pyc','test'))
|
|
139
|
+
"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The copy's `skills/` must mirror the source one-to-one (`test/` is not shipped). Restart DSH after changing `lib/` so the plugin reloads.
|
|
143
|
+
|
|
144
|
+
## Layout
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
lib/
|
|
148
|
+
index.js plugin entry: registers a provider with ctx.skills
|
|
149
|
+
provider.js exposes skills/ as a SkillProvider
|
|
150
|
+
frontmatter.js dependency-free YAML frontmatter parser
|
|
151
|
+
skills/ 36 skills, shipped as upstream wrote them
|
|
152
|
+
cordis.patch.yml inserts the plugin into a profile's layer stack
|
|
153
|
+
test/ unit + integration tests
|
|
154
|
+
scripts/ upstream-sync patches, smoke tests
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
No runtime dependencies: skill frontmatter is read by the bundled parser, so this package never fights the host over YAML versions.
|
|
158
|
+
|
|
159
|
+
## License
|
|
160
|
+
|
|
161
|
+
MIT, same as upstream. The skills are Every's work (Copyright (c) 2025 Every); see `LICENSE`.
|
package/README.zh.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# dsh-compound-engineering
|
|
2
|
+
|
|
3
|
+
[English](README.md) | 简体中文
|
|
4
|
+
|
|
5
|
+
把 [Every 的 compound-engineering](https://github.com/EveryInc/compound-engineering-plugin) 方法论搬进 DeepSeek Harness 的技能包。
|
|
6
|
+
|
|
7
|
+
**核心想法**:大多数 AI 编程工具让每次任务都从零开始。compound-engineering 改成复利——每次解决的问题都沉淀成仓库里的一份文档,下一次遇到同类问题时直接读到,于是每一轮改动都让下一轮更容易。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
brainstorm → plan → work → review → compound
|
|
11
|
+
└─ 把这次学到的东西写进仓库
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
36 个技能全部随包分发,安装后无需任何配置即可使用。
|
|
15
|
+
|
|
16
|
+
**可选依赖 `jq`。** 有六个脚本会调用它:cross-model 系列(`ce-work`、`ce-code-review`、`ce-doc-review`、`ce-pov`)以及 `elevation-dispatch`(`ce-plan`、`ce-brainstorm`)。没有 `jq` 时它们都不会中断所在技能,但降级方式分两种:
|
|
17
|
+
|
|
18
|
+
- `ce-code-review` / `ce-doc-review` / `ce-pov`:打印 `jq not installed; skipping` 后退出码 0,该轮多模型审查直接跳过。
|
|
19
|
+
- `ce-work` 的 cross-model:报 `transport unavailable (pre-egress, shared): jq not found` 并以退出码 2 结束,外层按“跨模型通道不可用”处理。
|
|
20
|
+
- `elevation-dispatch`:输出 `status:failed` 的结果信封,外层降级为内联执行。
|
|
21
|
+
|
|
22
|
+
你也就失去了多模型交叉复核这一层。想启用就装上:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
winget install jqlang.jq # Windows
|
|
26
|
+
brew install jq # macOS
|
|
27
|
+
apt install jq # Debian/Ubuntu
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 安装
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
dsh plugin --profile web add dsh-compound-engineering
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`web` 换成你实际用的 profile 名(`headless`、`tui` 等)。这条命令会自动把这个包加进 `dsh.profile.bundles`,不用手工改配置。
|
|
37
|
+
|
|
38
|
+
也可以手工两步:在 profile 的 `package.json` 里加依赖,再把它加进 `dsh.profile.bundles`。
|
|
39
|
+
|
|
40
|
+
```jsonc
|
|
41
|
+
{
|
|
42
|
+
"dependencies": { "dsh-compound-engineering": "^0.1.0" },
|
|
43
|
+
"dsh": { "profile": { "bundles": ["dsh-compound-engineering"] } }
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
装好后重启 DSH。会话里敲 `/ce-plan` 就能看到技能。
|
|
48
|
+
|
|
49
|
+
## 常用技能
|
|
50
|
+
|
|
51
|
+
| 技能 | 什么时候用 |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| `/ce-brainstorm` | 想法还模糊,先把它逼成明确的方案 |
|
|
54
|
+
| `/ce-plan` | 需求清楚,要一份能执行的计划 |
|
|
55
|
+
| `/ce-work` | 按计划动手实现 |
|
|
56
|
+
| `/ce-code-review` | 提交前找人挑刺(可以并行多模型对照) |
|
|
57
|
+
| `/ce-compound` | **收尾**:把这次排查出的非显然结论写进仓库 |
|
|
58
|
+
| `/ce-debug` | 卡住了,系统性定位根因 |
|
|
59
|
+
| `/ce-commit-push-pr` | 一次走完提交、推送、开 PR |
|
|
60
|
+
|
|
61
|
+
`/lfg`(let's f\*\*\*ing go)把 brainstorm 到 PR 的全流程串起来。
|
|
62
|
+
|
|
63
|
+
其余 28 个技能见 `skills/` 目录,或直接问模型"有哪些技能"。
|
|
64
|
+
|
|
65
|
+
## ce-compound 是这套东西的差异点
|
|
66
|
+
|
|
67
|
+
别处的"记忆"插件记住的是对话。`ce-compound` 记住的是**仓库**:
|
|
68
|
+
|
|
69
|
+
- 跑起来会先读本机的 dsh 历史会话文件,把当时踩过的坑挖出来
|
|
70
|
+
- 产出写在 `<repo>/docs/solutions/` 下,随代码一起提交、一起 review
|
|
71
|
+
- 下次任何人(或任何模型)在同一个仓库工作时都会读到它
|
|
72
|
+
|
|
73
|
+
它刻意不记录"改了哪几行"——那从 git 里就能看出来。它记录的是"为什么这么改"这类从代码和测试里读不出来的东西。
|
|
74
|
+
|
|
75
|
+
## 在 DeepSeek Harness 上的适配
|
|
76
|
+
|
|
77
|
+
上游是给 Claude Code 等 14 个宿主写的。移植时做了这些事:
|
|
78
|
+
|
|
79
|
+
**平台能力靠"能力"匹配,不硬编码工具名。** 上游正文本来就用 "the host's blocking question tool" 这类措辞,所以 36 个技能的正文几乎原样可用。补的只是 DSH 这一档的具体名字(`ask_user_question`、`todo_write`、`subagent`、`web_fetch`、`web_search`)。
|
|
80
|
+
|
|
81
|
+
**会话历史多了 dsh 平台。** `skills/ce-compound/scripts/session-history/dsh_session.py` 能读 DSH 自己的会话文件。这里有个坑值得记:DSH 的 `session.v4.jsonl.zstd` 是**多个 zstd 帧首尾拼接**(每次 append 追加一帧),标准的 `zstd -d` 或 `compression.zstd.decompress` 只解第一帧就返回,会静默丢掉整个会话。所以脚本自己扫帧边界,逐帧解压。需要 Python 3.14+;更老的解释器上会安静降级成"没有 dsh 会话可读"。
|
|
82
|
+
|
|
83
|
+
**会话历史三个提取脚本只认 dsh。** `extract-metadata.py`、`extract-skeleton.py`、`extract-errors.py` 只解 dsh 会话,原来的 Claude Code / Codex / Cursor / Pi / oh-my-pi 分支全部删掉,净减约 845 行。`discover-sessions.sh` 保留了其它平台探测(混合工具仓库仍能列文件),但文档里的管道固定带 `--platform dsh`。dsh 会话只记 `cwd` 不记 git 分支,所以过滤按工作目录走,不按分支。
|
|
84
|
+
|
|
85
|
+
**dev server 配置优先读 `.dsh/launch.json`。** `ce-polish` 需要知道怎么起本地服务,查找顺序是 `.dsh/` → `.claude/` → `.vscode/`。
|
|
86
|
+
|
|
87
|
+
**host 身份白名单加了 dsh。** 几个 cross-model 脚本原来只认 `codex|claude|grok|cursor|opencode|antigravity|omp`,如实上报 `dsh` 会被拒。
|
|
88
|
+
|
|
89
|
+
**任务追踪、子代理、网页抓取**都补了 DSH 的对应物。子代理在 DSH 上直接 `subagent` 派生,不必造一个假的 `subagent_type`。
|
|
90
|
+
|
|
91
|
+
**Windows 上 `ce-work` 的 unit 流水线现在能跑通。** 这条路线上游只做了 POSIX,改动了四处,移植同类代码时都会撞上:
|
|
92
|
+
|
|
93
|
+
- `fcntl` 不存在。加锁改用 `msvcrt.locking`,但它是非阻塞的,抢不到锁直接抛异常而不等待,所以封装层做了指数退避重试,最长 30 秒。
|
|
94
|
+
- Windows 上 **`os.open()` 打不开目录**(缺 `FILE_FLAG_BACKUP_SEMANTICS`,内核直接拒绝)。所有 `open(path, O_DIRECTORY)` + `fstat(fd)` 式的属主校验,改成走路径版的 `GetNamedSecurityInfoW`。`dir_fd` 同样不可用,于是"目录句柄"在 POSIX 上是真 fd、在 Windows 上是路径,由 `close_dir_handle()` 抹平差异。
|
|
95
|
+
- mode 位是合成的:`mkdir` 0o700 实测报 0o777,`chmod` 0o600 实测报 0o666。任何 `st_mode != 0o700` 的闸门在 Windows 上必然失败。改为比对当前用户 SID,私密性靠加固过的 ACL(`icacls /inheritance:r`)而不是 mode。
|
|
96
|
+
- CRT 文本模式会把 `\n` 变成 `\r\n`、在读到你 `0x1A` 时截断,所以二进制打开一律带 `O_BINARY`。
|
|
97
|
+
|
|
98
|
+
`os.lstat()` 在 Windows 上能给出稳定的非零 `st_dev`/`st_ino`,所以控制器记录的目录 identity 仍然有效可校验。
|
|
99
|
+
|
|
100
|
+
**文本一律显式按 UTF-8 读。** 中文 Windows 上 Python 默认 GBK,读上游自己的大部分技能文件都会抛 `UnicodeDecodeError`。
|
|
101
|
+
|
|
102
|
+
## 开发
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm test # JS 单元 + 集成测试,随后跑 Python 测试
|
|
106
|
+
npm run test:smoke # 三层冒烟:provider / registry / 插件生命周期
|
|
107
|
+
npm run test:py # 只跑 Python 测试(会话读取器、Windows 兼容)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
集成测试需要能找到 DSH 运行时。默认从包名 import,失败则扫描 `~/.dsh/runtime/versions/*`;也可以用 `DSH_RUNTIME` 指过去。
|
|
111
|
+
|
|
112
|
+
改上游技能后,重新跑这两个幂等补丁脚本:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
python scripts/patch-dsh-capabilities.py # 给技能正文补 DSH 档位
|
|
116
|
+
python scripts/patch-host-allowlists.py # 补 cross-model 的 host 白名单
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 用 `file:` 方式开发时,改完源码要刷副本
|
|
120
|
+
|
|
121
|
+
`dsh plugin add file:<本地路径>` 走的是 pnpm 的目录依赖,`node_modules/` 里放的是**拷贝**,不是软链。pnpm 会把目录依赖的内容记进 lockfile(`resolution: {directory: ..., type: directory}`),所以改完源码之后跑 `pnpm install`、`pnpm update`、甚至重跑 `dsh plugin add` 都**不会**刷新那份拷贝——你会一直跑到旧代码,而且因为技能清单来自旧副本,`lib/` 里改了什么都看不出来。
|
|
122
|
+
|
|
123
|
+
确认是否踩到(哈希不一致就是踩到了):
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
md5sum skills/ce-work/scripts/unit_workspace_state.py \
|
|
127
|
+
~/.dsh/profiles/web/node_modules/dsh-compound-engineering/skills/ce-work/scripts/unit_workspace_state.py
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
直接重建副本最省事:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
python -c "
|
|
134
|
+
import shutil, os
|
|
135
|
+
dst = os.path.expanduser('~/.dsh/profiles/web/node_modules/dsh-compound-engineering')
|
|
136
|
+
shutil.rmtree(dst, ignore_errors=True)
|
|
137
|
+
shutil.copytree('<源码目录>', dst,
|
|
138
|
+
ignore=shutil.ignore_patterns('node_modules','.git','__pycache__','*.pyc','test'))
|
|
139
|
+
"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
副本里的 `skills/` 必须和源码一一对应(`test/` 不随包分发)。改完 `lib/` 后需要重启 DSH 才会重新加载插件。
|
|
143
|
+
|
|
144
|
+
## 结构
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
lib/
|
|
148
|
+
index.js 插件入口:向 ctx.skills 注册 provider
|
|
149
|
+
provider.js 把 skills/ 目录暴露成 SkillProvider
|
|
150
|
+
frontmatter.js 零依赖 YAML frontmatter 解析
|
|
151
|
+
skills/ 36 个技能(上游原样分发)
|
|
152
|
+
cordis.patch.yml 把插件插进 profile 的层栈
|
|
153
|
+
test/ 单元 + 集成测试
|
|
154
|
+
scripts/ 上游同步补丁、冒烟测试
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
本包不引入任何运行时依赖:技能的 YAML 用自带的解析器读,不与宿主的 YAML 版本打架。
|
|
158
|
+
|
|
159
|
+
## 许可
|
|
160
|
+
|
|
161
|
+
MIT,与上游一致。技能的著作权归 Every(Copyright (c) 2025 Every),见 `LICENSE`。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# dsh-compound-engineering bundle patch: inserts its plugin row into a profile's
|
|
2
|
+
# layer stack. The single row mounts the skill provider; the 36 skills ship
|
|
3
|
+
# inside this package and need no user configuration.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: compound-engineering
|
|
6
|
+
name: 'dsh-compound-engineering'
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 零依赖的 YAML frontmatter 解析器。
|
|
3
|
+
*
|
|
4
|
+
* 只覆盖 SKILL.md 实际使用的子集:顶层 `key: value` 标量、带引号字符串、
|
|
5
|
+
* 布尔字面量、以及 `key:` 后跟缩进列表(`- item`)。
|
|
6
|
+
*
|
|
7
|
+
* 之所以不引入 js-yaml:本插件是纯技能包,除了自身以外不向 profile 注入任何
|
|
8
|
+
* 运行时依赖,避免与宿主的 YAML 版本产生冲突。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** 单个值里允许出现的行内注释起始符(` #` 之后整段视为注释)。 */
|
|
12
|
+
const INLINE_COMMENT = /\s+#.*$/;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 去掉值两端的引号并还原转义。
|
|
16
|
+
* @param {string} raw 原始值文本
|
|
17
|
+
* @returns {string} 处理后的字符串
|
|
18
|
+
*/
|
|
19
|
+
function unquote(raw) {
|
|
20
|
+
const text = raw.trim();
|
|
21
|
+
if (text.length >= 2) {
|
|
22
|
+
const first = text[0];
|
|
23
|
+
const last = text[text.length - 1];
|
|
24
|
+
if (first === '"' && last === '"') {
|
|
25
|
+
return text.slice(1, -1).replace(/\\(["\\/])/g, '$1').replace(/\\n/g, '\n');
|
|
26
|
+
}
|
|
27
|
+
if (first === "'" && last === "'") {
|
|
28
|
+
return text.slice(1, -1).replace(/''/g, "'");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return text;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 把标量文本转成 JS 值:布尔、数字、字符串。
|
|
36
|
+
* @param {string} raw 原始值文本
|
|
37
|
+
* @returns {unknown} 解析结果
|
|
38
|
+
*/
|
|
39
|
+
function scalar(raw) {
|
|
40
|
+
const text = raw.trim();
|
|
41
|
+
if (text === '') return undefined;
|
|
42
|
+
const bare = text.replace(INLINE_COMMENT, '').trim();
|
|
43
|
+
if (/^(true|yes|on)$/i.test(bare)) return true;
|
|
44
|
+
if (/^(false|no|off)$/i.test(bare)) return false;
|
|
45
|
+
if (/^-?\d+$/.test(bare)) return Number(bare);
|
|
46
|
+
return unquote(bare);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 解析 frontmatter 文本块。
|
|
51
|
+
* @param {string} block 位于两条 `---` 之间的文本
|
|
52
|
+
* @returns {Record<string, unknown>} 解析出的键值对
|
|
53
|
+
*/
|
|
54
|
+
export function parseFrontmatterBlock(block) {
|
|
55
|
+
const data = {};
|
|
56
|
+
const lines = block.split('\n');
|
|
57
|
+
let index = 0;
|
|
58
|
+
while (index < lines.length) {
|
|
59
|
+
const line = lines[index].replace(/\r$/, '');
|
|
60
|
+
index += 1;
|
|
61
|
+
if (line.trim() === '' || line.trimStart().startsWith('#')) continue;
|
|
62
|
+
// 只认顶层键:缩进行属于上一个键的子结构,已在下面消费或忽略。
|
|
63
|
+
if (/^\s/.test(line)) continue;
|
|
64
|
+
const colon = line.indexOf(':');
|
|
65
|
+
if (colon <= 0) continue;
|
|
66
|
+
const key = line.slice(0, colon).trim();
|
|
67
|
+
if (key === '') continue;
|
|
68
|
+
const rest = line.slice(colon + 1);
|
|
69
|
+
if (rest.trim() !== '') {
|
|
70
|
+
data[key] = scalar(rest);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// 值为空:可能是缩进列表或嵌套映射。
|
|
74
|
+
const items = [];
|
|
75
|
+
let nested = {};
|
|
76
|
+
let hasNested = false;
|
|
77
|
+
while (index < lines.length) {
|
|
78
|
+
const next = lines[index].replace(/\r$/, '');
|
|
79
|
+
if (next.trim() === '') {
|
|
80
|
+
index += 1;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (!/^\s/.test(next)) break;
|
|
84
|
+
index += 1;
|
|
85
|
+
const trimmed = next.trim();
|
|
86
|
+
if (trimmed.startsWith('- ') || trimmed === '-') {
|
|
87
|
+
items.push(scalar(trimmed.slice(1)));
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const inner = trimmed.indexOf(':');
|
|
91
|
+
if (inner > 0) {
|
|
92
|
+
nested[trimmed.slice(0, inner).trim()] = scalar(trimmed.slice(inner + 1));
|
|
93
|
+
hasNested = true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (items.length > 0) data[key] = items;
|
|
97
|
+
else if (hasNested) data[key] = nested;
|
|
98
|
+
else data[key] = undefined;
|
|
99
|
+
}
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* 从完整的 SKILL.md 文本里切出 frontmatter 与正文。
|
|
105
|
+
* @param {string} raw 文件全文
|
|
106
|
+
* @returns {{data: Record<string, unknown>, body: string} | undefined} 解析结果
|
|
107
|
+
*/
|
|
108
|
+
export function splitFrontmatter(raw) {
|
|
109
|
+
const firstLineEnd = raw.indexOf('\n');
|
|
110
|
+
if (firstLineEnd < 0) return undefined;
|
|
111
|
+
if (raw.slice(0, firstLineEnd).replace(/\r$/, '') !== '---') return undefined;
|
|
112
|
+
const start = firstLineEnd + 1;
|
|
113
|
+
let lineStart = start;
|
|
114
|
+
while (lineStart <= raw.length) {
|
|
115
|
+
const nextNewline = raw.indexOf('\n', lineStart);
|
|
116
|
+
const lineEnd = nextNewline < 0 ? raw.length : nextNewline;
|
|
117
|
+
if (raw.slice(lineStart, lineEnd).replace(/\r$/, '') === '---') {
|
|
118
|
+
const bodyStart = nextNewline < 0 ? raw.length : nextNewline + 1;
|
|
119
|
+
return {
|
|
120
|
+
data: parseFrontmatterBlock(raw.slice(start, lineStart)),
|
|
121
|
+
body: raw.slice(bodyStart),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (nextNewline < 0) return undefined;
|
|
125
|
+
lineStart = nextNewline + 1;
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 按 DSH 的规则把布尔 frontmatter 字段转成布尔值。
|
|
132
|
+
* 与 `@deepseek-ai/dsh-skill-filesystem` 保持一致:接受布尔、1/0 与常见字符串拼写。
|
|
133
|
+
* @param {Record<string, unknown>} data frontmatter 数据
|
|
134
|
+
* @param {string} key 字段名
|
|
135
|
+
* @returns {boolean | undefined} 解析结果
|
|
136
|
+
*/
|
|
137
|
+
export function booleanField(data, key) {
|
|
138
|
+
if (!Object.hasOwn(data, key)) return undefined;
|
|
139
|
+
const value = data[key];
|
|
140
|
+
if (typeof value === 'boolean') return value;
|
|
141
|
+
if (value === 1 || value === '1') return true;
|
|
142
|
+
if (value === 0 || value === '0') return false;
|
|
143
|
+
if (typeof value === 'string') {
|
|
144
|
+
switch (value.toLowerCase()) {
|
|
145
|
+
case 'true':
|
|
146
|
+
case 'yes':
|
|
147
|
+
case 'on':
|
|
148
|
+
return true;
|
|
149
|
+
case 'false':
|
|
150
|
+
case 'no':
|
|
151
|
+
case 'off':
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* 取出非空字符串字段。
|
|
160
|
+
* @param {Record<string, unknown>} data frontmatter 数据
|
|
161
|
+
* @param {string} key 字段名
|
|
162
|
+
* @returns {string | undefined} 字段值
|
|
163
|
+
*/
|
|
164
|
+
export function stringField(data, key) {
|
|
165
|
+
const value = data[key];
|
|
166
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
167
|
+
}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dsh-compound-engineering`: 把 Every 的 compound-engineering 技能包移植进
|
|
3
|
+
* DeepSeek Harness。
|
|
4
|
+
*
|
|
5
|
+
* 插件本身没有存储、没有工具、没有 Web 界面——只做一件事:把随包分发的
|
|
6
|
+
* 36 个技能注册进 `ctx.skills`。所有行为都由技能正文驱动,因此未来的技能
|
|
7
|
+
* 更新只需要替换 `skills/` 目录,不必改动这份宿主代码。
|
|
8
|
+
*/
|
|
9
|
+
import { dirname, join } from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { createProvider, PROVIDER_NAME } from './provider.js';
|
|
12
|
+
|
|
13
|
+
/** 插件在 cordis 组合里的名字。 */
|
|
14
|
+
export const name = 'compound-engineering';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 依赖的技能注册表服务。
|
|
18
|
+
*
|
|
19
|
+
* 声明 `inject` 让 cordis 等技能服务就绪后再调用 `apply()`,插件被装到
|
|
20
|
+
* 一个没有技能子系统的宿主上时会安静地不生效,而不是抛错。
|
|
21
|
+
*/
|
|
22
|
+
export const inject = ['skills'];
|
|
23
|
+
|
|
24
|
+
/** 技能目录相对包根的位置。 */
|
|
25
|
+
const SKILLS_SUBDIRECTORY = 'skills';
|
|
26
|
+
|
|
27
|
+
/** 由 `lib/index.js` 回推包根目录。 */
|
|
28
|
+
const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 把技能包挂到宿主上。
|
|
32
|
+
* @param ctx 宿主上下文
|
|
33
|
+
*/
|
|
34
|
+
export function apply(ctx) {
|
|
35
|
+
const skillsRoot = join(packageRoot, SKILLS_SUBDIRECTORY);
|
|
36
|
+
const logger = {
|
|
37
|
+
warn: (message) => ctx.logger.warn(message),
|
|
38
|
+
info: (message) => ctx.logger.info(message),
|
|
39
|
+
};
|
|
40
|
+
// 返回的 disposer 由 `registerProvider` 自己挂成 cordis effect,无需再包一层。
|
|
41
|
+
// `control.invalidate` 本插件用不到:技能是随包分发的静态文件,进程内不变。
|
|
42
|
+
ctx.skills.registerProvider(() => createProvider(skillsRoot, logger));
|
|
43
|
+
ctx.logger.info(`[${PROVIDER_NAME}] serving skills from ${skillsRoot}`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { PROVIDER_NAME };
|