@0xmaxma/claude-gateway 1.8.14 → 2.0.1
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 +28 -1613
- package/config.template.json +7 -1
- package/dist/agent/runner.d.ts +419 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +736 -24
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/skill-learning/index.d.ts +6 -4
- package/dist/agent/skill-learning/index.d.ts.map +1 -1
- package/dist/agent/skill-learning/index.js +3 -3
- package/dist/agent/skill-learning/index.js.map +1 -1
- package/dist/agent/skill-learning/notifier.d.ts +3 -4
- package/dist/agent/skill-learning/notifier.d.ts.map +1 -1
- package/dist/agent/skill-learning/notifier.js +15 -13
- package/dist/agent/skill-learning/notifier.js.map +1 -1
- package/dist/agent/skill-learning/reviewer.d.ts.map +1 -1
- package/dist/agent/skill-learning/reviewer.js +3 -1
- package/dist/agent/skill-learning/reviewer.js.map +1 -1
- package/dist/api/connectors-router.d.ts.map +1 -1
- package/dist/api/connectors-router.js +110 -4
- package/dist/api/connectors-router.js.map +1 -1
- package/dist/api/gateway-router.d.ts +1 -0
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +13 -1
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/line-webhook-router.d.ts +2 -2
- package/dist/api/line-webhook-router.d.ts.map +1 -1
- package/dist/api/line-webhook-router.js +264 -230
- package/dist/api/line-webhook-router.js.map +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +162 -10
- package/dist/api/router.js.map +1 -1
- package/dist/api/share-router.d.ts.map +1 -1
- package/dist/api/share-router.js +29 -10
- package/dist/api/share-router.js.map +1 -1
- package/dist/api/slack-client.d.ts +2 -0
- package/dist/api/slack-client.d.ts.map +1 -1
- package/dist/api/slack-client.js +6 -2
- package/dist/api/slack-client.js.map +1 -1
- package/dist/api/slack-webhook-router.d.ts +3 -0
- package/dist/api/slack-webhook-router.d.ts.map +1 -1
- package/dist/api/slack-webhook-router.js +226 -131
- package/dist/api/slack-webhook-router.js.map +1 -1
- package/dist/api/voice-router.d.ts +21 -0
- package/dist/api/voice-router.d.ts.map +1 -0
- package/dist/api/voice-router.js +372 -0
- package/dist/api/voice-router.js.map +1 -0
- package/dist/api/voice-settings-router.d.ts +5 -0
- package/dist/api/voice-settings-router.d.ts.map +1 -0
- package/dist/api/voice-settings-router.js +318 -0
- package/dist/api/voice-settings-router.js.map +1 -0
- package/dist/apps/agent-container-migration.d.ts +11 -0
- package/dist/apps/agent-container-migration.d.ts.map +1 -0
- package/dist/apps/agent-container-migration.js +85 -0
- package/dist/apps/agent-container-migration.js.map +1 -0
- package/dist/apps/installer.d.ts +1 -1
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +2 -1
- package/dist/apps/installer.js.map +1 -1
- package/dist/cli/commands/tasks.d.ts +5 -0
- package/dist/cli/commands/tasks.d.ts.map +1 -0
- package/dist/cli/commands/tasks.js +92 -0
- package/dist/cli/commands/tasks.js.map +1 -0
- package/dist/cli/http-client.d.ts +2 -0
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +8 -3
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/config-write-lock.d.ts +2 -0
- package/dist/config/config-write-lock.d.ts.map +1 -1
- package/dist/config/config-write-lock.js +5 -0
- package/dist/config/config-write-lock.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +87 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/config/migrator.d.ts.map +1 -1
- package/dist/config/migrator.js +12 -1
- package/dist/config/migrator.js.map +1 -1
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +6 -0
- package/dist/config/watcher.js.map +1 -1
- package/dist/connectors/resolve.d.ts.map +1 -1
- package/dist/connectors/resolve.js +3 -1
- package/dist/connectors/resolve.js.map +1 -1
- package/dist/connectors/types.d.ts +8 -0
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/cron/manager.d.ts.map +1 -1
- package/dist/cron/manager.js +21 -2
- package/dist/cron/manager.js.map +1 -1
- package/dist/discord/receiver.d.ts +2 -1
- package/dist/discord/receiver.d.ts.map +1 -1
- package/dist/discord/receiver.js +5 -1
- package/dist/discord/receiver.js.map +1 -1
- package/dist/history/db.d.ts +3 -0
- package/dist/history/db.d.ts.map +1 -1
- package/dist/history/db.js +21 -1
- package/dist/history/db.js.map +1 -1
- package/dist/history/types.d.ts +2 -0
- package/dist/history/types.d.ts.map +1 -1
- package/dist/index.js +48 -9
- package/dist/index.js.map +1 -1
- package/dist/orchestration/bounded-queue.d.ts +15 -0
- package/dist/orchestration/bounded-queue.d.ts.map +1 -0
- package/dist/orchestration/bounded-queue.js +58 -0
- package/dist/orchestration/bounded-queue.js.map +1 -0
- package/dist/orchestration/bridge.d.ts +55 -0
- package/dist/orchestration/bridge.d.ts.map +1 -0
- package/dist/orchestration/bridge.js +234 -0
- package/dist/orchestration/bridge.js.map +1 -0
- package/dist/orchestration/browser-routing.d.ts +7 -0
- package/dist/orchestration/browser-routing.d.ts.map +1 -0
- package/dist/orchestration/browser-routing.js +22 -0
- package/dist/orchestration/browser-routing.js.map +1 -0
- package/dist/orchestration/capabilities.d.ts +49 -0
- package/dist/orchestration/capabilities.d.ts.map +1 -0
- package/dist/orchestration/capabilities.js +417 -0
- package/dist/orchestration/capabilities.js.map +1 -0
- package/dist/orchestration/capacity.d.ts +14 -0
- package/dist/orchestration/capacity.d.ts.map +1 -0
- package/dist/orchestration/capacity.js +52 -0
- package/dist/orchestration/capacity.js.map +1 -0
- package/dist/orchestration/channel-activity.d.ts +21 -0
- package/dist/orchestration/channel-activity.d.ts.map +1 -0
- package/dist/orchestration/channel-activity.js +72 -0
- package/dist/orchestration/channel-activity.js.map +1 -0
- package/dist/orchestration/channel-controls.d.ts +32 -0
- package/dist/orchestration/channel-controls.d.ts.map +1 -0
- package/dist/orchestration/channel-controls.js +105 -0
- package/dist/orchestration/channel-controls.js.map +1 -0
- package/dist/orchestration/channel-input-media.d.ts +11 -0
- package/dist/orchestration/channel-input-media.d.ts.map +1 -0
- package/dist/orchestration/channel-input-media.js +54 -0
- package/dist/orchestration/channel-input-media.js.map +1 -0
- package/dist/orchestration/channel-media.d.ts +4 -0
- package/dist/orchestration/channel-media.d.ts.map +1 -0
- package/dist/orchestration/channel-media.js +70 -0
- package/dist/orchestration/channel-media.js.map +1 -0
- package/dist/orchestration/channel-speech.d.ts +7 -0
- package/dist/orchestration/channel-speech.d.ts.map +1 -0
- package/dist/orchestration/channel-speech.js +65 -0
- package/dist/orchestration/channel-speech.js.map +1 -0
- package/dist/orchestration/cli-skills.d.ts +12 -0
- package/dist/orchestration/cli-skills.d.ts.map +1 -0
- package/dist/orchestration/cli-skills.js +132 -0
- package/dist/orchestration/cli-skills.js.map +1 -0
- package/dist/orchestration/config.d.ts +260 -0
- package/dist/orchestration/config.d.ts.map +1 -0
- package/dist/orchestration/config.js +110 -0
- package/dist/orchestration/config.js.map +1 -0
- package/dist/orchestration/container.d.ts +21 -0
- package/dist/orchestration/container.d.ts.map +1 -0
- package/dist/orchestration/container.js +195 -0
- package/dist/orchestration/container.js.map +1 -0
- package/dist/orchestration/control-delivery.d.ts +5 -0
- package/dist/orchestration/control-delivery.d.ts.map +1 -0
- package/dist/orchestration/control-delivery.js +50 -0
- package/dist/orchestration/control-delivery.js.map +1 -0
- package/dist/orchestration/conversation-intake.d.ts +32 -0
- package/dist/orchestration/conversation-intake.d.ts.map +1 -0
- package/dist/orchestration/conversation-intake.js +92 -0
- package/dist/orchestration/conversation-intake.js.map +1 -0
- package/dist/orchestration/decisions.d.ts +27 -0
- package/dist/orchestration/decisions.d.ts.map +1 -0
- package/dist/orchestration/decisions.js +151 -0
- package/dist/orchestration/decisions.js.map +1 -0
- package/dist/orchestration/delivery.d.ts +34 -0
- package/dist/orchestration/delivery.d.ts.map +1 -0
- package/dist/orchestration/delivery.js +235 -0
- package/dist/orchestration/delivery.js.map +1 -0
- package/dist/orchestration/display-stream.d.ts +4 -0
- package/dist/orchestration/display-stream.d.ts.map +1 -0
- package/dist/orchestration/display-stream.js +77 -0
- package/dist/orchestration/display-stream.js.map +1 -0
- package/dist/orchestration/events.d.ts +30 -0
- package/dist/orchestration/events.d.ts.map +1 -0
- package/dist/orchestration/events.js +65 -0
- package/dist/orchestration/events.js.map +1 -0
- package/dist/orchestration/execution-observation.d.ts +38 -0
- package/dist/orchestration/execution-observation.d.ts.map +1 -0
- package/dist/orchestration/execution-observation.js +25 -0
- package/dist/orchestration/execution-observation.js.map +1 -0
- package/dist/orchestration/file-delivery.d.ts +16 -0
- package/dist/orchestration/file-delivery.d.ts.map +1 -0
- package/dist/orchestration/file-delivery.js +139 -0
- package/dist/orchestration/file-delivery.js.map +1 -0
- package/dist/orchestration/gateway-config.d.ts +17 -0
- package/dist/orchestration/gateway-config.d.ts.map +1 -0
- package/dist/orchestration/gateway-config.js +128 -0
- package/dist/orchestration/gateway-config.js.map +1 -0
- package/dist/orchestration/history.d.ts +13 -0
- package/dist/orchestration/history.d.ts.map +1 -0
- package/dist/orchestration/history.js +48 -0
- package/dist/orchestration/history.js.map +1 -0
- package/dist/orchestration/identity.d.ts +6 -0
- package/dist/orchestration/identity.d.ts.map +1 -0
- package/dist/orchestration/identity.js +13 -0
- package/dist/orchestration/identity.js.map +1 -0
- package/dist/orchestration/inference-errors.d.ts +3 -0
- package/dist/orchestration/inference-errors.d.ts.map +1 -0
- package/dist/orchestration/inference-errors.js +16 -0
- package/dist/orchestration/inference-errors.js.map +1 -0
- package/dist/orchestration/input-images.d.ts +12 -0
- package/dist/orchestration/input-images.d.ts.map +1 -0
- package/dist/orchestration/input-images.js +66 -0
- package/dist/orchestration/input-images.js.map +1 -0
- package/dist/orchestration/instance-lock.d.ts +5 -0
- package/dist/orchestration/instance-lock.d.ts.map +1 -0
- package/dist/orchestration/instance-lock.js +33 -0
- package/dist/orchestration/instance-lock.js.map +1 -0
- package/dist/orchestration/line-loading.d.ts +21 -0
- package/dist/orchestration/line-loading.d.ts.map +1 -0
- package/dist/orchestration/line-loading.js +89 -0
- package/dist/orchestration/line-loading.js.map +1 -0
- package/dist/orchestration/media.d.ts +3 -0
- package/dist/orchestration/media.d.ts.map +1 -0
- package/dist/orchestration/media.js +46 -0
- package/dist/orchestration/media.js.map +1 -0
- package/dist/orchestration/migrations/schema.d.ts +3 -0
- package/dist/orchestration/migrations/schema.d.ts.map +1 -0
- package/dist/orchestration/migrations/schema.js +80 -0
- package/dist/orchestration/migrations/schema.js.map +1 -0
- package/dist/orchestration/notification-mailbox.d.ts +5 -0
- package/dist/orchestration/notification-mailbox.d.ts.map +1 -0
- package/dist/orchestration/notification-mailbox.js +29 -0
- package/dist/orchestration/notification-mailbox.js.map +1 -0
- package/dist/orchestration/process-activity.d.ts +23 -0
- package/dist/orchestration/process-activity.d.ts.map +1 -0
- package/dist/orchestration/process-activity.js +95 -0
- package/dist/orchestration/process-activity.js.map +1 -0
- package/dist/orchestration/process-supervisor.d.ts +15 -0
- package/dist/orchestration/process-supervisor.d.ts.map +1 -0
- package/dist/orchestration/process-supervisor.js +92 -0
- package/dist/orchestration/process-supervisor.js.map +1 -0
- package/dist/orchestration/process-turn.d.ts +35 -0
- package/dist/orchestration/process-turn.d.ts.map +1 -0
- package/dist/orchestration/process-turn.js +246 -0
- package/dist/orchestration/process-turn.js.map +1 -0
- package/dist/orchestration/progress-review.d.ts +28 -0
- package/dist/orchestration/progress-review.d.ts.map +1 -0
- package/dist/orchestration/progress-review.js +48 -0
- package/dist/orchestration/progress-review.js.map +1 -0
- package/dist/orchestration/recovery.d.ts +8 -0
- package/dist/orchestration/recovery.d.ts.map +1 -0
- package/dist/orchestration/recovery.js +35 -0
- package/dist/orchestration/recovery.js.map +1 -0
- package/dist/orchestration/reply-context.d.ts +7 -0
- package/dist/orchestration/reply-context.d.ts.map +1 -0
- package/dist/orchestration/reply-context.js +54 -0
- package/dist/orchestration/reply-context.js.map +1 -0
- package/dist/orchestration/runtime.d.ts +237 -0
- package/dist/orchestration/runtime.d.ts.map +1 -0
- package/dist/orchestration/runtime.js +1031 -0
- package/dist/orchestration/runtime.js.map +1 -0
- package/dist/orchestration/skills.d.ts +17 -0
- package/dist/orchestration/skills.d.ts.map +1 -0
- package/dist/orchestration/skills.js +32 -0
- package/dist/orchestration/skills.js.map +1 -0
- package/dist/orchestration/source-policy.d.ts +6 -0
- package/dist/orchestration/source-policy.d.ts.map +1 -0
- package/dist/orchestration/source-policy.js +16 -0
- package/dist/orchestration/source-policy.js.map +1 -0
- package/dist/orchestration/speech.d.ts +24 -0
- package/dist/orchestration/speech.d.ts.map +1 -0
- package/dist/orchestration/speech.js +61 -0
- package/dist/orchestration/speech.js.map +1 -0
- package/dist/orchestration/stop-controls.d.ts +30 -0
- package/dist/orchestration/stop-controls.d.ts.map +1 -0
- package/dist/orchestration/stop-controls.js +79 -0
- package/dist/orchestration/stop-controls.js.map +1 -0
- package/dist/orchestration/store.d.ts +92 -0
- package/dist/orchestration/store.d.ts.map +1 -0
- package/dist/orchestration/store.js +326 -0
- package/dist/orchestration/store.js.map +1 -0
- package/dist/orchestration/task-controls.d.ts +172 -0
- package/dist/orchestration/task-controls.d.ts.map +1 -0
- package/dist/orchestration/task-controls.js +59 -0
- package/dist/orchestration/task-controls.js.map +1 -0
- package/dist/orchestration/task-files.d.ts +29 -0
- package/dist/orchestration/task-files.d.ts.map +1 -0
- package/dist/orchestration/task-files.js +200 -0
- package/dist/orchestration/task-files.js.map +1 -0
- package/dist/orchestration/task-questions.d.ts +26 -0
- package/dist/orchestration/task-questions.d.ts.map +1 -0
- package/dist/orchestration/task-questions.js +160 -0
- package/dist/orchestration/task-questions.js.map +1 -0
- package/dist/orchestration/task-report.d.ts +7 -0
- package/dist/orchestration/task-report.d.ts.map +1 -0
- package/dist/orchestration/task-report.js +33 -0
- package/dist/orchestration/task-report.js.map +1 -0
- package/dist/orchestration/tasks/checkpoint-hook.d.ts +19 -0
- package/dist/orchestration/tasks/checkpoint-hook.d.ts.map +1 -0
- package/dist/orchestration/tasks/checkpoint-hook.js +49 -0
- package/dist/orchestration/tasks/checkpoint-hook.js.map +1 -0
- package/dist/orchestration/tasks/cleanup.d.ts +18 -0
- package/dist/orchestration/tasks/cleanup.d.ts.map +1 -0
- package/dist/orchestration/tasks/cleanup.js +113 -0
- package/dist/orchestration/tasks/cleanup.js.map +1 -0
- package/dist/orchestration/tasks/driver.d.ts +23 -0
- package/dist/orchestration/tasks/driver.d.ts.map +1 -0
- package/dist/orchestration/tasks/driver.js +209 -0
- package/dist/orchestration/tasks/driver.js.map +1 -0
- package/dist/orchestration/tasks/failure.d.ts +5 -0
- package/dist/orchestration/tasks/failure.d.ts.map +1 -0
- package/dist/orchestration/tasks/failure.js +17 -0
- package/dist/orchestration/tasks/failure.js.map +1 -0
- package/dist/orchestration/tasks/pool.d.ts +18 -0
- package/dist/orchestration/tasks/pool.d.ts.map +1 -0
- package/dist/orchestration/tasks/pool.js +73 -0
- package/dist/orchestration/tasks/pool.js.map +1 -0
- package/dist/orchestration/tasks/scheduler.d.ts +38 -0
- package/dist/orchestration/tasks/scheduler.d.ts.map +1 -0
- package/dist/orchestration/tasks/scheduler.js +160 -0
- package/dist/orchestration/tasks/scheduler.js.map +1 -0
- package/dist/orchestration/tasks/service.d.ts +114 -0
- package/dist/orchestration/tasks/service.d.ts.map +1 -0
- package/dist/orchestration/tasks/service.js +760 -0
- package/dist/orchestration/tasks/service.js.map +1 -0
- package/dist/orchestration/tasks/shared-workspace.d.ts +25 -0
- package/dist/orchestration/tasks/shared-workspace.d.ts.map +1 -0
- package/dist/orchestration/tasks/shared-workspace.js +162 -0
- package/dist/orchestration/tasks/shared-workspace.js.map +1 -0
- package/dist/orchestration/tasks/task-directive.d.ts +6 -0
- package/dist/orchestration/tasks/task-directive.d.ts.map +1 -0
- package/dist/orchestration/tasks/task-directive.js +41 -0
- package/dist/orchestration/tasks/task-directive.js.map +1 -0
- package/dist/orchestration/tasks/timing.d.ts +15 -0
- package/dist/orchestration/tasks/timing.d.ts.map +1 -0
- package/dist/orchestration/tasks/timing.js +48 -0
- package/dist/orchestration/tasks/timing.js.map +1 -0
- package/dist/orchestration/tasks/tool-repetition.d.ts +3 -0
- package/dist/orchestration/tasks/tool-repetition.d.ts.map +1 -0
- package/dist/orchestration/tasks/tool-repetition.js +30 -0
- package/dist/orchestration/tasks/tool-repetition.js.map +1 -0
- package/dist/orchestration/tasks/workspace.d.ts +24 -0
- package/dist/orchestration/tasks/workspace.d.ts.map +1 -0
- package/dist/orchestration/tasks/workspace.js +147 -0
- package/dist/orchestration/tasks/workspace.js.map +1 -0
- package/dist/orchestration/telegram-speech.d.ts +17 -0
- package/dist/orchestration/telegram-speech.d.ts.map +1 -0
- package/dist/orchestration/telegram-speech.js +55 -0
- package/dist/orchestration/telegram-speech.js.map +1 -0
- package/dist/orchestration/telegram-tool-status.d.ts +23 -0
- package/dist/orchestration/telegram-tool-status.d.ts.map +1 -0
- package/dist/orchestration/telegram-tool-status.js +207 -0
- package/dist/orchestration/telegram-tool-status.js.map +1 -0
- package/dist/orchestration/telegram-voices.d.ts +42 -0
- package/dist/orchestration/telegram-voices.d.ts.map +1 -0
- package/dist/orchestration/telegram-voices.js +70 -0
- package/dist/orchestration/telegram-voices.js.map +1 -0
- package/dist/orchestration/tool-activity.d.ts +10 -0
- package/dist/orchestration/tool-activity.d.ts.map +1 -0
- package/dist/orchestration/tool-activity.js +38 -0
- package/dist/orchestration/tool-activity.js.map +1 -0
- package/dist/orchestration/types.d.ts +177 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +13 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/orchestration/voice-reply-policy.d.ts +8 -0
- package/dist/orchestration/voice-reply-policy.d.ts.map +1 -0
- package/dist/orchestration/voice-reply-policy.js +46 -0
- package/dist/orchestration/voice-reply-policy.js.map +1 -0
- package/dist/orchestration/worker-shares.d.ts +8 -0
- package/dist/orchestration/worker-shares.d.ts.map +1 -0
- package/dist/orchestration/worker-shares.js +59 -0
- package/dist/orchestration/worker-shares.js.map +1 -0
- package/dist/orchestration/workflow.d.ts +121 -0
- package/dist/orchestration/workflow.d.ts.map +1 -0
- package/dist/orchestration/workflow.js +69 -0
- package/dist/orchestration/workflow.js.map +1 -0
- package/dist/session/input-image.d.ts +10 -0
- package/dist/session/input-image.d.ts.map +1 -0
- package/dist/session/input-image.js +3 -0
- package/dist/session/input-image.js.map +1 -0
- package/dist/session/process.d.ts +15 -3
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +143 -35
- package/dist/session/process.js.map +1 -1
- package/dist/session/runtime-profile.d.ts +36 -0
- package/dist/session/runtime-profile.d.ts.map +1 -0
- package/dist/session/runtime-profile.js +63 -0
- package/dist/session/runtime-profile.js.map +1 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +23 -1
- package/dist/session/store.js.map +1 -1
- package/dist/share/share-store.d.ts +3 -1
- package/dist/share/share-store.d.ts.map +1 -1
- package/dist/share/share-store.js +13 -2
- package/dist/share/share-store.js.map +1 -1
- package/dist/shared/line-request-order.d.ts +2 -0
- package/dist/shared/line-request-order.d.ts.map +1 -0
- package/dist/shared/line-request-order.js +16 -0
- package/dist/shared/line-request-order.js.map +1 -0
- package/dist/shared/task-elapsed.d.ts +3 -0
- package/dist/shared/task-elapsed.d.ts.map +1 -0
- package/dist/shared/task-elapsed.js +12 -0
- package/dist/shared/task-elapsed.js.map +1 -0
- package/dist/shared/task-updated-time.d.ts +3 -0
- package/dist/shared/task-updated-time.d.ts.map +1 -0
- package/dist/shared/task-updated-time.js +15 -0
- package/dist/shared/task-updated-time.js.map +1 -0
- package/dist/skills/loader.d.ts +2 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js.map +1 -1
- package/dist/telegram/chunks.d.ts +19 -0
- package/dist/telegram/chunks.d.ts.map +1 -0
- package/dist/telegram/chunks.js +129 -0
- package/dist/telegram/chunks.js.map +1 -0
- package/dist/telegram/markdown.d.ts.map +1 -1
- package/dist/telegram/markdown.js +18 -3
- package/dist/telegram/markdown.js.map +1 -1
- package/dist/telegram/receiver.d.ts +2 -1
- package/dist/telegram/receiver.d.ts.map +1 -1
- package/dist/telegram/receiver.js +6 -1
- package/dist/telegram/receiver.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/web-ui.d.ts.map +1 -1
- package/dist/ui/web-ui.js +31 -5
- package/dist/ui/web-ui.js.map +1 -1
- package/dist/voice/diagnostics.d.ts +29 -0
- package/dist/voice/diagnostics.d.ts.map +1 -0
- package/dist/voice/diagnostics.js +37 -0
- package/dist/voice/diagnostics.js.map +1 -0
- package/dist/voice/errors.d.ts +19 -0
- package/dist/voice/errors.d.ts.map +1 -0
- package/dist/voice/errors.js +133 -0
- package/dist/voice/errors.js.map +1 -0
- package/dist/voice/line-audio.d.ts +4 -0
- package/dist/voice/line-audio.d.ts.map +1 -0
- package/dist/voice/line-audio.js +27 -0
- package/dist/voice/line-audio.js.map +1 -0
- package/dist/voice/managed-quota.d.ts +5 -0
- package/dist/voice/managed-quota.d.ts.map +1 -0
- package/dist/voice/managed-quota.js +35 -0
- package/dist/voice/managed-quota.js.map +1 -0
- package/dist/voice/mp3.d.ts +3 -0
- package/dist/voice/mp3.d.ts.map +1 -0
- package/dist/voice/mp3.js +30 -0
- package/dist/voice/mp3.js.map +1 -0
- package/dist/voice/notes.d.ts +9 -0
- package/dist/voice/notes.d.ts.map +1 -0
- package/dist/voice/notes.js +68 -0
- package/dist/voice/notes.js.map +1 -0
- package/dist/voice/playback.d.ts +22 -0
- package/dist/voice/playback.d.ts.map +1 -0
- package/dist/voice/playback.js +52 -0
- package/dist/voice/playback.js.map +1 -0
- package/dist/voice/preview.d.ts +6 -0
- package/dist/voice/preview.d.ts.map +1 -0
- package/dist/voice/preview.js +44 -0
- package/dist/voice/preview.js.map +1 -0
- package/dist/voice/protocol.d.ts +10 -0
- package/dist/voice/protocol.d.ts.map +1 -0
- package/dist/voice/protocol.js +30 -0
- package/dist/voice/protocol.js.map +1 -0
- package/dist/voice/providers/cartesia-tts.d.ts +26 -0
- package/dist/voice/providers/cartesia-tts.d.ts.map +1 -0
- package/dist/voice/providers/cartesia-tts.js +95 -0
- package/dist/voice/providers/cartesia-tts.js.map +1 -0
- package/dist/voice/providers/deepgram-stt.d.ts +20 -0
- package/dist/voice/providers/deepgram-stt.d.ts.map +1 -0
- package/dist/voice/providers/deepgram-stt.js +66 -0
- package/dist/voice/providers/deepgram-stt.js.map +1 -0
- package/dist/voice/providers/elevenlabs-stt.d.ts +20 -0
- package/dist/voice/providers/elevenlabs-stt.d.ts.map +1 -0
- package/dist/voice/providers/elevenlabs-stt.js +92 -0
- package/dist/voice/providers/elevenlabs-stt.js.map +1 -0
- package/dist/voice/providers/elevenlabs-tts.d.ts +26 -0
- package/dist/voice/providers/elevenlabs-tts.d.ts.map +1 -0
- package/dist/voice/providers/elevenlabs-tts.js +82 -0
- package/dist/voice/providers/elevenlabs-tts.js.map +1 -0
- package/dist/voice/providers/encoded-audio-tts.d.ts +21 -0
- package/dist/voice/providers/encoded-audio-tts.d.ts.map +1 -0
- package/dist/voice/providers/encoded-audio-tts.js +175 -0
- package/dist/voice/providers/encoded-audio-tts.js.map +1 -0
- package/dist/voice/providers/fake.d.ts +39 -0
- package/dist/voice/providers/fake.d.ts.map +1 -0
- package/dist/voice/providers/fake.js +41 -0
- package/dist/voice/providers/fake.js.map +1 -0
- package/dist/voice/providers/gemini-live-stt.d.ts +21 -0
- package/dist/voice/providers/gemini-live-stt.d.ts.map +1 -0
- package/dist/voice/providers/gemini-live-stt.js +158 -0
- package/dist/voice/providers/gemini-live-stt.js.map +1 -0
- package/dist/voice/providers/gemini.d.ts +60 -0
- package/dist/voice/providers/gemini.d.ts.map +1 -0
- package/dist/voice/providers/gemini.js +124 -0
- package/dist/voice/providers/gemini.js.map +1 -0
- package/dist/voice/providers/model-ref.d.ts +9 -0
- package/dist/voice/providers/model-ref.d.ts.map +1 -0
- package/dist/voice/providers/model-ref.js +31 -0
- package/dist/voice/providers/model-ref.js.map +1 -0
- package/dist/voice/providers/openrouter.d.ts +39 -0
- package/dist/voice/providers/openrouter.d.ts.map +1 -0
- package/dist/voice/providers/openrouter.js +154 -0
- package/dist/voice/providers/openrouter.js.map +1 -0
- package/dist/voice/providers/paxalabs-stt.d.ts +12 -0
- package/dist/voice/providers/paxalabs-stt.d.ts.map +1 -0
- package/dist/voice/providers/paxalabs-stt.js +41 -0
- package/dist/voice/providers/paxalabs-stt.js.map +1 -0
- package/dist/voice/providers/paxalabs-tts.d.ts +23 -0
- package/dist/voice/providers/paxalabs-tts.d.ts.map +1 -0
- package/dist/voice/providers/paxalabs-tts.js +80 -0
- package/dist/voice/providers/paxalabs-tts.js.map +1 -0
- package/dist/voice/providers/recorded-stt.d.ts +34 -0
- package/dist/voice/providers/recorded-stt.d.ts.map +1 -0
- package/dist/voice/providers/recorded-stt.js +59 -0
- package/dist/voice/providers/recorded-stt.js.map +1 -0
- package/dist/voice/providers/registry.d.ts +10 -0
- package/dist/voice/providers/registry.d.ts.map +1 -0
- package/dist/voice/providers/registry.js +77 -0
- package/dist/voice/providers/registry.js.map +1 -0
- package/dist/voice/providers/socket.d.ts +10 -0
- package/dist/voice/providers/socket.d.ts.map +1 -0
- package/dist/voice/providers/socket.js +91 -0
- package/dist/voice/providers/socket.js.map +1 -0
- package/dist/voice/providers/upstream.d.ts +9 -0
- package/dist/voice/providers/upstream.d.ts.map +1 -0
- package/dist/voice/providers/upstream.js +51 -0
- package/dist/voice/providers/upstream.js.map +1 -0
- package/dist/voice/providers/voice-catalog.d.ts +17 -0
- package/dist/voice/providers/voice-catalog.d.ts.map +1 -0
- package/dist/voice/providers/voice-catalog.js +167 -0
- package/dist/voice/providers/voice-catalog.js.map +1 -0
- package/dist/voice/queue.d.ts +2 -0
- package/dist/voice/queue.d.ts.map +1 -0
- package/dist/voice/queue.js +6 -0
- package/dist/voice/queue.js.map +1 -0
- package/dist/voice/session.d.ts +86 -0
- package/dist/voice/session.d.ts.map +1 -0
- package/dist/voice/session.js +464 -0
- package/dist/voice/session.js.map +1 -0
- package/dist/voice/turn-manager.d.ts +27 -0
- package/dist/voice/turn-manager.d.ts.map +1 -0
- package/dist/voice/turn-manager.js +75 -0
- package/dist/voice/turn-manager.js.map +1 -0
- package/dist/voice/types.d.ts +78 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +18 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/voice/wav.d.ts +2 -0
- package/dist/voice/wav.d.ts.map +1 -0
- package/dist/voice/wav.js +21 -0
- package/dist/voice/wav.js.map +1 -0
- package/dist/wechat/ilink-client.d.ts +13 -0
- package/dist/wechat/ilink-client.d.ts.map +1 -1
- package/dist/wechat/ilink-client.js +19 -0
- package/dist/wechat/ilink-client.js.map +1 -1
- package/dist/whatsapp/manager.d.ts.map +1 -1
- package/dist/whatsapp/manager.js +51 -1
- package/dist/whatsapp/manager.js.map +1 -1
- package/mcp/capability-catalog.ts +206 -0
- package/mcp/modules.ts +56 -0
- package/mcp/server.ts +18 -37
- package/mcp/tools/browser/module.ts +1 -1
- package/mcp/tools/browser/skills/open-browser/SKILL.md +5 -3
- package/mcp/tools/discord/commands.ts +17 -1
- package/mcp/tools/discord/inbound.ts +11 -0
- package/mcp/tools/discord/module.ts +42 -2
- package/mcp/tools/discord/receiver-server.ts +10 -0
- package/mcp/tools/discord/types.ts +4 -1
- package/mcp/tools/image/module.ts +3 -1
- package/mcp/tools/receiver-spool.test.ts +28 -0
- package/mcp/tools/receiver-spool.ts +56 -0
- package/mcp/tools/share-file/module.ts +9 -1
- package/mcp/tools/shared/share-client.ts +19 -0
- package/mcp/tools/tasks/module.ts +35 -0
- package/mcp/tools/telegram/media-group.ts +21 -0
- package/mcp/tools/telegram/receiver-server.ts +246 -11
- package/mcp/tools/telegram/selection-confirmation.ts +20 -0
- package/mcp/tools/telegram/task-browser.ts +117 -0
- package/mcp/tools/telegram/task-detail.ts +36 -0
- package/mcp/tools/telegram/task-elapsed.ts +1 -0
- package/mcp/tools/telegram/typing.ts +6 -116
- package/mcp/tools/video/module.ts +1 -1
- package/mcp/types.ts +5 -0
- package/package.json +2 -1
- package/resource/claude_gateway.jpeg +0 -0
- package/scripts/orchestration/bench-store.cjs +30 -0
- package/scripts/orchestration/inspect.cjs +16 -0
- package/scripts/orchestration/probe-profile.cjs +67 -0
- package/scripts/orchestration/reconcile.cjs +21 -0
- package/scripts/orchestration/smoke-elevenlabs.cjs +90 -0
- package/scripts/orchestration/smoke-media.cjs +70 -0
- package/scripts/orchestration/smoke-text.cjs +101 -0
- package/scripts/orchestration/smoke-vision.cjs +49 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveChannelFile = resolveChannelFile;
|
|
4
|
+
exports.sendChannelFile = sendChannelFile;
|
|
5
|
+
const line_request_order_1 = require("../shared/line-request-order");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const os_1 = require("os");
|
|
9
|
+
const media_store_1 = require("../history/media-store");
|
|
10
|
+
const share_store_1 = require("../share/share-store");
|
|
11
|
+
function resolveChannelFile(agent, file) {
|
|
12
|
+
const agentsRoot = (0, path_1.join)(agent.workspace, '../..');
|
|
13
|
+
let path, bytes;
|
|
14
|
+
try {
|
|
15
|
+
path = (0, fs_1.realpathSync)(media_store_1.MediaStore.resolvePath(agentsRoot, agent.id, file.path));
|
|
16
|
+
const ref = (0, path_1.relative)((0, fs_1.realpathSync)((0, path_1.join)(agentsRoot, agent.id, 'media')), path);
|
|
17
|
+
if (!ref || ref.startsWith('..') || (0, path_1.isAbsolute)(ref) || (0, fs_1.statSync)(path).size > 50 * 1024 * 1024)
|
|
18
|
+
throw new Error();
|
|
19
|
+
bytes = (0, fs_1.readFileSync)(path);
|
|
20
|
+
if (bytes.length > 50 * 1024 * 1024)
|
|
21
|
+
throw new Error();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new Error('ATTACHMENT_UNAVAILABLE');
|
|
25
|
+
}
|
|
26
|
+
return { path, bytes };
|
|
27
|
+
}
|
|
28
|
+
async function sendChannelFile(agent, binding, file, id, request, enabled = () => true) {
|
|
29
|
+
if (!enabled())
|
|
30
|
+
return { state: 'failed', code: 'VOICE_REPLY_DISABLED' };
|
|
31
|
+
const agentsRoot = (0, path_1.join)(agent.workspace, '../..');
|
|
32
|
+
const source = String(binding.channel), chat = String(binding.chat_id), thread = String(binding.thread_key);
|
|
33
|
+
let path, bytes;
|
|
34
|
+
try {
|
|
35
|
+
({ path, bytes } = resolveChannelFile(agent, file));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return { state: 'failed', code: 'ATTACHMENT_UNAVAILABLE' };
|
|
39
|
+
}
|
|
40
|
+
const mime = file.kind === 'audio' ? (0, share_store_1.detectAudioMime)(bytes.subarray(0, 12)) ?? 'application/octet-stream' : (0, share_store_1.detectShareMime)(bytes.subarray(0, 12)) ?? 'application/octet-stream';
|
|
41
|
+
const image = file.kind === 'image' && mime.startsWith('image/');
|
|
42
|
+
const call = (url, init) => {
|
|
43
|
+
const send = () => request(url, { ...init, signal: AbortSignal.timeout(30000) });
|
|
44
|
+
return source === 'line' ? (0, line_request_order_1.orderLineRequest)(agent.id, chat, send) : send();
|
|
45
|
+
};
|
|
46
|
+
let response;
|
|
47
|
+
try {
|
|
48
|
+
if (source === 'telegram' && agent.telegram?.botToken) {
|
|
49
|
+
const form = new FormData(), photo = image && bytes.length <= 10 * 1024 * 1024;
|
|
50
|
+
form.set('chat_id', chat);
|
|
51
|
+
if (thread)
|
|
52
|
+
form.set('message_thread_id', thread);
|
|
53
|
+
if (file.caption)
|
|
54
|
+
form.set('caption', file.caption);
|
|
55
|
+
form.set(photo ? 'photo' : 'document', new Blob([new Uint8Array(bytes)], { type: mime }), file.name);
|
|
56
|
+
response = await call(`https://api.telegram.org/bot${agent.telegram.botToken}/${photo ? 'sendPhoto' : 'sendDocument'}`, { method: 'POST', body: form });
|
|
57
|
+
}
|
|
58
|
+
else if (source === 'whatsapp_cloud' && agent.whatsapp_cloud?.accessToken && agent.whatsapp_cloud.phoneNumberId) {
|
|
59
|
+
const url = `https://graph.facebook.com/v20.0/${encodeURIComponent(agent.whatsapp_cloud.phoneNumberId)}`;
|
|
60
|
+
const headers = { Authorization: `Bearer ${agent.whatsapp_cloud.accessToken}` };
|
|
61
|
+
const form = new FormData();
|
|
62
|
+
form.set('messaging_product', 'whatsapp');
|
|
63
|
+
form.set('type', mime);
|
|
64
|
+
form.set('file', new Blob([new Uint8Array(bytes)], { type: mime }), file.name);
|
|
65
|
+
const upload = await call(`${url}/media`, { method: 'POST', headers, body: form });
|
|
66
|
+
if (!upload.ok)
|
|
67
|
+
return { state: upload.status >= 500 ? 'unknown' : 'failed', code: `PROVIDER_HTTP_${upload.status}` };
|
|
68
|
+
const media = await upload.json();
|
|
69
|
+
if (!media.id || media.error)
|
|
70
|
+
return { state: 'failed', code: 'UPLOAD_REJECTED' };
|
|
71
|
+
if (!enabled())
|
|
72
|
+
return { state: 'failed', code: 'VOICE_REPLY_DISABLED' };
|
|
73
|
+
const type = image ? 'image' : file.kind === 'audio' ? 'audio' : 'document';
|
|
74
|
+
response = await call(`${url}/messages`, { method: 'POST', headers: { ...headers, 'Content-Type': 'application/json' },
|
|
75
|
+
body: JSON.stringify({ messaging_product: 'whatsapp', to: chat, type,
|
|
76
|
+
[type]: { id: media.id, ...(type === 'document' ? { filename: file.name } : {}), ...(type !== 'audio' && file.caption ? { caption: file.caption } : {}) } }) });
|
|
77
|
+
}
|
|
78
|
+
else if (source === 'discord' && agent.discord?.botToken) {
|
|
79
|
+
const form = new FormData();
|
|
80
|
+
form.set('payload_json', JSON.stringify({ content: file.caption, attachments: [{ id: 0, filename: file.name }], nonce: id.replace(/-/g, '').slice(0, 25), enforce_nonce: true, allowed_mentions: { parse: [] } }));
|
|
81
|
+
form.set('files[0]', new Blob([new Uint8Array(bytes)], { type: mime }), file.name);
|
|
82
|
+
response = await call(`https://discord.com/api/v10/channels/${encodeURIComponent(chat)}/messages`, { method: 'POST', headers: { Authorization: `Bot ${agent.discord.botToken}` }, body: form });
|
|
83
|
+
}
|
|
84
|
+
else if (source === 'slack' && agent.slack?.botToken) {
|
|
85
|
+
const authorization = { Authorization: `Bearer ${agent.slack.botToken}` };
|
|
86
|
+
const reserve = await call('https://slack.com/api/files.getUploadURLExternal', { method: 'POST', headers: authorization, body: new URLSearchParams({ filename: file.name, length: String(bytes.length) }) });
|
|
87
|
+
if (!reserve.ok)
|
|
88
|
+
return { state: reserve.status >= 500 ? 'unknown' : 'failed', code: `PROVIDER_HTTP_${reserve.status}` };
|
|
89
|
+
const slot = await reserve.json();
|
|
90
|
+
if (!slot.ok || !slot.file_id || !slot.upload_url?.startsWith('https://'))
|
|
91
|
+
return { state: 'failed', code: 'UPLOAD_SLOT_REJECTED' };
|
|
92
|
+
const form = new FormData();
|
|
93
|
+
form.set('file', new Blob([new Uint8Array(bytes)], { type: mime }), file.name);
|
|
94
|
+
const upload = await call(slot.upload_url, { method: 'POST', body: form });
|
|
95
|
+
if (!upload.ok)
|
|
96
|
+
return { state: 'unknown', code: 'UPLOAD_RECEIPT_UNKNOWN' };
|
|
97
|
+
if (!enabled())
|
|
98
|
+
return { state: 'failed', code: 'VOICE_REPLY_DISABLED' };
|
|
99
|
+
response = await call('https://slack.com/api/files.completeUploadExternal', { method: 'POST', headers: { ...authorization, 'Content-Type': 'application/json' },
|
|
100
|
+
body: JSON.stringify({ files: [{ id: slot.file_id, title: file.name }], channel_id: chat, ...(thread ? { thread_ts: thread } : {}), ...(file.caption ? { initial_comment: file.caption } : {}) }) });
|
|
101
|
+
}
|
|
102
|
+
else if (source === 'line' && agent.line?.channelAccessToken) {
|
|
103
|
+
const base = (0, fs_1.readFileSync)((0, path_1.join)(agent.workspace, '../.public-base'), 'utf8').trim().replace(/\/+$/, '');
|
|
104
|
+
if (!base.startsWith('https://'))
|
|
105
|
+
return { state: 'failed', code: 'PUBLIC_MEDIA_URL_REQUIRED' };
|
|
106
|
+
const validated = (0, share_store_1.validateShareFile)(agentsRoot, agent.id, path, 20 * 1024 * 1024, image ? 'image' : file.kind === 'audio' ? 'audio' : 'any');
|
|
107
|
+
const shares = new share_store_1.ShareStore((0, share_store_1.shareEnv)('DB_PATH') || (0, path_1.join)((0, os_1.homedir)(), '.claude-gateway', 'shares.db'));
|
|
108
|
+
let url;
|
|
109
|
+
try {
|
|
110
|
+
const share = shares.mintShare({ agentId: agent.id, sessionId: String(binding.conversation_id), relativePath: validated.relativePath,
|
|
111
|
+
dedupeRef: file.path, purpose: 'channel_delivery', ttlSeconds: 1800, allowKind: image ? 'image' : file.kind === 'audio' ? 'audio' : 'any' });
|
|
112
|
+
url = `${base}/shared/${share.token}${file.kind === 'audio' ? (mime === 'audio/mp4' ? '/audio.m4a' : '/audio.mp3') : ''}`;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
shares.close();
|
|
116
|
+
}
|
|
117
|
+
const message = file.kind === 'audio' ? { type: 'audio', originalContentUrl: url, duration: file.durationMs } : image ? { type: 'image', originalContentUrl: url, previewImageUrl: url } : { type: 'text', text: `${file.name}\n${url}` };
|
|
118
|
+
if (!enabled())
|
|
119
|
+
return { state: 'failed', code: 'VOICE_REPLY_DISABLED' };
|
|
120
|
+
response = await call('https://api.line.me/v2/bot/message/push', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${agent.line.channelAccessToken}`, 'X-Line-Retry-Key': id }, body: JSON.stringify({ to: chat, messages: [message] }) });
|
|
121
|
+
if (response.status === 409 && response.headers.get('x-line-accepted-request-id'))
|
|
122
|
+
return { state: 'delivered', providerId: response.headers.get('x-line-accepted-request-id') };
|
|
123
|
+
}
|
|
124
|
+
else
|
|
125
|
+
return { state: 'failed', code: 'DELIVERY_NOT_CONFIGURED' };
|
|
126
|
+
if (!response.ok)
|
|
127
|
+
return { state: response.status >= 500 ? 'unknown' : 'failed', code: `PROVIDER_HTTP_${response.status}` };
|
|
128
|
+
const result = await response.json();
|
|
129
|
+
if (result.ok === false || result.error)
|
|
130
|
+
return { state: 'failed', code: 'PROVIDER_REJECTED' };
|
|
131
|
+
if (source === 'whatsapp_cloud' && !result.messages?.[0]?.id)
|
|
132
|
+
return { state: 'unknown', code: 'PROVIDER_RECEIPT_UNKNOWN' };
|
|
133
|
+
return { state: 'delivered', providerId: result.messages?.[0]?.id ?? result.id ?? result.files?.[0]?.id ?? result.sentMessages?.[0]?.id ?? (result.result?.message_id === undefined ? undefined : String(result.result.message_id)) };
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return { state: 'unknown', code: 'PROVIDER_RECEIPT_UNKNOWN' };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=file-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-delivery.js","sourceRoot":"","sources":["../../src/orchestration/file-delivery.ts"],"names":[],"mappings":";;AAWA,gDAWC;AACD,0CA2EC;AAlGD,qEAAgE;AAChE,2BAA0D;AAC1D,+BAAkD;AAClD,2BAA6B;AAI7B,wDAAoD;AACpD,sDAAiH;AAGjH,SAAgB,kBAAkB,CAAC,KAAkB,EAAE,IAAiB;IACtE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,IAAY,EAAE,KAAa,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,GAAG,IAAA,iBAAY,EAAC,wBAAU,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,IAAA,eAAQ,EAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAA,iBAAU,EAAC,GAAG,CAAC,IAAI,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QACjH,KAAK,GAAG,IAAA,iBAAY,EAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAAC,CAAC;IACtD,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;AACvB,CAAC;AACM,KAAK,UAAU,eAAe,CAAC,KAAkB,EAAE,OAAY,EAAE,IAAiB,EAAE,EAAU,EAAE,OAAqB,EAAE,UAAyB,GAAG,EAAE,CAAC,IAAI;IAC/J,IAAG,CAAC,OAAO,EAAE;QAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,sBAAsB,EAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5G,IAAI,IAAY,EAAE,KAAa,CAAC;IAChC,IAAI,CAAC;QAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAC1D,MAAM,CAAC;QAAC,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAC,CAAC;IAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,IAAA,6BAAe,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,IAAA,6BAAe,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,0BAA0B,CAAC;IAC9K,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,IAAiB,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,qCAAgB,EAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC,CAAC;IACF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,EAAE,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;YAC/E,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACrG,QAAQ,GAAG,MAAM,IAAI,CAAC,+BAA+B,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1J,CAAC;aAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,KAAK,CAAC,cAAc,EAAE,WAAW,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;YAClH,MAAM,GAAG,GAAG,oCAAoC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACzG,MAAM,OAAO,GAAG,EAAC,aAAa,EAAE,UAAU,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,EAAC,CAAC;YAC9E,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;YACjF,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC;YACpH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAoC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAC,CAAC;YAChF,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAC,CAAC;YACvE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YAC5E,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAC;gBACjH,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;oBACjE,CAAC,IAAI,CAAC,EAAE,EAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAC9J,CAAC;aAAM,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAClN,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,QAAQ,GAAG,MAAM,IAAI,CAAC,wCAAwC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClM,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;YACvD,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kDAAkD,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7M,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACzH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAA0D,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;YACpI,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;YAC5E,IAAG,CAAC,OAAO,EAAE;gBAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,sBAAsB,EAAC,CAAC;YAClE,QAAQ,GAAG,MAAM,IAAI,CAAC,oDAAoD,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC7J,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzM,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;YAChG,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3I,MAAM,MAAM,GAAG,IAAI,wBAAU,CAAC,IAAA,sBAAQ,EAAC,SAAS,CAAC,IAAI,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC;YACtG,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY;oBAClI,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC7I,GAAG,GAAG,GAAG,IAAI,WAAW,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAG,WAAW,CAAA,CAAC,CAAA,YAAY,CAAA,CAAC,CAAA,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpH,CAAC;oBAAS,CAAC;gBAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,OAAO,EAAC,kBAAkB,EAAC,GAAG,EAAC,QAAQ,EAAC,IAAI,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACjO,IAAG,CAAC,OAAO,EAAE;gBAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,sBAAsB,EAAC,CAAC;YAClE,QAAQ,GAAG,MAAM,IAAI,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjR,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAE,EAAE,CAAC;QACpL,CAAC;;YAAM,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5H,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2L,CAAC;QAC9N,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QAC/F,IAAI,MAAM,KAAK,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAAE,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,EAAC,CAAC;QAC1H,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IACxO,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;IAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AgentConfig, GatewayConfig } from '../types';
|
|
2
|
+
import { OrchestrationConfig } from './config';
|
|
3
|
+
export type GatewayOrchestration = boolean | Omit<OrchestrationConfig, 'channels'>;
|
|
4
|
+
export declare const ORCHESTRATION_CHANNELS: string[];
|
|
5
|
+
export declare function gatewayOrchestrationEnabled(value: GatewayOrchestration | undefined): boolean;
|
|
6
|
+
export declare function validateGatewayOrchestration(value: unknown): void;
|
|
7
|
+
/** Derived mode is non-enumerable: serializing settings never writes per-Agent switches back to config.json. */
|
|
8
|
+
export declare function effectiveOrchestration(settings: OrchestrationConfig | undefined, global: GatewayOrchestration | undefined): OrchestrationConfig;
|
|
9
|
+
export declare function applyGatewayOrchestration(agent: AgentConfig, gateway: GatewayConfig): AgentConfig;
|
|
10
|
+
/** One-time structural migration. New documents have no inherited voice settings.
|
|
11
|
+
* Merge raw values, never environment-expanded credentials, and preserve explicit
|
|
12
|
+
* per-agent overrides (including false). Calling this again is a no-op. */
|
|
13
|
+
export declare function migrateAgentVoiceConfig(document: {
|
|
14
|
+
gateway?: any;
|
|
15
|
+
agents?: any[];
|
|
16
|
+
}): boolean;
|
|
17
|
+
//# sourceMappingURL=gateway-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-config.d.ts","sourceRoot":"","sources":["../../src/orchestration/gateway-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,WAAW,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAgE,MAAM,UAAU,CAAC;AAE5G,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAC,UAAU,CAAC,CAAC;AAElF,eAAO,MAAM,sBAAsB,UAAyB,CAAC;AAC7D,wBAAgB,2BAA2B,CAAC,KAAK,EAAC,oBAAoB,GAAC,SAAS,GAAE,OAAO,CAAkE;AAC3J,wBAAgB,4BAA4B,CAAC,KAAK,EAAC,OAAO,GAAE,IAAI,CAI/D;AAMD,gHAAgH;AAChH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAC,mBAAmB,GAAC,SAAS,EAAC,MAAM,EAAC,oBAAoB,GAAC,SAAS,GAAE,mBAAmB,CAevI;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAC,WAAW,EAAC,OAAO,EAAC,aAAa,GAAE,WAAW,CAO7F;AAED;;2EAE2E;AAC3E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,GAAG,OAAO,CAsD5F"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ORCHESTRATION_CHANNELS = void 0;
|
|
4
|
+
exports.gatewayOrchestrationEnabled = gatewayOrchestrationEnabled;
|
|
5
|
+
exports.validateGatewayOrchestration = validateGatewayOrchestration;
|
|
6
|
+
exports.effectiveOrchestration = effectiveOrchestration;
|
|
7
|
+
exports.applyGatewayOrchestration = applyGatewayOrchestration;
|
|
8
|
+
exports.migrateAgentVoiceConfig = migrateAgentVoiceConfig;
|
|
9
|
+
const model_ref_1 = require("../voice/providers/model-ref");
|
|
10
|
+
const config_1 = require("./config");
|
|
11
|
+
const types_1 = require("../history/types");
|
|
12
|
+
const overrides = Symbol('agent-orchestration-overrides');
|
|
13
|
+
exports.ORCHESTRATION_CHANNELS = ['api', ...types_1.CHAT_CHANNELS];
|
|
14
|
+
function gatewayOrchestrationEnabled(value) { return typeof value === 'boolean' ? value : value?.enabled !== false; }
|
|
15
|
+
function validateGatewayOrchestration(value) {
|
|
16
|
+
if (value === undefined || typeof value === 'boolean')
|
|
17
|
+
return;
|
|
18
|
+
(0, config_1.validateTree)(value, config_1.ORCHESTRATION_DEFAULTS, 'gateway.orchestration');
|
|
19
|
+
if (Object.prototype.hasOwnProperty.call(value, 'channels'))
|
|
20
|
+
throw Error('gateway.orchestration applies to every channel; channels is not configurable');
|
|
21
|
+
}
|
|
22
|
+
function merge(base, override) {
|
|
23
|
+
const result = { ...base };
|
|
24
|
+
for (const [key, value] of Object.entries(override ?? {}))
|
|
25
|
+
result[key] = value && typeof value === 'object' && !Array.isArray(value) ? merge(base?.[key] ?? {}, value) : value;
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
/** Derived mode is non-enumerable: serializing settings never writes per-Agent switches back to config.json. */
|
|
29
|
+
function effectiveOrchestration(settings, global) {
|
|
30
|
+
var _a;
|
|
31
|
+
validateGatewayOrchestration(global);
|
|
32
|
+
if (settings !== undefined)
|
|
33
|
+
(0, config_1.validateTree)(settings, config_1.ORCHESTRATION_DEFAULTS, 'agents[].orchestration');
|
|
34
|
+
const raw = { ...(settings?.[overrides] ?? settings) };
|
|
35
|
+
delete raw.enabled;
|
|
36
|
+
delete raw.channels;
|
|
37
|
+
const defaults = typeof global === 'object' ? { ...global } : {};
|
|
38
|
+
delete defaults.enabled;
|
|
39
|
+
const result = merge(defaults, raw);
|
|
40
|
+
// Reply permission belongs to the Agent. Accept old gateway keys for config
|
|
41
|
+
// compatibility, but never inherit their value into an Agent's policy.
|
|
42
|
+
if (result.voice) {
|
|
43
|
+
(_a = result.voice).notes ?? (_a.notes = {});
|
|
44
|
+
result.voice.notes.replyWithVoice = raw.voice?.notes?.replyWithVoice ?? true;
|
|
45
|
+
}
|
|
46
|
+
Object.defineProperties(result, { enabled: { value: gatewayOrchestrationEnabled(global) }, channels: { value: exports.ORCHESTRATION_CHANNELS }, [overrides]: { value: raw }, toJSON: { value: () => raw } });
|
|
47
|
+
(0, config_1.resolveOrchestrationConfig)(result);
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
function applyGatewayOrchestration(agent, gateway) {
|
|
51
|
+
// Normalize legacy in-memory callers too; loaded config is already migrated.
|
|
52
|
+
const document = { gateway: { orchestration: gateway.gateway.orchestration }, agents: [agent] };
|
|
53
|
+
migrateAgentVoiceConfig(document);
|
|
54
|
+
agent.orchestration = effectiveOrchestration(agent.orchestration, document.gateway.orchestration);
|
|
55
|
+
(0, config_1.resolveOrchestrationConfig)(agent.orchestration, agent.voice ?? { enabled: false });
|
|
56
|
+
return agent;
|
|
57
|
+
}
|
|
58
|
+
/** One-time structural migration. New documents have no inherited voice settings.
|
|
59
|
+
* Merge raw values, never environment-expanded credentials, and preserve explicit
|
|
60
|
+
* per-agent overrides (including false). Calling this again is a no-op. */
|
|
61
|
+
function migrateAgentVoiceConfig(document) {
|
|
62
|
+
const global = document.gateway?.orchestration;
|
|
63
|
+
validateGatewayOrchestration(global);
|
|
64
|
+
const legacyGlobal = global && typeof global === 'object' ? global : undefined;
|
|
65
|
+
let changed = false;
|
|
66
|
+
for (const agent of document.agents ?? []) {
|
|
67
|
+
if (!agent || typeof agent !== 'object' || Array.isArray(agent))
|
|
68
|
+
continue;
|
|
69
|
+
for (const role of ['tts', 'stt', 'notes']) {
|
|
70
|
+
const item = agent.voice?.[role];
|
|
71
|
+
if (typeof item?.provider === 'string' && (0, model_ref_1.canonicalVoiceProvider)(item.provider) !== item.provider) {
|
|
72
|
+
item.provider = (0, model_ref_1.canonicalVoiceProvider)(item.provider);
|
|
73
|
+
changed = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const legacy = agent.orchestration;
|
|
77
|
+
if (!legacyGlobal && !legacy?.voice)
|
|
78
|
+
continue;
|
|
79
|
+
// Reuse the old precedence rules before removing the inherited layer.
|
|
80
|
+
let effective;
|
|
81
|
+
try {
|
|
82
|
+
effective = effectiveOrchestration(legacy, global);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
continue;
|
|
86
|
+
} // The loader reports/skips malformed agents individually.
|
|
87
|
+
const settings = JSON.parse(JSON.stringify(effective));
|
|
88
|
+
if (legacyGlobal) {
|
|
89
|
+
for (const field of ['conversation', 'tasks', 'events']) {
|
|
90
|
+
if (legacyGlobal[field] || legacy?.[field])
|
|
91
|
+
settings[field] = merge(legacyGlobal[field], legacy?.[field]);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (legacyGlobal?.voice || legacy?.voice) {
|
|
95
|
+
const rawVoice = merge(merge(legacyGlobal?.voice, legacy?.voice), agent.voice);
|
|
96
|
+
const resolvedVoice = (0, config_1.resolveOrchestrationConfig)(effective).voice;
|
|
97
|
+
// Disabled, never-configured voice must not acquire fictional ElevenLabs
|
|
98
|
+
// selections merely because the previous runtime supplied defaults.
|
|
99
|
+
const hasSelection = ['tts', 'stt', 'notes'].some(field => ['provider', 'model', 'voiceId'].some(key => Boolean(rawVoice[field]?.[key])));
|
|
100
|
+
const voice = rawVoice.enabled !== true && !resolvedVoice.enabled && !hasSelection
|
|
101
|
+
? rawVoice
|
|
102
|
+
: merge(resolvedVoice, agent.voice);
|
|
103
|
+
delete voice.allowedOrigins;
|
|
104
|
+
for (const role of ['tts', 'stt', 'notes'])
|
|
105
|
+
if (typeof voice[role]?.provider === 'string')
|
|
106
|
+
voice[role].provider = (0, model_ref_1.canonicalVoiceProvider)(voice[role].provider);
|
|
107
|
+
agent.voice = voice;
|
|
108
|
+
}
|
|
109
|
+
delete settings.voice;
|
|
110
|
+
if (Object.keys(settings).length)
|
|
111
|
+
agent.orchestration = settings;
|
|
112
|
+
else
|
|
113
|
+
delete agent.orchestration;
|
|
114
|
+
changed = true;
|
|
115
|
+
}
|
|
116
|
+
if (legacyGlobal) {
|
|
117
|
+
document.gateway.orchestration = gatewayOrchestrationEnabled(global);
|
|
118
|
+
changed = true;
|
|
119
|
+
}
|
|
120
|
+
// Materialize the default for older configs as well as fresh installs.
|
|
121
|
+
// Explicit false remains an opt-out; voice is still independently disabled.
|
|
122
|
+
if (document.gateway && document.gateway.orchestration === undefined) {
|
|
123
|
+
document.gateway.orchestration = true;
|
|
124
|
+
changed = true;
|
|
125
|
+
}
|
|
126
|
+
return changed;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=gateway-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-config.js","sourceRoot":"","sources":["../../src/orchestration/gateway-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SessionStore } from '../session/store';
|
|
2
|
+
import { HistoryDB } from '../history/db';
|
|
3
|
+
import { OrchestrationStore } from './store';
|
|
4
|
+
/** Sidecar and canonical history cannot share a transaction. Each canonical
|
|
5
|
+
* writer deduplicates the same operation ID before the sidecar marks it done. */
|
|
6
|
+
export declare class OrchestrationHistoryWriter {
|
|
7
|
+
private readonly orchestration;
|
|
8
|
+
private readonly sessions;
|
|
9
|
+
private readonly history;
|
|
10
|
+
constructor(orchestration: OrchestrationStore, sessions: SessionStore, history: HistoryDB);
|
|
11
|
+
write(operationId: string): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/orchestration/history.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C;iFACiF;AACjF,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAsB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAgB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAApG,aAAa,EAAE,kBAAkB,EAAmB,QAAQ,EAAE,YAAY,EAAmB,OAAO,EAAE,SAAS;IACtI,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BhD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrchestrationHistoryWriter = void 0;
|
|
4
|
+
const reply_context_1 = require("./reply-context");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
/** Sidecar and canonical history cannot share a transaction. Each canonical
|
|
7
|
+
* writer deduplicates the same operation ID before the sidecar marks it done. */
|
|
8
|
+
class OrchestrationHistoryWriter {
|
|
9
|
+
constructor(orchestration, sessions, history) {
|
|
10
|
+
this.orchestration = orchestration;
|
|
11
|
+
this.sessions = sessions;
|
|
12
|
+
this.history = history;
|
|
13
|
+
}
|
|
14
|
+
async write(operationId) {
|
|
15
|
+
const operation = this.orchestration.get('SELECT * FROM history_operations WHERE operation_id=?', operationId);
|
|
16
|
+
if (!operation)
|
|
17
|
+
throw new types_1.OrchestrationError('HISTORY_OPERATION_NOT_FOUND');
|
|
18
|
+
if (operation.state === 'completed')
|
|
19
|
+
return;
|
|
20
|
+
const conversation = this.orchestration.get('SELECT * FROM conversations WHERE id=?', operation.conversation_id);
|
|
21
|
+
const input = operation.input_id ? this.orchestration.get('SELECT * FROM conversation_inputs WHERE id=?', operation.input_id) : undefined;
|
|
22
|
+
const response = operation.response_id ? this.orchestration.get('SELECT * FROM assistant_responses WHERE id=?', operation.response_id) : undefined;
|
|
23
|
+
if (!input && !response)
|
|
24
|
+
throw new types_1.OrchestrationError('HISTORY_MESSAGE_NOT_FOUND');
|
|
25
|
+
if (input?.store_user_message === 0 || (response && !String(response.generated_text).trim())) {
|
|
26
|
+
this.orchestration.run("UPDATE history_operations SET state='completed',updated_at=? WHERE operation_id=?", Date.now(), operationId);
|
|
27
|
+
this.orchestration.run("UPDATE outbox SET state='completed' WHERE kind='history' AND dedup_key=?", operationId);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const source = String(conversation.source);
|
|
31
|
+
const sessionId = String(conversation.agent_session_id), chatId = String(conversation.chat_id);
|
|
32
|
+
const message = { operationId, role: input ? 'user' : 'assistant',
|
|
33
|
+
content: String(input?.text ?? response?.generated_text), ts: Number(input?.created_at ?? response?.completed_at ?? response?.created_at) };
|
|
34
|
+
if (source === 'api')
|
|
35
|
+
await this.sessions.appendMessage(this.orchestration.agentId, sessionId, message);
|
|
36
|
+
else
|
|
37
|
+
await this.sessions.appendTelegramMessage(this.orchestration.agentId, chatId, sessionId, message, source);
|
|
38
|
+
const ingress = input ? JSON.parse(String(input.ingress_json ?? '{}')) : {};
|
|
39
|
+
if (input)
|
|
40
|
+
ingress.metadata = (0, reply_context_1.resolveStoredReply)(this.orchestration, { agentId: this.orchestration.agentId, agentSessionId: sessionId, source, accountId: String(conversation.account_id), chatId, threadKey: String(conversation.thread_key), principalId: String(input.principal_id) }, ingress.metadata);
|
|
41
|
+
const mediaFiles = input ? JSON.parse(String(input.attachment_refs_json)) : this.orchestration.all('SELECT path FROM task_files WHERE response_id=? ORDER BY created_at,id', response.id).map(row => String(row.path));
|
|
42
|
+
const ref = this.history.insertMessageOnce(operationId, { ...message, ...ingress.metadata, repliedToMessageId: ingress.metadata?.repliedMessageId, repliedToText: ingress.metadata?.repliedText, repliedToUser: ingress.metadata?.repliedSender, mediaFiles: mediaFiles.length ? mediaFiles : undefined, chatId: `${source}-${chatId}`, sessionId, source });
|
|
43
|
+
this.orchestration.run("UPDATE history_operations SET state='completed',canonical_message_ref=?,updated_at=? WHERE operation_id=?", String(ref), Date.now(), operationId);
|
|
44
|
+
this.orchestration.run("UPDATE outbox SET state='completed' WHERE kind='history' AND dedup_key=?", operationId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.OrchestrationHistoryWriter = OrchestrationHistoryWriter;
|
|
48
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/orchestration/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentConfig, ApiKey } from '../types';
|
|
2
|
+
import type { ExecutionCapabilities } from './types';
|
|
3
|
+
/** Config IDs survive key rotation; legacy keys have a non-reversible stable fallback. */
|
|
4
|
+
export declare function apiPrincipal(key: ApiKey): string;
|
|
5
|
+
export declare function apiExecutionCapabilities(agent: AgentConfig, key: ApiKey): ExecutionCapabilities;
|
|
6
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/orchestration/identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAE/F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apiPrincipal = apiPrincipal;
|
|
4
|
+
exports.apiExecutionCapabilities = apiExecutionCapabilities;
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
/** Config IDs survive key rotation; legacy keys have a non-reversible stable fallback. */
|
|
7
|
+
function apiPrincipal(key) {
|
|
8
|
+
return key.id ? `api:${key.id}` : `api-sha256:${(0, crypto_1.createHash)('sha256').update(key.key).digest('hex')}`;
|
|
9
|
+
}
|
|
10
|
+
function apiExecutionCapabilities(agent, key) {
|
|
11
|
+
return { execute: agent.allow_tools ?? Boolean(key.allow_tools), writeMemory: false };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/orchestration/identity.ts"],"names":[],"mappings":";;AAKA,oCAEC;AACD,4DAEC;AAVD,mCAAoC;AAIpC,0FAA0F;AAC1F,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvG,CAAC;AACD,SAAgB,wBAAwB,CAAC,KAAkB,EAAE,GAAW;IACtE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference-errors.d.ts","sourceRoot":"","sources":["../../src/orchestration/inference-errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ1E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inferenceFailureMessage = inferenceFailureMessage;
|
|
4
|
+
/** User-facing provider failures, without credentials or internal stack traces. */
|
|
5
|
+
function inferenceFailureMessage(error) {
|
|
6
|
+
const failure = error;
|
|
7
|
+
if (failure?.code === 'PROVIDER_CAPACITY')
|
|
8
|
+
return '503: Provider capacity is fully in use right now. Please try again later.';
|
|
9
|
+
if (failure?.code === 'PROVIDER_UNAVAILABLE')
|
|
10
|
+
return '503: The model provider is temporarily unavailable. Please try again shortly.';
|
|
11
|
+
if (failure?.code === 'INFERENCE_FAILED' && typeof failure.message === 'string' && /^API Error:/i.test(failure.message)) {
|
|
12
|
+
return failure.message.replace(/^API Error:\s*/i, '').replace(/Bearer\s+[^\s"']+/gi, 'Bearer [redacted]').replace(/sk-[A-Za-z0-9_-]+/g, '[redacted]').slice(0, 1000);
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=inference-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference-errors.js","sourceRoot":"","sources":["../../src/orchestration/inference-errors.ts"],"names":[],"mappings":";;AACA,0DAQC;AATD,mFAAmF;AACnF,SAAgB,uBAAuB,CAAC,KAAc;IACpD,MAAM,OAAO,GAAG,KAAmD,CAAC;IACpE,IAAI,OAAO,EAAE,IAAI,KAAK,mBAAmB;QAAE,OAAO,2EAA2E,CAAC;IAC9H,IAAI,OAAO,EAAE,IAAI,KAAK,sBAAsB;QAAE,OAAO,+EAA+E,CAAC;IACrI,IAAI,OAAO,EAAE,IAAI,KAAK,kBAAkB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACxH,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvK,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InputImage } from '../session/input-image';
|
|
2
|
+
/** Load only scoped ingress media. Keep original refs in storage and worker context;
|
|
3
|
+
* base64 lives only in the transient inference request. Do not silently omit images. */
|
|
4
|
+
export declare function loadInputImages(agentsRoot: string, agentId: string, refs?: string[]): Promise<{
|
|
5
|
+
images: InputImage[];
|
|
6
|
+
refs: string[];
|
|
7
|
+
unavailable: Array<{
|
|
8
|
+
ref: string;
|
|
9
|
+
reason: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=input-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-images.d.ts","sourceRoot":"","sources":["../../src/orchestration/input-images.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD;wFACwF;AACxF,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC;IACvG,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F,CAAC,CAmCD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadInputImages = loadInputImages;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const promises_1 = require("fs/promises");
|
|
6
|
+
const media_store_1 = require("../history/media-store");
|
|
7
|
+
const MAX_IMAGE_BYTES = 5 * 1024 * 1024;
|
|
8
|
+
const MAX_TURN_BYTES = 20 * 1024 * 1024;
|
|
9
|
+
const MAX_IMAGES = 20;
|
|
10
|
+
function imageMime(bytes) {
|
|
11
|
+
if (bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])))
|
|
12
|
+
return 'image/png';
|
|
13
|
+
if (bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255)
|
|
14
|
+
return 'image/jpeg';
|
|
15
|
+
if (/^GIF8[79]a$/.test(bytes.subarray(0, 6).toString('ascii')))
|
|
16
|
+
return 'image/gif';
|
|
17
|
+
if (bytes.subarray(0, 4).toString() === 'RIFF' && bytes.subarray(8, 12).toString() === 'WEBP')
|
|
18
|
+
return 'image/webp';
|
|
19
|
+
}
|
|
20
|
+
/** Load only scoped ingress media. Keep original refs in storage and worker context;
|
|
21
|
+
* base64 lives only in the transient inference request. Do not silently omit images. */
|
|
22
|
+
async function loadInputImages(agentsRoot, agentId, refs = []) {
|
|
23
|
+
const result = { images: [], refs: [], unavailable: [] };
|
|
24
|
+
let total = 0;
|
|
25
|
+
for (const ref of [...new Set(refs)]) {
|
|
26
|
+
let file;
|
|
27
|
+
try {
|
|
28
|
+
file = await (0, promises_1.open)(media_store_1.MediaStore.resolvePath(agentsRoot, agentId, ref), fs_1.constants.O_RDONLY | fs_1.constants.O_NOFOLLOW | fs_1.constants.O_NONBLOCK);
|
|
29
|
+
const stat = await file.stat();
|
|
30
|
+
if (!stat.isFile())
|
|
31
|
+
throw new Error('not a regular file');
|
|
32
|
+
const header = Buffer.alloc(12);
|
|
33
|
+
await file.read(header, 0, header.length, 0);
|
|
34
|
+
const mime = imageMime(header);
|
|
35
|
+
if (!mime) {
|
|
36
|
+
if (/\.(png|jpe?g|gif|webp|heic|heif|avif|svg|bmp|tiff?)$/i.test(ref))
|
|
37
|
+
result.unavailable.push({ ref, reason: 'Unsupported or invalid image; resend as PNG, JPEG, GIF or WebP.' });
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (stat.size > MAX_IMAGE_BYTES || total + stat.size > MAX_TURN_BYTES || result.images.length >= MAX_IMAGES) {
|
|
41
|
+
result.unavailable.push({ ref, reason: 'Image input limit: 5 MiB per image, 20 MiB and 20 images per turn. Resize or send fewer images.' });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Bounded positional read even if the source file grows concurrently.
|
|
45
|
+
const bytes = Buffer.alloc(stat.size);
|
|
46
|
+
let offset = 0;
|
|
47
|
+
while (offset < bytes.length) {
|
|
48
|
+
const { bytesRead } = await file.read(bytes, offset, bytes.length - offset, offset);
|
|
49
|
+
if (!bytesRead)
|
|
50
|
+
throw new Error('incomplete image');
|
|
51
|
+
offset += bytesRead;
|
|
52
|
+
}
|
|
53
|
+
result.images.push({ type: 'image', source: { type: 'base64', media_type: mime, data: bytes.toString('base64') } });
|
|
54
|
+
result.refs.push(ref);
|
|
55
|
+
total += bytes.length;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
result.unavailable.push({ ref, reason: 'Attachment unavailable. Do not claim to have inspected it; ask the user to resend if needed.' });
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
await file?.close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=input-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-images.js","sourceRoot":"","sources":["../../src/orchestration/input-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** A separate SQLite file holds an OS-released instance lock. This connection
|
|
2
|
+
* contains no application data and never shares task/history transactions.
|
|
3
|
+
* Unlike PID files it survives crashes without stale-file deletion races. */
|
|
4
|
+
export declare function acquireInstanceLock(filename: string): () => void;
|
|
5
|
+
//# sourceMappingURL=instance-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lock.d.ts","sourceRoot":"","sources":["../../src/orchestration/instance-lock.ts"],"names":[],"mappings":"AAIA;;6EAE6E;AAC7E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,IAAI,CAehE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acquireInstanceLock = acquireInstanceLock;
|
|
4
|
+
const node_sqlite_1 = require("node:sqlite");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
/** A separate SQLite file holds an OS-released instance lock. This connection
|
|
8
|
+
* contains no application data and never shares task/history transactions.
|
|
9
|
+
* Unlike PID files it survives crashes without stale-file deletion races. */
|
|
10
|
+
function acquireInstanceLock(filename) {
|
|
11
|
+
const lock = new node_sqlite_1.DatabaseSync(filename);
|
|
12
|
+
try {
|
|
13
|
+
(0, fs_1.chmodSync)(filename, 0o600);
|
|
14
|
+
lock.exec('PRAGMA busy_timeout=0; BEGIN EXCLUSIVE;');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
lock.close();
|
|
18
|
+
throw new types_1.OrchestrationError('ORCHESTRATION_ALREADY_RUNNING');
|
|
19
|
+
}
|
|
20
|
+
let released = false;
|
|
21
|
+
return () => {
|
|
22
|
+
if (released)
|
|
23
|
+
return;
|
|
24
|
+
released = true;
|
|
25
|
+
try {
|
|
26
|
+
lock.exec('ROLLBACK');
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
lock.close();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=instance-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../../src/orchestration/instance-lock.ts"],"names":[],"mappings":";;AAOA,kDAeC;AAtBD,6CAA2C;AAC3C,2BAA+B;AAC/B,mCAA6C;AAE7C;;6EAE6E;AAC7E,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,0BAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,IAAA,cAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,0BAAkB,CAAC,+BAA+B,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC"}
|