@xopcai/xopc 0.0.6 → 0.0.8
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/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js → agents-BSNzJWbQ.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js.map → agents-BSNzJWbQ.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js → apps-page-BKk9SB4D.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js.map → apps-page-BKk9SB4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/attachment-load-DXcJLSWT.js +1 -0
- package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js → channels-settings-_J6cQN6G.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js.map → channels-settings-_J6cQN6G.js.map} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js → chat-agents-api-DPb_0O8M.js} +2 -2
- package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js.map → chat-agents-api-DPb_0O8M.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js → cron-page-BUJOuuKX.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js.map → cron-page-BUJOuuKX.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js → cron-utils-Cn0YVg8x.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js.map → cron-utils-Cn0YVg8x.js.map} +1 -1
- package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js +2 -0
- package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js.map +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js → extension-debug-page-DTz4O5Ua.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js.map → extension-debug-page-DTz4O5Ua.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js → extension-iframe-host-Cs1Kde9o.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js.map → extension-iframe-host-Cs1Kde9o.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js → extension-page-G52iX0Bo.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js.map → extension-page-G52iX0Bo.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js → extension-provider-CO2jxBA9.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js.map → extension-provider-CO2jxBA9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js → extension-settings-page-D9Ul8uSt.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js.map → extension-settings-page-D9Ul8uSt.js.map} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js → gateway-config-swr-Bc8SVD15.js} +2 -2
- package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js.map → gateway-config-swr-Bc8SVD15.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-BXUJbteW.js +16 -0
- package/dist/gateway/static/root/assets/index-BXUJbteW.js.map +1 -0
- package/dist/gateway/static/root/assets/index-CQLMxWSA.css +2 -0
- package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js → logs-page-5V25JkQY.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js.map → logs-page-5V25JkQY.js.map} +1 -1
- package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js → model-selector-he3aQfme.js} +2 -2
- package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js.map → model-selector-he3aQfme.js.map} +1 -1
- package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js +2 -0
- package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js.map +1 -0
- package/dist/gateway/static/root/assets/page-header-store-DJHD9Ean.js +2 -0
- package/dist/gateway/static/root/assets/{page-header-store-HcRZK5CZ.js.map → page-header-store-DJHD9Ean.js.map} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js → session-api-n-4O5d9U.js} +2 -2
- package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js.map → session-api-n-4O5d9U.js.map} +1 -1
- package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js → session-working-directory-control-B6dHLvbr.js} +3 -3
- package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js.map → session-working-directory-control-B6dHLvbr.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js → sessions-page-rBUfTdm3.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js.map → sessions-page-rBUfTdm3.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js +2 -0
- package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js.map +1 -0
- package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js → skill-api-vxtE8kI6.js} +2 -2
- package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js.map → skill-api-vxtE8kI6.js.map} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js → skills-page-D36_O2Ub.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js.map → skills-page-D36_O2Ub.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js → theme-store-CmiSsYBd.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js.map → theme-store-CmiSsYBd.js.map} +1 -1
- package/dist/gateway/static/root/assets/url-CtSqjF9J.js +2 -0
- package/dist/gateway/static/root/assets/url-CtSqjF9J.js.map +1 -0
- package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js → useTranslation-DYORQ7x6.js} +2 -2
- package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js.map → useTranslation-DYORQ7x6.js.map} +1 -1
- package/dist/gateway/static/root/index.html +16 -16
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/image/index.d.ts +0 -1
- package/dist/src/agent/image/index.js +1 -2
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +1 -1
- package/dist/src/agent/service.js +3 -3
- package/dist/src/agent/skills/hub-hash.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/browser/tools.js +2 -2
- package/dist/src/agent/tools/browser/tools.js.map +1 -1
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/image-tool.js +2 -2
- package/dist/src/agent/tools/image-tool.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/read.d.ts +0 -2
- package/dist/src/agent/tools/read.js +1 -3
- package/dist/src/agent/tools/read.js.map +1 -1
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/channels/plugin-types.d.ts +14 -0
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/channel-config.js +113 -0
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +47 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/config-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/config-health.js +82 -0
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.js +116 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +64 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +64 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/node-version.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js +33 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +91 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.js +85 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +118 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +99 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/version-check.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/version-check.js +71 -0
- package/dist/src/cli/commands/doctor/checks/version-check.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +73 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -0
- package/dist/src/cli/commands/doctor/flow.d.ts +9 -0
- package/dist/src/cli/commands/doctor/flow.js +51 -0
- package/dist/src/cli/commands/doctor/flow.js.map +1 -0
- package/dist/src/cli/commands/doctor/format.d.ts +6 -0
- package/dist/src/cli/commands/doctor/format.js +61 -0
- package/dist/src/cli/commands/doctor/format.js.map +1 -0
- package/dist/src/cli/commands/doctor/index.js +44 -0
- package/dist/src/cli/commands/doctor/index.js.map +1 -0
- package/dist/src/cli/commands/doctor/types.d.ts +20 -0
- package/dist/src/cli/commands/doctor/types.js +1 -0
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/index.d.ts +1 -1
- package/dist/src/cli/index.js +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/init-workspace.js +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.d.ts +15 -15
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/schema.d.ts +0 -105
- package/dist/src/config/schema.js +3 -40
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/launchd.js.map +1 -1
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/daemon/systemd.js.map +1 -1
- package/dist/src/extensions/loader.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +1 -1
- package/dist/src/gateway/hono/routes/doctor.d.ts +3 -0
- package/dist/src/gateway/hono/routes/doctor.js +35 -0
- package/dist/src/gateway/hono/routes/doctor.js.map +1 -0
- package/dist/src/gateway/hono/routes/index.js +2 -0
- package/dist/src/gateway/hono/routes/index.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/hono/sse.js +2 -2
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/ports.js +98 -3
- package/dist/src/gateway/ports.js.map +1 -1
- package/dist/src/gateway/service.d.ts +0 -4
- package/dist/src/gateway/service.js +4 -23
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/routing/bindings.js +1 -1
- package/dist/src/routing/index.d.ts +1 -1
- package/dist/src/routing/index.js +2 -2
- package/dist/src/routing/index.js.map +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/session-key.d.ts +0 -5
- package/dist/src/routing/session-key.js +1 -27
- package/dist/src/routing/session-key.js.map +1 -1
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/session/store.js +2 -6
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/types.d.ts +0 -10
- package/dist/src/session/types.js.map +1 -1
- package/package.json +1 -2
- package/dist/gateway/static/root/assets/attachment-load-6pRlDPZ8.js +0 -1
- package/dist/gateway/static/root/assets/index-DBZ5eXW5.js +0 -16
- package/dist/gateway/static/root/assets/index-DBZ5eXW5.js.map +0 -1
- package/dist/gateway/static/root/assets/index-KsVMH-Jo.css +0 -2
- package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js +0 -2
- package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js.map +0 -1
- package/dist/gateway/static/root/assets/page-header-store-HcRZK5CZ.js +0 -2
- package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js +0 -2
- package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js.map +0 -1
- package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js.map +0 -1
- package/dist/gateway/static/root/assets/url-QmwQTJ-j.js +0 -2
- package/dist/gateway/static/root/assets/url-QmwQTJ-j.js.map +0 -1
- package/dist/src/acp/commands.d.ts +0 -11
- package/dist/src/acp/commands.js +0 -17
- package/dist/src/acp/commands.js.map +0 -1
- package/dist/src/acp/control-plane/identity-reconcile.d.ts +0 -36
- package/dist/src/acp/control-plane/identity-reconcile.js +0 -124
- package/dist/src/acp/control-plane/identity-reconcile.js.map +0 -1
- package/dist/src/acp/control-plane/index.d.ts +0 -10
- package/dist/src/acp/control-plane/index.js +0 -6
- package/dist/src/acp/control-plane/manager.d.ts +0 -86
- package/dist/src/acp/control-plane/manager.js +0 -502
- package/dist/src/acp/control-plane/manager.js.map +0 -1
- package/dist/src/acp/control-plane/manager.types.d.ts +0 -125
- package/dist/src/acp/control-plane/manager.types.js +0 -14
- package/dist/src/acp/control-plane/manager.types.js.map +0 -1
- package/dist/src/acp/control-plane/manager.utils.d.ts +0 -29
- package/dist/src/acp/control-plane/manager.utils.js +0 -46
- package/dist/src/acp/control-plane/manager.utils.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-cache-manager.d.ts +0 -49
- package/dist/src/acp/control-plane/runtime-cache-manager.js +0 -155
- package/dist/src/acp/control-plane/runtime-cache-manager.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-cache.d.ts +0 -45
- package/dist/src/acp/control-plane/runtime-cache.js +0 -58
- package/dist/src/acp/control-plane/runtime-cache.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-options.d.ts +0 -30
- package/dist/src/acp/control-plane/runtime-options.js +0 -92
- package/dist/src/acp/control-plane/runtime-options.js.map +0 -1
- package/dist/src/acp/control-plane/session-actor-queue.d.ts +0 -22
- package/dist/src/acp/control-plane/session-actor-queue.js +0 -70
- package/dist/src/acp/control-plane/session-actor-queue.js.map +0 -1
- package/dist/src/acp/control-plane/session-lifecycle-manager.d.ts +0 -59
- package/dist/src/acp/control-plane/session-lifecycle-manager.js +0 -209
- package/dist/src/acp/control-plane/session-lifecycle-manager.js.map +0 -1
- package/dist/src/acp/control-plane/session-store.d.ts +0 -39
- package/dist/src/acp/control-plane/session-store.js +0 -149
- package/dist/src/acp/control-plane/session-store.js.map +0 -1
- package/dist/src/acp/control-plane/turn-manager.d.ts +0 -40
- package/dist/src/acp/control-plane/turn-manager.js +0 -134
- package/dist/src/acp/control-plane/turn-manager.js.map +0 -1
- package/dist/src/acp/event-mapper.d.ts +0 -48
- package/dist/src/acp/event-mapper.js +0 -94
- package/dist/src/acp/event-mapper.js.map +0 -1
- package/dist/src/acp/index.d.ts +0 -10
- package/dist/src/acp/index.js +0 -5
- package/dist/src/acp/meta.d.ts +0 -15
- package/dist/src/acp/meta.js +0 -36
- package/dist/src/acp/meta.js.map +0 -1
- package/dist/src/acp/routing-integration.d.ts +0 -37
- package/dist/src/acp/routing-integration.js +0 -58
- package/dist/src/acp/routing-integration.js.map +0 -1
- package/dist/src/acp/runtime/backends/index.d.ts +0 -4
- package/dist/src/acp/runtime/backends/index.js +0 -2
- package/dist/src/acp/runtime/backends/local.d.ts +0 -136
- package/dist/src/acp/runtime/backends/local.js +0 -603
- package/dist/src/acp/runtime/backends/local.js.map +0 -1
- package/dist/src/acp/runtime/error-text.d.ts +0 -16
- package/dist/src/acp/runtime/error-text.js +0 -40
- package/dist/src/acp/runtime/error-text.js.map +0 -1
- package/dist/src/acp/runtime/errors.d.ts +0 -31
- package/dist/src/acp/runtime/errors.js +0 -47
- package/dist/src/acp/runtime/errors.js.map +0 -1
- package/dist/src/acp/runtime/index.d.ts +0 -7
- package/dist/src/acp/runtime/index.js +0 -4
- package/dist/src/acp/runtime/registry.d.ts +0 -35
- package/dist/src/acp/runtime/registry.js +0 -85
- package/dist/src/acp/runtime/registry.js.map +0 -1
- package/dist/src/acp/runtime/session-identity.d.ts +0 -35
- package/dist/src/acp/runtime/session-identity.js +0 -134
- package/dist/src/acp/runtime/session-identity.js.map +0 -1
- package/dist/src/acp/runtime/types.d.ts +0 -214
- package/dist/src/acp/secret-file.d.ts +0 -7
- package/dist/src/acp/secret-file.js +0 -19
- package/dist/src/acp/secret-file.js.map +0 -1
- package/dist/src/acp/server.d.ts +0 -48
- package/dist/src/acp/server.js +0 -300
- package/dist/src/acp/server.js.map +0 -1
- package/dist/src/acp/session.d.ts +0 -29
- package/dist/src/acp/session.js +0 -30
- package/dist/src/acp/session.js.map +0 -1
- package/dist/src/acp/types.d.ts +0 -39
- package/dist/src/acp/types.js +0 -13
- package/dist/src/acp/types.js.map +0 -1
- package/dist/src/agent/image/describe-images.d.ts +0 -18
- package/dist/src/agent/image/describe-images.js +0 -19
- package/dist/src/agent/image/describe-images.js.map +0 -1
- package/dist/src/cli/commands/acp.d.ts +0 -4
- package/dist/src/cli/commands/acp.js +0 -200
- package/dist/src/cli/commands/acp.js.map +0 -1
- /package/dist/src/{acp/runtime/types.js → cli/commands/doctor/index.d.ts} +0 -0
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
//#region src/acp/control-plane/runtime-options.ts
|
|
2
|
-
/** Normalize optional string */
|
|
3
|
-
function normalizeText(value) {
|
|
4
|
-
if (typeof value !== "string") return void 0;
|
|
5
|
-
return value.trim() || void 0;
|
|
6
|
-
}
|
|
7
|
-
/** Normalize runtime options object */
|
|
8
|
-
function normalizeRuntimeOptions(options) {
|
|
9
|
-
if (!options) return {};
|
|
10
|
-
const result = {};
|
|
11
|
-
if (options.cwd) result.cwd = options.cwd.trim();
|
|
12
|
-
if (options.runtimeMode) result.runtimeMode = options.runtimeMode.trim();
|
|
13
|
-
for (const [key, value] of Object.entries(options)) if (key !== "cwd" && key !== "runtimeMode") result[key] = value;
|
|
14
|
-
return result;
|
|
15
|
-
}
|
|
16
|
-
/** Merge runtime option patches */
|
|
17
|
-
function mergeRuntimeOptions(params) {
|
|
18
|
-
const { current = {}, patch } = params;
|
|
19
|
-
return normalizeRuntimeOptions({
|
|
20
|
-
...current,
|
|
21
|
-
...patch
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
/** Shallow equality for runtime options */
|
|
25
|
-
function runtimeOptionsEqual(a, b) {
|
|
26
|
-
if (a === b) return true;
|
|
27
|
-
if (!a || !b) return !a && !b;
|
|
28
|
-
const keysA = Object.keys(a).sort();
|
|
29
|
-
const keysB = Object.keys(b).sort();
|
|
30
|
-
if (keysA.length !== keysB.length) return false;
|
|
31
|
-
for (let i = 0; i < keysA.length; i++) {
|
|
32
|
-
if (keysA[i] !== keysB[i]) return false;
|
|
33
|
-
const key = keysA[i];
|
|
34
|
-
if (a[key] !== b[key]) return false;
|
|
35
|
-
}
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
/** Options from session meta */
|
|
39
|
-
function resolveRuntimeOptionsFromMeta(meta) {
|
|
40
|
-
return meta.runtimeOptions ?? {};
|
|
41
|
-
}
|
|
42
|
-
/** Validate non-empty runtime mode string */
|
|
43
|
-
function validateRuntimeModeInput(mode) {
|
|
44
|
-
const trimmed = mode.trim();
|
|
45
|
-
if (!trimmed) throw new Error("Runtime mode is required.");
|
|
46
|
-
return trimmed;
|
|
47
|
-
}
|
|
48
|
-
/** Validate config option key/value pair */
|
|
49
|
-
function validateRuntimeConfigOptionInput(key, value) {
|
|
50
|
-
const normalizedKey = normalizeText(key);
|
|
51
|
-
const normalizedValue = normalizeText(value);
|
|
52
|
-
if (!normalizedKey) throw new Error("Config option key is required.");
|
|
53
|
-
if (!normalizedValue) throw new Error("Config option value is required.");
|
|
54
|
-
return {
|
|
55
|
-
key: normalizedKey,
|
|
56
|
-
value: normalizedValue
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/** Validate a partial runtime options patch */
|
|
60
|
-
function validateRuntimeOptionPatch(patch) {
|
|
61
|
-
const result = {};
|
|
62
|
-
if (patch.cwd !== void 0) {
|
|
63
|
-
const cwd = normalizeText(patch.cwd);
|
|
64
|
-
if (cwd) result.cwd = cwd;
|
|
65
|
-
}
|
|
66
|
-
if (patch.runtimeMode !== void 0) {
|
|
67
|
-
const runtimeMode = normalizeText(patch.runtimeMode);
|
|
68
|
-
if (runtimeMode) result.runtimeMode = runtimeMode;
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
/** Map a single config key/value to a runtime options patch */
|
|
73
|
-
function inferRuntimeOptionPatchFromConfigOption(key, value) {
|
|
74
|
-
const result = {};
|
|
75
|
-
switch (key) {
|
|
76
|
-
case "cwd":
|
|
77
|
-
result.cwd = value;
|
|
78
|
-
break;
|
|
79
|
-
case "mode":
|
|
80
|
-
case "runtimeMode":
|
|
81
|
-
result.runtimeMode = value;
|
|
82
|
-
break;
|
|
83
|
-
default:
|
|
84
|
-
result[key] = value;
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
return result;
|
|
88
|
-
}
|
|
89
|
-
//#endregion
|
|
90
|
-
export { inferRuntimeOptionPatchFromConfigOption, mergeRuntimeOptions, normalizeRuntimeOptions, normalizeText, resolveRuntimeOptionsFromMeta, runtimeOptionsEqual, validateRuntimeConfigOptionInput, validateRuntimeModeInput, validateRuntimeOptionPatch };
|
|
91
|
-
|
|
92
|
-
//# sourceMappingURL=runtime-options.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-options.js","names":[],"sources":["../../../../src/acp/control-plane/runtime-options.ts"],"sourcesContent":["/**\n * Runtime Options\n * \n * Utilities for managing ACP runtime options.\n */\n\nimport type { AcpSessionRuntimeOptions, SessionAcpMeta } from \"../runtime/types.js\";\n\n/** Normalize optional string */\nexport function normalizeText(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\n/** Normalize runtime options object */\nexport function normalizeRuntimeOptions(options: Partial<AcpSessionRuntimeOptions> | undefined): AcpSessionRuntimeOptions {\n if (!options) return {};\n \n const result: AcpSessionRuntimeOptions = {};\n \n if (options.cwd) {\n result.cwd = options.cwd.trim();\n }\n \n if (options.runtimeMode) {\n result.runtimeMode = options.runtimeMode.trim();\n }\n \n for (const [key, value] of Object.entries(options)) {\n if (key !== \"cwd\" && key !== \"runtimeMode\") {\n result[key] = value;\n }\n }\n \n return result;\n}\n\n/** Merge runtime option patches */\nexport function mergeRuntimeOptions(params: {\n current: AcpSessionRuntimeOptions | undefined;\n patch: Partial<AcpSessionRuntimeOptions>;\n}): AcpSessionRuntimeOptions {\n const { current = {}, patch } = params;\n return normalizeRuntimeOptions({\n ...current,\n ...patch,\n });\n}\n\n/** Shallow equality for runtime options */\nexport function runtimeOptionsEqual(\n a: AcpSessionRuntimeOptions | undefined,\n b: AcpSessionRuntimeOptions | undefined,\n): boolean {\n if (a === b) return true;\n if (!a || !b) return !a && !b;\n \n const keysA = Object.keys(a).sort();\n const keysB = Object.keys(b).sort();\n \n if (keysA.length !== keysB.length) return false;\n \n for (let i = 0; i < keysA.length; i++) {\n if (keysA[i] !== keysB[i]) return false;\n const key = keysA[i];\n if (a[key] !== b[key]) return false;\n }\n \n return true;\n}\n\n/** Options from session meta */\nexport function resolveRuntimeOptionsFromMeta(meta: SessionAcpMeta): AcpSessionRuntimeOptions {\n return meta.runtimeOptions ?? {};\n}\n\n/** Validate non-empty runtime mode string */\nexport function validateRuntimeModeInput(mode: string): string {\n const trimmed = mode.trim();\n if (!trimmed) {\n throw new Error(\"Runtime mode is required.\");\n }\n return trimmed;\n}\n\n/** Validate config option key/value pair */\nexport function validateRuntimeConfigOptionInput(\n key: string,\n value: string,\n): { key: string; value: string } {\n const normalizedKey = normalizeText(key);\n const normalizedValue = normalizeText(value);\n \n if (!normalizedKey) {\n throw new Error(\"Config option key is required.\");\n }\n \n if (!normalizedValue) {\n throw new Error(\"Config option value is required.\");\n }\n \n return { key: normalizedKey, value: normalizedValue };\n}\n\n/** Validate a partial runtime options patch */\nexport function validateRuntimeOptionPatch(\n patch: Partial<AcpSessionRuntimeOptions>,\n): Partial<AcpSessionRuntimeOptions> {\n const result: Partial<AcpSessionRuntimeOptions> = {};\n \n if (patch.cwd !== undefined) {\n const cwd = normalizeText(patch.cwd);\n if (cwd) {\n result.cwd = cwd;\n }\n }\n \n if (patch.runtimeMode !== undefined) {\n const runtimeMode = normalizeText(patch.runtimeMode);\n if (runtimeMode) {\n result.runtimeMode = runtimeMode;\n }\n }\n \n return result;\n}\n\n/** Map a single config key/value to a runtime options patch */\nexport function inferRuntimeOptionPatchFromConfigOption(\n key: string,\n value: string,\n): Partial<AcpSessionRuntimeOptions> {\n const result: Partial<AcpSessionRuntimeOptions> = {};\n \n switch (key) {\n case \"cwd\":\n result.cwd = value;\n break;\n case \"mode\":\n case \"runtimeMode\":\n result.runtimeMode = value;\n break;\n default:\n result[key] = value;\n break;\n }\n \n return result;\n}"],"mappings":";;AASA,SAAgB,cAAc,OAAoC;AAChE,KAAI,OAAO,UAAU,SAAU,QAAO,KAAA;AAEtC,QADgB,MAAM,MAAM,IACV,KAAA;;;AAIpB,SAAgB,wBAAwB,SAAkF;AACxH,KAAI,CAAC,QAAS,QAAO,EAAE;CAEvB,MAAM,SAAmC,EAAE;AAE3C,KAAI,QAAQ,IACV,QAAO,MAAM,QAAQ,IAAI,MAAM;AAGjC,KAAI,QAAQ,YACV,QAAO,cAAc,QAAQ,YAAY,MAAM;AAGjD,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,QAAQ,SAAS,QAAQ,cAC3B,QAAO,OAAO;AAIlB,QAAO;;;AAIT,SAAgB,oBAAoB,QAGP;CAC3B,MAAM,EAAE,UAAU,EAAE,EAAE,UAAU;AAChC,QAAO,wBAAwB;EAC7B,GAAG;EACH,GAAG;EACJ,CAAC;;;AAIJ,SAAgB,oBACd,GACA,GACS;AACT,KAAI,MAAM,EAAG,QAAO;AACpB,KAAI,CAAC,KAAK,CAAC,EAAG,QAAO,CAAC,KAAK,CAAC;CAE5B,MAAM,QAAQ,OAAO,KAAK,EAAE,CAAC,MAAM;CACnC,MAAM,QAAQ,OAAO,KAAK,EAAE,CAAC,MAAM;AAEnC,KAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,MAAI,MAAM,OAAO,MAAM,GAAI,QAAO;EAClC,MAAM,MAAM,MAAM;AAClB,MAAI,EAAE,SAAS,EAAE,KAAM,QAAO;;AAGhC,QAAO;;;AAIT,SAAgB,8BAA8B,MAAgD;AAC5F,QAAO,KAAK,kBAAkB,EAAE;;;AAIlC,SAAgB,yBAAyB,MAAsB;CAC7D,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,4BAA4B;AAE9C,QAAO;;;AAIT,SAAgB,iCACd,KACA,OACgC;CAChC,MAAM,gBAAgB,cAAc,IAAI;CACxC,MAAM,kBAAkB,cAAc,MAAM;AAE5C,KAAI,CAAC,cACH,OAAM,IAAI,MAAM,iCAAiC;AAGnD,KAAI,CAAC,gBACH,OAAM,IAAI,MAAM,mCAAmC;AAGrD,QAAO;EAAE,KAAK;EAAe,OAAO;EAAiB;;;AAIvD,SAAgB,2BACd,OACmC;CACnC,MAAM,SAA4C,EAAE;AAEpD,KAAI,MAAM,QAAQ,KAAA,GAAW;EAC3B,MAAM,MAAM,cAAc,MAAM,IAAI;AACpC,MAAI,IACF,QAAO,MAAM;;AAIjB,KAAI,MAAM,gBAAgB,KAAA,GAAW;EACnC,MAAM,cAAc,cAAc,MAAM,YAAY;AACpD,MAAI,YACF,QAAO,cAAc;;AAIzB,QAAO;;;AAIT,SAAgB,wCACd,KACA,OACmC;CACnC,MAAM,SAA4C,EAAE;AAEpD,SAAQ,KAAR;EACE,KAAK;AACH,UAAO,MAAM;AACb;EACF,KAAK;EACL,KAAK;AACH,UAAO,cAAc;AACrB;EACF;AACE,UAAO,OAAO;AACd;;AAGJ,QAAO"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Actor Queue
|
|
3
|
-
*
|
|
4
|
-
* Provides serialized access to session operations to prevent race conditions.
|
|
5
|
-
*/
|
|
6
|
-
type ActorState = {
|
|
7
|
-
pending: Array<() => Promise<void>>;
|
|
8
|
-
running: boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare class SessionActorQueue {
|
|
11
|
-
private readonly actors;
|
|
12
|
-
/** Run an operation in the actor queue */
|
|
13
|
-
run<T>(actorKey: string, op: () => Promise<T>): Promise<T>;
|
|
14
|
-
/** Get total pending count across all actors */
|
|
15
|
-
getTotalPendingCount(): number;
|
|
16
|
-
/** Get tail map for testing */
|
|
17
|
-
getTailMapForTesting(): Map<string, ActorState>;
|
|
18
|
-
private getOrCreateActor;
|
|
19
|
-
private dequeue;
|
|
20
|
-
private processQueue;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
//#region src/acp/control-plane/session-actor-queue.ts
|
|
2
|
-
var SessionActorQueue = class {
|
|
3
|
-
actors = /* @__PURE__ */ new Map();
|
|
4
|
-
/** Run an operation in the actor queue */
|
|
5
|
-
async run(actorKey, op) {
|
|
6
|
-
return new Promise((resolve, reject) => {
|
|
7
|
-
const state = this.getOrCreateActor(actorKey);
|
|
8
|
-
const task = async () => {
|
|
9
|
-
try {
|
|
10
|
-
resolve(await op());
|
|
11
|
-
} catch (error) {
|
|
12
|
-
reject(error);
|
|
13
|
-
} finally {
|
|
14
|
-
this.dequeue(actorKey);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
state.pending.push(task);
|
|
18
|
-
this.processQueue(actorKey);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/** Get total pending count across all actors */
|
|
22
|
-
getTotalPendingCount() {
|
|
23
|
-
let total = 0;
|
|
24
|
-
for (const state of this.actors.values()) total += state.pending.length;
|
|
25
|
-
return total;
|
|
26
|
-
}
|
|
27
|
-
/** Get tail map for testing */
|
|
28
|
-
getTailMapForTesting() {
|
|
29
|
-
return this.actors;
|
|
30
|
-
}
|
|
31
|
-
getOrCreateActor(key) {
|
|
32
|
-
let state = this.actors.get(key);
|
|
33
|
-
if (!state) {
|
|
34
|
-
state = {
|
|
35
|
-
pending: [],
|
|
36
|
-
running: false
|
|
37
|
-
};
|
|
38
|
-
this.actors.set(key, state);
|
|
39
|
-
}
|
|
40
|
-
return state;
|
|
41
|
-
}
|
|
42
|
-
dequeue(actorKey) {
|
|
43
|
-
const state = this.actors.get(actorKey);
|
|
44
|
-
if (!state) return;
|
|
45
|
-
state.running = false;
|
|
46
|
-
if (state.pending.length > 0) {
|
|
47
|
-
const next = state.pending.shift();
|
|
48
|
-
if (next) {
|
|
49
|
-
state.running = true;
|
|
50
|
-
next();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (!state.running && state.pending.length === 0) this.actors.delete(actorKey);
|
|
54
|
-
}
|
|
55
|
-
processQueue(actorKey) {
|
|
56
|
-
const state = this.actors.get(actorKey);
|
|
57
|
-
if (!state || state.running) return;
|
|
58
|
-
if (state.pending.length > 0) {
|
|
59
|
-
const next = state.pending.shift();
|
|
60
|
-
if (next) {
|
|
61
|
-
state.running = true;
|
|
62
|
-
next();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
//#endregion
|
|
68
|
-
export { SessionActorQueue };
|
|
69
|
-
|
|
70
|
-
//# sourceMappingURL=session-actor-queue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-actor-queue.js","names":[],"sources":["../../../../src/acp/control-plane/session-actor-queue.ts"],"sourcesContent":["/**\n * Session Actor Queue\n * \n * Provides serialized access to session operations to prevent race conditions.\n */\n\ntype ActorState = {\n pending: Array<() => Promise<void>>;\n running: boolean;\n};\n\nexport class SessionActorQueue {\n private readonly actors = new Map<string, ActorState>();\n\n /** Run an operation in the actor queue */\n async run<T>(actorKey: string, op: () => Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const state = this.getOrCreateActor(actorKey);\n \n const task = async () => {\n try {\n const result = await op();\n resolve(result);\n } catch (error) {\n reject(error);\n } finally {\n this.dequeue(actorKey);\n }\n };\n \n state.pending.push(task);\n this.processQueue(actorKey);\n });\n }\n\n /** Get total pending count across all actors */\n getTotalPendingCount(): number {\n let total = 0;\n for (const state of this.actors.values()) {\n total += state.pending.length;\n }\n return total;\n }\n\n /** Get tail map for testing */\n getTailMapForTesting(): Map<string, ActorState> {\n return this.actors;\n }\n\n private getOrCreateActor(key: string): ActorState {\n let state = this.actors.get(key);\n if (!state) {\n state = { pending: [], running: false };\n this.actors.set(key, state);\n }\n return state;\n }\n\n private dequeue(actorKey: string): void {\n const state = this.actors.get(actorKey);\n if (!state) return;\n \n state.running = false;\n \n if (state.pending.length > 0) {\n const next = state.pending.shift();\n if (next) {\n state.running = true;\n void next();\n }\n }\n \n // Clean up empty actors\n if (!state.running && state.pending.length === 0) {\n this.actors.delete(actorKey);\n }\n }\n\n private processQueue(actorKey: string): void {\n const state = this.actors.get(actorKey);\n if (!state || state.running) return;\n \n if (state.pending.length > 0) {\n const next = state.pending.shift();\n if (next) {\n state.running = true;\n void next();\n }\n }\n }\n}"],"mappings":";AAWA,IAAa,oBAAb,MAA+B;CAC7B,yBAA0B,IAAI,KAAyB;;CAGvD,MAAM,IAAO,UAAkB,IAAkC;AAC/D,SAAO,IAAI,SAAY,SAAS,WAAW;GACzC,MAAM,QAAQ,KAAK,iBAAiB,SAAS;GAE7C,MAAM,OAAO,YAAY;AACvB,QAAI;AAEF,aADe,MAAM,IAAI,CACV;aACR,OAAO;AACd,YAAO,MAAM;cACL;AACR,UAAK,QAAQ,SAAS;;;AAI1B,SAAM,QAAQ,KAAK,KAAK;AACxB,QAAK,aAAa,SAAS;IAC3B;;;CAIJ,uBAA+B;EAC7B,IAAI,QAAQ;AACZ,OAAK,MAAM,SAAS,KAAK,OAAO,QAAQ,CACtC,UAAS,MAAM,QAAQ;AAEzB,SAAO;;;CAIT,uBAAgD;AAC9C,SAAO,KAAK;;CAGd,iBAAyB,KAAyB;EAChD,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI;AAChC,MAAI,CAAC,OAAO;AACV,WAAQ;IAAE,SAAS,EAAE;IAAE,SAAS;IAAO;AACvC,QAAK,OAAO,IAAI,KAAK,MAAM;;AAE7B,SAAO;;CAGT,QAAgB,UAAwB;EACtC,MAAM,QAAQ,KAAK,OAAO,IAAI,SAAS;AACvC,MAAI,CAAC,MAAO;AAEZ,QAAM,UAAU;AAEhB,MAAI,MAAM,QAAQ,SAAS,GAAG;GAC5B,MAAM,OAAO,MAAM,QAAQ,OAAO;AAClC,OAAI,MAAM;AACR,UAAM,UAAU;AACX,UAAM;;;AAKf,MAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,WAAW,EAC7C,MAAK,OAAO,OAAO,SAAS;;CAIhC,aAAqB,UAAwB;EAC3C,MAAM,QAAQ,KAAK,OAAO,IAAI,SAAS;AACvC,MAAI,CAAC,SAAS,MAAM,QAAS;AAE7B,MAAI,MAAM,QAAQ,SAAS,GAAG;GAC5B,MAAM,OAAO,MAAM,QAAQ,OAAO;AAClC,OAAI,MAAM;AACR,UAAM,UAAU;AACX,UAAM"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Lifecycle Manager
|
|
3
|
-
*
|
|
4
|
-
* Manages ACP session initialization, closing, and state persistence.
|
|
5
|
-
*/
|
|
6
|
-
import type { AcpRuntime, AcpRuntimeHandle, SessionAcpMeta } from "../runtime/types.js";
|
|
7
|
-
import type { AcpCloseSessionInput, AcpCloseSessionResult, AcpInitializeSessionInput, AcpSessionResolution, AcpSessionRuntimeOptions, SessionEntry } from "./manager.types.js";
|
|
8
|
-
export interface SessionLifecycleManagerDeps {
|
|
9
|
-
loadEntry: (sessionKey: string) => Promise<SessionEntry | null>;
|
|
10
|
-
saveEntry: (sessionKey: string, entry: SessionEntry) => Promise<void>;
|
|
11
|
-
listEntries: () => Promise<SessionEntry[]>;
|
|
12
|
-
enforceConcurrentLimit: (sessionKey: string) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare class SessionLifecycleManager {
|
|
15
|
-
private readonly deps;
|
|
16
|
-
constructor(deps: SessionLifecycleManagerDeps);
|
|
17
|
-
/** Resolve session from cache or persistence */
|
|
18
|
-
resolveSession(params: {
|
|
19
|
-
sessionKey: string;
|
|
20
|
-
getCachedMeta: (sessionKey: string) => SessionAcpMeta | null;
|
|
21
|
-
}): Promise<AcpSessionResolution>;
|
|
22
|
-
/** Initialize a new session */
|
|
23
|
-
initializeSession(params: {
|
|
24
|
-
input: AcpInitializeSessionInput;
|
|
25
|
-
onRuntimeCreated: (sessionKey: string, runtime: {
|
|
26
|
-
runtime: AcpRuntime;
|
|
27
|
-
handle: AcpRuntimeHandle;
|
|
28
|
-
meta: SessionAcpMeta;
|
|
29
|
-
}) => Promise<void>;
|
|
30
|
-
}): Promise<{
|
|
31
|
-
runtime: AcpRuntime;
|
|
32
|
-
meta: SessionAcpMeta;
|
|
33
|
-
}>;
|
|
34
|
-
/** Close a session */
|
|
35
|
-
closeSession(params: {
|
|
36
|
-
input: AcpCloseSessionInput;
|
|
37
|
-
resolveSession: (sessionKey: string) => Promise<AcpSessionResolution>;
|
|
38
|
-
getRuntime: (sessionKey: string, meta: SessionAcpMeta) => Promise<{
|
|
39
|
-
runtime: AcpRuntime;
|
|
40
|
-
handle: AcpRuntimeHandle;
|
|
41
|
-
}>;
|
|
42
|
-
clearCached: (sessionKey: string) => void;
|
|
43
|
-
}): Promise<AcpCloseSessionResult>;
|
|
44
|
-
/** Set session state */
|
|
45
|
-
setSessionState(params: {
|
|
46
|
-
sessionKey: string;
|
|
47
|
-
state: SessionAcpMeta["state"];
|
|
48
|
-
lastError?: string;
|
|
49
|
-
clearLastError?: boolean;
|
|
50
|
-
}): Promise<void>;
|
|
51
|
-
/** Update runtime options */
|
|
52
|
-
updateRuntimeOptions(params: {
|
|
53
|
-
sessionKey: string;
|
|
54
|
-
options: AcpSessionRuntimeOptions;
|
|
55
|
-
clearCacheIfCwdChanged: (sessionKey: string, newCwd?: string) => void;
|
|
56
|
-
}): Promise<void>;
|
|
57
|
-
/** List all ACP sessions */
|
|
58
|
-
listSessions(): Promise<SessionEntry[]>;
|
|
59
|
-
}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { AcpRuntimeError, withAcpRuntimeErrorBoundary } from "../runtime/errors.js";
|
|
2
|
-
import { requireAcpRuntimeBackend } from "../runtime/registry.js";
|
|
3
|
-
import { createIdentityFromEnsure, mergeSessionIdentity } from "../runtime/session-identity.js";
|
|
4
|
-
import { normalizeRuntimeOptions, validateRuntimeOptionPatch } from "./runtime-options.js";
|
|
5
|
-
import { isAcpSessionKey, normalizeSessionKey, resolveMissingMetaError } from "./manager.utils.js";
|
|
6
|
-
//#region src/acp/control-plane/session-lifecycle-manager.ts
|
|
7
|
-
/**
|
|
8
|
-
* Session Lifecycle Manager
|
|
9
|
-
*
|
|
10
|
-
* Manages ACP session initialization, closing, and state persistence.
|
|
11
|
-
*/
|
|
12
|
-
var SessionLifecycleManager = class {
|
|
13
|
-
constructor(deps) {
|
|
14
|
-
this.deps = deps;
|
|
15
|
-
}
|
|
16
|
-
/** Resolve session from cache or persistence */
|
|
17
|
-
async resolveSession(params) {
|
|
18
|
-
const { sessionKey, getCachedMeta } = params;
|
|
19
|
-
const normalizedKey = normalizeSessionKey(sessionKey);
|
|
20
|
-
if (!normalizedKey) return {
|
|
21
|
-
kind: "none",
|
|
22
|
-
sessionKey
|
|
23
|
-
};
|
|
24
|
-
const cached = getCachedMeta(normalizedKey);
|
|
25
|
-
if (cached) return {
|
|
26
|
-
kind: "ready",
|
|
27
|
-
sessionKey: normalizedKey,
|
|
28
|
-
meta: cached
|
|
29
|
-
};
|
|
30
|
-
const entry = await this.deps.loadEntry(normalizedKey);
|
|
31
|
-
if (entry && entry.acp) return {
|
|
32
|
-
kind: "ready",
|
|
33
|
-
sessionKey: normalizedKey,
|
|
34
|
-
meta: entry.acp
|
|
35
|
-
};
|
|
36
|
-
if (isAcpSessionKey(normalizedKey)) return {
|
|
37
|
-
kind: "stale",
|
|
38
|
-
sessionKey: normalizedKey,
|
|
39
|
-
error: resolveMissingMetaError(normalizedKey)
|
|
40
|
-
};
|
|
41
|
-
return {
|
|
42
|
-
kind: "none",
|
|
43
|
-
sessionKey: normalizedKey
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/** Initialize a new session */
|
|
47
|
-
async initializeSession(params) {
|
|
48
|
-
const { input, onRuntimeCreated } = params;
|
|
49
|
-
const sessionKey = normalizeSessionKey(input.sessionKey);
|
|
50
|
-
if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
|
|
51
|
-
const agent = input.agent.trim();
|
|
52
|
-
this.deps.enforceConcurrentLimit(sessionKey);
|
|
53
|
-
const backend = requireAcpRuntimeBackend(input.backendId || input.cfg.acp?.backend);
|
|
54
|
-
const runtime = backend.runtime;
|
|
55
|
-
const initialRuntimeOptions = validateRuntimeOptionPatch({ cwd: input.cwd });
|
|
56
|
-
const requestedCwd = initialRuntimeOptions.cwd;
|
|
57
|
-
const handle = await withAcpRuntimeErrorBoundary({
|
|
58
|
-
run: async () => await runtime.ensureSession({
|
|
59
|
-
sessionKey,
|
|
60
|
-
agent,
|
|
61
|
-
mode: input.mode,
|
|
62
|
-
resumeSessionId: input.resumeSessionId,
|
|
63
|
-
cwd: requestedCwd
|
|
64
|
-
}),
|
|
65
|
-
fallbackCode: "ACP_SESSION_INIT_FAILED",
|
|
66
|
-
fallbackMessage: "Could not initialize ACP session runtime."
|
|
67
|
-
});
|
|
68
|
-
const effectiveCwd = (handle.cwd?.trim() || void 0) ?? requestedCwd;
|
|
69
|
-
const effectiveRuntimeOptions = normalizeRuntimeOptions({
|
|
70
|
-
...initialRuntimeOptions,
|
|
71
|
-
...effectiveCwd ? { cwd: effectiveCwd } : {}
|
|
72
|
-
});
|
|
73
|
-
const identityNow = Date.now();
|
|
74
|
-
const initializedIdentity = mergeSessionIdentity({
|
|
75
|
-
current: void 0,
|
|
76
|
-
incoming: createIdentityFromEnsure({
|
|
77
|
-
handle,
|
|
78
|
-
now: identityNow
|
|
79
|
-
}),
|
|
80
|
-
now: identityNow
|
|
81
|
-
}) ?? {
|
|
82
|
-
state: "pending",
|
|
83
|
-
source: "ensure",
|
|
84
|
-
lastUpdatedAt: identityNow
|
|
85
|
-
};
|
|
86
|
-
const meta = {
|
|
87
|
-
backend: handle.backend || backend.id,
|
|
88
|
-
agent,
|
|
89
|
-
runtimeSessionName: handle.runtimeSessionName,
|
|
90
|
-
identity: initializedIdentity,
|
|
91
|
-
mode: input.mode,
|
|
92
|
-
...Object.keys(effectiveRuntimeOptions).length > 0 ? { runtimeOptions: effectiveRuntimeOptions } : {},
|
|
93
|
-
cwd: effectiveCwd,
|
|
94
|
-
state: "idle",
|
|
95
|
-
lastActivityAt: Date.now()
|
|
96
|
-
};
|
|
97
|
-
await this.deps.saveEntry(sessionKey, {
|
|
98
|
-
sessionKey,
|
|
99
|
-
acp: meta
|
|
100
|
-
});
|
|
101
|
-
await onRuntimeCreated(sessionKey, {
|
|
102
|
-
runtime,
|
|
103
|
-
handle,
|
|
104
|
-
meta
|
|
105
|
-
});
|
|
106
|
-
return {
|
|
107
|
-
runtime,
|
|
108
|
-
meta
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
/** Close a session */
|
|
112
|
-
async closeSession(params) {
|
|
113
|
-
const { input, resolveSession, getRuntime, clearCached } = params;
|
|
114
|
-
const sessionKey = normalizeSessionKey(input.sessionKey);
|
|
115
|
-
if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
|
|
116
|
-
const resolution = await resolveSession(sessionKey);
|
|
117
|
-
let runtimeClosed = false;
|
|
118
|
-
let runtimeNotice;
|
|
119
|
-
if (resolution.kind === "ready") {
|
|
120
|
-
const meta = resolution.meta;
|
|
121
|
-
try {
|
|
122
|
-
const { runtime, handle } = await getRuntime(sessionKey, meta);
|
|
123
|
-
await withAcpRuntimeErrorBoundary({
|
|
124
|
-
run: async () => await runtime.close({
|
|
125
|
-
handle,
|
|
126
|
-
reason: input.reason
|
|
127
|
-
}),
|
|
128
|
-
fallbackCode: "ACP_TURN_FAILED",
|
|
129
|
-
fallbackMessage: "ACP close failed before completion."
|
|
130
|
-
});
|
|
131
|
-
runtimeClosed = true;
|
|
132
|
-
clearCached(sessionKey);
|
|
133
|
-
} catch (error) {
|
|
134
|
-
const acpError = error instanceof AcpRuntimeError ? error : new AcpRuntimeError("ACP_TURN_FAILED", error instanceof Error ? error.message : "Unknown error");
|
|
135
|
-
if (input.allowBackendUnavailable && (acpError.code === "ACP_BACKEND_MISSING" || acpError.code === "ACP_BACKEND_UNAVAILABLE")) {
|
|
136
|
-
clearCached(sessionKey);
|
|
137
|
-
runtimeNotice = acpError.message;
|
|
138
|
-
} else throw acpError;
|
|
139
|
-
}
|
|
140
|
-
} else if (input.requireAcpSession ?? true) throw resolution.kind === "stale" ? resolution.error : new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `ACP session not found: ${sessionKey}`);
|
|
141
|
-
let metaCleared = false;
|
|
142
|
-
if (input.clearMeta) {
|
|
143
|
-
await this.deps.saveEntry(sessionKey, { sessionKey });
|
|
144
|
-
metaCleared = true;
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
runtimeClosed,
|
|
148
|
-
runtimeNotice,
|
|
149
|
-
metaCleared
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/** Set session state */
|
|
153
|
-
async setSessionState(params) {
|
|
154
|
-
const { sessionKey, state, lastError, clearLastError } = params;
|
|
155
|
-
const base = (await this.deps.loadEntry(sessionKey))?.acp;
|
|
156
|
-
if (!base) return;
|
|
157
|
-
const nextMeta = {
|
|
158
|
-
backend: base.backend,
|
|
159
|
-
agent: base.agent,
|
|
160
|
-
runtimeSessionName: base.runtimeSessionName,
|
|
161
|
-
...base.identity ? { identity: base.identity } : {},
|
|
162
|
-
mode: base.mode,
|
|
163
|
-
...base.runtimeOptions ? { runtimeOptions: base.runtimeOptions } : {},
|
|
164
|
-
...base.cwd ? { cwd: base.cwd } : {},
|
|
165
|
-
state,
|
|
166
|
-
lastActivityAt: Date.now(),
|
|
167
|
-
...base.lastError ? { lastError: base.lastError } : {}
|
|
168
|
-
};
|
|
169
|
-
if (lastError?.trim()) nextMeta.lastError = lastError.trim();
|
|
170
|
-
else if (clearLastError) delete nextMeta.lastError;
|
|
171
|
-
await this.deps.saveEntry(sessionKey, {
|
|
172
|
-
sessionKey,
|
|
173
|
-
acp: nextMeta
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
/** Update runtime options */
|
|
177
|
-
async updateRuntimeOptions(params) {
|
|
178
|
-
const { sessionKey, options, clearCacheIfCwdChanged } = params;
|
|
179
|
-
const normalized = normalizeRuntimeOptions(options);
|
|
180
|
-
const hasOptions = Object.keys(normalized).length > 0;
|
|
181
|
-
const base = (await this.deps.loadEntry(sessionKey))?.acp;
|
|
182
|
-
if (!base) return;
|
|
183
|
-
const nextMeta = {
|
|
184
|
-
backend: base.backend,
|
|
185
|
-
agent: base.agent,
|
|
186
|
-
runtimeSessionName: base.runtimeSessionName,
|
|
187
|
-
...base.identity ? { identity: base.identity } : {},
|
|
188
|
-
mode: base.mode,
|
|
189
|
-
runtimeOptions: hasOptions ? normalized : void 0,
|
|
190
|
-
cwd: normalized.cwd,
|
|
191
|
-
state: base.state,
|
|
192
|
-
lastActivityAt: Date.now(),
|
|
193
|
-
...base.lastError ? { lastError: base.lastError } : {}
|
|
194
|
-
};
|
|
195
|
-
await this.deps.saveEntry(sessionKey, {
|
|
196
|
-
sessionKey,
|
|
197
|
-
acp: nextMeta
|
|
198
|
-
});
|
|
199
|
-
clearCacheIfCwdChanged(sessionKey, normalized.cwd);
|
|
200
|
-
}
|
|
201
|
-
/** List all ACP sessions */
|
|
202
|
-
async listSessions() {
|
|
203
|
-
return (await this.deps.listEntries()).filter((entry) => entry.acp != null);
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
//#endregion
|
|
207
|
-
export { SessionLifecycleManager };
|
|
208
|
-
|
|
209
|
-
//# sourceMappingURL=session-lifecycle-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle-manager.js","names":[],"sources":["../../../../src/acp/control-plane/session-lifecycle-manager.ts"],"sourcesContent":["/**\n * Session Lifecycle Manager\n * \n * Manages ACP session initialization, closing, and state persistence.\n */\n\nimport { AcpRuntimeError, withAcpRuntimeErrorBoundary } from \"../runtime/errors.js\";\nimport {\n createIdentityFromEnsure,\n mergeSessionIdentity,\n} from \"../runtime/session-identity.js\";\nimport type { AcpRuntime, AcpRuntimeHandle, SessionAcpMeta } from \"../runtime/types.js\";\nimport { requireAcpRuntimeBackend } from \"../runtime/registry.js\";\nimport type {\n AcpCloseSessionInput,\n AcpCloseSessionResult,\n AcpInitializeSessionInput,\n AcpSessionResolution,\n AcpSessionRuntimeOptions,\n SessionEntry,\n} from \"./manager.types.js\";\nimport {\n isAcpSessionKey,\n normalizeSessionKey,\n resolveMissingMetaError,\n} from \"./manager.utils.js\";\nimport { normalizeRuntimeOptions, validateRuntimeOptionPatch } from \"./runtime-options.js\";\n\nexport interface SessionLifecycleManagerDeps {\n loadEntry: (sessionKey: string) => Promise<SessionEntry | null>;\n saveEntry: (sessionKey: string, entry: SessionEntry) => Promise<void>;\n listEntries: () => Promise<SessionEntry[]>;\n enforceConcurrentLimit: (sessionKey: string) => void;\n}\n\nexport class SessionLifecycleManager {\n constructor(private readonly deps: SessionLifecycleManagerDeps) {}\n\n /** Resolve session from cache or persistence */\n async resolveSession(params: {\n sessionKey: string;\n getCachedMeta: (sessionKey: string) => SessionAcpMeta | null;\n }): Promise<AcpSessionResolution> {\n const { sessionKey, getCachedMeta } = params;\n const normalizedKey = normalizeSessionKey(sessionKey);\n if (!normalizedKey) {\n return { kind: \"none\", sessionKey };\n }\n\n // Check cache first\n const cached = getCachedMeta(normalizedKey);\n if (cached) {\n return { kind: \"ready\", sessionKey: normalizedKey, meta: cached };\n }\n\n // Load from persistence\n const entry = await this.deps.loadEntry(normalizedKey);\n if (entry && entry.acp) {\n return { kind: \"ready\", sessionKey: normalizedKey, meta: entry.acp };\n }\n\n // Stale ACP session\n if (isAcpSessionKey(normalizedKey)) {\n return {\n kind: \"stale\",\n sessionKey: normalizedKey,\n error: resolveMissingMetaError(normalizedKey),\n };\n }\n\n return { kind: \"none\", sessionKey: normalizedKey };\n }\n\n /** Initialize a new session */\n async initializeSession(params: {\n input: AcpInitializeSessionInput;\n onRuntimeCreated: (sessionKey: string, runtime: { runtime: AcpRuntime; handle: AcpRuntimeHandle; meta: SessionAcpMeta }) => Promise<void>;\n }): Promise<{ runtime: AcpRuntime; meta: SessionAcpMeta }> {\n const { input, onRuntimeCreated } = params;\n const sessionKey = normalizeSessionKey(input.sessionKey);\n if (!sessionKey) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP session key is required.\");\n }\n\n const agent = input.agent.trim();\n this.deps.enforceConcurrentLimit(sessionKey);\n\n const backend = requireAcpRuntimeBackend(input.backendId || input.cfg.acp?.backend);\n const runtime = backend.runtime;\n const initialRuntimeOptions = validateRuntimeOptionPatch({ cwd: input.cwd });\n const requestedCwd = initialRuntimeOptions.cwd;\n\n const handle = await withAcpRuntimeErrorBoundary({\n run: async () =>\n await runtime.ensureSession({\n sessionKey,\n agent,\n mode: input.mode,\n resumeSessionId: input.resumeSessionId,\n cwd: requestedCwd,\n }),\n fallbackCode: \"ACP_SESSION_INIT_FAILED\",\n fallbackMessage: \"Could not initialize ACP session runtime.\",\n });\n\n const effectiveCwd = (handle.cwd?.trim() || undefined) ?? requestedCwd;\n const effectiveRuntimeOptions = normalizeRuntimeOptions({\n ...initialRuntimeOptions,\n ...(effectiveCwd ? { cwd: effectiveCwd } : {}),\n });\n\n const identityNow = Date.now();\n const initializedIdentity =\n mergeSessionIdentity({\n current: undefined,\n incoming: createIdentityFromEnsure({ handle, now: identityNow }),\n now: identityNow,\n }) ??\n ({ state: \"pending\" as const, source: \"ensure\", lastUpdatedAt: identityNow });\n\n const meta: SessionAcpMeta = {\n backend: handle.backend || backend.id,\n agent,\n runtimeSessionName: handle.runtimeSessionName,\n identity: initializedIdentity,\n mode: input.mode,\n ...(Object.keys(effectiveRuntimeOptions).length > 0\n ? { runtimeOptions: effectiveRuntimeOptions }\n : {}),\n cwd: effectiveCwd,\n state: \"idle\",\n lastActivityAt: Date.now(),\n };\n\n // Persist\n await this.deps.saveEntry(sessionKey, { sessionKey, acp: meta });\n\n // Notify and return\n await onRuntimeCreated(sessionKey, { runtime, handle, meta });\n return { runtime, meta };\n }\n\n /** Close a session */\n async closeSession(params: {\n input: AcpCloseSessionInput;\n resolveSession: (sessionKey: string) => Promise<AcpSessionResolution>;\n getRuntime: (sessionKey: string, meta: SessionAcpMeta) => Promise<{ runtime: AcpRuntime; handle: AcpRuntimeHandle }>;\n clearCached: (sessionKey: string) => void;\n }): Promise<AcpCloseSessionResult> {\n const { input, resolveSession, getRuntime, clearCached } = params;\n const sessionKey = normalizeSessionKey(input.sessionKey);\n if (!sessionKey) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP session key is required.\");\n }\n\n const resolution = await resolveSession(sessionKey);\n\n let runtimeClosed = false;\n let runtimeNotice: string | undefined;\n\n if (resolution.kind === \"ready\") {\n const meta = resolution.meta;\n\n try {\n const { runtime, handle } = await getRuntime(sessionKey, meta);\n\n await withAcpRuntimeErrorBoundary({\n run: async () => await runtime.close({ handle, reason: input.reason }),\n fallbackCode: \"ACP_TURN_FAILED\",\n fallbackMessage: \"ACP close failed before completion.\",\n });\n\n runtimeClosed = true;\n clearCached(sessionKey);\n } catch (error) {\n const acpError =\n error instanceof AcpRuntimeError\n ? error\n : new AcpRuntimeError(\"ACP_TURN_FAILED\", error instanceof Error ? error.message : \"Unknown error\");\n\n if (\n input.allowBackendUnavailable &&\n (acpError.code === \"ACP_BACKEND_MISSING\" || acpError.code === \"ACP_BACKEND_UNAVAILABLE\")\n ) {\n clearCached(sessionKey);\n runtimeNotice = acpError.message;\n } else {\n throw acpError;\n }\n }\n } else if (input.requireAcpSession ?? true) {\n const error =\n resolution.kind === \"stale\"\n ? resolution.error\n : new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", `ACP session not found: ${sessionKey}`);\n throw error;\n }\n\n let metaCleared = false;\n if (input.clearMeta) {\n await this.deps.saveEntry(sessionKey, { sessionKey });\n metaCleared = true;\n }\n\n return { runtimeClosed, runtimeNotice, metaCleared };\n }\n\n /** Set session state */\n async setSessionState(params: {\n sessionKey: string;\n state: SessionAcpMeta[\"state\"];\n lastError?: string;\n clearLastError?: boolean;\n }): Promise<void> {\n const { sessionKey, state, lastError, clearLastError } = params;\n const entry = await this.deps.loadEntry(sessionKey);\n const base = entry?.acp;\n\n if (!base) return;\n\n const nextMeta: SessionAcpMeta = {\n backend: base.backend,\n agent: base.agent,\n runtimeSessionName: base.runtimeSessionName,\n ...(base.identity ? { identity: base.identity } : {}),\n mode: base.mode,\n ...(base.runtimeOptions ? { runtimeOptions: base.runtimeOptions } : {}),\n ...(base.cwd ? { cwd: base.cwd } : {}),\n state,\n lastActivityAt: Date.now(),\n ...(base.lastError ? { lastError: base.lastError } : {}),\n };\n\n if (lastError?.trim()) {\n nextMeta.lastError = lastError.trim();\n } else if (clearLastError) {\n delete nextMeta.lastError;\n }\n\n await this.deps.saveEntry(sessionKey, { sessionKey, acp: nextMeta });\n }\n\n /** Update runtime options */\n async updateRuntimeOptions(params: {\n sessionKey: string;\n options: AcpSessionRuntimeOptions;\n clearCacheIfCwdChanged: (sessionKey: string, newCwd?: string) => void;\n }): Promise<void> {\n const { sessionKey, options, clearCacheIfCwdChanged } = params;\n const normalized = normalizeRuntimeOptions(options);\n const hasOptions = Object.keys(normalized).length > 0;\n\n const entry = await this.deps.loadEntry(sessionKey);\n const base = entry?.acp;\n\n if (!base) return;\n\n const nextMeta: SessionAcpMeta = {\n backend: base.backend,\n agent: base.agent,\n runtimeSessionName: base.runtimeSessionName,\n ...(base.identity ? { identity: base.identity } : {}),\n mode: base.mode,\n runtimeOptions: hasOptions ? normalized : undefined,\n cwd: normalized.cwd,\n state: base.state,\n lastActivityAt: Date.now(),\n ...(base.lastError ? { lastError: base.lastError } : {}),\n };\n\n await this.deps.saveEntry(sessionKey, { sessionKey, acp: nextMeta });\n\n clearCacheIfCwdChanged(sessionKey, normalized.cwd);\n }\n\n /** List all ACP sessions */\n async listSessions(): Promise<SessionEntry[]> {\n const entries = await this.deps.listEntries();\n return entries.filter((entry) => entry.acp != null);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ACP Session Store
|
|
3
|
-
*
|
|
4
|
-
* File-based persistence for ACP session metadata under the agent home `sessions/` tree.
|
|
5
|
-
*/
|
|
6
|
-
import type { Config } from '../../config/schema.js';
|
|
7
|
-
import type { SessionEntry } from './manager.types.js';
|
|
8
|
-
/** ACP Session Store */
|
|
9
|
-
export declare class AcpSessionStore {
|
|
10
|
-
private indexFile;
|
|
11
|
-
private sessionsDir;
|
|
12
|
-
private indexCache;
|
|
13
|
-
private indexDirty;
|
|
14
|
-
constructor(agentHomeDir: string);
|
|
15
|
-
/** Initialize the store */
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
/** Load session entry from store */
|
|
18
|
-
load(sessionKey: string): Promise<SessionEntry | null>;
|
|
19
|
-
/** Save session entry to store */
|
|
20
|
-
save(sessionKey: string, entry: SessionEntry): Promise<void>;
|
|
21
|
-
/** List all session entries */
|
|
22
|
-
list(): Promise<SessionEntry[]>;
|
|
23
|
-
/** List all ACP session entries (filter by acp metadata) */
|
|
24
|
-
listAcpSessions(): Promise<SessionEntry[]>;
|
|
25
|
-
/** Delete session entry */
|
|
26
|
-
delete(sessionKey: string): Promise<void>;
|
|
27
|
-
/** Clear all ACP sessions */
|
|
28
|
-
clear(): Promise<void>;
|
|
29
|
-
/** Normalize session key */
|
|
30
|
-
private normalizeSessionKey;
|
|
31
|
-
/** Load index from disk */
|
|
32
|
-
private loadIndex;
|
|
33
|
-
/** Save index to disk */
|
|
34
|
-
private saveIndex;
|
|
35
|
-
}
|
|
36
|
-
/** Default agent home for ACP persistence (matches main session store agent id). */
|
|
37
|
-
export declare function resolveAcpAgentHome(cfg: Config): string;
|
|
38
|
-
/** Construct store using loaded config (singleton-friendly). */
|
|
39
|
-
export declare function createDefaultAcpSessionStore(): AcpSessionStore;
|