@0xmaxma/claude-gateway 1.8.14 → 2.0.0
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 +377 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +680 -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 +135 -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 +256 -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 +148 -0
- package/dist/orchestration/decisions.js.map +1 -0
- package/dist/orchestration/delivery.d.ts +30 -0
- package/dist/orchestration/delivery.d.ts.map +1 -0
- package/dist/orchestration/delivery.js +219 -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 +232 -0
- package/dist/orchestration/runtime.d.ts.map +1 -0
- package/dist/orchestration/runtime.js +962 -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 +86 -0
- package/dist/orchestration/store.d.ts.map +1 -0
- package/dist/orchestration/store.js +275 -0
- package/dist/orchestration/store.js.map +1 -0
- package/dist/orchestration/task-controls.d.ts +130 -0
- package/dist/orchestration/task-controls.d.ts.map +1 -0
- package/dist/orchestration/task-controls.js +55 -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-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 +109 -0
- package/dist/orchestration/tasks/service.d.ts.map +1 -0
- package/dist/orchestration/tasks/service.js +697 -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 +232 -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,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AGENT_WORKFLOW_RULES = exports.WORKER_WORKFLOW_RULES = exports.WORKFLOW_SCHEMA = void 0;
|
|
4
|
+
exports.parseWorkflow = parseWorkflow;
|
|
5
|
+
exports.advanceWorkflow = advanceWorkflow;
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
const text = { type: 'string', maxLength: 1024 };
|
|
8
|
+
exports.WORKFLOW_SCHEMA = {
|
|
9
|
+
type: 'object', additionalProperties: false,
|
|
10
|
+
properties: {
|
|
11
|
+
phase: text, evidenceVersion: text, nextAction: text,
|
|
12
|
+
checks: { type: 'array', maxItems: 30, items: { type: 'object', additionalProperties: false, properties: { id: text, outcome: text, evidenceVersion: text }, required: ['id', 'outcome', 'evidenceVersion'] } },
|
|
13
|
+
findings: { type: 'array', maxItems: 30, items: { type: 'object', additionalProperties: false, properties: { id: text, status: { type: 'string', enum: ['open', 'resolved', 'dismissed'] }, summary: text }, required: ['id', 'status', 'summary'] } },
|
|
14
|
+
review: { type: 'object', additionalProperties: false, properties: { id: text, kind: { type: 'string', enum: ['full', 'targeted'] }, reason: text }, required: ['id', 'kind'] },
|
|
15
|
+
}, required: ['phase', 'evidenceVersion', 'nextAction', 'checks', 'findings'],
|
|
16
|
+
};
|
|
17
|
+
function parseWorkflow(value) {
|
|
18
|
+
if (value === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
const bad = () => { throw new types_1.OrchestrationError('INVALID_WORKFLOW_CHECKPOINT'); };
|
|
21
|
+
const obj = (v, keys) => { if (!v || typeof v !== 'object' || Array.isArray(v) || Object.keys(v).some(k => !keys.includes(k)))
|
|
22
|
+
bad(); return v; };
|
|
23
|
+
const str = (v) => { if (typeof v !== 'string' || v.length > 1024)
|
|
24
|
+
bad(); };
|
|
25
|
+
const v = obj(value, ['phase', 'evidenceVersion', 'nextAction', 'checks', 'findings', 'review']);
|
|
26
|
+
for (const k of ['phase', 'evidenceVersion', 'nextAction'])
|
|
27
|
+
str(v[k]);
|
|
28
|
+
for (const key of ['checks', 'findings']) {
|
|
29
|
+
const items = v[key];
|
|
30
|
+
if (!Array.isArray(items) || items.length > 30)
|
|
31
|
+
bad();
|
|
32
|
+
for (const item of items) {
|
|
33
|
+
const fields = key === 'checks' ? ['id', 'outcome', 'evidenceVersion'] : ['id', 'status', 'summary'];
|
|
34
|
+
const row = obj(item, fields);
|
|
35
|
+
for (const f of fields)
|
|
36
|
+
str(row[f]);
|
|
37
|
+
if (key === 'findings' && !['open', 'resolved', 'dismissed'].includes(String(row.status)))
|
|
38
|
+
bad();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (v.review !== undefined) {
|
|
42
|
+
const r = obj(v.review, ['id', 'kind', 'reason']);
|
|
43
|
+
str(r.id);
|
|
44
|
+
if (!['full', 'targeted'].includes(String(r.kind)))
|
|
45
|
+
bad();
|
|
46
|
+
if (r.reason !== undefined)
|
|
47
|
+
str(r.reason);
|
|
48
|
+
}
|
|
49
|
+
if (JSON.stringify(v).length > 16384)
|
|
50
|
+
bad();
|
|
51
|
+
return v;
|
|
52
|
+
}
|
|
53
|
+
function advanceWorkflow(previous, checkpoint, attemptId) {
|
|
54
|
+
if (previous?.attemptId === attemptId && JSON.stringify(previous.checkpoint) === JSON.stringify(checkpoint))
|
|
55
|
+
return previous;
|
|
56
|
+
const reviews = [...(previous?.reviews ?? [])], review = checkpoint.review;
|
|
57
|
+
let warning;
|
|
58
|
+
if (review && !reviews.some(r => r.id === review.id && r.evidenceVersion === checkpoint.evidenceVersion)) {
|
|
59
|
+
if (review.kind === 'full' && reviews.some(r => r.kind === 'full') && !review.reason?.trim())
|
|
60
|
+
warning = 'A full review already exists. Verify the changed evidence and unresolved findings; do not restart the full workflow merely because a fix was applied. State the new risk or explicit user request if another full review is necessary.';
|
|
61
|
+
reviews.push({ id: review.id, kind: review.kind, evidenceVersion: checkpoint.evidenceVersion });
|
|
62
|
+
}
|
|
63
|
+
return { version: (previous?.version ?? 0) + 1, observedAt: Date.now(), attemptId, checkpoint, reviews: reviews.slice(-24), warning };
|
|
64
|
+
}
|
|
65
|
+
exports.WORKER_WORKFLOW_RULES = `Work to a verifiable stopping condition, not repeated reassurance. Follow the requested skill's actual steps; do not add a second/native/full review merely because this is delegated work. Track completed verification against the evidence version (commit/tree/document revision), open findings by stable ID, and the next necessary action. Use task_report_progress with checkpoint at phase changes, after a review, after resolving findings, and before finalization; use ordinary text progress for short tasks. This is internal bookkeeping, not a request to message the user each time.
|
|
66
|
+
For a defect, trace the user's actual entry path and test the integration that fails before adding extra defensive layers. A missing helper/export is not proof of the original behavior regression. Check contradictory review findings against reachable code before changing anything. A completed full review is followed by fixes and targeted verification of affected behavior; another full review needs new substantial risk or an explicit user request, not just "one final check". Keep unresolved findings visible; do not suppress real defects to finish faster.
|
|
67
|
+
Choose checks appropriate to the work and machine capacity. Reuse successful checks only for unchanged relevant evidence. Batch related fixes and formatting before commit/push to avoid repeated full-suite hooks. Never bypass required checks, security boundaries or user approvals. Once required work and verification are complete, return the result with evidence and remaining limitations; optional polish or an advisory checkpoint must not restart completed phases. Advisory guidance is fallible: prefer newer direct evidence over stale claims that an earlier fix was already proven. These rules apply equally to native subagents you delegate to.`;
|
|
68
|
+
exports.AGENT_WORKFLOW_RULES = `Preserve the user's requested workflow without adding review rounds or widening its scope. A requested skill owns its procedure; do not append a mandatory second/native review unless the user or the actual skill requires it. Supervise from the latest task_status checkpoint (phase, evidenceVersion, checks and findings), not old progress prose or tool names. Worker checkpoints are reports, not independently verified facts. If evidence is missing or superseded, ask for a fresh checkpoint rather than declaring an old fix correct or forbidding relevant investigation. Advice should name the changed evidence, unresolved finding or concrete next step; do not repeatedly say finish/open PR/run review when those steps are already complete. Do not mistake an idle tool sample for a stall or a browser command from an earlier phase for current work. Keep user updates separate from internal supervision.`;
|
|
69
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/orchestration/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Native Claude stream-json image input; never a file-reading tool grant. */
|
|
2
|
+
export interface InputImage {
|
|
3
|
+
type: 'image';
|
|
4
|
+
source: {
|
|
5
|
+
type: 'base64';
|
|
6
|
+
media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp';
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=input-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-image.d.ts","sourceRoot":"","sources":["../../src/session/input-image.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-image.js","sourceRoot":"","sources":["../../src/session/input-image.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { InputImage } from './input-image';
|
|
1
2
|
import { EventEmitter } from 'events';
|
|
3
|
+
import { RuntimeProfile } from './runtime-profile';
|
|
2
4
|
import { AgentConfig, GatewayConfig } from '../types';
|
|
3
5
|
import { type ChatChannelOrApi } from '../history/types';
|
|
4
6
|
import { SessionStore } from './store';
|
|
@@ -13,6 +15,12 @@ export declare const INTERRUPTED_NO_REPLY_TEXT = "Session was interrupted before
|
|
|
13
15
|
*/
|
|
14
16
|
export declare function resolveMaxHistoryMessages(agentMax?: number, globalMax?: number): number;
|
|
15
17
|
export declare class SessionProcess extends EventEmitter {
|
|
18
|
+
readonly runtimeProfile?: RuntimeProfile | undefined;
|
|
19
|
+
private managedProcessGroup?;
|
|
20
|
+
private containerAttempt?;
|
|
21
|
+
managedGroupStopped: boolean;
|
|
22
|
+
get processId(): number | undefined;
|
|
23
|
+
get managedProcessId(): number | undefined;
|
|
16
24
|
readonly sessionId: string;
|
|
17
25
|
readonly chatId: string;
|
|
18
26
|
readonly source: ChatChannelOrApi;
|
|
@@ -65,7 +73,8 @@ export declare class SessionProcess extends EventEmitter {
|
|
|
65
73
|
private _querySettled;
|
|
66
74
|
private pendingInitialPrompt?;
|
|
67
75
|
private spawnedConnectors;
|
|
68
|
-
constructor(sessionId: string, source: ChatChannelOrApi, agentConfig: AgentConfig, gatewayConfig: GatewayConfig, sessionStore: SessionStore, chatId?: string
|
|
76
|
+
constructor(sessionId: string, source: ChatChannelOrApi, agentConfig: AgentConfig, gatewayConfig: GatewayConfig, sessionStore: SessionStore, chatId?: string, // for telegram/discord: actual chatId; for api: same as sessionId
|
|
77
|
+
runtimeProfile?: RuntimeProfile | undefined);
|
|
69
78
|
/**
|
|
70
79
|
* Resolve the model for this session.
|
|
71
80
|
* Priority: per-session override > config.json on disk > cached agentConfig.
|
|
@@ -162,6 +171,9 @@ export declare class SessionProcess extends EventEmitter {
|
|
|
162
171
|
* it is a tool-less API session that gets no MCP servers at all.
|
|
163
172
|
*/
|
|
164
173
|
connectorConfigChanged(connectorId: string, resolvedServer: unknown): boolean;
|
|
174
|
+
/** Only trust connector namespaces actually written into this subprocess config. */
|
|
175
|
+
isSpawnedConnectorTool(name: string): boolean;
|
|
176
|
+
private managedMcpConfigPath?;
|
|
165
177
|
private writeMcpConfig;
|
|
166
178
|
/** Find the first API key that has access to this agent (agents: '*' or includes agentId). */
|
|
167
179
|
private findApiKeyForAgent;
|
|
@@ -191,7 +203,7 @@ export declare class SessionProcess extends EventEmitter {
|
|
|
191
203
|
* that Claude Code was replaying on every request.
|
|
192
204
|
*/
|
|
193
205
|
private recoverFromCorruptedThinking;
|
|
194
|
-
sendMessage(text: string): void;
|
|
206
|
+
sendMessage(text: string, images?: readonly InputImage[]): void;
|
|
195
207
|
/**
|
|
196
208
|
* Send a control keystroke to the PTY wrapper (Epic #195, Phase 3b). Only
|
|
197
209
|
* meaningful on the interactive (pty-shell) backend — the headless backend has
|
|
@@ -215,7 +227,7 @@ export declare class SessionProcess extends EventEmitter {
|
|
|
215
227
|
private isTrackedDispatchStillOutstanding;
|
|
216
228
|
private resetBackgroundDispatchState;
|
|
217
229
|
/**
|
|
218
|
-
* Extend Telegram's working state only while a
|
|
230
|
+
* Extend Telegram's working state only while a agent session is waiting for
|
|
219
231
|
* background Agent/Workflow/Monitor work. A bounded expiry (BACKGROUND_AGENT_GRACE_MS,
|
|
220
232
|
* fixed from the dispatch timestamp — not renewed by later activity) releases
|
|
221
233
|
* the state if the dispatch never sends its completion notification within
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/session/process.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/session/process.ts"],"names":[],"mappings":"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"}
|
package/dist/session/process.js
CHANGED
|
@@ -38,12 +38,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.SessionProcess = exports.INTERRUPTED_NO_REPLY_TEXT = exports.MAX_HISTORY_MESSAGES = void 0;
|
|
40
40
|
exports.resolveMaxHistoryMessages = resolveMaxHistoryMessages;
|
|
41
|
+
const container_1 = require("../orchestration/container");
|
|
41
42
|
const child_process_1 = require("child_process");
|
|
42
43
|
const crypto_1 = require("crypto");
|
|
43
44
|
const events_1 = require("events");
|
|
44
45
|
const fs = __importStar(require("fs"));
|
|
45
46
|
const os = __importStar(require("os"));
|
|
46
47
|
const path = __importStar(require("path"));
|
|
48
|
+
const runtime_profile_1 = require("./runtime-profile");
|
|
49
|
+
const string_decoder_1 = require("string_decoder");
|
|
50
|
+
const process_supervisor_1 = require("../orchestration/process-supervisor");
|
|
51
|
+
const capacity_1 = require("../orchestration/capacity");
|
|
47
52
|
const chokidar_1 = __importDefault(require("chokidar"));
|
|
48
53
|
const knowledge_1 = require("../agent/knowledge");
|
|
49
54
|
const config_1 = require("../agent/dreaming/config");
|
|
@@ -232,8 +237,13 @@ const STATE_SUBDIR = {
|
|
|
232
237
|
wechat: '.wechat-state',
|
|
233
238
|
};
|
|
234
239
|
class SessionProcess extends events_1.EventEmitter {
|
|
235
|
-
|
|
240
|
+
get processId() { return this.isRunning() ? this.process?.pid : undefined; }
|
|
241
|
+
get managedProcessId() { return this.managedProcessGroup; }
|
|
242
|
+
constructor(sessionId, source, agentConfig, gatewayConfig, sessionStore, chatId, // for telegram/discord: actual chatId; for api: same as sessionId
|
|
243
|
+
runtimeProfile) {
|
|
236
244
|
super();
|
|
245
|
+
this.runtimeProfile = runtimeProfile;
|
|
246
|
+
this.managedGroupStopped = false;
|
|
237
247
|
this.lastActivityAt = Date.now(); // accessible by AgentRunner for eviction sort
|
|
238
248
|
// Wall-clock time of the most recent BACKGROUND_DISPATCH_TOOLS tool_use seen
|
|
239
249
|
// in this session's own turn, while no NEWER turn has started since. Cleared
|
|
@@ -363,6 +373,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
363
373
|
return path.join(this.agentConfig.workspace, STATE_SUBDIR[this.sessionChannel], 'typing');
|
|
364
374
|
}
|
|
365
375
|
appendToStore(msg) {
|
|
376
|
+
if (this.runtimeProfile)
|
|
377
|
+
return Promise.resolve(); // orchestration owns canonical history operations
|
|
366
378
|
return this.source !== 'api'
|
|
367
379
|
? this.sessionStore.appendTelegramMessage(this.agentConfig.id, this.chatId, this.sessionId, msg, this.sessionChannel)
|
|
368
380
|
: this.sessionStore.appendMessage(this.agentConfig.id, this.sessionId, msg);
|
|
@@ -407,7 +419,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
407
419
|
* re-spawn it with the latest model from config.json.
|
|
408
420
|
*/
|
|
409
421
|
setupRestartWatcher() {
|
|
410
|
-
if (this.restartWatcher)
|
|
422
|
+
if (this.restartWatcher || this.runtimeProfile)
|
|
411
423
|
return;
|
|
412
424
|
this.restartWatcher = chokidar_1.default.watch(this.restartSignalPath, { ignoreInitial: true });
|
|
413
425
|
this.restartWatcher.on('add', () => {
|
|
@@ -648,7 +660,36 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
648
660
|
const now = resolvedServer === undefined ? undefined : connectorFingerprint(resolvedServer);
|
|
649
661
|
return this.spawnedConnectors.get(connectorId) !== now;
|
|
650
662
|
}
|
|
663
|
+
/** Only trust connector namespaces actually written into this subprocess config. */
|
|
664
|
+
isSpawnedConnectorTool(name) {
|
|
665
|
+
if (!this.spawnedConnectors || this.agentConfig.type === 'app-agent' ||
|
|
666
|
+
this.agentConfig.allow_tools === false || this.runtimeProfile?.role === 'agent' || this.runtimeProfile?.connectorsAllowed === false ||
|
|
667
|
+
(this.runtimeProfile?.role === 'worker' && !this.runtimeProfile.hostExecution))
|
|
668
|
+
return false;
|
|
669
|
+
return [...this.spawnedConnectors.keys()].some(id => name.startsWith(`mcp__${id}__`) && name.length > id.length + 7);
|
|
670
|
+
}
|
|
651
671
|
writeMcpConfig() {
|
|
672
|
+
if (this.runtimeProfile) {
|
|
673
|
+
// Orchestrators dispatch execution; only eligible workers receive connectors.
|
|
674
|
+
// App and isolated workers must never receive host connector credentials
|
|
675
|
+
// or start host-configured stdio servers inside their execution boundary.
|
|
676
|
+
if (this.runtimeProfile.role === 'agent' || this.agentConfig.allow_tools === false || this.runtimeProfile.connectorsAllowed === false || this.agentConfig.type === 'app-agent' || (this.runtimeProfile.role === 'worker' && !this.runtimeProfile.hostExecution))
|
|
677
|
+
return this.runtimeProfile.mcpConfigPath;
|
|
678
|
+
const ticket = JSON.parse(fs.readFileSync(this.runtimeProfile.mcpConfigPath, 'utf8'));
|
|
679
|
+
const connectors = (0, resolve_1.resolveEnabledConnectors)(this.agentConfig, this.gatewayConfig.gateway.customConnectors, this.gatewayConfig.gateway.connectorsDefaultEnabled ?? true);
|
|
680
|
+
this.spawnedConnectors = new Map();
|
|
681
|
+
for (const [id, server] of Object.entries(connectors)) {
|
|
682
|
+
if ((0, custom_1.isReservedConnectorId)(id))
|
|
683
|
+
continue;
|
|
684
|
+
this.spawnedConnectors.set(id, connectorFingerprint(server));
|
|
685
|
+
}
|
|
686
|
+
const servers = Object.fromEntries([...this.spawnedConnectors.keys()].map(id => [id, connectors[id]]));
|
|
687
|
+
const configPath = path.join(path.dirname(this.runtimeProfile.mcpConfigPath), 'managed-connectors.json');
|
|
688
|
+
fs.writeFileSync(configPath, JSON.stringify({ mcpServers: { ...servers, ...ticket.mcpServers } }), { mode: 0o600 });
|
|
689
|
+
fs.chmodSync(configPath, 0o600);
|
|
690
|
+
this.managedMcpConfigPath = configPath;
|
|
691
|
+
return configPath;
|
|
692
|
+
}
|
|
652
693
|
if (this.source === 'api' && !this.agentConfig.allow_tools)
|
|
653
694
|
return null;
|
|
654
695
|
const stateDir = path.join(this.agentConfig.workspace, '.telegram-state');
|
|
@@ -846,6 +887,20 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
846
887
|
'--print',
|
|
847
888
|
'--verbose',
|
|
848
889
|
];
|
|
890
|
+
if (this.runtimeProfile) {
|
|
891
|
+
if (this.agentConfig.type === 'app-agent' && this.runtimeProfile.hostExecution)
|
|
892
|
+
throw new Error('Container roles cannot use host execution');
|
|
893
|
+
if (this.gatewayConfig.gateway.headless === false)
|
|
894
|
+
throw new Error('Orchestration runtime profile is only verified for the configured headless backend');
|
|
895
|
+
const context = this.runtimeProfile.context ?? fs.readFileSync(path.join(this.agentConfig.workspace, 'CLAUDE.md'), 'utf8');
|
|
896
|
+
args.push(...(0, runtime_profile_1.runtimeProfileArgs)({ ...this.runtimeProfile, context, checkpointCommand: this.containerAttempt && this.runtimeProfile.checkpointCommand ? `node ${this.containerAttempt.directory}/checkpoint.cjs ${this.containerAttempt.directory}/ticket.json` : this.runtimeProfile.checkpointCommand, containerExecution: this.agentConfig.type === 'app-agent', mcpConfigPath: this.containerAttempt?.config ?? mcpConfigPath ?? this.runtimeProfile.mcpConfigPath, skillPluginDir: this.containerAttempt && this.runtimeProfile.skillPluginDir ? this.containerAttempt.directory + '/skill-plugin' : this.runtimeProfile.skillPluginDir }, this.agentConfig.claude.extraFlags ?? []));
|
|
897
|
+
if (this.runtimeProfile.workerSession) {
|
|
898
|
+
const session = this.runtimeProfile.workerSession;
|
|
899
|
+
args.push(session.resume ? '--resume' : '--session-id', session.id);
|
|
900
|
+
}
|
|
901
|
+
args.push('--dangerously-skip-permissions');
|
|
902
|
+
return args;
|
|
903
|
+
}
|
|
849
904
|
if (mcpConfigPath) {
|
|
850
905
|
// NOTE: --strict-mcp-config is intentionally omitted.
|
|
851
906
|
// With --strict-mcp-config, Claude Code blocks all plugin MCP servers (e.g. figma).
|
|
@@ -869,17 +924,22 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
869
924
|
return args;
|
|
870
925
|
// NOTE: NO --channels flag — messages arrive via stdin injection, not Telegram channels
|
|
871
926
|
}
|
|
872
|
-
static toStreamJsonTurn(text) {
|
|
927
|
+
static toStreamJsonTurn(text, images = []) {
|
|
873
928
|
return JSON.stringify({
|
|
874
929
|
type: 'user',
|
|
875
|
-
message: { role: 'user', content: [{ type: 'text', text }] },
|
|
930
|
+
message: { role: 'user', content: [{ type: 'text', text }, ...images] },
|
|
876
931
|
});
|
|
877
932
|
}
|
|
878
933
|
async spawnProcess() {
|
|
879
934
|
const { historyPrompt, loadedAtSpawn, archivedCount, messageCountAtSpawn } = await this.buildInitialPrompt();
|
|
880
935
|
this.spawnContext = { loadedAtSpawn, archivedCount, messageCountAtSpawn };
|
|
881
936
|
// Determine if this is a docker-exec app-agent before computing paths
|
|
937
|
+
(0, container_1.assertContainerBinding)(this.agentConfig, this.runtimeProfile);
|
|
882
938
|
const isAppAgent = this.agentConfig.type === 'app-agent' && !!this.agentConfig.container;
|
|
939
|
+
if (isAppAgent && this.runtimeProfile) {
|
|
940
|
+
this.containerAttempt = await (0, container_1.prepareContainerProfile)(this.agentConfig, this.runtimeProfile);
|
|
941
|
+
this.runtimeProfile.context = await (0, container_1.containerNode)(this.agentConfig.container, "process.stdout.write(require('fs').readFileSync('/workspace/CLAUDE.md','utf8'))");
|
|
942
|
+
}
|
|
883
943
|
const mcpConfigPath = this.writeMcpConfig();
|
|
884
944
|
// For app-agents, Claude runs inside the container where /workspace is mounted.
|
|
885
945
|
// Convert host paths (agentConfig.workspace-relative) to container paths (/workspace/...).
|
|
@@ -979,7 +1039,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
979
1039
|
CLAUDE_WORKSPACE: '/workspace',
|
|
980
1040
|
GATEWAY_RESTART_SIGNAL_PATH: containerRestartPath,
|
|
981
1041
|
};
|
|
982
|
-
if (process.env.GATEWAY_API_URL)
|
|
1042
|
+
if (!this.runtimeProfile && process.env.GATEWAY_API_URL)
|
|
983
1043
|
containerEnv.GATEWAY_API_URL = process.env.GATEWAY_API_URL;
|
|
984
1044
|
// Secrets are forwarded by NAME only (`-e KEY`, no `=value`), which makes
|
|
985
1045
|
// Docker read the value from this process's own environment (set on the spawn
|
|
@@ -990,8 +1050,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
990
1050
|
// TELEGRAM_BOT_TOKEN travels by name for exactly the same reason as the
|
|
991
1051
|
// Claude credentials — it is a bearer token for the agent's whole bot
|
|
992
1052
|
// account. It is already placed in the spawn env below, unconditionally.
|
|
993
|
-
const containerAuthEnv = isAppAgent ? this.resolveContainerAuthEnv() : {};
|
|
994
|
-
const byNameKeys = ['TELEGRAM_BOT_TOKEN', ...Object.keys(containerAuthEnv)];
|
|
1053
|
+
const containerAuthEnv = isAppAgent || (this.runtimeProfile?.checkpointCommand && !this.runtimeProfile.hostExecution) ? this.resolveContainerAuthEnv() : {};
|
|
1054
|
+
const byNameKeys = [...(this.runtimeProfile ? [] : ['TELEGRAM_BOT_TOKEN']), ...Object.keys(containerAuthEnv)];
|
|
995
1055
|
const dockerEnvFlags = [
|
|
996
1056
|
...Object.entries(containerEnv).flatMap(([k, v]) => ['-e', `${k}=${v}`]),
|
|
997
1057
|
...byNameKeys.flatMap((k) => ['-e', k]),
|
|
@@ -1001,7 +1061,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1001
1061
|
'exec', '--workdir', '/workspace', '--user', String(containerUid), '-i',
|
|
1002
1062
|
...dockerEnvFlags,
|
|
1003
1063
|
this.agentConfig.container,
|
|
1004
|
-
this.agentConfig.claudeBin ?? claudeBin,
|
|
1064
|
+
...(this.containerAttempt ? ['node', '-e', container_1.CONTAINER_SUPERVISOR, this.containerAttempt.directory, this.agentConfig.claudeBin ?? claudeBin] : [this.agentConfig.claudeBin ?? claudeBin]),
|
|
1005
1065
|
...allArgs,
|
|
1006
1066
|
]
|
|
1007
1067
|
: allArgs;
|
|
@@ -1016,22 +1076,42 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1016
1076
|
// so a bare `claude` resolves even if the gateway itself was launched with a
|
|
1017
1077
|
// minimal PATH that predates the native-installer migration.
|
|
1018
1078
|
const hardenedPath = (0, claude_bin_1.pathWithNativeBin)();
|
|
1019
|
-
const
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1079
|
+
const capacityEnabled = Boolean(this.runtimeProfile || this.gatewayConfig.gateway.processLimits || this.gatewayConfig.agents?.some(agent => agent.orchestration?.enabled));
|
|
1080
|
+
const releaseCapacity = this.runtimeProfile?.capacityReserved ? () => { } : (0, capacity_1.gatewayCapacity)(this.gatewayConfig).acquire(this.runtimeProfile?.role ?? 'legacy', capacityEnabled);
|
|
1081
|
+
if (!releaseCapacity)
|
|
1082
|
+
throw Object.assign(new Error('Gateway process capacity exceeded'), { code: 'CAPACITY_EXCEEDED' });
|
|
1083
|
+
let proc;
|
|
1084
|
+
try {
|
|
1085
|
+
proc = (0, child_process_1.spawn)(spawnBin, spawnArgs, {
|
|
1086
|
+
env: {
|
|
1087
|
+
...process.env,
|
|
1088
|
+
...(!isAppAgent && this.runtimeProfile?.checkpointCommand && !this.runtimeProfile.hostExecution ? Object.fromEntries(CONTAINER_CREDENTIAL_KEYS.map(key => [key, undefined])) : {}),
|
|
1089
|
+
...containerAuthEnv,
|
|
1090
|
+
...(hardenedPath ? { PATH: hardenedPath } : {}),
|
|
1091
|
+
GATEWAY_ORIGIN_SESSION_ID: this.runtimeProfile?.originSessionId ?? this.sessionId,
|
|
1092
|
+
GATEWAY_TASK_ID: this.runtimeProfile?.taskId ?? '',
|
|
1093
|
+
GATEWAY_TASK_ATTEMPT_ID: this.runtimeProfile?.attemptId ?? '',
|
|
1094
|
+
CLAUDE_WORKSPACE: isAppAgent ? '/workspace' : this.agentConfig.workspace,
|
|
1095
|
+
TELEGRAM_BOT_TOKEN: this.agentConfig.telegram?.botToken ?? '',
|
|
1096
|
+
GATEWAY_RESTART_SIGNAL_PATH: this.restartSignalPath,
|
|
1097
|
+
...(ptyRealBin ? { CLAUDE_REAL_BIN: ptyRealBin } : {}),
|
|
1098
|
+
...(ptyHeartbeatPath ? { PTY_SHELL_HEARTBEAT_PATH: ptyHeartbeatPath } : {}),
|
|
1099
|
+
...(ptyStreamSocketPath ? { PTY_SHELL_STREAM_SOCKET: ptyStreamSocketPath } : {}),
|
|
1100
|
+
},
|
|
1101
|
+
cwd: this.agentConfig.workspace,
|
|
1102
|
+
...(this.runtimeProfile?.role === 'worker' && process.platform === 'linux' ? { detached: true } : {}),
|
|
1103
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
1104
|
+
});
|
|
1105
|
+
}
|
|
1106
|
+
catch (error) {
|
|
1107
|
+
releaseCapacity();
|
|
1108
|
+
throw error;
|
|
1109
|
+
}
|
|
1034
1110
|
this.process = proc;
|
|
1111
|
+
proc.once('exit', releaseCapacity);
|
|
1112
|
+
proc.once('error', releaseCapacity);
|
|
1113
|
+
if (this.runtimeProfile?.role === 'worker' && process.platform === 'linux')
|
|
1114
|
+
this.managedProcessGroup = proc.pid;
|
|
1035
1115
|
// Fresh child is alive: clear any exit observed for a prior process (e.g.
|
|
1036
1116
|
// after an auto-restart), so isRunning()/interrupt() see it as live.
|
|
1037
1117
|
this._exited = false;
|
|
@@ -1050,7 +1130,10 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1050
1130
|
// becomes Turn 2 — two separate responses forwarded to the channel. Deferring
|
|
1051
1131
|
// history to sendMessage() bundles [history + activation + user reply] into a
|
|
1052
1132
|
// single turn so Claude produces exactly one response.
|
|
1053
|
-
if (this.
|
|
1133
|
+
if (this.runtimeProfile) {
|
|
1134
|
+
this.pendingInitialPrompt = historyPrompt ?? undefined;
|
|
1135
|
+
}
|
|
1136
|
+
else if (this.source !== 'api') {
|
|
1054
1137
|
if (historyPrompt) {
|
|
1055
1138
|
// Has history: defer to first incoming user message to prevent double-response.
|
|
1056
1139
|
this.pendingInitialPrompt = `${historyPrompt}\n\n${CHANNELS_ACTIVATION_PROMPT}`;
|
|
@@ -1064,7 +1147,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1064
1147
|
this.pendingInitialPrompt = historyPrompt;
|
|
1065
1148
|
}
|
|
1066
1149
|
// Capture stdout — emit output events + persist assistant replies
|
|
1067
|
-
const typingDir = this.source !== 'api' ? this.typingDir : null;
|
|
1150
|
+
const typingDir = this.source !== 'api' && !this.runtimeProfile ? this.typingDir : null;
|
|
1068
1151
|
const heartbeatPath = typingDir ? path.join(typingDir, `${this.chatId}.heartbeat`) : null;
|
|
1069
1152
|
const statusPath = typingDir ? path.join(typingDir, `${this.chatId}.status`) : null;
|
|
1070
1153
|
const writeStatus = (status, detail) => {
|
|
@@ -1090,10 +1173,12 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1090
1173
|
// Track context from message_start events (first sub-call of each turn) for accurate context % display.
|
|
1091
1174
|
// result.usage is cumulative across all sub-calls; message_start.usage reflects a single API call's context.
|
|
1092
1175
|
let lastMessageStartContext = 0;
|
|
1176
|
+
let orchestrationOutputBuffer = '';
|
|
1177
|
+
const orchestrationDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
1093
1178
|
proc.stdout?.on('data', (data) => {
|
|
1094
1179
|
// Child produced output => the session is doing real work right now. Count
|
|
1095
1180
|
// this as activity so the idle reaper measures "time since the session last
|
|
1096
|
-
// did anything", not just "time since the
|
|
1181
|
+
// did anything", not just "time since the agent last injected a message".
|
|
1097
1182
|
// Without this, a self-paced loop (a /loop in dynamic mode using
|
|
1098
1183
|
// ScheduleWakeup) that wakes itself and works entirely inside this child
|
|
1099
1184
|
// process stays invisible to the idle timer and gets reaped mid-flight.
|
|
@@ -1105,7 +1190,11 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1105
1190
|
}
|
|
1106
1191
|
catch { }
|
|
1107
1192
|
}
|
|
1108
|
-
const lines =
|
|
1193
|
+
const lines = this.runtimeProfile
|
|
1194
|
+
? (orchestrationOutputBuffer + orchestrationDecoder.write(data)).split('\n')
|
|
1195
|
+
: data.toString().split('\n');
|
|
1196
|
+
if (this.runtimeProfile)
|
|
1197
|
+
orchestrationOutputBuffer = lines.pop() ?? '';
|
|
1109
1198
|
for (const line of lines) {
|
|
1110
1199
|
if (!line.trim())
|
|
1111
1200
|
continue;
|
|
@@ -1411,7 +1500,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1411
1500
|
if (this.lastSpawnAt && Date.now() - this.lastSpawnAt >= RESTART_COUNT_RESET_MS) {
|
|
1412
1501
|
this.restartCount = 0;
|
|
1413
1502
|
}
|
|
1414
|
-
if (!this.stopping)
|
|
1503
|
+
if (!this.stopping && !this.runtimeProfile)
|
|
1415
1504
|
this.scheduleRestart();
|
|
1416
1505
|
});
|
|
1417
1506
|
proc.on('error', (err) => {
|
|
@@ -1499,6 +1588,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1499
1588
|
* that Claude Code was replaying on every request.
|
|
1500
1589
|
*/
|
|
1501
1590
|
recoverFromCorruptedThinking() {
|
|
1591
|
+
if (this.runtimeProfile)
|
|
1592
|
+
return; // recovery belongs to the orchestration, never replay task effects
|
|
1502
1593
|
if (this.restartRequested || this.stopping)
|
|
1503
1594
|
return; // already respawning
|
|
1504
1595
|
if (this.thinkingRecoveryCount >= MAX_THINKING_RECOVERIES) {
|
|
@@ -1518,7 +1609,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1518
1609
|
if (this.process)
|
|
1519
1610
|
this.process.kill('SIGTERM');
|
|
1520
1611
|
}
|
|
1521
|
-
sendMessage(text) {
|
|
1612
|
+
sendMessage(text, images = []) {
|
|
1522
1613
|
if (!this.process?.stdin?.writable) {
|
|
1523
1614
|
this.logger.warn('Cannot send message: subprocess not running', {
|
|
1524
1615
|
sessionId: this.sessionId,
|
|
@@ -1531,7 +1622,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1531
1622
|
// Signal queued state + ensure typing signal file exists for this turn.
|
|
1532
1623
|
// If the previous turn already called stop() and cleared the typing loop,
|
|
1533
1624
|
// re-creating the signal file here lets stop() restart the loop for queued turns.
|
|
1534
|
-
if (this.source !== 'api') {
|
|
1625
|
+
if (this.source !== 'api' && !this.runtimeProfile) {
|
|
1535
1626
|
const typingDir = this.typingDir;
|
|
1536
1627
|
const typingSignalPath = path.join(typingDir, this.chatId);
|
|
1537
1628
|
const statusPath = path.join(typingDir, `${this.chatId}.status`);
|
|
@@ -1547,7 +1638,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1547
1638
|
? `${this.pendingInitialPrompt}\n\n${text}`
|
|
1548
1639
|
: text;
|
|
1549
1640
|
this.pendingInitialPrompt = undefined;
|
|
1550
|
-
this.process.stdin.write(SessionProcess.toStreamJsonTurn(fullText) + '\n');
|
|
1641
|
+
this.process.stdin.write(SessionProcess.toStreamJsonTurn(fullText, images) + '\n');
|
|
1551
1642
|
}
|
|
1552
1643
|
/**
|
|
1553
1644
|
* Send a control keystroke to the PTY wrapper (Epic #195, Phase 3b). Only
|
|
@@ -1652,7 +1743,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1652
1743
|
this.clearBackgroundWaitTimer();
|
|
1653
1744
|
}
|
|
1654
1745
|
/**
|
|
1655
|
-
* Extend Telegram's working state only while a
|
|
1746
|
+
* Extend Telegram's working state only while a agent session is waiting for
|
|
1656
1747
|
* background Agent/Workflow/Monitor work. A bounded expiry (BACKGROUND_AGENT_GRACE_MS,
|
|
1657
1748
|
* fixed from the dispatch timestamp — not renewed by later activity) releases
|
|
1658
1749
|
* the state if the dispatch never sends its completion notification within
|
|
@@ -1661,7 +1752,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1661
1752
|
* BACKGROUND_AGENT_GRACE_MS.
|
|
1662
1753
|
*/
|
|
1663
1754
|
retainBackgroundWorkingState() {
|
|
1664
|
-
if (this.source !== 'telegram' || !this.hasLikelyOutstandingBackgroundWork())
|
|
1755
|
+
if (this.runtimeProfile || this.source !== 'telegram' || !this.hasLikelyOutstandingBackgroundWork())
|
|
1665
1756
|
return false;
|
|
1666
1757
|
const processingPath = path.join(this.typingDir, `${this.chatId}.processing`);
|
|
1667
1758
|
try {
|
|
@@ -1713,7 +1804,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1713
1804
|
}
|
|
1714
1805
|
}
|
|
1715
1806
|
this.emit('processingChange', active);
|
|
1716
|
-
if (this.source === 'telegram') {
|
|
1807
|
+
if (this.source === 'telegram' && !this.runtimeProfile) {
|
|
1717
1808
|
const processingPath = path.join(this.typingDir, `${this.chatId}.processing`);
|
|
1718
1809
|
try {
|
|
1719
1810
|
if (active) {
|
|
@@ -1816,6 +1907,16 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1816
1907
|
}
|
|
1817
1908
|
async stop() {
|
|
1818
1909
|
this.stopping = true;
|
|
1910
|
+
if (this.containerAttempt && this.agentConfig.container) {
|
|
1911
|
+
this.managedGroupStopped = await (0, container_1.stopContainerProfile)(this.agentConfig.container, this.containerAttempt.directory);
|
|
1912
|
+
this.containerAttempt = undefined;
|
|
1913
|
+
}
|
|
1914
|
+
if (this.managedProcessGroup) {
|
|
1915
|
+
const hostStopped = await (0, process_supervisor_1.stopProcessGroup)(this.managedProcessGroup);
|
|
1916
|
+
this.managedGroupStopped = this.agentConfig.type === 'app-agent' ? this.managedGroupStopped && hostStopped : hostStopped;
|
|
1917
|
+
if (this.managedGroupStopped)
|
|
1918
|
+
this.managedProcessGroup = undefined;
|
|
1919
|
+
}
|
|
1819
1920
|
this.resetBackgroundDispatchState();
|
|
1820
1921
|
await this.restartWatcher?.close();
|
|
1821
1922
|
this.restartWatcher = null;
|
|
@@ -1823,7 +1924,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1823
1924
|
fs.rmSync(this.restartSignalPath, { force: true });
|
|
1824
1925
|
}
|
|
1825
1926
|
catch { }
|
|
1826
|
-
if (this.source === 'telegram') {
|
|
1927
|
+
if (this.source === 'telegram' && !this.runtimeProfile) {
|
|
1827
1928
|
try {
|
|
1828
1929
|
fs.rmSync(path.join(this.typingDir, `${this.chatId}.processing`), { force: true });
|
|
1829
1930
|
}
|
|
@@ -1838,6 +1939,13 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1838
1939
|
// bind-mounts this path) can be alive for up to the 10s graceful-shutdown
|
|
1839
1940
|
// window immediately after this point, and must not find it gone under it.
|
|
1840
1941
|
const removeSessionDir = () => {
|
|
1942
|
+
if (this.managedMcpConfigPath) {
|
|
1943
|
+
try {
|
|
1944
|
+
fs.rmSync(this.managedMcpConfigPath, { force: true });
|
|
1945
|
+
}
|
|
1946
|
+
catch { }
|
|
1947
|
+
this.managedMcpConfigPath = undefined;
|
|
1948
|
+
}
|
|
1841
1949
|
try {
|
|
1842
1950
|
fs.rmSync(path.join(this.agentConfig.workspace, '.sessions', this.sessionId), { recursive: true, force: true });
|
|
1843
1951
|
}
|