@xopcai/xopc 0.0.82 → 0.0.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +2 -3
- package/dist/extensions/feishu/src/outbound/media-load.js.map +1 -1
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +6 -6
- package/dist/extensions/telegram/src/config-schema.d.ts +6 -6
- package/dist/extensions/telegram/src/plugin.d.ts +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/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +3 -3
- 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/config-schema.d.ts +3 -3
- 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/gateway/static/root/assets/agents-CrpYTHJS.js +222 -0
- package/dist/gateway/static/root/assets/{apps-page-pJ27dsqn.js → apps-page-1mcKh5Rh.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-zd6QNKPx.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-D1KYmOmi.js → channels-status-swr-uRAuhiUo.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-Y2wfSJVI.js → cron-api-O2Q_ruV6.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-B97KU_RG.js → cron-page-By09AQD-.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-CboA_Css.js → dist-BpQxde0t.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DN_zNmpo.js → extension-debug-page-CY27wj_p.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BUXtOzv5.js → extension-page-C-Ed5ZmP.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-C2dX4KCW.js → extension-settings-page-raLux7E7.js} +1 -1
- package/dist/gateway/static/root/assets/fetch-2iRFmd3n.js +3 -0
- package/dist/gateway/static/root/assets/{field-primitives-B9rOLqdm.js → field-primitives-fa_hiQcX.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DvfiRVrc.js → heartbeat-config-api-BVl5VHvL.js} +1 -1
- package/dist/gateway/static/root/assets/index-BuFldCsB.css +1 -0
- package/dist/gateway/static/root/assets/{index-DQuaMye9.js → index-Y-iqo-gL.js} +94 -85
- package/dist/gateway/static/root/assets/{logs-page-BQuBpHcc.js → logs-page-BdH2n7ZW.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Vpchzdp-.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-2Yu-FASs.js → settings-form-section-Kk1yAGBl.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-KBm0u6Dz.js +3 -0
- package/dist/gateway/static/root/assets/skills-page-BjeXXaOn.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-DnwYutiX.js → theme-store-D01dJt95.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-D2Gn2qod.js → utils-DpTxN4AF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-CwO8Cf01.js +1 -0
- package/dist/gateway/static/root/index.html +4 -4
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-instance-gateway.d.ts +50 -0
- package/dist/src/agent/agent-instance-gateway.js +1 -0
- package/dist/src/agent/agent-manager.d.ts +20 -14
- package/dist/src/agent/agent-manager.js +74 -186
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/coordinator.d.ts +61 -0
- package/dist/src/agent/background-review/coordinator.js +120 -0
- package/dist/src/agent/background-review/coordinator.js.map +1 -0
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/child-agent-factory.d.ts +14 -0
- package/dist/src/agent/child-agent-factory.js +2 -8
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +3 -3
- package/dist/src/agent/embedded/index.d.ts +1 -2
- package/dist/src/agent/embedded/index.js +2 -3
- package/dist/src/agent/embedded/run-for-session.d.ts +2 -2
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/embedded/runs.d.ts +32 -0
- package/dist/src/agent/embedded/runs.js +79 -19
- package/dist/src/agent/embedded/runs.js.map +1 -1
- package/dist/src/agent/embedded/session-manager-cache.d.ts +14 -0
- package/dist/src/agent/embedded/session-manager-cache.js +32 -11
- package/dist/src/agent/embedded/session-manager-cache.js.map +1 -1
- package/dist/src/agent/embedded/session-runner.d.ts +37 -7
- package/dist/src/agent/embedded/session-runner.js +184 -153
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.d.ts +57 -9
- package/dist/src/agent/embedded/session-tool-result-guard.js +159 -67
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- package/dist/src/agent/goals/goal-run-store.js +4 -4
- package/dist/src/agent/goals/persistent-goal-service.d.ts +84 -0
- package/dist/src/agent/goals/persistent-goal-service.js +139 -0
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -0
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/goals/state.d.ts +1 -1
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/agent/image/load-image-media.js +1 -1
- package/dist/src/agent/inbound/inbound-loop.d.ts +77 -0
- package/dist/src/agent/inbound/inbound-loop.js +226 -0
- package/dist/src/agent/inbound/inbound-loop.js.map +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +80 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +138 -0
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -0
- 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/lifecycle/handlers/compaction.d.ts +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/lifecycle/manager.d.ts +1 -1
- package/dist/src/agent/lifecycle/manager.js.map +1 -1
- package/dist/src/agent/lifecycle/types.d.ts +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.d.ts +12 -2
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
- package/dist/src/agent/memory/index.js +3 -3
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.d.ts +37 -0
- package/dist/src/agent/memory/prefetch-coordinator.js +45 -0
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -0
- package/dist/src/agent/messaging/command-handler.d.ts +5 -1
- package/dist/src/agent/messaging/command-handler.js +24 -96
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/messaging/index.d.ts +1 -0
- package/dist/src/agent/messaging/index.js +2 -1
- package/dist/src/agent/messaging/message-router.d.ts +1 -1
- package/dist/src/agent/messaging/message-router.js.map +1 -1
- package/dist/src/agent/messaging/outbound-coordinator.d.ts +82 -0
- package/dist/src/agent/messaging/outbound-coordinator.js +123 -0
- package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -0
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-event-handler.d.ts +36 -33
- package/dist/src/agent/orchestration/agent-event-handler.js +212 -174
- package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +4 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +4 -8
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/orchestration/index.d.ts +1 -1
- package/dist/src/agent/orchestration/index.js +2 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -4
- 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 +1 -1
- package/dist/src/agent/service/async-queue.d.ts +20 -0
- package/dist/src/agent/service/async-queue.js +53 -0
- package/dist/src/agent/service/async-queue.js.map +1 -0
- package/dist/src/agent/service/build-direct-message-content.d.ts +2 -2
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +70 -0
- package/dist/src/agent/service/direct-turn-helpers.js +90 -0
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -0
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
- package/dist/src/agent/service/process-direct-one-shot.js +17 -34
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +122 -168
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/webchat-tts.d.ts +2 -2
- package/dist/src/agent/service/webchat-tts.js +1 -1
- package/dist/src/agent/service/webchat-tts.js.map +1 -1
- package/dist/src/agent/service.d.ts +62 -167
- package/dist/src/agent/service.js +177 -786
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/index.d.ts +4 -0
- package/dist/src/agent/session/index.js +5 -1
- package/dist/src/agent/session/session-config-service.d.ts +68 -0
- package/dist/src/agent/session/session-config-service.js +172 -0
- package/dist/src/agent/session/session-config-service.js.map +1 -0
- package/dist/src/agent/session/session-context.d.ts +27 -19
- package/dist/src/agent/session/session-context.js +39 -24
- package/dist/src/agent/session/session-context.js.map +1 -1
- package/dist/src/agent/session/session-hydrator.d.ts +42 -0
- package/dist/src/agent/session/session-hydrator.js +66 -0
- package/dist/src/agent/session/session-hydrator.js.map +1 -0
- package/dist/src/agent/session/session-inspector.d.ts +80 -0
- package/dist/src/agent/session/session-inspector.js +119 -0
- package/dist/src/agent/session/session-inspector.js.map +1 -0
- package/dist/src/agent/session/session-state-bag.d.ts +83 -0
- package/dist/src/agent/session/session-state-bag.js +192 -0
- package/dist/src/agent/session/session-state-bag.js.map +1 -0
- package/dist/src/agent/skills/config.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +2 -2
- package/dist/src/agent/skills/index.d.ts +0 -2
- package/dist/src/agent/skills/index.js +3 -5
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -6
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +35 -7
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/scanner.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +2 -2
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +7 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +37 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/delegate-tool.d.ts +7 -0
- package/dist/src/agent/tools/delegate-tool.js +2 -1
- package/dist/src/agent/tools/delegate-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/executor.d.ts +34 -15
- package/dist/src/agent/tools/executor.js +44 -79
- package/dist/src/agent/tools/executor.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +6 -0
- package/dist/src/agent/tools/factory.js +63 -4
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/skills-tools.js +1 -1
- package/dist/src/agent/tools/tts-tool.js +1 -1
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +48 -0
- package/dist/src/agent/workspace-runtime/registry.js +59 -0
- package/dist/src/agent/workspace-runtime/registry.js.map +1 -0
- 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/cdp-local-launcher.js +4 -3
- package/dist/src/browser/cdp-local-launcher.js.map +1 -1
- package/dist/src/browser/index.d.ts +1 -0
- package/dist/src/browser/index.js +2 -1
- package/dist/src/browser/manager.js +3 -2
- package/dist/src/browser/manager.js.map +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/browser-use.js +2 -1
- package/dist/src/browser/providers/browser-use.js.map +1 -1
- package/dist/src/browser/providers/browserbase.js +2 -1
- package/dist/src/browser/providers/browserbase.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +7 -6
- package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
- package/dist/src/browser/providers/playwright-doctor.d.ts +2 -0
- package/dist/src/browser/providers/playwright-doctor.js +7 -3
- package/dist/src/browser/providers/playwright-doctor.js.map +1 -1
- package/dist/src/browser/readiness.d.ts +33 -0
- package/dist/src/browser/readiness.js +138 -0
- package/dist/src/browser/readiness.js.map +1 -0
- package/dist/src/browser/stealth.js +2 -2
- 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/channel-domain.d.ts +1 -1
- package/dist/src/channels/config-helpers.d.ts +1 -1
- package/dist/src/channels/config-helpers.js.map +1 -1
- package/dist/src/channels/heartbeat-scheduler.d.ts +40 -0
- package/dist/src/channels/heartbeat-scheduler.js +94 -0
- package/dist/src/channels/heartbeat-scheduler.js.map +1 -0
- package/dist/src/channels/lifecycle-supervisor.d.ts +81 -0
- package/dist/src/channels/lifecycle-supervisor.js +263 -0
- package/dist/src/channels/lifecycle-supervisor.js.map +1 -0
- package/dist/src/channels/manager.d.ts +34 -68
- package/dist/src/channels/manager.js +107 -477
- package/dist/src/channels/manager.js.map +1 -1
- package/dist/src/channels/outbound/deliver.d.ts +1 -1
- package/dist/src/channels/outbound/deliver.js.map +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/outbound-sender.d.ts +51 -0
- package/dist/src/channels/outbound-sender.js +125 -0
- package/dist/src/channels/outbound-sender.js.map +1 -0
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-service.d.ts +3 -10
- package/dist/src/channels/pairing/pairing-service.js.map +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/pairing/pairing-types.d.ts +15 -0
- package/dist/src/channels/pairing/pairing-types.js +1 -0
- package/dist/src/channels/plugin-registry.d.ts +22 -0
- package/dist/src/channels/plugin-registry.js +44 -0
- package/dist/src/channels/plugin-registry.js.map +1 -0
- package/dist/src/channels/plugin-types.d.ts +1 -1
- package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
- package/dist/src/channels/security-helpers.d.ts +1 -1
- package/dist/src/channels/security-helpers.js.map +1 -1
- package/dist/src/channels/setup-wizard.d.ts +1 -1
- package/dist/src/chat-commands/builtins/config.js +2 -2
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/commands/agent/stream-renderer.js +1 -1
- package/dist/src/cli/commands/agent/stream-renderer.js.map +1 -1
- package/dist/src/cli/commands/agent.js +4 -4
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +2 -1
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-dev.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/gateway/call.js +1 -1
- package/dist/src/cli/commands/gateway/call.js.map +1 -1
- package/dist/src/cli/commands/gateway/health.js +1 -1
- package/dist/src/cli/commands/gateway/health.js.map +1 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.d.ts +31 -12
- package/dist/src/cli/commands/gateway/lifecycle-core.js +167 -116
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.d.ts +11 -0
- package/dist/src/cli/commands/gateway/lifecycle.js +102 -0
- package/dist/src/cli/commands/gateway/lifecycle.js.map +1 -0
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/gateway/logs.js.map +1 -1
- package/dist/src/cli/commands/gateway/probe.js +1 -1
- package/dist/src/cli/commands/gateway/probe.js.map +1 -1
- package/dist/src/cli/commands/gateway/restart-health.d.ts +12 -0
- package/dist/src/cli/commands/gateway/restart-health.js +45 -1
- package/dist/src/cli/commands/gateway/restart-health.js.map +1 -1
- package/dist/src/cli/commands/gateway/restart.js +3 -3
- package/dist/src/cli/commands/gateway/restart.js.map +1 -1
- package/dist/src/cli/commands/gateway/run-foreground.d.ts +0 -1
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -35
- package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
- package/dist/src/cli/commands/gateway/service.js +1 -1
- package/dist/src/cli/commands/gateway/service.js.map +1 -1
- package/dist/src/cli/commands/gateway/shared.d.ts +3 -0
- package/dist/src/cli/commands/gateway/shared.js +54 -0
- package/dist/src/cli/commands/gateway/shared.js.map +1 -0
- package/dist/src/cli/commands/gateway/status.js +1 -1
- package/dist/src/cli/commands/gateway/status.js.map +1 -1
- package/dist/src/cli/commands/gateway/stop.js +2 -2
- package/dist/src/cli/commands/gateway/stop.js.map +1 -1
- package/dist/src/cli/commands/gateway/token.js +1 -1
- package/dist/src/cli/commands/gateway/token.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +5 -5
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/image.js +2 -2
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/init.js +4 -4
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/gateway.d.ts +0 -8
- package/dist/src/cli/commands/onboard/gateway.js +48 -49
- package/dist/src/cli/commands/onboard/gateway.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +9 -64
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/session/utils.js +1 -1
- package/dist/src/cli/commands/session/utils.js.map +1 -1
- package/dist/src/cli/commands/skills.js +1 -1
- package/dist/src/cli/commands/tailscale.js +1 -1
- package/dist/src/cli/commands/tailscale.js.map +1 -1
- package/dist/src/cli/context.d.ts +20 -0
- package/dist/src/cli/context.js +23 -0
- package/dist/src/cli/context.js.map +1 -0
- package/dist/src/cli/extension-cli-register.js +3 -3
- package/dist/src/cli/gateway-run-argv.js +1 -4
- package/dist/src/cli/gateway-run-argv.js.map +1 -1
- package/dist/src/cli/gateway-run-fast-path.js +1 -1
- package/dist/src/cli/gateway-run-fast-path.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -7
- package/dist/src/cli/index.js +4 -6
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/commands.flags.d.ts +3 -0
- package/dist/src/config/commands.flags.js +11 -0
- package/dist/src/config/commands.flags.js.map +1 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.js +6 -5
- 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/profile.js +2 -2
- package/dist/src/config/schema.d.ts +11 -4
- package/dist/src/config/schema.js +13 -12
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path-helpers.d.ts +15 -0
- package/dist/src/config/workspace-path-helpers.js +14 -0
- package/dist/src/config/workspace-path-helpers.js.map +1 -0
- package/dist/src/cron/executor.js +4 -4
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/persistence.js +1 -1
- package/dist/src/cron/run-log-store.js +1 -1
- package/dist/src/daemon/index.d.ts +0 -1
- package/dist/src/daemon/index.js +1 -2
- package/dist/src/daemon/install-plan.js +3 -2
- package/dist/src/daemon/install-plan.js.map +1 -1
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/daemon/types.d.ts +0 -6
- package/dist/src/extensions/api.d.ts +1 -1
- package/dist/src/extensions/api.js +2 -2
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/extension-registry-impl.d.ts +51 -0
- package/dist/src/extensions/extension-registry-impl.js +117 -0
- package/dist/src/extensions/extension-registry-impl.js.map +1 -0
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/index.js +3 -2
- package/dist/src/extensions/loader.d.ts +3 -43
- package/dist/src/extensions/loader.js +3 -110
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/lockfile.js +2 -2
- package/dist/src/extensions/sdk/index.js +2 -1
- package/dist/src/extensions/sdk/index.js.map +1 -1
- package/dist/src/extensions/types/events.d.ts +7 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/heartbeat/service.js +2 -2
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/app.js +5 -53
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/middleware/auth.d.ts +5 -14
- package/dist/src/gateway/hono/middleware/auth.js +89 -126
- package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
- package/dist/src/gateway/hono/middleware/logger.js +1 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +14 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +62 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +1 -0
- package/dist/src/gateway/hono/oauth.js +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +4 -4
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +1 -1
- package/dist/src/gateway/hono/routes/browser.d.ts +20 -0
- package/dist/src/gateway/hono/routes/browser.js +626 -0
- package/dist/src/gateway/hono/routes/browser.js.map +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +13 -13
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/agents.js +418 -0
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +12 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.js +186 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +264 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/index.d.ts +9 -0
- package/dist/src/gateway/hono/routes/config-patch/index.js +6 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +23 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js +139 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/result.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/result.js +13 -0
- package/dist/src/gateway/hono/routes/config-patch/result.js.map +1 -0
- package/dist/src/gateway/hono/routes/config.js +20 -1764
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +2 -3
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -5
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -2
- package/dist/src/gateway/hono/routes/mcp.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +32 -32
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/shares.js +4 -4
- package/dist/src/gateway/hono/routes/shares.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +6 -7
- package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
- package/dist/src/gateway/hono/sse.js +2 -2
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +4 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/rate-limit/auth-policy.d.ts +34 -0
- package/dist/src/gateway/rate-limit/auth-policy.js +49 -0
- package/dist/src/gateway/rate-limit/auth-policy.js.map +1 -0
- package/dist/src/gateway/rate-limit/buckets.d.ts +63 -0
- package/dist/src/gateway/rate-limit/buckets.js +143 -0
- package/dist/src/gateway/rate-limit/buckets.js.map +1 -0
- package/dist/src/gateway/rate-limit/env-flags.d.ts +13 -0
- package/dist/src/gateway/rate-limit/env-flags.js +16 -0
- package/dist/src/gateway/rate-limit/env-flags.js.map +1 -0
- package/dist/src/gateway/rate-limit/index.d.ts +3 -0
- package/dist/src/gateway/rate-limit/index.js +4 -0
- package/dist/src/gateway/run-loop.d.ts +1 -1
- package/dist/src/gateway/run-loop.js +24 -4
- package/dist/src/gateway/run-loop.js.map +1 -1
- package/dist/src/gateway/runtime-config.js +2 -1
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +2 -1
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/security/index.d.ts +0 -1
- package/dist/src/gateway/security/index.js +1 -2
- package/dist/src/gateway/security/loopback.d.ts +13 -0
- package/dist/src/gateway/security/loopback.js +45 -0
- package/dist/src/gateway/security/loopback.js.map +1 -0
- package/dist/src/gateway/service/agent-runner.d.ts +108 -0
- package/dist/src/gateway/service/agent-runner.js +184 -0
- package/dist/src/gateway/service/agent-runner.js.map +1 -0
- package/dist/src/gateway/service/config-coordinator.d.ts +119 -0
- package/dist/src/gateway/service/config-coordinator.js +351 -0
- package/dist/src/gateway/service/config-coordinator.js.map +1 -0
- package/dist/src/gateway/service/marketplace-service.d.ts +85 -0
- package/dist/src/gateway/service/marketplace-service.js +239 -0
- package/dist/src/gateway/service/marketplace-service.js.map +1 -0
- package/dist/src/gateway/service/run-gateway-agent.js +5 -5
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +125 -0
- package/dist/src/gateway/service/sessions-api.js +135 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -0
- package/dist/src/gateway/service.d.ts +30 -360
- package/dist/src/gateway/service.js +121 -903
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/gateway/workspace-heartbeat-path.js +1 -2
- package/dist/src/gateway/workspace-heartbeat-path.js.map +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/gateway-process-argv.d.ts +4 -0
- package/dist/src/infra/gateway-process-argv.js +26 -0
- package/dist/src/infra/gateway-process-argv.js.map +1 -0
- package/dist/src/infra/gateway-processes.d.ts +5 -0
- package/dist/src/infra/gateway-processes.js +65 -0
- package/dist/src/infra/gateway-processes.js.map +1 -0
- package/dist/src/infra/rate-limit/failure-limiter.d.ts +50 -0
- package/dist/src/infra/rate-limit/failure-limiter.js +100 -0
- package/dist/src/infra/rate-limit/failure-limiter.js.map +1 -0
- package/dist/src/infra/rate-limit/index.d.ts +5 -0
- package/dist/src/infra/rate-limit/index.js +3 -0
- package/dist/src/infra/rate-limit/keyed-store.d.ts +34 -0
- package/dist/src/infra/rate-limit/keyed-store.js +44 -0
- package/dist/src/infra/rate-limit/keyed-store.js.map +1 -0
- package/dist/src/infra/rate-limit/rate-limiter.d.ts +39 -0
- package/dist/src/infra/rate-limit/rate-limiter.js +65 -0
- package/dist/src/infra/rate-limit/rate-limiter.js.map +1 -0
- package/dist/src/infra/restart.d.ts +21 -0
- package/dist/src/infra/restart.js +122 -0
- package/dist/src/infra/restart.js.map +1 -0
- package/dist/src/infra/update-check.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/write-file-atomic.js +2 -2
- package/dist/src/mcp/channel-bridge.d.ts +0 -6
- package/dist/src/mcp/channel-bridge.js +1 -5
- package/dist/src/mcp/channel-bridge.js.map +1 -1
- package/dist/src/media-shared/http/ssrf-guard.js +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.js +2 -2
- package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
- package/dist/src/session/parity/sessions-json-file-read.d.ts +2 -1
- package/dist/src/session/parity/sessions-json-file-read.js.map +1 -1
- package/dist/src/session/parity/sessions-json-file.js +1 -1
- package/dist/src/session/parity/transcript-file-lock.js +2 -2
- package/dist/src/session/parity/transcript-paths.js +1 -1
- package/dist/src/session/search-index-cache.js +1 -1
- package/dist/src/session/search-index.js +1 -1
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/session/store.js +5 -5
- package/dist/src/share/share-rate-limit.d.ts +10 -2
- package/dist/src/share/share-rate-limit.js +33 -42
- package/dist/src/share/share-rate-limit.js.map +1 -1
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/tui/backends/embedded-backend.js +16 -12
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +2 -2
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/format-tui-hotkeys.js +1 -1
- 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 +1 -1
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js +1 -1
- package/dist/src/tui/tui.js +1 -2
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +0 -1
- package/dist/src/tui/xopc-tui-keybindings.js +1 -2
- package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.js +2 -2
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/pairing-rate-limit.d.ts +10 -2
- package/dist/src/tunnel/pairing-rate-limit.js +19 -15
- package/dist/src/tunnel/pairing-rate-limit.js.map +1 -1
- package/dist/src/tunnel/tunnel-rate-limit.d.ts +6 -3
- package/dist/src/tunnel/tunnel-rate-limit.js +11 -22
- package/dist/src/tunnel/tunnel-rate-limit.js.map +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/factory.js +1 -1
- package/dist/src/voice/tts/index.js +2 -2
- package/dist/src/voice/tts/merge-config.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +1 -1
- package/dist/src/voice/tts/service.js +1 -1
- package/dist/src/voice/tts/service.js.map +1 -1
- package/dist/src/voice/tts/speak-core.js +1 -1
- package/package.json +10 -5
- package/dist/gateway/static/root/assets/agents-Cqh1ts38.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-wTiWStg9.js +0 -1
- package/dist/gateway/static/root/assets/fetch-BAAh_kXG.js +0 -3
- package/dist/gateway/static/root/assets/index-C8yHX-AA.css +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BeiFm0Ms.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-RPAz_Wg_.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-Wu4aNWDx.js +0 -2
- package/dist/gateway/static/root/assets/voice-api-key-field-BxIGhhEL.js +0 -1
- package/dist/src/agent/embedded/session-raw-append-message.d.ts +0 -11
- package/dist/src/agent/embedded/session-raw-append-message.js +0 -15
- package/dist/src/agent/embedded/session-raw-append-message.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.d.ts +0 -15
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js +0 -24
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-state.d.ts +0 -17
- package/dist/src/agent/embedded/session-tool-result-state.js +0 -26
- package/dist/src/agent/embedded/session-tool-result-state.js.map +0 -1
- package/dist/src/daemon/launchd-restart-handoff.d.ts +0 -25
- package/dist/src/daemon/launchd-restart-handoff.js +0 -132
- package/dist/src/daemon/launchd-restart-handoff.js.map +0 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +0 -71
- package/dist/src/gateway/auth-rate-limit.js +0 -192
- package/dist/src/gateway/auth-rate-limit.js.map +0 -1
- package/dist/src/gateway/restart-handler.d.ts +0 -14
- package/dist/src/gateway/restart-handler.js +0 -64
- package/dist/src/gateway/restart-handler.js.map +0 -1
- package/dist/src/gateway/security/flood-guard.d.ts +0 -28
- package/dist/src/gateway/security/flood-guard.js +0 -42
- package/dist/src/gateway/security/flood-guard.js.map +0 -1
- package/dist/src/infra/rate-limit.d.ts +0 -38
- package/dist/src/infra/rate-limit.js +0 -60
- package/dist/src/infra/rate-limit.js.map +0 -1
- package/dist/src/infra/restart-intent.d.ts +0 -13
- package/dist/src/infra/restart-intent.js +0 -40
- package/dist/src/infra/restart-intent.js.map +0 -1
- package/dist/src/infra/restart-sentinel.d.ts +0 -23
- package/dist/src/infra/restart-sentinel.js +0 -75
- package/dist/src/infra/restart-sentinel.js.map +0 -1
- package/skills/creative/canvas-design/LICENSE.txt +0 -202
- package/skills/creative/canvas-design/SKILL-zh.md +0 -130
- package/skills/creative/canvas-design/SKILL.md +0 -130
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { guardSessionManager } from "./session-tool-result-guard
|
|
3
|
+
import { guardSessionManager } from "./session-tool-result-guard.js";
|
|
4
4
|
import { prepareSessionManagerForRun } from "./session-manager-init.js";
|
|
5
|
-
import {
|
|
5
|
+
import { defaultSessionManagerCache } from "./session-manager-cache.js";
|
|
6
6
|
import { applyXopcProviderApiKey, createEmbeddedAuthStorage } from "./xopc-auth-storage.js";
|
|
7
7
|
import { wrapStreamFnForXopcExtensions } from "./xopc-stream-bridge.js";
|
|
8
8
|
import { xopcToolsToDefinitions } from "./xopc-tools-bridge.js";
|
|
@@ -25,13 +25,6 @@ function buildEmbeddedRunnerFingerprint(input) {
|
|
|
25
25
|
input.thinkingLevel
|
|
26
26
|
].join("");
|
|
27
27
|
}
|
|
28
|
-
const pool = /* @__PURE__ */ new Map();
|
|
29
|
-
let stats = {
|
|
30
|
-
acquires: 0,
|
|
31
|
-
reuses: 0,
|
|
32
|
-
creates: 0,
|
|
33
|
-
evictions: 0
|
|
34
|
-
};
|
|
35
28
|
function isEmbeddedSessionRunnerEnabled() {
|
|
36
29
|
const raw = process.env.XOPC_SESSION_RUNNER?.trim().toLowerCase();
|
|
37
30
|
if (raw === "0" || raw === "false" || raw === "off") return false;
|
|
@@ -43,163 +36,201 @@ function getEmbeddedSessionRunnerIdleTtlMs() {
|
|
|
43
36
|
const parsed = Number.parseInt(raw, 10);
|
|
44
37
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_IDLE_TTL_MS;
|
|
45
38
|
}
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
};
|
|
39
|
+
function createEmbeddedSettingsManager(cwd) {
|
|
40
|
+
const sm = SettingsManager.inMemory({ compaction: { enabled: false } });
|
|
41
|
+
sm.setCompactionEnabled(false);
|
|
42
|
+
return sm;
|
|
51
43
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Owns the per-session pool of pi `AgentSession` runners. The class is the supported,
|
|
46
|
+
* injectable owner; {@link defaultEmbeddedSessionRunnerPool} keeps the historic
|
|
47
|
+
* module-level free functions working until every caller is migrated to DI.
|
|
48
|
+
*/
|
|
49
|
+
var EmbeddedSessionRunnerPool = class {
|
|
50
|
+
pool = /* @__PURE__ */ new Map();
|
|
51
|
+
cache;
|
|
52
|
+
isEnabledFn;
|
|
53
|
+
getIdleTtlMsFn;
|
|
55
54
|
stats = {
|
|
56
55
|
acquires: 0,
|
|
57
56
|
reuses: 0,
|
|
58
57
|
creates: 0,
|
|
59
58
|
evictions: 0
|
|
60
59
|
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
entry.idleTimer = null;
|
|
60
|
+
constructor(opts = {}) {
|
|
61
|
+
this.cache = opts.sessionManagerCache ?? defaultSessionManagerCache;
|
|
62
|
+
this.isEnabledFn = opts.isEnabled ?? isEmbeddedSessionRunnerEnabled;
|
|
63
|
+
this.getIdleTtlMsFn = opts.getIdleTtlMs ?? getEmbeddedSessionRunnerIdleTtlMs;
|
|
66
64
|
}
|
|
65
|
+
getStats() {
|
|
66
|
+
return {
|
|
67
|
+
...this.stats,
|
|
68
|
+
pooled: this.pool.size
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
resetForTest() {
|
|
72
|
+
for (const entry of this.pool.values()) this.clearIdleTimer(entry);
|
|
73
|
+
this.pool.clear();
|
|
74
|
+
this.stats = {
|
|
75
|
+
acquires: 0,
|
|
76
|
+
reuses: 0,
|
|
77
|
+
creates: 0,
|
|
78
|
+
evictions: 0
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
evict(sessionKey, reason = "explicit") {
|
|
82
|
+
const entry = this.pool.get(sessionKey);
|
|
83
|
+
if (!entry) return;
|
|
84
|
+
this.disposePooledRunner(sessionKey, entry, reason);
|
|
85
|
+
}
|
|
86
|
+
evictAll(reason = "dispose_all") {
|
|
87
|
+
for (const sessionKey of [...this.pool.keys()]) this.evict(sessionKey, reason);
|
|
88
|
+
}
|
|
89
|
+
async acquire(params) {
|
|
90
|
+
this.stats.acquires += 1;
|
|
91
|
+
const fingerprint = buildEmbeddedRunnerFingerprint({
|
|
92
|
+
sessionFile: params.sessionFile,
|
|
93
|
+
workspaceDir: params.workspaceDir,
|
|
94
|
+
modelRef: params.modelRef,
|
|
95
|
+
toolNames: params.tools.map((t) => t.name),
|
|
96
|
+
systemPrompt: params.systemPrompt,
|
|
97
|
+
thinkingLevel: params.thinkingLevel ?? "medium"
|
|
98
|
+
});
|
|
99
|
+
const reuseEnabled = this.isEnabledFn();
|
|
100
|
+
const existing = this.pool.get(params.sessionKey);
|
|
101
|
+
let entry;
|
|
102
|
+
let reused = false;
|
|
103
|
+
if (reuseEnabled && existing && existing.fingerprint === fingerprint) {
|
|
104
|
+
this.clearIdleTimer(existing);
|
|
105
|
+
entry = existing;
|
|
106
|
+
entry.lastUsedAt = Date.now();
|
|
107
|
+
reused = true;
|
|
108
|
+
this.stats.reuses += 1;
|
|
109
|
+
applySystemPromptOverrideToSession(entry.session, params.systemPrompt);
|
|
110
|
+
entry.session.agent.streamFn = entry.baseStreamFn;
|
|
111
|
+
log.debug({ sessionKey: params.sessionKey }, "Reusing pooled embedded session runner");
|
|
112
|
+
} else {
|
|
113
|
+
if (existing) this.disposePooledRunner(params.sessionKey, existing, "fingerprint_mismatch");
|
|
114
|
+
entry = await this.createPooledRunner(params);
|
|
115
|
+
this.pool.set(params.sessionKey, entry);
|
|
116
|
+
this.stats.creates += 1;
|
|
117
|
+
log.debug({ sessionKey: params.sessionKey }, "Created embedded session runner");
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
session: entry.session,
|
|
121
|
+
piSm: entry.piSm,
|
|
122
|
+
reused,
|
|
123
|
+
release: () => {
|
|
124
|
+
if (!this.isEnabledFn()) {
|
|
125
|
+
this.disposePooledRunner(params.sessionKey, entry, "runner_disabled");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
entry.lastUsedAt = Date.now();
|
|
129
|
+
this.scheduleIdleEviction(params.sessionKey, entry);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
clearIdleTimer(entry) {
|
|
134
|
+
if (entry.idleTimer) {
|
|
135
|
+
clearTimeout(entry.idleTimer);
|
|
136
|
+
entry.idleTimer = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
scheduleIdleEviction(sessionKey, entry) {
|
|
140
|
+
this.clearIdleTimer(entry);
|
|
141
|
+
const ttlMs = this.getIdleTtlMsFn();
|
|
142
|
+
entry.idleTimer = setTimeout(() => {
|
|
143
|
+
if (this.pool.get(sessionKey) === entry) this.disposePooledRunner(sessionKey, entry, "idle_ttl");
|
|
144
|
+
}, ttlMs);
|
|
145
|
+
entry.idleTimer.unref?.();
|
|
146
|
+
}
|
|
147
|
+
disposePooledRunner(sessionKey, entry, reason) {
|
|
148
|
+
this.clearIdleTimer(entry);
|
|
149
|
+
this.pool.delete(sessionKey);
|
|
150
|
+
this.stats.evictions += 1;
|
|
151
|
+
try {
|
|
152
|
+
entry.piSm.flushPendingToolResults?.();
|
|
153
|
+
} catch {}
|
|
154
|
+
log.debug({
|
|
155
|
+
sessionKey,
|
|
156
|
+
reason
|
|
157
|
+
}, "Embedded session runner evicted");
|
|
158
|
+
}
|
|
159
|
+
async createPooledRunner(params) {
|
|
160
|
+
const { sessionKey, sessionId, sessionFile, sessionsDir, hadSessionFile, workspaceDir, model, thinkingLevel, tools, systemPrompt } = params;
|
|
161
|
+
await this.cache.prewarm(sessionFile);
|
|
162
|
+
const settingsManager = createEmbeddedSettingsManager(workspaceDir);
|
|
163
|
+
const piSm = guardSessionManager(SessionManager.open(sessionFile, sessionsDir, workspaceDir), {
|
|
164
|
+
sessionKey,
|
|
165
|
+
contextWindowTokens: model.contextWindow ?? 128e3
|
|
166
|
+
});
|
|
167
|
+
await prepareSessionManagerForRun({
|
|
168
|
+
sessionManager: piSm,
|
|
169
|
+
sessionFile,
|
|
170
|
+
hadSessionFile,
|
|
171
|
+
sessionId,
|
|
172
|
+
cwd: workspaceDir
|
|
173
|
+
});
|
|
174
|
+
const toolDefs = xopcToolsToDefinitions(tools);
|
|
175
|
+
const toolNames = tools.map((t) => t.name);
|
|
176
|
+
const authStorage = createEmbeddedAuthStorage();
|
|
177
|
+
applyXopcProviderApiKey(authStorage, model.provider);
|
|
178
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
179
|
+
cwd: workspaceDir,
|
|
180
|
+
agentDir: getAgentDir(),
|
|
181
|
+
settingsManager,
|
|
182
|
+
noContextFiles: true
|
|
183
|
+
});
|
|
184
|
+
await resourceLoader.reload();
|
|
185
|
+
const { session } = await createAgentSession({
|
|
186
|
+
cwd: workspaceDir,
|
|
187
|
+
model,
|
|
188
|
+
thinkingLevel: thinkingLevel ?? "medium",
|
|
189
|
+
sessionManager: piSm,
|
|
190
|
+
settingsManager,
|
|
191
|
+
authStorage,
|
|
192
|
+
resourceLoader,
|
|
193
|
+
noTools: "builtin",
|
|
194
|
+
customTools: toolDefs,
|
|
195
|
+
tools: toolNames
|
|
196
|
+
});
|
|
197
|
+
applySystemPromptOverrideToSession(session, systemPrompt);
|
|
198
|
+
const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFn);
|
|
199
|
+
session.agent.streamFn = baseStreamFn;
|
|
200
|
+
return {
|
|
201
|
+
sessionKey,
|
|
202
|
+
fingerprint: buildEmbeddedRunnerFingerprint({
|
|
203
|
+
sessionFile,
|
|
204
|
+
workspaceDir,
|
|
205
|
+
modelRef: params.modelRef,
|
|
206
|
+
toolNames,
|
|
207
|
+
systemPrompt,
|
|
208
|
+
thinkingLevel: thinkingLevel ?? "medium"
|
|
209
|
+
}),
|
|
210
|
+
session,
|
|
211
|
+
piSm,
|
|
212
|
+
settingsManager,
|
|
213
|
+
baseStreamFn,
|
|
214
|
+
lastUsedAt: Date.now(),
|
|
215
|
+
idleTimer: null
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const defaultEmbeddedSessionRunnerPool = new EmbeddedSessionRunnerPool();
|
|
220
|
+
function getEmbeddedSessionRunnerStats() {
|
|
221
|
+
return defaultEmbeddedSessionRunnerPool.getStats();
|
|
67
222
|
}
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
const ttlMs = getEmbeddedSessionRunnerIdleTtlMs();
|
|
71
|
-
entry.idleTimer = setTimeout(() => {
|
|
72
|
-
if (pool.get(sessionKey) === entry) disposePooledRunner(sessionKey, entry, "idle_ttl");
|
|
73
|
-
}, ttlMs);
|
|
74
|
-
entry.idleTimer.unref?.();
|
|
75
|
-
}
|
|
76
|
-
function disposePooledRunner(sessionKey, entry, reason) {
|
|
77
|
-
clearIdleTimer(entry);
|
|
78
|
-
pool.delete(sessionKey);
|
|
79
|
-
stats.evictions += 1;
|
|
80
|
-
try {
|
|
81
|
-
entry.piSm.flushPendingToolResults?.();
|
|
82
|
-
} catch {}
|
|
83
|
-
log.debug({
|
|
84
|
-
sessionKey,
|
|
85
|
-
reason
|
|
86
|
-
}, "Embedded session runner evicted");
|
|
223
|
+
function resetEmbeddedSessionRunnerForTest() {
|
|
224
|
+
defaultEmbeddedSessionRunnerPool.resetForTest();
|
|
87
225
|
}
|
|
88
226
|
function evictEmbeddedSessionRunner(sessionKey, reason = "explicit") {
|
|
89
|
-
|
|
90
|
-
if (!entry) return;
|
|
91
|
-
disposePooledRunner(sessionKey, entry, reason);
|
|
227
|
+
defaultEmbeddedSessionRunnerPool.evict(sessionKey, reason);
|
|
92
228
|
}
|
|
93
229
|
function evictAllEmbeddedSessionRunners(reason = "dispose_all") {
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
function createEmbeddedSettingsManager(cwd) {
|
|
97
|
-
const sm = SettingsManager.inMemory({ compaction: { enabled: false } });
|
|
98
|
-
sm.setCompactionEnabled(false);
|
|
99
|
-
return sm;
|
|
230
|
+
defaultEmbeddedSessionRunnerPool.evictAll(reason);
|
|
100
231
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
await prewarmSessionFile(sessionFile);
|
|
104
|
-
const settingsManager = createEmbeddedSettingsManager(workspaceDir);
|
|
105
|
-
const piSm = guardSessionManager(SessionManager.open(sessionFile, sessionsDir, workspaceDir), {
|
|
106
|
-
sessionKey,
|
|
107
|
-
contextWindowTokens: model.contextWindow ?? 128e3
|
|
108
|
-
});
|
|
109
|
-
await prepareSessionManagerForRun({
|
|
110
|
-
sessionManager: piSm,
|
|
111
|
-
sessionFile,
|
|
112
|
-
hadSessionFile,
|
|
113
|
-
sessionId,
|
|
114
|
-
cwd: workspaceDir
|
|
115
|
-
});
|
|
116
|
-
const toolDefs = xopcToolsToDefinitions(tools);
|
|
117
|
-
const toolNames = tools.map((t) => t.name);
|
|
118
|
-
const authStorage = createEmbeddedAuthStorage();
|
|
119
|
-
applyXopcProviderApiKey(authStorage, model.provider);
|
|
120
|
-
const resourceLoader = new DefaultResourceLoader({
|
|
121
|
-
cwd: workspaceDir,
|
|
122
|
-
agentDir: getAgentDir(),
|
|
123
|
-
settingsManager,
|
|
124
|
-
noContextFiles: true
|
|
125
|
-
});
|
|
126
|
-
await resourceLoader.reload();
|
|
127
|
-
const { session } = await createAgentSession({
|
|
128
|
-
cwd: workspaceDir,
|
|
129
|
-
model,
|
|
130
|
-
thinkingLevel: thinkingLevel ?? "medium",
|
|
131
|
-
sessionManager: piSm,
|
|
132
|
-
settingsManager,
|
|
133
|
-
authStorage,
|
|
134
|
-
resourceLoader,
|
|
135
|
-
noTools: "builtin",
|
|
136
|
-
customTools: toolDefs,
|
|
137
|
-
tools: toolNames
|
|
138
|
-
});
|
|
139
|
-
applySystemPromptOverrideToSession(session, systemPrompt);
|
|
140
|
-
const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFn);
|
|
141
|
-
session.agent.streamFn = baseStreamFn;
|
|
142
|
-
return {
|
|
143
|
-
sessionKey,
|
|
144
|
-
fingerprint: buildEmbeddedRunnerFingerprint({
|
|
145
|
-
sessionFile,
|
|
146
|
-
workspaceDir,
|
|
147
|
-
modelRef: params.modelRef,
|
|
148
|
-
toolNames,
|
|
149
|
-
systemPrompt,
|
|
150
|
-
thinkingLevel: thinkingLevel ?? "medium"
|
|
151
|
-
}),
|
|
152
|
-
session,
|
|
153
|
-
piSm,
|
|
154
|
-
settingsManager,
|
|
155
|
-
baseStreamFn,
|
|
156
|
-
lastUsedAt: Date.now(),
|
|
157
|
-
idleTimer: null
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
async function acquireEmbeddedSessionRunner(params) {
|
|
161
|
-
stats.acquires += 1;
|
|
162
|
-
const fingerprint = buildEmbeddedRunnerFingerprint({
|
|
163
|
-
sessionFile: params.sessionFile,
|
|
164
|
-
workspaceDir: params.workspaceDir,
|
|
165
|
-
modelRef: params.modelRef,
|
|
166
|
-
toolNames: params.tools.map((t) => t.name),
|
|
167
|
-
systemPrompt: params.systemPrompt,
|
|
168
|
-
thinkingLevel: params.thinkingLevel ?? "medium"
|
|
169
|
-
});
|
|
170
|
-
const reuseEnabled = isEmbeddedSessionRunnerEnabled();
|
|
171
|
-
const existing = pool.get(params.sessionKey);
|
|
172
|
-
let entry;
|
|
173
|
-
let reused = false;
|
|
174
|
-
if (reuseEnabled && existing && existing.fingerprint === fingerprint) {
|
|
175
|
-
clearIdleTimer(existing);
|
|
176
|
-
entry = existing;
|
|
177
|
-
entry.lastUsedAt = Date.now();
|
|
178
|
-
reused = true;
|
|
179
|
-
stats.reuses += 1;
|
|
180
|
-
applySystemPromptOverrideToSession(entry.session, params.systemPrompt);
|
|
181
|
-
entry.session.agent.streamFn = entry.baseStreamFn;
|
|
182
|
-
log.debug({ sessionKey: params.sessionKey }, "Reusing pooled embedded session runner");
|
|
183
|
-
} else {
|
|
184
|
-
if (existing) disposePooledRunner(params.sessionKey, existing, "fingerprint_mismatch");
|
|
185
|
-
entry = await createPooledRunner(params);
|
|
186
|
-
pool.set(params.sessionKey, entry);
|
|
187
|
-
stats.creates += 1;
|
|
188
|
-
log.debug({ sessionKey: params.sessionKey }, "Created embedded session runner");
|
|
189
|
-
}
|
|
190
|
-
return {
|
|
191
|
-
session: entry.session,
|
|
192
|
-
piSm: entry.piSm,
|
|
193
|
-
reused,
|
|
194
|
-
release: () => {
|
|
195
|
-
if (!isEmbeddedSessionRunnerEnabled()) {
|
|
196
|
-
disposePooledRunner(params.sessionKey, entry, "runner_disabled");
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
entry.lastUsedAt = Date.now();
|
|
200
|
-
scheduleIdleEviction(params.sessionKey, entry);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
232
|
+
function acquireEmbeddedSessionRunner(params) {
|
|
233
|
+
return defaultEmbeddedSessionRunnerPool.acquire(params);
|
|
203
234
|
}
|
|
204
235
|
/** Resolve transcript path inputs used by both runner acquire and turn execution. */
|
|
205
236
|
async function resolveEmbeddedTranscriptInputs(sessionStore, sessionKey) {
|
|
@@ -212,6 +243,6 @@ async function resolveEmbeddedTranscriptInputs(sessionStore, sessionKey) {
|
|
|
212
243
|
};
|
|
213
244
|
}
|
|
214
245
|
//#endregion
|
|
215
|
-
export { acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest, resolveEmbeddedTranscriptInputs };
|
|
246
|
+
export { EmbeddedSessionRunnerPool, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, defaultEmbeddedSessionRunnerPool, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest, resolveEmbeddedTranscriptInputs };
|
|
216
247
|
|
|
217
248
|
//# sourceMappingURL=session-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-runner.js","names":[],"sources":["../../../../src/agent/embedded/session-runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { ThinkingLevel } from '@earendil-works/pi-agent-core';\nimport {\n createAgentSession,\n DefaultResourceLoader,\n getAgentDir,\n SessionManager,\n SettingsManager,\n type AgentSession,\n} from '@earendil-works/pi-coding-agent';\nimport type { Model, Api } from '@earendil-works/pi-ai';\n\nimport { createLogger } from '../../utils/logger.js';\nimport { guardSessionManager, type GuardedPiTranscriptManager } from './session-tool-result-guard-wrapper.js';\nimport { prepareSessionManagerForRun } from './session-manager-init.js';\nimport { prewarmSessionFile } from './session-manager-cache.js';\nimport { applyXopcProviderApiKey, createEmbeddedAuthStorage } from './xopc-auth-storage.js';\nimport { wrapStreamFnForXopcExtensions } from './xopc-stream-bridge.js';\nimport { xopcToolsToDefinitions } from './xopc-tools-bridge.js';\nimport { applySystemPromptOverrideToSession } from './system-prompt-override.js';\n\nconst log = createLogger('EmbeddedSessionRunner');\n\nconst DEFAULT_IDLE_TTL_MS = 5 * 60_000;\n\nexport type EmbeddedRunnerFingerprintInput = {\n sessionFile: string;\n workspaceDir: string;\n modelRef: string;\n toolNames: readonly string[];\n systemPrompt: string;\n thinkingLevel: string;\n};\n\nexport function buildEmbeddedRunnerFingerprint(input: EmbeddedRunnerFingerprintInput): string {\n const tools = [...input.toolNames].sort().join('\\0');\n const promptMarker = `${input.systemPrompt.length}:${input.systemPrompt.slice(0, 128)}`;\n return [\n input.sessionFile,\n input.workspaceDir,\n input.modelRef,\n tools,\n promptMarker,\n input.thinkingLevel,\n ].join('\\u001f');\n}\n\ntype PooledRunner = {\n sessionKey: string;\n fingerprint: string;\n session: AgentSession;\n piSm: GuardedPiTranscriptManager;\n settingsManager: SettingsManager;\n baseStreamFn: AgentSession['agent']['streamFn'];\n lastUsedAt: number;\n idleTimer: ReturnType<typeof setTimeout> | null;\n};\n\nexport type AcquireEmbeddedSessionRunnerParams = {\n sessionKey: string;\n sessionId: string;\n sessionFile: string;\n sessionsDir: string;\n hadSessionFile: boolean;\n workspaceDir: string;\n model: Model<Api>;\n modelRef: string;\n tools: AgentTool[];\n systemPrompt: string;\n thinkingLevel: ThinkingLevel;\n};\n\nexport type AcquiredEmbeddedSessionRunner = {\n session: AgentSession;\n piSm: GuardedPiTranscriptManager;\n reused: boolean;\n release: () => void;\n};\n\nconst pool = new Map<string, PooledRunner>();\n\nlet stats = {\n acquires: 0,\n reuses: 0,\n creates: 0,\n evictions: 0,\n};\n\nexport function isEmbeddedSessionRunnerEnabled(): boolean {\n const raw = process.env.XOPC_SESSION_RUNNER?.trim().toLowerCase();\n if (raw === '0' || raw === 'false' || raw === 'off') {\n return false;\n }\n return true;\n}\n\nexport function getEmbeddedSessionRunnerIdleTtlMs(): number {\n const raw = process.env.XOPC_SESSION_RUNNER_TTL_MS?.trim();\n if (!raw) {\n return DEFAULT_IDLE_TTL_MS;\n }\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_IDLE_TTL_MS;\n}\n\nexport function getEmbeddedSessionRunnerStats(): Readonly<typeof stats> & { pooled: number } {\n return { ...stats, pooled: pool.size };\n}\n\nexport function resetEmbeddedSessionRunnerForTest(): void {\n for (const entry of pool.values()) {\n clearIdleTimer(entry);\n }\n pool.clear();\n stats = { acquires: 0, reuses: 0, creates: 0, evictions: 0 };\n}\n\nfunction clearIdleTimer(entry: PooledRunner): void {\n if (entry.idleTimer) {\n clearTimeout(entry.idleTimer);\n entry.idleTimer = null;\n }\n}\n\nfunction scheduleIdleEviction(sessionKey: string, entry: PooledRunner): void {\n clearIdleTimer(entry);\n const ttlMs = getEmbeddedSessionRunnerIdleTtlMs();\n entry.idleTimer = setTimeout(() => {\n const current = pool.get(sessionKey);\n if (current === entry) {\n disposePooledRunner(sessionKey, entry, 'idle_ttl');\n }\n }, ttlMs);\n entry.idleTimer.unref?.();\n}\n\nfunction disposePooledRunner(sessionKey: string, entry: PooledRunner, reason: string): void {\n clearIdleTimer(entry);\n pool.delete(sessionKey);\n stats.evictions += 1;\n try {\n entry.piSm.flushPendingToolResults?.();\n } catch {\n /* ignore */\n }\n log.debug({ sessionKey, reason }, 'Embedded session runner evicted');\n}\n\nexport function evictEmbeddedSessionRunner(sessionKey: string, reason = 'explicit'): void {\n const entry = pool.get(sessionKey);\n if (!entry) {\n return;\n }\n disposePooledRunner(sessionKey, entry, reason);\n}\n\nexport function evictAllEmbeddedSessionRunners(reason = 'dispose_all'): void {\n for (const sessionKey of [...pool.keys()]) {\n evictEmbeddedSessionRunner(sessionKey, reason);\n }\n}\n\nfunction createEmbeddedSettingsManager(cwd: string): SettingsManager {\n const sm = SettingsManager.inMemory({ compaction: { enabled: false } });\n sm.setCompactionEnabled(false);\n void cwd;\n return sm;\n}\n\nasync function createPooledRunner(params: AcquireEmbeddedSessionRunnerParams): Promise<PooledRunner> {\n const {\n sessionKey,\n sessionId,\n sessionFile,\n sessionsDir,\n hadSessionFile,\n workspaceDir,\n model,\n thinkingLevel,\n tools,\n systemPrompt,\n } = params;\n\n await prewarmSessionFile(sessionFile);\n const settingsManager = createEmbeddedSettingsManager(workspaceDir);\n\n const piSm = guardSessionManager(SessionManager.open(sessionFile, sessionsDir, workspaceDir), {\n sessionKey,\n contextWindowTokens: model.contextWindow ?? 128_000,\n });\n\n await prepareSessionManagerForRun({\n sessionManager: piSm,\n sessionFile,\n hadSessionFile,\n sessionId,\n cwd: workspaceDir,\n });\n\n const toolDefs = xopcToolsToDefinitions(tools);\n const toolNames = tools.map((t) => t.name);\n\n const authStorage = createEmbeddedAuthStorage();\n applyXopcProviderApiKey(authStorage, model.provider);\n\n const resourceLoader = new DefaultResourceLoader({\n cwd: workspaceDir,\n agentDir: getAgentDir(),\n settingsManager,\n noContextFiles: true,\n });\n await resourceLoader.reload();\n\n const { session } = await createAgentSession({\n cwd: workspaceDir,\n model,\n thinkingLevel: thinkingLevel ?? 'medium',\n sessionManager: piSm,\n settingsManager,\n authStorage,\n resourceLoader,\n noTools: 'builtin',\n customTools: toolDefs,\n tools: toolNames,\n });\n\n applySystemPromptOverrideToSession(session, systemPrompt);\n const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFn);\n session.agent.streamFn = baseStreamFn;\n\n const fingerprint = buildEmbeddedRunnerFingerprint({\n sessionFile,\n workspaceDir,\n modelRef: params.modelRef,\n toolNames,\n systemPrompt,\n thinkingLevel: thinkingLevel ?? 'medium',\n });\n\n return {\n sessionKey,\n fingerprint,\n session,\n piSm,\n settingsManager,\n baseStreamFn,\n lastUsedAt: Date.now(),\n idleTimer: null,\n };\n}\n\nexport async function acquireEmbeddedSessionRunner(\n params: AcquireEmbeddedSessionRunnerParams,\n): Promise<AcquiredEmbeddedSessionRunner> {\n stats.acquires += 1;\n\n const fingerprint = buildEmbeddedRunnerFingerprint({\n sessionFile: params.sessionFile,\n workspaceDir: params.workspaceDir,\n modelRef: params.modelRef,\n toolNames: params.tools.map((t) => t.name),\n systemPrompt: params.systemPrompt,\n thinkingLevel: params.thinkingLevel ?? 'medium',\n });\n\n const reuseEnabled = isEmbeddedSessionRunnerEnabled();\n const existing = pool.get(params.sessionKey);\n\n let entry: PooledRunner;\n let reused = false;\n\n if (reuseEnabled && existing && existing.fingerprint === fingerprint) {\n clearIdleTimer(existing);\n entry = existing;\n entry.lastUsedAt = Date.now();\n reused = true;\n stats.reuses += 1;\n applySystemPromptOverrideToSession(entry.session, params.systemPrompt);\n entry.session.agent.streamFn = entry.baseStreamFn;\n log.debug({ sessionKey: params.sessionKey }, 'Reusing pooled embedded session runner');\n } else {\n if (existing) {\n disposePooledRunner(params.sessionKey, existing, 'fingerprint_mismatch');\n }\n entry = await createPooledRunner(params);\n pool.set(params.sessionKey, entry);\n stats.creates += 1;\n log.debug({ sessionKey: params.sessionKey }, 'Created embedded session runner');\n }\n\n return {\n session: entry.session,\n piSm: entry.piSm,\n reused,\n release: () => {\n if (!isEmbeddedSessionRunnerEnabled()) {\n disposePooledRunner(params.sessionKey, entry, 'runner_disabled');\n return;\n }\n entry.lastUsedAt = Date.now();\n scheduleIdleEviction(params.sessionKey, entry);\n },\n };\n}\n\n/** Resolve transcript path inputs used by both runner acquire and turn execution. */\nexport async function resolveEmbeddedTranscriptInputs(\n sessionStore: import('../../session/store.js').SessionStore,\n sessionKey: string,\n): Promise<{\n sessionId: string;\n sessionFile: string;\n sessionsDir: string;\n hadSessionFile: boolean;\n}> {\n const { sessionId, absPath: sessionFile, sessionsDir } = await sessionStore.resolveTranscriptPath(sessionKey);\n return {\n sessionId,\n sessionFile,\n sessionsDir,\n hadSessionFile: existsSync(sessionFile),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-runner.js","names":[],"sources":["../../../../src/agent/embedded/session-runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { ThinkingLevel } from '@earendil-works/pi-agent-core';\nimport {\n createAgentSession,\n DefaultResourceLoader,\n getAgentDir,\n SessionManager,\n SettingsManager,\n type AgentSession,\n} from '@earendil-works/pi-coding-agent';\nimport type { Model, Api } from '@earendil-works/pi-ai';\n\nimport { createLogger } from '../../utils/logger.js';\nimport { guardSessionManager, type GuardedPiTranscriptManager } from './session-tool-result-guard.js';\nimport { prepareSessionManagerForRun } from './session-manager-init.js';\nimport { defaultSessionManagerCache, type SessionManagerCache } from './session-manager-cache.js';\nimport { applyXopcProviderApiKey, createEmbeddedAuthStorage } from './xopc-auth-storage.js';\nimport { wrapStreamFnForXopcExtensions } from './xopc-stream-bridge.js';\nimport { xopcToolsToDefinitions } from './xopc-tools-bridge.js';\nimport { applySystemPromptOverrideToSession } from './system-prompt-override.js';\n\nconst log = createLogger('EmbeddedSessionRunner');\n\nconst DEFAULT_IDLE_TTL_MS = 5 * 60_000;\n\nexport type EmbeddedRunnerFingerprintInput = {\n sessionFile: string;\n workspaceDir: string;\n modelRef: string;\n toolNames: readonly string[];\n systemPrompt: string;\n thinkingLevel: string;\n};\n\nexport function buildEmbeddedRunnerFingerprint(input: EmbeddedRunnerFingerprintInput): string {\n const tools = [...input.toolNames].sort().join('\\0');\n const promptMarker = `${input.systemPrompt.length}:${input.systemPrompt.slice(0, 128)}`;\n return [\n input.sessionFile,\n input.workspaceDir,\n input.modelRef,\n tools,\n promptMarker,\n input.thinkingLevel,\n ].join('\u001f');\n}\n\ntype PooledRunner = {\n sessionKey: string;\n fingerprint: string;\n session: AgentSession;\n piSm: GuardedPiTranscriptManager;\n settingsManager: SettingsManager;\n baseStreamFn: AgentSession['agent']['streamFn'];\n lastUsedAt: number;\n idleTimer: ReturnType<typeof setTimeout> | null;\n};\n\nexport type AcquireEmbeddedSessionRunnerParams = {\n sessionKey: string;\n sessionId: string;\n sessionFile: string;\n sessionsDir: string;\n hadSessionFile: boolean;\n workspaceDir: string;\n model: Model<Api>;\n modelRef: string;\n tools: AgentTool[];\n systemPrompt: string;\n thinkingLevel: ThinkingLevel;\n};\n\nexport type AcquiredEmbeddedSessionRunner = {\n session: AgentSession;\n piSm: GuardedPiTranscriptManager;\n reused: boolean;\n release: () => void;\n};\n\nexport interface EmbeddedSessionRunnerPoolStats {\n acquires: number;\n reuses: number;\n creates: number;\n evictions: number;\n pooled: number;\n}\n\nexport function isEmbeddedSessionRunnerEnabled(): boolean {\n const raw = process.env.XOPC_SESSION_RUNNER?.trim().toLowerCase();\n if (raw === '0' || raw === 'false' || raw === 'off') {\n return false;\n }\n return true;\n}\n\nexport function getEmbeddedSessionRunnerIdleTtlMs(): number {\n const raw = process.env.XOPC_SESSION_RUNNER_TTL_MS?.trim();\n if (!raw) {\n return DEFAULT_IDLE_TTL_MS;\n }\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_IDLE_TTL_MS;\n}\n\nfunction createEmbeddedSettingsManager(cwd: string): SettingsManager {\n const sm = SettingsManager.inMemory({ compaction: { enabled: false } });\n sm.setCompactionEnabled(false);\n void cwd;\n return sm;\n}\n\nexport interface EmbeddedSessionRunnerPoolOptions {\n /** File-exists cache shared with prewarmSessionFile callers. */\n sessionManagerCache?: SessionManagerCache;\n /** Override for the env-driven enable flag (testing). */\n isEnabled?: () => boolean;\n /** Override for the env-driven idle TTL (testing). */\n getIdleTtlMs?: () => number;\n}\n\n/**\n * Owns the per-session pool of pi `AgentSession` runners. The class is the supported,\n * injectable owner; {@link defaultEmbeddedSessionRunnerPool} keeps the historic\n * module-level free functions working until every caller is migrated to DI.\n */\nexport class EmbeddedSessionRunnerPool {\n private readonly pool = new Map<string, PooledRunner>();\n private readonly cache: SessionManagerCache;\n private readonly isEnabledFn: () => boolean;\n private readonly getIdleTtlMsFn: () => number;\n\n private stats: Omit<EmbeddedSessionRunnerPoolStats, 'pooled'> = {\n acquires: 0,\n reuses: 0,\n creates: 0,\n evictions: 0,\n };\n\n constructor(opts: EmbeddedSessionRunnerPoolOptions = {}) {\n this.cache = opts.sessionManagerCache ?? defaultSessionManagerCache;\n this.isEnabledFn = opts.isEnabled ?? isEmbeddedSessionRunnerEnabled;\n this.getIdleTtlMsFn = opts.getIdleTtlMs ?? getEmbeddedSessionRunnerIdleTtlMs;\n }\n\n getStats(): Readonly<EmbeddedSessionRunnerPoolStats> {\n return { ...this.stats, pooled: this.pool.size };\n }\n\n resetForTest(): void {\n for (const entry of this.pool.values()) {\n this.clearIdleTimer(entry);\n }\n this.pool.clear();\n this.stats = { acquires: 0, reuses: 0, creates: 0, evictions: 0 };\n }\n\n evict(sessionKey: string, reason = 'explicit'): void {\n const entry = this.pool.get(sessionKey);\n if (!entry) {\n return;\n }\n this.disposePooledRunner(sessionKey, entry, reason);\n }\n\n evictAll(reason = 'dispose_all'): void {\n for (const sessionKey of [...this.pool.keys()]) {\n this.evict(sessionKey, reason);\n }\n }\n\n async acquire(params: AcquireEmbeddedSessionRunnerParams): Promise<AcquiredEmbeddedSessionRunner> {\n this.stats.acquires += 1;\n\n const fingerprint = buildEmbeddedRunnerFingerprint({\n sessionFile: params.sessionFile,\n workspaceDir: params.workspaceDir,\n modelRef: params.modelRef,\n toolNames: params.tools.map((t) => t.name),\n systemPrompt: params.systemPrompt,\n thinkingLevel: params.thinkingLevel ?? 'medium',\n });\n\n const reuseEnabled = this.isEnabledFn();\n const existing = this.pool.get(params.sessionKey);\n\n let entry: PooledRunner;\n let reused = false;\n\n if (reuseEnabled && existing && existing.fingerprint === fingerprint) {\n this.clearIdleTimer(existing);\n entry = existing;\n entry.lastUsedAt = Date.now();\n reused = true;\n this.stats.reuses += 1;\n applySystemPromptOverrideToSession(entry.session, params.systemPrompt);\n entry.session.agent.streamFn = entry.baseStreamFn;\n log.debug({ sessionKey: params.sessionKey }, 'Reusing pooled embedded session runner');\n } else {\n if (existing) {\n this.disposePooledRunner(params.sessionKey, existing, 'fingerprint_mismatch');\n }\n entry = await this.createPooledRunner(params);\n this.pool.set(params.sessionKey, entry);\n this.stats.creates += 1;\n log.debug({ sessionKey: params.sessionKey }, 'Created embedded session runner');\n }\n\n return {\n session: entry.session,\n piSm: entry.piSm,\n reused,\n release: () => {\n if (!this.isEnabledFn()) {\n this.disposePooledRunner(params.sessionKey, entry, 'runner_disabled');\n return;\n }\n entry.lastUsedAt = Date.now();\n this.scheduleIdleEviction(params.sessionKey, entry);\n },\n };\n }\n\n private clearIdleTimer(entry: PooledRunner): void {\n if (entry.idleTimer) {\n clearTimeout(entry.idleTimer);\n entry.idleTimer = null;\n }\n }\n\n private scheduleIdleEviction(sessionKey: string, entry: PooledRunner): void {\n this.clearIdleTimer(entry);\n const ttlMs = this.getIdleTtlMsFn();\n entry.idleTimer = setTimeout(() => {\n const current = this.pool.get(sessionKey);\n if (current === entry) {\n this.disposePooledRunner(sessionKey, entry, 'idle_ttl');\n }\n }, ttlMs);\n entry.idleTimer.unref?.();\n }\n\n private disposePooledRunner(sessionKey: string, entry: PooledRunner, reason: string): void {\n this.clearIdleTimer(entry);\n this.pool.delete(sessionKey);\n this.stats.evictions += 1;\n try {\n entry.piSm.flushPendingToolResults?.();\n } catch {\n /* ignore */\n }\n log.debug({ sessionKey, reason }, 'Embedded session runner evicted');\n }\n\n private async createPooledRunner(params: AcquireEmbeddedSessionRunnerParams): Promise<PooledRunner> {\n const {\n sessionKey,\n sessionId,\n sessionFile,\n sessionsDir,\n hadSessionFile,\n workspaceDir,\n model,\n thinkingLevel,\n tools,\n systemPrompt,\n } = params;\n\n await this.cache.prewarm(sessionFile);\n const settingsManager = createEmbeddedSettingsManager(workspaceDir);\n\n const piSm = guardSessionManager(SessionManager.open(sessionFile, sessionsDir, workspaceDir), {\n sessionKey,\n contextWindowTokens: model.contextWindow ?? 128_000,\n });\n\n await prepareSessionManagerForRun({\n sessionManager: piSm,\n sessionFile,\n hadSessionFile,\n sessionId,\n cwd: workspaceDir,\n });\n\n const toolDefs = xopcToolsToDefinitions(tools);\n const toolNames = tools.map((t) => t.name);\n\n const authStorage = createEmbeddedAuthStorage();\n applyXopcProviderApiKey(authStorage, model.provider);\n\n const resourceLoader = new DefaultResourceLoader({\n cwd: workspaceDir,\n agentDir: getAgentDir(),\n settingsManager,\n noContextFiles: true,\n });\n await resourceLoader.reload();\n\n const { session } = await createAgentSession({\n cwd: workspaceDir,\n model,\n thinkingLevel: thinkingLevel ?? 'medium',\n sessionManager: piSm,\n settingsManager,\n authStorage,\n resourceLoader,\n noTools: 'builtin',\n customTools: toolDefs,\n tools: toolNames,\n });\n\n applySystemPromptOverrideToSession(session, systemPrompt);\n const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFn);\n session.agent.streamFn = baseStreamFn;\n\n const fingerprint = buildEmbeddedRunnerFingerprint({\n sessionFile,\n workspaceDir,\n modelRef: params.modelRef,\n toolNames,\n systemPrompt,\n thinkingLevel: thinkingLevel ?? 'medium',\n });\n\n return {\n sessionKey,\n fingerprint,\n session,\n piSm,\n settingsManager,\n baseStreamFn,\n lastUsedAt: Date.now(),\n idleTimer: null,\n };\n }\n}\n\nexport const defaultEmbeddedSessionRunnerPool = new EmbeddedSessionRunnerPool();\n\nexport function getEmbeddedSessionRunnerStats(): Readonly<EmbeddedSessionRunnerPoolStats> {\n return defaultEmbeddedSessionRunnerPool.getStats();\n}\n\nexport function resetEmbeddedSessionRunnerForTest(): void {\n defaultEmbeddedSessionRunnerPool.resetForTest();\n}\n\nexport function evictEmbeddedSessionRunner(sessionKey: string, reason = 'explicit'): void {\n defaultEmbeddedSessionRunnerPool.evict(sessionKey, reason);\n}\n\nexport function evictAllEmbeddedSessionRunners(reason = 'dispose_all'): void {\n defaultEmbeddedSessionRunnerPool.evictAll(reason);\n}\n\nexport function acquireEmbeddedSessionRunner(\n params: AcquireEmbeddedSessionRunnerParams,\n): Promise<AcquiredEmbeddedSessionRunner> {\n return defaultEmbeddedSessionRunnerPool.acquire(params);\n}\n\n/** Resolve transcript path inputs used by both runner acquire and turn execution. */\nexport async function resolveEmbeddedTranscriptInputs(\n sessionStore: import('../../session/store.js').SessionStore,\n sessionKey: string,\n): Promise<{\n sessionId: string;\n sessionFile: string;\n sessionsDir: string;\n hadSessionFile: boolean;\n}> {\n const { sessionId, absPath: sessionFile, sessionsDir } = await sessionStore.resolveTranscriptPath(sessionKey);\n return {\n sessionId,\n sessionFile,\n sessionsDir,\n hadSessionFile: existsSync(sessionFile),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Session tool-result guard — wraps a pi `SessionManager.appendMessage` to:
|
|
3
|
+
* 1. cap oversized tool-result text + details so they cannot blow up the next
|
|
4
|
+
* LLM request (size + persistence limits).
|
|
5
|
+
* 2. track pending tool-call IDs so missing tool results can be synthesised
|
|
6
|
+
* (some providers refuse a turn that has an orphan tool_use block).
|
|
7
|
+
* 3. drop assistant `toolCall` blocks whose tool name is not in the allowlist
|
|
8
|
+
* (these would also trigger provider 400s).
|
|
9
|
+
* 4. broadcast `xopc:transcript-row` updates so the gateway UI can stream them.
|
|
10
|
+
*
|
|
11
|
+
* Previously this module shipped with three sibling files
|
|
12
|
+
* (`session-tool-result-state.ts`, `session-raw-append-message.ts`,
|
|
13
|
+
* `session-tool-result-guard-wrapper.ts`). They are now consolidated here as
|
|
14
|
+
* private constructs around the `ToolResultGuard` class. Pi-coding-agent owns
|
|
15
|
+
* the `SessionManager` instance and calls `appendMessage` from inside the
|
|
16
|
+
* runtime, so we still need to monkey-patch that method — but the patched
|
|
17
|
+
* implementation is just `guard.guardedAppend.bind(guard)` and all state lives
|
|
18
|
+
* on the class.
|
|
19
|
+
*/
|
|
20
|
+
import type { AgentMessage } from '@earendil-works/pi-agent-core';
|
|
21
|
+
import type { SessionManager } from '@earendil-works/pi-coding-agent';
|
|
22
|
+
import type { Config } from '../../config/schema.js';
|
|
3
23
|
export type BeforeMessageWriteHookEvent = {
|
|
4
24
|
message: AgentMessage;
|
|
5
25
|
};
|
|
@@ -7,14 +27,10 @@ export type BeforeMessageWriteHookResult = {
|
|
|
7
27
|
block?: boolean;
|
|
8
28
|
message?: AgentMessage;
|
|
9
29
|
} | undefined;
|
|
10
|
-
|
|
11
|
-
export { getRawSessionAppendMessage };
|
|
12
|
-
export declare function installSessionToolResultGuard(sessionManager: SessionManager, opts?: {
|
|
30
|
+
export interface ToolResultGuardOptions {
|
|
13
31
|
/** Optional session key for transcript update broadcasts. */
|
|
14
32
|
sessionKey?: string;
|
|
15
|
-
/**
|
|
16
|
-
* Optional transform applied to any message before persistence.
|
|
17
|
-
*/
|
|
33
|
+
/** Optional transform applied to any message before persistence. */
|
|
18
34
|
transformMessageForPersistence?: (message: AgentMessage) => AgentMessage;
|
|
19
35
|
/**
|
|
20
36
|
* Optional, synchronous transform applied to toolResult messages *before* they are
|
|
@@ -43,8 +59,40 @@ export declare function installSessionToolResultGuard(sessionManager: SessionMan
|
|
|
43
59
|
*/
|
|
44
60
|
beforeMessageWriteHook?: (event: BeforeMessageWriteHookEvent) => BeforeMessageWriteHookResult;
|
|
45
61
|
maxToolResultChars?: number;
|
|
46
|
-
}
|
|
62
|
+
}
|
|
63
|
+
export interface InstallSessionToolResultGuardResult {
|
|
47
64
|
flushPendingToolResults: () => void;
|
|
48
65
|
clearPendingToolResults: () => void;
|
|
49
66
|
getPendingIds: () => string[];
|
|
67
|
+
}
|
|
68
|
+
/** Idempotent wrapper that also adds the helper methods consumers expect. */
|
|
69
|
+
export type GuardedPiTranscriptManager = SessionManager & {
|
|
70
|
+
flushPendingToolResults?: () => void;
|
|
71
|
+
clearPendingToolResults?: () => void;
|
|
50
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Install the guard on a SessionManager and return its control API.
|
|
75
|
+
* Subsequent assistant/toolResult writes by pi-coding-agent flow through the
|
|
76
|
+
* guard transparently.
|
|
77
|
+
*/
|
|
78
|
+
export declare function installSessionToolResultGuard(sessionManager: SessionManager, opts?: ToolResultGuardOptions): InstallSessionToolResultGuardResult;
|
|
79
|
+
/**
|
|
80
|
+
* Convenience wrapper used by the embedded runner pool: install the guard
|
|
81
|
+
* (idempotent), pin the size cap from the model context window, and expose
|
|
82
|
+
* `flushPendingToolResults` / `clearPendingToolResults` directly on the
|
|
83
|
+
* SessionManager instance so callers do not need to keep the install result.
|
|
84
|
+
*/
|
|
85
|
+
export declare function guardSessionManager(sessionManager: SessionManager, opts?: {
|
|
86
|
+
agentId?: string;
|
|
87
|
+
sessionKey?: string;
|
|
88
|
+
config?: Config;
|
|
89
|
+
contextWindowTokens?: number;
|
|
90
|
+
allowSyntheticToolResults?: boolean;
|
|
91
|
+
missingToolResultText?: string;
|
|
92
|
+
allowedToolNames?: Iterable<string>;
|
|
93
|
+
}): GuardedPiTranscriptManager;
|
|
94
|
+
/**
|
|
95
|
+
* Recover the original (un-guarded) appendMessage for a session manager.
|
|
96
|
+
* Useful for callers that need a low-level "bypass the guard" write path.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getRawSessionAppendMessage(sessionManager: SessionManager): SessionManager['appendMessage'];
|