@mono-agent/agent-app 0.11.2 → 0.11.4
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/LICENSE +674 -0
- package/README.md +222 -26
- package/dist/adapter-send-tools-main.js +7 -1
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +19 -1
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +127 -13
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +15 -2
- package/dist/app-config.js.map +1 -1
- package/dist/app-controller-channels.d.ts +8 -0
- package/dist/app-controller-channels.d.ts.map +1 -0
- package/dist/app-controller-channels.js +207 -0
- package/dist/app-controller-channels.js.map +1 -0
- package/dist/app-controller-continuation.d.ts +26 -0
- package/dist/app-controller-continuation.d.ts.map +1 -0
- package/dist/app-controller-continuation.js +198 -0
- package/dist/app-controller-continuation.js.map +1 -0
- package/dist/app-controller-lifecycle.d.ts +6 -0
- package/dist/app-controller-lifecycle.d.ts.map +1 -0
- package/dist/app-controller-lifecycle.js +81 -0
- package/dist/app-controller-lifecycle.js.map +1 -0
- package/dist/app-controller-maintenance.d.ts +13 -0
- package/dist/app-controller-maintenance.d.ts.map +1 -0
- package/dist/app-controller-maintenance.js +180 -0
- package/dist/app-controller-maintenance.js.map +1 -0
- package/dist/app-controller-memory-health.d.ts +12 -0
- package/dist/app-controller-memory-health.d.ts.map +1 -0
- package/dist/app-controller-memory-health.js +160 -0
- package/dist/app-controller-memory-health.js.map +1 -0
- package/dist/app-controller-memory.d.ts +9 -0
- package/dist/app-controller-memory.d.ts.map +1 -0
- package/dist/app-controller-memory.js +83 -0
- package/dist/app-controller-memory.js.map +1 -0
- package/dist/app-controller-responder.d.ts +20 -0
- package/dist/app-controller-responder.d.ts.map +1 -0
- package/dist/app-controller-responder.js +246 -0
- package/dist/app-controller-responder.js.map +1 -0
- package/dist/app-controller-traceability.d.ts +25 -0
- package/dist/app-controller-traceability.d.ts.map +1 -0
- package/dist/app-controller-traceability.js +418 -0
- package/dist/app-controller-traceability.js.map +1 -0
- package/dist/app-controller-utils.d.ts +38 -0
- package/dist/app-controller-utils.d.ts.map +1 -0
- package/dist/app-controller-utils.js +185 -0
- package/dist/app-controller-utils.js.map +1 -0
- package/dist/app-controller.d.ts +400 -0
- package/dist/app-controller.d.ts.map +1 -0
- package/dist/app-controller.js +336 -0
- package/dist/app-controller.js.map +1 -0
- package/dist/app.d.ts +7 -115
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +6 -1912
- package/dist/app.js.map +1 -1
- package/dist/artifact-retention.d.ts +4 -0
- package/dist/artifact-retention.d.ts.map +1 -1
- package/dist/artifact-retention.js +38 -0
- package/dist/artifact-retention.js.map +1 -1
- package/dist/backfill.d.ts +3 -1
- package/dist/backfill.d.ts.map +1 -1
- package/dist/backfill.js +5 -1
- package/dist/backfill.js.map +1 -1
- package/dist/background-runtime.d.ts +27 -0
- package/dist/background-runtime.d.ts.map +1 -1
- package/dist/background-runtime.js +383 -205
- package/dist/background-runtime.js.map +1 -1
- package/dist/background-worker-lease.d.ts.map +1 -1
- package/dist/background-worker-lease.js +41 -241
- package/dist/background-worker-lease.js.map +1 -1
- package/dist/background.d.ts +31 -9
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +543 -272
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/cron.d.ts +11 -0
- package/dist/channel-drivers/cron.d.ts.map +1 -0
- package/dist/channel-drivers/cron.js +168 -0
- package/dist/channel-drivers/cron.js.map +1 -0
- package/dist/channel-drivers/live.d.ts +11 -0
- package/dist/channel-drivers/live.d.ts.map +1 -0
- package/dist/channel-drivers/live.js +47 -0
- package/dist/channel-drivers/live.js.map +1 -0
- package/dist/channel-drivers/native-notify.d.ts +27 -0
- package/dist/channel-drivers/native-notify.d.ts.map +1 -0
- package/dist/channel-drivers/native-notify.js +94 -0
- package/dist/channel-drivers/native-notify.js.map +1 -0
- package/dist/channel-drivers/openai-api.d.ts +7 -0
- package/dist/channel-drivers/openai-api.d.ts.map +1 -0
- package/dist/channel-drivers/openai-api.js +63 -0
- package/dist/channel-drivers/openai-api.js.map +1 -0
- package/dist/channel-drivers/shared.d.ts +4 -0
- package/dist/channel-drivers/shared.d.ts.map +1 -0
- package/dist/channel-drivers/shared.js +5 -0
- package/dist/channel-drivers/shared.js.map +1 -0
- package/dist/channel-drivers/slack.d.ts +14 -0
- package/dist/channel-drivers/slack.d.ts.map +1 -0
- package/dist/channel-drivers/slack.js +227 -0
- package/dist/channel-drivers/slack.js.map +1 -0
- package/dist/channel-drivers/telegram.d.ts +11 -0
- package/dist/channel-drivers/telegram.d.ts.map +1 -0
- package/dist/channel-drivers/telegram.js +244 -0
- package/dist/channel-drivers/telegram.js.map +1 -0
- package/dist/channel-drivers/tui.d.ts +15 -0
- package/dist/channel-drivers/tui.d.ts.map +1 -0
- package/dist/channel-drivers/tui.js +108 -0
- package/dist/channel-drivers/tui.js.map +1 -0
- package/dist/channel-drivers/webhook.d.ts +7 -0
- package/dist/channel-drivers/webhook.d.ts.map +1 -0
- package/dist/channel-drivers/webhook.js +115 -0
- package/dist/channel-drivers/webhook.js.map +1 -0
- package/dist/channels.d.ts +21 -81
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +11 -1174
- package/dist/channels.js.map +1 -1
- package/dist/cli-args.d.ts +121 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +532 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-background-command.d.ts +59 -0
- package/dist/cli-background-command.d.ts.map +1 -0
- package/dist/cli-background-command.js +475 -0
- package/dist/cli-background-command.js.map +1 -0
- package/dist/cli-cancellation.d.ts +6 -0
- package/dist/cli-cancellation.d.ts.map +1 -0
- package/dist/cli-cancellation.js +23 -0
- package/dist/cli-cancellation.js.map +1 -0
- package/dist/cli-commands.d.ts +12 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +306 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli-help.d.ts +11 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +262 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-init-command.d.ts +60 -0
- package/dist/cli-init-command.d.ts.map +1 -0
- package/dist/cli-init-command.js +1910 -0
- package/dist/cli-init-command.js.map +1 -0
- package/dist/cli-install-skill-command.d.ts +3 -0
- package/dist/cli-install-skill-command.d.ts.map +1 -0
- package/dist/cli-install-skill-command.js +51 -0
- package/dist/cli-install-skill-command.js.map +1 -0
- package/dist/cli-sandbox-command.d.ts +10 -0
- package/dist/cli-sandbox-command.d.ts.map +1 -0
- package/dist/cli-sandbox-command.js +100 -0
- package/dist/cli-sandbox-command.js.map +1 -0
- package/dist/cli-validate-config-command.d.ts +36 -0
- package/dist/cli-validate-config-command.d.ts.map +1 -0
- package/dist/cli-validate-config-command.js +317 -0
- package/dist/cli-validate-config-command.js.map +1 -0
- package/dist/cli.d.ts +6 -248
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -3792
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts +2 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +34 -8
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +23 -0
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +92 -13
- package/dist/configured-agent.js.map +1 -1
- package/dist/continuation-dispatch-worker.d.ts +21 -0
- package/dist/continuation-dispatch-worker.d.ts.map +1 -0
- package/dist/continuation-dispatch-worker.js +425 -0
- package/dist/continuation-dispatch-worker.js.map +1 -0
- package/dist/continuation-http-routes.d.ts +15 -0
- package/dist/continuation-http-routes.d.ts.map +1 -0
- package/dist/continuation-http-routes.js +265 -0
- package/dist/continuation-http-routes.js.map +1 -0
- package/dist/continuation-operator-api.d.ts +18 -0
- package/dist/continuation-operator-api.d.ts.map +1 -0
- package/dist/continuation-operator-api.js +164 -0
- package/dist/continuation-operator-api.js.map +1 -0
- package/dist/continuation-origin-store.d.ts +19 -0
- package/dist/continuation-origin-store.d.ts.map +1 -0
- package/dist/continuation-origin-store.js +273 -0
- package/dist/continuation-origin-store.js.map +1 -0
- package/dist/continuation-service-errors.d.ts +18 -0
- package/dist/continuation-service-errors.d.ts.map +1 -0
- package/dist/continuation-service-errors.js +35 -0
- package/dist/continuation-service-errors.js.map +1 -0
- package/dist/continuation-service-helpers.d.ts +39 -0
- package/dist/continuation-service-helpers.d.ts.map +1 -0
- package/dist/continuation-service-helpers.js +308 -0
- package/dist/continuation-service-helpers.js.map +1 -0
- package/dist/continuation-service-origin.d.ts +55 -0
- package/dist/continuation-service-origin.d.ts.map +1 -0
- package/dist/continuation-service-origin.js +325 -0
- package/dist/continuation-service-origin.js.map +1 -0
- package/dist/continuation-service-types.d.ts +110 -0
- package/dist/continuation-service-types.d.ts.map +1 -0
- package/dist/continuation-service-types.js +11 -0
- package/dist/continuation-service-types.js.map +1 -0
- package/dist/continuation-service.d.ts +4 -97
- package/dist/continuation-service.d.ts.map +1 -1
- package/dist/continuation-service.js +9 -1525
- package/dist/continuation-service.js.map +1 -1
- package/dist/continuation-store-fs.d.ts +15 -0
- package/dist/continuation-store-fs.d.ts.map +1 -0
- package/dist/continuation-store-fs.js +247 -0
- package/dist/continuation-store-fs.js.map +1 -0
- package/dist/continuation-store-policy.d.ts +21 -0
- package/dist/continuation-store-policy.d.ts.map +1 -0
- package/dist/continuation-store-policy.js +278 -0
- package/dist/continuation-store-policy.js.map +1 -0
- package/dist/continuation-store-records.d.ts +9 -0
- package/dist/continuation-store-records.d.ts.map +1 -0
- package/dist/continuation-store-records.js +221 -0
- package/dist/continuation-store-records.js.map +1 -0
- package/dist/continuation-store-types.d.ts +173 -0
- package/dist/continuation-store-types.d.ts.map +1 -0
- package/dist/continuation-store-types.js +26 -0
- package/dist/continuation-store-types.js.map +1 -0
- package/dist/continuation-store.d.ts +4 -138
- package/dist/continuation-store.d.ts.map +1 -1
- package/dist/continuation-store.js +145 -1049
- package/dist/continuation-store.js.map +1 -1
- package/dist/doctor.d.ts +10 -5
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +629 -58
- package/dist/doctor.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +92 -239
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +19 -0
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +130 -0
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/launchd-logs.d.ts +91 -0
- package/dist/launchd-logs.d.ts.map +1 -0
- package/dist/launchd-logs.js +1499 -0
- package/dist/launchd-logs.js.map +1 -0
- package/dist/launchd.d.ts +27 -0
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +89 -10
- package/dist/launchd.js.map +1 -1
- package/dist/memory-command.d.ts +2 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +161 -48
- package/dist/memory-command.js.map +1 -1
- package/dist/memory-recall-settings.d.ts +64 -0
- package/dist/memory-recall-settings.d.ts.map +1 -0
- package/dist/memory-recall-settings.js +51 -0
- package/dist/memory-recall-settings.js.map +1 -0
- package/dist/memory-recall.d.ts +7 -95
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +8 -143
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-rituals.d.ts +3 -3
- package/dist/memory-rituals.d.ts.map +1 -1
- package/dist/memory-rituals.js +16 -111
- package/dist/memory-rituals.js.map +1 -1
- package/dist/modules/catalog.js +2 -2
- package/dist/modules/catalog.js.map +1 -1
- package/dist/modules/known-tools.d.ts +8 -6
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +8 -6
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/notify-destinations.d.ts +5 -0
- package/dist/notify-destinations.d.ts.map +1 -1
- package/dist/notify-destinations.js +7 -1
- package/dist/notify-destinations.js.map +1 -1
- package/dist/owner-private-lock.d.ts +95 -0
- package/dist/owner-private-lock.d.ts.map +1 -0
- package/dist/owner-private-lock.js +566 -0
- package/dist/owner-private-lock.js.map +1 -0
- package/dist/pi-oauth-login.d.ts +2 -0
- package/dist/pi-oauth-login.d.ts.map +1 -1
- package/dist/pi-oauth-login.js +39 -5
- package/dist/pi-oauth-login.js.map +1 -1
- package/dist/posted-message-index.d.ts +35 -16
- package/dist/posted-message-index.d.ts.map +1 -1
- package/dist/posted-message-index.js +1068 -52
- package/dist/posted-message-index.js.map +1 -1
- package/dist/posted-reply-history.d.ts +17 -0
- package/dist/posted-reply-history.d.ts.map +1 -0
- package/dist/posted-reply-history.js +169 -0
- package/dist/posted-reply-history.js.map +1 -0
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +6 -4
- package/dist/proactive-notify.js.map +1 -1
- package/dist/project-skills.d.ts +4 -0
- package/dist/project-skills.d.ts.map +1 -1
- package/dist/project-skills.js +99 -130
- package/dist/project-skills.js.map +1 -1
- package/dist/provider-setup.d.ts +0 -1
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +0 -3
- package/dist/provider-setup.js.map +1 -1
- package/dist/readiness-probe-worker.d.ts +61 -1
- package/dist/readiness-probe-worker.d.ts.map +1 -1
- package/dist/readiness-probe-worker.js +54 -58
- package/dist/readiness-probe-worker.js.map +1 -1
- package/dist/readiness-probe.d.ts +6 -9
- package/dist/readiness-probe.d.ts.map +1 -1
- package/dist/readiness-probe.js +30 -56
- package/dist/readiness-probe.js.map +1 -1
- package/dist/redact-secrets.d.ts +15 -0
- package/dist/redact-secrets.d.ts.map +1 -0
- package/dist/redact-secrets.js +65 -0
- package/dist/redact-secrets.js.map +1 -0
- package/dist/run-history.js +34 -24
- package/dist/run-history.js.map +1 -1
- package/dist/runtime-provenance.d.ts +8 -0
- package/dist/runtime-provenance.d.ts.map +1 -0
- package/dist/runtime-provenance.js +225 -0
- package/dist/runtime-provenance.js.map +1 -0
- package/dist/sandbox-manager.d.ts +4 -1
- package/dist/sandbox-manager.d.ts.map +1 -1
- package/dist/sandbox-manager.js +114 -273
- package/dist/sandbox-manager.js.map +1 -1
- package/dist/secure-file-replace.d.ts +49 -0
- package/dist/secure-file-replace.d.ts.map +1 -0
- package/dist/secure-file-replace.js +270 -0
- package/dist/secure-file-replace.js.map +1 -0
- package/dist/seen-conversations.d.ts +32 -5
- package/dist/seen-conversations.d.ts.map +1 -1
- package/dist/seen-conversations.js +145 -15
- package/dist/seen-conversations.js.map +1 -1
- package/dist/sessions.d.ts +20 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +41 -6
- package/dist/sessions.js.map +1 -1
- package/dist/wizard/index.d.ts +2 -2
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +1 -1
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/presets.d.ts +2 -1
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +2 -1
- package/dist/wizard/presets.js.map +1 -1
- package/dist/wizard/run.d.ts +0 -26
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +0 -53
- package/dist/wizard/run.js.map +1 -1
- package/package.json +22 -17
- package/schema/mono-agent.config.schema.json +45 -10
- package/skills/mono-agent-composer/SKILL.md +3 -3
- package/skills/mono-agent-composer/references/config-blueprint.md +123 -29
- package/skills/mono-agent-composer/references/discovery-questions.md +10 -8
- package/skills/mono-agent-composer/references/feature-coverage.md +90 -76
- package/skills/mono-agent-composer/references/package-map.md +6 -4
- package/skills/mono-agent-composer/references/playbooks.md +48 -27
- package/skills/mono-agent-composer/references/validation.md +16 -3
- package/dist/notify-runtime.d.ts +0 -26
- package/dist/notify-runtime.d.ts.map +0 -1
- package/dist/notify-runtime.js +0 -27
- package/dist/notify-runtime.js.map +0 -1
- package/dist/notify-tool.d.ts +0 -51
- package/dist/notify-tool.d.ts.map +0 -1
- package/dist/notify-tool.js +0 -182
- package/dist/notify-tool.js.map +0 -1
- package/dist/recipes/base.d.ts +0 -15
- package/dist/recipes/base.d.ts.map +0 -1
- package/dist/recipes/base.js +0 -51
- package/dist/recipes/base.js.map +0 -1
- package/dist/recipes/catalog.d.ts +0 -4
- package/dist/recipes/catalog.d.ts.map +0 -1
- package/dist/recipes/catalog.js +0 -525
- package/dist/recipes/catalog.js.map +0 -1
- package/dist/recipes/index.d.ts +0 -11
- package/dist/recipes/index.d.ts.map +0 -1
- package/dist/recipes/index.js +0 -14
- package/dist/recipes/index.js.map +0 -1
- package/dist/recipes/types.d.ts +0 -70
- package/dist/recipes/types.d.ts.map +0 -1
- package/dist/recipes/types.js +0 -15
- package/dist/recipes/types.js.map +0 -1
- package/dist/setup.d.ts +0 -29
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -97
- package/dist/setup.js.map +0 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { describeRunFailureKind } from "@mono-agent/observability";
|
|
2
|
+
import { isAdapterSendToolAllowed } from "../adapter-send-tools.js";
|
|
3
|
+
import { buildChannelConfigView } from "../channel-config-view.js";
|
|
4
|
+
import { isChannelConfigured } from "../channel-gate.js";
|
|
5
|
+
import { unconfiguredChannelView } from "./shared.js";
|
|
6
|
+
let telegramModule;
|
|
7
|
+
const loadTelegramModule = async () => (telegramModule ??= await import("@mono-agent/telegram-adapter"));
|
|
8
|
+
const TELEGRAM_GATE = { jsonKey: "telegram", envPrefix: "MONO_AGENT_TELEGRAM_" };
|
|
9
|
+
const UNCONFIGURED_TELEGRAM_CONFIG = {
|
|
10
|
+
enabled: false,
|
|
11
|
+
botToken: "",
|
|
12
|
+
allowedChatIds: [],
|
|
13
|
+
allowAllChats: false,
|
|
14
|
+
};
|
|
15
|
+
export function createTelegramChannelDriver(overrides = {}) {
|
|
16
|
+
return {
|
|
17
|
+
id: "telegram",
|
|
18
|
+
label: "Telegram",
|
|
19
|
+
async configView(input) {
|
|
20
|
+
if (!(await isChannelConfigured(input, TELEGRAM_GATE))) {
|
|
21
|
+
return unconfiguredChannelView("telegram", "Telegram");
|
|
22
|
+
}
|
|
23
|
+
const adapter = await loadTelegramModule();
|
|
24
|
+
return await buildChannelConfigView(this, adapter.TELEGRAM_CONFIG_FIELDS, input);
|
|
25
|
+
},
|
|
26
|
+
async loadConfig(input) {
|
|
27
|
+
if (!(await isChannelConfigured(input, TELEGRAM_GATE))) {
|
|
28
|
+
return UNCONFIGURED_TELEGRAM_CONFIG;
|
|
29
|
+
}
|
|
30
|
+
const adapter = await loadTelegramModule();
|
|
31
|
+
return await adapter.loadTelegramAdapterConfig({ env: input.env, jsonPath: input.configPath });
|
|
32
|
+
},
|
|
33
|
+
isConfigError(error) {
|
|
34
|
+
return telegramModule !== undefined && error instanceof telegramModule.TelegramAdapterConfigError;
|
|
35
|
+
},
|
|
36
|
+
disabledReason(config) {
|
|
37
|
+
return config.enabled ? undefined : "Telegram is disabled.";
|
|
38
|
+
},
|
|
39
|
+
async start(input) {
|
|
40
|
+
const adapter = await loadTelegramModule();
|
|
41
|
+
const startAdapter = overrides.startAdapter ?? adapter.startTelegramAdapter;
|
|
42
|
+
const result = await startAdapter(telegramStartOptions(input, overrides));
|
|
43
|
+
input.interaction?.registerSink("telegram", {
|
|
44
|
+
postQuestion: async (conversationId, text) => {
|
|
45
|
+
await result.post(requireAllowedTelegramChat(conversationId, input), text);
|
|
46
|
+
},
|
|
47
|
+
postStatus: async (conversationId, text, statusOptions) => {
|
|
48
|
+
await result.postStatus(requireAllowedTelegramChat(conversationId, input), text, statusOptions);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
summary: {},
|
|
53
|
+
stop: () => result.stop(),
|
|
54
|
+
notify: async (request) => {
|
|
55
|
+
const { conversationId, text, verbatim } = request;
|
|
56
|
+
const chatId = telegramChatIdFromConversation(conversationId);
|
|
57
|
+
if (chatId === undefined) {
|
|
58
|
+
input.logger?.warn?.("Telegram proactive notify skipped: unparseable destination.", { conversationId });
|
|
59
|
+
return { delivered: false, reason: "unparseable telegram destination" };
|
|
60
|
+
}
|
|
61
|
+
if (!input.config.allowAllChats && !input.config.allowedChatIds.includes(String(chatId))) {
|
|
62
|
+
input.logger?.warn?.("Telegram proactive notify skipped: destination not in allowlist.", { conversationId });
|
|
63
|
+
return { delivered: false, reason: "telegram chat is not in the adapter allowlist" };
|
|
64
|
+
}
|
|
65
|
+
const silent = input.config.quietHours !== undefined
|
|
66
|
+
&& adapter.isWithinQuietHours(new Date(), input.config.quietHours);
|
|
67
|
+
const notifyOptions = verbatim === undefined && !silent
|
|
68
|
+
? undefined
|
|
69
|
+
: {
|
|
70
|
+
...(verbatim === undefined ? {} : { verbatim }),
|
|
71
|
+
...(silent ? { silent: true } : {}),
|
|
72
|
+
};
|
|
73
|
+
return await result.notify(chatId, text, notifyOptions);
|
|
74
|
+
},
|
|
75
|
+
recordContinuationHistory: async (historyInput) => {
|
|
76
|
+
try {
|
|
77
|
+
requireAllowedTelegramChat(historyInput.conversationId, input);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return { recorded: false, code: "telegram_destination_not_allowlisted" };
|
|
81
|
+
}
|
|
82
|
+
if (input.responder.deliverVerbatim === undefined) {
|
|
83
|
+
return { recorded: false, code: "history_record_unavailable" };
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
await input.responder.deliverVerbatim(historyInput.conversationId, historyInput.text, { idempotencyKey: historyInput.deliveryKey });
|
|
87
|
+
return { recorded: true };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
input.logger?.warn?.("Telegram destination history commit failed after delivery.", {
|
|
91
|
+
conversationId: historyInput.conversationId,
|
|
92
|
+
error: error instanceof Error ? error.message : String(error),
|
|
93
|
+
});
|
|
94
|
+
return { recorded: false, code: "history_record_failed" };
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function telegramAttachmentOptions(config) {
|
|
102
|
+
const attachments = config.attachments;
|
|
103
|
+
const transcription = config.transcription;
|
|
104
|
+
if (attachments?.maxBytes === undefined
|
|
105
|
+
&& attachments?.downloadTimeoutMs === undefined
|
|
106
|
+
&& transcription === undefined) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
...(attachments?.maxBytes === undefined ? {} : { maxBytes: attachments.maxBytes }),
|
|
111
|
+
...(attachments?.downloadTimeoutMs === undefined ? {} : { downloadTimeoutMs: attachments.downloadTimeoutMs }),
|
|
112
|
+
...(transcription === undefined ? {} : { transcription }),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function requireAllowedTelegramChat(conversationId, input) {
|
|
116
|
+
const chatId = telegramChatIdFromConversation(conversationId);
|
|
117
|
+
if (chatId === undefined) {
|
|
118
|
+
throw new Error(`unparseable telegram destination: ${conversationId}`);
|
|
119
|
+
}
|
|
120
|
+
if (!input.config.allowAllChats && !input.config.allowedChatIds.includes(String(chatId))) {
|
|
121
|
+
throw new Error("telegram chat is not in the adapter allowlist.");
|
|
122
|
+
}
|
|
123
|
+
return chatId;
|
|
124
|
+
}
|
|
125
|
+
/** Extract a Telegram chat id from a `telegram:<chat>` conversation id. */
|
|
126
|
+
export function telegramChatIdFromConversation(conversationId) {
|
|
127
|
+
const prefix = "telegram:";
|
|
128
|
+
if (!conversationId.startsWith(prefix)) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
const raw = conversationId.slice(prefix.length).split("#", 1)[0]?.trim();
|
|
132
|
+
if (raw === undefined || raw.length === 0) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return /^-?\d+$/u.test(raw) ? Number(raw) : raw;
|
|
136
|
+
}
|
|
137
|
+
function telegramStartOptions(input, overrides) {
|
|
138
|
+
const callbacksEnabled = isAdapterSendToolAllowed("TelegramAskButtons", {
|
|
139
|
+
allowedTools: input.coreConfig.tools.allowedTools,
|
|
140
|
+
disallowedTools: input.coreConfig.tools.disallowedTools,
|
|
141
|
+
});
|
|
142
|
+
let pollingDegraded = false;
|
|
143
|
+
return {
|
|
144
|
+
botToken: input.config.botToken,
|
|
145
|
+
allowedChatIds: [...input.config.allowedChatIds],
|
|
146
|
+
allowAllChats: input.config.allowAllChats,
|
|
147
|
+
responder: input.responder,
|
|
148
|
+
allowedUpdates: callbacksEnabled ? ["message", "callback_query"] : ["message"],
|
|
149
|
+
...(callbacksEnabled ? { callbacksEnabled: true } : {}),
|
|
150
|
+
deleteWebhookOnStart: true,
|
|
151
|
+
stream: {
|
|
152
|
+
initialStatusText: "Agent is thinking...",
|
|
153
|
+
editDebounceMs: 350,
|
|
154
|
+
maxSendRetries: 3,
|
|
155
|
+
retryCapMs: 60_000,
|
|
156
|
+
formatMarkdown: true,
|
|
157
|
+
},
|
|
158
|
+
messages: {
|
|
159
|
+
welcomeText: "Agent is online. Send a message to run the configured runtime.",
|
|
160
|
+
helpText: "Send a message to talk to the agent. Use /cancel to stop an in-flight response.",
|
|
161
|
+
unauthorizedText: "This chat is not allowlisted for this agent.",
|
|
162
|
+
errorText: telegramErrorText,
|
|
163
|
+
},
|
|
164
|
+
onPollingError: (error) => {
|
|
165
|
+
if (pollingDegraded)
|
|
166
|
+
return;
|
|
167
|
+
pollingDegraded = true;
|
|
168
|
+
input.onDegraded?.(error instanceof Error ? error.message : String(error));
|
|
169
|
+
},
|
|
170
|
+
onPollingRecovered: () => {
|
|
171
|
+
if (!pollingDegraded)
|
|
172
|
+
return;
|
|
173
|
+
pollingDegraded = false;
|
|
174
|
+
input.onRecovered?.();
|
|
175
|
+
},
|
|
176
|
+
...(input.config.apiRoot === undefined ? {} : { apiRoot: input.config.apiRoot }),
|
|
177
|
+
...(telegramAttachmentOptions(input.config) === undefined
|
|
178
|
+
? {}
|
|
179
|
+
: { attachments: telegramAttachmentOptions(input.config) }),
|
|
180
|
+
...(input.interaction === undefined
|
|
181
|
+
? {}
|
|
182
|
+
: {
|
|
183
|
+
pendingAsks: {
|
|
184
|
+
tryResolve: (conversationId, answer, answerKind) => input.interaction.tryResolveAsk(conversationId, answer, answerKind),
|
|
185
|
+
hasPending: (conversationId) => input.interaction.hasPendingAsk?.(conversationId) ?? false,
|
|
186
|
+
cancel: (conversationId) => {
|
|
187
|
+
input.interaction.cancelAsks(conversationId);
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
}),
|
|
191
|
+
...(input.config.ipFamily === undefined ? {} : { transport: { ipFamily: input.config.ipFamily } }),
|
|
192
|
+
...(input.config.pollWatchdogMs === undefined ? {} : { pollWatchdogMs: input.config.pollWatchdogMs }),
|
|
193
|
+
...(input.config.commands === undefined ? {} : { commands: [...input.config.commands] }),
|
|
194
|
+
...(input.config.reactions === undefined ? {} : { reactions: input.config.reactions }),
|
|
195
|
+
...(input.logger === undefined ? {} : { logger: input.logger }),
|
|
196
|
+
...(overrides.botFactory === undefined ? {} : { botFactory: overrides.botFactory }),
|
|
197
|
+
...(overrides.runnerFactory === undefined ? {} : { runnerFactory: overrides.runnerFactory }),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function telegramErrorText(input) {
|
|
201
|
+
const failure = failureFromUnknown(input.error);
|
|
202
|
+
if (failure?.kind !== undefined) {
|
|
203
|
+
const description = describeRunFailureKind({ failureKind: failure.kind });
|
|
204
|
+
if (description.known || failure.message === undefined || failure.message.trim().length === 0) {
|
|
205
|
+
const explanation = failure.kind === "usage_limit"
|
|
206
|
+
? usageLimitExplanation(description.explanation, failure.details)
|
|
207
|
+
: description.explanation;
|
|
208
|
+
return `${explanation} ${description.nextStep}`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (failure?.message !== undefined && failure.message.trim().length > 0) {
|
|
212
|
+
return `I could not complete that message: ${failure.message}`;
|
|
213
|
+
}
|
|
214
|
+
return "I could not complete that message. Check the local artifact summary for details.";
|
|
215
|
+
}
|
|
216
|
+
function usageLimitExplanation(explanation, details) {
|
|
217
|
+
const maxTurns = nestedNumber(details, ["diagnostics", "max_turns"]);
|
|
218
|
+
return maxTurns === undefined ? explanation : `${explanation} Configured turn cap: ${maxTurns} turns.`;
|
|
219
|
+
}
|
|
220
|
+
function failureFromUnknown(error) {
|
|
221
|
+
if (!isRecord(error) || !isRecord(error.failure)) {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
const failure = error.failure;
|
|
225
|
+
return {
|
|
226
|
+
...(typeof failure.kind === "string" ? { kind: failure.kind } : {}),
|
|
227
|
+
...(typeof failure.message === "string" ? { message: failure.message } : {}),
|
|
228
|
+
...(Object.prototype.hasOwnProperty.call(failure, "details") ? { details: failure.details } : {}),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
function nestedNumber(value, path) {
|
|
232
|
+
let current = value;
|
|
233
|
+
for (const segment of path) {
|
|
234
|
+
if (!isRecord(current)) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
current = current[segment];
|
|
238
|
+
}
|
|
239
|
+
return typeof current === "number" && Number.isFinite(current) ? current : undefined;
|
|
240
|
+
}
|
|
241
|
+
function isRecord(value) {
|
|
242
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channel-drivers/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TuiAdapterConfig, TuiAdapterOptions, TuiAdapterStartResult } from "@mono-agent/operator-adapter";
|
|
2
|
+
import type { DiscoveredLocalModel, LocalProviderDefinition } from "@mono-agent/runtime-adapter";
|
|
3
|
+
import type { ChannelDriver } from "../channels.js";
|
|
4
|
+
export interface TuiChannelOverrides {
|
|
5
|
+
readonly adapterFactory?: (options: TuiAdapterOptions) => Promise<TuiAdapterStartResult>;
|
|
6
|
+
/** Test seam: replaces the real local-provider model discovery call. */
|
|
7
|
+
readonly discoverModels?: (providers: readonly LocalProviderDefinition[] | undefined) => Promise<readonly DiscoveredLocalModel[]>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The TUI stream endpoint deviates from the channels-off convention: with no
|
|
11
|
+
* `tui` section it is enabled on loopback with an ephemeral port. An explicit
|
|
12
|
+
* `"tui": {"enabled": false}` opts out.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createTuiChannelDriver(overrides?: TuiChannelOverrides): ChannelDriver<TuiAdapterConfig>;
|
|
15
|
+
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/channel-drivers/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAYpD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzF,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,KACtD,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,GAAE,mBAAwB,GAClC,aAAa,CAAC,gBAAgB,CAAC,CAwGjC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { discoverLocalProviderModels, modelReferenceKey, parseMonoRuntimeModelReference, resolveModelEffortLevels, } from "@mono-agent/runtime-adapter";
|
|
2
|
+
import { buildChannelConfigView } from "../channel-config-view.js";
|
|
3
|
+
import { configuredRuntimeModels } from "../runtime-routes.js";
|
|
4
|
+
let tuiModule;
|
|
5
|
+
const loadTuiModule = async () => (tuiModule ??= await import("@mono-agent/operator-adapter"));
|
|
6
|
+
/** `/v1/info` local-provider discovery cache lifetime. */
|
|
7
|
+
const LOCAL_MODEL_DISCOVERY_TTL_MS = 30_000;
|
|
8
|
+
/**
|
|
9
|
+
* The TUI stream endpoint deviates from the channels-off convention: with no
|
|
10
|
+
* `tui` section it is enabled on loopback with an ephemeral port. An explicit
|
|
11
|
+
* `"tui": {"enabled": false}` opts out.
|
|
12
|
+
*/
|
|
13
|
+
export function createTuiChannelDriver(overrides = {}) {
|
|
14
|
+
return {
|
|
15
|
+
id: "tui",
|
|
16
|
+
label: "TUI",
|
|
17
|
+
async configView(input) {
|
|
18
|
+
const adapter = await loadTuiModule();
|
|
19
|
+
return await buildChannelConfigView(this, adapter.TUI_CONFIG_FIELDS, input, { jsonKey: "tui" });
|
|
20
|
+
},
|
|
21
|
+
async loadConfig(input) {
|
|
22
|
+
const adapter = await loadTuiModule();
|
|
23
|
+
return await adapter.loadTuiAdapterConfig({ env: input.env, jsonPath: input.configPath });
|
|
24
|
+
},
|
|
25
|
+
isConfigError(error) {
|
|
26
|
+
return tuiModule !== undefined && error instanceof tuiModule.TuiAdapterError;
|
|
27
|
+
},
|
|
28
|
+
disabledReason(config) {
|
|
29
|
+
return config.enabled ? undefined : "TUI stream endpoint is disabled.";
|
|
30
|
+
},
|
|
31
|
+
async start(input) {
|
|
32
|
+
const adapterModule = await loadTuiModule();
|
|
33
|
+
const adapterFactory = overrides.adapterFactory ?? adapterModule.startTuiAdapter;
|
|
34
|
+
const discoverModels = overrides.discoverModels ?? discoverLocalProviderModels;
|
|
35
|
+
const localProviders = input.coreConfig.providers?.local;
|
|
36
|
+
const configModelKeys = [];
|
|
37
|
+
for (const ref of configuredRuntimeModels(input.coreConfig.runtime)) {
|
|
38
|
+
const key = modelReferenceKey(ref);
|
|
39
|
+
if (!configModelKeys.includes(key)) {
|
|
40
|
+
configModelKeys.push(key);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let discoveryCache;
|
|
44
|
+
const discoverModelsCached = async () => {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
if (discoveryCache !== undefined && now < discoveryCache.expiresAt) {
|
|
47
|
+
return discoveryCache.models;
|
|
48
|
+
}
|
|
49
|
+
const models = await discoverModels(localProviders);
|
|
50
|
+
discoveryCache = { expiresAt: now + LOCAL_MODEL_DISCOVERY_TTL_MS, models };
|
|
51
|
+
return models;
|
|
52
|
+
};
|
|
53
|
+
const buildInfo = async () => {
|
|
54
|
+
const discovered = await discoverModelsCached();
|
|
55
|
+
const labelByRef = new Map(discovered.map((model) => [model.ref, model.label]));
|
|
56
|
+
const models = [...configModelKeys];
|
|
57
|
+
for (const model of discovered) {
|
|
58
|
+
if (!models.includes(model.ref)) {
|
|
59
|
+
models.push(model.ref);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const modelOptions = {};
|
|
63
|
+
for (const ref of models) {
|
|
64
|
+
let parsedRef;
|
|
65
|
+
try {
|
|
66
|
+
parsedRef = parseMonoRuntimeModelReference(ref);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const resolved = resolveModelEffortLevels(parsedRef, localProviders);
|
|
72
|
+
const label = labelByRef.get(ref);
|
|
73
|
+
const entry = {
|
|
74
|
+
...(resolved.effortLevels === undefined ? {} : { effortLevels: resolved.effortLevels }),
|
|
75
|
+
reasoning: resolved.reasoning,
|
|
76
|
+
...(resolved.reasoningMode === undefined ? {} : { reasoningMode: resolved.reasoningMode }),
|
|
77
|
+
...(label === undefined ? {} : { label }),
|
|
78
|
+
};
|
|
79
|
+
if (Object.keys(entry).length > 0) {
|
|
80
|
+
modelOptions[ref] = entry;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
model: modelReferenceKey(input.coreConfig.runtime.model),
|
|
85
|
+
...(input.coreConfig.runtime.effort === undefined ? {} : { effort: input.coreConfig.runtime.effort }),
|
|
86
|
+
models,
|
|
87
|
+
...(Object.keys(modelOptions).length === 0 ? {} : { modelOptions }),
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
const adapter = await adapterFactory({
|
|
91
|
+
host: input.config.host,
|
|
92
|
+
port: input.config.port,
|
|
93
|
+
basePath: input.config.basePath,
|
|
94
|
+
allowNonLoopback: input.config.allowNonLoopback,
|
|
95
|
+
...(input.config.apiKey === undefined ? {} : { apiKey: input.config.apiKey }),
|
|
96
|
+
responder: input.responder,
|
|
97
|
+
info: buildInfo,
|
|
98
|
+
onServerError: (reason) => input.onFailure(reason),
|
|
99
|
+
...(input.logger === undefined ? {} : { logger: input.logger }),
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
summary: { baseUrl: adapter.baseUrl },
|
|
103
|
+
stop: () => adapter.stop(),
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/channel-drivers/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WebhookAdapterConfig, WebhookAdapterOptions, WebhookAdapterStartResult } from "@mono-agent/webhook-adapter";
|
|
2
|
+
import type { ChannelDriver } from "../channels.js";
|
|
3
|
+
export interface WebhookChannelOverrides {
|
|
4
|
+
readonly adapterFactory?: (options: WebhookAdapterOptions) => Promise<WebhookAdapterStartResult>;
|
|
5
|
+
}
|
|
6
|
+
export declare function createWebhookChannelDriver(overrides?: WebhookChannelOverrides): ChannelDriver<WebhookAdapterConfig>;
|
|
7
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/channel-drivers/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AAKrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAwBpD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClG;AAID,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,uBAA4B,GACtC,aAAa,CAAC,oBAAoB,CAAC,CA+FrC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { buildChannelConfigView } from "../channel-config-view.js";
|
|
2
|
+
import { isChannelConfigured } from "../channel-gate.js";
|
|
3
|
+
import { findTriggerOverrideIssues } from "../trigger-overrides.js";
|
|
4
|
+
import { deliverNativeWebhookNotification, inferUniqueNotifyDestination } from "./native-notify.js";
|
|
5
|
+
import { unconfiguredChannelView } from "./shared.js";
|
|
6
|
+
let webhookModule;
|
|
7
|
+
const loadWebhookModule = async () => (webhookModule ??= await import("@mono-agent/webhook-adapter"));
|
|
8
|
+
const WEBHOOK_GATE = { jsonKey: "webhook", envPrefix: "MONO_AGENT_WEBHOOK_", dir: "webhook" };
|
|
9
|
+
const UNCONFIGURED_WEBHOOK_CONFIG = {
|
|
10
|
+
enabled: false,
|
|
11
|
+
host: "127.0.0.1",
|
|
12
|
+
port: 0,
|
|
13
|
+
allowNonLoopback: false,
|
|
14
|
+
retentionMs: 300_000,
|
|
15
|
+
maxStoredRequests: 100,
|
|
16
|
+
endpoints: [{ name: "default", path: "/webhook/invoke", mode: "sync", enabled: true }],
|
|
17
|
+
path: "/webhook/invoke",
|
|
18
|
+
defaultMode: "sync",
|
|
19
|
+
};
|
|
20
|
+
const DEFAULT_WEBHOOK_MAX_RUN_MS = 20 * 60 * 1000;
|
|
21
|
+
export function createWebhookChannelDriver(overrides = {}) {
|
|
22
|
+
return {
|
|
23
|
+
id: "webhook",
|
|
24
|
+
label: "Webhook",
|
|
25
|
+
async configView(input) {
|
|
26
|
+
if (!(await isChannelConfigured(input, WEBHOOK_GATE))) {
|
|
27
|
+
return unconfiguredChannelView("webhook", "Webhook");
|
|
28
|
+
}
|
|
29
|
+
const adapter = await loadWebhookModule();
|
|
30
|
+
return await buildChannelConfigView(this, adapter.WEBHOOK_CONFIG_FIELDS, input);
|
|
31
|
+
},
|
|
32
|
+
configIssues(config) {
|
|
33
|
+
return findTriggerOverrideIssues(config.endpoints
|
|
34
|
+
.filter((endpoint) => endpoint.enabled)
|
|
35
|
+
.map((endpoint) => ({
|
|
36
|
+
name: `webhook endpoint "${endpoint.name}"`,
|
|
37
|
+
...(endpoint.model === undefined ? {} : { model: endpoint.model }),
|
|
38
|
+
...(endpoint.effort === undefined ? {} : { effort: endpoint.effort }),
|
|
39
|
+
})));
|
|
40
|
+
},
|
|
41
|
+
async loadConfig(input) {
|
|
42
|
+
if (!(await isChannelConfigured(input, WEBHOOK_GATE))) {
|
|
43
|
+
return UNCONFIGURED_WEBHOOK_CONFIG;
|
|
44
|
+
}
|
|
45
|
+
const adapter = await loadWebhookModule();
|
|
46
|
+
return await adapter.loadWebhookAdapterConfig({ env: input.env, jsonPath: input.configPath, cwd: input.cwd });
|
|
47
|
+
},
|
|
48
|
+
isConfigError(error) {
|
|
49
|
+
return webhookModule !== undefined && error instanceof webhookModule.WebhookAdapterError;
|
|
50
|
+
},
|
|
51
|
+
disabledReason(config) {
|
|
52
|
+
return config.enabled ? undefined : "Webhook adapter is disabled.";
|
|
53
|
+
},
|
|
54
|
+
waitingReason(config) {
|
|
55
|
+
return config.endpoints.some((endpoint) => endpoint.enabled)
|
|
56
|
+
? undefined
|
|
57
|
+
: "Webhook adapter has no enabled endpoints.";
|
|
58
|
+
},
|
|
59
|
+
async start(input) {
|
|
60
|
+
const endpoints = input.config.endpoints.filter((endpoint) => endpoint.enabled);
|
|
61
|
+
const endpointByName = new Map(endpoints.map((endpoint) => [endpoint.name, endpoint]));
|
|
62
|
+
const listNotifyDestinations = input.listNotifyDestinations;
|
|
63
|
+
const resolveNotifyFallbackConversationId = listNotifyDestinations === undefined
|
|
64
|
+
? undefined
|
|
65
|
+
: async (abortSignal) => await inferUniqueNotifyDestination({
|
|
66
|
+
listNotifyDestinations,
|
|
67
|
+
...(abortSignal === undefined ? {} : { abortSignal }),
|
|
68
|
+
});
|
|
69
|
+
const adapterModule = await loadWebhookModule();
|
|
70
|
+
const adapterFactory = overrides.adapterFactory ?? adapterModule.startWebhookAdapter;
|
|
71
|
+
const adapter = await adapterFactory({
|
|
72
|
+
host: input.config.host,
|
|
73
|
+
port: input.config.port,
|
|
74
|
+
allowNonLoopback: input.config.allowNonLoopback,
|
|
75
|
+
...(input.config.apiKey === undefined ? {} : { apiKey: input.config.apiKey }),
|
|
76
|
+
defaultMode: input.config.defaultMode,
|
|
77
|
+
retentionMs: input.config.retentionMs,
|
|
78
|
+
maxStoredRequests: input.config.maxStoredRequests,
|
|
79
|
+
maxRunMs: input.config.maxRunMs ?? DEFAULT_WEBHOOK_MAX_RUN_MS,
|
|
80
|
+
endpoints: endpoints.map((endpoint) => ({
|
|
81
|
+
name: endpoint.name,
|
|
82
|
+
path: endpoint.path,
|
|
83
|
+
mode: endpoint.mode,
|
|
84
|
+
...(endpoint.prompt === undefined ? {} : { prompt: endpoint.prompt }),
|
|
85
|
+
...(endpoint.notify === undefined ? {} : { notify: endpoint.notify }),
|
|
86
|
+
...(endpoint.notifyConversationId === undefined ? {} : { notifyConversationId: endpoint.notifyConversationId }),
|
|
87
|
+
...(endpoint.model === undefined ? {} : { model: endpoint.model }),
|
|
88
|
+
...(endpoint.effort === undefined ? {} : { effort: endpoint.effort }),
|
|
89
|
+
...(endpoint.maxRunMs === undefined ? {} : { maxRunMs: endpoint.maxRunMs }),
|
|
90
|
+
})),
|
|
91
|
+
responder: input.responder,
|
|
92
|
+
...(resolveNotifyFallbackConversationId === undefined ? {} : { resolveNotifyFallbackConversationId }),
|
|
93
|
+
onResult: (status, request) => {
|
|
94
|
+
void deliverNativeWebhookNotification({
|
|
95
|
+
endpoint: endpointByName.get(request.metadata.webhook.endpointName),
|
|
96
|
+
status,
|
|
97
|
+
request,
|
|
98
|
+
...(input.notifyDestination === undefined ? {} : { notifyDestination: input.notifyDestination }),
|
|
99
|
+
...(input.logger === undefined ? {} : { logger: input.logger }),
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
...(input.logger === undefined ? {} : { logger: input.logger }),
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
summary: {
|
|
106
|
+
invokeUrl: adapter.invokeUrl,
|
|
107
|
+
port: adapter.port,
|
|
108
|
+
invokeUrls: Object.fromEntries((adapter.endpoints ?? []).map((endpoint) => [endpoint.name, endpoint.invokeUrl])),
|
|
109
|
+
},
|
|
110
|
+
stop: () => adapter.stop(),
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/channel-drivers/webhook.ts"],"names":[],"mappings":"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"}
|