@xopcai/xopc 0.0.95 → 0.0.96
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/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.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/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.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/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/{agents-CKe2LMnz.js → agents-DmIuSaOE.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-Mi9mMIZ1.js → apps-page-DFcHBxLw.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-BrdyC101.js → channels-settings-DDUf55C5.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-D55Bu0nn.js → channels-status-swr-BxF-_nzD.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-CPpx2l-E.js → cron-api-DylQtnb_.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-Bx2jB0YN.js → cron-page-BO0d9Pf-.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-D_AiG_Kg.js → dist-BskF0qDS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-6ieHsxRE.js → extension-debug-page-BcZdTdjJ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-B8nywHRO.js → extension-page-D2iuDa1D.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DrskdEIV.js → extension-settings-page-BKpQCgLc.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-B0aeeY0q.js → fetch-CtNDpjij.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives--9ooY8Xl.js → field-primitives-2PekrGZF.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DUZ_W1w-.js → heartbeat-config-api-D3D7SW8A.js} +1 -1
- package/dist/gateway/static/root/assets/index-BvEhL9RQ.css +1 -0
- package/dist/gateway/static/root/assets/{index-Dj9FuxCm.js → index-Db9fd_X4.js} +74 -74
- package/dist/gateway/static/root/assets/{logs-page-CaXqhpKf.js → logs-page-B3I1a26m.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-page-DYzym2B0.js → note-detail-page-BOizhtJ8.js} +54 -53
- package/dist/gateway/static/root/assets/{note-detail-page-B91pLkEI.css → note-detail-page-D4ZIVQbk.css} +1 -1
- package/dist/gateway/static/root/assets/{note-time-B-vSi2dR.js → note-time-CjUGtqKr.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BkhWdGiT.js → notes-page-BB8-I0Of.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-53YFokoe.js → sessions-page-BcH-1K9i.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-advanced-gate-BaZmaklx.js → settings-advanced-gate-Czn8nnjN.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-DIJPKpTR.js → settings-form-section-ZZWDwgVe.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-Dvb230FF.js → settings-page-BX8c_zrN.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CRyjTAG6.js → share-preview-page-Ch3_6Qah.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-C5ZJbfAe.js → skills-page-WO0bbJ54.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Cg_SuBw0.js → theme-store-XxRFRZDX.js} +1 -1
- package/dist/gateway/static/root/assets/url-6zpynn1R.js +3 -0
- package/dist/gateway/static/root/assets/{utils-lMYoWhqo.js → utils-uTYKh54l.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-Dda2pcUU.js → voice-api-key-field-BIAYHRs-.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-page.utils-KIladUrU.js → workflow-page.utils-BbWhqD36.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-BTis4Z7Y.js → workflows-page-D4RIF7E1.js} +1 -1
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +15 -9
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.d.ts +0 -1
- package/dist/src/agent/agent-scope.js +2 -5
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +3 -0
- package/dist/src/agent/bootstrap/bootstrap-cache.js +13 -3
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +6 -0
- package/dist/src/agent/bootstrap/bootstrap-files.js +35 -12
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +5 -2
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +12 -3
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +8 -4
- package/dist/src/agent/context/workspace-seed.js.map +1 -1
- package/dist/src/agent/context/workspace-state.d.ts +52 -0
- package/dist/src/agent/context/workspace-state.js +101 -0
- package/dist/src/agent/context/workspace-state.js.map +1 -0
- package/dist/src/agent/embedded/index.d.ts +2 -2
- package/dist/src/agent/embedded/index.js +3 -3
- package/dist/src/agent/embedded/run-turn.js +0 -3
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-manager-init.d.ts +0 -17
- package/dist/src/agent/embedded/session-manager-init.js +1 -36
- package/dist/src/agent/embedded/session-manager-init.js.map +1 -1
- package/dist/src/agent/embedded/session-runner.d.ts +3 -12
- package/dist/src/agent/embedded/session-runner.js +12 -26
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +2 -4
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.d.ts +10 -0
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +34 -0
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +1 -0
- package/dist/src/agent/goals/goal-run-store.js +4 -4
- package/dist/src/agent/goals/persistent-goal-service.js +8 -15
- 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/load-image-media.js +2 -2
- 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 +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -2
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +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/models/manager.js +1 -1
- package/dist/src/agent/prompt/memory/index.d.ts +1 -0
- package/dist/src/agent/prompt/memory/index.js +34 -80
- package/dist/src/agent/prompt/memory/index.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 +1 -1
- package/dist/src/agent/service/process-direct-one-shot.js +8 -17
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +14 -23
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.js +7 -11
- 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 +3 -3
- 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/dreaming-tool.js +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/index.d.ts +0 -1
- package/dist/src/agent/tools/index.js +1 -2
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/agent/tools/session-search-tool.d.ts +0 -1
- package/dist/src/agent/tools/session-search-tool.js +11 -6
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/auth/credentials.js +3 -3
- 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/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/cloakbrowser.js +4 -4
- 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/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/chat-commands/agent-edit.js +2 -2
- package/dist/src/chat-commands/builtins/config.js +2 -2
- package/dist/src/chat-commands/context.js +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 +32 -95
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +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/logs.js +1 -1
- package/dist/src/cli/commands/image.js +1 -1
- package/dist/src/cli/commands/init.js +5 -7
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/commands/agents.config.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +7 -8
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.d.ts +3 -0
- package/dist/src/config/paths-state.js +7 -3
- package/dist/src/config/paths-state.js.map +1 -1
- package/dist/src/config/paths.d.ts +5 -35
- package/dist/src/config/paths.js +6 -50
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +2 -2
- package/dist/src/config/schema.d.ts +15 -0
- package/dist/src/config/schema.js +11 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/execution-types.d.ts +42 -0
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/cron/persistence.js +1 -1
- package/dist/src/cron/run-log-store.d.ts +4 -8
- package/dist/src/cron/run-log-store.js +26 -78
- package/dist/src/cron/run-log-store.js.map +1 -1
- package/dist/src/cron/service.d.ts +3 -3
- package/dist/src/cron/service.js +2 -2
- package/dist/src/cron/service.js.map +1 -1
- package/dist/src/cron/types.d.ts +1 -42
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- 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/update.js +1 -1
- package/dist/src/gateway/agents-admin.js +8 -3
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/file-path-classifier.d.ts +0 -1
- package/dist/src/gateway/file-path-classifier.js +2 -8
- package/dist/src/gateway/file-path-classifier.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- 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 +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- 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.js +5 -1
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/session-reset-service.d.ts +1 -1
- package/dist/src/gateway/session-reset-service.js +1 -1
- package/dist/src/gateway/session-reset-service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/node-sqlite.d.ts +1 -0
- package/dist/src/infra/node-sqlite.js +17 -0
- package/dist/src/infra/node-sqlite.js.map +1 -0
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +2 -2
- package/dist/src/infra/sqlite-errors.d.ts +1 -0
- package/dist/src/infra/sqlite-errors.js +77 -0
- package/dist/src/infra/sqlite-errors.js.map +1 -0
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/unhandled-rejections.d.ts +1 -0
- package/dist/src/infra/unhandled-rejections.js +25 -0
- package/dist/src/infra/unhandled-rejections.js.map +1 -0
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- 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/warning-filter.d.ts +7 -0
- package/dist/src/infra/warning-filter.js +59 -0
- package/dist/src/infra/warning-filter.js.map +1 -0
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/notes/store.d.ts +3 -9
- package/dist/src/notes/store.js +22 -196
- package/dist/src/notes/store.js.map +1 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/session/config-store.d.ts +6 -75
- package/dist/src/session/config-store.js +38 -144
- package/dist/src/session/config-store.js.map +1 -1
- package/dist/src/session/config-types.d.ts +15 -0
- package/dist/src/session/config-types.js +1 -0
- package/dist/src/session/index.d.ts +1 -3
- package/dist/src/session/index.js +3 -5
- package/dist/src/session/init-session-turn.d.ts +0 -6
- package/dist/src/session/init-session-turn.js +18 -18
- package/dist/src/session/init-session-turn.js.map +1 -1
- package/dist/src/session/lifecycle-timestamps.d.ts +5 -2
- package/dist/src/session/lifecycle-timestamps.js.map +1 -1
- package/dist/src/session/{parity/load-jsonl-entries.js → load-jsonl-entries.js} +1 -1
- package/dist/src/session/load-jsonl-entries.js.map +1 -0
- package/dist/src/session/manager.d.ts +5 -3
- package/dist/src/session/manager.js +1 -5
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/resolve-session.d.ts +3 -6
- package/dist/src/session/resolve-session.js +26 -31
- package/dist/src/session/resolve-session.js.map +1 -1
- package/dist/src/session/session-context-for-llm.js +5 -1
- package/dist/src/session/session-context-for-llm.js.map +1 -1
- package/dist/src/session/session-id.js +12 -0
- package/dist/src/session/session-id.js.map +1 -0
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/session-workspace.d.ts +1 -1
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.d.ts +14 -63
- package/dist/src/session/store.js +172 -847
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/stored-rows-to-file-entries.d.ts +11 -0
- package/dist/src/session/stored-rows-to-file-entries.js +95 -0
- package/dist/src/session/stored-rows-to-file-entries.js.map +1 -0
- package/dist/src/session/transcript-events.d.ts +1 -2
- package/dist/src/session/transcript-events.js +5 -12
- package/dist/src/session/transcript-events.js.map +1 -1
- package/dist/src/session/transcript-format.d.ts +1 -1
- package/dist/src/session/transcript-format.js.map +1 -1
- package/dist/src/session/transcript-stats.d.ts +1 -0
- package/dist/src/session/transcript-stats.js +10 -0
- package/dist/src/session/transcript-stats.js.map +1 -0
- 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-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/storage/sqlite/config-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/config-repository.js +56 -0
- package/dist/src/storage/sqlite/config-repository.js.map +1 -0
- package/dist/src/storage/sqlite/connection.d.ts +38 -0
- package/dist/src/storage/sqlite/connection.js +258 -0
- package/dist/src/storage/sqlite/connection.js.map +1 -0
- package/dist/src/storage/sqlite/cron-run-repository.d.ts +5 -0
- package/dist/src/storage/sqlite/cron-run-repository.js +97 -0
- package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -0
- package/dist/src/storage/sqlite/fts.d.ts +2 -0
- package/dist/src/storage/sqlite/fts.js +11 -0
- package/dist/src/storage/sqlite/fts.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +12 -0
- package/dist/src/storage/sqlite/index.js +13 -0
- package/dist/src/storage/sqlite/memory-index-repository.d.ts +18 -0
- package/dist/src/storage/sqlite/memory-index-repository.js +132 -0
- package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -0
- package/dist/src/storage/sqlite/notes-repository.d.ts +11 -0
- package/dist/src/storage/sqlite/notes-repository.js +191 -0
- package/dist/src/storage/sqlite/notes-repository.js.map +1 -0
- package/dist/src/storage/sqlite/paths.d.ts +1 -0
- package/dist/src/storage/sqlite/paths.js +7 -0
- package/dist/src/storage/sqlite/paths.js.map +1 -0
- package/dist/src/storage/sqlite/row-mappers.d.ts +82 -0
- package/dist/src/storage/sqlite/row-mappers.js +164 -0
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -0
- package/dist/src/storage/sqlite/schema.d.ts +5 -0
- package/dist/src/storage/sqlite/schema.js +43 -0
- package/dist/src/storage/sqlite/schema.js.map +1 -0
- package/dist/src/storage/sqlite/schema.sql +195 -0
- package/dist/src/storage/sqlite/session-metadata.d.ts +8 -0
- package/dist/src/storage/sqlite/session-metadata.js +83 -0
- package/dist/src/storage/sqlite/session-metadata.js.map +1 -0
- package/dist/src/storage/sqlite/session-repository.d.ts +29 -0
- package/dist/src/storage/sqlite/session-repository.js +268 -0
- package/dist/src/storage/sqlite/session-repository.js.map +1 -0
- package/dist/src/storage/sqlite/transaction.d.ts +11 -0
- package/dist/src/storage/sqlite/transaction.js +115 -0
- package/dist/src/storage/sqlite/transaction.js.map +1 -0
- package/dist/src/storage/sqlite/transcript-repository.d.ts +34 -0
- package/dist/src/storage/sqlite/transcript-repository.js +241 -0
- package/dist/src/storage/sqlite/transcript-repository.js.map +1 -0
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui.js +3 -3
- 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/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/service/workflow-session-bridge.js +41 -64
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/index-Bj_l8QDp.css +0 -1
- package/dist/gateway/static/root/assets/url-BHHmdJYc.js +0 -3
- package/dist/src/agent/embedded/session-manager-cache.d.ts +0 -19
- package/dist/src/agent/embedded/session-manager-cache.js +0 -48
- package/dist/src/agent/embedded/session-manager-cache.js.map +0 -1
- package/dist/src/session/parity/artifacts.d.ts +0 -16
- package/dist/src/session/parity/artifacts.js +0 -80
- package/dist/src/session/parity/artifacts.js.map +0 -1
- package/dist/src/session/parity/jsonl-transcript-io.d.ts +0 -54
- package/dist/src/session/parity/jsonl-transcript-io.js +0 -236
- package/dist/src/session/parity/jsonl-transcript-io.js.map +0 -1
- package/dist/src/session/parity/load-jsonl-entries.js.map +0 -1
- package/dist/src/session/parity/session-id.js +0 -18
- package/dist/src/session/parity/session-id.js.map +0 -1
- package/dist/src/session/parity/sessions-json-cache.d.ts +0 -14
- package/dist/src/session/parity/sessions-json-cache.js +0 -98
- package/dist/src/session/parity/sessions-json-cache.js.map +0 -1
- package/dist/src/session/parity/sessions-json-file-read.d.ts +0 -6
- package/dist/src/session/parity/sessions-json-file-read.js +0 -19
- package/dist/src/session/parity/sessions-json-file-read.js.map +0 -1
- package/dist/src/session/parity/sessions-json-file.d.ts +0 -11
- package/dist/src/session/parity/sessions-json-file.js +0 -52
- package/dist/src/session/parity/sessions-json-file.js.map +0 -1
- package/dist/src/session/parity/sessions-json-patch.d.ts +0 -14
- package/dist/src/session/parity/sessions-json-patch.js +0 -40
- package/dist/src/session/parity/sessions-json-patch.js.map +0 -1
- package/dist/src/session/parity/transcript-file-lock.d.ts +0 -22
- package/dist/src/session/parity/transcript-file-lock.js +0 -142
- package/dist/src/session/parity/transcript-file-lock.js.map +0 -1
- package/dist/src/session/parity/transcript-pagination.d.ts +0 -29
- package/dist/src/session/parity/transcript-pagination.js +0 -132
- package/dist/src/session/parity/transcript-pagination.js.map +0 -1
- package/dist/src/session/parity/transcript-paths.d.ts +0 -13
- package/dist/src/session/parity/transcript-paths.js +0 -64
- package/dist/src/session/parity/transcript-paths.js.map +0 -1
- package/dist/src/session/parity/xopc-session-disk-entry.d.ts +0 -22
- package/dist/src/session/search-index-cache.d.ts +0 -6
- package/dist/src/session/search-index-cache.js +0 -44
- package/dist/src/session/search-index-cache.js.map +0 -1
- package/dist/src/session/search-index.d.ts +0 -20
- package/dist/src/session/search-index.js +0 -124
- package/dist/src/session/search-index.js.map +0 -1
- /package/dist/src/{session/parity/xopc-session-disk-entry.js → cron/execution-types.js} +0 -0
- /package/dist/src/session/{parity/load-jsonl-entries.d.ts → load-jsonl-entries.d.ts} +0 -0
- /package/dist/src/session/{parity/session-id.d.ts → session-id.d.ts} +0 -0
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { type Config } from '../config/schema.js';
|
|
2
2
|
import { type ThinkLevel, type VerboseLevel } from '../agent/transcript/thinking-types.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { SessionMetadata } from './types.js';
|
|
4
4
|
export type SessionResolution = {
|
|
5
5
|
sessionId: string;
|
|
6
6
|
sessionKey?: string;
|
|
7
|
-
|
|
8
|
-
sessionStore: Record<string, XopcSessionDiskEntry>;
|
|
9
|
-
storePath: string;
|
|
7
|
+
sessionMetadata?: SessionMetadata | null;
|
|
10
8
|
isNewSession: boolean;
|
|
11
9
|
persistedThinking?: ThinkLevel;
|
|
12
10
|
persistedVerbose?: VerboseLevel;
|
|
13
11
|
};
|
|
14
12
|
export type SessionKeyResolution = {
|
|
15
13
|
sessionKey?: string;
|
|
16
|
-
|
|
17
|
-
storePath: string;
|
|
14
|
+
sessionMetadata?: SessionMetadata | null;
|
|
18
15
|
};
|
|
19
16
|
export declare function resolveSessionKeyForRequest(opts: {
|
|
20
17
|
cfg: Config;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
+
import { init_logger } from "../utils/logger.js";
|
|
2
3
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
4
|
+
import { SessionConfigSchema, init_schema } from "../config/schema.js";
|
|
3
5
|
import { init_agent_session_key, normalizeAgentId, resolveAgentIdFromSessionKey } from "../routing/agent-session-key.js";
|
|
4
6
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import { readSessionsJsonFile } from "./parity/sessions-json-file.js";
|
|
7
|
+
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
8
|
+
import { findSessionKeyByTranscriptId, getSessionMetadata, getSessionPersistedLevels } from "../storage/sqlite/session-repository.js";
|
|
9
|
+
import "../storage/sqlite/index.js";
|
|
9
10
|
import { normalizeThinkLevel, normalizeVerboseLevel } from "../agent/transcript/thinking-types.js";
|
|
10
11
|
import { evaluateSessionFreshness, resolveSessionResetPolicy } from "./reset-policy.js";
|
|
11
12
|
import { resolveChannelResetConfig, resolveSessionResetType } from "./reset-type.js";
|
|
@@ -13,38 +14,31 @@ import { resolveSessionLifecycleTimestamps } from "./lifecycle-timestamps.js";
|
|
|
13
14
|
import { randomUUID } from "node:crypto";
|
|
14
15
|
//#region src/session/resolve-session.ts
|
|
15
16
|
init_schema();
|
|
16
|
-
init_paths();
|
|
17
17
|
init_agent_scope();
|
|
18
18
|
init_agent_session_key();
|
|
19
19
|
init_session_key();
|
|
20
20
|
init_logger();
|
|
21
21
|
const log = createLogger("ResolveSession");
|
|
22
22
|
async function resolveSessionKeyForRequest(opts) {
|
|
23
|
-
|
|
23
|
+
requireXopcDatabase();
|
|
24
24
|
const explicitKey = opts.sessionKey?.trim();
|
|
25
25
|
const requestedSessionId = opts.sessionId?.trim();
|
|
26
|
-
const storeAgentId = explicitKey ? resolveAgentIdFromSessionKey(explicitKey) : opts.agentId?.trim() ? normalizeAgentId(opts.agentId) : defaultAgentId;
|
|
27
|
-
const storePath = resolveSessionsMapPath(opts.cfg, storeAgentId);
|
|
28
|
-
const sessionStore = await readSessionsJsonFile(storePath);
|
|
29
26
|
let sessionKey = explicitKey;
|
|
27
|
+
if (requestedSessionId && !sessionKey) sessionKey = findSessionKeyByTranscriptId(requestedSessionId) ?? void 0;
|
|
30
28
|
if (requestedSessionId && !sessionKey) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
29
|
+
const storeAgentId = explicitKey ? resolveAgentIdFromSessionKey(explicitKey) : opts.agentId?.trim() ? normalizeAgentId(opts.agentId) : resolveDefaultAgentId(opts.cfg);
|
|
30
|
+
sessionKey = `agent:${normalizeAgentId(opts.agentId ?? storeAgentId)}:explicit:${requestedSessionId}`;
|
|
35
31
|
}
|
|
36
|
-
|
|
32
|
+
const sessionMetadata = sessionKey ? getSessionMetadata(sessionKey) : null;
|
|
37
33
|
return {
|
|
38
34
|
sessionKey,
|
|
39
|
-
|
|
40
|
-
storePath
|
|
35
|
+
sessionMetadata
|
|
41
36
|
};
|
|
42
37
|
}
|
|
43
38
|
async function resolveSession(opts) {
|
|
44
39
|
const sessionCfg = opts.cfg.session ?? SessionConfigSchema.parse({});
|
|
45
|
-
const { sessionKey,
|
|
40
|
+
const { sessionKey, sessionMetadata } = await resolveSessionKeyForRequest(opts);
|
|
46
41
|
const now = Date.now();
|
|
47
|
-
const sessionEntry = sessionKey ? sessionStore[sessionKey] : void 0;
|
|
48
42
|
const parsed = sessionKey ? parseSessionKey(sessionKey) : null;
|
|
49
43
|
const peerKind = parsed?.peerKind;
|
|
50
44
|
const resetType = resolveSessionResetType({
|
|
@@ -52,39 +46,40 @@ async function resolveSession(opts) {
|
|
|
52
46
|
isGroup: peerKind === "group" || peerKind === "channel",
|
|
53
47
|
isThread: Boolean(parsed?.threadId)
|
|
54
48
|
});
|
|
55
|
-
const meta = sessionEntry?.pluginExtensions?.xopc?.metadata;
|
|
56
49
|
const resetPolicy = resolveSessionResetPolicy({
|
|
57
50
|
sessionCfg,
|
|
58
51
|
resetType,
|
|
59
52
|
resetOverride: resolveChannelResetConfig({
|
|
60
53
|
sessionCfg,
|
|
61
|
-
channel: parsed?.source ??
|
|
54
|
+
channel: parsed?.source ?? sessionMetadata?.sourceChannel
|
|
62
55
|
})
|
|
63
56
|
});
|
|
64
|
-
const lifecycle = resolveSessionLifecycleTimestamps({ entry:
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
const lifecycle = resolveSessionLifecycleTimestamps({ entry: sessionMetadata ? {
|
|
58
|
+
updatedAt: Date.parse(sessionMetadata.updatedAt),
|
|
59
|
+
sessionStartedAt: sessionMetadata.sessionStartedAt ? Date.parse(sessionMetadata.sessionStartedAt) : void 0,
|
|
60
|
+
lastInteractionAt: sessionMetadata.lastInteractionAt ? Date.parse(sessionMetadata.lastInteractionAt) : void 0
|
|
61
|
+
} : void 0 });
|
|
62
|
+
const fresh = (sessionMetadata ? evaluateSessionFreshness({
|
|
63
|
+
updatedAt: Date.parse(sessionMetadata.updatedAt),
|
|
67
64
|
...lifecycle,
|
|
68
65
|
now,
|
|
69
66
|
policy: resetPolicy
|
|
70
67
|
}) : { fresh: false }).fresh;
|
|
71
|
-
const sessionId = opts.sessionId?.trim() || (fresh ?
|
|
68
|
+
const sessionId = opts.sessionId?.trim() || (fresh ? sessionMetadata?.transcriptId : void 0) || randomUUID();
|
|
72
69
|
const isNewSession = !fresh && !opts.sessionId?.trim();
|
|
73
70
|
if (isNewSession && sessionKey) log.debug({
|
|
74
71
|
sessionKey,
|
|
75
|
-
previousSessionId:
|
|
72
|
+
previousSessionId: sessionMetadata?.transcriptId,
|
|
76
73
|
sessionId,
|
|
77
74
|
resetType
|
|
78
75
|
}, "Session reset boundary — new transcript id for turn");
|
|
79
76
|
return {
|
|
80
77
|
sessionId,
|
|
81
78
|
sessionKey,
|
|
82
|
-
|
|
83
|
-
sessionStore,
|
|
84
|
-
storePath,
|
|
79
|
+
sessionMetadata,
|
|
85
80
|
isNewSession,
|
|
86
|
-
persistedThinking: fresh &&
|
|
87
|
-
persistedVerbose: fresh &&
|
|
81
|
+
persistedThinking: fresh && sessionKey ? normalizeThinkLevel(getSessionPersistedLevels(sessionKey)?.thinkingLevel ?? void 0) : void 0,
|
|
82
|
+
persistedVerbose: fresh && sessionKey ? normalizeVerboseLevel(getSessionPersistedLevels(sessionKey)?.verboseLevel ?? void 0) : void 0
|
|
88
83
|
};
|
|
89
84
|
}
|
|
90
85
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-session.js","names":[],"sources":["../../../src/session/resolve-session.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { SessionConfigSchema, type Config } from '../config/schema.js';\nimport {
|
|
1
|
+
{"version":3,"file":"resolve-session.js","names":[],"sources":["../../../src/session/resolve-session.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { SessionConfigSchema, type Config } from '../config/schema.js';\nimport { resolveDefaultAgentId } from '../agent/agent-scope.js';\nimport {\n normalizeAgentId,\n resolveAgentIdFromSessionKey,\n} from '../routing/agent-session-key.js';\nimport { parseSessionKey } from '../routing/session-key.js';\nimport {\n normalizeThinkLevel,\n normalizeVerboseLevel,\n type ThinkLevel,\n type VerboseLevel,\n} from '../agent/transcript/thinking-types.js';\nimport { createLogger } from '../utils/logger.js';\nimport {\n findSessionKeyByTranscriptId,\n getSessionMetadata,\n getSessionPersistedLevels,\n requireXopcDatabase,\n} from '../storage/sqlite/index.js';\n\nimport { resolveSessionLifecycleTimestamps } from './lifecycle-timestamps.js';\nimport {\n evaluateSessionFreshness,\n resolveSessionResetPolicy,\n} from './reset-policy.js';\nimport { resolveChannelResetConfig, resolveSessionResetType } from './reset-type.js';\nimport type { SessionMetadata } from './types.js';\n\nconst log = createLogger('ResolveSession');\n\nexport type SessionResolution = {\n sessionId: string;\n sessionKey?: string;\n sessionMetadata?: SessionMetadata | null;\n isNewSession: boolean;\n persistedThinking?: ThinkLevel;\n persistedVerbose?: VerboseLevel;\n};\n\nexport type SessionKeyResolution = {\n sessionKey?: string;\n sessionMetadata?: SessionMetadata | null;\n};\n\nexport async function resolveSessionKeyForRequest(opts: {\n cfg: Config;\n sessionKey?: string;\n sessionId?: string;\n agentId?: string;\n}): Promise<SessionKeyResolution> {\n requireXopcDatabase();\n const explicitKey = opts.sessionKey?.trim();\n const requestedSessionId = opts.sessionId?.trim();\n\n let sessionKey = explicitKey;\n if (requestedSessionId && !sessionKey) {\n sessionKey = findSessionKeyByTranscriptId(requestedSessionId) ?? undefined;\n }\n if (requestedSessionId && !sessionKey) {\n const storeAgentId = explicitKey\n ? resolveAgentIdFromSessionKey(explicitKey)\n : opts.agentId?.trim()\n ? normalizeAgentId(opts.agentId)\n : resolveDefaultAgentId(opts.cfg);\n sessionKey = `agent:${normalizeAgentId(opts.agentId ?? storeAgentId)}:explicit:${requestedSessionId}`;\n }\n\n const sessionMetadata = sessionKey ? getSessionMetadata(sessionKey) : null;\n return { sessionKey, sessionMetadata };\n}\n\nexport async function resolveSession(opts: {\n cfg: Config;\n sessionKey?: string;\n sessionId?: string;\n agentId?: string;\n}): Promise<SessionResolution> {\n const sessionCfg = opts.cfg.session ?? SessionConfigSchema.parse({});\n const { sessionKey, sessionMetadata } = await resolveSessionKeyForRequest(opts);\n const now = Date.now();\n\n const parsed = sessionKey ? parseSessionKey(sessionKey) : null;\n const peerKind = parsed?.peerKind;\n const resetType = resolveSessionResetType({\n sessionKey,\n isGroup: peerKind === 'group' || peerKind === 'channel',\n isThread: Boolean(parsed?.threadId),\n });\n const channelReset = resolveChannelResetConfig({\n sessionCfg,\n channel: parsed?.source ?? sessionMetadata?.sourceChannel,\n });\n const resetPolicy = resolveSessionResetPolicy({\n sessionCfg,\n resetType,\n resetOverride: channelReset,\n });\n const lifecycle = resolveSessionLifecycleTimestamps({\n entry: sessionMetadata\n ? {\n updatedAt: Date.parse(sessionMetadata.updatedAt),\n sessionStartedAt: sessionMetadata.sessionStartedAt\n ? Date.parse(sessionMetadata.sessionStartedAt)\n : undefined,\n lastInteractionAt: sessionMetadata.lastInteractionAt\n ? Date.parse(sessionMetadata.lastInteractionAt)\n : undefined,\n }\n : undefined,\n });\n const freshness = sessionMetadata\n ? evaluateSessionFreshness({\n updatedAt: Date.parse(sessionMetadata.updatedAt),\n ...lifecycle,\n now,\n policy: resetPolicy,\n })\n : { fresh: false };\n const fresh = freshness.fresh;\n const sessionId =\n opts.sessionId?.trim() || (fresh ? sessionMetadata?.transcriptId : undefined) || randomUUID();\n const isNewSession = !fresh && !opts.sessionId?.trim();\n\n if (isNewSession && sessionKey) {\n log.debug(\n { sessionKey, previousSessionId: sessionMetadata?.transcriptId, sessionId, resetType },\n 'Session reset boundary — new transcript id for turn',\n );\n }\n\n const persistedThinking =\n fresh && sessionKey\n ? normalizeThinkLevel(getSessionPersistedLevels(sessionKey)?.thinkingLevel ?? undefined)\n : undefined;\n const persistedVerbose =\n fresh && sessionKey\n ? normalizeVerboseLevel(getSessionPersistedLevels(sessionKey)?.verboseLevel ?? undefined)\n : undefined;\n\n return {\n sessionId,\n sessionKey,\n sessionMetadata,\n isNewSession,\n persistedThinking,\n persistedVerbose,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;aAEuE;kBACP;wBAIvB;kBACmB;aAOV;AAgBlD,MAAM,MAAM,aAAa,iBAAiB;AAgB1C,eAAsB,4BAA4B,MAKhB;AAChC,sBAAqB;CACrB,MAAM,cAAc,KAAK,YAAY,MAAM;CAC3C,MAAM,qBAAqB,KAAK,WAAW,MAAM;CAEjD,IAAI,aAAa;AACjB,KAAI,sBAAsB,CAAC,WACzB,cAAa,6BAA6B,mBAAmB,IAAI,KAAA;AAEnE,KAAI,sBAAsB,CAAC,YAAY;EACrC,MAAM,eAAe,cACjB,6BAA6B,YAAY,GACzC,KAAK,SAAS,MAAM,GAClB,iBAAiB,KAAK,QAAQ,GAC9B,sBAAsB,KAAK,IAAI;AACrC,eAAa,SAAS,iBAAiB,KAAK,WAAW,aAAa,CAAC,YAAY;;CAGnF,MAAM,kBAAkB,aAAa,mBAAmB,WAAW,GAAG;AACtE,QAAO;EAAE;EAAY;EAAiB;;AAGxC,eAAsB,eAAe,MAKN;CAC7B,MAAM,aAAa,KAAK,IAAI,WAAW,oBAAoB,MAAM,EAAE,CAAC;CACpE,MAAM,EAAE,YAAY,oBAAoB,MAAM,4BAA4B,KAAK;CAC/E,MAAM,MAAM,KAAK,KAAK;CAEtB,MAAM,SAAS,aAAa,gBAAgB,WAAW,GAAG;CAC1D,MAAM,WAAW,QAAQ;CACzB,MAAM,YAAY,wBAAwB;EACxC;EACA,SAAS,aAAa,WAAW,aAAa;EAC9C,UAAU,QAAQ,QAAQ,SAAS;EACpC,CAAC;CAKF,MAAM,cAAc,0BAA0B;EAC5C;EACA;EACA,eAPmB,0BAA0B;GAC7C;GACA,SAAS,QAAQ,UAAU,iBAAiB;GAC7C,CAI4B;EAC5B,CAAC;CACF,MAAM,YAAY,kCAAkC,EAClD,OAAO,kBACH;EACE,WAAW,KAAK,MAAM,gBAAgB,UAAU;EAChD,kBAAkB,gBAAgB,mBAC9B,KAAK,MAAM,gBAAgB,iBAAiB,GAC5C,KAAA;EACJ,mBAAmB,gBAAgB,oBAC/B,KAAK,MAAM,gBAAgB,kBAAkB,GAC7C,KAAA;EACL,GACD,KAAA,GACL,CAAC;CASF,MAAM,SARY,kBACd,yBAAyB;EACvB,WAAW,KAAK,MAAM,gBAAgB,UAAU;EAChD,GAAG;EACH;EACA,QAAQ;EACT,CAAC,GACF,EAAE,OAAO,OAAO,EACI;CACxB,MAAM,YACJ,KAAK,WAAW,MAAM,KAAK,QAAQ,iBAAiB,eAAe,KAAA,MAAc,YAAY;CAC/F,MAAM,eAAe,CAAC,SAAS,CAAC,KAAK,WAAW,MAAM;AAEtD,KAAI,gBAAgB,WAClB,KAAI,MACF;EAAE;EAAY,mBAAmB,iBAAiB;EAAc;EAAW;EAAW,EACtF,sDACD;AAYH,QAAO;EACL;EACA;EACA;EACA;EACA,mBAbA,SAAS,aACL,oBAAoB,0BAA0B,WAAW,EAAE,iBAAiB,KAAA,EAAU,GACtF,KAAA;EAYJ,kBAVA,SAAS,aACL,sBAAsB,0BAA0B,WAAW,EAAE,gBAAgB,KAAA,EAAU,GACvF,KAAA;EASL"}
|
|
@@ -32,7 +32,11 @@ function transcriptRowsFromJsonArray(arr) {
|
|
|
32
32
|
/** Messages only — what providers and pi-agent should see. */
|
|
33
33
|
function buildSessionContextForLlm(rows) {
|
|
34
34
|
const out = [];
|
|
35
|
-
for (const r of rows)
|
|
35
|
+
for (const r of rows) {
|
|
36
|
+
if (isTranscriptContextEntry(r)) continue;
|
|
37
|
+
if (r.type === "compaction") continue;
|
|
38
|
+
if (isLikelyAgentMessage(r)) out.push(r);
|
|
39
|
+
}
|
|
36
40
|
return out;
|
|
37
41
|
}
|
|
38
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context-for-llm.js","names":[],"sources":["../../../src/session/session-context-for-llm.ts"],"sourcesContent":["/**\n * Transcript rows persisted on disk may include non-LLM entries (e.g. `kind: 'context'`).\n * {@link buildSessionContextForLlm} is the single choke point for provider-facing history.\n *\n * Do not pass raw on-disk JSONL rows into pi-agent / providers — always run\n * {@link buildSessionContextForLlm} first (or use {@link SessionStore.loadMessages}, which already does).\n */\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\n\n/** Persisted-only row: never sent to the model as a chat message. */\nexport interface XopcTranscriptContextEntry {\n kind: 'context';\n id?: string;\n /** Short human-readable line for UIs / logs. */\n text?: string;\n /** Structured payload (tool summaries, delivery metadata, etc.). */\n data?: Record<string, unknown>;\n createdAt?: string;\n}\n\nexport type TranscriptStoredRow = AgentMessage | XopcTranscriptContextEntry;\n\nexport function isTranscriptContextEntry(x: unknown): x is XopcTranscriptContextEntry {\n if (!x || typeof x !== 'object') return false;\n return (x as Record<string, unknown>).kind === 'context';\n}\n\nconst LLM_ROLES = new Set(['user', 'assistant', 'system', 'tool', 'toolResult']);\n\nfunction isLikelyAgentMessage(x: unknown): x is AgentMessage {\n if (!x || typeof x !== 'object') return false;\n const role = (x as Record<string, unknown>).role;\n return typeof role === 'string' && LLM_ROLES.has(role);\n}\n\n/**\n * Normalize a JSON array from on-disk transcript into stored rows (drops unrecognized objects).\n */\nexport function transcriptRowsFromJsonArray(arr: unknown[]): TranscriptStoredRow[] {\n const out: TranscriptStoredRow[] = [];\n for (const x of arr) {\n if (isTranscriptContextEntry(x)) {\n out.push(x);\n continue;\n }\n if (isLikelyAgentMessage(x)) {\n out.push(x);\n }\n }\n return out;\n}\n\n/** Messages only — what providers and pi-agent should see. */\nexport function buildSessionContextForLlm(rows: TranscriptStoredRow[]): AgentMessage[] {\n const out: AgentMessage[] = [];\n for (const r of rows) {\n if (
|
|
1
|
+
{"version":3,"file":"session-context-for-llm.js","names":[],"sources":["../../../src/session/session-context-for-llm.ts"],"sourcesContent":["/**\n * Transcript rows persisted on disk may include non-LLM entries (e.g. `kind: 'context'`).\n * {@link buildSessionContextForLlm} is the single choke point for provider-facing history.\n *\n * Do not pass raw on-disk JSONL rows into pi-agent / providers — always run\n * {@link buildSessionContextForLlm} first (or use {@link SessionStore.loadMessages}, which already does).\n */\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\n\n/** Persisted-only row: never sent to the model as a chat message. */\nexport interface XopcTranscriptContextEntry {\n kind: 'context';\n id?: string;\n /** Short human-readable line for UIs / logs. */\n text?: string;\n /** Structured payload (tool summaries, delivery metadata, etc.). */\n data?: Record<string, unknown>;\n createdAt?: string;\n}\n\nexport type TranscriptStoredRow = AgentMessage | XopcTranscriptContextEntry;\n\nexport function isTranscriptContextEntry(x: unknown): x is XopcTranscriptContextEntry {\n if (!x || typeof x !== 'object') return false;\n return (x as Record<string, unknown>).kind === 'context';\n}\n\nconst LLM_ROLES = new Set(['user', 'assistant', 'system', 'tool', 'toolResult']);\n\nfunction isLikelyAgentMessage(x: unknown): x is AgentMessage {\n if (!x || typeof x !== 'object') return false;\n const role = (x as Record<string, unknown>).role;\n return typeof role === 'string' && LLM_ROLES.has(role);\n}\n\n/**\n * Normalize a JSON array from on-disk transcript into stored rows (drops unrecognized objects).\n */\nexport function transcriptRowsFromJsonArray(arr: unknown[]): TranscriptStoredRow[] {\n const out: TranscriptStoredRow[] = [];\n for (const x of arr) {\n if (isTranscriptContextEntry(x)) {\n out.push(x);\n continue;\n }\n if (isLikelyAgentMessage(x)) {\n out.push(x);\n }\n }\n return out;\n}\n\n/** Messages only — what providers and pi-agent should see. */\nexport function buildSessionContextForLlm(rows: TranscriptStoredRow[]): AgentMessage[] {\n const out: AgentMessage[] = [];\n for (const r of rows) {\n if (isTranscriptContextEntry(r)) {\n continue;\n }\n if ((r as { type?: string }).type === 'compaction') {\n continue;\n }\n if (isLikelyAgentMessage(r)) {\n out.push(r);\n }\n }\n return out;\n}\n\n/**\n * When persisting LLM messages, keep prior `kind: 'context'` rows in their relative positions:\n * each non-context slot in the previous file is replaced by the next incoming LLM message;\n * trailing new LLM rows are appended. Extra old LLM rows are dropped if the new list is shorter.\n */\nexport function mergeLlmMessagesPreservingContextRows(\n prevRows: TranscriptStoredRow[],\n llmMessages: AgentMessage[],\n): TranscriptStoredRow[] {\n let i = 0;\n const out: TranscriptStoredRow[] = [];\n for (const r of prevRows) {\n if (isTranscriptContextEntry(r)) {\n out.push(r);\n } else {\n if (i < llmMessages.length) {\n out.push(llmMessages[i]);\n i += 1;\n }\n }\n }\n while (i < llmMessages.length) {\n out.push(llmMessages[i]);\n i += 1;\n }\n return out;\n}\n"],"mappings":";AAuBA,SAAgB,yBAAyB,GAA6C;AACpF,KAAI,CAAC,KAAK,OAAO,MAAM,SAAU,QAAO;AACxC,QAAQ,EAA8B,SAAS;;AAGjD,MAAM,YAAY,IAAI,IAAI;CAAC;CAAQ;CAAa;CAAU;CAAQ;CAAa,CAAC;AAEhF,SAAS,qBAAqB,GAA+B;AAC3D,KAAI,CAAC,KAAK,OAAO,MAAM,SAAU,QAAO;CACxC,MAAM,OAAQ,EAA8B;AAC5C,QAAO,OAAO,SAAS,YAAY,UAAU,IAAI,KAAK;;;;;AAMxD,SAAgB,4BAA4B,KAAuC;CACjF,MAAM,MAA6B,EAAE;AACrC,MAAK,MAAM,KAAK,KAAK;AACnB,MAAI,yBAAyB,EAAE,EAAE;AAC/B,OAAI,KAAK,EAAE;AACX;;AAEF,MAAI,qBAAqB,EAAE,CACzB,KAAI,KAAK,EAAE;;AAGf,QAAO;;;AAIT,SAAgB,0BAA0B,MAA6C;CACrF,MAAM,MAAsB,EAAE;AAC9B,MAAK,MAAM,KAAK,MAAM;AACpB,MAAI,yBAAyB,EAAE,CAC7B;AAEF,MAAK,EAAwB,SAAS,aACpC;AAEF,MAAI,qBAAqB,EAAE,CACzB,KAAI,KAAK,EAAE;;AAGf,QAAO;;;;;;;AAQT,SAAgB,sCACd,UACA,aACuB;CACvB,IAAI,IAAI;CACR,MAAM,MAA6B,EAAE;AACrC,MAAK,MAAM,KAAK,SACd,KAAI,yBAAyB,EAAE,CAC7B,KAAI,KAAK,EAAE;UAEP,IAAI,YAAY,QAAQ;AAC1B,MAAI,KAAK,YAAY,GAAG;AACxB,OAAK;;AAIX,QAAO,IAAI,YAAY,QAAQ;AAC7B,MAAI,KAAK,YAAY,GAAG;AACxB,OAAK;;AAEP,QAAO"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/session/session-id.ts
|
|
2
|
+
/** Same pattern as OpenClaw `config/sessions/paths.ts`. */
|
|
3
|
+
const SAFE_SESSION_ID_RE = /^[a-z0-9][a-z0-9._-]{0,127}$/i;
|
|
4
|
+
function validateSessionId(sessionId) {
|
|
5
|
+
const trimmed = sessionId.trim();
|
|
6
|
+
if (!SAFE_SESSION_ID_RE.test(trimmed)) throw new Error(`Invalid session ID: ${sessionId}`);
|
|
7
|
+
return trimmed;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { SAFE_SESSION_ID_RE, validateSessionId };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=session-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-id.js","names":[],"sources":["../../../src/session/session-id.ts"],"sourcesContent":["/** Same pattern as OpenClaw `config/sessions/paths.ts`. */\nexport const SAFE_SESSION_ID_RE = /^[a-z0-9][a-z0-9._-]{0,127}$/i;\n\nexport function validateSessionId(sessionId: string): string {\n const trimmed = sessionId.trim();\n if (!SAFE_SESSION_ID_RE.test(trimmed)) {\n throw new Error(`Invalid session ID: ${sessionId}`);\n }\n return trimmed;\n}\n"],"mappings":";;AACA,MAAa,qBAAqB;AAElC,SAAgB,kBAAkB,WAA2B;CAC3D,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,CAAC,mBAAmB,KAAK,QAAQ,CACnC,OAAM,IAAI,MAAM,uBAAuB,YAAY;AAErD,QAAO"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { isCronSessionKey } from "../routing/session-key-utils.js";
|
|
2
|
-
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
3
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { isCronSessionKey } from "../routing/session-key-utils.js";
|
|
4
|
+
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
5
|
import { init_providers, resolveModel } from "../providers/index.js";
|
|
6
6
|
import { readAgentMessageContent } from "../agent/memory/agent-message-access.js";
|
|
7
7
|
import { stripSessionStartupContextFromUserText } from "../agent/reply/startup-context.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Per-session markdown workspace override (stored in SessionAgentConfig).
|
|
3
3
|
*/
|
|
4
4
|
import type { Config } from '../config/schema.js';
|
|
5
|
-
import type { SessionAgentConfig } from './config-
|
|
5
|
+
import type { SessionAgentConfig } from './config-types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Normalize user input for `workingDirectoryOverride`. Rejects empty and filesystem roots.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-workspace.js","names":[],"sources":["../../../src/session/session-workspace.ts"],"sourcesContent":["/**\n * Per-session markdown workspace override (stored in SessionAgentConfig).\n */\n\nimport type { Config } from '../config/schema.js';\nimport { resolveEffectiveAgentProfileForSession } from '../config/agent-profile.js';\nimport { resolveUserPath } from '../agent/agent-scope.js';\nimport { normalizeWorkspaceDir } from '../config/workspace-path.js';\nimport type { SessionAgentConfig } from './config-
|
|
1
|
+
{"version":3,"file":"session-workspace.js","names":[],"sources":["../../../src/session/session-workspace.ts"],"sourcesContent":["/**\n * Per-session markdown workspace override (stored in SessionAgentConfig).\n */\n\nimport type { Config } from '../config/schema.js';\nimport { resolveEffectiveAgentProfileForSession } from '../config/agent-profile.js';\nimport { resolveUserPath } from '../agent/agent-scope.js';\nimport { normalizeWorkspaceDir } from '../config/workspace-path.js';\nimport type { SessionAgentConfig } from './config-types.js';\n\n/**\n * Normalize user input for `workingDirectoryOverride`. Rejects empty and filesystem roots.\n */\nexport function normalizeWorkingDirectoryInput(raw: string): { ok: true; path: string } | { ok: false; error: string } {\n const trimmed = raw.trim();\n if (!trimmed) {\n return { ok: false, error: 'working directory is empty' };\n }\n const resolved = resolveUserPath(trimmed);\n const normalized = normalizeWorkspaceDir(resolved);\n if (!normalized) {\n return { ok: false, error: 'invalid working directory path' };\n }\n return { ok: true, path: normalized };\n}\n\n/**\n * Resolved markdown workspace for tools/shell: session override or merged agent profile default.\n */\nexport function effectiveWorkspacePathForSession(\n cfg: Config,\n sessionKey: string,\n sessionAgentConfig: SessionAgentConfig | null | undefined,\n): string {\n const base = resolveEffectiveAgentProfileForSession(cfg, sessionKey).resolvedWorkspacePath;\n const o = sessionAgentConfig?.workingDirectoryOverride?.trim();\n if (!o) {\n return base;\n }\n const resolved = resolveUserPath(o);\n const normalized = normalizeWorkspaceDir(resolved);\n return normalized ?? base;\n}\n"],"mappings":";;;;kBAM0D;qBACU;;;;AAMpE,SAAgB,+BAA+B,KAAwE;CACrH,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,CAAC,QACH,QAAO;EAAE,IAAI;EAAO,OAAO;EAA8B;CAG3D,MAAM,aAAa,sBADF,gBAAgB,QACgB,CAAC;AAClD,KAAI,CAAC,WACH,QAAO;EAAE,IAAI;EAAO,OAAO;EAAkC;AAE/D,QAAO;EAAE,IAAI;EAAM,MAAM;EAAY;;;;;AAMvC,SAAgB,iCACd,KACA,YACA,oBACQ;CACR,MAAM,OAAO,uCAAuC,KAAK,WAAW,CAAC;CACrE,MAAM,IAAI,oBAAoB,0BAA0B,MAAM;AAC9D,KAAI,CAAC,EACH,QAAO;AAIT,QADmB,sBADF,gBAAgB,EACgB,CAChC,IAAI"}
|
|
@@ -10,64 +10,27 @@ import type { Message } from './types.js';
|
|
|
10
10
|
import type { SessionTranscriptUpdate } from './transcript-events.js';
|
|
11
11
|
export interface SessionStoreOptions {
|
|
12
12
|
config: Config;
|
|
13
|
-
agentId?: string;
|
|
14
|
-
sessionsDir?: string;
|
|
15
13
|
}
|
|
16
14
|
export declare class SessionStore {
|
|
17
15
|
private options;
|
|
18
|
-
private sessionsDir;
|
|
19
|
-
private archiveDir;
|
|
20
|
-
private storePath;
|
|
21
16
|
private window;
|
|
22
17
|
private compactor;
|
|
23
|
-
private storeMutationDepth;
|
|
24
|
-
private storeMutationChain;
|
|
25
|
-
private allSessionsMapCache?;
|
|
26
|
-
/** Cache of per-agent sessions dirs to avoid re-resolution on every call. */
|
|
27
|
-
private agentSessionsDirCache;
|
|
28
18
|
constructor(options: SessionStoreOptions, windowConfig?: Partial<WindowConfig>, compactionConfig?: Partial<CompactionConfig>);
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* OpenClaw-aligned: resolve the sessions directory for a given session key.
|
|
32
|
-
* Extracts agentId from the session key and routes to `agents/<agentId>/sessions/`.
|
|
33
|
-
* Falls back to the default sessions directory when agentId cannot be parsed
|
|
34
|
-
* or when `sessionsDir` was explicitly provided in options.
|
|
35
|
-
*/
|
|
36
|
-
private resolveSessionsDirForKey;
|
|
37
|
-
private resolveStorePathForKey;
|
|
19
|
+
private resolveWorkspaceCwd;
|
|
38
20
|
private runStoreMutation;
|
|
39
21
|
initialize(): Promise<void>;
|
|
40
|
-
|
|
41
|
-
private readMapForKey;
|
|
42
|
-
private readMap;
|
|
43
|
-
private invalidateAllSessionsMapCache;
|
|
44
|
-
private discoverSessionMapPaths;
|
|
45
|
-
/**
|
|
46
|
-
* Unified cross-agent aggregation entry for global session views.
|
|
47
|
-
* Reads configured agents plus existing per-agent session maps under the state directory.
|
|
48
|
-
*/
|
|
49
|
-
private readAllMaps;
|
|
50
|
-
private getDiskEntry;
|
|
51
|
-
private buildDefaultMetadata;
|
|
52
|
-
private parseSessionKey;
|
|
53
|
-
private extractRoutingFromKey;
|
|
54
|
-
/** Resolve on-disk transcript path; creates session row + empty JSONL when missing. */
|
|
22
|
+
getSessionsRoot(): string;
|
|
55
23
|
resolveTranscriptPath(sessionKey: string): Promise<{
|
|
56
24
|
sessionId: string;
|
|
57
|
-
|
|
58
|
-
sessionsDir: string;
|
|
25
|
+
sessionKey: string;
|
|
59
26
|
}>;
|
|
60
|
-
|
|
61
|
-
private ensureSession;
|
|
62
|
-
private metadataFromEntry;
|
|
27
|
+
appendTranscriptMessage(sessionKey: string, message: AgentMessage): Promise<void>;
|
|
63
28
|
getByAgent(agentId: string): Promise<SessionMetadata[]>;
|
|
64
29
|
getByAccount(accountId: string): Promise<SessionMetadata[]>;
|
|
65
30
|
getByPeer(peerKind: string, peerId: string): Promise<SessionMetadata[]>;
|
|
66
31
|
getMainSession(channel: string, accountId: string): Promise<SessionMetadata | null>;
|
|
67
32
|
refreshIndex(): Promise<void>;
|
|
68
33
|
list(query?: SessionListQuery): Promise<PaginatedResult<SessionMetadata>>;
|
|
69
|
-
private sessionMetadataMatchesSearch;
|
|
70
|
-
private sessionContentMatchesSearch;
|
|
71
34
|
get(key: string, options?: {
|
|
72
35
|
includeTranscriptSummary?: boolean;
|
|
73
36
|
includeTranscriptRows?: boolean;
|
|
@@ -93,11 +56,6 @@ export declare class SessionStore {
|
|
|
93
56
|
loadTranscriptRows(key: string): Promise<TranscriptStoredRow[]>;
|
|
94
57
|
getMetadata(key: string): Promise<SessionMetadata | null>;
|
|
95
58
|
updateMetadata(key: string, updates: Partial<SessionMetadata>): Promise<void>;
|
|
96
|
-
/**
|
|
97
|
-
* Reset transcript for an existing session key: archive the current JSONL as
|
|
98
|
-
* `*.reset.*`, assign a new `sessionId`, and preserve per-session overrides
|
|
99
|
-
* on the disk entry (thinking/verbose) and in `sessions/config/*.json`.
|
|
100
|
-
*/
|
|
101
59
|
reset(key: string): Promise<{
|
|
102
60
|
sessionId: string;
|
|
103
61
|
previousSessionId: string;
|
|
@@ -112,22 +70,12 @@ export declare class SessionStore {
|
|
|
112
70
|
unarchive(key: string): Promise<void>;
|
|
113
71
|
pin(key: string): Promise<void>;
|
|
114
72
|
unpin(key: string): Promise<void>;
|
|
115
|
-
|
|
116
|
-
private findMostRecentDeletedTranscript;
|
|
117
|
-
private moveFromArchive;
|
|
118
|
-
loadMessages(key: string, options?: {
|
|
73
|
+
loadMessages(_key: string, _options?: {
|
|
119
74
|
fromArchive?: boolean;
|
|
120
75
|
}): Promise<AgentMessage[]>;
|
|
121
|
-
private loadDisplayMessages;
|
|
122
76
|
loadTranscriptDocument(key: string): Promise<XopcSessionTranscriptV1 | null>;
|
|
123
|
-
|
|
124
|
-
/** Incremental sessions.json stats after guard append (OpenClaw transcript-events). */
|
|
125
|
-
syncSessionsJsonFromTranscriptUpdate(update: SessionTranscriptUpdate): Promise<void>;
|
|
77
|
+
syncEmbeddedTranscriptUpdate(update: SessionTranscriptUpdate): Promise<void>;
|
|
126
78
|
appendTranscriptContextEntry(key: string, entry: Omit<XopcTranscriptContextEntry, 'kind'> & Partial<Pick<XopcTranscriptContextEntry, 'kind'>>): Promise<void>;
|
|
127
|
-
/**
|
|
128
|
-
* Bulk write entry point used by compaction, tests, and admin tools.
|
|
129
|
-
* Runtime agent turns must persist via {@link guardSessionManager} + appendMessage.
|
|
130
|
-
*/
|
|
131
79
|
saveMessages(key: string, messages: AgentMessage[]): Promise<void>;
|
|
132
80
|
getWindowStats(messages: AgentMessage[]): {
|
|
133
81
|
total: number;
|
|
@@ -145,11 +93,12 @@ export declare class SessionStore {
|
|
|
145
93
|
prepareCompaction(key: string, messages: AgentMessage[], contextWindow: number): {
|
|
146
94
|
needsCompaction: boolean;
|
|
147
95
|
messages: AgentMessage[];
|
|
148
|
-
stats
|
|
96
|
+
stats: {
|
|
97
|
+
needed: boolean;
|
|
98
|
+
reason: string;
|
|
99
|
+
usagePercent?: number;
|
|
100
|
+
};
|
|
149
101
|
};
|
|
150
|
-
private checkpointBasename;
|
|
151
|
-
private pruneCompactionCheckpoints;
|
|
152
|
-
private captureCompactionCheckpoint;
|
|
153
102
|
applyCompaction(key: string, messages: AgentMessage[], result: CompactionResult): Promise<AgentMessage[]>;
|
|
154
103
|
compact(key: string, messages: AgentMessage[], contextWindow: number, instructions?: string, force?: boolean): Promise<CompactionResult>;
|
|
155
104
|
getCompactionStats(key: string): Promise<{
|
|
@@ -171,9 +120,11 @@ export declare class SessionStore {
|
|
|
171
120
|
getStats(): Promise<GlobalSessionStats>;
|
|
172
121
|
archiveOld(olderThanDays: number): Promise<number>;
|
|
173
122
|
estimateTokens(messages: AgentMessage[]): number;
|
|
123
|
+
private loadDisplayMessages;
|
|
124
|
+
private paginateDisplayMessages;
|
|
125
|
+
private displayMessageIdentity;
|
|
174
126
|
private messageContent;
|
|
175
127
|
private isCompactionSummaryMessage;
|
|
176
|
-
private displayMessageIdentity;
|
|
177
128
|
private extractTextContent;
|
|
178
129
|
private injectPostCompactionContext;
|
|
179
130
|
private convertMessages;
|