@0xmaxma/claude-gateway 1.8.13 → 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 -1605
- package/config.template.json +7 -1
- package/dist/agent/runner.d.ts +394 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +867 -38
- 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 +372 -11
- 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/api/wechat-access.d.ts +45 -0
- package/dist/api/wechat-access.d.ts.map +1 -0
- package/dist/api/wechat-access.js +48 -0
- package/dist/api/wechat-access.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 +12 -1
- package/dist/history/types.d.ts.map +1 -1
- package/dist/history/types.js +10 -1
- package/dist/history/types.js.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 +144 -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 +54 -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 +207 -0
- package/dist/wechat/ilink-client.d.ts.map +1 -0
- package/dist/wechat/ilink-client.js +660 -0
- package/dist/wechat/ilink-client.js.map +1 -0
- package/dist/wechat/manager.d.ts +93 -0
- package/dist/wechat/manager.d.ts.map +1 -0
- package/dist/wechat/manager.js +409 -0
- package/dist/wechat/manager.js.map +1 -0
- 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 -35
- 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/tools/wechat/client.ts +49 -0
- package/mcp/tools/wechat/module.ts +88 -0
- 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");
|
|
@@ -229,10 +234,16 @@ const STATE_SUBDIR = {
|
|
|
229
234
|
// in config.json, not here — see AgentConfig.whatsapp_cloud's doc comment),
|
|
230
235
|
// so unlike `whatsapp` above this is single-purpose: message-turn state only.
|
|
231
236
|
whatsapp_cloud: '.whatsapp-cloud-state',
|
|
237
|
+
wechat: '.wechat-state',
|
|
232
238
|
};
|
|
233
239
|
class SessionProcess extends events_1.EventEmitter {
|
|
234
|
-
|
|
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) {
|
|
235
244
|
super();
|
|
245
|
+
this.runtimeProfile = runtimeProfile;
|
|
246
|
+
this.managedGroupStopped = false;
|
|
236
247
|
this.lastActivityAt = Date.now(); // accessible by AgentRunner for eviction sort
|
|
237
248
|
// Wall-clock time of the most recent BACKGROUND_DISPATCH_TOOLS tool_use seen
|
|
238
249
|
// in this session's own turn, while no NEWER turn has started since. Cleared
|
|
@@ -362,6 +373,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
362
373
|
return path.join(this.agentConfig.workspace, STATE_SUBDIR[this.sessionChannel], 'typing');
|
|
363
374
|
}
|
|
364
375
|
appendToStore(msg) {
|
|
376
|
+
if (this.runtimeProfile)
|
|
377
|
+
return Promise.resolve(); // orchestration owns canonical history operations
|
|
365
378
|
return this.source !== 'api'
|
|
366
379
|
? this.sessionStore.appendTelegramMessage(this.agentConfig.id, this.chatId, this.sessionId, msg, this.sessionChannel)
|
|
367
380
|
: this.sessionStore.appendMessage(this.agentConfig.id, this.sessionId, msg);
|
|
@@ -406,7 +419,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
406
419
|
* re-spawn it with the latest model from config.json.
|
|
407
420
|
*/
|
|
408
421
|
setupRestartWatcher() {
|
|
409
|
-
if (this.restartWatcher)
|
|
422
|
+
if (this.restartWatcher || this.runtimeProfile)
|
|
410
423
|
return;
|
|
411
424
|
this.restartWatcher = chokidar_1.default.watch(this.restartSignalPath, { ignoreInitial: true });
|
|
412
425
|
this.restartWatcher.on('add', () => {
|
|
@@ -647,7 +660,36 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
647
660
|
const now = resolvedServer === undefined ? undefined : connectorFingerprint(resolvedServer);
|
|
648
661
|
return this.spawnedConnectors.get(connectorId) !== now;
|
|
649
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
|
+
}
|
|
650
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
|
+
}
|
|
651
693
|
if (this.source === 'api' && !this.agentConfig.allow_tools)
|
|
652
694
|
return null;
|
|
653
695
|
const stateDir = path.join(this.agentConfig.workspace, '.telegram-state');
|
|
@@ -845,6 +887,20 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
845
887
|
'--print',
|
|
846
888
|
'--verbose',
|
|
847
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
|
+
}
|
|
848
904
|
if (mcpConfigPath) {
|
|
849
905
|
// NOTE: --strict-mcp-config is intentionally omitted.
|
|
850
906
|
// With --strict-mcp-config, Claude Code blocks all plugin MCP servers (e.g. figma).
|
|
@@ -868,17 +924,22 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
868
924
|
return args;
|
|
869
925
|
// NOTE: NO --channels flag — messages arrive via stdin injection, not Telegram channels
|
|
870
926
|
}
|
|
871
|
-
static toStreamJsonTurn(text) {
|
|
927
|
+
static toStreamJsonTurn(text, images = []) {
|
|
872
928
|
return JSON.stringify({
|
|
873
929
|
type: 'user',
|
|
874
|
-
message: { role: 'user', content: [{ type: 'text', text }] },
|
|
930
|
+
message: { role: 'user', content: [{ type: 'text', text }, ...images] },
|
|
875
931
|
});
|
|
876
932
|
}
|
|
877
933
|
async spawnProcess() {
|
|
878
934
|
const { historyPrompt, loadedAtSpawn, archivedCount, messageCountAtSpawn } = await this.buildInitialPrompt();
|
|
879
935
|
this.spawnContext = { loadedAtSpawn, archivedCount, messageCountAtSpawn };
|
|
880
936
|
// Determine if this is a docker-exec app-agent before computing paths
|
|
937
|
+
(0, container_1.assertContainerBinding)(this.agentConfig, this.runtimeProfile);
|
|
881
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
|
+
}
|
|
882
943
|
const mcpConfigPath = this.writeMcpConfig();
|
|
883
944
|
// For app-agents, Claude runs inside the container where /workspace is mounted.
|
|
884
945
|
// Convert host paths (agentConfig.workspace-relative) to container paths (/workspace/...).
|
|
@@ -978,7 +1039,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
978
1039
|
CLAUDE_WORKSPACE: '/workspace',
|
|
979
1040
|
GATEWAY_RESTART_SIGNAL_PATH: containerRestartPath,
|
|
980
1041
|
};
|
|
981
|
-
if (process.env.GATEWAY_API_URL)
|
|
1042
|
+
if (!this.runtimeProfile && process.env.GATEWAY_API_URL)
|
|
982
1043
|
containerEnv.GATEWAY_API_URL = process.env.GATEWAY_API_URL;
|
|
983
1044
|
// Secrets are forwarded by NAME only (`-e KEY`, no `=value`), which makes
|
|
984
1045
|
// Docker read the value from this process's own environment (set on the spawn
|
|
@@ -989,8 +1050,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
989
1050
|
// TELEGRAM_BOT_TOKEN travels by name for exactly the same reason as the
|
|
990
1051
|
// Claude credentials — it is a bearer token for the agent's whole bot
|
|
991
1052
|
// account. It is already placed in the spawn env below, unconditionally.
|
|
992
|
-
const containerAuthEnv = isAppAgent ? this.resolveContainerAuthEnv() : {};
|
|
993
|
-
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)];
|
|
994
1055
|
const dockerEnvFlags = [
|
|
995
1056
|
...Object.entries(containerEnv).flatMap(([k, v]) => ['-e', `${k}=${v}`]),
|
|
996
1057
|
...byNameKeys.flatMap((k) => ['-e', k]),
|
|
@@ -1000,7 +1061,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1000
1061
|
'exec', '--workdir', '/workspace', '--user', String(containerUid), '-i',
|
|
1001
1062
|
...dockerEnvFlags,
|
|
1002
1063
|
this.agentConfig.container,
|
|
1003
|
-
this.agentConfig.claudeBin ?? claudeBin,
|
|
1064
|
+
...(this.containerAttempt ? ['node', '-e', container_1.CONTAINER_SUPERVISOR, this.containerAttempt.directory, this.agentConfig.claudeBin ?? claudeBin] : [this.agentConfig.claudeBin ?? claudeBin]),
|
|
1004
1065
|
...allArgs,
|
|
1005
1066
|
]
|
|
1006
1067
|
: allArgs;
|
|
@@ -1015,22 +1076,42 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1015
1076
|
// so a bare `claude` resolves even if the gateway itself was launched with a
|
|
1016
1077
|
// minimal PATH that predates the native-installer migration.
|
|
1017
1078
|
const hardenedPath = (0, claude_bin_1.pathWithNativeBin)();
|
|
1018
|
-
const
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
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
|
+
}
|
|
1033
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;
|
|
1034
1115
|
// Fresh child is alive: clear any exit observed for a prior process (e.g.
|
|
1035
1116
|
// after an auto-restart), so isRunning()/interrupt() see it as live.
|
|
1036
1117
|
this._exited = false;
|
|
@@ -1049,7 +1130,10 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1049
1130
|
// becomes Turn 2 — two separate responses forwarded to the channel. Deferring
|
|
1050
1131
|
// history to sendMessage() bundles [history + activation + user reply] into a
|
|
1051
1132
|
// single turn so Claude produces exactly one response.
|
|
1052
|
-
if (this.
|
|
1133
|
+
if (this.runtimeProfile) {
|
|
1134
|
+
this.pendingInitialPrompt = historyPrompt ?? undefined;
|
|
1135
|
+
}
|
|
1136
|
+
else if (this.source !== 'api') {
|
|
1053
1137
|
if (historyPrompt) {
|
|
1054
1138
|
// Has history: defer to first incoming user message to prevent double-response.
|
|
1055
1139
|
this.pendingInitialPrompt = `${historyPrompt}\n\n${CHANNELS_ACTIVATION_PROMPT}`;
|
|
@@ -1063,7 +1147,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1063
1147
|
this.pendingInitialPrompt = historyPrompt;
|
|
1064
1148
|
}
|
|
1065
1149
|
// Capture stdout — emit output events + persist assistant replies
|
|
1066
|
-
const typingDir = this.source !== 'api' ? this.typingDir : null;
|
|
1150
|
+
const typingDir = this.source !== 'api' && !this.runtimeProfile ? this.typingDir : null;
|
|
1067
1151
|
const heartbeatPath = typingDir ? path.join(typingDir, `${this.chatId}.heartbeat`) : null;
|
|
1068
1152
|
const statusPath = typingDir ? path.join(typingDir, `${this.chatId}.status`) : null;
|
|
1069
1153
|
const writeStatus = (status, detail) => {
|
|
@@ -1089,10 +1173,12 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1089
1173
|
// Track context from message_start events (first sub-call of each turn) for accurate context % display.
|
|
1090
1174
|
// result.usage is cumulative across all sub-calls; message_start.usage reflects a single API call's context.
|
|
1091
1175
|
let lastMessageStartContext = 0;
|
|
1176
|
+
let orchestrationOutputBuffer = '';
|
|
1177
|
+
const orchestrationDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
1092
1178
|
proc.stdout?.on('data', (data) => {
|
|
1093
1179
|
// Child produced output => the session is doing real work right now. Count
|
|
1094
1180
|
// this as activity so the idle reaper measures "time since the session last
|
|
1095
|
-
// did anything", not just "time since the
|
|
1181
|
+
// did anything", not just "time since the agent last injected a message".
|
|
1096
1182
|
// Without this, a self-paced loop (a /loop in dynamic mode using
|
|
1097
1183
|
// ScheduleWakeup) that wakes itself and works entirely inside this child
|
|
1098
1184
|
// process stays invisible to the idle timer and gets reaped mid-flight.
|
|
@@ -1104,7 +1190,11 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1104
1190
|
}
|
|
1105
1191
|
catch { }
|
|
1106
1192
|
}
|
|
1107
|
-
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() ?? '';
|
|
1108
1198
|
for (const line of lines) {
|
|
1109
1199
|
if (!line.trim())
|
|
1110
1200
|
continue;
|
|
@@ -1410,7 +1500,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1410
1500
|
if (this.lastSpawnAt && Date.now() - this.lastSpawnAt >= RESTART_COUNT_RESET_MS) {
|
|
1411
1501
|
this.restartCount = 0;
|
|
1412
1502
|
}
|
|
1413
|
-
if (!this.stopping)
|
|
1503
|
+
if (!this.stopping && !this.runtimeProfile)
|
|
1414
1504
|
this.scheduleRestart();
|
|
1415
1505
|
});
|
|
1416
1506
|
proc.on('error', (err) => {
|
|
@@ -1498,6 +1588,8 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1498
1588
|
* that Claude Code was replaying on every request.
|
|
1499
1589
|
*/
|
|
1500
1590
|
recoverFromCorruptedThinking() {
|
|
1591
|
+
if (this.runtimeProfile)
|
|
1592
|
+
return; // recovery belongs to the orchestration, never replay task effects
|
|
1501
1593
|
if (this.restartRequested || this.stopping)
|
|
1502
1594
|
return; // already respawning
|
|
1503
1595
|
if (this.thinkingRecoveryCount >= MAX_THINKING_RECOVERIES) {
|
|
@@ -1517,7 +1609,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1517
1609
|
if (this.process)
|
|
1518
1610
|
this.process.kill('SIGTERM');
|
|
1519
1611
|
}
|
|
1520
|
-
sendMessage(text) {
|
|
1612
|
+
sendMessage(text, images = []) {
|
|
1521
1613
|
if (!this.process?.stdin?.writable) {
|
|
1522
1614
|
this.logger.warn('Cannot send message: subprocess not running', {
|
|
1523
1615
|
sessionId: this.sessionId,
|
|
@@ -1530,7 +1622,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1530
1622
|
// Signal queued state + ensure typing signal file exists for this turn.
|
|
1531
1623
|
// If the previous turn already called stop() and cleared the typing loop,
|
|
1532
1624
|
// re-creating the signal file here lets stop() restart the loop for queued turns.
|
|
1533
|
-
if (this.source !== 'api') {
|
|
1625
|
+
if (this.source !== 'api' && !this.runtimeProfile) {
|
|
1534
1626
|
const typingDir = this.typingDir;
|
|
1535
1627
|
const typingSignalPath = path.join(typingDir, this.chatId);
|
|
1536
1628
|
const statusPath = path.join(typingDir, `${this.chatId}.status`);
|
|
@@ -1546,7 +1638,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1546
1638
|
? `${this.pendingInitialPrompt}\n\n${text}`
|
|
1547
1639
|
: text;
|
|
1548
1640
|
this.pendingInitialPrompt = undefined;
|
|
1549
|
-
this.process.stdin.write(SessionProcess.toStreamJsonTurn(fullText) + '\n');
|
|
1641
|
+
this.process.stdin.write(SessionProcess.toStreamJsonTurn(fullText, images) + '\n');
|
|
1550
1642
|
}
|
|
1551
1643
|
/**
|
|
1552
1644
|
* Send a control keystroke to the PTY wrapper (Epic #195, Phase 3b). Only
|
|
@@ -1651,7 +1743,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1651
1743
|
this.clearBackgroundWaitTimer();
|
|
1652
1744
|
}
|
|
1653
1745
|
/**
|
|
1654
|
-
* Extend Telegram's working state only while a
|
|
1746
|
+
* Extend Telegram's working state only while a agent session is waiting for
|
|
1655
1747
|
* background Agent/Workflow/Monitor work. A bounded expiry (BACKGROUND_AGENT_GRACE_MS,
|
|
1656
1748
|
* fixed from the dispatch timestamp — not renewed by later activity) releases
|
|
1657
1749
|
* the state if the dispatch never sends its completion notification within
|
|
@@ -1660,7 +1752,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1660
1752
|
* BACKGROUND_AGENT_GRACE_MS.
|
|
1661
1753
|
*/
|
|
1662
1754
|
retainBackgroundWorkingState() {
|
|
1663
|
-
if (this.source !== 'telegram' || !this.hasLikelyOutstandingBackgroundWork())
|
|
1755
|
+
if (this.runtimeProfile || this.source !== 'telegram' || !this.hasLikelyOutstandingBackgroundWork())
|
|
1664
1756
|
return false;
|
|
1665
1757
|
const processingPath = path.join(this.typingDir, `${this.chatId}.processing`);
|
|
1666
1758
|
try {
|
|
@@ -1712,7 +1804,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1712
1804
|
}
|
|
1713
1805
|
}
|
|
1714
1806
|
this.emit('processingChange', active);
|
|
1715
|
-
if (this.source === 'telegram') {
|
|
1807
|
+
if (this.source === 'telegram' && !this.runtimeProfile) {
|
|
1716
1808
|
const processingPath = path.join(this.typingDir, `${this.chatId}.processing`);
|
|
1717
1809
|
try {
|
|
1718
1810
|
if (active) {
|
|
@@ -1815,6 +1907,16 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1815
1907
|
}
|
|
1816
1908
|
async stop() {
|
|
1817
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
|
+
}
|
|
1818
1920
|
this.resetBackgroundDispatchState();
|
|
1819
1921
|
await this.restartWatcher?.close();
|
|
1820
1922
|
this.restartWatcher = null;
|
|
@@ -1822,7 +1924,7 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1822
1924
|
fs.rmSync(this.restartSignalPath, { force: true });
|
|
1823
1925
|
}
|
|
1824
1926
|
catch { }
|
|
1825
|
-
if (this.source === 'telegram') {
|
|
1927
|
+
if (this.source === 'telegram' && !this.runtimeProfile) {
|
|
1826
1928
|
try {
|
|
1827
1929
|
fs.rmSync(path.join(this.typingDir, `${this.chatId}.processing`), { force: true });
|
|
1828
1930
|
}
|
|
@@ -1837,6 +1939,13 @@ class SessionProcess extends events_1.EventEmitter {
|
|
|
1837
1939
|
// bind-mounts this path) can be alive for up to the 10s graceful-shutdown
|
|
1838
1940
|
// window immediately after this point, and must not find it gone under it.
|
|
1839
1941
|
const removeSessionDir = () => {
|
|
1942
|
+
if (this.managedMcpConfigPath) {
|
|
1943
|
+
try {
|
|
1944
|
+
fs.rmSync(this.managedMcpConfigPath, { force: true });
|
|
1945
|
+
}
|
|
1946
|
+
catch { }
|
|
1947
|
+
this.managedMcpConfigPath = undefined;
|
|
1948
|
+
}
|
|
1840
1949
|
try {
|
|
1841
1950
|
fs.rmSync(path.join(this.agentConfig.workspace, '.sessions', this.sessionId), { recursive: true, force: true });
|
|
1842
1951
|
}
|