@xopcai/xopc 0.0.86 → 0.0.88
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/delivery-chat-id.d.ts +1 -1
- package/dist/extensions/telegram/src/delivery-chat-id.js +1 -1
- package/dist/extensions/telegram/src/delivery-chat-id.js.map +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +3 -2
- package/dist/extensions/telegram/src/routing-integration.js.map +1 -1
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +2 -2
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -1
- package/dist/extensions/weixin/src/api/api.js +3 -3
- package/dist/extensions/weixin/src/api/api.js.map +1 -1
- package/dist/extensions/weixin/src/auth/accounts.js +12 -12
- package/dist/extensions/weixin/src/auth/accounts.js.map +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/delivery-to.js +2 -2
- package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
- package/dist/extensions/weixin/src/messaging/debug-mode.js.map +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
- package/dist/extensions/weixin/src/messaging/inbound.js.map +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +4 -4
- package/dist/extensions/weixin/src/storage/sync-buf.js.map +1 -1
- package/dist/extensions/weixin/src/workflow-progress.d.ts +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js.map +1 -1
- package/dist/gateway/static/root/assets/agents-CRxETUZx.js +222 -0
- package/dist/gateway/static/root/assets/{apps-page-DrfytjOb.js → apps-page-wKWf3l57.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-DDbqVNkx.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-Bs5kMCMI.js → channels-status-swr-DIsl75Y3.js} +1 -1
- package/dist/gateway/static/root/assets/copy-SxMW6Xpc.js +1 -0
- package/dist/gateway/static/root/assets/{cron-api-BuVcZ5zR.js → cron-api-N9hvuRrn.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BMrloeFH.js → cron-page-tlNGNxhP.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-CKU1OOTf.js → dist-CJwfHYvT.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BdW_46sN.js → extension-debug-page-BVJohZoZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DW47KI82.js → extension-page-BT2tmElC.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BSS47c2j.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B2MYHbWg.js → fetch-BaFNUtkE.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-DPG-oJmx.js → field-primitives-QwYEq6Hz.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-C8dNts9i.js → heartbeat-config-api-BVSidEDJ.js} +1 -1
- package/dist/gateway/static/root/assets/index-CqZzHNEg.css +1 -0
- package/dist/gateway/static/root/assets/{index-BmVYculr.js → index-qNrVJp-y.js} +97 -95
- package/dist/gateway/static/root/assets/{logs-page-sTsVWz0X.js → logs-page-DDonPVLn.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DKt-Wmib.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DuvRQW--.js → settings-form-section-B8N3A3Zo.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-DcJjvvw4.js +3 -0
- package/dist/gateway/static/root/assets/{share-preview-page-BtG2kLDh.js → share-preview-page-Q7KqkO-u.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-DuJ4BTO3.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-DryYl3qD.js → theme-store-BbRc5ugR.js} +1 -1
- package/dist/gateway/static/root/assets/url-D6jvVYIA.js +7 -0
- package/dist/gateway/static/root/assets/{utils-BY7bU1DT.js → utils-CxDGduqK.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-CTyHz7L_.js +1 -0
- package/dist/gateway/static/root/assets/workflows-page-GacJ41Fv.js +27 -0
- package/dist/gateway/static/root/index.html +6 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +7 -7
- package/dist/src/agent/agent-scope.d.ts +4 -0
- package/dist/src/agent/agent-scope.js +53 -10
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +2 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/child-agent-factory.d.ts +15 -0
- package/dist/src/agent/child-agent-factory.js +35 -2
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/client-error-format.d.ts +20 -0
- package/dist/src/agent/client-error-format.js +97 -0
- package/dist/src/agent/client-error-format.js.map +1 -0
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/embedded/run-turn.js +23 -4
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +2 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- package/dist/src/agent/embedded/tool-result-truncation.js +2 -1
- package/dist/src/agent/embedded/tool-result-truncation.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +2 -2
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.d.ts +1 -1
- package/dist/src/agent/goals/goal-run-store.js +4 -4
- package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -2
- package/dist/src/agent/goals/persistent-goal-service.js +1 -2
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/image/generation/normalization.js +2 -12
- package/dist/src/agent/image/generation/normalization.js.map +1 -1
- package/dist/src/agent/image/generation/provider-registry.d.ts +4 -8
- package/dist/src/agent/image/generation/provider-registry.js.map +1 -1
- package/dist/src/agent/image/generation/runtime.d.ts +2 -2
- package/dist/src/agent/image/generation/runtime.js.map +1 -1
- package/dist/src/agent/image/generation/types.d.ts +0 -18
- package/dist/src/agent/image/image-helpers.js +6 -1
- package/dist/src/agent/image/image-helpers.js.map +1 -1
- package/dist/src/agent/image/index.d.ts +1 -1
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/inbound/inbound-loop.d.ts +5 -0
- package/dist/src/agent/inbound/inbound-loop.js +41 -10
- package/dist/src/agent/inbound/inbound-loop.js.map +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +4 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +7 -5
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/ipc/inbox.js +2 -2
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +2 -1
- package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +2 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/media-generation/runtime-shared.js +2 -9
- package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +6 -0
- package/dist/src/agent/messaging/command-handler.js +5 -0
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/llm-turn-retry.d.ts +2 -0
- package/dist/src/agent/orchestration/llm-turn-retry.js +9 -1
- package/dist/src/agent/orchestration/llm-turn-retry.js.map +1 -1
- package/dist/src/agent/prompt/safety.d.ts +0 -7
- package/dist/src/agent/prompt/safety.js +1 -20
- package/dist/src/agent/prompt/safety.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/build-direct-message-content.js +2 -2
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -1
- package/dist/src/agent/service/direct-turn-helpers.js +6 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-one-shot.d.ts +4 -0
- package/dist/src/agent/service/process-direct-one-shot.js +15 -2
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +4 -0
- package/dist/src/agent/service/process-direct-streaming.js +53 -7
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/webchat-tts.d.ts +1 -2
- package/dist/src/agent/service/webchat-tts.js +2 -2
- package/dist/src/agent/service/webchat-tts.js.map +1 -1
- package/dist/src/agent/service.d.ts +8 -0
- package/dist/src/agent/service.js +25 -5
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +2 -2
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/scanner.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/create-share-tool.js +27 -20
- package/dist/src/agent/tools/create-share-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.js +2 -2
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/index.d.ts +0 -1
- package/dist/src/agent/tools/index.js +4 -5
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/agent/tools/shell.js +0 -13
- package/dist/src/agent/tools/shell.js.map +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js +70 -16
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workflow/agent-progress.d.ts +5 -0
- package/dist/src/agent/workflow/agent-progress.js +65 -0
- package/dist/src/agent/workflow/agent-progress.js.map +1 -0
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.js +14 -0
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.js +14 -0
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/implementation-plan.js +175 -0
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -0
- package/dist/src/agent/workflow/builtins/index.d.ts +3 -1
- package/dist/src/agent/workflow/builtins/index.js +11 -1
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +14 -0
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.js +14 -0
- package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +11 -0
- package/dist/src/agent/workflow/builtins/release-check.js +165 -0
- package/dist/src/agent/workflow/builtins/release-check.js.map +1 -0
- package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/research.js +14 -0
- package/dist/src/agent/workflow/builtins/research.js.map +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workflow/channel-capability.d.ts +3 -3
- package/dist/src/agent/workflow/index.d.ts +2 -1
- package/dist/src/agent/workflow/index.js +3 -2
- package/dist/src/agent/workflow/lint.d.ts +38 -0
- package/dist/src/agent/workflow/lint.js +74 -0
- package/dist/src/agent/workflow/lint.js.map +1 -0
- package/dist/src/agent/workflow/meta-locale.d.ts +12 -0
- package/dist/src/agent/workflow/meta-locale.js +62 -0
- package/dist/src/agent/workflow/meta-locale.js.map +1 -0
- package/dist/src/agent/workflow/parser.js +7 -1
- package/dist/src/agent/workflow/parser.js.map +1 -1
- package/dist/src/agent/workflow/runtime.d.ts +4 -1
- package/dist/src/agent/workflow/runtime.js +88 -8
- package/dist/src/agent/workflow/runtime.js.map +1 -1
- package/dist/src/agent/workflow/snapshot.js +2 -12
- package/dist/src/agent/workflow/snapshot.js.map +1 -1
- package/dist/src/agent/workflow/step-labels.d.ts +8 -0
- package/dist/src/agent/workflow/step-labels.js +48 -0
- package/dist/src/agent/workflow/step-labels.js.map +1 -0
- package/dist/src/agent/workflow/subagent-runner.js +46 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent/workflow/types.d.ts +76 -1
- package/dist/src/auth/credentials.d.ts +5 -0
- package/dist/src/auth/credentials.js +12 -3
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/index.js +4 -4
- package/dist/src/browser/manager.d.ts +1 -3
- package/dist/src/browser/manager.js +0 -6
- package/dist/src/browser/manager.js.map +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +4 -4
- package/dist/src/browser/providers/browser-ext-install.js +41 -88
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.d.ts +0 -5
- package/dist/src/browser/providers/cloakbrowser.js +6 -59
- package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/attachments/inbound-persist.js +1 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js +10 -8
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +9 -9
- package/dist/src/channels/pairing/allow-from-file.js.map +1 -1
- package/dist/src/channels/pairing/pairing-store.js +7 -7
- package/dist/src/channels/pairing/pairing-store.js.map +1 -1
- package/dist/src/chat-commands/builtins/config.js +2 -2
- package/dist/src/chat-commands/builtins/session.js +1 -1
- package/dist/src/chat-commands/builtins/session.js.map +1 -1
- package/dist/src/chat-commands/builtins/tts.js +2 -2
- package/dist/src/chat-commands/builtins/tts.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +22 -4
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/session-key.d.ts +4 -37
- package/dist/src/chat-commands/session-key.js +49 -85
- package/dist/src/chat-commands/session-key.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +2 -0
- package/dist/src/cli/commands/agent/interactive.js +2 -2
- package/dist/src/cli/commands/agent/interactive.js.map +1 -1
- package/dist/src/cli/commands/agent/sessions.js +2 -2
- package/dist/src/cli/commands/agent/sessions.js.map +1 -1
- package/dist/src/cli/commands/agent.js +4 -5
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/channels.js +1 -5
- package/dist/src/cli/commands/channels.js.map +1 -1
- package/dist/src/cli/commands/config.js +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
- package/dist/src/cli/commands/gateway/logs.d.ts +9 -0
- package/dist/src/cli/commands/gateway/logs.js +50 -17
- package/dist/src/cli/commands/gateway/logs.js.map +1 -1
- package/dist/src/cli/commands/image.js +23 -22
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/init.js +4 -4
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/session/utils.js +2 -2
- package/dist/src/cli/commands/session/utils.js.map +1 -1
- package/dist/src/cli/commands/update.js +26 -46
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/cli/utils/session.d.ts +0 -5
- package/dist/src/cli/utils/session.js +1 -6
- package/dist/src/cli/utils/session.js.map +1 -1
- package/dist/src/commands/agents.config.js +1 -1
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.js +6 -28
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +18 -0
- package/dist/src/config/agent-typed-models.js +53 -0
- package/dist/src/config/agent-typed-models.js.map +1 -0
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +6 -6
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/model-input.js +2 -5
- package/dist/src/config/model-input.js.map +1 -1
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/profile.js +2 -2
- package/dist/src/config/schema.d.ts +253 -217
- package/dist/src/config/schema.js +91 -40
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/voice.d.ts +3 -28
- package/dist/src/config/voice.js +27 -261
- package/dist/src/config/voice.js.map +1 -1
- package/dist/src/config/workspace-path-helpers.d.ts +1 -2
- package/dist/src/config/workspace-path-helpers.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/cron/persistence.js +1 -1
- package/dist/src/cron/run-log-store.js +1 -1
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +27 -3
- package/dist/src/daemon/install-plan.js.map +1 -1
- package/dist/src/daemon/launchd.d.ts +8 -0
- package/dist/src/daemon/launchd.js +7 -14
- package/dist/src/daemon/launchd.js.map +1 -1
- package/dist/src/daemon/schtasks.d.ts +25 -0
- package/dist/src/daemon/schtasks.js +168 -48
- package/dist/src/daemon/schtasks.js.map +1 -1
- package/dist/src/daemon/service.js +5 -4
- package/dist/src/daemon/service.js.map +1 -1
- package/dist/src/daemon/systemd.d.ts +6 -0
- package/dist/src/daemon/systemd.js +20 -5
- package/dist/src/daemon/systemd.js.map +1 -1
- package/dist/src/extensions/activation-context.js +0 -1
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/loader.js +1 -1
- package/dist/src/extensions/lockfile.js +2 -2
- package/dist/src/extensions/normalize-manifest.js +0 -1
- package/dist/src/extensions/normalize-manifest.js.map +1 -1
- package/dist/src/extensions/types/manifest.d.ts +0 -2
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +1 -0
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +9 -0
- package/dist/src/gateway/agents-admin.js +28 -4
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/config-tools-web.js +3 -2
- package/dist/src/gateway/config-tools-web.js.map +1 -1
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/heartbeat/service.js +2 -2
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/app.js +1 -1
- package/dist/src/gateway/hono/lib/agent-model.d.ts +25 -10
- package/dist/src/gateway/hono/lib/agent-model.js +60 -36
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +29 -6
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/mask-secret-length.d.ts +6 -0
- package/dist/src/gateway/hono/lib/mask-secret-length.js +16 -0
- package/dist/src/gateway/hono/lib/mask-secret-length.js.map +1 -0
- package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +1 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.js +2 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.js.map +1 -1
- package/dist/src/gateway/hono/lib/safe-voice-config.js +16 -54
- package/dist/src/gateway/hono/lib/safe-voice-config.js.map +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/oauth.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +2 -2
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js +25 -7
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -11
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +3 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -3
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +59 -0
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/goals.js +1 -1
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +75 -12
- package/dist/src/gateway/hono/routes/models.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +28 -7
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/shares.js +15 -13
- package/dist/src/gateway/hono/routes/shares.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +1 -1
- package/dist/src/gateway/hono/routes/update.js +4 -2
- package/dist/src/gateway/hono/routes/update.js.map +1 -1
- package/dist/src/gateway/hono/routes/voice.js +75 -0
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.d.ts +3 -0
- package/dist/src/gateway/hono/routes/workflows.js +347 -0
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -0
- package/dist/src/gateway/hono/routes/workspace.js +4 -4
- package/dist/src/gateway/hono/sse.js +16 -33
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/lock.js +11 -11
- package/dist/src/gateway/lock.js.map +1 -1
- package/dist/src/gateway/ports.js +6 -6
- package/dist/src/gateway/ports.js.map +1 -1
- package/dist/src/gateway/resolve-webchat-session-key.d.ts +19 -0
- package/dist/src/gateway/resolve-webchat-session-key.js +46 -0
- package/dist/src/gateway/resolve-webchat-session-key.js.map +1 -0
- package/dist/src/gateway/service/agent-runner.js +2 -2
- package/dist/src/gateway/service/marketplace-service.js +2 -2
- package/dist/src/gateway/service/run-gateway-agent.js +9 -11
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +3 -0
- package/dist/src/gateway/service/sessions-api.js +8 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +3 -2
- package/dist/src/gateway/service.js +9 -8
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/session-reset-service.d.ts +20 -0
- package/dist/src/gateway/session-reset-service.js +54 -0
- package/dist/src/gateway/session-reset-service.js.map +1 -0
- package/dist/src/gateway/startup-readiness.d.ts +1 -1
- package/dist/src/gateway/startup-readiness.js +1 -0
- package/dist/src/gateway/startup-readiness.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/gateway-processes.js +2 -2
- package/dist/src/infra/gateway-processes.js.map +1 -1
- package/dist/src/infra/restart.js +2 -2
- package/dist/src/infra/run-command.d.ts +16 -0
- package/dist/src/infra/run-command.js +67 -0
- package/dist/src/infra/run-command.js.map +1 -0
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.d.ts +45 -0
- package/dist/src/infra/update-global.js +224 -0
- package/dist/src/infra/update-global.js.map +1 -0
- package/dist/src/infra/update-lock.js +3 -3
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +2 -2
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/mcp/channel-shared.js +2 -1
- package/dist/src/mcp/channel-shared.js.map +1 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js.map +1 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -12
- package/dist/src/providers/auth-runtime/resolve-auth.js.map +1 -1
- package/dist/src/providers/auth-runtime/types.d.ts +6 -12
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/routing/agent-session-key.d.ts +58 -0
- package/dist/src/routing/agent-session-key.js +164 -0
- package/dist/src/routing/agent-session-key.js.map +1 -0
- package/dist/src/routing/index.d.ts +1 -1
- package/dist/src/routing/index.js +4 -2
- package/dist/src/routing/index.js.map +1 -1
- package/dist/src/routing/resolve-route.d.ts +15 -0
- package/dist/src/routing/resolve-route.js +41 -20
- package/dist/src/routing/resolve-route.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +25 -0
- package/dist/src/routing/resolve-tui-session-key.js +54 -0
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -0
- package/dist/src/routing/session-key-utils.d.ts +24 -0
- package/dist/src/routing/session-key-utils.js +92 -0
- package/dist/src/routing/session-key-utils.js.map +1 -0
- package/dist/src/routing/session-key.d.ts +19 -49
- package/dist/src/routing/session-key.js +143 -116
- package/dist/src/routing/session-key.js.map +1 -1
- package/dist/src/session/config-store.js +2 -2
- package/dist/src/session/index.d.ts +6 -0
- package/dist/src/session/index.js +7 -1
- package/dist/src/session/init-session-turn.d.ts +30 -0
- package/dist/src/session/init-session-turn.js +102 -0
- package/dist/src/session/init-session-turn.js.map +1 -0
- package/dist/src/session/lifecycle-timestamps.d.ts +8 -0
- package/dist/src/session/lifecycle-timestamps.js +16 -0
- package/dist/src/session/lifecycle-timestamps.js.map +1 -0
- package/dist/src/session/manager.d.ts +7 -1
- package/dist/src/session/manager.js +8 -1
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
- package/dist/src/session/parity/sessions-json-file.js +1 -1
- package/dist/src/session/parity/transcript-file-lock.js +2 -2
- package/dist/src/session/parity/transcript-paths.js +2 -2
- package/dist/src/session/parity/transcript-paths.js.map +1 -1
- package/dist/src/session/parity/xopc-session-disk-entry.d.ts +6 -0
- package/dist/src/session/reset-policy.d.ts +32 -0
- package/dist/src/session/reset-policy.js +65 -0
- package/dist/src/session/reset-policy.js.map +1 -0
- package/dist/src/session/reset-triggers.d.ts +20 -0
- package/dist/src/session/reset-triggers.js +63 -0
- package/dist/src/session/reset-triggers.js.map +1 -0
- package/dist/src/session/reset-type.d.ts +12 -0
- package/dist/src/session/reset-type.js +25 -0
- package/dist/src/session/reset-type.js.map +1 -0
- package/dist/src/session/resolve-session.d.ts +30 -0
- package/dist/src/session/resolve-session.js +93 -0
- package/dist/src/session/resolve-session.js.map +1 -0
- package/dist/src/session/search-index-cache.js +1 -1
- package/dist/src/session/search-index.js +1 -1
- package/dist/src/session/session-title.js +3 -2
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/session/store.d.ts +11 -4
- package/dist/src/session/store.js +62 -11
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/transcript-events.js +2 -1
- package/dist/src/session/transcript-events.js.map +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-url.d.ts +33 -0
- package/dist/src/share/share-url.js +56 -14
- package/dist/src/share/share-url.js.map +1 -1
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +4 -9
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.js +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/components/chat-log.js +3 -3
- package/dist/src/tui/components/chat-log.js.map +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/theme.d.ts +0 -2
- package/dist/src/tui/theme.js +1 -3
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/tui-agent-events.js +2 -1
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-commands.d.ts +3 -0
- package/dist/src/tui/tui-commands.js +45 -10
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-keybindings-file.js +2 -22
- package/dist/src/tui/tui-keybindings-file.js.map +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-session-actions.d.ts +28 -0
- package/dist/src/tui/tui-session-actions.js +88 -0
- package/dist/src/tui/tui-session-actions.js.map +1 -0
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui.js +54 -49
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.js +3 -3
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/string-coerce.d.ts +2 -0
- package/dist/src/utils/string-coerce.js +10 -1
- package/dist/src/utils/string-coerce.js.map +1 -1
- package/dist/src/voice/metadata/builtin.d.ts +2 -0
- package/dist/src/voice/metadata/builtin.js +420 -0
- package/dist/src/voice/metadata/builtin.js.map +1 -0
- package/dist/src/voice/metadata/index.d.ts +4 -0
- package/dist/src/voice/metadata/index.js +3 -0
- package/dist/src/voice/metadata/registry.d.ts +5 -0
- package/dist/src/voice/metadata/registry.js +34 -0
- package/dist/src/voice/metadata/registry.js.map +1 -0
- package/dist/src/voice/metadata/types.d.ts +41 -0
- package/dist/src/voice/metadata/types.js +1 -0
- package/dist/src/voice/stt/config-slice.d.ts +2 -5
- package/dist/src/voice/stt/config-slice.js +5 -26
- package/dist/src/voice/stt/config-slice.js.map +1 -1
- package/dist/src/voice/stt/list-providers.d.ts +3 -3
- package/dist/src/voice/stt/list-providers.js +41 -6
- package/dist/src/voice/stt/list-providers.js.map +1 -1
- package/dist/src/voice/stt/types.d.ts +1 -18
- package/dist/src/voice/stt/types.js +4 -2
- package/dist/src/voice/stt/types.js.map +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/config-slice.d.ts +3 -7
- package/dist/src/voice/tts/config-slice.js +7 -38
- package/dist/src/voice/tts/config-slice.js.map +1 -1
- package/dist/src/voice/tts/list-providers.d.ts +3 -3
- package/dist/src/voice/tts/list-providers.js +41 -6
- package/dist/src/voice/tts/list-providers.js.map +1 -1
- package/dist/src/voice/tts/merge-config.js +2 -48
- package/dist/src/voice/tts/merge-config.js.map +1 -1
- package/dist/src/voice/tts/providers/alibaba-speech.js +1 -1
- package/dist/src/voice/tts/providers/alibaba-speech.js.map +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/voice/tts/types.d.ts +1 -29
- package/dist/src/voice/tts/types.js +19 -17
- package/dist/src/voice/tts/types.js.map +1 -1
- package/dist/src/workflows/domain/command.d.ts +18 -0
- package/dist/src/workflows/domain/command.js +1 -0
- package/dist/src/workflows/domain/definition.d.ts +62 -0
- package/dist/src/workflows/domain/definition.js +1 -0
- package/dist/src/workflows/domain/event.d.ts +67 -0
- package/dist/src/workflows/domain/event.js +1 -0
- package/dist/src/workflows/domain/index.d.ts +5 -0
- package/dist/src/workflows/domain/index.js +2 -0
- package/dist/src/workflows/domain/result.d.ts +65 -0
- package/dist/src/workflows/domain/result.js +1 -0
- package/dist/src/workflows/domain/run.d.ts +120 -0
- package/dist/src/workflows/domain/run.js +14 -0
- package/dist/src/workflows/domain/run.js.map +1 -0
- package/dist/src/workflows/engine/index.d.ts +2 -0
- package/dist/src/workflows/engine/index.js +3 -0
- package/dist/src/workflows/engine/projector.d.ts +3 -0
- package/dist/src/workflows/engine/projector.js +205 -0
- package/dist/src/workflows/engine/projector.js.map +1 -0
- package/dist/src/workflows/engine/workflow-engine.d.ts +31 -0
- package/dist/src/workflows/engine/workflow-engine.js +188 -0
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -0
- package/dist/src/workflows/index.d.ts +6 -0
- package/dist/src/workflows/index.js +11 -0
- package/dist/src/workflows/runtime/index.d.ts +1 -0
- package/dist/src/workflows/runtime/index.js +4 -0
- package/dist/src/workflows/runtime/script-runtime.d.ts +3 -0
- package/dist/src/workflows/runtime/script-runtime.js +3 -0
- package/dist/src/workflows/store/event-store.d.ts +17 -0
- package/dist/src/workflows/store/event-store.js +83 -0
- package/dist/src/workflows/store/event-store.js.map +1 -0
- package/dist/src/workflows/store/paths.d.ts +7 -0
- package/dist/src/workflows/store/paths.js +26 -0
- package/dist/src/workflows/store/paths.js.map +1 -0
- package/dist/src/workflows/store/run-store.d.ts +13 -0
- package/dist/src/workflows/store/run-store.js +68 -0
- package/dist/src/workflows/store/run-store.js.map +1 -0
- package/package.json +5 -8
- package/dist/gateway/static/root/assets/agents-mS3_HpRI.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-BG6b9KrW.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-B-W4x2xP.js +0 -1
- package/dist/gateway/static/root/assets/index-ew_2L2We.css +0 -1
- package/dist/gateway/static/root/assets/sessions-page-FaG_Vlkb.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-Bet1OerL.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-DhUO235y.js +0 -2
- package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +0 -3
- package/dist/gateway/static/root/assets/voice-api-key-field-CGEydndO.js +0 -1
- package/dist/src/agent/tools/browser-legacy-tools.d.ts +0 -17
- package/dist/src/agent/tools/browser-legacy-tools.js +0 -766
- package/dist/src/agent/tools/browser-legacy-tools.js.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "../utils/string-coerce.js";
|
|
3
|
+
//#region src/routing/session-key-utils.ts
|
|
4
|
+
/** Parse `agent:{agentId}:{rest}` session keys (OpenClaw canonical form). */
|
|
5
|
+
function parseAgentSessionKey(sessionKey) {
|
|
6
|
+
const raw = normalizeOptionalLowercaseString(sessionKey);
|
|
7
|
+
if (!raw) return null;
|
|
8
|
+
const parts = raw.split(":").filter(Boolean);
|
|
9
|
+
if (parts.length < 3) return null;
|
|
10
|
+
if (parts[0] !== "agent") return null;
|
|
11
|
+
const agentId = normalizeOptionalString(parts[1]);
|
|
12
|
+
const rest = parts.slice(2).join(":");
|
|
13
|
+
if (!agentId || !rest) return null;
|
|
14
|
+
return {
|
|
15
|
+
agentId: agentId.toLowerCase(),
|
|
16
|
+
rest
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function isCronRunSessionKey(sessionKey) {
|
|
20
|
+
const parsed = parseAgentSessionKey(sessionKey);
|
|
21
|
+
if (!parsed) return false;
|
|
22
|
+
return /^cron:[^:]+:run:[^:]+$/.test(parsed.rest);
|
|
23
|
+
}
|
|
24
|
+
function isCronSessionKey(sessionKey) {
|
|
25
|
+
const parsed = parseAgentSessionKey(sessionKey);
|
|
26
|
+
if (!parsed) return false;
|
|
27
|
+
return normalizeOptionalLowercaseString(parsed.rest)?.startsWith("cron:") === true;
|
|
28
|
+
}
|
|
29
|
+
function isSubagentSessionKey(sessionKey) {
|
|
30
|
+
const raw = normalizeOptionalString(sessionKey);
|
|
31
|
+
if (!raw) return false;
|
|
32
|
+
if (normalizeOptionalLowercaseString(raw)?.startsWith("subagent:")) return true;
|
|
33
|
+
return normalizeOptionalLowercaseString(parseAgentSessionKey(raw)?.rest)?.startsWith("subagent:") === true;
|
|
34
|
+
}
|
|
35
|
+
function getSubagentDepth(sessionKey) {
|
|
36
|
+
const raw = normalizeOptionalLowercaseString(sessionKey);
|
|
37
|
+
if (!raw) return 0;
|
|
38
|
+
return raw.split(":subagent:").length - 1;
|
|
39
|
+
}
|
|
40
|
+
function isAcpSessionKey(sessionKey) {
|
|
41
|
+
const raw = normalizeOptionalString(sessionKey);
|
|
42
|
+
if (!raw) return false;
|
|
43
|
+
if (normalizeLowercaseStringOrEmpty(raw).startsWith("acp:")) return true;
|
|
44
|
+
return normalizeOptionalLowercaseString(parseAgentSessionKey(raw)?.rest)?.startsWith("acp:") === true;
|
|
45
|
+
}
|
|
46
|
+
function parseThreadSessionSuffix(sessionKey) {
|
|
47
|
+
const raw = normalizeOptionalString(sessionKey);
|
|
48
|
+
if (!raw) return {
|
|
49
|
+
baseSessionKey: void 0,
|
|
50
|
+
threadId: void 0
|
|
51
|
+
};
|
|
52
|
+
const threadIndex = normalizeLowercaseStringOrEmpty(raw).lastIndexOf(":thread:");
|
|
53
|
+
return {
|
|
54
|
+
baseSessionKey: threadIndex === -1 ? raw : raw.slice(0, threadIndex),
|
|
55
|
+
threadId: normalizeOptionalString(threadIndex === -1 ? void 0 : raw.slice(threadIndex + 8))
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function parseRawSessionConversationRef(sessionKey) {
|
|
59
|
+
const raw = normalizeOptionalString(sessionKey);
|
|
60
|
+
if (!raw) return null;
|
|
61
|
+
const rawParts = raw.split(":").filter(Boolean);
|
|
62
|
+
const bodyStartIndex = rawParts.length >= 3 && normalizeOptionalLowercaseString(rawParts[0]) === "agent" ? 2 : 0;
|
|
63
|
+
const parts = rawParts.slice(bodyStartIndex);
|
|
64
|
+
if (parts.length < 3) return null;
|
|
65
|
+
const channel = normalizeOptionalLowercaseString(parts[0]);
|
|
66
|
+
const kind = normalizeOptionalLowercaseString(parts[1]);
|
|
67
|
+
if (!channel || kind !== "group" && kind !== "channel") return null;
|
|
68
|
+
const rawId = normalizeOptionalString(parts.slice(2).join(":"));
|
|
69
|
+
const prefix = normalizeOptionalString(rawParts.slice(0, bodyStartIndex + 2).join(":"));
|
|
70
|
+
if (!rawId || !prefix) return null;
|
|
71
|
+
return {
|
|
72
|
+
channel,
|
|
73
|
+
kind,
|
|
74
|
+
rawId,
|
|
75
|
+
prefix
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function resolveThreadParentSessionKey(sessionKey) {
|
|
79
|
+
const { baseSessionKey, threadId } = parseThreadSessionSuffix(sessionKey);
|
|
80
|
+
if (!threadId) return null;
|
|
81
|
+
const parent = normalizeOptionalString(baseSessionKey);
|
|
82
|
+
if (!parent) return null;
|
|
83
|
+
return parent;
|
|
84
|
+
}
|
|
85
|
+
var init_session_key_utils = __esmMin((() => {
|
|
86
|
+
init_string_coerce();
|
|
87
|
+
}));
|
|
88
|
+
//#endregion
|
|
89
|
+
init_session_key_utils();
|
|
90
|
+
export { getSubagentDepth, init_session_key_utils, isAcpSessionKey, isCronRunSessionKey, isCronSessionKey, isSubagentSessionKey, parseAgentSessionKey, parseRawSessionConversationRef, parseThreadSessionSuffix, resolveThreadParentSessionKey };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=session-key-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key-utils.js","names":[],"sources":["../../../src/routing/session-key-utils.ts"],"sourcesContent":["import {\n normalizeLowercaseStringOrEmpty,\n normalizeOptionalLowercaseString,\n normalizeOptionalString,\n} from '../utils/string-coerce.js';\n\nexport type ParsedAgentSessionKey = {\n agentId: string;\n rest: string;\n};\n\nexport type ParsedThreadSessionSuffix = {\n baseSessionKey: string | undefined;\n threadId: string | undefined;\n};\n\nexport type RawSessionConversationRef = {\n channel: string;\n kind: 'group' | 'channel';\n rawId: string;\n prefix: string;\n};\n\n/** Parse `agent:{agentId}:{rest}` session keys (OpenClaw canonical form). */\nexport function parseAgentSessionKey(\n sessionKey: string | undefined | null,\n): ParsedAgentSessionKey | null {\n const raw = normalizeOptionalLowercaseString(sessionKey);\n if (!raw) {\n return null;\n }\n const parts = raw.split(':').filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n if (parts[0] !== 'agent') {\n return null;\n }\n const agentId = normalizeOptionalString(parts[1]);\n const rest = parts.slice(2).join(':');\n if (!agentId || !rest) {\n return null;\n }\n return { agentId: agentId.toLowerCase(), rest };\n}\n\nexport function isCronRunSessionKey(sessionKey: string | undefined | null): boolean {\n const parsed = parseAgentSessionKey(sessionKey);\n if (!parsed) {\n return false;\n }\n return /^cron:[^:]+:run:[^:]+$/.test(parsed.rest);\n}\n\nexport function isCronSessionKey(sessionKey: string | undefined | null): boolean {\n const parsed = parseAgentSessionKey(sessionKey);\n if (!parsed) {\n return false;\n }\n return normalizeOptionalLowercaseString(parsed.rest)?.startsWith('cron:') === true;\n}\n\nexport function isSubagentSessionKey(sessionKey: string | undefined | null): boolean {\n const raw = normalizeOptionalString(sessionKey);\n if (!raw) {\n return false;\n }\n if (normalizeOptionalLowercaseString(raw)?.startsWith('subagent:')) {\n return true;\n }\n const parsed = parseAgentSessionKey(raw);\n return normalizeOptionalLowercaseString(parsed?.rest)?.startsWith('subagent:') === true;\n}\n\nexport function getSubagentDepth(sessionKey: string | undefined | null): number {\n const raw = normalizeOptionalLowercaseString(sessionKey);\n if (!raw) {\n return 0;\n }\n return raw.split(':subagent:').length - 1;\n}\n\nexport function isAcpSessionKey(sessionKey: string | undefined | null): boolean {\n const raw = normalizeOptionalString(sessionKey);\n if (!raw) {\n return false;\n }\n const normalized = normalizeLowercaseStringOrEmpty(raw);\n if (normalized.startsWith('acp:')) {\n return true;\n }\n const parsed = parseAgentSessionKey(raw);\n return normalizeOptionalLowercaseString(parsed?.rest)?.startsWith('acp:') === true;\n}\n\nexport function parseThreadSessionSuffix(\n sessionKey: string | undefined | null,\n): ParsedThreadSessionSuffix {\n const raw = normalizeOptionalString(sessionKey);\n if (!raw) {\n return { baseSessionKey: undefined, threadId: undefined };\n }\n\n const lowerRaw = normalizeLowercaseStringOrEmpty(raw);\n const threadMarker = ':thread:';\n const threadIndex = lowerRaw.lastIndexOf(threadMarker);\n const baseSessionKey = threadIndex === -1 ? raw : raw.slice(0, threadIndex);\n const threadIdRaw = threadIndex === -1 ? undefined : raw.slice(threadIndex + threadMarker.length);\n const threadId = normalizeOptionalString(threadIdRaw);\n\n return { baseSessionKey, threadId };\n}\n\nexport function parseRawSessionConversationRef(\n sessionKey: string | undefined | null,\n): RawSessionConversationRef | null {\n const raw = normalizeOptionalString(sessionKey);\n if (!raw) {\n return null;\n }\n\n const rawParts = raw.split(':').filter(Boolean);\n const bodyStartIndex =\n rawParts.length >= 3 && normalizeOptionalLowercaseString(rawParts[0]) === 'agent' ? 2 : 0;\n const parts = rawParts.slice(bodyStartIndex);\n if (parts.length < 3) {\n return null;\n }\n\n const channel = normalizeOptionalLowercaseString(parts[0]);\n const kind = normalizeOptionalLowercaseString(parts[1]);\n if (!channel || (kind !== 'group' && kind !== 'channel')) {\n return null;\n }\n\n const rawId = normalizeOptionalString(parts.slice(2).join(':'));\n const prefix = normalizeOptionalString(rawParts.slice(0, bodyStartIndex + 2).join(':'));\n if (!rawId || !prefix) {\n return null;\n }\n\n return { channel, kind, rawId, prefix };\n}\n\nexport function resolveThreadParentSessionKey(\n sessionKey: string | undefined | null,\n): string | null {\n const { baseSessionKey, threadId } = parseThreadSessionSuffix(sessionKey);\n if (!threadId) {\n return null;\n }\n const parent = normalizeOptionalString(baseSessionKey);\n if (!parent) {\n return null;\n }\n return parent;\n}\n"],"mappings":"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"}
|
|
@@ -1,74 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session key
|
|
2
|
+
* Session key parsing helpers for `agent:{agentId}:{rest}` keys.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Examples:
|
|
7
|
-
* - main:telegram:acc_default:dm:123456
|
|
8
|
-
* - main:discord:acc_work:channel:987654:thread:789
|
|
9
|
-
* - subagent:main:abc123:telegram:acc_default:dm:123456
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Sanitize a segment to allowed chars a-z0-9_-
|
|
4
|
+
* Re-exports the OpenClaw-aligned builder/parser surface from agent-session-key.ts.
|
|
13
5
|
*/
|
|
6
|
+
import { defaultMainSessionKey } from './agent-session-key.js';
|
|
7
|
+
export * from './agent-session-key.js';
|
|
8
|
+
export * from './session-key-utils.js';
|
|
14
9
|
export declare function sanitizeSegment(value: string | undefined | null, options?: {
|
|
15
10
|
allowLeadingDash?: boolean;
|
|
16
11
|
}): string;
|
|
17
|
-
/**
|
|
18
|
-
* Whether the segment matches the allowed pattern and length.
|
|
19
|
-
*/
|
|
20
12
|
export declare function isValidSegment(value: string | undefined | null): boolean;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
*/
|
|
24
|
-
export interface BuildSessionKeyParams {
|
|
13
|
+
/** Structured view of an agent session key rest segment. */
|
|
14
|
+
export interface ParsedSessionKey {
|
|
25
15
|
agentId: string;
|
|
26
16
|
source: string;
|
|
27
17
|
accountId: string;
|
|
28
18
|
peerKind: string;
|
|
29
19
|
peerId: string;
|
|
30
|
-
threadId?: string
|
|
31
|
-
scopeId?: string
|
|
20
|
+
threadId?: string;
|
|
21
|
+
scopeId?: string;
|
|
32
22
|
}
|
|
33
|
-
export
|
|
34
|
-
/**
|
|
35
|
-
* Parsed session key components.
|
|
36
|
-
*/
|
|
37
|
-
export interface ParsedSessionKey {
|
|
23
|
+
export interface BuildSessionKeyParams {
|
|
38
24
|
agentId: string;
|
|
39
25
|
source: string;
|
|
40
26
|
accountId: string;
|
|
41
27
|
peerKind: string;
|
|
42
28
|
peerId: string;
|
|
43
|
-
threadId?: string;
|
|
44
|
-
scopeId?: string;
|
|
29
|
+
threadId?: string | null;
|
|
30
|
+
scopeId?: string | null;
|
|
31
|
+
mainKey?: string;
|
|
32
|
+
dmScope?: 'main' | 'per-peer' | 'per-channel-peer' | 'per-account-channel-peer';
|
|
33
|
+
identityLinks?: Record<string, string[]>;
|
|
45
34
|
}
|
|
35
|
+
/** Build an OpenClaw-style agent session key from routing segments. */
|
|
36
|
+
export declare function buildSessionKey(params: BuildSessionKeyParams): string;
|
|
37
|
+
/** Parse `agent:{agentId}:{rest}` into routing segments. Returns null for invalid keys. */
|
|
46
38
|
export declare function parseSessionKey(sessionKey: string | undefined | null): ParsedSessionKey | null;
|
|
47
|
-
/**
|
|
48
|
-
* Whether the key refers to a subagent session.
|
|
49
|
-
*/
|
|
50
|
-
export declare function isSubagentSessionKey(sessionKey: string | undefined | null): boolean;
|
|
51
|
-
/**
|
|
52
|
-
* Whether the key is a cron-driven session.
|
|
53
|
-
*/
|
|
54
|
-
export declare function isCronSessionKey(sessionKey: string | undefined | null): boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Nesting depth from repeated `subagent` prefixes in the colon-separated key.
|
|
57
|
-
* e.g. `subagent:...` => 1, `subagent:subagent:...` => 2
|
|
58
|
-
*/
|
|
59
|
-
export declare function getSubagentDepth(sessionKey: string | undefined | null): number;
|
|
60
|
-
/**
|
|
61
|
-
* Parameters for building a subagent session key.
|
|
62
|
-
*/
|
|
63
39
|
export interface BuildSubagentSessionKeyParams extends BuildSessionKeyParams {
|
|
64
40
|
parentSessionKey: string;
|
|
65
41
|
}
|
|
66
42
|
export declare function buildSubagentSessionKey(params: BuildSubagentSessionKeyParams): string;
|
|
67
|
-
/**
|
|
68
|
-
* Parent session key without a :thread: suffix, if any.
|
|
69
|
-
*/
|
|
70
43
|
export declare function getParentSessionKey(sessionKey: string | undefined | null): string | null;
|
|
71
|
-
|
|
72
|
-
* Normalize a session key (trim + lowercase).
|
|
73
|
-
*/
|
|
74
|
-
export declare function normalizeSessionKey(sessionKey: string | undefined | null): string;
|
|
44
|
+
export { defaultMainSessionKey };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { DEFAULT_ACCOUNT_ID, normalizeAccountId, normalizeOptionalAccountId } from "./account-id.js";
|
|
3
|
+
import { getSubagentDepth, init_session_key_utils, isAcpSessionKey, isCronRunSessionKey, isCronSessionKey, isSubagentSessionKey, parseAgentSessionKey, parseRawSessionConversationRef, parseThreadSessionSuffix, resolveThreadParentSessionKey } from "./session-key-utils.js";
|
|
4
|
+
import { DEFAULT_AGENT_ID, DEFAULT_MAIN_KEY, assertAgentSessionKey, buildAgentMainSessionKey, buildAgentPeerSessionKey, buildGroupHistoryKey, classifySessionKeyShape, defaultMainSessionKey, init_agent_session_key, isValidAgentId, normalizeAgentId, normalizeMainKey, normalizeSessionKey, resolveAgentIdFromSessionKey, resolveThreadSessionKeys, sanitizeAgentId, scopedHeartbeatWakeOptions, toAgentRequestSessionKey, toAgentStoreSessionKey } from "./agent-session-key.js";
|
|
2
5
|
//#region src/routing/session-key.ts
|
|
3
|
-
/**
|
|
4
|
-
* Sanitize a segment to allowed chars a-z0-9_-
|
|
5
|
-
*/
|
|
6
6
|
function sanitizeSegment(value, options) {
|
|
7
7
|
const trimmed = (value ?? "").trim();
|
|
8
8
|
if (!trimmed) return "";
|
|
@@ -12,148 +12,175 @@ function sanitizeSegment(value, options) {
|
|
|
12
12
|
if (!cleaned) return "";
|
|
13
13
|
return cleaned.slice(0, 64);
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Whether the segment matches the allowed pattern and length.
|
|
17
|
-
*/
|
|
18
15
|
function isValidSegment(value) {
|
|
19
16
|
const trimmed = (value ?? "").trim();
|
|
20
|
-
if (!trimmed) return false;
|
|
21
|
-
if (trimmed.length > 64) return false;
|
|
17
|
+
if (!trimmed || trimmed.length > 64) return false;
|
|
22
18
|
return VALID_SEGMENT_RE.test(trimmed);
|
|
23
19
|
}
|
|
20
|
+
/** Build an OpenClaw-style agent session key from routing segments. */
|
|
24
21
|
function buildSessionKey(params) {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
const peerKind = params.peerKind === "dm" ? "direct" : params.peerKind;
|
|
23
|
+
let key = buildAgentPeerSessionKey({
|
|
24
|
+
agentId: params.agentId,
|
|
25
|
+
mainKey: params.mainKey,
|
|
26
|
+
channel: params.source,
|
|
27
|
+
accountId: params.accountId,
|
|
28
|
+
peerKind,
|
|
29
|
+
peerId: params.peerId,
|
|
30
|
+
identityLinks: params.identityLinks,
|
|
31
|
+
dmScope: params.dmScope ?? (peerKind === "direct" ? "per-account-channel-peer" : void 0)
|
|
32
|
+
});
|
|
33
|
+
if (params.threadId) key = resolveThreadSessionKeys({
|
|
34
|
+
baseSessionKey: key,
|
|
35
|
+
threadId: params.threadId
|
|
36
|
+
}).sessionKey;
|
|
37
|
+
if (params.scopeId) key = `${key}:scope:${sanitizeSegment(params.scopeId, { allowLeadingDash: true }) || "default"}`;
|
|
38
|
+
return key;
|
|
35
39
|
}
|
|
40
|
+
/** Parse `agent:{agentId}:{rest}` into routing segments. Returns null for invalid keys. */
|
|
36
41
|
function parseSessionKey(sessionKey) {
|
|
37
42
|
const raw = (sessionKey ?? "").trim();
|
|
38
43
|
if (!raw) return null;
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
const { baseSessionKey, threadId } = parseThreadSuffix(raw);
|
|
45
|
+
const agentParsed = parseAgentSessionKey(baseSessionKey);
|
|
46
|
+
if (!agentParsed) return null;
|
|
47
|
+
const scopeParts = parseScopeSuffix(agentParsed.rest);
|
|
48
|
+
const rest = scopeParts.rest;
|
|
49
|
+
const scopeId = scopeParts.scopeId;
|
|
50
|
+
const mainKey = normalizeMainKey(void 0);
|
|
51
|
+
if (rest === mainKey) return {
|
|
52
|
+
agentId: agentParsed.agentId,
|
|
53
|
+
source: "cli",
|
|
54
|
+
accountId: "default",
|
|
55
|
+
peerKind: "direct",
|
|
56
|
+
peerId: mainKey,
|
|
57
|
+
threadId,
|
|
58
|
+
scopeId
|
|
59
|
+
};
|
|
60
|
+
if (rest.startsWith("subagent:")) return parseSubagentRest(agentParsed.agentId, rest, threadId, scopeId);
|
|
61
|
+
if (rest.startsWith("cron:")) {
|
|
62
|
+
const parts = rest.split(":");
|
|
63
|
+
return {
|
|
64
|
+
agentId: agentParsed.agentId,
|
|
65
|
+
source: "cron",
|
|
66
|
+
accountId: "default",
|
|
67
|
+
peerKind: "direct",
|
|
68
|
+
peerId: parts.slice(1).join(":") || "cron",
|
|
69
|
+
threadId,
|
|
70
|
+
scopeId
|
|
57
71
|
};
|
|
58
|
-
let i = 0;
|
|
59
|
-
while (i < rest.length) {
|
|
60
|
-
const marker = rest[i]?.toLowerCase();
|
|
61
|
-
const value = rest[i + 1];
|
|
62
|
-
if (marker === "thread" && value) {
|
|
63
|
-
result.threadId = value.toLowerCase();
|
|
64
|
-
i += 2;
|
|
65
|
-
} else if (marker === "scope" && value) {
|
|
66
|
-
result.scopeId = value.toLowerCase();
|
|
67
|
-
i += 2;
|
|
68
|
-
} else i++;
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
const parts = rest.split(":").filter(Boolean);
|
|
74
|
+
if (parts.length >= 4 && parts[2] === "direct") return {
|
|
75
|
+
agentId: agentParsed.agentId,
|
|
76
|
+
source: parts[0],
|
|
77
|
+
accountId: parts[1],
|
|
78
|
+
peerKind: "direct",
|
|
79
|
+
peerId: parts.slice(3).join(":"),
|
|
80
|
+
threadId,
|
|
81
|
+
scopeId
|
|
82
|
+
};
|
|
83
|
+
if (parts.length >= 3 && parts[1] === "direct") return {
|
|
84
|
+
agentId: agentParsed.agentId,
|
|
85
|
+
source: parts[0],
|
|
86
|
+
accountId: "default",
|
|
87
|
+
peerKind: "direct",
|
|
88
|
+
peerId: parts.slice(2).join(":"),
|
|
89
|
+
threadId,
|
|
90
|
+
scopeId
|
|
91
|
+
};
|
|
92
|
+
if (parts.length >= 2 && parts[0] === "direct") return {
|
|
93
|
+
agentId: agentParsed.agentId,
|
|
94
|
+
source: "cli",
|
|
95
|
+
accountId: "default",
|
|
96
|
+
peerKind: "direct",
|
|
97
|
+
peerId: parts.slice(1).join(":"),
|
|
98
|
+
threadId,
|
|
99
|
+
scopeId
|
|
100
|
+
};
|
|
101
|
+
if (parts.length >= 3 && (parts[1] === "group" || parts[1] === "channel")) return {
|
|
102
|
+
agentId: agentParsed.agentId,
|
|
103
|
+
source: parts[0],
|
|
104
|
+
accountId: "default",
|
|
105
|
+
peerKind: parts[1],
|
|
106
|
+
peerId: parts.slice(2).join(":"),
|
|
107
|
+
threadId,
|
|
108
|
+
scopeId
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
agentId: agentParsed.agentId,
|
|
112
|
+
source: "cli",
|
|
113
|
+
accountId: "default",
|
|
114
|
+
peerKind: "direct",
|
|
115
|
+
peerId: rest,
|
|
116
|
+
threadId,
|
|
117
|
+
scopeId
|
|
81
118
|
};
|
|
82
|
-
let i = 0;
|
|
83
|
-
while (i < rest.length) {
|
|
84
|
-
const marker = rest[i]?.toLowerCase();
|
|
85
|
-
const value = rest[i + 1];
|
|
86
|
-
if (marker === "thread" && value) {
|
|
87
|
-
result.threadId = value.toLowerCase();
|
|
88
|
-
i += 2;
|
|
89
|
-
} else if (marker === "scope" && value) {
|
|
90
|
-
result.scopeId = value.toLowerCase();
|
|
91
|
-
i += 2;
|
|
92
|
-
} else i++;
|
|
93
|
-
}
|
|
94
|
-
return result;
|
|
95
119
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
120
|
+
function parseThreadSuffix(raw) {
|
|
121
|
+
const idx = raw.toLowerCase().lastIndexOf(":thread:");
|
|
122
|
+
if (idx === -1) return { baseSessionKey: raw };
|
|
123
|
+
return {
|
|
124
|
+
baseSessionKey: raw.slice(0, idx),
|
|
125
|
+
threadId: raw.slice(idx + 8)
|
|
126
|
+
};
|
|
101
127
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
128
|
+
function parseScopeSuffix(rest) {
|
|
129
|
+
const idx = rest.toLowerCase().lastIndexOf(":scope:");
|
|
130
|
+
if (idx === -1) return { rest };
|
|
131
|
+
return {
|
|
132
|
+
rest: rest.slice(0, idx),
|
|
133
|
+
scopeId: rest.slice(idx + 7)
|
|
134
|
+
};
|
|
107
135
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
136
|
+
function parseSubagentRest(parentAgentId, rest, threadId, scopeId) {
|
|
137
|
+
const body = rest.replace(/^subagent:/, "");
|
|
138
|
+
const parentKey = body ? `agent:${parentAgentId}:${body}` : "";
|
|
139
|
+
const parentParsed = parentKey ? parseSessionKey(parentKey) : null;
|
|
140
|
+
if (parentParsed) return {
|
|
141
|
+
...parentParsed,
|
|
142
|
+
agentId: "subagent",
|
|
143
|
+
threadId: threadId ?? parentParsed.threadId,
|
|
144
|
+
scopeId: scopeId ?? parentParsed.scopeId
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
agentId: "subagent",
|
|
148
|
+
source: parentAgentId,
|
|
149
|
+
accountId: "default",
|
|
150
|
+
peerKind: "direct",
|
|
151
|
+
peerId: body || "unknown",
|
|
152
|
+
threadId,
|
|
153
|
+
scopeId
|
|
154
|
+
};
|
|
120
155
|
}
|
|
121
156
|
function buildSubagentSessionKey(params) {
|
|
122
|
-
const parentParsed =
|
|
157
|
+
const parentParsed = parseAgentSessionKey(params.parentSessionKey);
|
|
123
158
|
if (!parentParsed) throw new Error(`Invalid parent session key: ${params.parentSessionKey}`);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
scopeId: params.scopeId
|
|
132
|
-
});
|
|
159
|
+
const parentRest = parentParsed.rest;
|
|
160
|
+
let key = `agent:${normalizeAgentId(parentParsed.agentId)}:subagent:${parentRest}`;
|
|
161
|
+
if (params.threadId) key = resolveThreadSessionKeys({
|
|
162
|
+
baseSessionKey: key,
|
|
163
|
+
threadId: params.threadId
|
|
164
|
+
}).sessionKey;
|
|
165
|
+
return key;
|
|
133
166
|
}
|
|
134
|
-
/**
|
|
135
|
-
* Parent session key without a :thread: suffix, if any.
|
|
136
|
-
*/
|
|
137
167
|
function getParentSessionKey(sessionKey) {
|
|
138
168
|
const parsed = parseSessionKey(sessionKey);
|
|
139
|
-
if (!parsed) return null;
|
|
140
|
-
if (!parsed.threadId) return null;
|
|
169
|
+
if (!parsed?.threadId) return null;
|
|
141
170
|
return buildSessionKey({
|
|
142
171
|
agentId: parsed.agentId,
|
|
143
172
|
source: parsed.source,
|
|
144
173
|
accountId: parsed.accountId,
|
|
145
174
|
peerKind: parsed.peerKind,
|
|
146
|
-
peerId: parsed.peerId
|
|
175
|
+
peerId: parsed.peerId,
|
|
176
|
+
scopeId: parsed.scopeId
|
|
147
177
|
});
|
|
148
178
|
}
|
|
149
|
-
/**
|
|
150
|
-
* Normalize a session key (trim + lowercase).
|
|
151
|
-
*/
|
|
152
|
-
function normalizeSessionKey(sessionKey) {
|
|
153
|
-
return (sessionKey ?? "").trim().toLowerCase();
|
|
154
|
-
}
|
|
155
179
|
var VALID_SEGMENT_RE, INVALID_CHARS_RE, LEADING_DASH_RE, TRAILING_DASH_RE;
|
|
156
180
|
var init_session_key = __esmMin((() => {
|
|
181
|
+
init_agent_session_key();
|
|
182
|
+
init_agent_session_key();
|
|
183
|
+
init_session_key_utils();
|
|
157
184
|
VALID_SEGMENT_RE = /^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?$/i;
|
|
158
185
|
INVALID_CHARS_RE = /[^a-z0-9_-]+/g;
|
|
159
186
|
LEADING_DASH_RE = /^-+/;
|
|
@@ -161,6 +188,6 @@ var init_session_key = __esmMin((() => {
|
|
|
161
188
|
}));
|
|
162
189
|
//#endregion
|
|
163
190
|
init_session_key();
|
|
164
|
-
export { buildSessionKey, buildSubagentSessionKey, getParentSessionKey, getSubagentDepth, init_session_key, isCronSessionKey, isSubagentSessionKey, isValidSegment, normalizeSessionKey, parseSessionKey, sanitizeSegment };
|
|
191
|
+
export { DEFAULT_ACCOUNT_ID, DEFAULT_AGENT_ID, DEFAULT_MAIN_KEY, assertAgentSessionKey, buildAgentMainSessionKey, buildAgentPeerSessionKey, buildGroupHistoryKey, buildSessionKey, buildSubagentSessionKey, classifySessionKeyShape, defaultMainSessionKey, getParentSessionKey, getSubagentDepth, init_session_key, isAcpSessionKey, isCronRunSessionKey, isCronSessionKey, isSubagentSessionKey, isValidAgentId, isValidSegment, normalizeAccountId, normalizeAgentId, normalizeMainKey, normalizeOptionalAccountId, normalizeSessionKey, parseAgentSessionKey, parseRawSessionConversationRef, parseSessionKey, parseThreadSessionSuffix, resolveAgentIdFromSessionKey, resolveThreadParentSessionKey, resolveThreadSessionKeys, sanitizeAgentId, sanitizeSegment, scopedHeartbeatWakeOptions, toAgentRequestSessionKey, toAgentStoreSessionKey };
|
|
165
192
|
|
|
166
193
|
//# sourceMappingURL=session-key.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-key.js","names":[],"sources":["../../../src/routing/session-key.ts"],"sourcesContent":["/**\n * Session key construction and parsing.\n *\n * Format: {agentId}:{source}:{accountId}:{peerKind}:{peerId}[:thread:{threadId}][:scope:{scopeId}]\n *\n * Examples:\n * - main:telegram:acc_default:dm:123456\n * - main:discord:acc_work:channel:987654:thread:789\n * - subagent:main:abc123:telegram:acc_default:dm:123456\n */\n\n// Precompiled regexes for segment validation\nconst VALID_SEGMENT_RE = /^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?$/i;\nconst INVALID_CHARS_RE = /[^a-z0-9_-]+/g;\nconst LEADING_DASH_RE = /^-+/;\nconst TRAILING_DASH_RE = /-+$/;\n\n/**\n * Sanitize a segment to allowed chars a-z0-9_-\n */\nexport function sanitizeSegment(value: string | undefined | null, options?: { allowLeadingDash?: boolean }): string {\n const trimmed = (value ?? '').trim();\n if (!trimmed) {\n return '';\n }\n \n // Strip disallowed characters\n let cleaned = trimmed\n .toLowerCase()\n .replace(INVALID_CHARS_RE, '-');\n \n // Trim leading/trailing dashes unless a leading dash is allowed (e.g. negative IDs)\n if (!options?.allowLeadingDash) {\n cleaned = cleaned\n .replace(LEADING_DASH_RE, '')\n .replace(TRAILING_DASH_RE, '');\n } else {\n // When leading dash is allowed, only strip trailing dashes\n cleaned = cleaned.replace(TRAILING_DASH_RE, '');\n }\n \n if (!cleaned) {\n return '';\n }\n \n return cleaned.slice(0, 64);\n}\n\n/**\n * Whether the segment matches the allowed pattern and length.\n */\nexport function isValidSegment(value: string | undefined | null): boolean {\n const trimmed = (value ?? '').trim();\n if (!trimmed) {\n return false;\n }\n \n if (trimmed.length > 64) {\n return false;\n }\n \n return VALID_SEGMENT_RE.test(trimmed);\n}\n\n/**\n * Fields used to build a session key.\n */\nexport interface BuildSessionKeyParams {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string | null;\n scopeId?: string | null;\n}\n\nexport function buildSessionKey(params: BuildSessionKeyParams): string {\n const segments = [\n sanitizeSegment(params.agentId) || 'main',\n sanitizeSegment(params.source) || 'unknown',\n sanitizeSegment(params.accountId) || 'default',\n sanitizeSegment(params.peerKind) || 'unknown',\n // peerId may start with '-' (e.g. Telegram supergroup id -1001234567890)\n sanitizeSegment(params.peerId, { allowLeadingDash: true }) || 'unknown',\n ];\n \n if (params.threadId) {\n segments.push('thread', sanitizeSegment(params.threadId, { allowLeadingDash: true }) || 'unknown');\n }\n \n if (params.scopeId) {\n segments.push('scope', sanitizeSegment(params.scopeId, { allowLeadingDash: true }) || 'default');\n }\n \n return segments.join(':');\n}\n\n/**\n * Parsed session key components.\n */\nexport interface ParsedSessionKey {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string;\n scopeId?: string;\n}\n\nexport function parseSessionKey(sessionKey: string | undefined | null): ParsedSessionKey | null {\n const raw = (sessionKey ?? '').trim();\n if (!raw) {\n return null;\n }\n \n const parts = raw.split(':').filter(Boolean);\n\n /**\n * Alternate encoding used in some installs / tests: `gateway:{agentId}:{source}:{accountId}:{peerKind}:{peerId}…`\n * (distinct from normal `{agentId}:{source}:…` where the first segment is the agent id.)\n */\n if (parts.length >= 6 && parts[0]?.toLowerCase() === 'gateway') {\n const agentId = parts[1] ?? '';\n const source = parts[2] ?? '';\n const accountId = parts[3] ?? '';\n const peerKind = parts[4] ?? '';\n const peerId = parts[5] ?? '';\n const rest = parts.slice(6);\n const result: ParsedSessionKey = {\n agentId: agentId.toLowerCase(),\n source: source.toLowerCase(),\n accountId: accountId.toLowerCase(),\n peerKind: peerKind.toLowerCase(),\n peerId: peerId.toLowerCase(),\n };\n let i = 0;\n while (i < rest.length) {\n const marker = rest[i]?.toLowerCase();\n const value = rest[i + 1];\n if (marker === 'thread' && value) {\n result.threadId = value.toLowerCase();\n i += 2;\n } else if (marker === 'scope' && value) {\n result.scopeId = value.toLowerCase();\n i += 2;\n } else {\n i++;\n }\n }\n return result;\n }\n\n if (parts.length < 5) {\n return null;\n }\n \n const [agentId, source, accountId, peerKind, peerId, ...rest] = parts;\n \n if (!agentId || !source || !accountId || !peerKind || !peerId) {\n return null;\n }\n \n const result: ParsedSessionKey = {\n agentId: agentId.toLowerCase(),\n source: source.toLowerCase(),\n accountId: accountId.toLowerCase(),\n peerKind: peerKind.toLowerCase(),\n peerId: peerId.toLowerCase(),\n };\n \n // Optional :thread: and :scope: suffix segments\n let i = 0;\n while (i < rest.length) {\n const marker = rest[i]?.toLowerCase();\n const value = rest[i + 1];\n \n if (marker === 'thread' && value) {\n result.threadId = value.toLowerCase();\n i += 2;\n } else if (marker === 'scope' && value) {\n result.scopeId = value.toLowerCase();\n i += 2;\n } else {\n i++;\n }\n }\n \n return result;\n}\n\n/**\n * Whether the key refers to a subagent session.\n */\nexport function isSubagentSessionKey(sessionKey: string | undefined | null): boolean {\n const parsed = parseSessionKey(sessionKey);\n return parsed?.agentId === 'subagent';\n}\n\n/**\n * Whether the key is a cron-driven session.\n */\nexport function isCronSessionKey(sessionKey: string | undefined | null): boolean {\n const parsed = parseSessionKey(sessionKey);\n return parsed?.source === 'cron';\n}\n\n/**\n * Nesting depth from repeated `subagent` prefixes in the colon-separated key.\n * e.g. `subagent:...` => 1, `subagent:subagent:...` => 2\n */\nexport function getSubagentDepth(sessionKey: string | undefined | null): number {\n const raw = (sessionKey ?? '').trim();\n if (!raw) {\n return 0;\n }\n \n const parts = raw.split(':');\n let depth = 0;\n \n for (const part of parts) {\n if (part.toLowerCase() === 'subagent') {\n depth++;\n } else {\n break;\n }\n }\n \n return depth;\n}\n\n/**\n * Parameters for building a subagent session key.\n */\nexport interface BuildSubagentSessionKeyParams extends BuildSessionKeyParams {\n parentSessionKey: string;\n}\n\nexport function buildSubagentSessionKey(params: BuildSubagentSessionKeyParams): string {\n const parentParsed = parseSessionKey(params.parentSessionKey);\n if (!parentParsed) {\n throw new Error(`Invalid parent session key: ${params.parentSessionKey}`);\n }\n \n return buildSessionKey({\n agentId: 'subagent',\n source: parentParsed.agentId,\n accountId: parentParsed.accountId,\n peerKind: parentParsed.peerKind,\n peerId: parentParsed.peerId,\n threadId: params.threadId,\n scopeId: params.scopeId,\n });\n}\n\n/**\n * Parent session key without a :thread: suffix, if any.\n */\nexport function getParentSessionKey(sessionKey: string | undefined | null): string | null {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed) {\n return null;\n }\n \n if (!parsed.threadId) {\n return null;\n }\n \n return buildSessionKey({\n agentId: parsed.agentId,\n source: parsed.source,\n accountId: parsed.accountId,\n peerKind: parsed.peerKind,\n peerId: parsed.peerId,\n });\n}\n\n/**\n * Normalize a session key (trim + lowercase).\n */\nexport function normalizeSessionKey(sessionKey: string | undefined | null): string {\n return (sessionKey ?? '').trim().toLowerCase();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-key.js","names":[],"sources":["../../../src/routing/session-key.ts"],"sourcesContent":["/**\n * Session key parsing helpers for `agent:{agentId}:{rest}` keys.\n *\n * Re-exports the OpenClaw-aligned builder/parser surface from agent-session-key.ts.\n */\n\nimport {\n buildAgentPeerSessionKey,\n defaultMainSessionKey,\n normalizeAgentId,\n normalizeMainKey,\n parseAgentSessionKey,\n resolveThreadSessionKeys,\n type PeerKind,\n} from './agent-session-key.js';\n\nexport * from './agent-session-key.js';\nexport * from './session-key-utils.js';\n\nconst VALID_SEGMENT_RE = /^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?$/i;\nconst INVALID_CHARS_RE = /[^a-z0-9_-]+/g;\nconst LEADING_DASH_RE = /^-+/;\nconst TRAILING_DASH_RE = /-+$/;\n\nexport function sanitizeSegment(\n value: string | undefined | null,\n options?: { allowLeadingDash?: boolean },\n): string {\n const trimmed = (value ?? '').trim();\n if (!trimmed) {\n return '';\n }\n\n let cleaned = trimmed.toLowerCase().replace(INVALID_CHARS_RE, '-');\n\n if (!options?.allowLeadingDash) {\n cleaned = cleaned.replace(LEADING_DASH_RE, '').replace(TRAILING_DASH_RE, '');\n } else {\n cleaned = cleaned.replace(TRAILING_DASH_RE, '');\n }\n\n if (!cleaned) {\n return '';\n }\n\n return cleaned.slice(0, 64);\n}\n\nexport function isValidSegment(value: string | undefined | null): boolean {\n const trimmed = (value ?? '').trim();\n if (!trimmed || trimmed.length > 64) {\n return false;\n }\n return VALID_SEGMENT_RE.test(trimmed);\n}\n\n/** Structured view of an agent session key rest segment. */\nexport interface ParsedSessionKey {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string;\n scopeId?: string;\n}\n\nexport interface BuildSessionKeyParams {\n agentId: string;\n source: string;\n accountId: string;\n peerKind: string;\n peerId: string;\n threadId?: string | null;\n scopeId?: string | null;\n mainKey?: string;\n dmScope?: 'main' | 'per-peer' | 'per-channel-peer' | 'per-account-channel-peer';\n identityLinks?: Record<string, string[]>;\n}\n\n/** Build an OpenClaw-style agent session key from routing segments. */\nexport function buildSessionKey(params: BuildSessionKeyParams): string {\n const peerKind = (params.peerKind === 'dm' ? 'direct' : params.peerKind) as PeerKind;\n let key = buildAgentPeerSessionKey({\n agentId: params.agentId,\n mainKey: params.mainKey,\n channel: params.source,\n accountId: params.accountId,\n peerKind,\n peerId: params.peerId,\n identityLinks: params.identityLinks,\n dmScope:\n params.dmScope ??\n (peerKind === 'direct' ? 'per-account-channel-peer' : undefined),\n });\n\n if (params.threadId) {\n key = resolveThreadSessionKeys({ baseSessionKey: key, threadId: params.threadId }).sessionKey;\n }\n\n if (params.scopeId) {\n key = `${key}:scope:${sanitizeSegment(params.scopeId, { allowLeadingDash: true }) || 'default'}`;\n }\n\n return key;\n}\n\n/** Parse `agent:{agentId}:{rest}` into routing segments. Returns null for invalid keys. */\nexport function parseSessionKey(sessionKey: string | undefined | null): ParsedSessionKey | null {\n const raw = (sessionKey ?? '').trim();\n if (!raw) {\n return null;\n }\n\n const { baseSessionKey, threadId } = parseThreadSuffix(raw);\n const agentParsed = parseAgentSessionKey(baseSessionKey);\n if (!agentParsed) {\n return null;\n }\n\n const scopeParts = parseScopeSuffix(agentParsed.rest);\n const rest = scopeParts.rest;\n const scopeId = scopeParts.scopeId;\n\n const mainKey = normalizeMainKey(undefined);\n if (rest === mainKey) {\n return {\n agentId: agentParsed.agentId,\n source: 'cli',\n accountId: 'default',\n peerKind: 'direct',\n peerId: mainKey,\n threadId,\n scopeId,\n };\n }\n\n if (rest.startsWith('subagent:')) {\n return parseSubagentRest(agentParsed.agentId, rest, threadId, scopeId);\n }\n\n if (rest.startsWith('cron:')) {\n const parts = rest.split(':');\n return {\n agentId: agentParsed.agentId,\n source: 'cron',\n accountId: 'default',\n peerKind: 'direct',\n peerId: parts.slice(1).join(':') || 'cron',\n threadId,\n scopeId,\n };\n }\n\n const parts = rest.split(':').filter(Boolean);\n\n // channel:account:direct:peer\n if (parts.length >= 4 && parts[2] === 'direct') {\n return {\n agentId: agentParsed.agentId,\n source: parts[0]!,\n accountId: parts[1]!,\n peerKind: 'direct',\n peerId: parts.slice(3).join(':'),\n threadId,\n scopeId,\n };\n }\n\n // channel:direct:peer\n if (parts.length >= 3 && parts[1] === 'direct') {\n return {\n agentId: agentParsed.agentId,\n source: parts[0]!,\n accountId: 'default',\n peerKind: 'direct',\n peerId: parts.slice(2).join(':'),\n threadId,\n scopeId,\n };\n }\n\n // direct:peer\n if (parts.length >= 2 && parts[0] === 'direct') {\n return {\n agentId: agentParsed.agentId,\n source: 'cli',\n accountId: 'default',\n peerKind: 'direct',\n peerId: parts.slice(1).join(':'),\n threadId,\n scopeId,\n };\n }\n\n // channel:group|channel:peer\n if (parts.length >= 3 && (parts[1] === 'group' || parts[1] === 'channel')) {\n return {\n agentId: agentParsed.agentId,\n source: parts[0]!,\n accountId: 'default',\n peerKind: parts[1]!,\n peerId: parts.slice(2).join(':'),\n threadId,\n scopeId,\n };\n }\n\n // Custom rest (e.g. tui-uuid)\n return {\n agentId: agentParsed.agentId,\n source: 'cli',\n accountId: 'default',\n peerKind: 'direct',\n peerId: rest,\n threadId,\n scopeId,\n };\n}\n\nfunction parseThreadSuffix(raw: string): { baseSessionKey: string; threadId?: string } {\n const lower = raw.toLowerCase();\n const idx = lower.lastIndexOf(':thread:');\n if (idx === -1) {\n return { baseSessionKey: raw };\n }\n return {\n baseSessionKey: raw.slice(0, idx),\n threadId: raw.slice(idx + ':thread:'.length),\n };\n}\n\nfunction parseScopeSuffix(rest: string): { rest: string; scopeId?: string } {\n const lower = rest.toLowerCase();\n const idx = lower.lastIndexOf(':scope:');\n if (idx === -1) {\n return { rest };\n }\n return {\n rest: rest.slice(0, idx),\n scopeId: rest.slice(idx + ':scope:'.length),\n };\n}\n\nfunction parseSubagentRest(\n parentAgentId: string,\n rest: string,\n threadId?: string,\n scopeId?: string,\n): ParsedSessionKey {\n const body = rest.replace(/^subagent:/, '');\n const parentKey = body ? `agent:${parentAgentId}:${body}` : '';\n const parentParsed = parentKey ? parseSessionKey(parentKey) : null;\n if (parentParsed) {\n return {\n ...parentParsed,\n agentId: 'subagent',\n threadId: threadId ?? parentParsed.threadId,\n scopeId: scopeId ?? parentParsed.scopeId,\n };\n }\n return {\n agentId: 'subagent',\n source: parentAgentId,\n accountId: 'default',\n peerKind: 'direct',\n peerId: body || 'unknown',\n threadId,\n scopeId,\n };\n}\n\nexport interface BuildSubagentSessionKeyParams extends BuildSessionKeyParams {\n parentSessionKey: string;\n}\n\nexport function buildSubagentSessionKey(params: BuildSubagentSessionKeyParams): string {\n const parentParsed = parseAgentSessionKey(params.parentSessionKey);\n if (!parentParsed) {\n throw new Error(`Invalid parent session key: ${params.parentSessionKey}`);\n }\n const parentRest = parentParsed.rest;\n let key = `agent:${normalizeAgentId(parentParsed.agentId)}:subagent:${parentRest}`;\n if (params.threadId) {\n key = resolveThreadSessionKeys({ baseSessionKey: key, threadId: params.threadId }).sessionKey;\n }\n return key;\n}\n\nexport function getParentSessionKey(sessionKey: string | undefined | null): string | null {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed?.threadId) {\n return null;\n }\n return buildSessionKey({\n agentId: parsed.agentId,\n source: parsed.source,\n accountId: parsed.accountId,\n peerKind: parsed.peerKind,\n peerId: parsed.peerId,\n scopeId: parsed.scopeId,\n });\n}\n\nexport { defaultMainSessionKey };\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
1
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import {
|
|
4
|
+
import { mkdir, readFile } from "fs/promises";
|
|
4
5
|
import { join } from "path";
|
|
5
6
|
import { existsSync } from "fs";
|
|
6
|
-
import { mkdir, readFile } from "fs/promises";
|
|
7
7
|
//#region src/session/config-store.ts
|
|
8
8
|
/**
|
|
9
9
|
* Session Config Store
|
|
@@ -11,6 +11,12 @@ export { normalizeWorkingDirectoryInput, effectiveWorkspacePathForSession, } fro
|
|
|
11
11
|
export { SessionStatus, type SessionMetadata, type SessionDetail, type SessionListQuery, type PaginatedResult, type SessionStats, type ExportFormat, type SessionExport, type SessionTranscriptSummary, type CompactionCheckpointSummary, type CompactionCheckpointDetail, } from './types.js';
|
|
12
12
|
export { normalizeCompactionCheckpointId } from './compaction-checkpoints.js';
|
|
13
13
|
export { shouldSkipWebchatInboundByAbortCutoff } from './abort-cutoff.js';
|
|
14
|
+
export { DEFAULT_RESET_AT_HOUR, DEFAULT_RESET_MODE, DEFAULT_IDLE_MINUTES, evaluateSessionFreshness, resolveDailyResetAtMs, resolveSessionResetPolicy, type SessionFreshness, type SessionResetConfig, type SessionResetMode, type SessionResetPolicy, type SessionResetType, } from './reset-policy.js';
|
|
15
|
+
export { isThreadSessionKey, resolveChannelResetConfig, resolveSessionResetType, } from './reset-type.js';
|
|
16
|
+
export { resolveSessionLifecycleTimestamps, type SessionLifecycleEntry } from './lifecycle-timestamps.js';
|
|
17
|
+
export { resolveSession, resolveSessionKeyForRequest, type SessionKeyResolution, type SessionResolution, } from './resolve-session.js';
|
|
18
|
+
export { initSessionTurn, type InitSessionTurnOptions, type InitSessionTurnResult, type SessionResetFn, } from './init-session-turn.js';
|
|
19
|
+
export { DEFAULT_RESET_TRIGGERS, RESET_OVERLAP_COMMANDS, bareResetAckMessage, matchResetTriggers, resolveResetTriggers, shouldSkipResetOverlapCommand, stripLeadingEnvelopeTimestamp, type ResetTriggerMatch, } from './reset-triggers.js';
|
|
14
20
|
export type { CompactionConfig, CompactionResult } from '../agent/memory/compaction.js';
|
|
15
21
|
export type { WindowConfig } from '../agent/memory/window.js';
|
|
16
22
|
export { maybeAutoTitleSessionStore, generateSessionTitleFromMessages, sanitizeSessionTitle, fallbackTitleFromMessages, isWebchatSessionKey, shouldAutoTitleSessionKey, } from './session-title.js';
|
|
@@ -12,6 +12,12 @@ import { SessionConfigStore, resolveReasoningLevel, resolveThinkingLevel, resolv
|
|
|
12
12
|
import { resolveEffectiveReasoningLevel, resolveEffectiveThinkingLevel } from "./thinking-resolve.js";
|
|
13
13
|
import { effectiveWorkspacePathForSession, normalizeWorkingDirectoryInput } from "./session-workspace.js";
|
|
14
14
|
import { shouldSkipWebchatInboundByAbortCutoff } from "./abort-cutoff.js";
|
|
15
|
+
import { DEFAULT_IDLE_MINUTES, DEFAULT_RESET_AT_HOUR, DEFAULT_RESET_MODE, evaluateSessionFreshness, resolveDailyResetAtMs, resolveSessionResetPolicy } from "./reset-policy.js";
|
|
16
|
+
import { isThreadSessionKey, resolveChannelResetConfig, resolveSessionResetType } from "./reset-type.js";
|
|
17
|
+
import { resolveSessionLifecycleTimestamps } from "./lifecycle-timestamps.js";
|
|
18
|
+
import { resolveSession, resolveSessionKeyForRequest } from "./resolve-session.js";
|
|
19
|
+
import { DEFAULT_RESET_TRIGGERS, RESET_OVERLAP_COMMANDS, bareResetAckMessage, matchResetTriggers, resolveResetTriggers, shouldSkipResetOverlapCommand, stripLeadingEnvelopeTimestamp } from "./reset-triggers.js";
|
|
20
|
+
import { initSessionTurn } from "./init-session-turn.js";
|
|
15
21
|
import { flattenMessageContent, messagesToClientHistory } from "./client-history.js";
|
|
16
22
|
import { CURRENT_SESSION_TRANSCRIPT_VERSION, XOPC_SESSION_TRANSCRIPT_TYPE } from "./transcript-format.js";
|
|
17
|
-
export { CURRENT_SESSION_TRANSCRIPT_VERSION, SessionConfigStore, SessionIndex, SessionSearchIndex, SessionStatus, SessionStore, XOPC_SESSION_TRANSCRIPT_TYPE, applySessionPatchToMetadata, buildSessionContextForLlm, effectiveWorkspacePathForSession, emitSessionTranscriptUpdate, fallbackTitleFromMessages, flattenMessageContent, generateSessionTitleFromMessages, getOrLoadSessionSearchIndex, invalidateSessionSearchIndexCache, isTranscriptContextEntry, isWebchatSessionKey, maybeAutoTitleSessionStore, mergeLlmMessagesPreservingContextRows, messagesToClientHistory, normalizeCompactionCheckpointId, normalizeWorkingDirectoryInput, onSessionTranscriptUpdate, resolveEffectiveReasoningLevel, resolveEffectiveThinkingLevel, resolveReasoningLevel, resolveThinkingLevel, resolveVerboseLevel, sanitizeSessionTitle, shouldAutoTitleSessionKey, shouldSkipWebchatInboundByAbortCutoff, transcriptRowsFromJsonArray };
|
|
23
|
+
export { CURRENT_SESSION_TRANSCRIPT_VERSION, DEFAULT_IDLE_MINUTES, DEFAULT_RESET_AT_HOUR, DEFAULT_RESET_MODE, DEFAULT_RESET_TRIGGERS, RESET_OVERLAP_COMMANDS, SessionConfigStore, SessionIndex, SessionSearchIndex, SessionStatus, SessionStore, XOPC_SESSION_TRANSCRIPT_TYPE, applySessionPatchToMetadata, bareResetAckMessage, buildSessionContextForLlm, effectiveWorkspacePathForSession, emitSessionTranscriptUpdate, evaluateSessionFreshness, fallbackTitleFromMessages, flattenMessageContent, generateSessionTitleFromMessages, getOrLoadSessionSearchIndex, initSessionTurn, invalidateSessionSearchIndexCache, isThreadSessionKey, isTranscriptContextEntry, isWebchatSessionKey, matchResetTriggers, maybeAutoTitleSessionStore, mergeLlmMessagesPreservingContextRows, messagesToClientHistory, normalizeCompactionCheckpointId, normalizeWorkingDirectoryInput, onSessionTranscriptUpdate, resolveChannelResetConfig, resolveDailyResetAtMs, resolveEffectiveReasoningLevel, resolveEffectiveThinkingLevel, resolveReasoningLevel, resolveResetTriggers, resolveSession, resolveSessionKeyForRequest, resolveSessionLifecycleTimestamps, resolveSessionResetPolicy, resolveSessionResetType, resolveThinkingLevel, resolveVerboseLevel, sanitizeSessionTitle, shouldAutoTitleSessionKey, shouldSkipResetOverlapCommand, shouldSkipWebchatInboundByAbortCutoff, stripLeadingEnvelopeTimestamp, transcriptRowsFromJsonArray };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Config } from '../config/schema.js';
|
|
2
|
+
export type SessionResetFn = (sessionKey: string) => Promise<{
|
|
3
|
+
sessionId: string;
|
|
4
|
+
previousSessionId: string;
|
|
5
|
+
} | null>;
|
|
6
|
+
export type InitSessionTurnResult = {
|
|
7
|
+
sessionKey: string;
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
previousSessionId?: string;
|
|
10
|
+
isNewSession: boolean;
|
|
11
|
+
resetTriggered: boolean;
|
|
12
|
+
staleRollover: boolean;
|
|
13
|
+
bodyStripped: string;
|
|
14
|
+
bareReset: boolean;
|
|
15
|
+
ackMessage?: string;
|
|
16
|
+
};
|
|
17
|
+
export type InitSessionTurnOptions = {
|
|
18
|
+
cfg: Config;
|
|
19
|
+
sessionKey: string;
|
|
20
|
+
body?: string;
|
|
21
|
+
resetSession: SessionResetFn;
|
|
22
|
+
/** When true, skip idle/daily implicit rollover (provider-owned CLI sessions). */
|
|
23
|
+
skipImplicitExpiry?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Turn-start session init: match `resetTriggers`, evaluate freshness, archive +
|
|
27
|
+
* assign new `sessionId` when stale or explicitly reset. OpenClaw `initSessionState`
|
|
28
|
+
* equivalent for xopc direct + channel paths.
|
|
29
|
+
*/
|
|
30
|
+
export declare function initSessionTurn(opts: InitSessionTurnOptions): Promise<InitSessionTurnResult>;
|