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
|
@@ -1,169 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 插件配置表单
|
|
2
2
|
|
|
3
3
|
[English](settings.md) | 中文
|
|
4
4
|
|
|
5
|
-
[
|
|
5
|
+
[设置服务](../../packages/settings/settings/README.zh.md) 从活动 profile 条目投影 volatile Config 字段。[配置编辑器](../../packages/boot/config-editor/README.zh.md) 通过 Cordis patch 持久化编辑。业务消费者对自己的 Config 引用调用 `.get()`。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 标识与值
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
表单命名空间是当前 profile 中可唯一定位条目的本地 id。多个插件实例在条目 id 不同时拥有独立表单。普通字段被排除。描述符包含实际值、继承值、显式 profile 覆盖值和乐观修订号。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## 编辑
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
/** Nominal id of one registered settings namespace. */
|
|
15
|
-
type SettingsNamespace = Branded<'SettingsNamespace'>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 注册
|
|
19
|
-
|
|
20
|
-
注册把 schemastery schema 绑定到调用方插件 fiber 上的 namespace——dispose(资源释放)该 fiber 即移除 namespace 及其观察者。options 携带组合层、owner 的生效时机,以及一个可选的、用于校验 schema 表达不了的约束的钩子。
|
|
21
|
-
|
|
22
|
-
```ts type-equiv
|
|
23
|
-
/** Registration options beyond the namespace schema. */
|
|
24
|
-
interface SettingsRegisterOptions<T> {
|
|
25
|
-
/** Composition-layer values resolved below the user layer (entry-config subset). */
|
|
26
|
-
base?: Partial<T>
|
|
27
|
-
/** Owner's effect timing, surfaced to configuration UIs; defaults to `live`. */
|
|
28
|
-
applies?: SettingsApplies
|
|
29
|
-
/**
|
|
30
|
-
* Reject a resolved section the owner could not act on, for constraints its
|
|
31
|
-
* schema cannot express — a cross-field requirement, or one field's validity
|
|
32
|
-
* depending on another's. Throwing here refuses the *write* that produced the
|
|
33
|
-
* value, so a caller learns at `update`/`replace`/`mutate` instead of storing
|
|
34
|
-
* something that would silently disable the owner.
|
|
35
|
-
*
|
|
36
|
-
* Kept separate from the schema because the schema is also what a
|
|
37
|
-
* configuration surface renders and what an absent section resolves through;
|
|
38
|
-
* folding a cross-field check into it would change both.
|
|
39
|
-
*
|
|
40
|
-
* Once the owner is registered, a stored section that fails this keeps the
|
|
41
|
-
* namespace's last good value and warns, exactly as a schema failure does,
|
|
42
|
-
* so an externally edited document cannot strand a running owner. At
|
|
43
|
-
* registration there is no last good value yet, so a stored section that
|
|
44
|
-
* already fails rejects the registration itself — again exactly as a schema
|
|
45
|
-
* failure does.
|
|
46
|
-
* @param value - the resolved section, schema-valid by construction.
|
|
47
|
-
*/
|
|
48
|
-
validate?: (value: T) => void
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
`validate` 在 schema 接纳该值之后运行,因此它看到的默认值和组合 base 与 owner 实际看到的完全一致。`dsh-llm-pi-ai` 用它在写入处拒绝自己无法服务的提供方 profile,而不是先存下来、再让该 namespace 下每条路由失效。
|
|
53
|
-
|
|
54
|
-
`applies` 是 UI 提示而非机制:`restart` 的 owner 从不 watch,其值在构造期读取一次,配置界面可为待生效变更加标。
|
|
55
|
-
|
|
56
|
-
```ts type-equiv
|
|
57
|
-
/** When a namespace's changes take effect for its owner. */
|
|
58
|
-
type SettingsApplies = 'live' | 'restart'
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Owner scope
|
|
62
|
-
|
|
63
|
-
scope 是面向 owner 的句柄。`update` 把稀疏 patch 只合并进用户分节(绝不进 `base`);`replace` 整体替换分节,是删除/重置路径——替换中缺席的键重新继承 `base` 与 schema 默认值。同一 namespace 的写入按调用顺序串行,解析值是深冻结快照。
|
|
64
|
-
|
|
65
|
-
```ts type-equiv
|
|
66
|
-
/** Owner-facing handle for one registered namespace. */
|
|
67
|
-
interface SettingsScope<T> {
|
|
68
|
-
/** Current resolved value: schema defaults, then `base`, then the user layer. */
|
|
69
|
-
get(): T
|
|
70
|
-
/**
|
|
71
|
-
* Observe committed changes to this namespace's resolved value. Invocations
|
|
72
|
-
* of one callback run asynchronously, one at a time, in commit order; a
|
|
73
|
-
* rejection is contained and logged like a sync throw. After the disposer
|
|
74
|
-
* returns, no further invocation starts — one already queued is skipped;
|
|
75
|
-
* one already started still settles, and service disposal waits for it.
|
|
76
|
-
* @param callback - invoked after each commit with the next and previous values.
|
|
77
|
-
* @returns the disposer removing this observer.
|
|
78
|
-
*/
|
|
79
|
-
watch(callback: (next: T, prev: T) => void | Promise<void>): () => void
|
|
80
|
-
/**
|
|
81
|
-
* Merge a partial patch into this namespace's user layer and persist it.
|
|
82
|
-
* @param patch - plain-object patch over the user section; JSON-compatible data
|
|
83
|
-
* only (non-JSON values reject with their path before anything persists).
|
|
84
|
-
*/
|
|
85
|
-
update(patch: object): Promise<void>
|
|
86
|
-
/**
|
|
87
|
-
* Replace this namespace's user section wholesale; absent keys re-inherit
|
|
88
|
-
* the composition `base` and schema defaults (`replace({})` resets all).
|
|
89
|
-
* @param section - the complete next user section; JSON-compatible data only,
|
|
90
|
-
* as for {@link update}.
|
|
91
|
-
*/
|
|
92
|
-
replace(section: object): Promise<void>
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## 描述符
|
|
97
|
-
|
|
98
|
-
`describe()` 为配置界面序列化每个已注册 namespace:schemastery 的 `toJSON()` 封装结构驱动 schema 渲染的表单,解析值填充表单,分离出的 `base`/`user` 层让表单按字段是否出现在 user 层标注「用户已覆盖」。`describe({ redactSecrets: true })`——每个对外传输接口都必须传入——从三层剥离 `role('secret')` 字段并枚举其 `{path, set}` slot,页面因此能渲染只写输入框而永远收不到机密值。
|
|
99
|
-
|
|
100
|
-
```ts type-equiv
|
|
101
|
-
/** One registered namespace as surfaced to configuration UIs. */
|
|
102
|
-
interface SettingsDescriptor {
|
|
103
|
-
/** The registered namespace. */
|
|
104
|
-
ns: SettingsNamespace
|
|
105
|
-
/** Serialized schemastery schema (`schema.toJSON()`). */
|
|
106
|
-
schema: unknown
|
|
107
|
-
/** Current resolved value. */
|
|
108
|
-
value: unknown
|
|
109
|
-
/**
|
|
110
|
-
* Monotonic revision of the raw user section this descriptor was read at.
|
|
111
|
-
* Send it back as `expectedRevision` on a write to refuse a stale one.
|
|
112
|
-
*/
|
|
113
|
-
revision: number
|
|
114
|
-
/** Registrant's composition `base` layer (detached), when one was declared. */
|
|
115
|
-
base?: unknown
|
|
116
|
-
/**
|
|
117
|
-
* Raw user section from the stored document (detached), when one exists and
|
|
118
|
-
* is well-formed; a field's presence here is what marks it user-overridden.
|
|
119
|
-
*/
|
|
120
|
-
user?: unknown
|
|
121
|
-
/** Owner's declared effect timing. */
|
|
122
|
-
applies: SettingsApplies
|
|
123
|
-
/** Schema-declared secret positions; present only under `redactSecrets`. */
|
|
124
|
-
secrets?: RedactedSecret[]
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
只持有脱敏 descriptor 的调用方无法安全地重建分节,因此删除改以路径 op 传递。每个 descriptor 还携带针对原始分节的 `revision`;写入可以把它作为 `expectedRevision` 送回,不再匹配的写入会被拒绝,而不会覆盖先落地的写入。
|
|
129
|
-
```ts type-equiv
|
|
130
|
-
/**
|
|
131
|
-
* One path-addressed edit to a namespace's user section. Path mutation exists
|
|
132
|
-
* for a caller holding an INCOMPLETE view of the section — a configuration UI
|
|
133
|
-
* reads the redacted descriptor, which by construction never received the
|
|
134
|
-
* `role('secret')` fields. Such a caller can name the field it means without
|
|
135
|
-
* restating the section: a wholesale `replace` rebuilt from a redacted
|
|
136
|
-
* document silently deletes every secret the wire never returned.
|
|
137
|
-
*/
|
|
138
|
-
type SettingsPathOp =
|
|
139
|
-
| { op: 'set'; path: readonly string[]; value: unknown }
|
|
140
|
-
| { op: 'unset'; path: readonly string[] }
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
```ts type-equiv
|
|
144
|
-
/** Options for {@link SettingsProvider.describe}. */
|
|
145
|
-
interface SettingsDescribeOptions {
|
|
146
|
-
/**
|
|
147
|
-
* Strip `role('secret')` fields from `value`/`base`/`user` and enumerate
|
|
148
|
-
* them in each descriptor's `secrets`. Every wire surface MUST pass this;
|
|
149
|
-
* the verbatim default exists for same-process configuration UIs only.
|
|
150
|
-
*/
|
|
151
|
-
redactSecrets?: boolean
|
|
152
|
-
}
|
|
153
|
-
```
|
|
13
|
+
`update` 合并提交的字段。`replace` 先将即时字段重置为继承配置,再应用提交的字段。`mutate` 操作独立路径,保留客户端响应中未包含的秘密值。每次写入都会验证完整 Config,并在持久化前拒绝过期修订号。
|
|
154
14
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
每次提交的变更——进程内写入或提供方观察到的外部编辑——在新值成为权威值之后发出 `settings/updated (ns, next, prev, source)`,解析值深相等时绝不发出。source 标记区分两条入口路径。
|
|
158
|
-
|
|
159
|
-
```ts type-equiv
|
|
160
|
-
/** Origin of one committed settings change. */
|
|
161
|
-
type SettingsUpdateSource = 'update' | 'provider'
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## 原生文档操作
|
|
165
|
-
|
|
166
|
-
`SettingsDocumentOpenValue` 确认 `settings/openSettingsDocument` 已准备好 provider 持有的文档,并将其交给原生文本编辑器。`AgentPresetDirectoryOpenValue` 报告已完成的原生交接,或在桌面打开不可用时返回解析后的用户 preset 目录。两项操作都不接受由浏览器选择的 Host 路径。
|
|
15
|
+
`settings/document-updated` 在 Loader 配置变化后使表单描述符失效。这是 UI 通知;消费者仅在需要刷新注册信息时使用 `loader/volatile-update`。
|
|
167
16
|
|
|
168
17
|
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
169
18
|
|
|
@@ -173,105 +22,52 @@ type SettingsUpdateSource = 'update' | 'provider'
|
|
|
173
22
|
|
|
174
23
|
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.zh.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
|
175
24
|
|
|
176
|
-
<a id="ctxsettings--
|
|
25
|
+
<a id="ctxsettings--settingsforms"></a>
|
|
177
26
|
|
|
178
|
-
### `ctx.settings` — `
|
|
27
|
+
### `ctx.settings` — `SettingsForms`
|
|
179
28
|
|
|
180
|
-
|
|
29
|
+
Project Config schemas into forms and own optional instance-level UI policy.
|
|
181
30
|
|
|
182
31
|
```ts cordis-catalog
|
|
183
|
-
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* @
|
|
32
|
+
/** Register the calling plugin instance's page policy without changing its Config.
|
|
33
|
+
* @param presentation Automatic-page policy for this instance; `auto` defaults to true.
|
|
34
|
+
* @param owner Plugin instance the policy belongs to; defaults to the calling fiber.
|
|
35
|
+
* @returns Disposer; register it with the calling plugin's effects.
|
|
36
|
+
* @throws If this instance already has a registered policy.
|
|
188
37
|
*/
|
|
189
|
-
|
|
38
|
+
configure(presentation: { auto?: boolean }, owner: Fiber = this.ctx.fiber): () => void
|
|
190
39
|
|
|
191
|
-
/**
|
|
192
|
-
*
|
|
193
|
-
* is an effect on the calling plugin's fiber: disposing that fiber removes
|
|
194
|
-
* the namespace and its observers. An invalid stored section fails the
|
|
195
|
-
* registration itself — the earliest point where the schema can judge it.
|
|
196
|
-
* @param ns - unique namespace; duplicate registration fails loud.
|
|
197
|
-
* @param schema - schemastery schema resolving this namespace's value.
|
|
198
|
-
* @param options - composition `base` layer and effect timing.
|
|
199
|
-
* @returns the owner scope for reads, observation, and updates.
|
|
200
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
40
|
+
/** Locate the profile patch for native editing.
|
|
41
|
+
* @returns The existing profile patch path.
|
|
201
42
|
*/
|
|
202
|
-
|
|
43
|
+
prepareDocument(): Promise<string>
|
|
203
44
|
|
|
204
|
-
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* present, then falls back to that entry if the provider detaches.
|
|
208
|
-
* @param owner - consumer context whose unload suppresses fallback work.
|
|
209
|
-
* @param ns - consumer-owned settings namespace.
|
|
210
|
-
* @param schema - schema resolving the namespace.
|
|
211
|
-
* @param entry - composition entry used as the base and fallback value.
|
|
212
|
-
* @param hooks - source sink, change notification, and optional validation.
|
|
213
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
214
|
-
*/
|
|
215
|
-
installSection<const Namespace extends string, T>( owner: Context, ns: Namespace & SettingsNamespaceInput<Namespace>, schema: z<T>, entry: T, hooks: SettingsSectionHooks<T>, ): void
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Describe every registered namespace for configuration surfaces, including
|
|
219
|
-
* the composition `base` and raw user layers so a form can mark which fields
|
|
220
|
-
* the user overrode (presence in `user`) and what a reset returns to.
|
|
221
|
-
* @param options - redaction switch; wire surfaces must redact.
|
|
222
|
-
* @returns one descriptor per registered namespace, in registration order.
|
|
45
|
+
/** Read active plugin schemas and their live values.
|
|
46
|
+
* @param options Redaction required for remote callers.
|
|
47
|
+
* @returns Forms keyed by unique profile entry ids.
|
|
223
48
|
*/
|
|
224
49
|
describe(options?: SettingsDescribeOptions): SettingsDescriptor[]
|
|
225
50
|
|
|
226
|
-
/**
|
|
227
|
-
*
|
|
228
|
-
* @param
|
|
229
|
-
* @
|
|
230
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
51
|
+
/** Merge editable fields into an entry's config.
|
|
52
|
+
* @param ns Profile entry id.
|
|
53
|
+
* @param patch Fields to merge.
|
|
54
|
+
* @param expectedRevision Revision returned by describe.
|
|
231
55
|
*/
|
|
232
|
-
|
|
56
|
+
async update(ns: string, patch: object, expectedRevision?: number): Promise<void>
|
|
233
57
|
|
|
234
|
-
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
* namespace are serialized: concurrent updates apply in call order, each
|
|
239
|
-
* merging over the previous write's committed section.
|
|
240
|
-
* @param ns - the registered namespace to update.
|
|
241
|
-
* @param patch - plain-object patch over the user section.
|
|
242
|
-
* @param expectedRevision - the descriptor `revision` the caller read; a
|
|
243
|
-
* namespace that moved past it rejects with {@link SettingsConflictError}.
|
|
244
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
58
|
+
/** Reset all live fields, then set the supplied fields; ordinary config is preserved.
|
|
59
|
+
* @param ns Profile entry id.
|
|
60
|
+
* @param section Complete form values.
|
|
61
|
+
* @param expectedRevision Revision returned by describe.
|
|
245
62
|
*/
|
|
246
|
-
async
|
|
63
|
+
async replace(ns: string, section: object, expectedRevision?: number): Promise<void>
|
|
247
64
|
|
|
248
|
-
/**
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
* merge-only patch cannot express (`replace({})` re-inherits everything).
|
|
253
|
-
* @param ns - the registered namespace to replace.
|
|
254
|
-
* @param section - the complete next user section.
|
|
255
|
-
* @param expectedRevision - the descriptor `revision` the caller read; a
|
|
256
|
-
* namespace that moved past it rejects with {@link SettingsConflictError}.
|
|
257
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
65
|
+
/** Apply field edits without restating redacted secrets; unsetting an array index removes its element.
|
|
66
|
+
* @param ns Profile entry id.
|
|
67
|
+
* @param ops Ordered form edits.
|
|
68
|
+
* @param expectedRevision Revision returned by describe.
|
|
258
69
|
*/
|
|
259
|
-
async
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Apply path-addressed edits to one registered namespace's user section,
|
|
263
|
-
* validate, persist, then commit and emit. The ops are applied to the
|
|
264
|
-
* section as it stands when the write reaches the front of the queue, so a
|
|
265
|
-
* caller never has to restate fields it did not touch — and, crucially,
|
|
266
|
-
* cannot delete fields it never saw. This is the write path for any caller
|
|
267
|
-
* holding a redacted view; `replace` remains the wholesale reset.
|
|
268
|
-
* @param ns - the registered namespace to edit.
|
|
269
|
-
* @param ops - ordered path edits; later ops observe earlier ones.
|
|
270
|
-
* @param expectedRevision - the descriptor `revision` the caller read; a
|
|
271
|
-
* namespace that moved past it rejects with {@link SettingsConflictError}.
|
|
272
|
-
* @throws {TypeError} when `ns` is not a lowercase hyphenated identifier.
|
|
273
|
-
*/
|
|
274
|
-
async mutate<const Namespace extends string>( ns: Namespace & SettingsNamespaceInput<Namespace>, ops: readonly SettingsPathOp[], expectedRevision?: number, ): Promise<void>
|
|
70
|
+
async mutate(ns: string, ops: readonly SettingsPathOp[], expectedRevision?: number): Promise<void>
|
|
275
71
|
```
|
|
276
72
|
|
|
277
73
|
Source: [`packages/settings/settings/src/index.ts`](../../packages/settings/settings/src/index.ts)
|
|
@@ -291,12 +87,6 @@ Host service backing the generated `ctx.remote.settings` namespace. Every remote
|
|
|
291
87
|
*/
|
|
292
88
|
@Remote describe(): SettingsDescribeValue
|
|
293
89
|
|
|
294
|
-
/**
|
|
295
|
-
* Report whether this deployment can open an authored Agent preset directory natively.
|
|
296
|
-
* @returns true when the matching open operation is available.
|
|
297
|
-
*/
|
|
298
|
-
@Remote canOpenAgentPresetDirectory(): boolean
|
|
299
|
-
|
|
300
90
|
/**
|
|
301
91
|
* Merge a patch into one namespace's stored user section.
|
|
302
92
|
* @param ns - namespace key to write.
|
|
@@ -336,15 +126,6 @@ Host service backing the generated `ctx.remote.settings` namespace. Every remote
|
|
|
336
126
|
* @throws RemoteError when no document exists, preparation fails, or opening fails.
|
|
337
127
|
*/
|
|
338
128
|
@Remote async openSettingsDocument(signal: AbortSignal): Promise<SettingsDocumentOpenValue>
|
|
339
|
-
|
|
340
|
-
/**
|
|
341
|
-
* Open one user-authored Agent preset directory or return its path when no native opener exists.
|
|
342
|
-
* @param agentPreset - preset id resolved against Host-owned roots.
|
|
343
|
-
* @param signal - caller lifetime; abort terminates the native command.
|
|
344
|
-
* @returns an opened confirmation or the resolved directory for text display.
|
|
345
|
-
* @throws RemoteError when the preset is missing, read-only, invalid, or cannot be opened.
|
|
346
|
-
*/
|
|
347
|
-
@Remote async openAgentPresetDirectory( agentPreset: string, signal: AbortSignal, ): Promise<AgentPresetDirectoryOpenValue>
|
|
348
129
|
```
|
|
349
130
|
|
|
350
131
|
Source: [`packages/api/settings-controller/src/index.ts`](../../packages/api/settings-controller/src/index.ts)
|
|
@@ -357,49 +138,18 @@ Source: [`packages/api/settings-controller/src/index.ts`](../../packages/api/set
|
|
|
357
138
|
|
|
358
139
|
#### `settings/document-updated` — emit
|
|
359
140
|
|
|
360
|
-
One
|
|
141
|
+
One profile entry's form values, availability, or page policy changed. Form clients re-read its schema, resolved values, and revision.
|
|
361
142
|
|
|
362
143
|
```ts cordis-catalog
|
|
363
144
|
/**
|
|
364
|
-
* One
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
* resolved value, different meaning) and that their held revision is
|
|
369
|
-
* stale. Listener containment matches `settings/updated`.
|
|
370
|
-
* @param ns - the namespace whose stored section changed.
|
|
371
|
-
* @param revision - the namespace's new revision.
|
|
145
|
+
* One profile entry's form values, availability, or page policy changed.
|
|
146
|
+
* Form clients re-read its schema, resolved values, and revision.
|
|
147
|
+
* @param ns Profile entry id.
|
|
148
|
+
* @param revision The entry's new revision.
|
|
372
149
|
* @mode emit
|
|
373
150
|
*/
|
|
374
151
|
'settings/document-updated'(ns: SettingsNamespace, revision: number): void
|
|
375
152
|
```
|
|
376
153
|
|
|
377
|
-
Source: [`packages/settings/settings/src/types.ts`](../../packages/settings/settings/src/types.ts)
|
|
378
|
-
|
|
379
|
-
<a id="settingsupdated--emit"></a>
|
|
380
|
-
|
|
381
|
-
#### `settings/updated` — emit
|
|
382
|
-
|
|
383
|
-
Committed change to one registered namespace's resolved value. Emitted after the provider persisted (for `update`) or published (`provider`) the change; never emitted when the resolved value is deep-equal. Listener failures are contained and logged — a sync throw and an async rejection alike — except `INVARIANT`-coded failures, which rethrow after every listener ran; that rethrow reaches the emitter only from synchronous listeners, so invariant checks on this event must not be async functions.
|
|
384
|
-
|
|
385
|
-
```ts cordis-catalog
|
|
386
|
-
/**
|
|
387
|
-
* Committed change to one registered namespace's resolved value. Emitted
|
|
388
|
-
* after the provider persisted (for `update`) or published (`provider`)
|
|
389
|
-
* the change; never emitted when the resolved value is deep-equal.
|
|
390
|
-
* Listener failures are contained and logged — a sync throw and an async
|
|
391
|
-
* rejection alike — except `INVARIANT`-coded failures, which rethrow
|
|
392
|
-
* after every listener ran; that rethrow reaches the emitter only from
|
|
393
|
-
* synchronous listeners, so invariant checks on this event must not be
|
|
394
|
-
* async functions.
|
|
395
|
-
* @param ns - the namespace whose resolved value changed.
|
|
396
|
-
* @param next - the new resolved value.
|
|
397
|
-
* @param prev - the previous resolved value.
|
|
398
|
-
* @param source - whether the change entered through `update()` or the provider.
|
|
399
|
-
* @mode emit
|
|
400
|
-
*/
|
|
401
|
-
'settings/updated'(ns: SettingsNamespace, next: unknown, prev: unknown, source: SettingsUpdateSource): void
|
|
402
|
-
```
|
|
403
|
-
|
|
404
154
|
Source: [`packages/settings/settings/src/types.ts`](../../packages/settings/settings/src/types.ts)
|
|
405
155
|
<!-- END GENERATED cordis-surface -->
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
-
# Bilingual-pair consistency record (docs/i18n/README.md):
|
|
2
|
-
#
|
|
3
|
-
#
|
|
1
|
+
# Bilingual-pair consistency record for shell.md (docs/i18n/README.md): per heading
|
|
2
|
+
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
|
3
|
+
# After editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write docs/subsystems/shell.md
|
|
5
|
-
shell
|
|
6
|
-
|
|
5
|
+
/shell-executor:
|
|
6
|
+
en: c9aba02120c42608
|
|
7
|
+
zh: f76b6b9745015993
|
|
8
|
+
/shell-executor/managed-shell-environment-namespace:
|
|
9
|
+
en: f04b6ee0f2ec23d5
|
|
10
|
+
zh: 8c3104d8ce6c70e6
|
|
11
|
+
/shell-executor/request-vs-spec-the-resolve-split:
|
|
12
|
+
en: a4f7d0ff18dce0c6
|
|
13
|
+
zh: d956cc599948fae8
|
|
14
|
+
/shell-executor/foreground-runs-shellrunresult:
|
|
15
|
+
en: 471d328907ef0761
|
|
16
|
+
zh: d6b0b8e66e427394
|
|
17
|
+
/shell-executor/file-sandbox-shellsandboxinfo:
|
|
18
|
+
en: 7f84b75c4128768c
|
|
19
|
+
zh: cf389bfa6c8d24f3
|
|
20
|
+
/shell-executor/background-processes-shellprocess:
|
|
21
|
+
en: e5530a4d2b8f3aa3
|
|
22
|
+
zh: 72e4fd736c1a6d9d
|
|
23
|
+
/shell-executor/the-service:
|
|
24
|
+
en: b850ffb5f5b75ac6
|
|
25
|
+
zh: 796e57ae77e0e41f
|
|
@@ -27,6 +27,8 @@ interface ShellExecRequest {
|
|
|
27
27
|
workdir?: string | undefined
|
|
28
28
|
/** Timeout override in milliseconds (implementations cap it). */
|
|
29
29
|
timeoutMs?: number | undefined
|
|
30
|
+
/** Deadline policy at `timeoutMs` expiry (default `'kill'`). */
|
|
31
|
+
onExpiry?: ShellExpiryPolicy | undefined
|
|
30
32
|
/**
|
|
31
33
|
* Foreground stdout capture budget in bytes. Absent uses the executor's
|
|
32
34
|
* default output cap. Trusted in-process consumers use this when they must
|
|
@@ -34,7 +36,7 @@ interface ShellExecRequest {
|
|
|
34
36
|
* tool does not expose it as a parameter.
|
|
35
37
|
*/
|
|
36
38
|
stdoutMaxBytes?: number | undefined
|
|
37
|
-
/** Abort signal — implementations kill the command when it fires. */
|
|
39
|
+
/** Abort signal — implementations kill the command when it fires, and treat a signal that is already aborted as fired. */
|
|
38
40
|
signal?: AbortSignal | undefined
|
|
39
41
|
/**
|
|
40
42
|
* Bytes to write to the command's stdin, then close it. Absent leaves stdin
|
|
@@ -68,19 +70,21 @@ interface ShellExecRequest {
|
|
|
68
70
|
```ts type-equiv
|
|
69
71
|
/**
|
|
70
72
|
* A resolved execution spec. {@link ShellExecutor.resolve} fills and caps the
|
|
71
|
-
* required fields;
|
|
72
|
-
*
|
|
73
|
+
* required fields; under `onExpiry: 'none'` the resolved `timeoutMs` arms no
|
|
74
|
+
* timer and is only echoed into {@link ShellRunResult.timeoutMs}.
|
|
73
75
|
*/
|
|
74
76
|
interface ShellExecSpec {
|
|
75
77
|
command: string
|
|
76
78
|
workdir: string
|
|
77
79
|
timeoutMs: number
|
|
80
|
+
/** Deadline policy at `timeoutMs` expiry ({@link ShellExecutor.resolve} defaults it to `'kill'`). */
|
|
81
|
+
onExpiry: ShellExpiryPolicy
|
|
78
82
|
/**
|
|
79
|
-
* Resolved
|
|
80
|
-
* stdout;
|
|
83
|
+
* Resolved stdout capture budget in bytes, applied to every execution's
|
|
84
|
+
* stdout; stderr keeps the executor's own output cap.
|
|
81
85
|
*/
|
|
82
86
|
stdoutMaxBytes: number
|
|
83
|
-
/** Abort signal — implementations kill the command when it fires. */
|
|
87
|
+
/** Abort signal — implementations kill the command when it fires, and treat a signal that is already aborted as fired. */
|
|
84
88
|
signal?: AbortSignal | undefined
|
|
85
89
|
/** Bytes to write to stdin before closing it; absent means no stdin. */
|
|
86
90
|
stdin?: string | undefined
|
|
@@ -162,7 +166,7 @@ interface ShellSandboxInfo {
|
|
|
162
166
|
}
|
|
163
167
|
```
|
|
164
168
|
|
|
165
|
-
The `SANDBOX_UNAVAILABLE` error code (owned by the [sandbox seam](sandbox.md)) is what the `ctx.sandbox` provider throws — and the executor propagates — when a confined mode has no usable backend. A selected runner refusing its profile reaches the same fail-closed foreground error; a settled background job records `runnerFailed`. The model receives denial/runner facts in results, learns the effective mode only when a denial marker names it, and can request a one-shot strictly wider retry through `sandbox_permissions` plus `justification`; `ctx.approval` must grant that exact call before anything executes. The complete policy and switching design is the [sandbox
|
|
169
|
+
The `SANDBOX_UNAVAILABLE` error code (owned by the [sandbox seam](sandbox.md)) is what the `ctx.sandbox` provider throws — and the executor propagates — when a confined mode has no usable backend. A selected runner refusing its profile reaches the same fail-closed foreground error; a settled background job records `runnerFailed`. The model receives denial/runner facts in results, learns the effective mode only when a denial marker names it, and can request a one-shot strictly wider retry through `sandbox_permissions` plus `justification`; `ctx.approval` must grant that exact call before anything executes. The complete policy and switching design is the [sandbox reference](../../packages/sandbox/sandbox-policy/README.md).
|
|
166
170
|
|
|
167
171
|
## Background processes: `ShellProcess`
|
|
168
172
|
|
|
@@ -195,6 +199,13 @@ interface ShellProcess {
|
|
|
195
199
|
* full-stream spill files when available.
|
|
196
200
|
*/
|
|
197
201
|
readOutput(): ShellProcessRead
|
|
202
|
+
/**
|
|
203
|
+
* Non-consuming offset readers over the same captured streams the consuming
|
|
204
|
+
* {@link readOutput} cursor drains, including the provider-failure note a
|
|
205
|
+
* rejected spawn leaves on stderr. Independent observers read here at their
|
|
206
|
+
* own offsets without stealing bytes from `readOutput`.
|
|
207
|
+
*/
|
|
208
|
+
observed: ShellObservedStreams
|
|
198
209
|
/**
|
|
199
210
|
* Terminate the provider-managed range. Returns false when it had already finished
|
|
200
211
|
* (no-op); idempotent.
|
|
@@ -237,37 +248,33 @@ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnp
|
|
|
237
248
|
|
|
238
249
|
Abstract bash execution service. Subclass, implement the abstract methods, and load the subclass as a plugin — it registers as `ctx.shell` (one implementation per context; loading a second throws, which is cordis' standard duplicate-service behavior).
|
|
239
250
|
|
|
251
|
+
execute resolves with the process handle after preparation. "Foreground" is a property of what the caller awaits, not of the spawn — a caller that awaits ShellExecution.result ran the command in the foreground; one that keeps the handle ran it in the background. A caller that waits only for a while runs the command under `onExpiry: 'none'` and bounds its own wait; the handle stays valid after the caller stops waiting.
|
|
252
|
+
|
|
240
253
|
Implementations must honor these semantics:
|
|
241
254
|
|
|
242
|
-
-
|
|
243
|
-
-
|
|
255
|
+
- ShellExecution.result rejects only for infrastructure failures. Nonzero exits, timeout kills, and abort kills resolve with a descriptive result: first-cause `timedOut`/`aborted`, the spec's `timeoutMs` echoed.
|
|
256
|
+
- The handle is published after preparation. `done` settles at process close and never rejects; spawn failures settle as `killed` with the error on the read path, while `result()` carries the same failure as its rejection.
|
|
257
|
+
- `onExpiry: 'none'` arms no deadline; `'kill'` kills at expiry. Expiry during preparation returns a settled timed-out handle without output.
|
|
244
258
|
- ShellProcess.readOutput is incremental: consecutive reads never repeat output. Lossy reads report truncation and available spill files.
|
|
245
|
-
- A still-running
|
|
259
|
+
- A still-running process is stopped and awaited when its owning composition tears down. With the subprocess seam that boundary is `ctx.subprocess` disposal, so a process survives an executor-only reload.
|
|
246
260
|
|
|
247
261
|
```ts cordis-catalog
|
|
248
262
|
/**
|
|
249
263
|
* Apply implementation-owned defaults and caps to a request before execution.
|
|
250
264
|
* @param request - the caller's request; omitted fields get this
|
|
251
265
|
* implementation's defaults, capped fields are clamped.
|
|
252
|
-
* @returns the fully-specified spec to hand to {@link
|
|
266
|
+
* @returns the fully-specified spec to hand to {@link execute}.
|
|
253
267
|
*/
|
|
254
268
|
abstract resolve(request: ShellExecRequest): ShellExecSpec
|
|
255
269
|
|
|
256
270
|
/**
|
|
257
|
-
*
|
|
271
|
+
* Prepare and spawn the command under its resolved deadline.
|
|
258
272
|
* @param spec - a resolved spec from {@link resolve}, never a raw request.
|
|
259
|
-
* @returns the
|
|
260
|
-
*
|
|
273
|
+
* @returns the prepared handle, including its result projection;
|
|
274
|
+
* preparation timeout yields an already-settled handle with no output.
|
|
261
275
|
* @throws on preparation failure or caller cancellation before process publication.
|
|
262
276
|
*/
|
|
263
|
-
abstract
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Prepare a background process asynchronously and publish its live handle.
|
|
267
|
-
* @param spec - a resolved spec from {@link resolve}, never a raw request.
|
|
268
|
-
* @returns the live process handle after preparation; cancellation or setup failure rejects.
|
|
269
|
-
*/
|
|
270
|
-
abstract start(spec: ShellExecSpec): Promise<ShellProcess>
|
|
277
|
+
abstract execute(spec: ShellExecSpec): Promise<ShellExecution>
|
|
271
278
|
```
|
|
272
279
|
|
|
273
280
|
Source: [`packages/shell/shell/src/index.ts`](../../packages/shell/shell/src/index.ts)
|