dsh-plugin-guide 0.3.27 → 0.3.29
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/README-es.md +3 -3
- package/README-hi.md +3 -3
- package/README-pt.md +3 -3
- package/README-zh.md +5 -3
- package/README.md +5 -3
- package/SKILL.md +4 -3
- package/dist/dsh-plugin-dev.js +17 -8
- package/guide/family-toolchain.md +260 -0
- package/guide/links.md +3 -2
- package/guide/migration-0.2.md +64 -8
- package/guide/plugin-dev-guide.md +8 -6
- package/guide/quick-reference.es.md +3 -2
- package/guide/quick-reference.hi.md +4 -3
- package/guide/quick-reference.md +6 -5
- package/guide/quick-reference.pt.md +4 -3
- package/guide/quick-reference.zh-CN.md +6 -5
- package/guide/release-engineering.md +4 -2
- package/guide/release-engineering.zh-CN.md +4 -2
- package/guide/unfixed-issues.md +7 -0
- package/guide/version-matrix.md +309 -0
- package/guide/when-to-retire-a-plugin.md +5 -5
- package/guide/when-to-retire-a-plugin.zh-CN.md +5 -5
- package/package.json +4 -3
- package/references/community-ecosystem.md +2 -1
- package/references/dev-resource-landscape.md +294 -0
- package/references/official-docs/AGENTS.md +4 -5
- package/references/official-docs/SNAPSHOT.md +3 -3
- package/references/official-docs/THIRD_PARTY_NOTICES.md +2 -1
- package/references/official-docs/docs/AGENTS.md +1 -1
- package/references/official-docs/docs/architecture.i18n.yaml +14 -14
- package/references/official-docs/docs/architecture.md +11 -12
- package/references/official-docs/docs/architecture.zh.md +11 -12
- package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
- package/references/official-docs/docs/capability-seams.md +48 -23
- package/references/official-docs/docs/capability-seams.zh.md +48 -23
- package/references/official-docs/docs/cli-help.i18n.yaml +34 -0
- package/references/official-docs/docs/cli-help.md +203 -0
- package/references/official-docs/docs/cli-help.zh.md +205 -0
- package/references/official-docs/docs/config-catalog.md +305 -145
- package/references/official-docs/docs/config-catalog.zh.md +305 -145
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.i18n.yaml +6 -6
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.md +7 -5
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.zh.md +7 -5
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +6 -6
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.md +11 -9
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.zh.md +11 -9
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +4 -4
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +5 -5
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +5 -5
- package/references/official-docs/docs/defensive-patterns.i18n.yaml +2 -2
- package/references/official-docs/docs/defensive-patterns.md +1 -1
- package/references/official-docs/docs/defensive-patterns.zh.md +1 -1
- package/references/official-docs/docs/development.i18n.yaml +6 -6
- package/references/official-docs/docs/development.md +4 -2
- package/references/official-docs/docs/development.zh.md +4 -2
- package/references/official-docs/docs/event-producer-consumer.md +33 -33
- package/references/official-docs/docs/event-producer-consumer.zh.md +33 -33
- package/references/official-docs/docs/experimental-persistence-catalog.i18n.yaml +10 -0
- package/references/official-docs/docs/experimental-persistence-catalog.md +17 -0
- package/references/official-docs/docs/experimental-persistence-catalog.zh.md +17 -0
- package/references/official-docs/docs/module-graph.md +202 -131
- package/references/official-docs/docs/module-graph.zh.md +202 -131
- package/references/official-docs/docs/persistence-catalog.i18n.yaml +185 -158
- package/references/official-docs/docs/persistence-catalog.md +213 -112
- package/references/official-docs/docs/persistence-catalog.zh.md +213 -112
- package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.schema.json +76 -0
- package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +4 -4
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.md +2 -2
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.zh.md +2 -2
- package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.schema.json +290 -0
- package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.schema.json +457 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.md +60 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.schema.json +11474 -0
- package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.zh.md +60 -0
- package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.schema.json +2990 -0
- package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/README.i18n.yaml +4 -4
- package/references/official-docs/docs/persistence-changes/README.md +12 -10
- package/references/official-docs/docs/persistence-changes/README.zh.md +12 -10
- package/references/official-docs/docs/persistence-changes/historical-formats/README.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/historical-formats/README.md +1 -1
- package/references/official-docs/docs/persistence-changes/historical-formats/README.zh.md +1 -1
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.md +50 -50
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +50 -50
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.md +14 -14
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +14 -14
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.md +3 -3
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +3 -3
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.md +10 -10
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +10 -10
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.md +3 -3
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +3 -3
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.md +13 -13
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +13 -13
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +63 -63
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +63 -63
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +54 -54
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +54 -54
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +7 -7
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +7 -7
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +27 -27
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +27 -27
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +4 -4
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +4 -4
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +27 -27
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +27 -27
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +7 -7
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +7 -7
- package/references/official-docs/docs/persistence-schema.json +2084 -1827
- package/references/official-docs/docs/session-format-status.i18n.yaml +6 -6
- package/references/official-docs/docs/session-format-status.md +6 -6
- package/references/official-docs/docs/session-format-status.zh.md +6 -6
- package/references/official-docs/docs/subsystems/README.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/README.md +4 -1
- package/references/official-docs/docs/subsystems/README.zh.md +4 -1
- package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +7 -7
- package/references/official-docs/docs/subsystems/agent-team.md +10 -10
- package/references/official-docs/docs/subsystems/agent-team.zh.md +10 -10
- package/references/official-docs/docs/subsystems/boot.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/boot.md +4 -4
- package/references/official-docs/docs/subsystems/boot.zh.md +4 -4
- package/references/official-docs/docs/subsystems/claude-code-mods.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/claude-code-mods.md +1 -1
- package/references/official-docs/docs/subsystems/claude-code-mods.zh.md +1 -1
- package/references/official-docs/docs/subsystems/jobs.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/jobs.md +2 -3
- package/references/official-docs/docs/subsystems/jobs.zh.md +2 -3
- package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +4 -4
- package/references/official-docs/docs/subsystems/llm-streaming.md +41 -14
- package/references/official-docs/docs/subsystems/llm-streaming.zh.md +41 -14
- package/references/official-docs/docs/subsystems/persistence.md +2 -0
- package/references/official-docs/docs/subsystems/persistence.zh.md +2 -0
- package/references/official-docs/docs/subsystems/plan.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/plan.md +1 -1
- package/references/official-docs/docs/subsystems/plan.zh.md +1 -1
- package/references/official-docs/docs/subsystems/session-query.md +2 -0
- package/references/official-docs/docs/subsystems/session-query.zh.md +2 -0
- package/references/official-docs/docs/subsystems/session-title.i18n.yaml +6 -6
- package/references/official-docs/docs/subsystems/session-title.md +14 -5
- package/references/official-docs/docs/subsystems/session-title.zh.md +14 -5
- package/references/official-docs/docs/subsystems/session.i18n.yaml +3 -0
- package/references/official-docs/docs/subsystems/session.md +48 -5
- package/references/official-docs/docs/subsystems/session.zh.md +48 -5
- package/references/official-docs/docs/subsystems/skills.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/skills.md +2 -2
- package/references/official-docs/docs/subsystems/skills.zh.md +2 -2
- package/references/official-docs/docs/subsystems/slots.md +10 -8
- package/references/official-docs/docs/subsystems/slots.zh.md +10 -8
- package/references/official-docs/docs/subsystems/ssh.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/ssh.md +22 -11
- package/references/official-docs/docs/subsystems/ssh.zh.md +22 -11
- package/references/official-docs/docs/subsystems/subagent.i18n.yaml +24 -27
- package/references/official-docs/docs/subsystems/subagent.md +165 -229
- package/references/official-docs/docs/subsystems/subagent.zh.md +167 -233
- package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/system-prompt.md +32 -2
- package/references/official-docs/docs/subsystems/system-prompt.zh.md +32 -2
- package/references/official-docs/docs/subsystems/tools.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/tools.md +3 -3
- package/references/official-docs/docs/subsystems/tools.zh.md +3 -3
- package/references/official-docs/docs/subsystems/translation.i18n.yaml +19 -0
- package/references/official-docs/docs/subsystems/translation.md +103 -0
- package/references/official-docs/docs/subsystems/translation.zh.md +103 -0
- package/references/official-docs/docs/subsystems/web-server.i18n.yaml +8 -8
- package/references/official-docs/docs/subsystems/web-server.md +43 -8
- package/references/official-docs/docs/subsystems/web-server.zh.md +43 -8
- package/references/official-docs/docs/subsystems/webhook.md +1 -1
- package/references/official-docs/docs/subsystems/webhook.zh.md +1 -1
- package/references/official-docs/docs/subsystems/workflow.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/workflow.md +1 -1
- package/references/official-docs/docs/subsystems/workflow.zh.md +1 -1
- package/references/official-docs/docs/subsystems/working-directory.i18n.yaml +13 -0
- package/references/official-docs/docs/subsystems/working-directory.md +64 -0
- package/references/official-docs/docs/subsystems/working-directory.zh.md +64 -0
- package/references/official-docs/docs/subsystems/workspace.md +2 -2
- package/references/official-docs/docs/subsystems/workspace.zh.md +2 -2
- package/references/official-docs/docs/subsystems/worktrees.i18n.yaml +13 -0
- package/references/official-docs/docs/subsystems/worktrees.md +76 -0
- package/references/official-docs/docs/subsystems/worktrees.zh.md +76 -0
- package/references/official-docs/docs/testing.i18n.yaml +2 -2
- package/references/official-docs/docs/testing.md +1 -1
- package/references/official-docs/docs/testing.zh.md +1 -1
- package/references/official-docs/docs/tool-catalog.i18n.yaml +57 -45
- package/references/official-docs/docs/tool-catalog.md +95 -41
- package/references/official-docs/docs/tool-catalog.zh.md +99 -45
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.md +17 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.zh.md +17 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.md +28 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.zh.md +28 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.zh.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.md +17 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.zh.md +17 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.md +31 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.zh.md +31 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.zh.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.zh.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.zh.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.zh.md +20 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.md +19 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.zh.md +19 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.md +59 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.zh.md +59 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.zh.md +21 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.md +36 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.zh.md +36 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.md +25 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.zh.md +25 -0
- package/references/official-docs/docs/user/guide/github-review.i18n.yaml +4 -4
- package/references/official-docs/docs/user/guide/github-review.md +7 -10
- package/references/official-docs/docs/user/guide/github-review.zh.md +7 -10
- package/references/official-docs/docs/user/guide/public-deployments.i18n.yaml +8 -8
- package/references/official-docs/docs/user/guide/public-deployments.md +9 -5
- package/references/official-docs/docs/user/guide/public-deployments.zh.md +9 -5
- package/references/official-docs/packages/README.md +4 -6
- package/references/official-docs/website-docs.ts +1 -0
- package/references/official-plugin-dev-skill.md +2 -2
- package/references/sources.md +1 -1
- package/scripts/build-llms-full.mjs +8 -0
- package/scripts/verify-kit.ps1 +8 -1
- package/templates/js/README-es.md +1 -1
- package/templates/js/README-hi.md +1 -1
- package/templates/js/README-pt.md +1 -1
- package/templates/js/README-zh.md +1 -1
- package/templates/js/README.md +1 -1
- package/templates/ts/README-es.md +1 -1
- package/templates/ts/README-hi.md +1 -1
- package/templates/ts/README-pt.md +1 -1
- package/templates/ts/README-zh.md +1 -1
- package/templates/ts/README.md +1 -1
package/guide/migration-0.2.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# 迁移到 0.2 世代(migration-0.2.md)
|
|
2
2
|
|
|
3
3
|
> **适用对象**:所有针对 DeepSeek Harness `0.1.6-alpha.2` 及更早版本开发的第三方插件(bundle / 纯 cordis 插件 / UI 插件 / MCP 配置包)。
|
|
4
|
-
> **基线**:本文件对照 `
|
|
4
|
+
> **基线**:本文件对照 `d743267388641bc76f17c45ce8b4c231aed1d32c`(tag `dsh-v0.2.1-alpha.2`,2026-10-09,master HEAD)核验;区间起点为 `ddefc45fbc7f8e46dd73185e68295696d1297887`(tag `dsh-v0.1.6-alpha.2`,2026-09-17)。
|
|
5
|
+
> **覆盖范围**:§0–§12 覆盖 `0.1.6-alpha.2` → `0.2.1-alpha.1`;
|
|
6
|
+
> **§13 覆盖 `0.2.1-alpha.1` → `0.2.1-alpha.2`(19 个 seam,`L1`–`L19`)**。
|
|
7
|
+
> 两段跨度都已有稳定 ID,可被扫描器引用(`dsh-plugin-upgrade` 的走廊目前只到 `legC`)。
|
|
5
8
|
> **权威优先级**:官方 `docs/upgrade-guide/**`(原文副本 `references/official-docs/docs/upgrade-guide/`)> 本文件 > 社区文章。官方每一条"next release removes X"都对应本文件的一节。
|
|
6
9
|
> 事实核实方式:源码 `path:line` + 提交号,全部可在 `D:\deepseek-harness`(或你的 checkout)复核;无法核实的项已标注 `UNVERIFIED`。
|
|
7
10
|
|
|
@@ -13,11 +16,12 @@
|
|
|
13
16
|
|
|
14
17
|
## 1. 版本与发布线(先认清"最新"是哪一个)
|
|
15
18
|
|
|
16
|
-
| 问题 |
|
|
19
|
+
| 问题 | 答案(**2026-10-09 复核**;完整谱系见 [version-matrix.md](version-matrix.md)) |
|
|
17
20
|
|---|---|
|
|
18
|
-
| master 最新 tag | `dsh-v0.2.1-alpha.
|
|
21
|
+
| master 最新 tag | `dsh-v0.2.1-alpha.2`(2026-10-09,`d743267388641bc76f17c45ce8b4c231aed1d32c`;**= master HEAD**) |
|
|
19
22
|
| npm `latest` dist-tag | `0.2.0-rc.2`(**不是** master 最新 tag) |
|
|
20
|
-
| npm `alpha` / `next` | `alpha`=`0.2.1-alpha.
|
|
23
|
+
| npm `alpha` / `next` | `alpha`=`0.2.1-alpha.2`、`next`=`0.2.0-rc.2` |
|
|
24
|
+
| 是否存在稳定版 | **否**。全部 31 个 npm 版本都是 `-alpha.N`/`-rc.N`,全部 26 个 GitHub Release 都是 `prerelease: true` |
|
|
21
25
|
| 区间内发布线(9 个) | `0.1.6-alpha.2`(09-17) → `0.1.7-alpha.1`(09-22) → `0.1.5-rc.3`(09-22) → `0.1.7-alpha.2`(09-22) → `0.1.7-rc.1`(09-23) → `0.1.7-rc.2`(09-24) → `0.2.0-rc.1`(09-28) → `0.2.0-rc.2`(09-29) → `0.2.1-alpha.1`(10-03) |
|
|
22
26
|
| Node 门槛 | `^22.19.0 \|\| >=24.0.0`,**区间内未变**(无 `.nvmrc`/`.node-version` 文件) |
|
|
23
27
|
| `dsh.version` 字段 | **不存在**。DSH 的包清单只有 `dsh.bundle` / `dsh.profile` / `dsh.client` 三组键 |
|
|
@@ -39,7 +43,7 @@
|
|
|
39
43
|
| `SESSION_FORMAT_VERSION`(`c36a83ff6b` = `dsh-v0.1.7-alpha.1` 及之后) | **`4`**(`packages/core/session/src/types.ts`) |
|
|
40
44
|
| 首次写入 V4 的 tag | `dsh-v0.1.7-alpha.1`(2026-09-22)——**你本机装的 0.1.7-alpha.2 CLI 已经在写 V4** |
|
|
41
45
|
| 转换包 | `@deepseek-ai/dsh-session-format-v3-to-v4`(npm 自 `0.1.7-alpha.1` 起) |
|
|
42
|
-
| 官方 `docs/session-format-status.md` 的记录 | `
|
|
46
|
+
| 官方 `docs/session-format-status.md` 的记录 | ✅ **已解决**(2026-10-09 复核):上游已更新为 `latestReleasedVersion: 4` / `evidenceTag: dsh-v0.2.0-rc.2`。本项目镜像快照早于该更正(仍写 `latestReleasedVersion: 3` / `dsh-v0.1.5-alpha.1`),**以官方 live 为准** |
|
|
43
47
|
|
|
44
48
|
对插件作者的后果:
|
|
45
49
|
|
|
@@ -202,12 +206,64 @@ DSH 自带的 preset 里有一整套**官方插件开发技能**,这是本世
|
|
|
202
206
|
- [ ] 若把 patch 拆成多文件:改成 `dsh.bundle.patch` 数组,确认每个文件里的相对路径按各自目录解析。
|
|
203
207
|
- [ ] 若覆盖 `schedule` / `time-context` / `ui-schedule` / `schedule_*`:按 §6 核对 preset 分叉与 bundle 撤并。
|
|
204
208
|
- [ ] 依赖里没有 `"latest"` 形式的 `@deepseek-ai/*`(库包 `latest` 仍是 `0.0.1-rc.1`)。
|
|
205
|
-
- [ ] peer
|
|
209
|
+
- [ ] ⚠️ peer 范围覆盖**每条线一个 clause**(六子句规范形,见 [version-matrix.md](version-matrix.md) §4.1),且知道它**会被安装期强制**——不是文档意图:`dsh plugin add` 拿运行时版本比对,不匹配直接**拒绝安装**。**不要写 `>=0.1.2-rc.1 <0.3.0` 这种跨代开区间**:它放行安装,但运行时会炸。范围之外仍要配运行时探测。
|
|
206
210
|
- [ ] `pnpm pack` 后装进干净 `DSH_HOME` profile 冒烟(`dsh-plugin-dev verify` 已对此对齐)。
|
|
207
211
|
|
|
208
|
-
##
|
|
212
|
+
## 13. 新走廊:`0.2.1-alpha.1` → `0.2.1-alpha.2`(19 个 seam)
|
|
213
|
+
|
|
214
|
+
> **本节解决本文件此前的最大缺口**:`dsh-plugin-upgrade` 的走廊只覆盖到 `legC`(`0.1.5-rc.2 → 0.1.6-alpha.2`),
|
|
215
|
+
> 而本文件此前是 `0.2.1-alpha.1` 之前唯一有内容的文档,且**没有任何 seam ID**——没法被扫描器引用。
|
|
216
|
+
> 本节给该跨度**稳定 ID(`L1`–`L19`)**、**症状**、**修法**与**官方出处**。
|
|
217
|
+
>
|
|
218
|
+
> **适用判定**:`dsh --version` 落在 `0.2.1-alpha.2`(或更新)时,**逐条核对**;
|
|
219
|
+
> 停在 `0.2.0-rc.2` 及更早的**与本节无关**。
|
|
220
|
+
> 官方出处全部已随镜像落地:`references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/<item>/guide.md`。
|
|
221
|
+
>
|
|
222
|
+
> ⚠️ **目录名陷阱**:`v0.2.1-alpha.1/` 是**变更被引入时仓库的版本号**,描述的是
|
|
223
|
+
> **从该版升到下一版**的变更——即这 19 条**落在 `0.2.1-alpha.2`**。原文措辞是
|
|
224
|
+
> *"In v0.2.1-alpha.1, X was so; the next release no longer…"*。
|
|
225
|
+
|
|
226
|
+
| ID | 官方项 | 受影响面 | 症状(不修的后果) | 修法 |
|
|
227
|
+
|---|---|---|---|---|
|
|
228
|
+
| **L1** | `subagent-activations` | 子代理工具/服务 | `backgroundMode`、`enableRunInBackground`、`run_in_background` 全部失效;`dsh-subagent-in-process-driver` 包**被删**;`ctx.subagents.start()` 不存在 | 删两个配置键与工具参数;`startActivation({ …, delivery: 'caller' })` 后 `await activation.result`;自定义本地 provider 要实现 `prepareContinuable()` |
|
|
229
|
+
| **L2** | `tool-presentation-mode` | 工具呈现 | **`mode: both` 被拒绝**;`DSH_TOOLS_MODE=both` 与 `ctx.tools.presentAs('both')` 同样被拒 | 改为 `native` 或 `ptc` |
|
|
230
|
+
| **L3** | `web-listener-trust-config` | Web profile / 覆盖层 | **`webRuntime` 服务消失** → 注入它的 patch **永久等待**,Connection 起不来;`ctx.webRuntime.lanAddresses` 没了;**通配 host 加载期被拒** | `inject: [webRuntime]` → `[webStartup]`;`trustedHosts` 换服务;删 `lanAddresses`;通配 host 换具体 IP 字面量 |
|
|
231
|
+
| **L4** | `working-directory` | 提示词模板 / ACP·SDK 子代理 / `presentationMeta` | **保留 `{{cwd}}` 的自定义模板在发出模型请求前就失败**;`config.cwd` 被移除;嵌套 PTC 调用里的投影错误会让该次调用以 `ToolOutputError` 失败 | 删提示词里的目录子句并清空;`cwd` 改由子请求传或先调 `working_directory({ cd })`;保证投影纯且 JSON 安全 |
|
|
232
|
+
| **L5** | `session-title-provider-strategy` | 会话标题 | 三个导出符号消失(`registerSessionTitleLlmProvider` / `generateSessionTitleWithLlm` / `SessionTitleLlmMessageSelector`);`targetWords`/`targetCjkCharacters` 移出共享 Config | 改用 `ctx.sessionTitle.register({ id, automatic, generate })`,自己搭 system/input;拒绝 `tool-calls`/`max-tokens` 收尾 |
|
|
233
|
+
| **L6** | `session-title-adapters` | LLM 适配器 | 标题请求改走 `ctx.llm.prepareCall()`;只挂 `llm/stream` 中间件的组合不再被服务;`reasoning.efforts` 顺序错会被拒 | 用 `ctx.llm.registerAdapter()` 注册标题路由;`efforts` **从低到高**排 |
|
|
234
|
+
| **L7** | `ssh-helper-launch` | SSH / 远端 PTC | `node`/`bootstrapPath`/`bootstrapHash` 三键消失;**要求 SSH protocol 2**;helper 与 hash 不同步即失败 | 改 `launch: { kind: 'node-script' }` 或 `{ kind: 'executable' }`;helper 与 hash **必须同改** |
|
|
235
|
+
| **L8** | `team-direct-inbox` | Agent Teams(**数据丢失**) | `send_message` 只回 `{"sent":true}`(无 id、无 queued);`maxPendingMessagesPerMember` 被移除;**未投递的排队消息永不派发** | ⚠️ **升级前**让待发消息跑完;升级后必需的显式重发;改读 `sent` |
|
|
236
|
+
| **L9** | `instruction-home-override` | 指令加载 | `dsh-agent-instructions` 的 `dshHome` 字段被移除,**残留键被静默忽略**(不报错) | 删 `dshHome`;改用进程环境变量 `DSH_HOME`;用 `--dump-config` 复核 |
|
|
237
|
+
| **L10** | `experimental-package-composition` | profile 组合 | CLI 与 Python runtime 的安装依赖**不再含 hook 桥**;**装了不等于挂上**;只"启用"已被删行的 patch **不会把它插回来** | 显式装 peer;选 bundle **先于**覆盖其行;用完整 `insert` 替代对已删行的 override |
|
|
238
|
+
| **L11** | `native-subagent-bundle-tools` | Bundle 元数据(**类型破坏**) | 选中 bundle 会额外注册 Host 全局工具,对最小预设也可见;**构造或严格校验 `BundleInfo` 必须补两个必填字段 `official`/`availability`**,`PluginPackageRef` 同理 | 补必填字段;删同名冗余 Host 行(会被遮蔽) |
|
|
239
|
+
| **L12** | `python-ptc-sandbox` | Python PTC | Python runtime **要求 `sandbox` + `sandboxPolicy` 服务**,默认 `read-only`;受限运行以 `sandbox-unavailable` 失败 | 挂 `dsh-sandbox-local` + `dsh-sandbox-policy`;设 `sandbox-policy` 行的 `mode`/`workspaceRoot` |
|
|
240
|
+
| **L13** | `python-optional-resources` | Python 运行时资源 | wheels **不再内置** Office sidecar 与 authoring 解释器;SDK 启动不再自动下载 | 用前显式 `download_office()` / `download_primary_runtime()`;离线预置 `DSH_RESOURCE_CACHE` |
|
|
241
|
+
| **L14** | `plugin-option-placement` | CLI 调用 | **`dsh plugin add <pkg> --profile <name>` 现在直接失败** | 改为 `dsh plugin --profile <name> add <package>`(`--profile` 必须在转发参数之前) |
|
|
242
|
+
| **L15** | `terminal-command-labels` | 终端 UI 插件(**类型破坏**) | `TerminalBlockLabels` 新增**必填** `commandLine(line: number): string` | 给每个 labels 对象补 `commandLine`,返回本地化名称 |
|
|
243
|
+
| **L16** | `deepseek-model-discovery` | 模型发现 | `deepseek-official` 路由**无 key 时返回空目录** → Desktop/Web 隐藏 DeepSeek 组 | 配 key 或用 `apiKeyEnv`(默认 `DEEPSEEK_API_KEY`)指定的环境变量;消费方要处理空目录 |
|
|
244
|
+
| **L17** | `new-session-generations` | 客户端集成 | 新建会话**同时新建 Agent**,不再复用空会话(改过预设定义后旧会话不会自动跟上) | 改预设后用 New Session;要复用用 `openWorkspace`/`connectWorkspace` |
|
|
245
|
+
| **L18** | `mock-messages-events` | 测试支撑 | `dsh-llm-mock-server` 会在结构化 SSE 负载旁**同时发具名 Messages 事件** | 消费具名事件与其 `data` 字段,别只筛匿名消息 |
|
|
246
|
+
| **L19** | `desktop-test-auth-popup` | Desktop 测试构建 | 所有**测试**认证弹窗默认关闭;测试网关 cookie 不过重启 | 需要时设 `updates.allowTestAuthPopupWindow: true` 并**完全重启** |
|
|
247
|
+
|
|
248
|
+
**另有一条回填**(在 `v0.2.0-rc.2/` 目录里、但基线之后才加入):
|
|
249
|
+
`bundled-python-tests` —— 打包的 NumPy/pandas **测试目录**被移除;要跑上游测试套件请
|
|
250
|
+
**另建** Python 环境(别用会被升级替换的托管运行时目录)。它放在旧目录属于例外——
|
|
251
|
+
上游自己的规则是"版本号 bump 后旧版本目录冻结"。
|
|
252
|
+
|
|
253
|
+
**官方发布说明**(双语,点名上述变更):
|
|
254
|
+
`https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.1-alpha.2`。
|
|
255
|
+
|
|
256
|
+
> **本节与 `guide/version-matrix.md` §3 是同一批事实的两种形态**:矩阵按"作者视角的破坏清单"写,
|
|
257
|
+
> 本节按"可被扫描器引用的 seam 表"写(`L1`–`L19` + 症状 + 修法)。
|
|
258
|
+
> **给 `dsh-plugin-upgrade` 提议 `legD` 走廊时,直接引用本节 ID。**
|
|
259
|
+
> 本库的 `dsh-plugin-dev check` 中 `redline-async-apply-registration` 是家族内该缺陷的唯一检测器,
|
|
260
|
+
> 已被 `legC` 的 W0 卡引用为 E2 的预防门——同一条联动可以复用到本节。
|
|
209
261
|
|
|
210
|
-
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## 14. 已知分歧与未核实项(诚实标注)
|
|
265
|
+
|
|
266
|
+
1. ✅ **已解决(2026-10-13)**:上游 `docs/session-format-status.md` 已是 `latestReleasedVersion: 4` / `evidenceTag: dsh-v0.2.0-rc.2`,与代码和 npm 一致;本项目 `references/official-docs/` 镜像**已重同步**到 `d743267388641bc76f17c45ce8b4c231aed1d32c`(`dsh-v0.2.1-alpha.2`,2026-10-13),该矛盾在本库内部也一并消失。
|
|
211
267
|
2. `UNVERIFIED`:未解包已发布的 npm tarball 逐字节确认产物与 tag 一致。
|
|
212
268
|
3. `UNVERIFIED`:仓库内无 `CHANGELOG.md`、无 `docs/persistence-changes/releases/*` 新条目,因此**没有官方逐版本 release notes 可引**;tag 对应的提交主题是唯一线索。
|
|
213
269
|
4. `ctx.agent` 在两个基线都**不存在**(不是"被移除")。
|
|
@@ -157,16 +157,18 @@ ctx.effect(() => { const t = setInterval(...); return () => clearInterval(t) })
|
|
|
157
157
|
|
|
158
158
|
### 3.5 事件(Events)
|
|
159
159
|
|
|
160
|
-
派发模式(事件契约的一部分,新事件必须用 `@mode`
|
|
160
|
+
派发模式(事件契约的一部分,新事件必须用 `@mode` 标注)。**官方共五种**——
|
|
161
|
+
权威定义见 `references/official-docs/docs/cordis-api/events.md`(`'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall'`):
|
|
161
162
|
|
|
162
163
|
| 模式 | await? | 顺序 | 返回值 |
|
|
163
164
|
|---|---|---|---|
|
|
164
165
|
| `emit` | 否 | 注册序 | 无 |
|
|
165
|
-
| `waterfall` | 否 | 注册序 | 有(管线结果) |
|
|
166
166
|
| `parallel` | 是 | 并行 | 无 |
|
|
167
167
|
| `serial` | 是 | 注册序 | 有(首个非空即止) |
|
|
168
|
+
| `bail` | 否 | 注册序 | 有(首个非 `null/false/undefined` 即短路,**停止后续**) |
|
|
169
|
+
| `waterfall` | 否 | 注册序 | 有(管线结果,逐级传递) |
|
|
168
170
|
|
|
169
|
-
- `ctx.bail
|
|
171
|
+
- **`serial` 与 `bail` 的区别是"停不停"**:`serial` 在首个非空值后停止后续监听器;`bail` 同样短路,但语义归类为"放弃/否决",`ctx.bail` 是其对应调用式。二者都**不是** `emit`(`emit` 永远跑完所有监听器)。
|
|
170
172
|
- **waterfall 铁律**:监听器签名 `(payload, next)`,**必须调 `next()` 才能下传**;不调即短路(这正是拦截/网关的语义)。协作式监听器改共享对象后 `next()`;替换结果的监听器负责让下游只看到替换后的结果。仅在"必须最先执行"时才用 `prepend: true`。
|
|
171
173
|
- **类型安全**:`declare module '@deepseek-ai/cordis' { interface Events { 'my-plugin/ready': (p: {id: string}) => void } }`。
|
|
172
174
|
- **命名空间**:`namespace/action`(`agent/step`、`tools/result`、`session/event`……)。
|
|
@@ -372,7 +374,7 @@ Hook 的"原生 hook"就是挂在拦截点上的普通 Cordis 插件,不需要
|
|
|
372
374
|
|
|
373
375
|
### 7.0 插件形态选型:bundle vs 纯 cordis(两条官方安装通道)
|
|
374
376
|
|
|
375
|
-
>
|
|
377
|
+
> 时间线(社区实测记录,归档仓库 `vlln/plugin-registry`,**该仓 2026-10-03 已归档**,继任者 `vlln/dsh-skills`):官方 0809 推出 repository-plugin 机制(`.dsh-plugin`),**0811 已从 `vendor/loader/src/repository.ts` 移除**(−258 行,`plugin_search/install/uninstall/status` 四个工具随之不复存在)。此后外部插件只有 web profile 一条官方路径,按是否声明 `dsh.bundle` 分两类。
|
|
376
378
|
> **预览期漂移提示**:官方文档里可能仍有残留旧表述(如 `docs/subsystems/skills.md` 的 "repository plugins land in the global layer"),且服务名在快照间会改名(0812 批量重命名:`httpServer→webServer`、`tasks→jobs`、`bash→shell`、`compact→compaction` 等 17 项)——遇到矛盾以**当前宿主的生成式参考**(subsystems 页 Cordis API 区)与社区事实源(`references/community-repo-deep-dive.md` §1.5)为准。
|
|
377
379
|
|
|
378
380
|
| 需求 | 类型 | 安装通道 | 生效 |
|
|
@@ -487,7 +489,7 @@ bundle 挂一个普通 provider 插件:`inject = ['cmdlineArgs']`,用 `@deep
|
|
|
487
489
|
- **官方社群**:[Discord](https://discord.gg/Ycq5dCaS4) · [GitHub Discussions](https://github.com/deepseek-ai/deepseek-harness/discussions) · 发布插件时给仓库加 [`dsh-plugin` topic](https://github.com/topics/dsh-plugin) 提升可见度。
|
|
488
490
|
- **话题清单**:[GitHub topic `dsh-plugin`](https://github.com/topics/dsh-plugin)(三期早期快照 304/550/993 供续期对比;**08-15 第四期快照** `downloads/topic-snapshots/dsh-plugin-topic-2026-08-15/`:去重 998 个、抓取期间 API total_count 2668→2671 持续增长——search API 分页上限 1000 条)。
|
|
489
491
|
- **精选列表**:[awesome-dsh-plugins](https://github.com/AdamPlatin123/awesome-dsh-plugins)(每日兼容性追踪)、[awesome-deepseek-harness](https://github.com/0xsline/awesome-deepseek-harness)、[Alex-Yanggg/awesome-DSH-plugin](https://github.com/Alex-Yanggg/awesome-DSH-plugin)、[bruc3van/awesome-dsh-plugin](https://github.com/bruc3van/awesome-dsh-plugin);08-14 新增 [walkinglabs](https://github.com/walkinglabs/awesome-deepseek-harness-plugins)、[vvlife](https://github.com/vvlife/awesome-deepseek-harness-plugins) 的 awesome-deepseek-harness-plugins 与 [cccakeee/awesome-dsh-plugins](https://github.com/cccakeee/awesome-dsh-plugins)(完整清单见 community-ecosystem.md §5)。
|
|
490
|
-
- **插件注册/分发中心**:[vlln/
|
|
492
|
+
- **插件注册/分发中心**:[vlln/dsh-skills](https://github.com/vlln/dsh-skills)(✅ **现行**:`make-dsh-plugin` 开发引导 skill + 0.1.6→0.2.0 改名症状表 + 实测踩坑,基线 0.2.0-rc.2);~~[vlln/plugin-registry](https://github.com/vlln/plugin-registry)~~(⚠️ **2026-10-03 归档**,冻结在 0.1.5 基线;其**机制时间线**仍可引用:repository-plugin 0809 推出、0811 移除)、[omdsh-dev/dsh-hub-workshop](https://github.com/omdsh-dev/dsh-hub-workshop)(插件市场/注册 workshop,`INTAKE.md` 是收录权威;dsh-external/hub 08-14 核查已 404);08-14 另出现多个 Web GUI 内插件市场([DSH-Plugins-Marketplace](https://github.com/bradeGithub/DSH-Plugins-Marketplace)、[dsh-plugin-installer](https://github.com/Toukaiteio/dsh-plugin-installer)、[dsh-plugin-marketplace](https://github.com/Scorp1o117/dsh-plugin-marketplace),未深读,信任边界同 dsh-hub-workshop"发现 ≠ 安装权限")。
|
|
491
493
|
- **模板与脚手架**:[omdsh-dev/plugin-template](https://github.com/omdsh-dev/plugin-template)(完整生产模板:src 四文件结构 + 7 个开发 skill + tsdown 自包含 prepare + 契约文档 docs/dsh-plugin-contracts.md)、[`npm create dsh-plugin@latest`](https://github.com/whyihaveyou/dsh-suite)(whyihaveyou/dsh-suite 的脚手架,tool/events/webui 三模板)、[omdsh-dev/dsh-plugin-skills](https://github.com/omdsh-dev/dsh-plugin-skills)、[omdsh-dev/dsh-plugin-dev](https://github.com/omdsh-dev/dsh-plugin-dev)(踩坑档案 skill+文档,20 个实测坑)。
|
|
492
494
|
- **教程与最小模板**:[Opr4Mp3r/deepseek-harness-plugin-from-scratch](https://github.com/Opr4Mp3r/deepseek-harness-plugin-from-scratch)(代码审计式渐进教程:checkpoint + 反模式 17 坑 + 交付检查单,锁 harness@47f9438/npm rc.6)、[randerous/dsh-turn-meta](https://github.com/randerous/dsh-turn-meta)(最小首插件:agent/pre-step + prepend:true + source 归属注入范例)、[omdsh-dev/fabric](https://github.com/omdsh-dev/fabric)(类 MC Fabric 的 hook 处理器)、[omdsh-dev/dsh-plugin-check](https://github.com/omdsh-dev/dsh-plugin-check)(插件健康检查:清单协议/patch 格式/构建陷阱)、[bobleer/deepseek-harness-plugin-mcp](https://github.com/bobleer/deepseek-harness-plugin-mcp)(经 MCP 发现/安装/运行插件)、[Nagi-ovo/dsh-find-plugins](https://github.com/Nagi-ovo/dsh-find-plugins)、[omdsh-dev/dsh-hub-workshop](https://github.com/omdsh-dev/dsh-hub-workshop)(插件市场/注册 workshop)。
|
|
493
495
|
- **兼容性追踪**:[whyihaveyou/dsh-suite](https://github.com/whyihaveyou/dsh-suite)(双语目录 + 每日兼容性 CI,167+ 插件带 🟢/⚪ 徽章)、[AdamPlatin123/awesome-dsh-plugins](https://github.com/AdamPlatin123/awesome-dsh-plugins)(每日兼容性追踪)。
|
|
@@ -503,7 +505,7 @@ bundle 挂一个普通 provider 插件:`inject = ['cmdlineArgs']`,用 `@deep
|
|
|
503
505
|
|
|
504
506
|
## 9.1 版本兼容与迁移(0.2 世代必读)
|
|
505
507
|
|
|
506
|
-
- **先认版本**:`dsh --version
|
|
508
|
+
- **先认版本**:`dsh --version`,然后读 [version-matrix.md](version-matrix.md)(版本适配矩阵:五个"最新"的区分、子包 `latest` 冻结陷阱、破坏性变更断层、peer 区间选择、会话格式谱系)。`0.1.7-alpha.1` 起包含本世代全部破坏性变更(会话格式 V4)。npm 上 `latest`=`next`=`0.2.0-rc.2`、`alpha`=`0.2.1-alpha.2`,而 master 最新 tag 是 `dsh-v0.2.1-alpha.2`——**这四个"最新"不是同一个东西**;**不存在稳定版**(全部 31 个 npm 版本都是 prerelease)。
|
|
507
509
|
- **peer 范围要写全两侧的 prerelease 元组**(如 `>=0.1.2-rc.1 <0.2.0 || … || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0`)。⚠️ **这个范围会被安装期强制**,不是文档意图:`dsh plugin add` 用运行时版本比对它,不匹配就拒绝安装并打印你声明的范围。所以少一个 0.2.x clause,插件在 0.2.x 宿主上**根本装不上**(拦在安装期,不是运行期)。范围之外仍要靠运行时特性探测——范围只表达"能不能装",表达不了"某个 API 在不在"。
|
|
508
510
|
- **共享实例的 dsh 包只放 peer + dev**,绝不放 dependencies(否则 profile 内副本会遮蔽运行时版本)。
|
|
509
511
|
- **升级后必做**:`dsh --profile <name> --dump-config` 看有没有 `patch: entry <id> not found`(上游删行/改名后,你的 override 会**静默失效**);再跑一次真实能力。
|
|
@@ -53,7 +53,7 @@ Otras formas: objeto `export default { name, inject, apply }`; clase `class X ex
|
|
|
53
53
|
|
|
54
54
|
Ciclo de vida: `PENDING → LOADING → ACTIVE` (si apply lanza → FAILED); `ACTIVE → UNLOADING → DISPOSED`. Si un servicio requerido desaparece, el plugin se descarga; se recarga cuando el servicio vuelve.
|
|
55
55
|
|
|
56
|
-
## Modos de despacho de eventos
|
|
56
|
+
## Modos de despacho de eventos (cinco, incluido bail)
|
|
57
57
|
|
|
58
58
|
| Modo | await | Orden | Valor de retorno |
|
|
59
59
|
|---|---|---|---|
|
|
@@ -61,6 +61,7 @@ Ciclo de vida: `PENDING → LOADING → ACTIVE` (si apply lanza → FAILED); `AC
|
|
|
61
61
|
| waterfall | no | orden de registro | sí (**no llamar `next()` cortocircuita**) |
|
|
62
62
|
| parallel | sí | paralelo | ninguno |
|
|
63
63
|
| serial | sí | orden de registro | sí (el primero no vacío detiene) |
|
|
64
|
+
| bail | no | orden de registro | sí (el primero no null/false/undefined cortocircuita y DETIENE el resto) |
|
|
64
65
|
|
|
65
66
|
Eventos tipados (declaration merging):
|
|
66
67
|
|
|
@@ -136,7 +137,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloque com
|
|
|
136
137
|
3. **El mecanismo más débil que baste**: `ctx.tools.restrict()` (solo quita) < `ctx.tools.guard()` (solo deniega) < reescritura por waterfall (depende del orden) < `system-prompt/assemble` (reemplaza todo). Observa resultados finales en `tools/result`; usa `tools/post-execute` solo para transformar.
|
|
137
138
|
4. Visible-para-el-modelo ⇔ registrado: una nueva entrada visible requiere un nuevo evento de sesión (`SessionEventMap`) — **lo añade el host**, no tú (ver regla 10).
|
|
138
139
|
5. Nunca codifiques valores ajustables (prueba: ¿puede cambiarlos cordis.yml?); la mala configuración falla en voz alta. Los campos editables en vivo usan `Volatile<T>` + `loader/volatile-update` (el namespace del formulario es el id de la entrada del perfil).
|
|
139
|
-
6. Paquetes de plugin independientes: cordis es peerDependency con la misma identidad del host (mezclar scoped `@deepseek-ai/cordis` y unscoped divide identidades); ESM; manifiesto `dsh.bundle` (`patch` puede ser una lista ordenada); instalaciones git necesitan `prepare` + `allowBuilds`; publica `lib/` o un tarball. Los paquetes dsh de instancia compartida van **solo en peerDependencies + devDependencies**, nunca en `dependencies` (una copia en el perfil ensombrece el runtime en silencio
|
|
140
|
+
6. Paquetes de plugin independientes: cordis es peerDependency con la misma identidad del host (mezclar scoped `@deepseek-ai/cordis` y unscoped divide identidades); ESM; manifiesto `dsh.bundle` (`patch` puede ser una lista ordenada); instalaciones git necesitan `prepare` + `allowBuilds`; publica `lib/` o un tarball. Los paquetes dsh de instancia compartida van **solo en peerDependencies + devDependencies**, nunca en `dependencies` (una copia en el perfil ensombrece el runtime en silencio). ⚠️ Corregido: **los rangos de peers SÍ se aplican al instalar** — `dsh plugin add` compara la versión del runtime con el rango declarado de `@deepseek-ai/dsh-*` y rechaza la instalación; solo `engines.dsh` es declarativo y no se aplica. Un rango indica "se puede instalar", no "esta API existe": mantén la sonda en runtime (selección de rango: `version-matrix.md` §4).
|
|
140
141
|
7. Publica metadatos de presentación: `locale/*.json` con `meta.title`/`meta.description` y un `./icon` exportado (SVG/PNG/JPEG/WebP, ≤256 KiB, dentro del paquete). Los plugins de subruta **nunca** leen su propio `package.json`.
|
|
141
142
|
8. Documentación bilingüe en pares; descripciones/prompts son comportamiento; cambios no triviales llevan Agent Note; ejecuta el conjunto mínimo de checks antes de empujar (dsh-pre-push-checks).
|
|
142
143
|
9. Los ids opacos entre límites son branded (`Branded<B>` de `dsh-brand`), nunca `string` pelado.
|
|
@@ -53,7 +53,7 @@ export function apply(ctx: Context, config: Config) {
|
|
|
53
53
|
|
|
54
54
|
जीवनचक्र: `PENDING → LOADING → ACTIVE` (apply में त्रुटि → FAILED); `ACTIVE → UNLOADING → DISPOSED`। आवश्यक सेवा गायब होने पर प्लगइन अनलोड होता है; सेवा लौटने पर पुनः लोड होता है।
|
|
55
55
|
|
|
56
|
-
## इवेंट डिस्पैच मोड
|
|
56
|
+
## इवेंट डिस्पैच मोड (पाँच, bail सहित)
|
|
57
57
|
|
|
58
58
|
| मोड | await | क्रम | रिटर्न मान |
|
|
59
59
|
|---|---|---|---|
|
|
@@ -61,6 +61,7 @@ export function apply(ctx: Context, config: Config) {
|
|
|
61
61
|
| waterfall | नहीं | पंजीकरण क्रम | हाँ (**`next()` न बुलाना शॉर्ट-सर्किट करता है**) |
|
|
62
62
|
| parallel | हाँ | समानांतर | कोई नहीं |
|
|
63
63
|
| serial | हाँ | पंजीकरण क्रम | हाँ (पहला गैर-खाली रुकता है) |
|
|
64
|
+
| bail | नहीं | पंजीकरण क्रम | हाँ (पहला non-null/false/undefined शॉर्ट-सर्किट करता है और बाकी रोक देता है) |
|
|
64
65
|
|
|
65
66
|
टाइप्ड इवेंट (declaration merging):
|
|
66
67
|
|
|
@@ -136,7 +137,7 @@ Consumer (`dsh-tool-my-cap`): `inject = ['tools','myCap']`, `ctx.tools.register(
|
|
|
136
137
|
3. **जो सबसे कमज़ोर mechanism काम करे वही लें**: `ctx.tools.restrict()` (केवल हटाता है) < `ctx.tools.guard()` (केवल मना करता है) < waterfall rewrite (क्रम पर निर्भर) < `system-prompt/assemble` (सब बदल देता है)। अंतिम परिणाम `tools/result` पर देखें; बदलने के लिए ही `tools/post-execute` लें।
|
|
137
138
|
4. मॉडल-दृश्य ⇔ लॉग: नई मॉडल-दृश्य इनपुट के लिए नया सत्र इवेंट चाहिए (`SessionEventMap`) — **होस्ट जोड़ता है**, आप नहीं (नियम 10 देखें)।
|
|
138
139
|
5. समायोज्य मान कभी हार्डकोड न करें (कसौटी: क्या cordis.yml इसे बदल सकता है?); गलत कॉन्फ़िग ज़ोर से विफल हो। लाइव-संपादन योग्य फ़ील्ड `Volatile<T>` + `loader/volatile-update` से (फ़ॉर्म namespace = profile entry id)।
|
|
139
|
-
6. स्वतंत्र प्लगइन पैकेज: cordis peerDependency है और होस्ट पहचान से मेल खाना चाहिए (scoped `@deepseek-ai/cordis` और unscoped मिलाना पहचान बाँट देता है); ESM; `dsh.bundle` मैनिफ़ेस्ट (`patch` क्रमबद्ध array हो सकता है); git इंस्टॉल को `prepare` + `allowBuilds` चाहिए; `lib/` या tarball प्रकाशित करें। साझा-इंस्टेंस वाले dsh पैकेज **केवल peerDependencies + devDependencies** में रखें, `dependencies` में कभी नहीं (profile की प्रति runtime को चुपचाप ढक देती
|
|
140
|
+
6. स्वतंत्र प्लगइन पैकेज: cordis peerDependency है और होस्ट पहचान से मेल खाना चाहिए (scoped `@deepseek-ai/cordis` और unscoped मिलाना पहचान बाँट देता है); ESM; `dsh.bundle` मैनिफ़ेस्ट (`patch` क्रमबद्ध array हो सकता है); git इंस्टॉल को `prepare` + `allowBuilds` चाहिए; `lib/` या tarball प्रकाशित करें। साझा-इंस्टेंस वाले dsh पैकेज **केवल peerDependencies + devDependencies** में रखें, `dependencies` में कभी नहीं (profile की प्रति runtime को चुपचाप ढक देती है)। ⚠️ सुधार: **peer रेंज इंस्टॉल के समय लागू होती है** — `dsh plugin add` runtime संस्करण की तुलना घोषित `@deepseek-ai/dsh-*` रेंज से करता है और इंस्टॉल अस्वीकार कर देता है; केवल `engines.dsh` घोषणात्मक है और लागू नहीं होता। रेंज बताती है "इंस्टॉल हो सकता है", यह नहीं कि "यह API मौजूद है" — runtime probing रखें (रेंज चयन: `version-matrix.md` §4)।
|
|
140
141
|
7. प्रदर्शन मेटाडेटा ज़रूर भेजें: `locale/*.json` में `meta.title`/`meta.description` और export किया हुआ `./icon` (SVG/PNG/JPEG/WebP, ≤256 KiB, पैकेज के भीतर)। subpath प्लगइन अपना `package.json` **कभी नहीं** पढ़ते।
|
|
141
142
|
8. दस्तावेज़ द्विभाषी जोड़ों में; टूल विवरण/प्रॉम्प्ट ही व्यवहार हैं; गैर-तुच्छ बदलाव में Agent Note चाहिए; पुश से पहले न्यूनतम जाँच सेट चलाएँ (dsh-pre-push-checks)।
|
|
142
143
|
9. सीमाओं के पार अपारदर्शी ids branded होते हैं (`Branded<B>` from `dsh-brand`), कभी भी नंगे `string` नहीं।
|
|
@@ -153,7 +154,7 @@ Consumer (`dsh-tool-my-cap`): `inject = ['tools','myCap']`, `ctx.tools.register(
|
|
|
153
154
|
- Windows junctions PowerShell `New-Item -ItemType Junction` से; vitest ड्राइव अक्षर बड़ा `C:/`।
|
|
154
155
|
- `DSH_PERMISSION_MODE=danger-full-access` उच्च जोखिम है (Windows पर सैंडबॉक्स बैकएंड नहीं, अनुमोदन बंद); `~/.dsh/.env` में `DSH_*` स्टार्टअप तोड़ता है।
|
|
155
156
|
- सत्र फ़ाइलें मल्टी-फ़्रेम zstd हैं: `scanZstdFrames`/`createZstdFrameDecoder` उपयोग करें (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)।
|
|
156
|
-
- npm: बिना स्कोप वाला `dsh` असंबंधित node-dsh प्रोजेक्ट (एक shell) है — `@deepseek-ai/dsh` इंस्टॉल करें (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.
|
|
157
|
+
- npm: बिना स्कोप वाला `dsh` असंबंधित node-dsh प्रोजेक्ट (एक shell) है — `@deepseek-ai/dsh` इंस्टॉल करें (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.2); `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-base`, `@deepseek-ai/dsh-headless` और `@deepseek-ai/dsh-session-persistence-jsonl` का `latest` अब भी पुराना है (0.0.1-rc.1), इसलिए `next` (0.2.0-rc.2) या `alpha` (0.2.1-alpha.1) पिन करें; `create-dsh-plugin` latest=0.2.3; `@deepseek-ai/cordis` latest=4.0.4 और नया टैग `dsh-0-2-1-alpha-1`=4.0.5-alpha.1; dsh-core/dsh-sdk अभी भी अप्रकाशित (2026-10-06 को सत्यापित)।
|
|
157
158
|
- पथ तुलना से पहले दोनों ओर `resolve()` करें (Windows बैकस्लैश जाल)।
|
|
158
159
|
|
|
159
160
|
## दस्तावेज़ लिंक
|
package/guide/quick-reference.md
CHANGED
|
@@ -53,7 +53,7 @@ Other forms: object `export default { name, inject, apply }`; class `class X ext
|
|
|
53
53
|
|
|
54
54
|
Lifecycle: `PENDING → LOADING → ACTIVE` (apply throws → FAILED); `ACTIVE → UNLOADING → DISPOSED`. A required service disappearing unloads the plugin; it reloads when the service returns.
|
|
55
55
|
|
|
56
|
-
## Event dispatch modes
|
|
56
|
+
## Event dispatch modes (five, including bail)
|
|
57
57
|
|
|
58
58
|
| Mode | awaited | Order | Return value |
|
|
59
59
|
|---|---|---|---|
|
|
@@ -61,6 +61,7 @@ Lifecycle: `PENDING → LOADING → ACTIVE` (apply throws → FAILED); `ACTIVE
|
|
|
61
61
|
| waterfall | no | registration order | yes (**not calling next() short-circuits**) |
|
|
62
62
|
| parallel | yes | parallel | none |
|
|
63
63
|
| serial | yes | registration order | yes (first non-empty stops) |
|
|
64
|
+
| bail | no | registration order | yes (first non-null/false/undefined short-circuits and stops the rest) |
|
|
64
65
|
|
|
65
66
|
Typed events (declaration merging):
|
|
66
67
|
|
|
@@ -136,7 +137,7 @@ Chunk protocol: `block-start` → `text-delta*` → `block-end` (complete block)
|
|
|
136
137
|
3. Weakest mechanism that suffices: `ctx.tools.restrict()` (remove only) < `ctx.tools.guard()` (deny only) < waterfall rewrite (order-dependent) < `system-prompt/assemble` (replaces everything). Observe final outcomes on `tools/result`; use `tools/post-execute` only to transform.
|
|
137
138
|
4. Model-visible ⇔ logged: new model-visible input requires a new session event (`SessionEventMap`) — added by the host, never by appending a new `type` yourself (see rule 8).
|
|
138
139
|
5. Never hardcode tunables (test: can cordis.yml change it?); misconfiguration fails loud. Live-editable user fields use `Volatile<T>` + `loader/volatile-update` (the form namespace is the profile entry id).
|
|
139
|
-
6. Standalone plugin packages: cordis is a peerDependency matching the host identity (mixing scoped `@deepseek-ai/cordis` and unscoped splits identities); ESM; `dsh.bundle` manifest (`patch` may be an ordered array); git installs need `prepare` + `allowBuilds`; ship `lib/` or a tarball. Shared-instance dsh packages go in **peerDependencies + devDependencies only** — never `dependencies` (a profile copy silently shadows the runtime
|
|
140
|
+
6. Standalone plugin packages: cordis is a peerDependency matching the host identity (mixing scoped `@deepseek-ai/cordis` and unscoped splits identities); ESM; `dsh.bundle` manifest (`patch` may be an ordered array); git installs need `prepare` + `allowBuilds`; ship `lib/` or a tarball. Shared-instance dsh packages go in **peerDependencies + devDependencies only** — never `dependencies` (a profile copy silently shadows the runtime). ⚠️ Corrected: **peer ranges ARE enforced at install time** — `dsh plugin add` compares the runtime version against the declared `@deepseek-ai/dsh-*` range and refuses the install; only `engines.dsh` is declarative and unenforced. A range says "can it install", not "does this API exist" — keep runtime probing (range selection: `version-matrix.md` §4).
|
|
140
141
|
7. Ship display metadata: `locale/*.json` `meta.title`/`meta.description` plus an exported `./icon` (SVG/PNG/JPEG/WebP, ≤256 KiB, inside the package). Subpath plugins never read their own `package.json`.
|
|
141
142
|
8. Bilingual docs in pairs; tool descriptions/prompts are behavior; non-trivial changes need an Agent Note; run the minimal check set before pushing (dsh-pre-push-checks).
|
|
142
143
|
9. Opaque cross-boundary ids are branded (`Branded<B>` from `dsh-brand`), never bare `string`.
|
|
@@ -153,7 +154,7 @@ Chunk protocol: `block-start` → `text-delta*` → `block-end` (complete block)
|
|
|
153
154
|
- Windows junctions via PowerShell `New-Item -ItemType Junction`; vitest drive letter must be uppercase `C:/`.
|
|
154
155
|
- `DSH_PERMISSION_MODE=danger-full-access` is high-risk (no sandbox backend on Windows, approvals disabled); `DSH_*` vars in `~/.dsh/.env` break startup.
|
|
155
156
|
- Session files are multi-frame zstd: use `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
|
|
156
|
-
- npm: unscoped `dsh` is the unrelated node-dsh shell — install `@deepseek-ai/dsh` (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.
|
|
157
|
+
- npm: unscoped `dsh` is the unrelated node-dsh shell — install `@deepseek-ai/dsh` (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.2); `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-base`, `@deepseek-ai/dsh-headless` and `@deepseek-ai/dsh-session-persistence-jsonl` still ship a stale `latest` (0.0.1-rc.1), so pin `next` (0.2.0-rc.2) or `alpha` (0.2.1-alpha.1); `create-dsh-plugin` latest=0.2.3; `@deepseek-ai/cordis` latest=4.0.4 with a new `dsh-0-2-1-alpha-1` tag at 4.0.5-alpha.1; dsh-core/dsh-sdk still unpublished (verified 2026-10-06).
|
|
157
158
|
- `resolve()` both sides before path comparisons (Windows backslash trap).
|
|
158
159
|
|
|
159
160
|
## Documentation links
|
|
@@ -171,8 +172,8 @@ Community dev docs — templates/tutorials/pitfalls, full list in [references/co
|
|
|
171
172
|
|
|
172
173
|
## Key source index
|
|
173
174
|
|
|
174
|
-
- Official docs verbatim: `references/official-docs/docs/**` (
|
|
175
|
-
- Migration checklist: [migration-0.2.md](migration-0.2.md)
|
|
175
|
+
- Official docs verbatim: `references/official-docs/docs/**` (429 md pages, all 212 `.zh.md` pairs included, mirror at `dsh-v0.2.1-alpha.2`); the pages **not on the documentation site** (session-format-status, `upgrade-guide/**`, `persistence-changes/**`, ui-radius, web-styling, module-graph) are listed in [links.md](links.md) §2.1
|
|
176
|
+
- Migration checklist: [migration-0.2.md](migration-0.2.md) — §0–§12 cover every breaking change from `0.1.6-alpha.2` → `0.2.1-alpha.1`, and §13 covers `0.2.1-alpha.1` → `0.2.1-alpha.2` as 19 citable seams (`L1`–`L19`); each entry cites its official upgrade-guide source
|
|
176
177
|
- The official in-repo plugin-development skill: [references/official-plugin-dev-skill.md](../references/official-plugin-dev-skill.md)
|
|
177
178
|
- Repo-root constraints: `references/official-docs/AGENTS.md`, `references/official-docs/packages/AGENTS.md`, `references/official-docs/vendor/README.md`; sync state in `references/official-docs/SNAPSHOT.md`
|
|
178
179
|
- Site crawl HTML: `downloads/web/site/**` (EN+ZH full site) + `downloads/manifest.tsv` (download ledger)
|
|
@@ -53,7 +53,7 @@ Outras formas: objeto `export default { name, inject, apply }`; classe `class X
|
|
|
53
53
|
|
|
54
54
|
Ciclo de vida: `PENDING → LOADING → ACTIVE` (apply lança erro → FAILED); `ACTIVE → UNLOADING → DISPOSED`. Se um serviço necessário desaparece, o plugin descarrega; recarrega quando o serviço volta.
|
|
55
55
|
|
|
56
|
-
## Modos de despacho de eventos
|
|
56
|
+
## Modos de despacho de eventos (cinco, incluindo bail)
|
|
57
57
|
|
|
58
58
|
| Modo | await | Ordem | Valor de retorno |
|
|
59
59
|
|---|---|---|---|
|
|
@@ -61,6 +61,7 @@ Ciclo de vida: `PENDING → LOADING → ACTIVE` (apply lança erro → FAILED);
|
|
|
61
61
|
| waterfall | não | ordem de registro | sim (**não chamar `next()` causa curto-circuito**) |
|
|
62
62
|
| parallel | sim | paralelo | nenhum |
|
|
63
63
|
| serial | sim | ordem de registro | sim (o primeiro não vazio para) |
|
|
64
|
+
| bail | não | ordem de registro | sim (o primeiro não null/false/undefined curto-circuita e PARA o resto) |
|
|
64
65
|
|
|
65
66
|
Eventos tipados (declaration merging):
|
|
66
67
|
|
|
@@ -136,7 +137,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloco comp
|
|
|
136
137
|
3. **O mecanismo mais fraco que basta**: `ctx.tools.restrict()` (só remove) < `ctx.tools.guard()` (só nega) < reescrita por waterfall (depende da ordem) < `system-prompt/assemble` (substitui tudo). Observe resultados finais em `tools/result`; use `tools/post-execute` só para transformar.
|
|
137
138
|
4. Visível-para-o-modelo ⇔ registrado: nova entrada visível exige novo evento de sessão (`SessionEventMap`) — **adicionado pelo host**, não por você (ver regra 10).
|
|
138
139
|
5. Nunca codifique valores ajustáveis (teste: o cordis.yml consegue mudá-los?); má configuração falha em voz alta. Campos editáveis ao vivo usam `Volatile<T>` + `loader/volatile-update` (o namespace do formulário é o id da entrada do perfil).
|
|
139
|
-
6. Pacotes de plugin independentes: cordis é peerDependency com a mesma identidade do host (misturar scoped `@deepseek-ai/cordis` e unscoped divide identidades); ESM; manifesto `dsh.bundle` (`patch` pode ser uma lista ordenada); instalações git precisam de `prepare` + `allowBuilds`; publique `lib/` ou um tarball. Pacotes dsh de instância compartilhada ficam **só em peerDependencies + devDependencies**, nunca em `dependencies` (uma cópia no perfil sombreia o runtime em silêncio
|
|
140
|
+
6. Pacotes de plugin independentes: cordis é peerDependency com a mesma identidade do host (misturar scoped `@deepseek-ai/cordis` e unscoped divide identidades); ESM; manifesto `dsh.bundle` (`patch` pode ser uma lista ordenada); instalações git precisam de `prepare` + `allowBuilds`; publique `lib/` ou um tarball. Pacotes dsh de instância compartilhada ficam **só em peerDependencies + devDependencies**, nunca em `dependencies` (uma cópia no perfil sombreia o runtime em silêncio). ⚠️ Corrigido: **faixas de peer SÃO aplicadas na instalação** — `dsh plugin add` compara a versão do runtime com a faixa declarada de `@deepseek-ai/dsh-*` e recusa a instalação; apenas `engines.dsh` é declarativo e não aplicado. Uma faixa diz "dá para instalar", não "esta API existe": mantenha a sondagem em runtime (escolha de faixa: `version-matrix.md` §4).
|
|
140
141
|
7. Publique metadados de exibição: `locale/*.json` com `meta.title`/`meta.description` e um `./icon` exportado (SVG/PNG/JPEG/WebP, ≤256 KiB, dentro do pacote). Plugins de subcaminho **nunca** leem o próprio `package.json`.
|
|
141
142
|
8. Documentação bilíngue em pares; descrições/prompts são comportamento; mudanças não triviais levam Agent Note; rode o conjunto mínimo de verificações antes de empurrar (dsh-pre-push-checks).
|
|
142
143
|
9. IDs opacos entre limites são branded (`Branded<B>` de `dsh-brand`), nunca `string` crua.
|
|
@@ -153,7 +154,7 @@ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloco comp
|
|
|
153
154
|
- Junctions do Windows via PowerShell `New-Item -ItemType Junction`; letra de unidade do vitest em maiúscula `C:/`.
|
|
154
155
|
- `DSH_PERMISSION_MODE=danger-full-access` é de alto risco (sem backend de sandbox no Windows, aprovações desativadas); `DSH_*` em `~/.dsh/.env` quebra a inicialização.
|
|
155
156
|
- Arquivos de sessão são zstd multiframe: use `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
|
|
156
|
-
- npm: o `dsh` sem escopo é o projeto alheio node-dsh (um shell) — instale `@deepseek-ai/dsh` (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.
|
|
157
|
+
- npm: o `dsh` sem escopo é o projeto alheio node-dsh (um shell) — instale `@deepseek-ai/dsh` (`latest`=`next`=0.2.0-rc.2, `alpha`=0.2.1-alpha.2); `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-base`, `@deepseek-ai/dsh-headless` e `@deepseek-ai/dsh-session-persistence-jsonl` ainda publicam um `latest` obsoleto (0.0.1-rc.1), fixe `next` (0.2.0-rc.2) ou `alpha` (0.2.1-alpha.1); `create-dsh-plugin` latest=0.2.3; `@deepseek-ai/cordis` latest=4.0.4 com a nova tag `dsh-0-2-1-alpha-1` em 4.0.5-alpha.1; dsh-core/dsh-sdk seguem não publicados (verificado em 2026-10-06).
|
|
157
158
|
- Aplique `resolve()` nos dois lados antes de comparar caminhos (armadilha da barra invertida do Windows).
|
|
158
159
|
|
|
159
160
|
## Links de documentação
|
|
@@ -52,7 +52,7 @@ export function apply(ctx: Context, config: Config) {
|
|
|
52
52
|
|
|
53
53
|
生命周期:`PENDING → LOADING → ACTIVE`(apply 抛错 → FAILED);`ACTIVE → UNLOADING → DISPOSED`。依赖服务消失 → 自动卸载,恢复 → 自动重载。
|
|
54
54
|
|
|
55
|
-
##
|
|
55
|
+
## 事件派发五模式(含 bail)
|
|
56
56
|
|
|
57
57
|
| 模式 | await | 顺序 | 返回值 |
|
|
58
58
|
|---|---|---|---|
|
|
@@ -60,6 +60,7 @@ export function apply(ctx: Context, config: Config) {
|
|
|
60
60
|
| waterfall | 否 | 注册序 | 有(**不调 next() 即短路**) |
|
|
61
61
|
| parallel | 是 | 并行 | 无 |
|
|
62
62
|
| serial | 是 | 注册序 | 有(首个非空即止) |
|
|
63
|
+
| bail | 否 | 注册序 | 有(首个非 null/false/undefined 即短路,**并停止后续监听器**) |
|
|
63
64
|
|
|
64
65
|
类型声明(declaration merging):
|
|
65
66
|
|
|
@@ -135,7 +136,7 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
|
|
|
135
136
|
3. **用最弱的够用机制**:`ctx.tools.restrict()`(只移除)< `ctx.tools.guard()`(只拒绝)< waterfall 改写(依赖顺序)< `system-prompt/assemble`(整段替换)。最终结果只看 `tools/result`;只有要变换结果才用 `tools/post-execute`。
|
|
136
137
|
4. 模型可见 ⟺ 已记录:新模型可见输入必须新增会话事件(`SessionEventMap`)——**由宿主侧新增**,不是插件自己写(见第 10 条)。
|
|
137
138
|
5. 不得硬编码可调参数(判断:cordis.yml 能否改);misconfig fail loud。要暴露给用户的实时字段用 `Volatile<T>` + `loader/volatile-update`(表单命名空间=profile 条目 id)。
|
|
138
|
-
6. 独立插件包:cordis 是 peerDependency(与宿主同身份:scoped `@deepseek-ai/cordis` 与 unscoped 混用会"双 Cordis 分裂");ESM;`dsh.bundle` 清单(`patch` **可为有序数组**);git 安装配 `prepare` + `allowBuilds`;发布带 `lib/` 或 tarball。**共享实例的 dsh 包只放 peer + dev,绝不放 dependencies**(profile
|
|
139
|
+
6. 独立插件包:cordis 是 peerDependency(与宿主同身份:scoped `@deepseek-ai/cordis` 与 unscoped 混用会"双 Cordis 分裂");ESM;`dsh.bundle` 清单(`patch` **可为有序数组**);git 安装配 `prepare` + `allowBuilds`;发布带 `lib/` 或 tarball。**共享实例的 dsh 包只放 peer + dev,绝不放 dependencies**(profile 内副本会静默遮蔽运行时)。⚠️ **已更正:peer 范围会被安装期强制**——`dsh plugin add` 拿运行时版本比对声明的 `@deepseek-ai/dsh-*` 范围,不匹配即**拒绝安装**;只有 `engines.dsh` 是纯声明、零强制。范围只能表达"能不能装",**表达不了某个 API 在不在**——仍要配运行时探测(区间选择见 `version-matrix.md` §4)。
|
|
139
140
|
7. 必须交展示元数据:`locale/*.json` 的 `meta.title`/`meta.description` + 导出的 `./icon`(SVG/PNG/JPEG/WebP,≤256 KiB,必须在包内)。子路径插件**不读**自己的 `package.json`。
|
|
140
141
|
8. 文档双语成对;工具描述/提示词即行为;非平凡变更加 Agent Note;提交前跑最小检查集(dsh-pre-push-checks)。
|
|
141
142
|
9. 跨边界 opaque id 用 branded(`Branded<B>` from `dsh-brand`),从不裸 `string`。
|
|
@@ -152,7 +153,7 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
|
|
|
152
153
|
- Windows junction 用 PowerShell `New-Item -ItemType Junction`;vitest 盘符大写 `C:/`。
|
|
153
154
|
- `DSH_PERMISSION_MODE=danger-full-access` 高风险(Windows 无沙箱后端、禁用审批);`DSH_*` 放 `~/.dsh/.env` 会报错。
|
|
154
155
|
- 会话文件多帧 zstd:用 `scanZstdFrames`/`createZstdFrameDecoder`(`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)。
|
|
155
|
-
- npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`(`latest`=`next`=0.2.0-rc.2、`alpha`=0.2.1-alpha.
|
|
156
|
+
- npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`(`latest`=`next`=0.2.0-rc.2、`alpha`=0.2.1-alpha.2);`@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-base`、`@deepseek-ai/dsh-headless`、`@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 仍是过期版本(0.0.1-rc.1),要钉 `next`(0.2.0-rc.2)或 `alpha`(0.2.1-alpha.1);`create-dsh-plugin` latest=0.2.3;`@deepseek-ai/cordis` latest=4.0.4,另有新标签 `dsh-0-2-1-alpha-1`=4.0.5-alpha.1;dsh-core/dsh-sdk 仍未发布(2026-10-06 复核)。
|
|
156
157
|
- 路径比较前两侧都 `resolve()`(Windows 反斜杠陷阱)。
|
|
157
158
|
|
|
158
159
|
## 文档链接
|
|
@@ -170,8 +171,8 @@ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→
|
|
|
170
171
|
|
|
171
172
|
## 关键源索引
|
|
172
173
|
|
|
173
|
-
- 本地官方文档全文:`references/official-docs/docs/**`(
|
|
174
|
-
- 迁移清单:[migration-0.2.md](migration-0.2.md)
|
|
174
|
+
- 本地官方文档全文:`references/official-docs/docs/**`(429 篇,含全部 212 个 `.zh.md`;镜像基线 `dsh-v0.2.1-alpha.2`);**没上文档站**的那些页(session-format-status、`upgrade-guide/**`、`persistence-changes/**`、ui-radius、web-styling、module-graph)见 [links.md](links.md) §2.1
|
|
175
|
+
- 迁移清单:[migration-0.2.md](migration-0.2.md) —— §0–§12 覆盖 `0.1.6-alpha.2` → `0.2.1-alpha.1` 的全部破坏性变更,**§13 把 `0.2.1-alpha.1` → `0.2.1-alpha.2` 整理成 19 个可引用 seam(`L1`–`L19`)**;每条都附官方 upgrade-guide 出处
|
|
175
176
|
- 官方自带插件开发技能:[references/official-plugin-dev-skill.md](../references/official-plugin-dev-skill.md)
|
|
176
177
|
- 仓库根约束:`references/official-docs/AGENTS.md`、`references/official-docs/packages/AGENTS.md`、`references/official-docs/vendor/README.md`;同步状态见 `references/official-docs/SNAPSHOT.md`
|
|
177
178
|
- 站点爬取 HTML:`downloads/web/site/**`(中英双语全站)+ `downloads/manifest.tsv`(下载清单)
|
|
@@ -42,14 +42,16 @@ The pattern that admits all windows (one clause per prerelease tuple; each `-0`
|
|
|
42
42
|
{
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
45
|
-
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.3.0"
|
|
45
|
+
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@deepseek-ai/dsh-tools": "0.1
|
|
48
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.2"
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
⚠️ **Do not write the open form `>=0.1.2-rc.1 <0.3.0`.** It looks like the widest safe range and is the opposite: it spans an entire breaking-change generation, so the gate admits a `0.2.x` host while your plugin still calls `0.1.x` APIs — an install-time pass followed by a runtime break. **Upper bounds must be cut per generation** (`<0.2.0` / `<0.3.0`), and the six-clause shape above is the canonical range recorded in `dsh-plugin-kit`'s `data/peer-range.json` (`canonicalRange`, updated 2026-09-26). `dsh-plugin-doctor`'s R8 flags the open form.
|
|
54
|
+
|
|
53
55
|
A range is only as wide as its newest clause, and semver makes this easy to get wrong in a way that looks right: **a range admits a prerelease only if some comparator carries that same `[major, minor, patch]` tuple AND a prerelease.** So a band ending at `>=0.1.6-0 <0.2.0` admits `0.1.6-alpha.2` but *not* `0.1.7-alpha.2` — it reads as "everything up to 0.2" and behaves as "nothing after the 0.1.6 tuple". Adding the line's own clause is the whole fix; check it with `semver.satisfies('0.1.7-alpha.2', range)`, never by eye.
|
|
54
56
|
|
|
55
57
|
Rules that follow:
|
|
@@ -42,14 +42,16 @@
|
|
|
42
42
|
{
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
45
|
-
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.3.0"
|
|
45
|
+
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@deepseek-ai/dsh-tools": "0.1
|
|
48
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.2"
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
⚠️ **不要写开区间 `>=0.1.2-rc.1 <0.3.0`。** 它看起来是最宽的"安全"范围,实际正相反:它横跨整整一代破坏性变更,门禁会放行 `0.2.x` 宿主,而你的插件还在调 `0.1.x` 的 API——**安装期放行、运行期炸**。**上界必须按世代切**(`<0.2.0` / `<0.3.0`);上面这个六子句形态就是 `dsh-plugin-kit` 的 `data/peer-range.json`(`canonicalRange`,2026-09-26 更新)记录的规范区间,`dsh-plugin-doctor` 的 R8 会标记开区间写法。
|
|
54
|
+
|
|
53
55
|
范围的宽度只等于它最新那条子句,而 semver 在这里很容易让人写错、且**看起来是对的**:**一个范围只有在某条比较符带着同一个 `[major, minor, patch]` tuple 且带预发布时,才接纳该预发布版本。** 所以一条止于 `>=0.1.6-0 <0.2.0` 的带子接纳 `0.1.6-alpha.2`,却**不**接纳 `0.1.7-alpha.2`——读起来像"0.2 之前全都要",行为上却是"0.1.6 tuple 之后一概不要"。补上该线自己的子句就是全部修法;用 `semver.satisfies('0.1.7-alpha.2', range)` 去验,**不要用眼睛看**。
|
|
54
56
|
|
|
55
57
|
由此得到的规则:
|
package/guide/unfixed-issues.md
CHANGED
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
> - 复核基线 1:`0d1f50007f9bca3f52b06e1c3074fa14d5fb0720`(2026-09-15,0.1.6-alpha.1 世代;区间 666 提交)
|
|
9
9
|
> - 复核基线 2:`ddefc45fbc7f8e46dd73185e68295696d1297887`(`dsh-v0.1.6-alpha.2`,2026-09-19;+882 提交)
|
|
10
10
|
> - **复核基线 3:`5badb15009ae1756c3afe0ae0cef1faafc290ccc`(`dsh-v0.2.1-alpha.1`,2026-10-03;+2300 余提交 / 8763 改动文件)——2026-10-06 全表重核,逐条复核覆盖 #1–#32 与 S1–S7**:
|
|
11
|
+
>
|
|
12
|
+
> ⚠️ **阅读本表前必读的基线口径**:本文件全部 `path:line` 与"已修复提交号"**钉在复核基线 3(`5badb15`,2026-10-03)**。
|
|
13
|
+
> 本库的官方文档镜像已在 **2026-10-13 重同步到 `d743267388641bc76f17c45ce8b4c231aed1d32c`(`dsh-v0.2.1-alpha.2`)**——
|
|
14
|
+
> 也就是说**镜像比本表新一版**。二者不是矛盾,是两个不同用途的基线:
|
|
15
|
+
> 镜像求"与上游逐字节一致",本表求"每条结论有可复核的行号锚点"。
|
|
16
|
+
> **在 `5badb15` 上复核行号**(`git -C <checkout> show 5badb15:<path>`),或用镜像里的路径但**预期行号可能已漂移**。
|
|
17
|
+
> 下一轮全表重核的目标基线是 `d743267`;在重核完成前,请把"未修复"读作"**截至 2026-10-03 未修复**"。
|
|
11
18
|
> - **转入已修复 4 项**:#2(协议平面压平为 Messages-only,旧 chat-completions 半边删除;**后继形态 #8836 仍在**)、#5(`code`→`ptc` 迁移)、#10(pi-ai ^0.87.1 带上 `x-opencode-session`)、#22(压缩阈值改为 `min(window×ratio, window−reserved−headroom)`)、#29(telemetry 读取拍平 + 迁移产物强校验)——共 5 项,其中 #5 的修复**早于上一基线**,说明旧条目本身就过时。
|
|
12
19
|
> - **判为不可复现 1 项**:#4(read_image)移入 §2,保留记录但**不要再当 bug 传播**。
|
|
13
20
|
> - **部分修复 3 项**:#1(同级已接受、更窄仍抛)、#13(windowsHide 半侧已消失,自愈半侧仍在)、#19(`./invariant` 子路径已随 invariants 整体移除而消失,残留 devDependency `dsh-attachment` 引用)、S5(SKILL.md 半侧早已修好,仅剩生成文件/文档措辞残留)——共 4 项。
|