dsh-plugin-guide 0.3.1 → 0.3.3
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 +28 -23
- 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 +25 -8
- package/references/official-docs/docs/architecture.zh.md +38 -21
- package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
- package/references/official-docs/docs/capability-seams.md +134 -67
- package/references/official-docs/docs/capability-seams.zh.md +134 -67
- package/references/official-docs/docs/config-catalog.i18n.yaml +2 -2
- package/references/official-docs/docs/config-catalog.md +731 -403
- package/references/official-docs/docs/config-catalog.zh.md +747 -419
- package/references/official-docs/docs/cookbook/adding-a-package.i18n.yaml +2 -2
- package/references/official-docs/docs/cookbook/adding-a-package.md +3 -4
- package/references/official-docs/docs/cookbook/adding-a-package.zh.md +9 -8
- 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 +660 -909
- package/references/official-docs/docs/module-graph.zh.md +662 -911
- package/references/official-docs/docs/persistence-catalog.i18n.yaml +2 -2
- package/references/official-docs/docs/persistence-catalog.md +185 -53
- package/references/official-docs/docs/persistence-catalog.zh.md +193 -61
- 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 +207 -0
- package/references/official-docs/docs/subsystems/agent-team.zh.md +207 -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 +12 -8
- package/references/official-docs/docs/subsystems/code-runtime.zh.md +13 -9
- package/references/official-docs/docs/subsystems/commands.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/commands.md +30 -7
- package/references/official-docs/docs/subsystems/commands.zh.md +31 -8
- package/references/official-docs/docs/subsystems/compaction.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/compaction.md +14 -14
- package/references/official-docs/docs/subsystems/compaction.zh.md +19 -19
- 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 +114 -36
- package/references/official-docs/docs/subsystems/core.zh.md +145 -65
- 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 +6 -6
- package/references/official-docs/docs/subsystems/feedback.zh.md +6 -6
- 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 +183 -173
- package/references/official-docs/docs/subsystems/persistence.zh.md +182 -172
- 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 +148 -75
- package/references/official-docs/docs/subsystems/session-projection.zh.md +148 -75
- package/references/official-docs/docs/subsystems/session-query.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session-query.md +30 -16
- package/references/official-docs/docs/subsystems/session-query.zh.md +31 -17
- 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 +8 -8
- package/references/official-docs/docs/subsystems/session-title.zh.md +10 -10
- package/references/official-docs/docs/subsystems/session.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/session.md +376 -71
- package/references/official-docs/docs/subsystems/session.zh.md +392 -85
- 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 +175 -0
- package/references/official-docs/docs/subsystems/slots.zh.md +175 -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 +38 -7
- package/references/official-docs/docs/subsystems/storage.zh.md +41 -10
- package/references/official-docs/docs/subsystems/subagent.i18n.yaml +2 -2
- package/references/official-docs/docs/subsystems/subagent.md +148 -116
- package/references/official-docs/docs/subsystems/subagent.zh.md +158 -124
- 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 +29 -14
- package/references/official-docs/docs/subsystems/token-meter.zh.md +30 -15
- 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 +413 -61
- package/references/official-docs/docs/tool-catalog.zh.md +418 -63
- 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 +2 -2
- package/references/official-docs/docs/web-styling.md +3 -0
- package/references/official-docs/docs/web-styling.zh.md +5 -2
- package/references/official-docs/packages/AGENTS.md +4 -3
- 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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](permission-presets.md) | 中文
|
|
4
4
|
|
|
5
|
-
[dsh-permission-presets](../../packages/interaction/permission-presets) 的权限预设层(`ctx.permissionPresets`,`PermissionPresetService`)把两个相互独立的强制执行 knob,即[沙箱模式](sandbox.md)(`sandbox/mode`)与[审批策略](approval.md)(`approval/policy`),捆绑成具名预设,供客户端作为单个权限(Permissions)选择器提供。它是一项可选能力,不属于 agent loop(智能体循环)主干,也不拥有任何强制执行:执行、提示词叙述与回放仍然读取各自 knob的折叠结果,预设切换只记录意图,并通过每个 knob各自的规范 setter 写入。[包 README](../../packages/interaction/permission-presets/README.md) 负责组合状态与限制;[沙箱切换设计](../../.agents/notes/implemented/feature/2026-07-06-sandbox.md)负责决策依据。
|
|
5
|
+
[dsh-permission-presets](../../packages/interaction/permission-presets) 的权限预设层(`ctx.permissionPresets`,`PermissionPresetService`)把两个相互独立的强制执行 knob,即[沙箱模式](sandbox.zh.md)(`sandbox/mode`)与[审批策略](approval.zh.md)(`approval/policy`),捆绑成具名预设,供客户端作为单个权限(Permissions)选择器提供。它是一项可选能力,不属于 agent loop(智能体循环)主干,也不拥有任何强制执行:执行、提示词叙述与回放仍然读取各自 knob的折叠结果,预设切换只记录意图,并通过每个 knob各自的规范 setter 写入。[包 README](../../packages/interaction/permission-presets/README.zh.md) 负责组合状态与限制;[沙箱切换设计](../../.agents/notes/implemented/feature/2026-07-06-sandbox.zh.md)负责决策依据。
|
|
6
6
|
|
|
7
7
|
源码:[`packages/interaction/permission-presets/src/index.ts`](../../packages/interaction/permission-presets/src/index.ts)
|
|
8
8
|
|
|
@@ -45,7 +45,7 @@ interface Config {
|
|
|
45
45
|
|
|
46
46
|
## 当前预设与派生的 `custom`
|
|
47
47
|
|
|
48
|
-
`current(
|
|
48
|
+
`current(session)` 从可选注册的 `permissions` 投影派生实际生效的预设。该单元折叠会话的沙箱模式、审批策略和已记录选择;状态内部的缺失值回退到执行器配置的模式与审批服务配置,最后回退到 `ask`。注册表或投影 key 缺失时会显式失败。服务优先取仍然匹配的选择,其次取声明顺序中第一个匹配的表项,否则返回 `CUSTOM_PRESET`(`'custom'`)。`custom` 只是派生值:客户端可以把它显示为当前值,但它绝不是切换目标,也绝不出现在事件 payload 中。
|
|
49
49
|
|
|
50
50
|
`names` 按预设表声明顺序列出可切换的预设;`optionOf(name)` 为某个表键(label 回退为该键)或 `custom` 构建客户端渲染的选项,传入其他任何名称都会抛出异常。
|
|
51
51
|
|
|
@@ -65,7 +65,7 @@ interface PresetOption {
|
|
|
65
65
|
|
|
66
66
|
`set(session, name)` 解析预设(未知名称抛出异常),在 `name` 尚不是生效预设时追加一条仅记日志的 `permission/preset` 事件,然后通过各旋钮自己的 setter([dsh-sandbox-policy](../../packages/sandbox/sandbox-policy) 的 `setSandboxMode` 与 [dsh-user-approval](../../packages/interaction/user-approval) 的 `setApprovalPolicy`)写入,且仅当该 knob的生效值发生变化时才写。同一轮次内,选择事件先于旋钮事件出现;重新选择当前生效的预设则什么都不追加。
|
|
67
67
|
|
|
68
|
-
`permission/preset` 是持久、仅记日志的用户意图:它不进入模型 transcript(文本记录),模型可见的后果由 knob 事件经各自消费方承担;它存在是为了在两个预设共享同一个旋钮组合时,让 `current()`
|
|
68
|
+
`permission/preset` 是持久、仅记日志的用户意图:它不进入模型 transcript(文本记录),模型可见的后果由 knob 事件经各自消费方承担;它存在是为了在两个预设共享同一个旋钮组合时,让 `current()` 仍能保住用户选择的究竟是哪一个预设。`permissions` 投影把该选择与两个 knob 事件一同折叠,并保留用于区分空恢复 seed 与新会话的 `session/end-seed` 边界;回放不需要任何追赶状态或原始日志重扫。完整事件声明见[持久化日志事件目录](../persistence-catalog.zh.md);方法签名见生成的[服务目录](#ctxpermissionpresets--permissionpresetservice)。
|
|
69
69
|
|
|
70
70
|
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
71
71
|
|
|
@@ -73,7 +73,7 @@ interface PresetOption {
|
|
|
73
73
|
|
|
74
74
|
## Cordis API
|
|
75
75
|
|
|
76
|
-
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`) —
|
|
76
|
+
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).
|
|
77
77
|
|
|
78
78
|
<a id="ctxpermissionpresets--permissionpresetservice"></a>
|
|
79
79
|
|
|
@@ -86,10 +86,10 @@ Owns the deployment's permission presets and their write path. Requires a confin
|
|
|
86
86
|
* Resolve the preset matching the effective knob values. A still-matching
|
|
87
87
|
* last selection wins shared-bundle ties; otherwise the first table match
|
|
88
88
|
* wins, or {@link CUSTOM_PRESET} when no entry matches.
|
|
89
|
-
* @param
|
|
89
|
+
* @param session - the session whose knob state is read.
|
|
90
90
|
* @returns the effective preset name, or `custom` when nothing matches.
|
|
91
91
|
*/
|
|
92
|
-
current(
|
|
92
|
+
current(session: Session): string
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
95
|
* Build the whole select value for one folded knob state: every table
|
|
@@ -125,7 +125,7 @@ optionOf(name: string): PresetOption
|
|
|
125
125
|
set(session: Session, name: string): void
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
Types: [Session](session.
|
|
128
|
+
Types: [Session](session.zh.md)
|
|
129
129
|
|
|
130
|
-
Source: [`packages/interaction/permission-presets/src/index.ts
|
|
130
|
+
Source: [`packages/interaction/permission-presets/src/index.ts`](../../packages/interaction/permission-presets/src/index.ts)
|
|
131
131
|
<!-- END GENERATED cordis-surface -->
|
|
@@ -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/subsystems/persistence.md
|
|
5
|
-
persistence.md:
|
|
6
|
-
persistence.zh.md:
|
|
5
|
+
persistence.md: 4f6069b8a926f8fe24d2271650d45dc8377fa355
|
|
6
|
+
persistence.zh.md: 6f8430868a001d0da4755579d2e667097d254ac6
|
|
@@ -2,31 +2,114 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](persistence.zh.md)
|
|
4
4
|
|
|
5
|
-
The **durability seam** for the event log. [session.md](session.md) describes the in-memory `Session` — the append-only `SessionEvent` log that is the source of truth. This page describes how that log is made durable: the abstract `SessionPersistence` service, its
|
|
5
|
+
The **durability seam** for the event log. [session.md](session.md) describes the in-memory `Session` — the append-only `SessionEvent` log that is the source of truth. This page describes how that log is made durable: the abstract `SessionPersistence` service, its provider model and shipped JSONL backend, the flush checkpoint, crash recovery, and the metadata header that travels alongside the log. The event vocabulary the log carries is enumerated, member by member, in the generated [persistence log event catalog](../persistence-catalog.md).
|
|
6
6
|
|
|
7
|
-
The seam is a [capability seam](../../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md): one abstract service ([dsh-session-persistence](../../packages/session/session-persistence), `ctx.sessionPersistence`)
|
|
7
|
+
The seam is a [capability seam](../../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md): one abstract service ([dsh-session-persistence](../../packages/session/session-persistence), `ctx.sessionPersistence`) exposing `create`/`open`/`stat`/`list` over the existing `SessionEvent` — **no parallel persisted event type** — where `create` and `open` return a per-session `SessionHandle` (`read`/`append`/`flush`/`close`) that carries all log access and single-writer ownership. The repository ships [dsh-session-persistence-jsonl](../../packages/session/session-persistence-jsonl) as its provider; out-of-tree providers may implement the same service contract. See the [handle-based persistence Agent Note](../../.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.md) and the [session-persistence Agent Note](../../.agents/notes/implemented/architecture/2026-06-14-session-persistence.md).
|
|
8
|
+
|
|
9
|
+
## `SessionHandle` — one open channel onto a stored session
|
|
10
|
+
|
|
11
|
+
Every log read and write flows through a handle, never through id-addressed service methods: the handle is the single door a future cross-process write lease will guard. One handle type serves both accesses — a mutation on a `read` handle is a runtime `SessionReadOnlyError` rather than a typed split — and in-process single-writer ownership makes a second `open(id, 'write')` reject with `SessionAlreadyOwnedError` while an owner is active.
|
|
12
|
+
|
|
13
|
+
```ts type-equiv
|
|
14
|
+
/**
|
|
15
|
+
* One open channel onto a stored session. A handle is single-owner state, not
|
|
16
|
+
* a shared service: `read` never backtracks below what this handle already
|
|
17
|
+
* observed, a `write` handle reads its own successful appends, and `close()`
|
|
18
|
+
* is the one teardown (idempotent, uncancellable; `Symbol.asyncDispose`
|
|
19
|
+
* delegates to it). Every operation on a closed handle rejects with
|
|
20
|
+
* `SessionHandleClosedError`.
|
|
21
|
+
*
|
|
22
|
+
* Freshness across handles: once an `append` or `flush` resolves on a write
|
|
23
|
+
* handle, every read STARTED afterwards on the same backend instance — on any
|
|
24
|
+
* handle, or through `stat`/`list` — observes at least that prefix.
|
|
25
|
+
* Reads concurrent with a mutation carry no ordering promise beyond the valid
|
|
26
|
+
* contiguous prefix.
|
|
27
|
+
*/
|
|
28
|
+
interface SessionHandle extends AsyncDisposable {
|
|
29
|
+
/** The stored session this handle addresses. */
|
|
30
|
+
readonly id: SessionId
|
|
31
|
+
/** The immutable stored header, fixed at `create`/`open`. */
|
|
32
|
+
readonly header: SessionHeader
|
|
33
|
+
/**
|
|
34
|
+
* Exact fork-inherited prefix length stored with the log; `0` when
|
|
35
|
+
* `header.isSeeded` is false. Storage metadata paired with the header for
|
|
36
|
+
* every body read, never part of the replayable event log.
|
|
37
|
+
*/
|
|
38
|
+
readonly inheritedEventCount: SessionLogOffset
|
|
39
|
+
/** Whether this handle may mutate the log. */
|
|
40
|
+
readonly access: SessionAccess
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Read a slice of the valid contiguous logical log. The slice is a legal log
|
|
44
|
+
* prefix segment: a torn physical tail is never returned, and repeated reads
|
|
45
|
+
* on this handle never observe an older state than a prior read.
|
|
46
|
+
* @param offset - first logical event seq to include; defaults to `0`.
|
|
47
|
+
* @param length - maximum number of events to return; defaults to the rest
|
|
48
|
+
* of the log. An offset at or past the end returns an empty list.
|
|
49
|
+
* @param options - optional cancellation.
|
|
50
|
+
* @returns the events with `seq >= offset`, at most `length` of them.
|
|
51
|
+
*/
|
|
52
|
+
read(offset?: number, length?: number, options?: SessionHandleReadOptions): Promise<readonly SessionEvent[]>
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Append a contiguous batch continuing the current logical end. The first
|
|
56
|
+
* event's `seq` MUST equal the stored next-seq; committed events are never
|
|
57
|
+
* rewritten. Persistence is best-effort: on resolution the batch is
|
|
58
|
+
* accepted, ordered, and visible to reads on this backend instance, but
|
|
59
|
+
* only a resolved {@link flush} promises it survives a crash — a backend
|
|
60
|
+
* may buffer or batch physical writes behind append. Rejects with
|
|
61
|
+
* `SessionReadOnlyError` on a read handle and `SessionOwnershipLostError`
|
|
62
|
+
* when write ownership is gone.
|
|
63
|
+
* @param events - the contiguous batch, in seq order.
|
|
64
|
+
* @param options - optional cancellation observed before the write starts.
|
|
65
|
+
*/
|
|
66
|
+
append(events: readonly SessionEvent[], options?: SessionHandleAppendOptions): Promise<void>
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The durability barrier — the one operation that promises storage: on
|
|
70
|
+
* resolution every acknowledged append is durable and the session is
|
|
71
|
+
* materialized for other processes; an empty created session becomes
|
|
72
|
+
* durably listable here. Callers that must survive a crash flush; a backend
|
|
73
|
+
* whose `append` already persists on resolution treats this as
|
|
74
|
+
* materialize-if-needed. Rejects with `SessionReadOnlyError` on a read
|
|
75
|
+
* handle.
|
|
76
|
+
* @param options - optional cancellation observed before the barrier starts.
|
|
77
|
+
*/
|
|
78
|
+
flush(options?: SessionHandleFlushOptions): Promise<void>
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Release the handle: a read handle frees local resources; a write handle
|
|
82
|
+
* completes pending durability and releases write ownership. Idempotent,
|
|
83
|
+
* asynchronous, and deliberately not cancellable.
|
|
84
|
+
*/
|
|
85
|
+
close(): Promise<void>
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
A created session is observable in this process from the moment `create` resolves, while a backend may defer physical materialization (a pure optimization) until the first `append` or `flush`; other processes see only materialized sessions, and a session that never materialized before a crash never existed.
|
|
8
90
|
|
|
9
91
|
## The flush checkpoint
|
|
10
92
|
|
|
11
|
-
`session/event` is a *synchronous* notification;
|
|
93
|
+
`session/event` is a *synchronous* notification; the mounted backend routes it by session id into the active write handle's bounded write-behind window without blocking the producer (the backend installs these listeners once, because persistence already enforces one active write handle per id). The first pending event starts a fixed internal batching window, and later events join without resetting its deadline. Expiry starts one durable `append` through the session's write handle; events admitted during that write receive their own deadline and form a follow-up batch. `session/flush` cancels the wait and drains through quiescence, so the loop still uses it as the ordering and error-observation checkpoint before claiming the next ordinary turn. A rejected background write retains its events in order, pauses the automatic path, and is reported through the logger; the next explicit flush retries and rejects loudly to its caller. `session/disposed` performs the same final drain and closes the handle, and `close()` itself drains the routed buffer through the still-open storage, so backend teardown's close sweep loses nothing. The window bounds only intentional batching wait, not event-loop scheduling or backend durability latency ([decision](../../.agents/notes/implemented/architecture/2026-08-08-bounded-session-persistence-write-batching.md)).
|
|
12
94
|
|
|
13
95
|
## Crash recovery preserves an interrupted turn
|
|
14
96
|
|
|
15
|
-
A
|
|
97
|
+
A log crashed mid-turn ends with an open `turn/start` and no `turn/end`. Persistence does **not** truncate or repair it — a single turn can be huge in a long-horizon task (many steps, large tool output), and those events were durably appended before the crash. It returns the physically valid contiguous log; only the incomplete fragment of a torn physical tail, belonging to an append that never resolved, is discarded — complete records recovered from it (the JSONL backend partially decodes a torn Zstandard frame) are durably rewritten by the write path before the handle's first new append. Repair is the reader's job: resume (agent-loop) reads the stored log through its write handle, computes `interruptedTurnClosers` — missing tool errors, any open `step/end`, and a synthetic `turn/end { reason: { kind: 'interrupted' } }` — and appends them through the same handle as an ordinary batch before publishing the Session. `interrupted` is the one `TurnEndReason` no loop emits (see [session.md](session.md#why-a-turn-ended-turnendreasonmap)).
|
|
16
98
|
|
|
17
|
-
Repair
|
|
99
|
+
Repair therefore writes only under write ownership: a live session's write handle is held by its lifecycle owner, so a concurrent `open(id, 'write')` rejects with `SessionAlreadyOwnedError` instead of racing repair against a live turn. Read-only observers (session-query) balance an interrupted cold log with the same closers in memory only, writing nothing back.
|
|
18
100
|
|
|
19
|
-
`
|
|
101
|
+
Read-only observation is `open(id, 'read')`: the handle serves validated contiguous prefix slices, never a torn tail, and repeated reads on one handle never observe an older state than a prior read. There is no persistence-side prepared-Session cache: session-query owns its cold-read cache, keying one balanced cold Session per id on the `stat().revision` change token and re-reading only when the token changes. The [handle-based persistence Agent Note](../../.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.md) owns this lifecycle; the [Session preparation decision](../../.agents/notes/implemented/architecture/2026-08-05-session-preparation.md) records the publication-boundary `SessionPreparation` that remains.
|
|
20
102
|
|
|
21
|
-
## `SessionLocation` —
|
|
103
|
+
## `SessionLocation` — refusal-diagnostics artifact target
|
|
22
104
|
|
|
23
|
-
`
|
|
105
|
+
`SessionLocation` is not a consumer-facing query: log access goes through a session handle's `read`. It survives only as refusal diagnostics, letting a `SessionFormatUnsupportedError` name the raw log a build refused to interpret. JSONL supplies the absolute transcript path inside its project/session directory; a backend without one artifact per session supplies nothing.
|
|
24
106
|
|
|
25
107
|
```ts type-equiv
|
|
26
108
|
/**
|
|
27
|
-
* A backend-resolved, per-session local artifact location.
|
|
28
|
-
*
|
|
29
|
-
*
|
|
109
|
+
* A backend-resolved, per-session local artifact location. Carried only by
|
|
110
|
+
* refusal diagnostics ({@link SessionFormatUnsupportedError}) so a user can
|
|
111
|
+
* find the raw log a build refused to interpret; it is not a consumer-facing
|
|
112
|
+
* query — log access goes through a session handle's `read`.
|
|
30
113
|
*/
|
|
31
114
|
interface SessionLocation {
|
|
32
115
|
/** Backend-specific artifact kind, for example `jsonl`. */
|
|
@@ -40,7 +123,7 @@ interface SessionLocation {
|
|
|
40
123
|
|
|
41
124
|
## `SessionHeader` — metadata beside the log
|
|
42
125
|
|
|
43
|
-
Per-session metadata travels **separately** from the event log: format version, cwd,
|
|
126
|
+
Per-session metadata travels **separately** from the event log: the header carries format version, cwd, and the `isSeeded` lineage bit, while body-bearing storage values carry the exact inherited cut beside it. Neither belongs to `SessionEventMap` or reaches `deriveMessages()`. The logical header is attached through `session.header`; the Session exposes its cut as `inheritedEventCount`.
|
|
44
127
|
|
|
45
128
|
Source: [`packages/core/session/src/types.ts`](../../packages/core/session/src/types.ts)
|
|
46
129
|
|
|
@@ -64,10 +147,10 @@ interface SessionHeader {
|
|
|
64
147
|
/** The session this one was forked from (seed lineage), if any. */
|
|
65
148
|
readonly parentSession?: SessionId
|
|
66
149
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
150
|
+
* Whether this Session contains a fork-inherited event prefix. The exact prefix
|
|
151
|
+
* length is Session state rather than ordinary header metadata.
|
|
69
152
|
*/
|
|
70
|
-
readonly
|
|
153
|
+
readonly isSeeded: boolean
|
|
71
154
|
/**
|
|
72
155
|
* Coarse product classification for a session created as a subagent child.
|
|
73
156
|
* This is presentation metadata, not proof that the child is continuable.
|
|
@@ -91,11 +174,11 @@ interface SessionHeader {
|
|
|
91
174
|
|
|
92
175
|
## Format refusal — logs a build cannot faithfully read
|
|
93
176
|
|
|
94
|
-
A backend refuses a log it cannot faithfully interpret with `SessionFormatUnsupportedError`, distinct from `SessionPersistenceCorruptionError` because nothing is damaged. A header `version` ahead of `SESSION_FORMAT_VERSION` names the direction ("written by a newer harness — upgrade the harness to open it"); one behind it states that this build ships no upgrade path.
|
|
177
|
+
A backend refuses a log it cannot faithfully interpret with `SessionFormatUnsupportedError`, distinct from `SessionPersistenceCorruptionError` because nothing is damaged. A header `version` ahead of `SESSION_FORMAT_VERSION` names the direction ("written by a newer harness — upgrade the harness to open it"); one behind it states that this build ships no upgrade path. An event type outside this build's generated vocabulary (`KNOWN_SESSION_EVENT_TYPES`, emitted by `gen-persistence-catalog`) refuses the same way unless the event's envelope carries `ignorable: true` — silently skipping an unrecognized required event could change how the rest of the log must be read. The message appends the raw log path when the backend keeps one artifact per session, so the refused text stays reachable. The JSONL backend refuses a foreign version straight from the raw header line, before validating this format version's header shape or decoding any event row — a structurally different future format still reports the upgrade direction, never "corrupt". An out-of-tree backend must enforce the equivalent direction-aware refusal at its own physical-format boundary. Design rationale and the deferred upgrader chain live in the [session-log-version-mechanism note](../../.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.md).
|
|
95
178
|
|
|
96
179
|
## `CreateSessionOptions` — seeding and metadata
|
|
97
180
|
|
|
98
|
-
Creating a `Session` through the store takes a `seed` (initial replay or fork history) and `meta` (the storage-level fields the store folds into a `SessionHeader`). The store fills in `version`/`id` and defaults `createdAt`; the caller may supply the validated absolute `cwd`,
|
|
181
|
+
Creating a `Session` through the store takes a `seed` (initial replay or fork history), an optional exact `inheritedEventCount`, and `meta` (the storage-level fields the store folds into a `SessionHeader`). The store fills in `version`/`id` and defaults `createdAt`; the caller may supply the validated absolute `cwd`, `parentSession` lineage, `isSeeded` lineage bit, optional coarse `origin`, `delegationDepth`, `agentPreset`, and an existing `createdAt`. A seeded creation requires both an explicit seed and exact cut because child-owned setup events may follow the inherited prefix. `origin: 'subagent'` lets product navigation hide duplicate child rows; it does not prove that a descriptor is valid or that the child can resume.
|
|
99
182
|
|
|
100
183
|
```ts type-equiv
|
|
101
184
|
/**
|
|
@@ -107,14 +190,19 @@ interface CreateSessionOptions {
|
|
|
107
190
|
/** Initial replay or fork history supplied at construction. */
|
|
108
191
|
readonly seed?: readonly SessionEvent[]
|
|
109
192
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
193
|
+
* Exact fork-inherited prefix length when `meta.isSeeded` is true. A
|
|
194
|
+
* constructor seed may also contain child-owned setup events after this cut.
|
|
195
|
+
*/
|
|
196
|
+
readonly inheritedEventCount?: SessionLogOffset
|
|
197
|
+
/**
|
|
198
|
+
* Storage metadata read once before publication. `isSeeded` marks fork
|
|
199
|
+
* lineage; supplying replay history alone does not make it inherited.
|
|
112
200
|
*/
|
|
113
201
|
readonly meta?: {
|
|
114
202
|
readonly cwd?: string
|
|
115
203
|
readonly parentSession?: SessionId
|
|
116
204
|
readonly createdAt?: number
|
|
117
|
-
readonly
|
|
205
|
+
readonly isSeeded?: boolean
|
|
118
206
|
readonly origin?: 'subagent'
|
|
119
207
|
readonly delegationDepth?: number
|
|
120
208
|
readonly agentPreset?: string
|
|
@@ -122,27 +210,11 @@ interface CreateSessionOptions {
|
|
|
122
210
|
}
|
|
123
211
|
```
|
|
124
212
|
|
|
125
|
-
Replay/fork is therefore `ctx.
|
|
126
|
-
|
|
127
|
-
## `SessionRawArtifact` — verbatim stored artifact text
|
|
128
|
-
|
|
129
|
-
A backend's own artifact text for one session, byte-identical to what it durably wrote (decoded from its physical encoding). `readRaw` returns it without reconstructing from parsed events, so backend-specific serialization (chunk packing, key order, line breaks) survives. Consumers first test `supportsRawArtifacts`: `false` means the backend does not provide this capability (for example SQLite), while `readRaw(...) === undefined` means a supported backend has no materialized artifact for that session.
|
|
130
|
-
|
|
131
|
-
```ts type-equiv
|
|
132
|
-
/** A backend's own raw artifact text for one session, verbatim. */
|
|
133
|
-
interface SessionRawArtifact {
|
|
134
|
-
/** The session header parsed from the artifact's own first line. */
|
|
135
|
-
readonly meta: SessionHeader
|
|
136
|
-
/** The artifact's base filename on disk, without any physical encoding suffix. */
|
|
137
|
-
readonly filename: string
|
|
138
|
-
/** The artifact's full text content, decoded from the backend's physical encoding. */
|
|
139
|
-
readonly content: string
|
|
140
|
-
}
|
|
141
|
-
```
|
|
213
|
+
Replay/fork is therefore `ctx.agents.create({ sessionId, seed, meta })` — a fork additionally supplies `inheritedEventCount` with `meta.isSeeded: true`, and only agent-loop-published sessions persist, and the loop stores the seed through the new session's write handle before publication; resuming a *persisted* session into a live agent is `ctx.agents.resume({ resumeSessionId })`.
|
|
142
214
|
|
|
143
215
|
## Preparation and restoration ownership
|
|
144
216
|
|
|
145
|
-
`SessionStore.prepare()` accepts ordinary creation options or fresh persistence graphs transferred through `RestoredSessionOptions`. The restoration branch validates and freezes the transferred header and events in place, so callers must retain no mutable aliases. `SessionPreparation` then owns the exact unpublished Session until publication or rollback; disposal is synchronous and idempotent.
|
|
217
|
+
`SessionStore.prepare()` accepts ordinary creation options or fresh persistence graphs transferred through `RestoredSessionOptions`. The restoration branch validates and freezes the transferred header and events in place, so callers must retain no mutable aliases. `SessionPreparation` then owns the exact unpublished Session until publication or rollback; disposal is synchronous and idempotent. agent-loop's resume builds these graphs by reading the stored log through the session's write handle and appending any needed `interruptedTurnClosers` before preparation.
|
|
146
218
|
|
|
147
219
|
```ts type-equiv
|
|
148
220
|
/**
|
|
@@ -154,6 +226,8 @@ interface RestoredSessionOptions {
|
|
|
154
226
|
readonly seed: SessionEvent[]
|
|
155
227
|
/** Fresh detached storage metadata to validate and freeze in place. */
|
|
156
228
|
readonly meta: SessionHeader
|
|
229
|
+
/** Exact number of fork-inherited leading events decoded from storage. */
|
|
230
|
+
readonly inheritedEventCount: SessionLogOffset
|
|
157
231
|
/** Select the persistence ownership-transfer path. */
|
|
158
232
|
readonly seedSource: 'persistence'
|
|
159
233
|
}
|
|
@@ -196,19 +270,9 @@ declare class SessionPreparation implements Disposable {
|
|
|
196
270
|
}
|
|
197
271
|
```
|
|
198
272
|
|
|
199
|
-
```ts type-equiv
|
|
200
|
-
/** Immutable logical session prepared from persistence or a live owner. */
|
|
201
|
-
interface SessionInspection {
|
|
202
|
-
/** Validated immutable session metadata. */
|
|
203
|
-
readonly meta: SessionHeader
|
|
204
|
-
/** Validated contiguous logical event log. */
|
|
205
|
-
readonly events: readonly SessionEvent[]
|
|
206
|
-
}
|
|
207
|
-
```
|
|
208
|
-
|
|
209
273
|
## Lightweight source revisions
|
|
210
274
|
|
|
211
|
-
Consumers of derived
|
|
275
|
+
Consumers of derived read models compare a cheap opaque revision before loading a full event log. The revision is a per-backend-instance change token from `stat`/`list`: equal revisions may be treated as an unchanged log; unequal revisions promise nothing, and write-ownership churn never changes one. session-query keys its cold-read cache on it; the token plays no part in open, read, or resume.
|
|
212
276
|
|
|
213
277
|
```ts type-equiv
|
|
214
278
|
/**
|
|
@@ -219,21 +283,29 @@ type SessionPersistenceRevision = Branded<'SessionPersistenceRevision'>
|
|
|
219
283
|
```
|
|
220
284
|
|
|
221
285
|
```ts type-equiv
|
|
222
|
-
/**
|
|
286
|
+
/**
|
|
287
|
+
* Lightweight stored-session observation returned by {@link SessionPersistence.stat}
|
|
288
|
+
* and {@link SessionPersistence.list} without reading the full event log.
|
|
289
|
+
*/
|
|
223
290
|
interface SessionPersistenceSnapshot {
|
|
224
|
-
/** Detached metadata for one
|
|
225
|
-
header: SessionHeader
|
|
226
|
-
/** Opaque
|
|
227
|
-
revision: SessionPersistenceRevision
|
|
291
|
+
/** Detached metadata for one stored session. */
|
|
292
|
+
readonly header: SessionHeader
|
|
293
|
+
/** Opaque change token; see {@link SessionPersistence.stat}. */
|
|
294
|
+
readonly revision: SessionPersistenceRevision
|
|
295
|
+
/** Logical event count, when the backend can provide it cheaply from metadata; otherwise absent. */
|
|
296
|
+
readonly eventCount?: number
|
|
297
|
+
/** Physical artifact byte size, when the backend can provide it cheaply (JSONL); otherwise absent. */
|
|
298
|
+
readonly sizeBytes?: number
|
|
228
299
|
}
|
|
229
300
|
```
|
|
230
301
|
|
|
231
|
-
|
|
302
|
+
The optional `eventCount`/`sizeBytes` hints let the session list's cold blank probe bound its work from metadata alone (session-controller config `coldBlankProbeMaxEvents`/`coldBlankProbeMaxBytes`) without opening any log.
|
|
303
|
+
|
|
304
|
+
## The backend
|
|
232
305
|
|
|
233
|
-
|
|
306
|
+
The shipped provider implements the abstract `SessionPersistence` contract (`create`/`open`/`stat`/`list`, with per-session `SessionHandle`s carrying `read`/`append`/`flush`/`close` and optional cancellation throughout) and passes the shared persistence contract suite:
|
|
234
307
|
|
|
235
|
-
- **[dsh-session-persistence-jsonl](../../packages/session/session-persistence-jsonl)** — an append-only logical JSONL log per session, stored as checksummed concatenated Zstandard frames by default or raw lines by configuration, with crash-safe atomic
|
|
236
|
-
- **[dsh-session-persistence-sqlite](../../packages/session/session-persistence-sqlite)** — `node:sqlite`, one row per `SessionEvent`. The row fields `(session_id, seq, type, time, data, source_event_seqs, surface_op)` map 1:1 onto the event, including optional surface metadata, so there is no parallel persisted schema to keep in sync.
|
|
308
|
+
- **[dsh-session-persistence-jsonl](../../packages/session/session-persistence-jsonl)** — an append-only logical JSONL log per session, stored as checksummed concatenated Zstandard frames by default or raw lines by configuration, with crash-safe atomic materialization, per-batch `fsync` appends, and torn-tail truncation before the first new append. `stat`/`list` carry `sizeBytes` and a best-effort `fs.stat`-derived revision.
|
|
237
309
|
|
|
238
310
|
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
239
311
|
|
|
@@ -241,145 +313,83 @@ Both implement the same abstract `SessionPersistence` (locate/create/append/prep
|
|
|
241
313
|
|
|
242
314
|
## Cordis API
|
|
243
315
|
|
|
244
|
-
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`) —
|
|
316
|
+
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.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
|
245
317
|
|
|
246
318
|
<a id="ctxsessionpersistence--sessionpersistence-abstract-seam"></a>
|
|
247
319
|
|
|
248
320
|
### `ctx.sessionPersistence` — `SessionPersistence` (abstract seam)
|
|
249
321
|
|
|
250
|
-
Durable append-only session storage
|
|
322
|
+
Durable append-only session storage addressed through per-session handles.
|
|
251
323
|
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Resolve this backend's independent local artifact for a session without
|
|
255
|
-
* reading, creating, flushing, or otherwise materializing it. Backends such
|
|
256
|
-
* as SQLite that do not own one artifact per session return `undefined`.
|
|
257
|
-
* @param meta - the immutable session header whose artifact is requested.
|
|
258
|
-
* @returns the backend-specific absolute location, when one exists.
|
|
259
|
-
*/
|
|
260
|
-
abstract locate(meta: SessionHeader): SessionLocation | undefined
|
|
324
|
+
Storage semantics shared by every backend: events are contiguous from seq 0 and never rewritten; a torn physical tail is never returned to a reader and is truncated by the write path before its first append; reads validate current-format records only and refuse unknown vocabulary fail-closed. `append` persists best-effort; `flush` — per handle or service-wide — is the durability barrier.
|
|
261
325
|
|
|
262
|
-
|
|
263
|
-
* Read a session's backend-owned artifact text verbatim — the exact durable
|
|
264
|
-
* bytes the backend wrote (decoded from its physical encoding, e.g. a
|
|
265
|
-
* decompressed JSONL). The returned `content` is the raw text, not a
|
|
266
|
-
* reconstruction from parsed events, so it preserves backend-specific
|
|
267
|
-
* serialization (chunk packing, key order, line breaks). Callers first test
|
|
268
|
-
* {@link supportsRawArtifacts}; `undefined` then means only that the requested
|
|
269
|
-
* session has no materialized artifact.
|
|
270
|
-
* @param _id - the persisted session to read (unused by the default: no
|
|
271
|
-
* per-session artifact).
|
|
272
|
-
* @param signal - optional cancellation for backend read work.
|
|
273
|
-
* @returns the raw artifact plus its parsed header, or `undefined` when the
|
|
274
|
-
* session is absent.
|
|
275
|
-
* @throws when this backend does not expose per-session raw artifacts.
|
|
276
|
-
*/
|
|
277
|
-
readRaw(_id: SessionId, signal?: AbortSignal): Promise<SessionRawArtifact | undefined>
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Register a new session's metadata. A backend MAY defer the physical write
|
|
281
|
-
* until the first {@link append} (lazy materialization), in which case a
|
|
282
|
-
* created-but-never-appended session is absent from {@link list}
|
|
283
|
-
* — abandoned sessions leave nothing behind.
|
|
284
|
-
* @param meta - the immutable header (id, version, cwd, lineage) to record.
|
|
285
|
-
*/
|
|
286
|
-
abstract create(meta: SessionHeader): Promise<void>
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Durably persist a batch of events. Honors the append-only and contiguous-
|
|
290
|
-
* seq contracts: the first event's `seq` MUST equal the stored next-seq
|
|
291
|
-
* (after `load` has durably closed any interrupted turn). Rejects non-JSON-
|
|
292
|
-
* serializable `event.data` with an error naming the offending event type.
|
|
293
|
-
* @param id - the session the batch belongs to.
|
|
294
|
-
* @param events - the contiguous batch to persist, in seq order.
|
|
295
|
-
*/
|
|
296
|
-
abstract append(id: SessionId, events: readonly SessionEvent[]): Promise<void>
|
|
326
|
+
Visibility: a created session is observable through `stat`/`list`/`open` in this process from the moment `create` resolves, even while a backend defers physical materialization (a pure optimization); other processes see the session only once it materializes, and a session that never materialized before a crash never existed. `SessionHandle.flush` forces materialization.
|
|
297
327
|
|
|
298
|
-
|
|
299
|
-
* Prepare the exact unpublished Session used by resume. Implementations may
|
|
300
|
-
* reuse object graphs retained by an earlier {@link inspect} after confirming
|
|
301
|
-
* their durable revision is still current; disposal releases an unpublished
|
|
302
|
-
* reservation. Revision retries require the durable log to remain unchanged
|
|
303
|
-
* for one read/check round trip; continuous external writers may delay completion.
|
|
304
|
-
* @param id - persisted session to prepare.
|
|
305
|
-
* @param signal - optional cancellation for preparation work.
|
|
306
|
-
* @returns one owned unpublished Session preparation.
|
|
307
|
-
*/
|
|
308
|
-
async prepare(id: SessionId, signal?: AbortSignal): Promise<SessionPreparation>
|
|
328
|
+
Freshness: once an `append` or `flush` resolves, reads started afterwards on this backend instance observe at least that prefix.
|
|
309
329
|
|
|
330
|
+
```ts cordis-catalog
|
|
310
331
|
/**
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
* identity still bound to a live Session: a balanced live log may return as a
|
|
317
|
-
* durable snapshot, while an open live turn rejects. Returned values may be
|
|
318
|
-
* shared with immutable live or prepared state and must not be mutated.
|
|
319
|
-
* Revision-based implementations may wait for one stable read/check round trip.
|
|
320
|
-
* @param id - the persisted session to reload.
|
|
321
|
-
* @returns the header and a log ending on a balanced `turn/end`.
|
|
332
|
+
* Create a new stored session and take its write ownership.
|
|
333
|
+
* @param header - the immutable header (id, version, cwd, lineage) to store.
|
|
334
|
+
* @param options - optional cancellation.
|
|
335
|
+
* @returns a `write` handle owned by the caller; close it to release ownership.
|
|
336
|
+
* @throws {SessionAlreadyExistsError} when the id already exists.
|
|
322
337
|
*/
|
|
323
|
-
abstract
|
|
338
|
+
abstract create(header: SessionHeader, options?: SessionPersistenceCreateOptions): Promise<SessionHandle>
|
|
324
339
|
|
|
325
340
|
/**
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
* @
|
|
337
|
-
* @param signal - optional cancellation for queued and backend read work.
|
|
338
|
-
* @returns the validated header and current logical event log.
|
|
341
|
+
* Open an existing stored session.
|
|
342
|
+
*
|
|
343
|
+
* `read` never takes ownership and works while another handle (or process)
|
|
344
|
+
* holds write ownership. `write` atomically claims single-writer ownership;
|
|
345
|
+
* an existing active owner rejects.
|
|
346
|
+
* @param id - the stored session to open.
|
|
347
|
+
* @param access - `read` or `write`.
|
|
348
|
+
* @param options - optional cancellation.
|
|
349
|
+
* @returns the open handle.
|
|
350
|
+
* @throws {SessionPersistenceNotFoundError} when the session does not exist.
|
|
351
|
+
* @throws {SessionAlreadyOwnedError} for `write` when ownership is taken.
|
|
339
352
|
*/
|
|
340
|
-
abstract
|
|
353
|
+
abstract open(id: SessionId, access: SessionAccess, options?: SessionPersistenceOpenOptions): Promise<SessionHandle>
|
|
341
354
|
|
|
342
355
|
/**
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
350
|
-
*
|
|
351
|
-
*
|
|
352
|
-
* (SQLite) read only the suffix; sequential media (JSONL, both encodings)
|
|
353
|
-
* still parse the whole artifact and skip forward — the primitive bounds
|
|
354
|
-
* what is RETURNED and refolded, not every backend's physical read.
|
|
355
|
-
* @param id - the persisted session to read.
|
|
356
|
-
* @param fromSeq - first event seq to include; a non-negative safe integer.
|
|
357
|
-
* @param signal - optional cancellation for queued and backend read work.
|
|
358
|
-
* @returns the header and the stored events with `seq >= fromSeq`.
|
|
356
|
+
* Flush every active write handle owned by this service instance in one
|
|
357
|
+
* durability barrier: each handle's routed live events drain durably and
|
|
358
|
+
* its session materializes, exactly as that handle's own
|
|
359
|
+
* `SessionHandle.flush` would. Read handles buffer nothing and are
|
|
360
|
+
* untouched. A handle closed concurrently counts as flushed — close itself
|
|
361
|
+
* drains durably.
|
|
362
|
+
* @returns resolution once every write handle active at the call has flushed.
|
|
363
|
+
* @throws {AggregateError} naming each session whose flush failed; the
|
|
364
|
+
* remaining handles still flush.
|
|
359
365
|
*/
|
|
360
|
-
abstract
|
|
366
|
+
abstract flush(): Promise<void>
|
|
361
367
|
|
|
362
368
|
/**
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
369
|
+
* Observe one stored session without reading its event log or taking
|
|
370
|
+
* ownership.
|
|
371
|
+
*
|
|
372
|
+
* The snapshot's `revision` is an opaque change token comparable only
|
|
373
|
+
* against revisions from the same service instance and session id: equal
|
|
374
|
+
* revisions may be treated as an unchanged log; unequal revisions promise
|
|
375
|
+
* nothing. Write-ownership churn does not change a revision. It exists for
|
|
376
|
+
* derived read-model caches keyed off `stat`/`list`; it plays no part in
|
|
377
|
+
* open, read, or resume.
|
|
378
|
+
* @param id - the stored session to observe.
|
|
379
|
+
* @param options - optional cancellation.
|
|
380
|
+
* @returns the snapshot, or `undefined` when the session does not exist.
|
|
366
381
|
*/
|
|
367
|
-
abstract
|
|
382
|
+
abstract stat(id: SessionId, options?: SessionPersistenceStatOptions): Promise<SessionPersistenceSnapshot | undefined>
|
|
368
383
|
|
|
369
384
|
/**
|
|
370
|
-
* List
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
* successful mutating {@link load} repair changes the next listed revision.
|
|
374
|
-
* Revisions also distinguish independently backed stores so backend-local
|
|
375
|
-
* counters cannot compare equal across different persistence sources.
|
|
376
|
-
* @param signal - optional cancellation for backend snapshot-listing work.
|
|
377
|
-
* @returns one header and opaque revision per materialized session without loading full logs.
|
|
385
|
+
* List every stored session visible to this process, in no promised order.
|
|
386
|
+
* @param options - optional cancellation.
|
|
387
|
+
* @returns one snapshot per stored session.
|
|
378
388
|
*/
|
|
379
|
-
abstract
|
|
389
|
+
abstract list(options?: SessionPersistenceListOptions): Promise<readonly SessionPersistenceSnapshot[]>
|
|
380
390
|
```
|
|
381
391
|
|
|
382
|
-
Types: [
|
|
392
|
+
Types: [SessionId](core.md)
|
|
383
393
|
|
|
384
|
-
Source: [`packages/session/session-persistence/src/index.ts
|
|
394
|
+
Source: [`packages/session/session-persistence/src/index.ts`](../../packages/session/session-persistence/src/index.ts)
|
|
385
395
|
<!-- END GENERATED cordis-surface -->
|