dsh-plugin-guide 0.3.21 → 0.3.23
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 +15 -12
- package/README-hi.md +15 -12
- package/README-pt.md +15 -12
- package/README-zh.md +15 -12
- package/README.md +290 -280
- package/SKILL.md +36 -19
- package/dist/dsh-plugin-dev.js +113 -9
- package/guide/choosing-a-plugin.md +412 -0
- package/guide/choosing-a-plugin.zh-CN.md +414 -0
- package/guide/links.md +20 -2
- package/guide/migration-0.2.md +219 -0
- package/guide/plugin-dev-guide.md +99 -24
- package/guide/quick-reference.es.md +14 -8
- package/guide/quick-reference.hi.md +15 -9
- package/guide/quick-reference.md +18 -10
- package/guide/quick-reference.pt.md +15 -9
- package/guide/quick-reference.zh-CN.md +19 -11
- package/guide/release-engineering.md +2 -2
- package/guide/release-engineering.zh-CN.md +2 -2
- package/guide/unfixed-issues.md +117 -82
- package/guide/when-to-retire-a-plugin.md +127 -0
- package/guide/when-to-retire-a-plugin.zh-CN.md +127 -0
- package/icon.svg +5 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +8 -4
- package/references/official-docs/AGENTS.md +8 -5
- package/references/official-docs/CONTRIBUTING.i18n.yaml +6 -5
- package/references/official-docs/README.i18n.yaml +33 -5
- package/references/official-docs/README.zh.md +3 -3
- package/references/official-docs/SNAPSHOT.md +3 -3
- package/references/official-docs/THIRD_PARTY_NOTICES.md +34 -6
- package/references/official-docs/docs/AGENTS.md +4 -4
- package/references/official-docs/docs/agent-lifecycle.i18n.yaml +9 -5
- package/references/official-docs/docs/api-gateway.i18n.yaml +27 -5
- package/references/official-docs/docs/api-gateway.md +10 -9
- package/references/official-docs/docs/api-gateway.zh.md +10 -9
- package/references/official-docs/docs/architecture.i18n.yaml +36 -5
- package/references/official-docs/docs/architecture.md +10 -8
- package/references/official-docs/docs/architecture.zh.md +10 -8
- package/references/official-docs/docs/capability-seams.i18n.yaml +9 -5
- package/references/official-docs/docs/capability-seams.md +76 -32
- package/references/official-docs/docs/capability-seams.zh.md +76 -32
- package/references/official-docs/docs/config-catalog.i18n.yaml +18 -5
- package/references/official-docs/docs/config-catalog.md +1360 -765
- package/references/official-docs/docs/config-catalog.zh.md +1363 -767
- package/references/official-docs/docs/cookbook/adding-a-package.i18n.yaml +27 -5
- package/references/official-docs/docs/cookbook/adding-a-package.md +56 -3
- package/references/official-docs/docs/cookbook/adding-a-package.zh.md +54 -3
- package/references/official-docs/docs/cookbook/adding-a-remote-api.i18n.yaml +24 -5
- package/references/official-docs/docs/cookbook/adding-a-remote-api.md +2 -2
- package/references/official-docs/docs/cookbook/adding-a-remote-api.zh.md +2 -2
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.i18n.yaml +39 -5
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.md +46 -6
- package/references/official-docs/docs/cookbook/adding-a-session-format-version.zh.md +46 -6
- package/references/official-docs/docs/cookbook/adding-a-settings-card.i18n.yaml +21 -5
- package/references/official-docs/docs/cookbook/adding-a-settings-card.md +34 -64
- package/references/official-docs/docs/cookbook/adding-a-settings-card.zh.md +34 -64
- package/references/official-docs/docs/cookbook/adding-a-tool.i18n.yaml +30 -5
- package/references/official-docs/docs/cookbook/adding-a-tool.md +2 -2
- package/references/official-docs/docs/cookbook/adding-a-tool.zh.md +2 -2
- package/references/official-docs/docs/cookbook/adding-a-vendored-package.i18n.yaml +18 -5
- package/references/official-docs/docs/cookbook/adding-an-llm-adapter.i18n.yaml +18 -5
- package/references/official-docs/docs/cookbook/extension-cookbook.i18n.yaml +24 -5
- package/references/official-docs/docs/cookbook/extension-cookbook.md +3 -3
- package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +3 -3
- package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.i18n.yaml +21 -5
- package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml +15 -5
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +30 -5
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.md +13 -1
- package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.zh.md +13 -1
- package/references/official-docs/docs/cordis-api/context.i18n.yaml +72 -5
- package/references/official-docs/docs/cordis-api/events.i18n.yaml +36 -5
- package/references/official-docs/docs/cordis-api/fiber.i18n.yaml +75 -5
- package/references/official-docs/docs/cordis-api/inherited.md +15 -13
- package/references/official-docs/docs/cordis-api/registry.i18n.yaml +21 -5
- package/references/official-docs/docs/cordis-api/service.i18n.yaml +36 -5
- package/references/official-docs/docs/cordis-primer.i18n.yaml +21 -5
- package/references/official-docs/docs/cordis-tutorial/01-first-plugin.i18n.yaml +21 -5
- package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml +15 -5
- package/references/official-docs/docs/cordis-tutorial/03-services.i18n.yaml +21 -5
- package/references/official-docs/docs/cordis-tutorial/04-events.i18n.yaml +15 -5
- package/references/official-docs/docs/cordis-tutorial/05-config.i18n.yaml +18 -5
- package/references/official-docs/docs/cordis-tutorial/05-config.md +27 -0
- package/references/official-docs/docs/cordis-tutorial/05-config.zh.md +27 -0
- package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml +15 -5
- package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.i18n.yaml +18 -5
- package/references/official-docs/docs/cordis-tutorial/index.i18n.yaml +15 -5
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +33 -5
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +7 -7
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +7 -7
- package/references/official-docs/docs/defensive-patterns.i18n.yaml +27 -5
- package/references/official-docs/docs/dependency-catalog.json +2 -2
- package/references/official-docs/docs/development.i18n.yaml +48 -5
- package/references/official-docs/docs/development.md +27 -10
- package/references/official-docs/docs/development.zh.md +27 -10
- package/references/official-docs/docs/event-producer-consumer.i18n.yaml +12 -5
- package/references/official-docs/docs/event-producer-consumer.md +78 -66
- package/references/official-docs/docs/event-producer-consumer.zh.md +78 -66
- package/references/official-docs/docs/glossary.i18n.yaml +24 -5
- package/references/official-docs/docs/graph-atlas.i18n.yaml +9 -5
- package/references/official-docs/docs/i18n/README.i18n.yaml +18 -5
- package/references/official-docs/docs/i18n/README.md +12 -8
- package/references/official-docs/docs/i18n/README.zh.md +12 -8
- package/references/official-docs/docs/i18n/terminology.md +4 -4
- package/references/official-docs/docs/i18n/translation-prompt.md +2 -2
- package/references/official-docs/docs/i18n/translation-rules.i18n.yaml +27 -5
- package/references/official-docs/docs/module-graph.i18n.yaml +9 -5
- package/references/official-docs/docs/module-graph.md +348 -245
- package/references/official-docs/docs/module-graph.zh.md +348 -245
- package/references/official-docs/docs/persistence-catalog.i18n.yaml +2064 -5
- package/references/official-docs/docs/persistence-catalog.md +5275 -3205
- package/references/official-docs/docs/persistence-catalog.zh.md +5275 -3205
- package/references/official-docs/docs/persistence-changes/2026-09-11-initial.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.md +120 -0
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.schema.json +16212 -0
- package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.zh.md +120 -0
- package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.schema.json +302 -0
- package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.schema.json +250 -0
- package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.zh.md +48 -0
- package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.i18n.yaml +28 -0
- package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.md +60 -0
- package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.schema.json +11405 -0
- package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.zh.md +60 -0
- package/references/official-docs/docs/persistence-changes/README.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/README.md +17 -3
- package/references/official-docs/docs/persistence-changes/README.zh.md +17 -3
- package/references/official-docs/docs/persistence-changes/finalized/v4.json +379 -0
- package/references/official-docs/docs/persistence-changes/historical-formats/README.i18n.yaml +27 -5
- package/references/official-docs/docs/persistence-changes/historical-formats/README.md +3 -2
- package/references/official-docs/docs/persistence-changes/historical-formats/README.zh.md +3 -2
- package/references/official-docs/docs/persistence-changes/historical-formats/v0.i18n.yaml +1284 -5
- package/references/official-docs/docs/persistence-changes/historical-formats/v1.i18n.yaml +1284 -5
- package/references/official-docs/docs/persistence-changes/historical-formats/v2.i18n.yaml +1344 -5
- package/references/official-docs/docs/persistence-changes/historical-formats/v3.i18n.yaml +1441 -0
- package/references/official-docs/docs/persistence-changes/historical-formats/v3.md +5634 -0
- package/references/official-docs/docs/persistence-changes/historical-formats/v3.schema.json +61307 -0
- package/references/official-docs/docs/persistence-changes/historical-formats/v3.zh.md +5634 -0
- package/references/official-docs/docs/persistence-changes/releases/README.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.schema.json +3 -3
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml +30 -5
- package/references/official-docs/docs/persistence-schema.json +12692 -48753
- package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml +33 -5
- package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml +27 -5
- package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml +27 -5
- package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml +27 -5
- package/references/official-docs/docs/postmortem/README.i18n.yaml +6 -5
- package/references/official-docs/docs/rescope.i18n.yaml +18 -5
- package/references/official-docs/docs/rescope.md +1 -1
- package/references/official-docs/docs/rescope.zh.md +1 -1
- package/references/official-docs/docs/session-format-status.i18n.yaml +27 -5
- package/references/official-docs/docs/session-format-status.md +17 -3
- package/references/official-docs/docs/session-format-status.zh.md +17 -3
- package/references/official-docs/docs/subsystems/README.i18n.yaml +6 -5
- package/references/official-docs/docs/subsystems/README.md +6 -3
- package/references/official-docs/docs/subsystems/README.zh.md +6 -3
- package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/agent-team.md +52 -28
- package/references/official-docs/docs/subsystems/agent-team.zh.md +52 -28
- package/references/official-docs/docs/subsystems/approval.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/approval.md +1 -1
- package/references/official-docs/docs/subsystems/approval.zh.md +1 -1
- package/references/official-docs/docs/subsystems/attachment.i18n.yaml +12 -5
- package/references/official-docs/docs/subsystems/attachment.md +2 -2
- package/references/official-docs/docs/subsystems/attachment.zh.md +2 -2
- package/references/official-docs/docs/subsystems/boot.i18n.yaml +9 -5
- package/references/official-docs/docs/subsystems/boot.md +117 -17
- package/references/official-docs/docs/subsystems/boot.zh.md +117 -17
- package/references/official-docs/docs/subsystems/browser-use.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/claude-code-mods.i18n.yaml +28 -0
- package/references/official-docs/docs/subsystems/claude-code-mods.md +146 -0
- package/references/official-docs/docs/subsystems/claude-code-mods.zh.md +146 -0
- package/references/official-docs/docs/subsystems/client-modules.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/client-modules.md +13 -7
- package/references/official-docs/docs/subsystems/client-modules.zh.md +13 -7
- package/references/official-docs/docs/subsystems/client-resources.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/commands.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/commands.md +1 -1
- package/references/official-docs/docs/subsystems/commands.zh.md +1 -1
- package/references/official-docs/docs/subsystems/compaction.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/compaction.md +2 -2
- package/references/official-docs/docs/subsystems/compaction.zh.md +2 -2
- package/references/official-docs/docs/subsystems/computer-use.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/conversation.i18n.yaml +30 -5
- package/references/official-docs/docs/subsystems/conversation.md +35 -6
- package/references/official-docs/docs/subsystems/conversation.zh.md +34 -5
- package/references/official-docs/docs/subsystems/core.i18n.yaml +36 -5
- package/references/official-docs/docs/subsystems/core.md +70 -214
- package/references/official-docs/docs/subsystems/core.zh.md +70 -214
- package/references/official-docs/docs/subsystems/credentials.i18n.yaml +24 -5
- package/references/official-docs/docs/subsystems/credentials.md +168 -5
- package/references/official-docs/docs/subsystems/credentials.zh.md +168 -5
- package/references/official-docs/docs/subsystems/deliverables.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/extensions.i18n.yaml +6 -5
- package/references/official-docs/docs/subsystems/extensions.md +6 -4
- package/references/official-docs/docs/subsystems/extensions.zh.md +6 -4
- package/references/official-docs/docs/subsystems/feedback.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/filesystem.i18n.yaml +33 -5
- package/references/official-docs/docs/subsystems/filesystem.md +10 -0
- package/references/official-docs/docs/subsystems/filesystem.zh.md +10 -0
- package/references/official-docs/docs/subsystems/goal.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/goal.md +1 -1
- package/references/official-docs/docs/subsystems/goal.zh.md +1 -1
- package/references/official-docs/docs/subsystems/jobs.i18n.yaml +24 -5
- package/references/official-docs/docs/subsystems/jobs.md +335 -126
- package/references/official-docs/docs/subsystems/jobs.zh.md +335 -126
- package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +48 -5
- package/references/official-docs/docs/subsystems/llm-streaming.md +60 -31
- package/references/official-docs/docs/subsystems/llm-streaming.zh.md +60 -31
- package/references/official-docs/docs/subsystems/lsp.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/mcp.i18n.yaml +33 -5
- package/references/official-docs/docs/subsystems/mcp.md +2 -2
- package/references/official-docs/docs/subsystems/mcp.zh.md +2 -2
- package/references/official-docs/docs/subsystems/office-to-pdf.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/office-to-pdf.md +4 -4
- package/references/official-docs/docs/subsystems/office-to-pdf.zh.md +4 -4
- package/references/official-docs/docs/subsystems/otel.i18n.yaml +7 -0
- package/references/official-docs/docs/subsystems/otel.md +44 -0
- package/references/official-docs/docs/subsystems/otel.zh.md +44 -0
- package/references/official-docs/docs/subsystems/permission-presets.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/permission-presets.md +7 -6
- package/references/official-docs/docs/subsystems/permission-presets.zh.md +7 -6
- package/references/official-docs/docs/subsystems/persistence.i18n.yaml +36 -5
- package/references/official-docs/docs/subsystems/persistence.md +3 -3
- package/references/official-docs/docs/subsystems/persistence.zh.md +3 -3
- package/references/official-docs/docs/subsystems/plan.i18n.yaml +21 -5
- 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/product-telemetry.i18n.yaml +10 -0
- package/references/official-docs/docs/subsystems/product-telemetry.md +79 -0
- package/references/official-docs/docs/subsystems/product-telemetry.zh.md +79 -0
- package/references/official-docs/docs/subsystems/ptc-runtime.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/sandbox.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/sandbox.md +1 -1
- package/references/official-docs/docs/subsystems/sandbox.zh.md +1 -1
- package/references/official-docs/docs/subsystems/schedule.i18n.yaml +39 -5
- package/references/official-docs/docs/subsystems/schedule.md +391 -33
- package/references/official-docs/docs/subsystems/schedule.zh.md +391 -33
- package/references/official-docs/docs/subsystems/scope.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/scope.md +1 -1
- package/references/official-docs/docs/subsystems/scope.zh.md +1 -1
- package/references/official-docs/docs/subsystems/session-projection.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/session-projection.md +20 -18
- package/references/official-docs/docs/subsystems/session-projection.zh.md +20 -18
- package/references/official-docs/docs/subsystems/session-query.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/session-reference.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/session-telemetry.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/session-telemetry.md +6 -4
- package/references/official-docs/docs/subsystems/session-telemetry.zh.md +6 -4
- package/references/official-docs/docs/subsystems/session-title.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/session.i18n.yaml +66 -5
- package/references/official-docs/docs/subsystems/session.md +113 -62
- package/references/official-docs/docs/subsystems/session.zh.md +113 -62
- package/references/official-docs/docs/subsystems/settings.i18n.yaml +12 -5
- package/references/official-docs/docs/subsystems/settings.md +42 -292
- package/references/official-docs/docs/subsystems/settings.zh.md +42 -292
- package/references/official-docs/docs/subsystems/shell.i18n.yaml +24 -5
- package/references/official-docs/docs/subsystems/shell.md +29 -22
- package/references/official-docs/docs/subsystems/shell.zh.md +29 -22
- package/references/official-docs/docs/subsystems/sidebar-right.i18n.yaml +36 -5
- package/references/official-docs/docs/subsystems/sidebar-right.md +14 -9
- package/references/official-docs/docs/subsystems/sidebar-right.zh.md +14 -9
- package/references/official-docs/docs/subsystems/skills.i18n.yaml +27 -5
- 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.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/slots.md +21 -7
- package/references/official-docs/docs/subsystems/slots.zh.md +21 -7
- package/references/official-docs/docs/subsystems/spill.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/spill.md +1 -1
- package/references/official-docs/docs/subsystems/spill.zh.md +1 -1
- package/references/official-docs/docs/subsystems/ssh.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/storage.i18n.yaml +24 -5
- package/references/official-docs/docs/subsystems/storage.md +1 -2
- package/references/official-docs/docs/subsystems/storage.zh.md +1 -2
- package/references/official-docs/docs/subsystems/subagent.i18n.yaml +30 -5
- package/references/official-docs/docs/subsystems/subagent.md +35 -60
- package/references/official-docs/docs/subsystems/subagent.zh.md +35 -60
- package/references/official-docs/docs/subsystems/subprocess.i18n.yaml +30 -5
- package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/terminal.i18n.yaml +18 -5
- package/references/official-docs/docs/subsystems/todo.i18n.yaml +12 -5
- package/references/official-docs/docs/subsystems/todo.md +3 -3
- package/references/official-docs/docs/subsystems/todo.zh.md +3 -3
- package/references/official-docs/docs/subsystems/token-meter.i18n.yaml +12 -5
- package/references/official-docs/docs/subsystems/tools.i18n.yaml +24 -5
- package/references/official-docs/docs/subsystems/tools.md +15 -4
- package/references/official-docs/docs/subsystems/tools.zh.md +15 -4
- package/references/official-docs/docs/subsystems/typert.i18n.yaml +21 -5
- package/references/official-docs/docs/subsystems/typert.md +147 -6
- package/references/official-docs/docs/subsystems/typert.zh.md +147 -6
- package/references/official-docs/docs/subsystems/user-questions.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/user-questions.md +128 -1
- package/references/official-docs/docs/subsystems/user-questions.zh.md +129 -2
- package/references/official-docs/docs/subsystems/voice-input.i18n.yaml +19 -0
- package/references/official-docs/docs/subsystems/voice-input.md +164 -0
- package/references/official-docs/docs/subsystems/voice-input.zh.md +164 -0
- package/references/official-docs/docs/subsystems/web-client.i18n.yaml +36 -5
- package/references/official-docs/docs/subsystems/web-client.md +10 -5
- package/references/official-docs/docs/subsystems/web-client.zh.md +10 -5
- package/references/official-docs/docs/subsystems/web-server.i18n.yaml +15 -5
- package/references/official-docs/docs/subsystems/web-server.md +12 -4
- package/references/official-docs/docs/subsystems/web-server.zh.md +12 -4
- package/references/official-docs/docs/subsystems/web.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/webhook.i18n.yaml +18 -5
- 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 +27 -5
- package/references/official-docs/docs/subsystems/workflow.md +2 -2
- package/references/official-docs/docs/subsystems/workflow.zh.md +2 -2
- package/references/official-docs/docs/subsystems/workspace.i18n.yaml +27 -5
- package/references/official-docs/docs/subsystems/workspace.md +175 -35
- package/references/official-docs/docs/subsystems/workspace.zh.md +175 -35
- package/references/official-docs/docs/testing.i18n.yaml +33 -5
- package/references/official-docs/docs/testing.md +2 -2
- package/references/official-docs/docs/testing.zh.md +2 -2
- package/references/official-docs/docs/tool-catalog.i18n.yaml +312 -5
- package/references/official-docs/docs/tool-catalog.md +321 -92
- package/references/official-docs/docs/tool-catalog.zh.md +321 -92
- package/references/official-docs/docs/tool-execution-pipeline.i18n.yaml +9 -5
- package/references/official-docs/docs/tool-execution-pipeline.md +6 -3
- package/references/official-docs/docs/tool-execution-pipeline.zh.md +6 -3
- package/references/official-docs/docs/ui-radius.i18n.yaml +31 -0
- package/references/official-docs/docs/ui-radius.md +115 -0
- package/references/official-docs/docs/ui-radius.zh.md +115 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.md +22 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.zh.md +22 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.md +25 -0
- package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.zh.md +25 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.zh.md +18 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md +23 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.zh.md +23 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md +22 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.zh.md +22 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.i18n.yaml +16 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md +27 -0
- package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.zh.md +27 -0
- package/references/official-docs/docs/user/develop/basic/config.i18n.yaml +27 -5
- package/references/official-docs/docs/user/develop/basic/index.i18n.yaml +36 -5
- package/references/official-docs/docs/user/develop/basic/publish.i18n.yaml +30 -5
- package/references/official-docs/docs/user/develop/basic/publish.md +7 -1
- package/references/official-docs/docs/user/develop/basic/publish.zh.md +7 -1
- package/references/official-docs/docs/user/develop/basic/tool.i18n.yaml +15 -5
- package/references/official-docs/docs/user/develop/framework/events.i18n.yaml +45 -5
- package/references/official-docs/docs/user/develop/framework/index.i18n.yaml +30 -5
- package/references/official-docs/docs/user/develop/framework/service.i18n.yaml +39 -5
- package/references/official-docs/docs/user/develop/practice/dynamic-cordis.i18n.yaml +9 -5
- package/references/official-docs/docs/user/develop/practice/index.i18n.yaml +45 -5
- package/references/official-docs/docs/user/develop/practice/llm-adapter.i18n.yaml +33 -5
- package/references/official-docs/docs/user/develop/practice/llm-adapter.md +1 -1
- package/references/official-docs/docs/user/develop/practice/llm-adapter.zh.md +1 -1
- package/references/official-docs/docs/user/guide/github-review.i18n.yaml +24 -5
- package/references/official-docs/docs/user/guide/index.i18n.yaml +18 -5
- package/references/official-docs/docs/user/guide/index.md +1 -0
- package/references/official-docs/docs/user/guide/index.zh.md +1 -0
- package/references/official-docs/docs/user/guide/mcp-memory.i18n.yaml +36 -5
- package/references/official-docs/docs/user/guide/network-proxy.i18n.yaml +24 -5
- package/references/official-docs/docs/user/guide/providers-custom-form.png +0 -0
- package/references/official-docs/docs/user/guide/providers-custom-form.zh.png +0 -0
- package/references/official-docs/docs/user/guide/providers-models-page.png +0 -0
- package/references/official-docs/docs/user/guide/providers-models-page.zh.png +0 -0
- package/references/official-docs/docs/user/guide/providers.i18n.yaml +36 -5
- package/references/official-docs/docs/user/guide/providers.md +88 -78
- package/references/official-docs/docs/user/guide/providers.zh.md +102 -92
- package/references/official-docs/docs/user/guide/public-deployments.i18n.yaml +19 -0
- package/references/official-docs/docs/user/guide/public-deployments.md +33 -0
- package/references/official-docs/docs/user/guide/public-deployments.zh.md +33 -0
- package/references/official-docs/docs/user/guide/python-sdk.i18n.yaml +27 -5
- package/references/official-docs/docs/user/guide/python-sdk.md +1 -1
- package/references/official-docs/docs/user/guide/python-sdk.zh.md +1 -1
- package/references/official-docs/docs/user/guide/schedule.i18n.yaml +30 -5
- package/references/official-docs/docs/user/guide/schedule.md +69 -11
- package/references/official-docs/docs/user/guide/schedule.zh.md +69 -11
- package/references/official-docs/docs/user/index.i18n.yaml +9 -5
- package/references/official-docs/docs/web-styling.i18n.yaml +18 -5
- package/references/official-docs/docs/web-styling.md +12 -3
- package/references/official-docs/docs/web-styling.zh.md +12 -3
- package/references/official-docs/packages/AGENTS.md +1 -2
- package/references/official-docs/packages/README.md +5 -5
- package/references/official-docs/vendor/README.md +6 -2
- package/references/official-docs/website-docs.ts +10 -3
- package/references/official-plugin-dev-skill.md +124 -0
- package/references/sources.md +10 -5
- package/scripts/archive-discussions.ps1 +9 -1
- package/scripts/build-llms-full.mjs +64 -0
- package/scripts/check-docs-drift.ps1 +1 -1
- package/scripts/sync-official-docs.ps1 +1 -1
- package/templates/js/icon.svg +4 -0
- package/templates/js/locale/en.json +6 -0
- package/templates/js/locale/zh.json +6 -0
- package/templates/js/package.json +9 -1
- package/templates/ts/icon.svg +4 -0
- package/templates/ts/locale/en.json +6 -0
- package/templates/ts/locale/zh.json +6 -0
- package/templates/ts/package.json +9 -1
- package/references/official-docs/docs/subsystems/invariants.i18n.yaml +0 -6
- package/references/official-docs/docs/subsystems/invariants.md +0 -88
- package/references/official-docs/docs/subsystems/invariants.zh.md +0 -88
package/SKILL.md
CHANGED
|
@@ -19,48 +19,65 @@ description: Use when developing, reviewing, packaging, debugging, or answering
|
|
|
19
19
|
|
|
20
20
|
## 开发前置(第一步必做)
|
|
21
21
|
|
|
22
|
+
0. **先认版本**:`dsh --version`。`0.1.7-alpha.1`(2026-09-22)起包含本世代全部破坏性变更(会话格式 V4、settings 重写、`readBytes`、Messages-only 适配器);npm `latest`=`0.2.0-rc.2`、`alpha`=`0.2.1-alpha.1`,master 最新 tag 是 `dsh-v0.2.1-alpha.1`——**这三个"最新"不是同一个东西**。目标宿主不是最新线时,**先读 `guide/migration-0.2.md`** 按条目对照。
|
|
22
23
|
1. 若未读过 Cordis 概念:读 `references/official-docs/docs/cordis-primer.md`(5 个概念,5 分钟);需要动手跟练时跑 `references/official-docs/docs/cordis-tutorial/` 01-07(无 API key 可跑)。
|
|
23
|
-
2. 打开 `guide/quick-reference.md`(契约速查)+ `guide/plugin-dev-guide.md`(完整路径)。官方/社区文档 URL 对照见 `guide/links.md`。排查官方运行时行为/未修复 bug 时查 `guide/unfixed-issues.md`(master 基线源码核实的问题清单 + 已修复提交号 +
|
|
24
|
-
3. 确认目标扩展点:读 `references/official-docs/docs/architecture.md` 的「Where new behavior goes」表与 `references/official-docs/docs/cookbook/extension-cookbook.md` 的 feature→mechanism 表——**新行为必须挂到已文档化扩展点,不得改 agent-loop
|
|
24
|
+
2. 打开 `guide/quick-reference.md`(契约速查)+ `guide/plugin-dev-guide.md`(完整路径)。官方/社区文档 URL 对照见 `guide/links.md`。排查官方运行时行为/未修复 bug 时查 `guide/unfixed-issues.md`(master 基线源码核实的问题清单 + 已修复提交号 + 设计行为对照 + 本世代新核实的 T1–T11)。决定一个插件**该不该继续维护**(官方已进内核 / 第三方采用度显著更高)时查 `guide/when-to-retire-a-plugin.md`(判据 + 实测倍数表);判断某个能力面谁领先时查 `guide/choosing-a-plugin.md`。
|
|
25
|
+
3. 确认目标扩展点:读 `references/official-docs/docs/architecture.md` 的「Where new behavior goes」表与 `references/official-docs/docs/cookbook/extension-cookbook.md` 的 feature→mechanism 表——**新行为必须挂到已文档化扩展点,不得改 agent-loop**;**用最弱的够用机制**(restrict < guard < waterfall 改写 < system-prompt/assemble)。
|
|
26
|
+
4. 要写 UI / 要让 agent 自己装插件时,读 `references/official-plugin-dev-skill.md`(官方自带技能的要点与硬性规定)。
|
|
25
27
|
|
|
26
28
|
## 必须遵守的插件契约(官方红线,逐条核对)
|
|
27
29
|
|
|
28
30
|
- 插件 = 模块导出 `name` + `apply(ctx, config)`(+可选 `inject: string[]`);依赖的服务在 `apply` 前就绪;依赖服务消失会自动卸载、恢复后自动重载。
|
|
29
|
-
- **注册即 effect**:一切贡献走 `ctx.effect()` / `ctx.on()` / 服务 `register()`(返回 disposer);绝不手动 removeListener/clearInterval
|
|
30
|
-
- **waterfall 监听器必须调用 `next()
|
|
31
|
-
-
|
|
31
|
+
- **注册即 effect**:一切贡献走 `ctx.effect()` / `ctx.on()` / 服务 `register()`(返回 disposer);绝不手动 removeListener/clearInterval 式收尾。注册在别的 ctx 上(如 `agent.ctx`)的,**两个拥有者都要留 disposer**。
|
|
32
|
+
- **waterfall 监听器必须调用 `next()`**;不调=故意短路(拦截语义)。改写 `agent/pre-step` 决策要**展开**(`{ ...decision, messages }`),否则 `startsRequestSeries` 之类字段会丢。`emit/waterfall/parallel/serial/bail` 语义见速查表。
|
|
33
|
+
- **扩展点用"最弱的够用机制"**:`ctx.tools.restrict()`(只移除)< `ctx.tools.guard()`(只拒绝)< waterfall 改写(依赖顺序)< `system-prompt/assemble`(整段替换)。机制越强,越要替其他插件保留贡献。结果只看 `tools/result`;只有要变换结果才用 `tools/post-execute`。
|
|
34
|
+
- **模型可见 ⟺ 已记录**:进入模型请求的一切必须能从会话日志重建;新增模型可见输入必须新增 `SessionEventMap` 会话事件(**由宿主侧新增**,见下一条)。
|
|
35
|
+
- **绝不要用新的 `type` 追加会话事件**:读方只在事件带信封 `ignorable: true` 时接受未知类型,而运行时 `Session.append()` 写不了该标记——写了会让**整个会话打不开**。插件状态从既有事件推导,或放进 inspection 找到的 storage 服务。
|
|
36
|
+
- **`agent.inject()` 的 `source` 不再接受 `{ kind: 'plugin', plugin: '<name>' }`**(会话格式 V4 在消息准入处拒绝):先 `declare module '@deepseek-ai/dsh-llm' { interface MessageSourceMap { '<your-kind>': { kind: '<your-kind>' } } }` 再用;`inject` 不唤醒(要唤醒用 `followup()` / `steer()`)。
|
|
32
37
|
- 类型安全事件/服务用 declaration merging(`declare module '@deepseek-ai/cordis'`);事件文档标注 `@mode`。
|
|
33
|
-
- 配置用 Schemastery `Schema<Config>`(禁止普通对象);非法配置加载期响亮失败;**不得硬编码可调参数**(判断:cordis.yml
|
|
34
|
-
- 工具走 `defineTool`:`execute` 只返回 `output.schema` 声明的规范 JSON 值;尊重 `exec.signal`;人类可读内容放 `output.render`;UI 卡片 presenter 是**纯函数**(禁 I/O
|
|
38
|
+
- 配置用 Schemastery `Schema<Config>`(禁止普通对象);非法配置加载期响亮失败;**不得硬编码可调参数**(判断:cordis.yml 能否改)。要暴露给用户的实时字段用 `Volatile<T>` + `loader/volatile-update`(表单命名空间 = profile 条目 id;settings 已在 0.2 世代重写)。
|
|
39
|
+
- 工具走 `defineTool`:`execute` 只返回 `output.schema` 声明的规范 JSON 值;尊重 `exec.signal`;人类可读内容放 `output.render`;UI 卡片 presenter 是**纯函数**(禁 I/O/时钟/随机)。工具 `parameters` 是 **DSH 自己的方言,不是 JSON Schema**;可选钩子 `projectContent()`、`ToolSchema.deferLoading`、`ask.displayReason`。
|
|
40
|
+
- **可选服务用 `ctx.get(name)`**;`ctx.<service>` 只对你自己 `inject` 里声明过的服务合法(写未声明的 `ctx` 属性会抛错并可能静默杀掉整个插件的激活)。
|
|
35
41
|
- 可替换能力按三层接缝设计:Service Definition / Provider / Consumer;不提前拆。
|
|
36
|
-
- 打包:bundle 清单 `"dsh":{"bundle":{"patch":"..."}}
|
|
42
|
+
- 打包:bundle 清单 `"dsh":{"bundle":{"patch":"..."}}`(`patch` **可为有序数组**,每个文件的相对路径按各自目录解析);覆盖按 `id` 整行替换 config(上游删行后 override **静默失效**,升级后跑 `--dump-config` 查 `patch: entry not found`);`!!js`(双感叹号);git 安装需要 `prepare` 脚本与用户侧 `allowBuilds`,发布 npm/tarball 免构建许可。
|
|
43
|
+
- **交付必须补展示元数据**:`locale/*.json` 的 `meta.title`/`meta.description` + 导出的 `./icon`(≤256 KiB、realpath 后必须在包内);子路径插件**不读** `package.json`。
|
|
44
|
+
- **共享实例的 dsh 包只放 peerDependencies + devDependencies**,绝不放 dependencies(profile 内副本会静默遮蔽运行时版本,核心服务注册失败)。DSH **不校验** peer 范围,兼容性靠运行时探测。
|
|
45
|
+
- **UI 插件**:只渲染 slot 里的 React 组件(禁止 iframe 托管页面);样式只用 `--dsw-alias-*` 主题 token;不 `require` 任何 Harness Client 包(抛错组件会把整个 slot 搞白);`dsh.client.inject` **必须是静态数组**;不在组件外写 DOM、不往 `document.body` 追加。
|
|
46
|
+
- **性能**:per-session 状态放 `ctx.sessionProjections`(纯同步 apply、忽略即同引用、纯 JSON + `stateVersion`);等持久事件(`turn/end`/`assistant/message`/`tool/result`),实时 token 读 `agent/assistant-stream`;**不轮询 `agent/status`**。
|
|
47
|
+
- **禁止**:在会话运行期间改 profile 的 `cordis.patch.yml`(HMR 会重载,实测丢光 preset 工具、杀掉在途 turn、最坏永久废掉 `sessionController`);手写 profile 的 `package.json`;在 profile 目录里跑 pnpm。
|
|
37
48
|
|
|
38
49
|
## 按任务类型的开发路径
|
|
39
50
|
|
|
40
51
|
(以下路径均在 `references/official-docs/` 下,为官方文档全文副本)
|
|
41
52
|
|
|
42
|
-
- **新工具**:`docs/user/develop/basic/tool.md`(教程)→ `docs/cookbook/adding-a-tool.md`(完整契约:参数校验、规范值、后台任务 `ctx.jobs`、策略钩子、Code Mode、UI
|
|
53
|
+
- **新工具**:`docs/user/develop/basic/tool.md`(教程)→ `docs/cookbook/adding-a-tool.md`(完整契约:参数校验、规范值、后台任务 `ctx.jobs`、策略钩子、Code Mode、UI 卡片、`MessageSourceMap` 归属)→ 参考实现 `packages/shell/tool-bash`(本地 checkout)。
|
|
43
54
|
- **新服务/能力**:`docs/user/develop/framework/service.md` + `docs/user/develop/practice/`(三层拆分完整代码)。
|
|
44
55
|
- **拦截/策略/hook**:`docs/cookbook/extension-cookbook.md`(permission-gate 范例)+ `docs/event-producer-consumer.md`(全事件矩阵)。
|
|
45
56
|
- **新 LLM 提供商**:`docs/user/develop/practice/llm-adapter.md`(StreamChunk 协议)。
|
|
46
|
-
- **UI
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
57
|
+
- **UI 插件(Web)**:`references/official-plugin-dev-skill.md` §3.2 + `docs/subsystems/slots.md`、`sidebar-right.md`、`client-modules.md`、`web-client.md`、`ui-radius.md`;Chat 行业务节点用 `ctx.uiConversation.events.register()` + `conversation.chat.node` slot。
|
|
58
|
+
- **插件配置表单**:`docs/subsystems/settings.md`(已改名 "Plugin Configuration Forms")+ `docs/cookbook/adding-a-settings-card.md`(已重写)。
|
|
59
|
+
- **打包/发布**:`docs/user/develop/basic/publish.md`(bundle/profile、层顺序、多 patch 数组、peer 解析、git 安装坑)。
|
|
60
|
+
- **升级/迁移**:`guide/migration-0.2.md`(本库综述)→ `docs/upgrade-guide/**`(官方逐版本迁移指南)+ `docs/persistence-changes/**`(持久化类型变更记录)+ `docs/session-format-status.md`(会话格式版本权威)。
|
|
61
|
+
- **查服务/事件精确签名**:**优先用会话内 inspection**(`cordis_inspect_list` / `cordis_inspect_query`:Service / Event / Config / Tool / Slots / Theme),其次 `docs/subsystems/*.md` 生成式 Cordis API 区 + `docs/cordis-api/*`;**不要自造第二份静态清单**。站点 URL ↔ 本地副本对照见 `guide/links.md`,社区链接完整清单见 `references/community-ecosystem.md`。
|
|
62
|
+
- **官方自带插件开发技能(0.2 世代新增,先读)**:`references/official-plugin-dev-skill.md`(主流程 + 六份分面参考要点 + 模板定位);上游在 `packages/preset/agent-preset/skills/cordis-plugin-development/**`。它规定的官方路径是:工作区写 bundle → `plugin_manager` `install_bundle`(绝对目录)→ `cordis_inspect_query` 核对,**禁止**手写 profile 的 `package.json`/`cordis.patch.yml`、禁止在 profile 目录跑 pnpm。
|
|
63
|
+
- **参考社区实现与实测坑**:`references/community-ecosystem.md`、`references/community-repo-deep-dive.md`(首批 15 个开发仓库深读)、`downloads/community-repos/`(**114 个仓库完整源码副本**,需先跑 `scripts/download-community-repos.ps1` 生成)。社区已确认的机制变化(repository-plugin 0811 移除、bundle vs 纯 cordis 双通道)与实测坑清单在 `guide/plugin-dev-guide.md` §7,源码级问题索引在 `guide/unfixed-issues.md`(含本世代新核实的 T1–T11)。官方 Discussions 全量归档(**2026-10-06 刷新**,含 #1629 官方插件脚手架 RFC)与 npm 全家桶元数据分别在 `downloads/github/harness/discussions/` 与 `downloads/npm/`;中英文社区文章 HTML 快照在 `downloads/web/community-articles/`。
|
|
50
64
|
|
|
51
65
|
## 验证(交付前)
|
|
52
66
|
|
|
53
|
-
-
|
|
54
|
-
-
|
|
67
|
+
- 加载验证:**免审批**用 `cordis_inspect_list` / `cordis_inspect_query` 确认新行真的挂上(比 `list_plugins` 快且不需要审批);同时跑 `dsh --profile <name> --dump-config` 看有没有 `patch: entry <id> not found`。
|
|
68
|
+
- **读安装结果**:`plugin_manager` 的 `application` 与 `warnings` 决定改动是否生效——不是日志、进程列表或页面 boot payload。`failed` 要诊断,`overridden` 表示更高优先层胜出,`restart-required` 表示**尚未生效**;**替换**已安装包需要重启才能载入新的 JS 模块代。
|
|
69
|
+
- 行为验证:Web UI 或 `dsh --profile headless "…"` 实测;工具返回/模型可见文本即行为,改动必须重测。**安装成功 ≠ 用户看得见**:展示元数据(标题/描述/图标)要按 `references/official-plugin-dev-skill.md` §3.1 的清单核对,无浏览器控制时如实报告"渲染未验证"。
|
|
55
70
|
- 仓库内改动额外走:类型检查、目标包测试、keyless snapshot(模型/产品可见行为必须有组装后转录快照)、双语文档成对、Agent Note(非平凡变更同 PR)。
|
|
56
|
-
- 独立插件包:`pnpm pack` 后试装到干净 profile 验证(含 `lib/`
|
|
71
|
+
- 独立插件包:`pnpm pack` 后试装到干净 profile 验证(含 `lib/` 构建产物);本库的 `dsh-plugin-dev verify` 已对齐这条。
|
|
72
|
+
- **排障提示**:宿主插件 `apply()` 抛错在 `dsh web` 下**可能完全不可见**(无日志 sink),只表现为工具/监听器静默缺失(见 `guide/unfixed-issues.md` T3);遇到"装了但没反应"先换 headless 或有日志的 profile 复现。
|
|
57
73
|
|
|
58
74
|
## 知识库维护(需要时)
|
|
59
75
|
|
|
60
|
-
- 同步官方文档副本:`pwsh -File ./scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness checkout>]`——只同步 git 已跟踪文件(未跟踪草稿与未推送提交不会进来),并刷新 `references/official-docs/SNAPSHOT.md`;README 的"最后核验"日期与提交号引用 SNAPSHOT.md,不要手改。漂移校验:`pwsh -File ./scripts/verify-kit.ps1 -Checkout <checkout
|
|
61
|
-
- 刷新线上资料:`pwsh -File ./scripts/download-sources.ps1`;刷新社区仓库:`pwsh -File ./scripts/download-community-repos.ps1`;刷新社区文章快照:`pwsh -File ./scripts/download-community-articles.ps1`(三个脚本幂等,产出进 `./downloads/`)。刷新官方 Discussions 归档:`$env:GH_TOKEN=<token>; pwsh -File ./scripts/archive-discussions.ps1`(list.json +
|
|
76
|
+
- 同步官方文档副本:`pwsh -File ./scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness checkout>]`——只同步 git 已跟踪文件(未跟踪草稿与未推送提交不会进来),并刷新 `references/official-docs/SNAPSHOT.md`;README 的"最后核验"日期与提交号引用 SNAPSHOT.md,不要手改。漂移校验:`pwsh -File ./scripts/check-docs-drift.ps1 -Checkout <checkout>`(快速)或 `pwsh -File ./scripts/verify-kit.ps1 -Checkout <checkout>`(全量)。
|
|
77
|
+
- 刷新线上资料:`pwsh -File ./scripts/download-sources.ps1`;刷新社区仓库:`pwsh -File ./scripts/download-community-repos.ps1`;刷新社区文章快照:`pwsh -File ./scripts/download-community-articles.ps1`(三个脚本幂等,产出进 `./downloads/`)。刷新官方 Discussions 归档:`$env:GH_TOKEN=<token>; pwsh -File ./scripts/archive-discussions.ps1`(list.json + 精选线程评论,防缩水保护;**2026-10-06 期:list=5000、精选 1648**)。**注意 REST 分页天花板**:`/discussions` 列表最多翻到 5000 条,而仓库实际 total_count≈8850(GraphQL 口径)——需要更全的历史时按 GraphQL `UPDATED_AT DESC` 补抓。话题清单计数重核:`pwsh -File ./scripts/gen-topic-snapshot.ps1 -OutDir <dir> -MaxPages 10`。
|
|
78
|
+
- **维护节奏建议**:官方 3 周内发了 9 个 prerelease,所以"最后核验"日期要跟 tag 走;每次官方发版后按 `references/official-docs/docs/upgrade-guide/**`(**无 index、无入链**,必须主动看)+ `docs/persistence-changes/**` + GitHub Releases 说明三处增量更新 `guide/migration-0.2.md` 与 `guide/unfixed-issues.md`。
|
|
62
79
|
- 安装/刷新 agent 技能副本:`pwsh -File ./scripts/install-skill.ps1 -Target <skill目录>`(跳过 downloads/ 与 .github/,逐字节校验)。
|
|
63
|
-
- 冲突裁决:与官方文档冲突时以 `references/official-docs
|
|
80
|
+
- 冲突裁决:与官方文档冲突时以 `references/official-docs/`(官方仓库原文)为准;官方文档与**代码**冲突时以代码/产物为准并**明确标注分歧**(本轮已发现一例:`session-format-status.md` 的发布记录落后于代码与 npm)。
|
|
64
81
|
|
|
65
82
|
## CLI 工具链(dsh-plugin-dev)
|
|
66
83
|
|
package/dist/dsh-plugin-dev.js
CHANGED
|
@@ -275,6 +275,11 @@ const SKILL_SECTIONS = {
|
|
|
275
275
|
section: "§8",
|
|
276
276
|
heading: "packageManager 固定 pnpm"
|
|
277
277
|
},
|
|
278
|
+
"display-meta": {
|
|
279
|
+
file: "guide/plugin-dev-guide.md",
|
|
280
|
+
section: "§7.0.1",
|
|
281
|
+
heading: "展示元数据与图标(locale meta + 导出 icon)"
|
|
282
|
+
},
|
|
278
283
|
"readme-five-langs": {
|
|
279
284
|
file: "guide/plugin-dev-guide.md",
|
|
280
285
|
section: "§8",
|
|
@@ -480,6 +485,15 @@ function unescapeDouble(text) {
|
|
|
480
485
|
|
|
481
486
|
//#endregion
|
|
482
487
|
//#region src/cli/commands/check.ts
|
|
488
|
+
/** Icon formats the harness accepts, and its per-file size ceiling. */
|
|
489
|
+
const ICON_EXTENSIONS = [
|
|
490
|
+
".svg",
|
|
491
|
+
".png",
|
|
492
|
+
".jpg",
|
|
493
|
+
".jpeg",
|
|
494
|
+
".webp"
|
|
495
|
+
];
|
|
496
|
+
const ICON_MAX_BYTES = 262144;
|
|
483
497
|
const README_LANGS = [
|
|
484
498
|
"README.md",
|
|
485
499
|
"README-zh.md",
|
|
@@ -508,6 +522,7 @@ function runCheck(options) {
|
|
|
508
522
|
checkManifestEngines(root, pkg),
|
|
509
523
|
checkManifestFiles(root, pkg),
|
|
510
524
|
checkManifestPackageManager(root, pkg),
|
|
525
|
+
checkDisplayMeta(root, pkg),
|
|
511
526
|
checkReadmeFiveLangs(root),
|
|
512
527
|
checkReadmeConsistency(root),
|
|
513
528
|
checkRedlinePersonaRole(root),
|
|
@@ -527,10 +542,15 @@ function printCheckReport(report, format) {
|
|
|
527
542
|
if (format === "json") process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
528
543
|
else process.stdout.write(`${renderHuman(report)}\n`);
|
|
529
544
|
}
|
|
530
|
-
|
|
545
|
+
/** Every patch file a `dsh.bundle.patch` pointer names, in application order. */
|
|
546
|
+
function patchPaths(root, pkg) {
|
|
531
547
|
const pointer = pkg?.dsh?.bundle?.patch;
|
|
532
|
-
if (!pointer) return
|
|
533
|
-
return resolve(root,
|
|
548
|
+
if (!pointer) return [];
|
|
549
|
+
return (Array.isArray(pointer) ? pointer : [pointer]).filter((entry) => typeof entry === "string" && entry !== "").map((entry) => resolve(root, entry));
|
|
550
|
+
}
|
|
551
|
+
/** The first patch file, for checks that only describe one file. */
|
|
552
|
+
function patchPath(root, pkg) {
|
|
553
|
+
return patchPaths(root, pkg)[0];
|
|
534
554
|
}
|
|
535
555
|
/**
|
|
536
556
|
* List real source files: the `src/` tree plus root-level JS/ESM entry files.
|
|
@@ -729,21 +749,32 @@ function checkManifestBundlePatch(root, pkg) {
|
|
|
729
749
|
message: "no dsh.bundle.patch declared (pure cordis plugin, no bundle layer)",
|
|
730
750
|
skillRef: ref
|
|
731
751
|
};
|
|
732
|
-
const
|
|
733
|
-
if (
|
|
752
|
+
const paths = patchPaths(root, pkg);
|
|
753
|
+
if (paths.length === 0) return {
|
|
734
754
|
id: "manifest-bundle-patch",
|
|
735
755
|
severity: "error",
|
|
736
756
|
kind: "deterministic",
|
|
737
757
|
status: "fail",
|
|
738
|
-
message:
|
|
758
|
+
message: "dsh.bundle.patch must be a file path or a list of file paths",
|
|
739
759
|
skillRef: ref
|
|
740
760
|
};
|
|
761
|
+
const missing = paths.filter((path) => !isFile(path));
|
|
762
|
+
const label = Array.isArray(pointer) ? pointer.join(", ") : pointer;
|
|
763
|
+
if (missing.length > 0) return {
|
|
764
|
+
id: "manifest-bundle-patch",
|
|
765
|
+
severity: "error",
|
|
766
|
+
kind: "deterministic",
|
|
767
|
+
status: "fail",
|
|
768
|
+
message: `dsh.bundle.patch points at a missing file: ${label}`,
|
|
769
|
+
skillRef: ref,
|
|
770
|
+
detail: missing.map((path) => `not found: ${path}`)
|
|
771
|
+
};
|
|
741
772
|
return {
|
|
742
773
|
id: "manifest-bundle-patch",
|
|
743
774
|
severity: "error",
|
|
744
775
|
kind: "deterministic",
|
|
745
776
|
status: "pass",
|
|
746
|
-
message: `dsh.bundle.patch resolves to ${
|
|
777
|
+
message: `dsh.bundle.patch resolves to ${label}`,
|
|
747
778
|
skillRef: ref
|
|
748
779
|
};
|
|
749
780
|
}
|
|
@@ -856,10 +887,11 @@ function checkManifestFiles(_root, pkg) {
|
|
|
856
887
|
message: "no `files` whitelist; npm will publish everything",
|
|
857
888
|
skillRef: ref
|
|
858
889
|
};
|
|
859
|
-
const
|
|
890
|
+
const pointer = pkg?.dsh?.bundle?.patch;
|
|
891
|
+
const patchFiles = (Array.isArray(pointer) ? pointer : pointer ? [pointer] : ["cordis.patch.yml"]).map((entry) => entry.replace(/^\.\//, ""));
|
|
860
892
|
const main = pkg?.main;
|
|
861
893
|
const problems = [];
|
|
862
|
-
if (!files.includes(patchFile)) problems.push(`files whitelist is missing the patch file "${patchFile}"`);
|
|
894
|
+
for (const patchFile of patchFiles) if (!files.includes(patchFile)) problems.push(`files whitelist is missing the patch file "${patchFile}"`);
|
|
863
895
|
if (main && !files.includes(main) && !files.some((f) => main.startsWith(`${f.replace(/\/$/, "")}/`))) problems.push(`files whitelist is missing the main entry "${main}"`);
|
|
864
896
|
if (!files.some((f) => f === "lib" || f === "dist")) problems.push("files whitelist has no built-artifact directory (`lib` or `dist`)");
|
|
865
897
|
if (problems.length > 0) return {
|
|
@@ -908,6 +940,78 @@ function checkManifestPackageManager(_root, pkg) {
|
|
|
908
940
|
skillRef: ref
|
|
909
941
|
};
|
|
910
942
|
}
|
|
943
|
+
/**
|
|
944
|
+
* Plugin Manager and Settings read display text and an icon without activating
|
|
945
|
+
* the plugin, so a package that runs but ships no metadata still looks broken to
|
|
946
|
+
* users. Passing this check is a packaging requirement, not a runtime feature.
|
|
947
|
+
*/
|
|
948
|
+
function checkDisplayMeta(root, pkg) {
|
|
949
|
+
const ref = skillRefFor("display-meta");
|
|
950
|
+
const problems = [];
|
|
951
|
+
const notes = [];
|
|
952
|
+
const localeExport = Object.keys(pkg?.exports ?? {}).find((key) => key.includes("locale"));
|
|
953
|
+
if (!localeExport) problems.push("no locale export; add { \"./locale/*.json\": \"./locale/*.json\" } and a locale file with meta.title/meta.description");
|
|
954
|
+
else {
|
|
955
|
+
const localeDir = join(root, "locale");
|
|
956
|
+
if (!isDirectory(localeDir)) problems.push(`exports "${localeExport}" but the locale/ directory is missing`);
|
|
957
|
+
else {
|
|
958
|
+
const files = readdirSync(localeDir).filter((f) => f.endsWith(".json"));
|
|
959
|
+
if (files.length === 0) problems.push("locale/ holds no .json files");
|
|
960
|
+
if (!files.find((f) => f === "en.json")) problems.push("locale/en.json is missing (English is the required fallback)");
|
|
961
|
+
for (const file of files.filter((f) => f === "en.json")) {
|
|
962
|
+
const meta = readJsonIfExists(join(localeDir, file));
|
|
963
|
+
const title = typeof meta?.meta?.title === "string" ? meta.meta.title.trim() : "";
|
|
964
|
+
const description = typeof meta?.meta?.description === "string" ? meta.meta.description.trim() : "";
|
|
965
|
+
if (title === "") problems.push(`locale/${file} has no meta.title`);
|
|
966
|
+
if (description === "") problems.push(`locale/${file} has no meta.description`);
|
|
967
|
+
}
|
|
968
|
+
if (files.length === 1) notes.push("only locale/en.json present; add the user-facing languages too");
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
const manifestIcon = typeof pkg?.icon === "string" && pkg.icon !== "" ? pkg.icon : void 0;
|
|
972
|
+
const iconExport = Object.keys(pkg?.exports ?? {}).find((key) => key === "./icon" || key.endsWith("/icon"));
|
|
973
|
+
if (!manifestIcon && !iconExport) problems.push("no icon; publish an exported \"./icon\" (or a top-level package.json \"icon\")");
|
|
974
|
+
if (manifestIcon) {
|
|
975
|
+
const iconPath = resolve(root, manifestIcon);
|
|
976
|
+
if (!isFile(iconPath)) problems.push(`package.json icon points at a missing file: ${manifestIcon}`);
|
|
977
|
+
else {
|
|
978
|
+
if (!ICON_EXTENSIONS.some((ext) => iconPath.toLowerCase().endsWith(ext))) problems.push(`icon must be SVG, PNG, JPEG or WebP: ${manifestIcon}`);
|
|
979
|
+
const size = statSync(iconPath).size;
|
|
980
|
+
if (size > ICON_MAX_BYTES) problems.push(`icon exceeds 256 KiB (${size} bytes): ${manifestIcon}`);
|
|
981
|
+
if (size === 0) problems.push(`icon file is empty: ${manifestIcon}`);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
if (iconExport && !manifestIcon) {
|
|
985
|
+
const target = pkg?.exports?.[iconExport];
|
|
986
|
+
if (typeof target === "string" && target !== "" && !ICON_EXTENSIONS.some((ext) => target.toLowerCase().endsWith(ext))) problems.push(`exported ${iconExport} must resolve to SVG, PNG, JPEG or WebP (got ${target})`);
|
|
987
|
+
}
|
|
988
|
+
if (problems.length > 0) return {
|
|
989
|
+
id: "display-meta",
|
|
990
|
+
severity: "warning",
|
|
991
|
+
kind: "deterministic",
|
|
992
|
+
status: "warn",
|
|
993
|
+
message: "display metadata incomplete (Plugin Manager shows the raw id and default artwork)",
|
|
994
|
+
skillRef: ref,
|
|
995
|
+
detail: [...problems, ...notes]
|
|
996
|
+
};
|
|
997
|
+
return {
|
|
998
|
+
id: "display-meta",
|
|
999
|
+
severity: "warning",
|
|
1000
|
+
kind: "deterministic",
|
|
1001
|
+
status: "pass",
|
|
1002
|
+
message: "display metadata present (locale meta + exported icon)",
|
|
1003
|
+
skillRef: ref,
|
|
1004
|
+
...notes.length > 0 ? { detail: notes } : {}
|
|
1005
|
+
};
|
|
1006
|
+
}
|
|
1007
|
+
/** True when the path exists and is a directory. */
|
|
1008
|
+
function isDirectory(path) {
|
|
1009
|
+
try {
|
|
1010
|
+
return statSync(path).isDirectory();
|
|
1011
|
+
} catch {
|
|
1012
|
+
return false;
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
911
1015
|
function checkReadmeFiveLangs(root) {
|
|
912
1016
|
const ref = skillRefFor("readme-five-langs");
|
|
913
1017
|
const missing = [];
|