better-dsh 0.2.3 → 0.2.4
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/cordis.patch.yml +1 -1
- package/docs/50_test-reports/2026-09-06-write/345/267/245/345/205/267sandbox/345/215/207/347/272/247/351/200/217/344/274/240bug/345/244/215/345/217/221/345/217/212/346/214/202/350/265/267-/344/272/213/344/273/266/346/212/245/345/221/212.md +176 -0
- package/docs/50_test-reports/2026-09-08-hashline-edit-E_RANGE_UNVERIFIED/350/267/250/350/275/256/344/274/232/350/257/235/351/224/256/345/244/261/346/225/210-/350/257/212/346/226/255/346/212/245/345/221/212.md +226 -0
- package/docs/50_test-reports/2026-09-11-control-prompt-into-eval-description/345/256/236/346/265/213/346/212/245/345/221/212.md +222 -0
- package/docs/50_test-reports/2026-09-12-fs-scheme-resolution-/345/256/236/346/265/213/346/212/245/345/221/212.md +81 -0
- package/docs/50_test-reports/2026-09-12-url-schemes-grammar-matrix/344/270/216catalog-centralize-/345/256/236/346/265/213/346/212/245/345/221/212.md +234 -0
- package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-design/351/252/214/350/257/201/346/212/245/345/221/212.md +160 -0
- package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/345/211/247/346/234/254.md +44 -0
- package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/346/212/245/345/221/212.md +89 -0
- package/docs/50_test-reports/2026-09-12-url-schemes-/345/205/255scheme/345/206/222/347/203/237/344/270/216/350/276/271/347/225/214/345/256/236/346/265/213/346/212/245/345/221/212.md +198 -0
- package/docs/50_test-reports/2026-09-13-hashline-off/344/270/213scheme/345/217/257/350/276/276/346/200/247/345/267/245/345/205/267/351/235/242/344/270/215/345/257/271/347/247/260-/345/256/236/346/265/213/346/212/245/345/221/212.md +246 -0
- package/docs/50_test-reports/2026-09-13-preact-ui-shell/345/256/236/346/265/213/346/212/245/345/221/212.md +50 -0
- package/docs/50_test-reports/2026-09-14-4999-skill/346/270/205/345/215/225/344/270/216lsp-gate/345/256/236/346/265/213/346/212/245/345/221/212.md +63 -0
- package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-local-test-report.md +44 -0
- package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-report.md +110 -0
- package/docs/50_test-reports/upstream-dsh-0.1.5-rc.2-local-test-report.md +79 -0
- package/docs/50_test-reports/v0.2.3b-hashline-content-locator/345/256/236/346/265/213/346/212/245/345/221/212.md +73 -0
- package/docs/50_test-reports/v0.2.3c-mobile-wave/345/256/236/346/265/213/346/212/245/345/221/212.md +47 -0
- package/docs/50_test-reports/v0.2.4-ios-focus-zoom-suppression/345/256/236/346/265/213/346/212/245/345/221/212.md +158 -0
- package/docs/specs/agent/spec.md +54 -0
- package/docs/specs/ast/spec.md +34 -0
- package/docs/specs/compaction-recall/spec.md +46 -0
- package/docs/specs/ctx/spec.md +107 -0
- package/docs/specs/dsh/spec.md +47 -0
- package/docs/specs/dvc/spec.md +87 -0
- package/docs/specs/escalation-guidance/spec.md +44 -0
- package/docs/specs/fs-scheme-resolution/spec.md +37 -0
- package/docs/specs/hash-edit/spec.md +41 -0
- package/docs/specs/http-read/spec.md +73 -0
- package/docs/specs/kernel-provisioning/spec.md +53 -0
- package/docs/specs/lsp/spec.md +121 -0
- package/docs/specs/mobile-layout/spec.md +108 -0
- package/docs/specs/model-failover/spec.md +20 -0
- package/docs/specs/preact-ui-shell/spec.md +22 -0
- package/docs/specs/repl-dispatch-resilience/spec.md +21 -0
- package/docs/specs/skill/spec.md +58 -0
- package/docs/specs/tool-surface/spec.md +222 -0
- package/docs/specs/url-schema/spec.md +148 -0
- package/docs/specs/web-trust-fence/spec.md +43 -0
- package/docs/upstream-dsh-0.1.5-rc.2-report.md +156 -0
- package/dsh-docs/AGENTS.md +75 -0
- package/dsh-docs/agent-lifecycle.md +84 -0
- package/dsh-docs/agent-lifecycle.zh.md +86 -0
- package/dsh-docs/api-gateway.md +164 -0
- package/dsh-docs/api-gateway.zh.md +164 -0
- package/dsh-docs/architecture.md +150 -0
- package/dsh-docs/architecture.zh.md +154 -0
- package/dsh-docs/capability-seams.md +543 -0
- package/dsh-docs/capability-seams.zh.md +545 -0
- package/dsh-docs/config-catalog.md +3473 -0
- package/dsh-docs/config-catalog.zh.md +3474 -0
- package/dsh-docs/cookbook/adding-a-package.md +117 -0
- package/dsh-docs/cookbook/adding-a-package.zh.md +119 -0
- package/dsh-docs/cookbook/adding-a-remote-api.md +197 -0
- package/dsh-docs/cookbook/adding-a-remote-api.zh.md +197 -0
- package/dsh-docs/cookbook/adding-a-session-format-version.md +109 -0
- package/dsh-docs/cookbook/adding-a-session-format-version.zh.md +109 -0
- package/dsh-docs/cookbook/adding-a-settings-card.md +102 -0
- package/dsh-docs/cookbook/adding-a-settings-card.zh.md +102 -0
- package/dsh-docs/cookbook/adding-a-tool.md +101 -0
- package/dsh-docs/cookbook/adding-a-tool.zh.md +103 -0
- package/dsh-docs/cookbook/adding-a-vendored-package.md +59 -0
- package/dsh-docs/cookbook/adding-a-vendored-package.zh.md +59 -0
- package/dsh-docs/cookbook/adding-an-llm-adapter.md +43 -0
- package/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +43 -0
- package/dsh-docs/cookbook/extension-cookbook.md +132 -0
- package/dsh-docs/cookbook/extension-cookbook.zh.md +136 -0
- package/dsh-docs/cookbook/maintaining-dsh-code-review.md +64 -0
- package/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +64 -0
- package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
- package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
- package/dsh-docs/cordis-api/context.md +364 -0
- package/dsh-docs/cordis-api/context.zh.md +366 -0
- package/dsh-docs/cordis-api/events.md +207 -0
- package/dsh-docs/cordis-api/events.zh.md +209 -0
- package/dsh-docs/cordis-api/fiber.md +375 -0
- package/dsh-docs/cordis-api/fiber.zh.md +377 -0
- package/dsh-docs/cordis-api/inherited.md +39 -0
- package/dsh-docs/cordis-api/registry.md +152 -0
- package/dsh-docs/cordis-api/registry.zh.md +154 -0
- package/dsh-docs/cordis-api/service.md +102 -0
- package/dsh-docs/cordis-api/service.zh.md +104 -0
- package/dsh-docs/cordis-primer.md +45 -0
- package/dsh-docs/cordis-primer.zh.md +51 -0
- package/dsh-docs/cordis-tutorial/01-first-plugin.md +95 -0
- package/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +95 -0
- package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
- package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
- package/dsh-docs/cordis-tutorial/03-services.md +98 -0
- package/dsh-docs/cordis-tutorial/03-services.zh.md +98 -0
- package/dsh-docs/cordis-tutorial/04-events.md +144 -0
- package/dsh-docs/cordis-tutorial/04-events.zh.md +144 -0
- package/dsh-docs/cordis-tutorial/05-config.md +84 -0
- package/dsh-docs/cordis-tutorial/05-config.zh.md +84 -0
- package/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +113 -0
- package/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
- package/dsh-docs/cordis-tutorial/07-into-the-harness.md +108 -0
- package/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +108 -0
- package/dsh-docs/cordis-tutorial/index.md +60 -0
- package/dsh-docs/cordis-tutorial/index.zh.md +62 -0
- package/dsh-docs/deepseek-llm-api-wire-extensions.md +163 -0
- package/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +163 -0
- package/dsh-docs/defensive-patterns.md +33 -0
- package/dsh-docs/defensive-patterns.zh.md +35 -0
- package/dsh-docs/development.md +167 -0
- package/dsh-docs/development.zh.md +173 -0
- package/dsh-docs/event-producer-consumer.md +86 -0
- package/dsh-docs/event-producer-consumer.zh.md +88 -0
- package/dsh-docs/glossary.md +45 -0
- package/dsh-docs/glossary.zh.md +45 -0
- package/dsh-docs/graph-atlas.md +22 -0
- package/dsh-docs/graph-atlas.zh.md +24 -0
- package/dsh-docs/i18n/README.md +60 -0
- package/dsh-docs/i18n/README.zh.md +62 -0
- package/dsh-docs/i18n/style-samples.md +87 -0
- package/dsh-docs/i18n/terminology.md +214 -0
- package/dsh-docs/i18n/translation-prompt.md +263 -0
- package/dsh-docs/i18n/translation-rules.md +69 -0
- package/dsh-docs/i18n/translation-rules.zh.md +69 -0
- package/dsh-docs/module-graph.md +1411 -0
- package/dsh-docs/module-graph.zh.md +1413 -0
- package/dsh-docs/persistence-catalog.md +1075 -0
- package/dsh-docs/persistence-catalog.zh.md +1077 -0
- package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +113 -0
- package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
- package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
- package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
- package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
- package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
- package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
- package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
- package/dsh-docs/postmortem/README.md +18 -0
- package/dsh-docs/postmortem/README.zh.md +18 -0
- package/dsh-docs/rescope.md +53 -0
- package/dsh-docs/rescope.zh.md +53 -0
- package/dsh-docs/session-format-status.md +47 -0
- package/dsh-docs/session-format-status.zh.md +47 -0
- package/dsh-docs/subsystems/README.md +61 -0
- package/dsh-docs/subsystems/README.zh.md +61 -0
- package/dsh-docs/subsystems/agent-team.md +207 -0
- package/dsh-docs/subsystems/agent-team.zh.md +207 -0
- package/dsh-docs/subsystems/approval.md +170 -0
- package/dsh-docs/subsystems/approval.zh.md +170 -0
- package/dsh-docs/subsystems/attachment.md +351 -0
- package/dsh-docs/subsystems/attachment.zh.md +351 -0
- package/dsh-docs/subsystems/client-modules.md +168 -0
- package/dsh-docs/subsystems/client-modules.zh.md +168 -0
- package/dsh-docs/subsystems/client-resources.md +91 -0
- package/dsh-docs/subsystems/client-resources.zh.md +91 -0
- package/dsh-docs/subsystems/code-runtime.md +195 -0
- package/dsh-docs/subsystems/code-runtime.zh.md +195 -0
- package/dsh-docs/subsystems/commands.md +219 -0
- package/dsh-docs/subsystems/commands.zh.md +219 -0
- package/dsh-docs/subsystems/compaction.md +238 -0
- package/dsh-docs/subsystems/compaction.zh.md +238 -0
- package/dsh-docs/subsystems/conversation.md +258 -0
- package/dsh-docs/subsystems/conversation.zh.md +258 -0
- package/dsh-docs/subsystems/core.md +1209 -0
- package/dsh-docs/subsystems/core.zh.md +1219 -0
- package/dsh-docs/subsystems/credentials.md +329 -0
- package/dsh-docs/subsystems/credentials.zh.md +329 -0
- package/dsh-docs/subsystems/extensions.md +382 -0
- package/dsh-docs/subsystems/extensions.zh.md +382 -0
- package/dsh-docs/subsystems/feedback.md +266 -0
- package/dsh-docs/subsystems/feedback.zh.md +266 -0
- package/dsh-docs/subsystems/filesystem.md +505 -0
- package/dsh-docs/subsystems/filesystem.zh.md +505 -0
- package/dsh-docs/subsystems/goal.md +277 -0
- package/dsh-docs/subsystems/goal.zh.md +277 -0
- package/dsh-docs/subsystems/invariants.md +88 -0
- package/dsh-docs/subsystems/invariants.zh.md +88 -0
- package/dsh-docs/subsystems/jobs.md +290 -0
- package/dsh-docs/subsystems/jobs.zh.md +290 -0
- package/dsh-docs/subsystems/llm-streaming.md +1080 -0
- package/dsh-docs/subsystems/llm-streaming.zh.md +1086 -0
- package/dsh-docs/subsystems/lsp.md +202 -0
- package/dsh-docs/subsystems/lsp.zh.md +202 -0
- package/dsh-docs/subsystems/permission-presets.md +131 -0
- package/dsh-docs/subsystems/permission-presets.zh.md +131 -0
- package/dsh-docs/subsystems/persistence.md +395 -0
- package/dsh-docs/subsystems/persistence.zh.md +395 -0
- package/dsh-docs/subsystems/plan.md +87 -0
- package/dsh-docs/subsystems/plan.zh.md +87 -0
- package/dsh-docs/subsystems/sandbox.md +220 -0
- package/dsh-docs/subsystems/sandbox.zh.md +220 -0
- package/dsh-docs/subsystems/schedule.md +192 -0
- package/dsh-docs/subsystems/schedule.zh.md +192 -0
- package/dsh-docs/subsystems/scope.md +59 -0
- package/dsh-docs/subsystems/scope.zh.md +59 -0
- package/dsh-docs/subsystems/session-projection.md +354 -0
- package/dsh-docs/subsystems/session-projection.zh.md +354 -0
- package/dsh-docs/subsystems/session-query.md +509 -0
- package/dsh-docs/subsystems/session-query.zh.md +509 -0
- package/dsh-docs/subsystems/session-reference.md +219 -0
- package/dsh-docs/subsystems/session-reference.zh.md +219 -0
- package/dsh-docs/subsystems/session-telemetry.md +194 -0
- package/dsh-docs/subsystems/session-telemetry.zh.md +194 -0
- package/dsh-docs/subsystems/session-title.md +204 -0
- package/dsh-docs/subsystems/session-title.zh.md +204 -0
- package/dsh-docs/subsystems/session.md +1155 -0
- package/dsh-docs/subsystems/session.zh.md +1159 -0
- package/dsh-docs/subsystems/settings.md +405 -0
- package/dsh-docs/subsystems/settings.zh.md +405 -0
- package/dsh-docs/subsystems/shell.md +303 -0
- package/dsh-docs/subsystems/shell.zh.md +303 -0
- package/dsh-docs/subsystems/sidebar-right.md +148 -0
- package/dsh-docs/subsystems/sidebar-right.zh.md +148 -0
- package/dsh-docs/subsystems/skills.md +354 -0
- package/dsh-docs/subsystems/skills.zh.md +354 -0
- package/dsh-docs/subsystems/slots.md +175 -0
- package/dsh-docs/subsystems/slots.zh.md +175 -0
- package/dsh-docs/subsystems/spill.md +117 -0
- package/dsh-docs/subsystems/spill.zh.md +117 -0
- package/dsh-docs/subsystems/storage.md +260 -0
- package/dsh-docs/subsystems/storage.zh.md +260 -0
- package/dsh-docs/subsystems/subagent.md +766 -0
- package/dsh-docs/subsystems/subagent.zh.md +770 -0
- package/dsh-docs/subsystems/subprocess.md +324 -0
- package/dsh-docs/subsystems/subprocess.zh.md +324 -0
- package/dsh-docs/subsystems/system-prompt.md +220 -0
- package/dsh-docs/subsystems/system-prompt.zh.md +220 -0
- package/dsh-docs/subsystems/terminal.md +184 -0
- package/dsh-docs/subsystems/terminal.zh.md +184 -0
- package/dsh-docs/subsystems/todo.md +32 -0
- package/dsh-docs/subsystems/todo.zh.md +32 -0
- package/dsh-docs/subsystems/token-meter.md +105 -0
- package/dsh-docs/subsystems/token-meter.zh.md +105 -0
- package/dsh-docs/subsystems/tools.md +720 -0
- package/dsh-docs/subsystems/tools.zh.md +720 -0
- package/dsh-docs/subsystems/typert.md +343 -0
- package/dsh-docs/subsystems/typert.zh.md +343 -0
- package/dsh-docs/subsystems/user-questions.md +178 -0
- package/dsh-docs/subsystems/user-questions.zh.md +178 -0
- package/dsh-docs/subsystems/web-client.md +95 -0
- package/dsh-docs/subsystems/web-client.zh.md +95 -0
- package/dsh-docs/subsystems/web-server.md +154 -0
- package/dsh-docs/subsystems/web-server.zh.md +154 -0
- package/dsh-docs/subsystems/web.md +206 -0
- package/dsh-docs/subsystems/web.zh.md +206 -0
- package/dsh-docs/subsystems/webhook.md +70 -0
- package/dsh-docs/subsystems/webhook.zh.md +70 -0
- package/dsh-docs/subsystems/workflow.md +278 -0
- package/dsh-docs/subsystems/workflow.zh.md +278 -0
- package/dsh-docs/subsystems/workspace.md +321 -0
- package/dsh-docs/subsystems/workspace.zh.md +321 -0
- package/dsh-docs/testing.md +54 -0
- package/dsh-docs/testing.zh.md +54 -0
- package/dsh-docs/tool-catalog.md +2225 -0
- package/dsh-docs/tool-catalog.zh.md +2233 -0
- package/dsh-docs/tool-execution-pipeline.md +62 -0
- package/dsh-docs/tool-execution-pipeline.zh.md +64 -0
- package/dsh-docs/user/develop/basic/config.md +106 -0
- package/dsh-docs/user/develop/basic/config.zh.md +106 -0
- package/dsh-docs/user/develop/basic/index.md +144 -0
- package/dsh-docs/user/develop/basic/index.zh.md +144 -0
- package/dsh-docs/user/develop/basic/publish.md +183 -0
- package/dsh-docs/user/develop/basic/publish.zh.md +183 -0
- package/dsh-docs/user/develop/basic/tool.md +52 -0
- package/dsh-docs/user/develop/basic/tool.zh.md +52 -0
- package/dsh-docs/user/develop/framework/events.md +143 -0
- package/dsh-docs/user/develop/framework/events.zh.md +143 -0
- package/dsh-docs/user/develop/framework/index.md +137 -0
- package/dsh-docs/user/develop/framework/index.zh.md +137 -0
- package/dsh-docs/user/develop/framework/service.md +148 -0
- package/dsh-docs/user/develop/framework/service.zh.md +150 -0
- package/dsh-docs/user/develop/practice/dynamic-cordis.md +15 -0
- package/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +15 -0
- package/dsh-docs/user/develop/practice/index.md +155 -0
- package/dsh-docs/user/develop/practice/index.zh.md +155 -0
- package/dsh-docs/user/develop/practice/llm-adapter.md +189 -0
- package/dsh-docs/user/develop/practice/llm-adapter.zh.md +189 -0
- package/dsh-docs/user/guide/github-review.md +102 -0
- package/dsh-docs/user/guide/github-review.zh.md +102 -0
- package/dsh-docs/user/guide/index.md +30 -0
- package/dsh-docs/user/guide/index.zh.md +30 -0
- package/dsh-docs/user/guide/mcp-memory.md +101 -0
- package/dsh-docs/user/guide/mcp-memory.zh.md +101 -0
- package/dsh-docs/user/guide/network-proxy.md +85 -0
- package/dsh-docs/user/guide/network-proxy.zh.md +85 -0
- package/dsh-docs/user/guide/providers.md +190 -0
- package/dsh-docs/user/guide/providers.zh.md +190 -0
- package/dsh-docs/user/guide/python-sdk.md +150 -0
- package/dsh-docs/user/guide/python-sdk.zh.md +150 -0
- package/dsh-docs/user/guide/schedule.md +21 -0
- package/dsh-docs/user/guide/schedule.zh.md +21 -0
- package/dsh-docs/user/index.md +11 -0
- package/dsh-docs/user/index.zh.md +11 -0
- package/dsh-docs/web-styling.md +29 -0
- package/dsh-docs/web-styling.zh.md +29 -0
- package/eval-description.md +33 -0
- package/lib/client/index.js +327 -88
- package/lib/fs-aware/sandbox-plugin.d.ts +71 -0
- package/lib/fs-aware/sandbox-plugin.js +249 -0
- package/lib/index.d.ts +22 -22
- package/lib/index.js +3095 -3204
- package/lib/lsp-server-registry-DkaYmTwt.js +972 -0
- package/lib/lsp-server-registry-_hk-Wcia.js +3 -0
- package/lib/py-sdk-Chvy92MB.js +178 -0
- package/lib/py-sdk.d.ts +19 -2
- package/lib/py-sdk.js +2 -2
- package/lib/wrap-JFjcWwZf.js +747 -0
- package/package.json +9 -3
- package/url-schemes-instruction.md +22 -0
- package/control-prompt.md +0 -37
- package/docs/50_test-reports/v0.1.8d_artifacts/README.md +0 -138
- package/docs/50_test-reports/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
- package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
- package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
- package/docs/50_test-reports/v0.1.8d_artifacts/functions.json +0 -592
- package/docs/50_test-reports/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
- package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
- package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
- package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
- package/docs/50_test-reports/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
- package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
- package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
- package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
- package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
- package/docs/50_test-reports/v0.2.0b_artifacts/hashline-probe.md +0 -5
- package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
- package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
- package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
- package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
- package/docs/60_exploration-and-research/cordis-research.md +0 -350
- package/docs/60_exploration-and-research/dsh-web-profile-package-map.md +0 -186
- package/docs/60_exploration-and-research/dsh-web-ui-slot-system-research.md +0 -310
- package/docs/60_exploration-and-research/dsh-webui-strip-boundary-research.md +0 -300
- package/docs/60_exploration-and-research/ios-chat-app-bridge-research.md +0 -324
- package/docs/60_exploration-and-research/web-frontend-composability-research.md +0 -191
- package/docs/REPL-/345/267/245/345/205/267/350/260/203/347/224/250-/346/210/252/346/226/255/350/257/212/346/226/255.md +0 -110
- package/docs/adr/0001-bridge-tool-layer-not-service-layer.md +0 -14
- package/docs/adr/0002-masking-is-presentation-only.md +0 -15
- package/docs/plans/A2A-messaging-channel-test-archive.md +0 -256
- package/docs/plans/code-mode-vs-rlm-ipython-comparison.md +0 -137
- package/docs/plans/dashr-blueprint-review.md +0 -201
- package/docs/plans/dashr-blueprint.md +0 -561
- package/docs/plans/dashr-compaction-window-and-archive.md +0 -307
- package/docs/plans/dashr-profile-layer-feasibility.md +0 -367
- package/docs/plans/dashr-sandbox-escalation-semantics-gap.md +0 -171
- package/docs/plans/dashr-security-sandbox-analysis.md +0 -187
- package/docs/plans/dashr-surface-invariant-and-omp-imports.md +0 -97
- package/docs/plans/ipython-kernel-interactive-interface-test-report.md +0 -152
- package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft.md +0 -146
- package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v3.md +0 -50
- package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v4.md +0 -79
- package/docs/plans/kernel-refactoring/Dash-vs-PrimeAgent-systemprompt-toolcatalog-comparison.md +0 -138
- package/docs/plans/kernel-refactoring/RLM-system-prompt-injection-gap-report.md +0 -161
- package/docs/plans/kernel-refactoring/V0.1.5-development-plan.md +0 -109
- package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_dsh.md +0 -50
- package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_prime.md +0 -113
- package/docs/plans/recallable-compaction.md +0 -147
- package/docs/plans/spike-tag-repro.mjs +0 -102
- package/docs/plans/upstream-analysis.md +0 -128
- package/docs/v0.1.8-improved-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -142
- package/docs/v0.1.8-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -193
- package/docs/v0.1.8b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -96
- package/docs/v0.1.8c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -127
- package/docs/v0.1.8d-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -150
- package/docs/v0.1.8d_artifacts/README.md +0 -138
- package/docs/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
- package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
- package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
- package/docs/v0.1.8d_artifacts/functions.json +0 -592
- package/docs/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
- package/docs/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
- package/docs/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
- package/docs/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
- package/docs/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
- package/docs/v0.1.8e-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -224
- package/docs/v0.1.9a-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -168
- package/docs/v0.2.0b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -123
- package/docs/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
- package/docs/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
- package/docs/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
- package/docs/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
- package/docs/v0.2.0b_artifacts/hashline-probe.md +0 -5
- package/docs/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
- package/docs/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
- package/docs/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
- package/docs/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
- package/docs/v0.2.1-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -110
- package/docs/v0.2.1b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -86
- package/docs/v0.2.1c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -66
- package/lib/py-sdk-BCaOGYz7.d.ts +0 -125
- package/lib/py-sdk-CbgYiX8O.js +0 -691
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Session References
|
|
2
|
+
|
|
3
|
+
English | [中文](session-reference.zh.md)
|
|
4
|
+
|
|
5
|
+
Host-backed file discovery plus structured cross-session reference requests and prepared message contexts. The [file-reference contract](../../packages/context/file-reference) owns path-only completion records and grammar; the [session-reference contract](../../packages/context/session-reference) defines canonical URIs, current-surface projection, tag-safe JSON and byte retention, stable errors, and the untrusted model prompt. Host adapters use these types instead of passing their UI mention syntax into the agent core.
|
|
6
|
+
|
|
7
|
+
Sources: [`packages/context/file-reference/src/types.ts`](../../packages/context/file-reference/src/types.ts) · [`packages/context/session-reference/src/types.ts`](../../packages/context/session-reference/src/types.ts)
|
|
8
|
+
|
|
9
|
+
## File candidates
|
|
10
|
+
|
|
11
|
+
`FileReferenceCandidate` is the path-only discovery result. The addressed agent supplies the working-directory scope; providers decide ranking and namespace access without reading file contents.
|
|
12
|
+
|
|
13
|
+
```ts type-equiv
|
|
14
|
+
/** One path-only completion candidate inside the target session cwd. */
|
|
15
|
+
interface FileReferenceCandidate {
|
|
16
|
+
/** User-facing path accepted by normal prompts and filesystem tools. */
|
|
17
|
+
path: string
|
|
18
|
+
/** Directories keep completion open; files finish the mention. */
|
|
19
|
+
kind: 'file' | 'directory'
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Inputs and candidates
|
|
24
|
+
|
|
25
|
+
`SessionReferenceInput` is the host-independent selection. The id is authoritative; the label is display metadata carried into the snapshot.
|
|
26
|
+
|
|
27
|
+
```ts type-equiv
|
|
28
|
+
/** One source session selected by a host. */
|
|
29
|
+
interface SessionReferenceInput {
|
|
30
|
+
/** Opaque source session identity. */
|
|
31
|
+
sessionId: SessionId
|
|
32
|
+
/** Optional user-facing mention label. */
|
|
33
|
+
label?: string
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`SessionReferenceCandidate` is host-facing discovery output. Its label uses the latest session title when present, and filtering searches that label alongside session id and cwd, never transcript text.
|
|
38
|
+
|
|
39
|
+
```ts type-equiv
|
|
40
|
+
/** One host-facing candidate from exact session metadata. */
|
|
41
|
+
interface SessionReferenceCandidate {
|
|
42
|
+
/** Opaque source session identity. */
|
|
43
|
+
sessionId: SessionId
|
|
44
|
+
/** Latest log-backed title, falling back to the opaque session id. */
|
|
45
|
+
label: string
|
|
46
|
+
/** Source session working directory, when recorded. */
|
|
47
|
+
cwd?: string
|
|
48
|
+
/**
|
|
49
|
+
* True when {@link SessionReferenceCandidate.cwd} is recorded and equals the
|
|
50
|
+
* requesting agent's. Hosts that only surface a distinguishing location
|
|
51
|
+
* read this instead of comparing paths they never received.
|
|
52
|
+
*/
|
|
53
|
+
sameWorkspace: boolean
|
|
54
|
+
/** Source session creation time in Unix epoch milliseconds. */
|
|
55
|
+
createdAt: number
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The `sessionReferenceResolver/candidates` Remote method serves the same discovery to browser consumers and attaches each candidate's canonical prompt mention.
|
|
60
|
+
|
|
61
|
+
```ts type-equiv
|
|
62
|
+
/** One discovery candidate carrying its canonical prompt mention. */
|
|
63
|
+
interface SessionReferenceMentionCandidate extends SessionReferenceCandidate {
|
|
64
|
+
/** Canonical `@[label](dsh-session:…)` mention serialized into the prompt draft. */
|
|
65
|
+
mention: string
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Prepared messages
|
|
70
|
+
|
|
71
|
+
Preparation preserves readable current-message content and returns at most one aggregated context. Its durable source records keep `capturedThroughSeq` as a coordinate in the referenced Session's original generation; they never reinterpret it as a seq in the containing Session. `capturedFormatVersion` records that generation, with absence meaning released format v0.
|
|
72
|
+
|
|
73
|
+
```ts type-equiv
|
|
74
|
+
/** Durable source session, cited event seqs, and snapshot facts for prepared cross-session context. */
|
|
75
|
+
interface SessionReferenceSource {
|
|
76
|
+
kind: 'session-reference'
|
|
77
|
+
/** Material lifted out of another session's log (`recall` context form). */
|
|
78
|
+
form: 'recall'
|
|
79
|
+
version: 1
|
|
80
|
+
references: {
|
|
81
|
+
sessionId: string
|
|
82
|
+
label: string
|
|
83
|
+
/** Source Session format generation; absence identifies version 0. */
|
|
84
|
+
capturedFormatVersion?: number
|
|
85
|
+
capturedThroughSeq: OptionalSessionSeq
|
|
86
|
+
compacted: boolean
|
|
87
|
+
originalMessages: number
|
|
88
|
+
retainedMessages: number
|
|
89
|
+
omittedMessages: number
|
|
90
|
+
omittedBytes: number
|
|
91
|
+
truncated: boolean
|
|
92
|
+
inputIndex: number
|
|
93
|
+
}[]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```ts type-equiv
|
|
98
|
+
/** Direct message content and optional referenced-session context. */
|
|
99
|
+
interface PreparedReferencedMessage {
|
|
100
|
+
/** Readable message content after host mention tokens are removed. */
|
|
101
|
+
content: ContentBlock[]
|
|
102
|
+
/** Aggregated untrusted snapshot, absent when the message has no references. */
|
|
103
|
+
additionalContext?: UserMessage
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Errors
|
|
108
|
+
|
|
109
|
+
`SessionReferenceError.code` separates invalid configuration or input, self-reference, count limits, source-read failure, budget failure, and cancellation. Host protocols map these codes to their own error envelopes without inspecting prompt bytes.
|
|
110
|
+
|
|
111
|
+
```ts type-equiv
|
|
112
|
+
/** Stable failure codes exposed to host adapters. */
|
|
113
|
+
type SessionReferenceErrorCode =
|
|
114
|
+
| 'SESSION_REFERENCE_INVALID_CONFIG'
|
|
115
|
+
| 'SESSION_REFERENCE_INVALID_REFERENCE'
|
|
116
|
+
| 'SESSION_REFERENCE_SELF_REFERENCE'
|
|
117
|
+
| 'SESSION_REFERENCE_TOO_MANY'
|
|
118
|
+
| 'SESSION_REFERENCE_READ_FAILED'
|
|
119
|
+
| 'SESSION_REFERENCE_BUDGET_EXCEEDED'
|
|
120
|
+
| 'SESSION_REFERENCE_CANCELLED'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
124
|
+
|
|
125
|
+
<a id="cordis-surface"></a>
|
|
126
|
+
|
|
127
|
+
## Cordis API
|
|
128
|
+
|
|
129
|
+
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).
|
|
130
|
+
|
|
131
|
+
<a id="ctxfilereferences--filereferenceservice-abstract-seam"></a>
|
|
132
|
+
|
|
133
|
+
### `ctx.fileReferences` — `FileReferenceService` (abstract seam)
|
|
134
|
+
|
|
135
|
+
Host capability for cancellable file-reference discovery.
|
|
136
|
+
|
|
137
|
+
```ts cordis-catalog
|
|
138
|
+
/**
|
|
139
|
+
* List file and directory candidates for one agent's working directory.
|
|
140
|
+
* @param agent - target agent whose session cwd bounds discovery.
|
|
141
|
+
* @param query - path text following `@` or `@"`.
|
|
142
|
+
* @param signal - caller cancellation.
|
|
143
|
+
* @returns deterministic path-only candidates.
|
|
144
|
+
*/
|
|
145
|
+
abstract list( agent: Agent, query: string, signal: AbortSignal, ): Promise<FileReferenceCandidate[]>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Types: [Agent](core.md)
|
|
149
|
+
|
|
150
|
+
Source: [`packages/context/file-reference/src/index.ts`](../../packages/context/file-reference/src/index.ts)
|
|
151
|
+
|
|
152
|
+
<a id="ctxsessionfilereferences--sessionfilereferences"></a>
|
|
153
|
+
|
|
154
|
+
### `ctx.sessionFileReferences` — `SessionFileReferences`
|
|
155
|
+
|
|
156
|
+
Host Remote adapter over the composed file-reference provider.
|
|
157
|
+
|
|
158
|
+
```ts cordis-catalog
|
|
159
|
+
/**
|
|
160
|
+
* List file and directory candidates for one Agent's working directory.
|
|
161
|
+
* @param agent - target Agent resolved from the Session identity on the wire.
|
|
162
|
+
* @param query - path text following `@` or `@"`.
|
|
163
|
+
* @param signal - caller cancellation.
|
|
164
|
+
* @returns deterministic path-only candidates from the composed provider.
|
|
165
|
+
*/
|
|
166
|
+
@Remote list( agent: Agent, query: string, signal: AbortSignal, ): Promise<FileReferenceCandidate[]>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Types: [Agent](core.md)
|
|
170
|
+
|
|
171
|
+
Source: [`packages/api/session-controller/src/file-references.ts`](../../packages/api/session-controller/src/file-references.ts)
|
|
172
|
+
|
|
173
|
+
<a id="ctxsessionreferenceresolver--sessionreferenceresolver"></a>
|
|
174
|
+
|
|
175
|
+
### `ctx.sessionReferenceResolver` — `SessionReferenceResolver`
|
|
176
|
+
|
|
177
|
+
Exact-read consumer that prepares immutable cross-session message context.
|
|
178
|
+
|
|
179
|
+
```ts cordis-catalog
|
|
180
|
+
/**
|
|
181
|
+
* List reference candidates, ranked by working-directory affinity.
|
|
182
|
+
*
|
|
183
|
+
* Discovery runs at keystroke rate, so a title only ever comes from a
|
|
184
|
+
* projection read: see {@link SessionReferenceResolver.projectedTitle} for
|
|
185
|
+
* which sessions can answer one and which fall back to their id.
|
|
186
|
+
* @param agent - target agent; self is excluded and its cwd drives ranking.
|
|
187
|
+
* @param query - optional case-insensitive session-id/cwd/title substring.
|
|
188
|
+
* @param limit - optional positive result cap.
|
|
189
|
+
* @param signal - optional cancellation boundary for host autocomplete teardown.
|
|
190
|
+
* @returns candidates labeled by latest title or, when absent, session id.
|
|
191
|
+
*/
|
|
192
|
+
async listCandidates( agent: Agent, query: string = '', limit: number = this.config.candidateLimit, signal?: AbortSignal, ): Promise<SessionReferenceCandidate[]>
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Remote face of {@link listCandidates}: the configured candidate limit
|
|
196
|
+
* applies, and every candidate carries the canonical mention a host inserts
|
|
197
|
+
* into the prompt draft.
|
|
198
|
+
* @param agent - target agent; self is excluded and its cwd drives ranking.
|
|
199
|
+
* @param query - optional case-insensitive session-id/cwd/title substring.
|
|
200
|
+
* @param signal - caller cancellation.
|
|
201
|
+
* @returns mention-carrying candidates in rank order.
|
|
202
|
+
*/
|
|
203
|
+
@Remote('candidates') async remoteExportCandidates( agent: Agent, query: string, signal: AbortSignal, ): Promise<SessionReferenceMentionCandidate[]>
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Snapshot all references for one accepted direct message and return one aggregated durable context.
|
|
207
|
+
* @param agent - target agent; references to it are rejected.
|
|
208
|
+
* @param content - already host-normalized readable message content.
|
|
209
|
+
* @param references - structured source sessions in mention order.
|
|
210
|
+
* @param signal - optional cancellation boundary for the active turn.
|
|
211
|
+
* @returns detached content and optional referenced-session context.
|
|
212
|
+
*/
|
|
213
|
+
async prepare( agent: Agent, content: ContentBlock[], references: SessionReferenceInput[], signal?: AbortSignal, ): Promise<PreparedReferencedMessage>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Types: [Agent](core.md) · [ContentBlock](llm-streaming.md)
|
|
217
|
+
|
|
218
|
+
Source: [`packages/context/session-reference/src/index.ts`](../../packages/context/session-reference/src/index.ts)
|
|
219
|
+
<!-- END GENERATED cordis-surface -->
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# 会话引用
|
|
2
|
+
|
|
3
|
+
[English](session-reference.md) | 中文
|
|
4
|
+
|
|
5
|
+
由 Host 支撑的文件发现,以及结构化的跨会话引用请求与准备后的消息上下文。[文件引用约定](../../packages/context/file-reference)负责仅含路径的补全记录与语法;[会话引用约定](../../packages/context/session-reference)定义规范 URI、当前表层投影、标签安全的 JSON 与字节保留、稳定错误和不可信的模型提示词。宿主适配器使用这些类型,而不会把各自 UI 的提及语法传入 agent(智能体)核心。
|
|
6
|
+
|
|
7
|
+
来源:[`packages/context/file-reference/src/types.ts`](../../packages/context/file-reference/src/types.ts) · [`packages/context/session-reference/src/types.ts`](../../packages/context/session-reference/src/types.ts)
|
|
8
|
+
|
|
9
|
+
## 文件候选项
|
|
10
|
+
|
|
11
|
+
`FileReferenceCandidate` 是仅含路径的发现结果。被寻址的 agent 提供工作目录范围;提供方负责排序和命名空间访问,但不会读取文件内容。
|
|
12
|
+
|
|
13
|
+
```ts type-equiv
|
|
14
|
+
/** One path-only completion candidate inside the target session cwd. */
|
|
15
|
+
interface FileReferenceCandidate {
|
|
16
|
+
/** User-facing path accepted by normal prompts and filesystem tools. */
|
|
17
|
+
path: string
|
|
18
|
+
/** Directories keep completion open; files finish the mention. */
|
|
19
|
+
kind: 'file' | 'directory'
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 输入与候选项
|
|
24
|
+
|
|
25
|
+
`SessionReferenceInput` 是与宿主无关的选择。id 具有权威性;label 是随快照携带的显示元数据。
|
|
26
|
+
|
|
27
|
+
```ts type-equiv
|
|
28
|
+
/** One source session selected by a host. */
|
|
29
|
+
interface SessionReferenceInput {
|
|
30
|
+
/** Opaque source session identity. */
|
|
31
|
+
sessionId: SessionId
|
|
32
|
+
/** Optional user-facing mention label. */
|
|
33
|
+
label?: string
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`SessionReferenceCandidate` 是面向宿主的发现输出。存在最新会话标题时,它的 label 使用该标题;筛选搜索该 label 以及 session id 和 cwd,绝不搜索 transcript(文本记录)。
|
|
38
|
+
|
|
39
|
+
```ts type-equiv
|
|
40
|
+
/** One host-facing candidate from exact session metadata. */
|
|
41
|
+
interface SessionReferenceCandidate {
|
|
42
|
+
/** Opaque source session identity. */
|
|
43
|
+
sessionId: SessionId
|
|
44
|
+
/** Latest log-backed title, falling back to the opaque session id. */
|
|
45
|
+
label: string
|
|
46
|
+
/** Source session working directory, when recorded. */
|
|
47
|
+
cwd?: string
|
|
48
|
+
/**
|
|
49
|
+
* True when {@link SessionReferenceCandidate.cwd} is recorded and equals the
|
|
50
|
+
* requesting agent's. Hosts that only surface a distinguishing location
|
|
51
|
+
* read this instead of comparing paths they never received.
|
|
52
|
+
*/
|
|
53
|
+
sameWorkspace: boolean
|
|
54
|
+
/** Source session creation time in Unix epoch milliseconds. */
|
|
55
|
+
createdAt: number
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`sessionReferenceResolver/candidates` Remote 方法向浏览器消费方提供同一发现能力,并为每个候选附上规范提示词 mention。
|
|
60
|
+
|
|
61
|
+
```ts type-equiv
|
|
62
|
+
/** One discovery candidate carrying its canonical prompt mention. */
|
|
63
|
+
interface SessionReferenceMentionCandidate extends SessionReferenceCandidate {
|
|
64
|
+
/** Canonical `@[label](dsh-session:…)` mention serialized into the prompt draft. */
|
|
65
|
+
mention: string
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 准备后的消息
|
|
70
|
+
|
|
71
|
+
准备过程保留可读的当前消息内容,并最多返回一个聚合上下文。其持久 source 记录会把 `capturedThroughSeq` 保留为被引用 Session 原始 generation 中的坐标,绝不会把它重新解释为所在 Session 的 seq。`capturedFormatVersion` 记录该 generation;缺失表示已发布格式 v0。
|
|
72
|
+
|
|
73
|
+
```ts type-equiv
|
|
74
|
+
/** Durable source session, cited event seqs, and snapshot facts for prepared cross-session context. */
|
|
75
|
+
interface SessionReferenceSource {
|
|
76
|
+
kind: 'session-reference'
|
|
77
|
+
/** Material lifted out of another session's log (`recall` context form). */
|
|
78
|
+
form: 'recall'
|
|
79
|
+
version: 1
|
|
80
|
+
references: {
|
|
81
|
+
sessionId: string
|
|
82
|
+
label: string
|
|
83
|
+
/** Source Session format generation; absence identifies version 0. */
|
|
84
|
+
capturedFormatVersion?: number
|
|
85
|
+
capturedThroughSeq: OptionalSessionSeq
|
|
86
|
+
compacted: boolean
|
|
87
|
+
originalMessages: number
|
|
88
|
+
retainedMessages: number
|
|
89
|
+
omittedMessages: number
|
|
90
|
+
omittedBytes: number
|
|
91
|
+
truncated: boolean
|
|
92
|
+
inputIndex: number
|
|
93
|
+
}[]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```ts type-equiv
|
|
98
|
+
/** Direct message content and optional referenced-session context. */
|
|
99
|
+
interface PreparedReferencedMessage {
|
|
100
|
+
/** Readable message content after host mention tokens are removed. */
|
|
101
|
+
content: ContentBlock[]
|
|
102
|
+
/** Aggregated untrusted snapshot, absent when the message has no references. */
|
|
103
|
+
additionalContext?: UserMessage
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 错误
|
|
108
|
+
|
|
109
|
+
`SessionReferenceError.code` 区分无效配置或输入、自引用、数量限制、源读取失败、预算失败和取消。宿主协议会把这些 code 映射到各自的错误封装,无需检查提示词字节。
|
|
110
|
+
|
|
111
|
+
```ts type-equiv
|
|
112
|
+
/** Stable failure codes exposed to host adapters. */
|
|
113
|
+
type SessionReferenceErrorCode =
|
|
114
|
+
| 'SESSION_REFERENCE_INVALID_CONFIG'
|
|
115
|
+
| 'SESSION_REFERENCE_INVALID_REFERENCE'
|
|
116
|
+
| 'SESSION_REFERENCE_SELF_REFERENCE'
|
|
117
|
+
| 'SESSION_REFERENCE_TOO_MANY'
|
|
118
|
+
| 'SESSION_REFERENCE_READ_FAILED'
|
|
119
|
+
| 'SESSION_REFERENCE_BUDGET_EXCEEDED'
|
|
120
|
+
| 'SESSION_REFERENCE_CANCELLED'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
124
|
+
|
|
125
|
+
<a id="cordis-surface"></a>
|
|
126
|
+
|
|
127
|
+
## Cordis API
|
|
128
|
+
|
|
129
|
+
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).
|
|
130
|
+
|
|
131
|
+
<a id="ctxfilereferences--filereferenceservice-abstract-seam"></a>
|
|
132
|
+
|
|
133
|
+
### `ctx.fileReferences` — `FileReferenceService` (abstract seam)
|
|
134
|
+
|
|
135
|
+
Host capability for cancellable file-reference discovery.
|
|
136
|
+
|
|
137
|
+
```ts cordis-catalog
|
|
138
|
+
/**
|
|
139
|
+
* List file and directory candidates for one agent's working directory.
|
|
140
|
+
* @param agent - target agent whose session cwd bounds discovery.
|
|
141
|
+
* @param query - path text following `@` or `@"`.
|
|
142
|
+
* @param signal - caller cancellation.
|
|
143
|
+
* @returns deterministic path-only candidates.
|
|
144
|
+
*/
|
|
145
|
+
abstract list( agent: Agent, query: string, signal: AbortSignal, ): Promise<FileReferenceCandidate[]>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Types: [Agent](core.zh.md)
|
|
149
|
+
|
|
150
|
+
Source: [`packages/context/file-reference/src/index.ts`](../../packages/context/file-reference/src/index.ts)
|
|
151
|
+
|
|
152
|
+
<a id="ctxsessionfilereferences--sessionfilereferences"></a>
|
|
153
|
+
|
|
154
|
+
### `ctx.sessionFileReferences` — `SessionFileReferences`
|
|
155
|
+
|
|
156
|
+
Host Remote adapter over the composed file-reference provider.
|
|
157
|
+
|
|
158
|
+
```ts cordis-catalog
|
|
159
|
+
/**
|
|
160
|
+
* List file and directory candidates for one Agent's working directory.
|
|
161
|
+
* @param agent - target Agent resolved from the Session identity on the wire.
|
|
162
|
+
* @param query - path text following `@` or `@"`.
|
|
163
|
+
* @param signal - caller cancellation.
|
|
164
|
+
* @returns deterministic path-only candidates from the composed provider.
|
|
165
|
+
*/
|
|
166
|
+
@Remote list( agent: Agent, query: string, signal: AbortSignal, ): Promise<FileReferenceCandidate[]>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Types: [Agent](core.zh.md)
|
|
170
|
+
|
|
171
|
+
Source: [`packages/api/session-controller/src/file-references.ts`](../../packages/api/session-controller/src/file-references.ts)
|
|
172
|
+
|
|
173
|
+
<a id="ctxsessionreferenceresolver--sessionreferenceresolver"></a>
|
|
174
|
+
|
|
175
|
+
### `ctx.sessionReferenceResolver` — `SessionReferenceResolver`
|
|
176
|
+
|
|
177
|
+
Exact-read consumer that prepares immutable cross-session message context.
|
|
178
|
+
|
|
179
|
+
```ts cordis-catalog
|
|
180
|
+
/**
|
|
181
|
+
* List reference candidates, ranked by working-directory affinity.
|
|
182
|
+
*
|
|
183
|
+
* Discovery runs at keystroke rate, so a title only ever comes from a
|
|
184
|
+
* projection read: see {@link SessionReferenceResolver.projectedTitle} for
|
|
185
|
+
* which sessions can answer one and which fall back to their id.
|
|
186
|
+
* @param agent - target agent; self is excluded and its cwd drives ranking.
|
|
187
|
+
* @param query - optional case-insensitive session-id/cwd/title substring.
|
|
188
|
+
* @param limit - optional positive result cap.
|
|
189
|
+
* @param signal - optional cancellation boundary for host autocomplete teardown.
|
|
190
|
+
* @returns candidates labeled by latest title or, when absent, session id.
|
|
191
|
+
*/
|
|
192
|
+
async listCandidates( agent: Agent, query: string = '', limit: number = this.config.candidateLimit, signal?: AbortSignal, ): Promise<SessionReferenceCandidate[]>
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Remote face of {@link listCandidates}: the configured candidate limit
|
|
196
|
+
* applies, and every candidate carries the canonical mention a host inserts
|
|
197
|
+
* into the prompt draft.
|
|
198
|
+
* @param agent - target agent; self is excluded and its cwd drives ranking.
|
|
199
|
+
* @param query - optional case-insensitive session-id/cwd/title substring.
|
|
200
|
+
* @param signal - caller cancellation.
|
|
201
|
+
* @returns mention-carrying candidates in rank order.
|
|
202
|
+
*/
|
|
203
|
+
@Remote('candidates') async remoteExportCandidates( agent: Agent, query: string, signal: AbortSignal, ): Promise<SessionReferenceMentionCandidate[]>
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Snapshot all references for one accepted direct message and return one aggregated durable context.
|
|
207
|
+
* @param agent - target agent; references to it are rejected.
|
|
208
|
+
* @param content - already host-normalized readable message content.
|
|
209
|
+
* @param references - structured source sessions in mention order.
|
|
210
|
+
* @param signal - optional cancellation boundary for the active turn.
|
|
211
|
+
* @returns detached content and optional referenced-session context.
|
|
212
|
+
*/
|
|
213
|
+
async prepare( agent: Agent, content: ContentBlock[], references: SessionReferenceInput[], signal?: AbortSignal, ): Promise<PreparedReferencedMessage>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Types: [Agent](core.zh.md) · [ContentBlock](llm-streaming.zh.md)
|
|
217
|
+
|
|
218
|
+
Source: [`packages/context/session-reference/src/index.ts`](../../packages/context/session-reference/src/index.ts)
|
|
219
|
+
<!-- END GENERATED cordis-surface -->
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# SessionTelemetryBackend
|
|
2
|
+
|
|
3
|
+
English | [中文](session-telemetry.zh.md)
|
|
4
|
+
|
|
5
|
+
Outbound session reporting is split as a [capability seam](../capability-seams.md): the Service Definition and capture coordinator ([dsh-session-telemetry](../../packages/session/session-telemetry), `ctx.sessionTelemetry`) own complete canonical-event capture, the `session-telemetry/record` redaction waterfall, the handoff cursor, and the minimal backend contract; the Service Provider a deployment loads ([dsh-session-telemetry-otel](../../packages/session/session-telemetry-otel)) is the OpenTelemetry JS SDK's log pipeline configured verbatim. It is one optional capability, not part of the agent-loop spine, and nothing here reaches a model request. The boundary axiom — the harness's aspect ends at `emit()`; batching, retry, queueing, and loss policy belong to the reporting SDK — and the rejected alternatives are pinned in the [revival Agent Note](../../.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.md); the capture and cursor contracts live in the [Service Definition README](../../packages/session/session-telemetry/README.md).
|
|
6
|
+
|
|
7
|
+
Source: [`packages/session/session-telemetry/src/index.ts`](../../packages/session/session-telemetry/src/index.ts)
|
|
8
|
+
|
|
9
|
+
## The logical record
|
|
10
|
+
|
|
11
|
+
```ts type-equiv
|
|
12
|
+
/**
|
|
13
|
+
* Severity of a telemetry record, pre-mapped at capture so a receiver can
|
|
14
|
+
* alert with zero configuration: `error` for events whose own outcome flag
|
|
15
|
+
* says so (the tool-result block's `isError`, `turn/end` error reasons) and for
|
|
16
|
+
* `agent-error` operational records. Captured events otherwise default to
|
|
17
|
+
* `info`; `warn` remains available to `session-telemetry/record` policies and
|
|
18
|
+
* backends.
|
|
19
|
+
*/
|
|
20
|
+
type SessionTelemetrySeverity = 'info' | 'warn' | 'error'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts type-equiv
|
|
24
|
+
/**
|
|
25
|
+
* One logical record handed to a backend — the capture contract's whole outbound
|
|
26
|
+
* vocabulary. Ledger records mirror session-log events one-to-one;
|
|
27
|
+
* operational records (`channel: 'ops'`) carry the two signals with no log
|
|
28
|
+
* home (`agent-error`, `shutdown`) and deliberately omit `event.seq`-style
|
|
29
|
+
* identity so they can never be mistaken for ledger rows.
|
|
30
|
+
*/
|
|
31
|
+
interface SessionTelemetryRecord {
|
|
32
|
+
/** Ledger (session-log mirror) or ops (operational signal) channel; backends keep the two under separate instrumentation scopes. */
|
|
33
|
+
channel: 'ledger' | 'ops'
|
|
34
|
+
/** Unix epoch milliseconds — the source event's append time for ledger records, the emission time for ops records. */
|
|
35
|
+
time: number
|
|
36
|
+
/** Pre-mapped alerting severity; see {@link SessionTelemetrySeverity}. */
|
|
37
|
+
severity: SessionTelemetrySeverity
|
|
38
|
+
/**
|
|
39
|
+
* Identity attributes, deliberately minimal: ledger records carry
|
|
40
|
+
* `session.id`, `session.format_version`, `event.type`, `event.seq`, plus optional
|
|
41
|
+
* `session.cwd` / `session.parent_id`; a seeded Session also carries
|
|
42
|
+
* `session.seed_length` from its exact inherited event count;
|
|
43
|
+
* ops records carry `telemetry.op`, `session.id`, and (for `agent-error`)
|
|
44
|
+
* `agent.id`, `turn`, `step`, `error.name`. Anything recoverable from the
|
|
45
|
+
* body is intentionally NOT duplicated here.
|
|
46
|
+
*/
|
|
47
|
+
attributes: Record<string, string | number>
|
|
48
|
+
/**
|
|
49
|
+
* The complete payload: a deep copy of the session event's `data` for
|
|
50
|
+
* ledger records (JSON-serializable by `Session.append`'s own
|
|
51
|
+
* validation), or the op payload for ops records. Never mutated after
|
|
52
|
+
* handoff.
|
|
53
|
+
*/
|
|
54
|
+
body: unknown
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Every canonical [session event](session.md), including each `assistant/message` or `assistant/attempt` with its complete compact stream and every plugin-merged type the seam never heard of, passes through whole as one ordered ledger record. Process-local `agent/assistant-stream` frames do not enter this durable feed. A new Session object replays its complete log from seq 0, including constructor seed history; re-adopting the same object resumes after its handoff cursor. Delivery is best-effort: the cursor marks handed-off, not delivered, and records can be lost (crash, reload window) or duplicated (new-object replay, SDK retries), so receivers dedupe ledger records on `(session.id, session.format_version, event.seq)`; ops records deliberately omit that identity — they are signals to alert on, not entries to sum, and tolerate duplicates instead.
|
|
59
|
+
|
|
60
|
+
## The sharing disclosure
|
|
61
|
+
|
|
62
|
+
The seam's acknowledgement contract (owned by the [Service Definition README's sharing-disclosure section](../../packages/session/session-telemetry/README.md#the-sharing-disclosure)): every backend discloses its deployment-selected sharing policy through the required abstract `sharing` member on `ctx.sessionTelemetry`, and consumers render "not configured" only when no telemetry service is mounted. The disclosure states the current policy, never delivery or retention — handoff is the non-blocking enqueue, and batching, retry, and loss policy stay the reporting SDK's.
|
|
63
|
+
|
|
64
|
+
```ts type-equiv
|
|
65
|
+
/**
|
|
66
|
+
* Deployment-selected session-sharing policy disclosed by a mounted
|
|
67
|
+
* {@link SessionTelemetryBackend} backend to human-facing acknowledgement surfaces (the
|
|
68
|
+
* `/feedback` command's confirmation text). The Service Definition owns the
|
|
69
|
+
* vocabulary so consumers and backends do not depend on a specific provider.
|
|
70
|
+
*/
|
|
71
|
+
type SessionTelemetrySharingStatus = 'full' | 'feedback-only' | 'disabled'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## The backend contract
|
|
75
|
+
|
|
76
|
+
```ts type-equiv
|
|
77
|
+
/**
|
|
78
|
+
* The minimum backend contract the coordinator requires. {@link SessionTelemetryBackend} is
|
|
79
|
+
* its service-registered form; tests compose the coordinator with a bare
|
|
80
|
+
* implementation of this interface.
|
|
81
|
+
*/
|
|
82
|
+
interface SessionTelemetrySink {
|
|
83
|
+
/**
|
|
84
|
+
* Hand one record to the backend's pipeline. MUST be a non-blocking
|
|
85
|
+
* enqueue — the coordinator calls this synchronously from the
|
|
86
|
+
* `session/event` hot path or an explicit canonical-log capture, so anything
|
|
87
|
+
* slower than a queue push would tax the agent loop or feedback handling.
|
|
88
|
+
* Errors thrown here are contained by the coordinator and logged; they
|
|
89
|
+
* never reach the loop.
|
|
90
|
+
* @param record - the logical record to report; owned by the backend after the call.
|
|
91
|
+
*/
|
|
92
|
+
emit(record: SessionTelemetryRecord): void
|
|
93
|
+
/**
|
|
94
|
+
* Optional hint that a turn ended. A backend may forward it to its SDK's
|
|
95
|
+
* flush so records are exported after each turn. Called
|
|
96
|
+
* fire-and-forget; implementations must not block and must not throw
|
|
97
|
+
* meaningfully (the coordinator contains exceptions). Most backends should
|
|
98
|
+
* leave this unimplemented and let their SDK's own batching cadence govern
|
|
99
|
+
* export timing: a backend that does implement it owns the interaction
|
|
100
|
+
* between its concurrent flushes and {@link shutdown}'s drain (the OTel
|
|
101
|
+
* backend leaves it unimplemented for exactly that hazard — see the
|
|
102
|
+
* revival Agent Note).
|
|
103
|
+
*/
|
|
104
|
+
flush?(): void
|
|
105
|
+
/**
|
|
106
|
+
* Forward the fiber's disposal to the SDK: flush whatever is queued and
|
|
107
|
+
* reach quiescence, per the SDK's own shutdown contract. Everything
|
|
108
|
+
* emitted before this call must still be delivered — including records
|
|
109
|
+
* enqueued while a {@link flush} hint is in flight, so a backend whose SDK
|
|
110
|
+
* guards against concurrent flushes orders behind the outstanding one (the
|
|
111
|
+
* coordinator emits its dispose-time `shutdown` markers immediately before
|
|
112
|
+
* calling this). Awaited by the coordinator's dispose; a rejection is
|
|
113
|
+
* logged as a warning and never fails application teardown.
|
|
114
|
+
* The coordinator captures dispose-time shutdown markers immediately before
|
|
115
|
+
* this call for live capture; on-demand capture creates no ops records.
|
|
116
|
+
* @returns resolves when the backend's pipeline has quiesced.
|
|
117
|
+
*/
|
|
118
|
+
shutdown(): Promise<void>
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
`SessionTelemetryBackend` (`ctx.sessionTelemetry`, [signatures](#ctxsessiontelemetry--sessiontelemetrybackend-abstract-seam)) is the contract's loadable form — one implementation per context, duplicate load throws — and a backend composes the seam's `SessionTelemetryCoordinator` in its constructor to install the capture side.
|
|
123
|
+
|
|
124
|
+
## The redact waterfall: `session-telemetry/record`
|
|
125
|
+
|
|
126
|
+
Every record passes the `session-telemetry/record` [waterfall](../cordis-primer.md#cordis-waterfall-semantics) between the canonical-event copy and `emit()` ([event entry](#session-telemetryrecord--waterfall)). The seam ships NO rules of its own: with no listener mounted, records reach the backend exactly as captured, so exported data is precisely as clean as the rules a deployment mounts. Listeners stack by transforming `next()`'s return value; returning without `next()` replaces everything beneath; a throwing listener withholds that one record fail-closed inside the coordinator's containment. Redaction applies to the exported copy only — the canonical session log is never rewritten.
|
|
127
|
+
|
|
128
|
+
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
129
|
+
|
|
130
|
+
<a id="cordis-surface"></a>
|
|
131
|
+
|
|
132
|
+
## Cordis API
|
|
133
|
+
|
|
134
|
+
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).
|
|
135
|
+
|
|
136
|
+
<a id="ctxsessiontelemetry--sessiontelemetrybackend-abstract-seam"></a>
|
|
137
|
+
|
|
138
|
+
### `ctx.sessionTelemetry` — `SessionTelemetryBackend` (abstract seam)
|
|
139
|
+
|
|
140
|
+
Loadable form of the backend contract: one implementation per context — the cordis `Service` registration under the `telemetry` key throws on a duplicate, cordis' standard behavior. A backend composes a SessionTelemetryCoordinator in its constructor to install the capture side.
|
|
141
|
+
|
|
142
|
+
```ts cordis-catalog
|
|
143
|
+
/**
|
|
144
|
+
* See {@link SessionTelemetrySink.emit} — that declaration is the contract's one home.
|
|
145
|
+
* @param record - the logical record to report; owned by the backend after the call.
|
|
146
|
+
*/
|
|
147
|
+
abstract emit(record: SessionTelemetryRecord): void
|
|
148
|
+
|
|
149
|
+
/** See {@link SessionTelemetrySink.flush}. */
|
|
150
|
+
flush?(): void
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* See {@link SessionTelemetrySink.shutdown}.
|
|
154
|
+
* @returns resolves when the backend's pipeline has quiesced.
|
|
155
|
+
*/
|
|
156
|
+
abstract shutdown(): Promise<void>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Source: [`packages/session/session-telemetry/src/index.ts`](../../packages/session/session-telemetry/src/index.ts)
|
|
160
|
+
|
|
161
|
+
<a id="session-telemetry-events"></a>
|
|
162
|
+
|
|
163
|
+
### `session-telemetry/*` events
|
|
164
|
+
|
|
165
|
+
<a id="session-telemetryrecord--waterfall"></a>
|
|
166
|
+
|
|
167
|
+
#### `session-telemetry/record` — waterfall
|
|
168
|
+
|
|
169
|
+
Transform one outbound record before it reaches the backend. This waterfall is the Service Definition's redaction extension point. It ships NO rules of its own: the innermost `next()` passes the record through unchanged, and with no listener mounted records reach the backend as captured, so exported data is exactly as clean as the rules a deployment mounts. Listeners stack by transforming `next()`'s return value; returning without `next()` replaces everything beneath. Dispatched synchronously on the capture hot path inside the coordinator's containment: a throwing listener withholds that one record (fail-closed) and never reaches the agent loop. Live capture dispatches at append time; on-demand capture dispatches while reading the canonical log. Redaction applies to the exported copy only; the canonical session log is never rewritten.
|
|
170
|
+
|
|
171
|
+
```ts cordis-catalog
|
|
172
|
+
/**
|
|
173
|
+
* Transform one outbound record before it reaches the backend. This
|
|
174
|
+
* waterfall is the Service Definition's redaction extension point. It ships NO rules
|
|
175
|
+
* of its own: the
|
|
176
|
+
* innermost `next()` passes the record through unchanged, and with no
|
|
177
|
+
* listener mounted records reach the backend as captured, so exported
|
|
178
|
+
* data is exactly as clean as the rules a deployment mounts. Listeners
|
|
179
|
+
* stack by transforming `next()`'s return value; returning without
|
|
180
|
+
* `next()` replaces everything beneath. Dispatched synchronously on the
|
|
181
|
+
* capture hot path inside the coordinator's containment: a throwing
|
|
182
|
+
* listener withholds that one record (fail-closed) and never reaches the
|
|
183
|
+
* agent loop. Live capture dispatches at append time; on-demand capture
|
|
184
|
+
* dispatches while reading the canonical log. Redaction applies to the
|
|
185
|
+
* exported copy only; the canonical session log is never rewritten.
|
|
186
|
+
* @param record - the candidate record, already the coordinator's own deep
|
|
187
|
+
* copy; listeners return a (possibly new) record and must not mutate it.
|
|
188
|
+
* @mode waterfall
|
|
189
|
+
*/
|
|
190
|
+
'session-telemetry/record'(record: SessionTelemetryRecord, next: () => SessionTelemetryRecord): SessionTelemetryRecord
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Source: [`packages/session/session-telemetry/src/index.ts`](../../packages/session/session-telemetry/src/index.ts)
|
|
194
|
+
<!-- END GENERATED cordis-surface -->
|