dsh-plugin-guide 0.3.1 → 0.3.2
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 +1 -1
- package/README.hi.md +1 -1
- package/README.md +1 -1
- package/README.pt.md +1 -1
- package/README.zh.md +1 -1
- package/SKILL.md +1 -1
- package/dist/dsh-plugin-dev.js +5 -5
- package/guide/links.md +1 -1
- package/guide/plugin-dev-guide.md +1 -1
- package/guide/quick-reference.es.md +2 -2
- package/guide/quick-reference.hi.md +1 -1
- package/guide/quick-reference.md +2 -2
- package/guide/quick-reference.pt.md +2 -2
- package/guide/quick-reference.zh-CN.md +2 -2
- package/package.json +3 -3
- package/references/cordis-paper-and-community.md +1 -1
- package/references/official-docs/AGENTS.md +27 -22
- package/references/official-docs/README.i18n.yaml +2 -2
- package/references/official-docs/README.md +1 -1
- package/references/official-docs/README.zh.md +19 -9
- package/references/official-docs/SNAPSHOT.md +5 -5
- package/references/official-docs/THIRD_PARTY_NOTICES.md +36 -13
- package/references/official-docs/docs/AGENTS.md +4 -4
- package/references/official-docs/docs/agent-lifecycle.i18n.yaml +2 -2
- package/references/official-docs/docs/agent-lifecycle.md +1 -1
- package/references/official-docs/docs/agent-lifecycle.zh.md +2 -2
- package/references/official-docs/docs/api-gateway.i18n.yaml +2 -2
- package/references/official-docs/docs/api-gateway.md +8 -8
- package/references/official-docs/docs/api-gateway.zh.md +8 -8
- package/references/official-docs/docs/architecture.i18n.yaml +2 -2
- package/references/official-docs/docs/architecture.md +23 -7
- package/references/official-docs/docs/architecture.zh.md +36 -20
- package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
- package/references/official-docs/docs/capability-seams.md +132 -67
- package/references/official-docs/docs/capability-seams.zh.md +132 -67
- package/references/official-docs/docs/config-catalog.i18n.yaml +2 -2
- package/references/official-docs/docs/config-catalog.md +659 -373
- package/references/official-docs/docs/config-catalog.zh.md +677 -391
- package/references/official-docs/docs/cookbook/adding-a-package.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/adding-a-package.md +2 -3
- package/references/official-docs/docs/cookbook/adding-a-package.zh.md +8 -7
- package/references/official-docs/docs/cookbook/{adding-a-conversation-node.i18n.yaml → adding-a-remote-api.i18n.yaml} +3 -3
- package/references/official-docs/docs/cookbook/adding-a-remote-api.md +197 -0
- package/references/official-docs/docs/cookbook/adding-a-remote-api.zh.md +197 -0
- package/references/official-docs/docs/cookbook/adding-a-settings-card.i18n.yaml +6 -0
- package/references/official-docs/docs/cookbook/adding-a-settings-card.md +102 -0
- package/references/official-docs/docs/cookbook/adding-a-settings-card.zh.md +102 -0
- package/references/official-docs/docs/cookbook/adding-a-tool.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/adding-a-tool.md +11 -4
- package/references/official-docs/docs/cookbook/adding-a-tool.zh.md +16 -9
- package/references/official-docs/docs/cookbook/adding-a-vendored-package.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/adding-a-vendored-package.md +2 -2
- package/references/official-docs/docs/cookbook/adding-a-vendored-package.zh.md +4 -4
- package/references/official-docs/docs/cookbook/adding-an-llm-adapter.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/adding-an-llm-adapter.md +1 -1
- package/references/official-docs/docs/cookbook/adding-an-llm-adapter.zh.md +3 -3
- package/references/official-docs/docs/cookbook/extension-cookbook.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/extension-cookbook.md +9 -8
- package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +17 -14
- package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.i18n.yaml +1 -1
- package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.zh.md +1 -1
- package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml +1 -1
- package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +1 -1
- package/references/official-docs/docs/cordis-api/context.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-api/context.zh.md +1 -1
- package/references/official-docs/docs/cordis-api/events.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-api/events.zh.md +1 -1
- package/references/official-docs/docs/cordis-api/inherited.md +1 -1
- package/references/official-docs/docs/cordis-primer.i18n.yaml +2 -2
- package/references/official-docs/docs/cordis-primer.md +2 -1
- package/references/official-docs/docs/cordis-primer.zh.md +3 -2
- package/references/official-docs/docs/cordis-tutorial/01-first-plugin.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/01-first-plugin.zh.md +4 -4
- package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +4 -4
- package/references/official-docs/docs/cordis-tutorial/03-services.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/03-services.zh.md +4 -4
- package/references/official-docs/docs/cordis-tutorial/04-events.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/04-events.zh.md +4 -4
- package/references/official-docs/docs/cordis-tutorial/05-config.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/05-config.zh.md +2 -2
- package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.zh.md +3 -3
- package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.i18n.yaml +2 -2
- package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.md +5 -4
- package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.zh.md +11 -10
- package/references/official-docs/docs/cordis-tutorial/index.i18n.yaml +1 -1
- package/references/official-docs/docs/cordis-tutorial/index.zh.md +10 -10
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +6 -0
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +159 -0
- package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +159 -0
- package/references/official-docs/docs/defensive-patterns.i18n.yaml +1 -1
- package/references/official-docs/docs/defensive-patterns.zh.md +3 -1
- package/references/official-docs/docs/development.i18n.yaml +2 -2
- package/references/official-docs/docs/development.md +9 -13
- package/references/official-docs/docs/development.zh.md +23 -21
- package/references/official-docs/docs/event-producer-consumer.i18n.yaml +2 -2
- package/references/official-docs/docs/event-producer-consumer.md +55 -46
- package/references/official-docs/docs/event-producer-consumer.zh.md +55 -46
- package/references/official-docs/docs/glossary.i18n.yaml +2 -2
- package/references/official-docs/docs/glossary.md +1 -1
- package/references/official-docs/docs/glossary.zh.md +1 -1
- package/references/official-docs/docs/graph-atlas.i18n.yaml +2 -2
- package/references/official-docs/docs/graph-atlas.md +0 -2
- package/references/official-docs/docs/graph-atlas.zh.md +7 -9
- package/references/official-docs/docs/i18n/README.i18n.yaml +2 -2
- package/references/official-docs/docs/i18n/README.md +7 -7
- package/references/official-docs/docs/i18n/README.zh.md +11 -9
- package/references/official-docs/docs/i18n/style-samples.md +3 -3
- package/references/official-docs/docs/i18n/translation-prompt.md +3 -3
- package/references/official-docs/docs/i18n/translation-rules.i18n.yaml +2 -2
- package/references/official-docs/docs/i18n/translation-rules.md +2 -2
- package/references/official-docs/docs/i18n/translation-rules.zh.md +3 -3
- package/references/official-docs/docs/module-graph.i18n.yaml +2 -2
- package/references/official-docs/docs/module-graph.md +666 -747
- package/references/official-docs/docs/module-graph.zh.md +668 -749
- package/references/official-docs/docs/persistence-catalog.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-catalog.md +172 -40
- package/references/official-docs/docs/persistence-catalog.zh.md +180 -48
- package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml +2 -2
- package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.md +2 -2
- package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.zh.md +3 -3
- package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml +2 -2
- package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +2 -2
- package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +2 -2
- package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml +2 -2
- package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.md +2 -2
- package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +2 -2
- package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml +2 -2
- package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +1 -1
- package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +2 -2
- package/references/official-docs/docs/postmortem/README.i18n.yaml +1 -1
- package/references/official-docs/docs/postmortem/README.zh.md +5 -5
- package/references/official-docs/docs/rescope.i18n.yaml +2 -2
- package/references/official-docs/docs/rescope.md +2 -2
- package/references/official-docs/docs/rescope.zh.md +3 -3
- package/references/official-docs/docs/subsystems/README.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/README.md +8 -2
- package/references/official-docs/docs/subsystems/README.zh.md +53 -47
- package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +6 -0
- package/references/official-docs/docs/subsystems/agent-team.md +206 -0
- package/references/official-docs/docs/subsystems/agent-team.zh.md +206 -0
- package/references/official-docs/docs/subsystems/approval.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/approval.md +12 -12
- package/references/official-docs/docs/subsystems/approval.zh.md +13 -13
- package/references/official-docs/docs/subsystems/attachment.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/attachment.md +90 -7
- package/references/official-docs/docs/subsystems/attachment.zh.md +90 -7
- package/references/official-docs/docs/subsystems/client-modules.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/client-modules.md +69 -19
- package/references/official-docs/docs/subsystems/client-modules.zh.md +69 -19
- package/references/official-docs/docs/subsystems/code-runtime.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/code-runtime.md +5 -5
- package/references/official-docs/docs/subsystems/code-runtime.zh.md +6 -6
- package/references/official-docs/docs/subsystems/commands.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/commands.md +29 -6
- package/references/official-docs/docs/subsystems/commands.zh.md +30 -7
- package/references/official-docs/docs/subsystems/compaction.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/compaction.md +5 -5
- package/references/official-docs/docs/subsystems/compaction.zh.md +11 -11
- package/references/official-docs/docs/subsystems/conversation.i18n.yaml +6 -0
- package/references/official-docs/docs/{cookbook/adding-a-conversation-node.md → subsystems/conversation.md} +49 -24
- package/references/official-docs/docs/{cookbook/adding-a-conversation-node.zh.md → subsystems/conversation.zh.md} +49 -24
- package/references/official-docs/docs/subsystems/core.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/core.md +110 -33
- package/references/official-docs/docs/subsystems/core.zh.md +141 -62
- package/references/official-docs/docs/subsystems/credentials.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/credentials.md +207 -11
- package/references/official-docs/docs/subsystems/credentials.zh.md +207 -11
- package/references/official-docs/docs/subsystems/extensions.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/extensions.md +27 -9
- package/references/official-docs/docs/subsystems/extensions.zh.md +30 -12
- package/references/official-docs/docs/subsystems/feedback.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/feedback.md +4 -4
- package/references/official-docs/docs/subsystems/feedback.zh.md +4 -4
- package/references/official-docs/docs/subsystems/filesystem.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/filesystem.md +17 -7
- package/references/official-docs/docs/subsystems/filesystem.zh.md +19 -9
- package/references/official-docs/docs/subsystems/goal.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/goal.md +4 -4
- package/references/official-docs/docs/subsystems/goal.zh.md +8 -8
- package/references/official-docs/docs/subsystems/invariants.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/invariants.md +2 -2
- package/references/official-docs/docs/subsystems/invariants.zh.md +5 -5
- package/references/official-docs/docs/subsystems/jobs.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/jobs.md +3 -3
- package/references/official-docs/docs/subsystems/jobs.zh.md +6 -6
- package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/llm-streaming.md +193 -22
- package/references/official-docs/docs/subsystems/llm-streaming.zh.md +199 -28
- package/references/official-docs/docs/subsystems/lsp.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/lsp.md +2 -2
- package/references/official-docs/docs/subsystems/lsp.zh.md +3 -3
- package/references/official-docs/docs/subsystems/permission-presets.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/permission-presets.md +8 -8
- package/references/official-docs/docs/subsystems/permission-presets.zh.md +8 -8
- package/references/official-docs/docs/subsystems/persistence.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/persistence.md +35 -17
- package/references/official-docs/docs/subsystems/persistence.zh.md +38 -20
- package/references/official-docs/docs/subsystems/plan.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/plan.md +4 -4
- package/references/official-docs/docs/subsystems/plan.zh.md +10 -10
- package/references/official-docs/docs/subsystems/sandbox.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/sandbox.md +5 -3
- package/references/official-docs/docs/subsystems/sandbox.zh.md +8 -6
- package/references/official-docs/docs/subsystems/schedule.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/schedule.md +9 -3
- package/references/official-docs/docs/subsystems/schedule.zh.md +11 -5
- package/references/official-docs/docs/subsystems/scope.i18n.yaml +1 -1
- package/references/official-docs/docs/subsystems/scope.zh.md +1 -1
- package/references/official-docs/docs/subsystems/session-projection.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-projection.md +136 -67
- package/references/official-docs/docs/subsystems/session-projection.zh.md +136 -67
- package/references/official-docs/docs/subsystems/session-query.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-query.md +11 -3
- package/references/official-docs/docs/subsystems/session-query.zh.md +12 -4
- package/references/official-docs/docs/subsystems/session-reference.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-reference.md +94 -7
- package/references/official-docs/docs/subsystems/session-reference.zh.md +95 -8
- package/references/official-docs/docs/subsystems/session-telemetry.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-telemetry.md +5 -6
- package/references/official-docs/docs/subsystems/session-telemetry.zh.md +9 -10
- package/references/official-docs/docs/subsystems/session-title.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-title.md +3 -3
- package/references/official-docs/docs/subsystems/session-title.zh.md +5 -5
- package/references/official-docs/docs/subsystems/session.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session.md +284 -39
- package/references/official-docs/docs/subsystems/session.zh.md +301 -54
- package/references/official-docs/docs/subsystems/settings.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/settings.md +105 -10
- package/references/official-docs/docs/subsystems/settings.zh.md +105 -10
- package/references/official-docs/docs/subsystems/shell.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/shell.md +3 -3
- package/references/official-docs/docs/subsystems/shell.zh.md +11 -11
- package/references/official-docs/docs/subsystems/skills.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/skills.md +26 -3
- package/references/official-docs/docs/subsystems/skills.zh.md +29 -6
- package/references/official-docs/docs/subsystems/slots.i18n.yaml +6 -0
- package/references/official-docs/docs/subsystems/slots.md +174 -0
- package/references/official-docs/docs/subsystems/slots.zh.md +174 -0
- package/references/official-docs/docs/subsystems/spill.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/spill.md +4 -4
- package/references/official-docs/docs/subsystems/spill.zh.md +6 -6
- package/references/official-docs/docs/subsystems/storage.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/storage.md +13 -5
- package/references/official-docs/docs/subsystems/storage.zh.md +16 -8
- package/references/official-docs/docs/subsystems/subagent.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/subagent.md +120 -32
- package/references/official-docs/docs/subsystems/subagent.zh.md +131 -41
- package/references/official-docs/docs/subsystems/subprocess.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/subprocess.md +3 -3
- package/references/official-docs/docs/subsystems/subprocess.zh.md +5 -5
- package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/system-prompt.md +21 -8
- package/references/official-docs/docs/subsystems/system-prompt.zh.md +23 -10
- package/references/official-docs/docs/subsystems/terminal.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/terminal.md +2 -2
- package/references/official-docs/docs/subsystems/terminal.zh.md +4 -4
- package/references/official-docs/docs/subsystems/todo.i18n.yaml +6 -0
- package/references/official-docs/docs/subsystems/todo.md +32 -0
- package/references/official-docs/docs/subsystems/todo.zh.md +32 -0
- package/references/official-docs/docs/subsystems/token-meter.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/token-meter.md +27 -12
- package/references/official-docs/docs/subsystems/token-meter.zh.md +28 -13
- package/references/official-docs/docs/subsystems/tools.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/tools.md +46 -46
- package/references/official-docs/docs/subsystems/tools.zh.md +54 -54
- package/references/official-docs/docs/subsystems/typert.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/typert.md +65 -58
- package/references/official-docs/docs/subsystems/typert.zh.md +67 -60
- package/references/official-docs/docs/subsystems/user-questions.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/user-questions.md +35 -35
- package/references/official-docs/docs/subsystems/user-questions.zh.md +35 -35
- package/references/official-docs/docs/subsystems/web-client.i18n.yaml +6 -0
- package/references/official-docs/docs/subsystems/web-client.md +95 -0
- package/references/official-docs/docs/subsystems/web-client.zh.md +95 -0
- package/references/official-docs/docs/subsystems/web-server.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/web-server.md +55 -9
- package/references/official-docs/docs/subsystems/web-server.zh.md +56 -10
- package/references/official-docs/docs/subsystems/web.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/web.md +14 -7
- package/references/official-docs/docs/subsystems/web.zh.md +16 -9
- package/references/official-docs/docs/subsystems/webhook.i18n.yaml +6 -0
- package/references/official-docs/docs/subsystems/webhook.md +70 -0
- package/references/official-docs/docs/subsystems/webhook.zh.md +70 -0
- package/references/official-docs/docs/subsystems/workflow.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/workflow.md +8 -8
- package/references/official-docs/docs/subsystems/workflow.zh.md +13 -13
- package/references/official-docs/docs/subsystems/workspace.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/workspace.md +98 -5
- package/references/official-docs/docs/subsystems/workspace.zh.md +102 -9
- package/references/official-docs/docs/testing.i18n.yaml +2 -2
- package/references/official-docs/docs/testing.md +15 -10
- package/references/official-docs/docs/testing.zh.md +15 -10
- package/references/official-docs/docs/tool-catalog.i18n.yaml +2 -2
- package/references/official-docs/docs/tool-catalog.md +433 -27
- package/references/official-docs/docs/tool-catalog.zh.md +438 -29
- package/references/official-docs/docs/tool-execution-pipeline.i18n.yaml +2 -2
- package/references/official-docs/docs/tool-execution-pipeline.md +1 -1
- package/references/official-docs/docs/tool-execution-pipeline.zh.md +1 -1
- package/references/official-docs/docs/user/develop/basic/config.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/basic/config.md +1 -1
- package/references/official-docs/docs/user/develop/basic/config.zh.md +4 -4
- package/references/official-docs/docs/user/develop/basic/index.i18n.yaml +1 -1
- package/references/official-docs/docs/user/develop/basic/index.zh.md +5 -5
- package/references/official-docs/docs/user/develop/basic/publish.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/basic/publish.md +3 -3
- package/references/official-docs/docs/user/develop/basic/publish.zh.md +7 -7
- package/references/official-docs/docs/user/develop/basic/tool.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/basic/tool.md +3 -3
- package/references/official-docs/docs/user/develop/basic/tool.zh.md +4 -4
- package/references/official-docs/docs/user/develop/framework/events.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/framework/events.md +2 -2
- package/references/official-docs/docs/user/develop/framework/events.zh.md +3 -3
- package/references/official-docs/docs/user/develop/framework/index.i18n.yaml +1 -1
- package/references/official-docs/docs/user/develop/framework/index.zh.md +3 -3
- package/references/official-docs/docs/user/develop/framework/service.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/framework/service.md +1 -1
- package/references/official-docs/docs/user/develop/framework/service.zh.md +3 -3
- package/references/official-docs/docs/user/develop/practice/dynamic-cordis.i18n.yaml +6 -0
- package/references/official-docs/docs/user/develop/practice/dynamic-cordis.md +15 -0
- package/references/official-docs/docs/user/develop/practice/dynamic-cordis.zh.md +15 -0
- package/references/official-docs/docs/user/develop/practice/index.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/practice/index.md +1 -1
- package/references/official-docs/docs/user/develop/practice/index.zh.md +3 -3
- package/references/official-docs/docs/user/develop/practice/llm-adapter.i18n.yaml +2 -2
- package/references/official-docs/docs/user/develop/practice/llm-adapter.md +4 -3
- package/references/official-docs/docs/user/develop/practice/llm-adapter.zh.md +4 -3
- package/references/official-docs/docs/user/guide/github-review.i18n.yaml +6 -0
- package/references/official-docs/docs/user/guide/github-review.md +102 -0
- package/references/official-docs/docs/user/guide/github-review.zh.md +102 -0
- package/references/official-docs/docs/user/guide/index.i18n.yaml +2 -2
- package/references/official-docs/docs/user/guide/index.md +2 -2
- package/references/official-docs/docs/user/guide/index.zh.md +8 -8
- package/references/official-docs/docs/user/guide/mcp-memory.i18n.yaml +6 -0
- package/references/official-docs/docs/user/guide/mcp-memory.md +101 -0
- package/references/official-docs/docs/user/guide/mcp-memory.zh.md +101 -0
- package/references/official-docs/docs/user/guide/providers.i18n.yaml +2 -2
- package/references/official-docs/docs/user/guide/providers.md +40 -1
- package/references/official-docs/docs/user/guide/providers.zh.md +41 -2
- package/references/official-docs/docs/user/guide/python-sdk.i18n.yaml +2 -2
- package/references/official-docs/docs/user/guide/python-sdk.md +80 -34
- package/references/official-docs/docs/user/guide/python-sdk.zh.md +87 -41
- package/references/official-docs/docs/user/guide/schedule.i18n.yaml +6 -0
- package/references/official-docs/docs/user/guide/schedule.md +21 -0
- package/references/official-docs/docs/user/guide/schedule.zh.md +21 -0
- package/references/official-docs/docs/web-styling.i18n.yaml +1 -1
- package/references/official-docs/docs/web-styling.zh.md +2 -2
- package/references/official-docs/packages/AGENTS.md +3 -2
- package/references/official-docs/packages/README.md +104 -59
- package/references/official-docs/vendor/README.md +1 -0
- package/references/official-docs/website-docs.ts +52 -11
- package/references/sources.md +2 -2
- package/references/website-pages.md +3 -3
- package/scripts/download-sources.ps1 +1 -1
- package/scripts/sync-official-docs.ps1 +19 -11
- package/scripts/verify-kit.ps1 +0 -4
- package/templates/js/README.es.md +1 -1
- package/templates/js/README.hi.md +1 -1
- package/templates/js/README.md +1 -1
- package/templates/js/README.pt.md +1 -1
- package/templates/js/README.zh.md +1 -1
- package/templates/js/package.json +4 -4
- package/templates/ts/README.es.md +1 -1
- package/templates/ts/README.hi.md +1 -1
- package/templates/ts/README.md +1 -1
- package/templates/ts/README.pt.md +1 -1
- package/templates/ts/README.zh.md +1 -1
- package/templates/ts/package.json +4 -4
- package/references/official-docs/examples/AGENTS.md +0 -20
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
[English](persistence-catalog.md) | 中文
|
|
7
7
|
|
|
8
|
-
会话持久事件日志中可能出现的所有事件类型:完整持久化的 `SessionEvent` 信封,以及可通过合并扩展的 `SessionEventMap` 中的每个成员,包括 `@deepseek-ai/dsh-session` 所属的词汇和本仓库中每个插件对 `@deepseek-ai/dsh-session/types` 的声明合并,并附有源 JSDoc、完整 payload 声明、surface 标记和声明位置。本文档是 [session.md](subsystems/session.md)(surface 排序与 `deriveMessages()` 投影)、[persistence.md](subsystems/persistence.md)(如何让日志持久化)和 [session.md](subsystems/session.md#cordis-surface) 中生成区域(实时总线接线;日志事件**不是** cordis 事件,它通过唯一的 `session/event` emit 到达监听器)的补充。
|
|
8
|
+
会话持久事件日志中可能出现的所有事件类型:完整持久化的 `SessionEvent` 信封,以及可通过合并扩展的 `SessionEventMap` 中的每个成员,包括 `@deepseek-ai/dsh-session` 所属的词汇和本仓库中每个插件对 `@deepseek-ai/dsh-session/types` 的声明合并,并附有源 JSDoc、完整 payload 声明、surface 标记和声明位置。本文档是 [session.md](subsystems/session.zh.md)(surface 排序与 `deriveMessages()` 投影)、[persistence.md](subsystems/persistence.zh.md)(如何让日志持久化)和 [session.md](subsystems/session.zh.md#cordis-surface) 中生成区域(实时总线接线;日志事件**不是** cordis 事件,它通过唯一的 `session/event` emit 到达监听器)的补充。
|
|
9
9
|
|
|
10
10
|
英文源文件根据源码生成(`scripts/gen-persistence-catalog.ts`),并由 `pnpm run verify-persistence-catalog`(`doc-sync`(文档同步门禁)的一部分)验证新鲜度;本中文文件作为经评审对侧通过双语配对维护。声明块保留源码声明和嵌套属性的 JSDoc,只移除其所在接口/模块带来的缩进,并使用 `ts persistence-catalog` 围栏(doc-typecheck 会跳过这些围栏,因为声明引用了其所属模块中的类型)。payload 中的类型名称会链接到记录该类型的页面。参见 [persistence-log-catalog Agent Note](../.agents/notes/archived/process/2026-07-04-persistence-log-catalog.md)。
|
|
11
11
|
|
|
12
|
-
以下信封声明组合了每个事件的 `type`、单调递增的 `seq`、以 epoch 毫秒表示的 `time`、`data`,以及条件字段 `surfaceOp`/`sourceEventSeqs`。**surface** 表示 `SurfaceEventType` 成员:它会生成一条 LLM(大语言模型)消息,并声明该事件如何加入 surface 列表。**log-only** 表示其他所有事件:这类记录可持久化、可回放,但不参与派生历史。每个 payload 均可进行 JSON 序列化(在 `Session.append` 处强制执行),整个格式固定为 `SESSION_FORMAT_VERSION = 0`:这是预发布格式,不暗示任何兼容性(参见[版本立场](subsystems/persistence.md))。范围仅限本仓库中的包;下游插件可以继续合并其他事件类型,而这些类型按设计不属于本目录。
|
|
12
|
+
以下信封声明组合了每个事件的 `type`、单调递增的 `seq`、以 epoch 毫秒表示的 `time`、`data`、可选的未知类型跳过标记 `ignorable`,以及条件字段 `surfaceOp`/`sourceEventSeqs`。**surface** 表示 `SurfaceEventType` 成员:它会生成一条 LLM(大语言模型)消息,并声明该事件如何加入 surface 列表。**log-only** 表示其他所有事件:这类记录可持久化、可回放,但不参与派生历史。每个 payload 均可进行 JSON 序列化(在 `Session.append` 处强制执行),整个格式固定为 `SESSION_FORMAT_VERSION = 0`:这是预发布格式,不暗示任何兼容性(参见[版本立场](subsystems/persistence.zh.md))。范围仅限本仓库中的包;下游插件可以继续合并其他事件类型,而这些类型按设计不属于本目录。
|
|
13
13
|
|
|
14
14
|
## 事件信封
|
|
15
15
|
|
|
@@ -65,6 +65,17 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
65
65
|
/** Unix epoch milliseconds. */
|
|
66
66
|
time: number
|
|
67
67
|
data: SessionEventMap[K]
|
|
68
|
+
/**
|
|
69
|
+
* Marks an event a reader may safely skip when it does not recognize
|
|
70
|
+
* `type`. Absent means required: a reader meeting an unrecognized type
|
|
71
|
+
* without this marker MUST refuse to reconstruct the session instead of
|
|
72
|
+
* silently dropping the event, because an unrecognized required event may
|
|
73
|
+
* change how the rest of the log is interpreted. A writer sets `true` only
|
|
74
|
+
* on purely informational records whose loss cannot affect reconstruction;
|
|
75
|
+
* defaulting to required means a forgotten marker over-refuses (an
|
|
76
|
+
* inconvenience) rather than silently resuming a gutted session.
|
|
77
|
+
*/
|
|
78
|
+
ignorable?: true
|
|
68
79
|
} & (K extends SurfaceEventType ? {
|
|
69
80
|
/**
|
|
70
81
|
* Seq numbers of earlier events that this event cites as sources
|
|
@@ -81,7 +92,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
81
92
|
}[T]
|
|
82
93
|
```
|
|
83
94
|
|
|
84
|
-
来源:[`packages/core/session/src/types.ts:
|
|
95
|
+
来源:[`packages/core/session/src/types.ts:323`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:330`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:359`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:391`](../packages/core/session/src/types.ts)
|
|
85
96
|
|
|
86
97
|
## 事件
|
|
87
98
|
|
|
@@ -106,7 +117,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
106
117
|
}
|
|
107
118
|
```
|
|
108
119
|
|
|
109
|
-
来源:[`packages/core/agent/src/types.ts:
|
|
120
|
+
来源:[`packages/core/agent/src/types.ts:58`](../packages/core/agent/src/types.ts)
|
|
110
121
|
|
|
111
122
|
### `agent-preset/*`
|
|
112
123
|
|
|
@@ -124,7 +135,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
124
135
|
'agent-preset/selected': { agentPreset: string }
|
|
125
136
|
```
|
|
126
137
|
|
|
127
|
-
来源:[`packages/preset/agent-presets/src/session.ts:
|
|
138
|
+
来源:[`packages/preset/agent-presets/src/session.ts:28`](../packages/preset/agent-presets/src/session.ts)
|
|
128
139
|
|
|
129
140
|
### `approval/*`
|
|
130
141
|
|
|
@@ -144,14 +155,14 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
144
155
|
'approval/asked': {
|
|
145
156
|
id: ApprovalRequestId
|
|
146
157
|
toolName: string
|
|
147
|
-
callId?:
|
|
158
|
+
callId?: ToolCallId
|
|
148
159
|
reason?: string
|
|
149
160
|
}
|
|
150
161
|
```
|
|
151
162
|
|
|
152
|
-
类型:[
|
|
163
|
+
类型:[ToolCallId](subsystems/core.zh.md)
|
|
153
164
|
|
|
154
|
-
来源:[`packages/interaction/user-approval/src/
|
|
165
|
+
来源:[`packages/interaction/user-approval/src/types.ts:44`](../packages/interaction/user-approval/src/types.ts)
|
|
155
166
|
|
|
156
167
|
<a id="approvaldecided--log-only"></a>
|
|
157
168
|
|
|
@@ -169,7 +180,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
169
180
|
}
|
|
170
181
|
```
|
|
171
182
|
|
|
172
|
-
来源:[`packages/interaction/user-approval/src/
|
|
183
|
+
来源:[`packages/interaction/user-approval/src/types.ts:55`](../packages/interaction/user-approval/src/types.ts)
|
|
173
184
|
|
|
174
185
|
<a id="approvalpolicy--log-only"></a>
|
|
175
186
|
|
|
@@ -191,7 +202,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
191
202
|
}
|
|
192
203
|
```
|
|
193
204
|
|
|
194
|
-
来源:[`packages/interaction/user-approval/src/index.ts:
|
|
205
|
+
来源:[`packages/interaction/user-approval/src/index.ts:32`](../packages/interaction/user-approval/src/index.ts)
|
|
195
206
|
|
|
196
207
|
### `assistant/*`
|
|
197
208
|
|
|
@@ -204,9 +215,9 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
204
215
|
'assistant/chunk': { turn: number; step: number; chunk: StreamChunk }
|
|
205
216
|
```
|
|
206
217
|
|
|
207
|
-
类型:[StreamChunk](subsystems/llm-streaming.md)
|
|
218
|
+
类型:[StreamChunk](subsystems/llm-streaming.zh.md)
|
|
208
219
|
|
|
209
|
-
来源:[`packages/core/session/src/types.ts:
|
|
220
|
+
来源:[`packages/core/session/src/types.ts:246`](../packages/core/session/src/types.ts)
|
|
210
221
|
|
|
211
222
|
<a id="assistantmessage--surface"></a>
|
|
212
223
|
|
|
@@ -217,14 +228,18 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
217
228
|
* Assembled assistant message for one step (derived history uses this).
|
|
218
229
|
* Carries the step's `usage` when the adapter reported token accounting, so
|
|
219
230
|
* the model output and its accounting travel together (there is no separate
|
|
220
|
-
* usage record). `usage` is absent when the adapter reported none.
|
|
231
|
+
* usage record). `usage` is absent when the adapter reported none. A turn
|
|
232
|
+
* cancelled mid-stream finalizes its delivered text/reasoning prefix as this
|
|
233
|
+
* event with `interrupted: true`; undispatched tool calls are absent. The
|
|
234
|
+
* marker distinguishes that prefix without re-deriving interruption from turn
|
|
235
|
+
* boundaries. An aborted turn with no such event streamed no visible content.
|
|
221
236
|
*/
|
|
222
|
-
'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage }
|
|
237
|
+
'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true }
|
|
223
238
|
```
|
|
224
239
|
|
|
225
|
-
类型:[TokenUsage](subsystems/llm-streaming.md)
|
|
240
|
+
类型:[TokenUsage](subsystems/llm-streaming.zh.md)
|
|
226
241
|
|
|
227
|
-
来源:[`packages/core/session/src/types.ts:
|
|
242
|
+
来源:[`packages/core/session/src/types.ts:257`](../packages/core/session/src/types.ts)
|
|
228
243
|
|
|
229
244
|
### `command/*`
|
|
230
245
|
|
|
@@ -247,7 +262,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
247
262
|
}
|
|
248
263
|
```
|
|
249
264
|
|
|
250
|
-
来源:[`packages/interaction/commands/src/types.ts:
|
|
265
|
+
来源:[`packages/interaction/commands/src/types.ts:103`](../packages/interaction/commands/src/types.ts)
|
|
251
266
|
|
|
252
267
|
<a id="commandrun--log-only"></a>
|
|
253
268
|
|
|
@@ -267,7 +282,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
267
282
|
'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource }
|
|
268
283
|
```
|
|
269
284
|
|
|
270
|
-
来源:[`packages/interaction/commands/src/types.ts:
|
|
285
|
+
来源:[`packages/interaction/commands/src/types.ts:96`](../packages/interaction/commands/src/types.ts)
|
|
271
286
|
|
|
272
287
|
### `compaction/*`
|
|
273
288
|
|
|
@@ -376,7 +391,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
376
391
|
)
|
|
377
392
|
```
|
|
378
393
|
|
|
379
|
-
类型:[ContentBlock](subsystems/core.md) · [TokenUsage](subsystems/llm-streaming.md)
|
|
394
|
+
类型:[ContentBlock](subsystems/core.zh.md) · [TokenUsage](subsystems/llm-streaming.zh.md)
|
|
380
395
|
|
|
381
396
|
来源:[`packages/compaction/compaction/src/types.ts:33`](../packages/compaction/compaction/src/types.ts)
|
|
382
397
|
|
|
@@ -485,6 +500,22 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
485
500
|
|
|
486
501
|
来源:[`packages/llm/llm-retry/src/types.ts:11`](../packages/llm/llm-retry/src/types.ts)
|
|
487
502
|
|
|
503
|
+
### `model/*`
|
|
504
|
+
|
|
505
|
+
<a id="modelselection--log-only"></a>
|
|
506
|
+
|
|
507
|
+
#### `model/selection` — log-only
|
|
508
|
+
|
|
509
|
+
```ts persistence-catalog
|
|
510
|
+
/**
|
|
511
|
+
* Complete validated model selection requested for subsequent prompt
|
|
512
|
+
* assembly. Log-only: it never enters derived model history.
|
|
513
|
+
*/
|
|
514
|
+
'model/selection': ModelSelection
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
来源:[`packages/api/session-controller/src/types.ts:41`](../packages/api/session-controller/src/types.ts)
|
|
518
|
+
|
|
488
519
|
### `permission/*`
|
|
489
520
|
|
|
490
521
|
<a id="permissionpreset--log-only"></a>
|
|
@@ -495,13 +526,13 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
495
526
|
/**
|
|
496
527
|
* Records the selected preset as durable, log-only user intent. The knob
|
|
497
528
|
* events follow in the same turn and control execution; this event stays
|
|
498
|
-
* out of the model transcript and lets
|
|
529
|
+
* out of the model transcript and lets the permission projection unit
|
|
499
530
|
* preserve a selection when bundles match.
|
|
500
531
|
*/
|
|
501
532
|
'permission/preset': { preset: string }
|
|
502
533
|
```
|
|
503
534
|
|
|
504
|
-
来源:[`packages/interaction/permission-presets/src/index.ts:
|
|
535
|
+
来源:[`packages/interaction/permission-presets/src/index.ts:53`](../packages/interaction/permission-presets/src/index.ts)
|
|
505
536
|
|
|
506
537
|
### `plan/*`
|
|
507
538
|
|
|
@@ -513,12 +544,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
513
544
|
/**
|
|
514
545
|
* Whether plan mode is in force from this point on: log-only, non-surface,
|
|
515
546
|
* whole-value replace. The last `plan/mode` wins; a log with none folds to
|
|
516
|
-
* inactive through
|
|
547
|
+
* inactive through the projection unit's fold.
|
|
517
548
|
*/
|
|
518
549
|
'plan/mode': { active: boolean }
|
|
519
550
|
```
|
|
520
551
|
|
|
521
|
-
来源:[`packages/plan/plan-mode/src/index.ts:
|
|
552
|
+
来源:[`packages/plan/plan-mode/src/index.ts:46`](../packages/plan/plan-mode/src/index.ts)
|
|
522
553
|
|
|
523
554
|
### `request/*`
|
|
524
555
|
|
|
@@ -534,7 +565,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
534
565
|
'request/context': RequestContext
|
|
535
566
|
```
|
|
536
567
|
|
|
537
|
-
来源:[`packages/core/session/src/types.ts:
|
|
568
|
+
来源:[`packages/core/session/src/types.ts:296`](../packages/core/session/src/types.ts)
|
|
538
569
|
|
|
539
570
|
<a id="requestheader--log-only"></a>
|
|
540
571
|
|
|
@@ -545,10 +576,15 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
545
576
|
* Full header for the next request, appended inside its step before dispatch.
|
|
546
577
|
* It is log-only; the latest snapshot reconstructs the request header.
|
|
547
578
|
*/
|
|
548
|
-
'request/header': {
|
|
579
|
+
'request/header': {
|
|
580
|
+
header: EpochHeader
|
|
581
|
+
reason: RequestHeaderReason
|
|
582
|
+
/** A changed header also begins a distinct model-message series. */
|
|
583
|
+
startsSeries?: true
|
|
584
|
+
}
|
|
549
585
|
```
|
|
550
586
|
|
|
551
|
-
来源:[`packages/core/session/src/types.ts:
|
|
587
|
+
来源:[`packages/core/session/src/types.ts:286`](../packages/core/session/src/types.ts)
|
|
552
588
|
|
|
553
589
|
### `sandbox/*`
|
|
554
590
|
|
|
@@ -561,7 +597,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
561
597
|
* The session's sandbox mode was switched — log-only (like `approval/*`;
|
|
562
598
|
* NOT a surface event, carries no `surfaceOp`): durable and replayable,
|
|
563
599
|
* never in the model transcript. The LAST such event is the session's
|
|
564
|
-
* override (
|
|
600
|
+
* override (folded by the sandboxMode projection unit). `source: 'delegation'` marks
|
|
565
601
|
* an override seeded into a child; an absent source is a runtime switch.
|
|
566
602
|
*/
|
|
567
603
|
'sandbox/mode': {
|
|
@@ -587,7 +623,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
587
623
|
'schedule/change': ScheduleChange
|
|
588
624
|
```
|
|
589
625
|
|
|
590
|
-
类型:[ScheduleChange](subsystems/schedule.md)
|
|
626
|
+
类型:[ScheduleChange](subsystems/schedule.zh.md)
|
|
591
627
|
|
|
592
628
|
来源:[`packages/schedule/schedule/src/types.ts:219`](../packages/schedule/schedule/src/types.ts)
|
|
593
629
|
|
|
@@ -623,7 +659,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
623
659
|
'session/end-seed': Record<string, never>
|
|
624
660
|
```
|
|
625
661
|
|
|
626
|
-
来源:[`packages/core/session/src/types.ts:
|
|
662
|
+
来源:[`packages/core/session/src/types.ts:319`](../packages/core/session/src/types.ts)
|
|
627
663
|
|
|
628
664
|
<a id="sessiontitle--log-only"></a>
|
|
629
665
|
|
|
@@ -637,9 +673,9 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
637
673
|
'session/title': SessionTitleEventData
|
|
638
674
|
```
|
|
639
675
|
|
|
640
|
-
类型:[SessionTitleEventData](subsystems/session-title.md)
|
|
676
|
+
类型:[SessionTitleEventData](subsystems/session-title.zh.md)
|
|
641
677
|
|
|
642
|
-
来源:[`packages/session/session-title/src/index.ts:
|
|
678
|
+
来源:[`packages/session/session-title/src/index.ts:76`](../packages/session/session-title/src/index.ts)
|
|
643
679
|
|
|
644
680
|
<a id="sessiontitle-llm-request--log-only"></a>
|
|
645
681
|
|
|
@@ -650,9 +686,27 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
650
686
|
'session/title-llm-request': SessionTitleLlmRequestEventData
|
|
651
687
|
```
|
|
652
688
|
|
|
653
|
-
类型:[SessionTitleLlmRequestEventData](subsystems/session-title.md)
|
|
689
|
+
类型:[SessionTitleLlmRequestEventData](subsystems/session-title.zh.md)
|
|
690
|
+
|
|
691
|
+
来源:[`packages/session/session-title-llm/src/index.ts:44`](../packages/session/session-title-llm/src/index.ts)
|
|
692
|
+
|
|
693
|
+
### `session-log-deepseek/*`
|
|
694
|
+
|
|
695
|
+
<a id="session-log-deepseekdelivery-accepted--log-only"></a>
|
|
654
696
|
|
|
655
|
-
|
|
697
|
+
#### `session-log-deepseek/delivery-accepted` — log-only
|
|
698
|
+
|
|
699
|
+
```ts persistence-catalog
|
|
700
|
+
/** Records that the configured endpoint accepted one delivery through `throughSeq`. */
|
|
701
|
+
'session-log-deepseek/delivery-accepted': {
|
|
702
|
+
/** Session identity the accepted delivery carried; inherited fork markers retain the parent's id. */
|
|
703
|
+
sessionId: import('@deepseek-ai/dsh-session/types').SessionId
|
|
704
|
+
/** Last canonical event included in the accepted request. */
|
|
705
|
+
throughSeq: number
|
|
706
|
+
}
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
来源:[`packages/session/session-log-deepseek/src/types.ts:26`](../packages/session/session-log-deepseek/src/types.ts)
|
|
656
710
|
|
|
657
711
|
### `step/*`
|
|
658
712
|
|
|
@@ -665,7 +719,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
665
719
|
'step/end': { turn: number; step: number }
|
|
666
720
|
```
|
|
667
721
|
|
|
668
|
-
来源:[`packages/core/session/src/types.ts:
|
|
722
|
+
来源:[`packages/core/session/src/types.ts:236`](../packages/core/session/src/types.ts)
|
|
669
723
|
|
|
670
724
|
<a id="stepstart--log-only"></a>
|
|
671
725
|
|
|
@@ -676,7 +730,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
676
730
|
'step/start': { turn: number; step: number }
|
|
677
731
|
```
|
|
678
732
|
|
|
679
|
-
来源:[`packages/core/session/src/types.ts:
|
|
733
|
+
来源:[`packages/core/session/src/types.ts:234`](../packages/core/session/src/types.ts)
|
|
680
734
|
|
|
681
735
|
### `subagent/*`
|
|
682
736
|
|
|
@@ -695,7 +749,85 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
695
749
|
'subagent/descriptor': SubagentDescriptorData
|
|
696
750
|
```
|
|
697
751
|
|
|
698
|
-
来源:[`packages/subagent/subagent/src/descriptor.ts:
|
|
752
|
+
来源:[`packages/subagent/subagent/src/descriptor.ts:38`](../packages/subagent/subagent/src/descriptor.ts)
|
|
753
|
+
|
|
754
|
+
<a id="subagentmodel-selection-policy--log-only"></a>
|
|
755
|
+
|
|
756
|
+
#### `subagent/model-selection-policy` — 仅日志
|
|
757
|
+
|
|
758
|
+
```ts persistence-catalog
|
|
759
|
+
/**
|
|
760
|
+
* Records that this session's delegation tool exposes child provider,
|
|
761
|
+
* model, and reasoning-effort selection. Appended before the first model
|
|
762
|
+
* request; absence means the fixed-route definition. Log-only: it carries
|
|
763
|
+
* no `surfaceOp` and never enters model history.
|
|
764
|
+
*/
|
|
765
|
+
'subagent/model-selection-policy': {
|
|
766
|
+
/** Exact routes this Session may select explicitly for a child. */
|
|
767
|
+
allowedModels: AllowedModelRoute[]
|
|
768
|
+
}
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
来源:[`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts)
|
|
772
|
+
|
|
773
|
+
### `team/*`
|
|
774
|
+
|
|
775
|
+
<a id="teammember--log-only"></a>
|
|
776
|
+
|
|
777
|
+
#### `team/member` — log-only
|
|
778
|
+
|
|
779
|
+
```ts persistence-catalog
|
|
780
|
+
/** Whole teammate lifecycle value, stored only in the Team Lead Session. */
|
|
781
|
+
'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot }
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMemberSnapshot](subsystems/agent-team.zh.md)
|
|
785
|
+
|
|
786
|
+
来源:[`packages/experimental/agent-team/src/types.ts:206`](../packages/experimental/agent-team/src/types.ts)
|
|
787
|
+
|
|
788
|
+
<a id="teammessagedelivered--log-only"></a>
|
|
789
|
+
|
|
790
|
+
#### `team/message/delivered` — log-only
|
|
791
|
+
|
|
792
|
+
```ts persistence-catalog
|
|
793
|
+
/** Durable acknowledgement that the target Session recorded the message. */
|
|
794
|
+
'team/message/delivered': {
|
|
795
|
+
version: 1
|
|
796
|
+
teamId: TeamId
|
|
797
|
+
messageId: TeamMessageId
|
|
798
|
+
targetId: SessionId
|
|
799
|
+
}
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageId](subsystems/agent-team.zh.md)
|
|
803
|
+
|
|
804
|
+
来源:[`packages/experimental/agent-team/src/types.ts:212`](../packages/experimental/agent-team/src/types.ts)
|
|
805
|
+
|
|
806
|
+
<a id="teammessagequeued--log-only"></a>
|
|
807
|
+
|
|
808
|
+
#### `team/message/queued` — log-only
|
|
809
|
+
|
|
810
|
+
```ts persistence-catalog
|
|
811
|
+
/** Durable mailbox enqueue, stored before delivery is attempted. */
|
|
812
|
+
'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot }
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageSnapshot](subsystems/agent-team.zh.md)
|
|
816
|
+
|
|
817
|
+
来源:[`packages/experimental/agent-team/src/types.ts:210`](../packages/experimental/agent-team/src/types.ts)
|
|
818
|
+
|
|
819
|
+
<a id="teamtask--log-only"></a>
|
|
820
|
+
|
|
821
|
+
#### `team/task` — log-only
|
|
822
|
+
|
|
823
|
+
```ts persistence-catalog
|
|
824
|
+
/** Whole shared-task value, stored only in the Team Lead Session. */
|
|
825
|
+
'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot }
|
|
826
|
+
```
|
|
827
|
+
|
|
828
|
+
类型:[TeamId](subsystems/agent-team.zh.md) · [TeamTaskSnapshot](subsystems/agent-team.zh.md)
|
|
829
|
+
|
|
830
|
+
来源:[`packages/experimental/agent-team/src/types.ts:208`](../packages/experimental/agent-team/src/types.ts)
|
|
699
831
|
|
|
700
832
|
### `todo/*`
|
|
701
833
|
|
|
@@ -708,9 +840,9 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
708
840
|
'todo/write': { todos: TodoItem[] }
|
|
709
841
|
```
|
|
710
842
|
|
|
711
|
-
类型:[TodoItem](subsystems/
|
|
843
|
+
类型:[TodoItem](subsystems/todo.zh.md)
|
|
712
844
|
|
|
713
|
-
来源:[`packages/
|
|
845
|
+
来源:[`packages/todo/tool-todo/src/types.ts:31`](../packages/todo/tool-todo/src/types.ts)
|
|
714
846
|
|
|
715
847
|
### `tool/*`
|
|
716
848
|
|
|
@@ -724,12 +856,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
724
856
|
* JSON string exactly as the model produced it (unparsed). `callId` pairs the
|
|
725
857
|
* call with its `tool/result`.
|
|
726
858
|
*/
|
|
727
|
-
'tool/call': { turn: number; step: number; callId:
|
|
859
|
+
'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string }
|
|
728
860
|
```
|
|
729
861
|
|
|
730
|
-
类型:[
|
|
862
|
+
类型:[ToolCallId](subsystems/core.zh.md)
|
|
731
863
|
|
|
732
|
-
来源:[`packages/core/session/src/types.ts:
|
|
864
|
+
来源:[`packages/core/session/src/types.ts:263`](../packages/core/session/src/types.ts)
|
|
733
865
|
|
|
734
866
|
<a id="toolcode-dispatch--log-only"></a>
|
|
735
867
|
|
|
@@ -751,7 +883,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
751
883
|
* before returning), so its execution-enclosure relation holds by
|
|
752
884
|
* construction.
|
|
753
885
|
*/
|
|
754
|
-
'tool/code-dispatch':
|
|
886
|
+
'tool/code-dispatch': PtcDispatchEventData
|
|
755
887
|
```
|
|
756
888
|
|
|
757
889
|
来源:[`packages/core/tools/src/types.ts:56`](../packages/core/tools/src/types.ts)
|
|
@@ -774,7 +906,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
774
906
|
* with `tool/code-dispatch` by `subCallId` (timing = the two events'
|
|
775
907
|
* `time` fields).
|
|
776
908
|
*/
|
|
777
|
-
'tool/code-dispatch-start':
|
|
909
|
+
'tool/code-dispatch-start': PtcDispatchStartEventData
|
|
778
910
|
```
|
|
779
911
|
|
|
780
912
|
来源:[`packages/core/tools/src/types.ts:40`](../packages/core/tools/src/types.ts)
|
|
@@ -804,7 +936,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
804
936
|
}
|
|
805
937
|
```
|
|
806
938
|
|
|
807
|
-
来源:[`packages/core/session/src/types.ts:
|
|
939
|
+
来源:[`packages/core/session/src/types.ts:275`](../packages/core/session/src/types.ts)
|
|
808
940
|
|
|
809
941
|
### `tool-workflow/*`
|
|
810
942
|
|
|
@@ -882,9 +1014,9 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
882
1014
|
'turn/end': { turn: number; reason: TurnEndReason }
|
|
883
1015
|
```
|
|
884
1016
|
|
|
885
|
-
类型:[TurnEndReason](subsystems/session.md)
|
|
1017
|
+
类型:[TurnEndReason](subsystems/session.zh.md)
|
|
886
1018
|
|
|
887
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1019
|
+
来源:[`packages/core/session/src/types.ts:232`](../packages/core/session/src/types.ts)
|
|
888
1020
|
|
|
889
1021
|
<a id="turnstart--log-only"></a>
|
|
890
1022
|
|
|
@@ -900,7 +1032,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
900
1032
|
'turn/start': { turn: number }
|
|
901
1033
|
```
|
|
902
1034
|
|
|
903
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1035
|
+
来源:[`packages/core/session/src/types.ts:223`](../packages/core/session/src/types.ts)
|
|
904
1036
|
|
|
905
1037
|
### `user/*`
|
|
906
1038
|
|
|
@@ -919,7 +1051,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
919
1051
|
'user/message': UserMessage
|
|
920
1052
|
```
|
|
921
1053
|
|
|
922
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1054
|
+
来源:[`packages/core/session/src/types.ts:244`](../packages/core/session/src/types.ts)
|
|
923
1055
|
|
|
924
1056
|
### `web/*`
|
|
925
1057
|
|
package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write docs/postmortem/0001-acp-default-export-drops-inject.md
|
|
5
|
-
0001-acp-default-export-drops-inject.md:
|
|
6
|
-
0001-acp-default-export-drops-inject.zh.md:
|
|
5
|
+
0001-acp-default-export-drops-inject.md: d5325b3f051669111ad7c097c395744553d57c6c
|
|
6
|
+
0001-acp-default-export-drops-inject.zh.md: 189c2418106dc44bde43ef7fd4d2f8ce62d1d672
|
|
@@ -10,7 +10,7 @@ Two integration mistakes broke ACP despite full unit coverage: a default export
|
|
|
10
10
|
|
|
11
11
|
## Summary
|
|
12
12
|
|
|
13
|
-
The ACP server (`
|
|
13
|
+
The ACP server (`dsh --profile acp`, `@deepseek-ai/dsh-acp`) crashed the instant a real editor (Zed) connected: the first `session/new` request returned `Internal error: cannot get property "agents" without inject`, and `session/load` returned the same for `sessionPersistence`. The bridge was completely non-functional in production despite 178 green unit tests and 100% line coverage. Two independent bugs were hiding behind the same error string, and the test suite missed both for the same reason: every test mounted the plugin through a path that did not exercise how it actually loads or how its services actually resolve.
|
|
14
14
|
|
|
15
15
|
## Impact
|
|
16
16
|
|
|
@@ -101,7 +101,7 @@ Both bugs share one root process gap: **no test exercised the plugin through its
|
|
|
101
101
|
|
|
102
102
|
- **Removed `export default apply`** (`packages/acp/acp/src/index.ts`) — the Bug #1 fix.
|
|
103
103
|
- **`AgentLoop.resume` reads `this.ctx.get('sessionPersistence')`** (`packages/core/agent-loop/src/index.ts`) — the Bug #2 fix, with a comment explaining the shadow-walk trap.
|
|
104
|
-
- **No-key `session/new` e2e over real stdio** (`
|
|
104
|
+
- **No-key `session/new` e2e over real stdio** (`apps/cli/tests/profiles/acp/tests/acp.e2e.ts`): boots the profile as a subprocess through the real Loader and asserts `session/new` resolves. This fails loudly on Bug #1 with no API key. Verified it fails when `export default apply` is restored.
|
|
105
105
|
- **`TSX_TSCONFIG_PATH` in the e2e spawn**: the subprocess runs from a temp cwd, where tsx cannot find the repo-root tsconfig `paths` map by searching upward — so dsh-* imports silently fell back to built `lib/`. Pointing tsx at the repo tsconfig makes resolution cwd-independent and ensures the test runs *source*, not a possibly-stale build.
|
|
106
106
|
- **[docs/testing.md](../testing.md) rule**: "test the real entry path", line coverage is not behavior coverage — codifies the lesson for every future plugin.
|
|
107
107
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
## 概述
|
|
12
12
|
|
|
13
|
-
ACP 服务器(`
|
|
13
|
+
ACP 服务器(`dsh --profile acp`、`@deepseek-ai/dsh-acp`)在真实编辑器(Zed)连接的瞬间崩溃:第一个 `session/new` 请求返回 `Internal error: cannot get property "agents" without inject`,`session/load` 对 `sessionPersistence` 返回同样的错误。尽管有 178 个绿色单元测试和 100% 行覆盖率,bridge 在生产环境中完全无法工作。两个独立的 bug 隐藏在同一个错误字符串背后,测试套件之所以两个都没捕获,原因也相同:所有测试都通过一条不会触及插件真实加载方式和服务真实解析方式的路径来挂载插件。
|
|
14
14
|
|
|
15
15
|
## 影响
|
|
16
16
|
|
|
@@ -101,9 +101,9 @@ if (!ctx.fiber.runtime) return ctx.reflect.get(prop, false) // ← direct glob
|
|
|
101
101
|
|
|
102
102
|
- **删除 `export default apply`**(`packages/acp/acp/src/index.ts`)——Bug #1 的修复。
|
|
103
103
|
- **`AgentLoop.resume` 使用 `this.ctx.get('sessionPersistence')`**(`packages/core/agent-loop/src/index.ts`)——Bug #2 的修复,附注释说明 shadow 遍历陷阱。
|
|
104
|
-
- **无需 key 的 `session/new` e2e,通过真实 stdio 运行**(`
|
|
104
|
+
- **无需 key 的 `session/new` e2e,通过真实 stdio 运行**(`apps/cli/tests/profiles/acp/tests/acp.e2e.ts`):以子进程方式通过真实 Loader 启动 profile,并断言 `session/new` 正常返回。无需 API key 即可明确暴露 Bug #1。已验证恢复 `export default apply` 时测试失败。
|
|
105
105
|
- **e2e spawn 中设置 `TSX_TSCONFIG_PATH`**:子进程从临时 cwd 运行,tsx 无法通过向上搜索找到仓库根的 tsconfig `paths` 映射——因此 dsh-* 的 import 静默回退到已构建的 `lib/`。将 tsx 指向仓库 tsconfig 使解析不依赖 cwd,确保测试运行的是*源码*而非可能陈旧的构建产物。
|
|
106
|
-
- **[docs/testing.md](../testing.md) 规则**:「测试真实入口路径」,行覆盖率不等于行为覆盖率——将这一教训编纂为所有未来插件的规则。
|
|
106
|
+
- **[docs/testing.md](../testing.zh.md) 规则**:「测试真实入口路径」,行覆盖率不等于行为覆盖率——将这一教训编纂为所有未来插件的规则。
|
|
107
107
|
|
|
108
108
|
## 经验教训
|
|
109
109
|
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write docs/postmortem/0002-js-expression-disabled-filesystem-tools.md
|
|
5
|
-
0002-js-expression-disabled-filesystem-tools.md:
|
|
6
|
-
0002-js-expression-disabled-filesystem-tools.zh.md:
|
|
5
|
+
0002-js-expression-disabled-filesystem-tools.md: 317b9759afda90b3864619f874f99e5a7047395f
|
|
6
|
+
0002-js-expression-disabled-filesystem-tools.zh.md: 1c87796c66309be28a17a6c0e71e48ae2e2fda40
|
package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.md
CHANGED
|
@@ -36,9 +36,9 @@ The snapshot framework treated any deterministic transcript as valid behavior. H
|
|
|
36
36
|
## Guardrails added
|
|
37
37
|
|
|
38
38
|
- Filesystem scenarios boot `fs.cordis.yml`, an explicit fixed full-access overlay with a paired replay config and its own request-header class.
|
|
39
|
-
- [`AGENTS.md`](../../AGENTS.md) and the [Cordis primer](../cordis-primer.md#loader-configuration) state that `!!js` is valid
|
|
39
|
+
- [`AGENTS.md`](../../AGENTS.md) and the [Cordis primer](../cordis-primer.md#loader-configuration) state that `!!js` is valid under plugin `config` and entry `disabled`; other entry metadata stays literal, so conditional composition uses overlays.
|
|
40
40
|
- `verify-cordis-config` parses repository Cordis YAML and rejects expression nodes in Loader entry metadata, including include patches and inserted entries.
|
|
41
|
-
- `dsh-
|
|
41
|
+
- `dsh-session-snapshot` rejects structured `UNKNOWN_TOOL` results in fresh runs and committed session fixtures before they can be committed as expected outputs.
|
|
42
42
|
|
|
43
43
|
## Lessons
|
|
44
44
|
|
package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md
CHANGED
|
@@ -36,9 +36,9 @@ Cordis Include 将每个 `!!js` 标量解析为一个表达式对象。Loader
|
|
|
36
36
|
## 已添加的防护措施
|
|
37
37
|
|
|
38
38
|
- 文件系统场景启动 `fs.cordis.yml`:一个显式的固定全权限 overlay,配有对应的回放配置和独立的 request-header 类。
|
|
39
|
-
- [`AGENTS.md`](../../AGENTS.md) 与 [Cordis 入门](../cordis-primer.md#loader-configuration)明确说明 `!!js`
|
|
39
|
+
- [`AGENTS.md`](../../AGENTS.md) 与 [Cordis 入门](../cordis-primer.zh.md#loader-configuration)明确说明 `!!js` 在插件 `config` 与配置项 `disabled` 内有效;其他配置项元数据保持字面量,因此条件式组合使用 overlay。
|
|
40
40
|
- `verify-cordis-config` 解析仓库中的 Cordis YAML,拒绝 Loader 配置项元数据中的表达式节点(包括 include patch 和插入的配置项)。
|
|
41
|
-
- `dsh-
|
|
41
|
+
- `dsh-session-snapshot` 在全新运行和已提交的会话 fixture 中拒绝结构化的 `UNKNOWN_TOOL` 结果,防止其被提交为预期输出。
|
|
42
42
|
|
|
43
43
|
## 教训
|
|
44
44
|
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write docs/postmortem/0003-web-agent-gui-feedback-loop.md
|
|
5
|
-
0003-web-agent-gui-feedback-loop.md:
|
|
6
|
-
0003-web-agent-gui-feedback-loop.zh.md:
|
|
5
|
+
0003-web-agent-gui-feedback-loop.md: 3b836764dcf47758a6a0b472d92484f39b9ff510
|
|
6
|
+
0003-web-agent-gui-feedback-loop.zh.md: 402fe05341f9ab568329c30e9db0ebde97a5753b
|
|
@@ -39,8 +39,8 @@ Background process semantics were also bypassed with shell `&`, so job identity,
|
|
|
39
39
|
|
|
40
40
|
## Guardrails added
|
|
41
41
|
|
|
42
|
-
- The Web launcher publishes the canonical loopback URL
|
|
43
|
-
- Production guidance requires rebuilding artifacts and verifying the existing URL after refresh. Development guidance explains that
|
|
42
|
+
- The Web launcher publishes the canonical loopback URL in the logged `app:web-surface` prompt section and the managed `$DSH_WEB_URL` environment.
|
|
43
|
+
- Production guidance requires rebuilding artifacts and verifying the existing URL after refresh. Development guidance explains that the HMR receiver is always on; `pnpm run dev:web` in the same checkout rebuilds client-plugin bundles for refresh-free reload, while shell and plain-package changes still require refresh.
|
|
44
44
|
- `apps/web` standalone Vite serve mode rejects during configuration. Its subprocess test proves natural exit and instruments `Server.listen()` so a transient bind cannot pass unnoticed.
|
|
45
45
|
- Layered real-path tests cover the CLI request, exact production/development prompts, shell runtime facts, same-port static replacement, source watcher rebuild, host stat polling, and browser HMR under an unchanged page identity.
|
|
46
46
|
- PR evidence preserves screenshots from the original 3081 session and a real-model before/after GUI run; external browser, HTTP, process, and session-log observations carry acceptance.
|
|
@@ -39,8 +39,8 @@ agent 还通过 shell `&` 绕过了后台进程语义,因此任务身份、完
|
|
|
39
39
|
|
|
40
40
|
## 已添加的防护措施
|
|
41
41
|
|
|
42
|
-
- Web 启动器在记录到日志的 `app:web-surface`
|
|
43
|
-
-
|
|
42
|
+
- Web 启动器在记录到日志的 `app:web-surface` 提示词区段和受管的 `$DSH_WEB_URL` 环境变量中发布规范环回 URL。
|
|
43
|
+
- 生产指南要求重新构建产物,并在刷新后验证既有 URL。开发指南说明 HMR 接收端始终开启;同一源码检出目录中的 `pnpm run dev:web` 会重新构建客户端插件 bundle,实现免刷新的重载,而 Web shell 和普通包的改动仍然需要刷新页面。
|
|
44
44
|
- `apps/web` 的独立 Vite 服务模式会在配置阶段拒绝启动。其子进程测试验证进程自然退出,并插桩 `Server.listen()`,确保短暂绑定端口也不会漏检。
|
|
45
45
|
- 分层的真实路径测试覆盖 CLI(命令行界面)请求、精确的生产/开发模式提示词、shell 运行时事实、同端口静态产物替换、源码 watcher 重建、宿主 stat 轮询,以及页面 identity 不变的浏览器 HMR。
|
|
46
46
|
- PR(Pull Request)证据保留了原始 3081 会话的截图,以及真实模型驱动的 GUI 修改前后对比;验收以外部浏览器、HTTP、进程和会话日志的观测结果为准。
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md
|
|
5
|
-
0004-landlock-partial-notice-misclassified-child-failures.md:
|
|
6
|
-
0004-landlock-partial-notice-misclassified-child-failures.zh.md:
|
|
5
|
+
0004-landlock-partial-notice-misclassified-child-failures.md: 06d39b1db8436d4cfd7ad6145782b4eb2c4d31ae
|
|
6
|
+
0004-landlock-partial-notice-misclassified-child-failures.zh.md: 6fb5c727419745590847455e8ea7e9dfb1bce8d3
|
|
@@ -45,7 +45,7 @@ Stderr remains an in-band attribution channel. A confined child can deliberately
|
|
|
45
45
|
- [`dsh-bash-sandbox`](../../packages/shell/bash-sandbox/) directly spawns the provider argv, so a pre-start rejection uses the spawn-error channel instead of localized shell diagnostics. Settled foreground and background execution share one evidence-returning classifier; fatal evidence outranks denial, and foreground errors report the matched fatal line without changing captured stderr.
|
|
46
46
|
- [`dsh-tool-fs-search`](../../packages/fs/tool-fs-search/) uses packaged ripgrep through `ctx.subprocess` and remains outside the sandboxed bash seam.
|
|
47
47
|
- The native-boundary regression cases live in [`partial-landlock.spec.ts`](../../packages/shell/bash-sandbox/tests/partial-landlock.spec.ts), including informational notices, fatal evidence, and foreground/background classification.
|
|
48
|
-
- The assembled product path is pinned by the [`partial-landlock` snapshot composition](../../
|
|
48
|
+
- The assembled product path is pinned by the [`partial-landlock` snapshot composition](../../snapshots/session/partial-landlock-child-failure/cordis.snapshot.yml), independently of filesystem-search implementation choices.
|
|
49
49
|
|
|
50
50
|
## Lessons
|
|
51
51
|
|