@geminixiang/mikan 1.0.0-beta.4 → 1.0.0-beta.41
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/CHANGELOG.md +714 -0
- package/README.md +99 -36
- package/dist/adapter.d.ts +11 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +18 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +6 -7
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +88 -122
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +33 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +32 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +3 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +66 -217
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +3 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +86 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +89 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +653 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +314 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +19 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +12 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +101 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +28 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +91 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +406 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +57 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +33 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +56 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +19 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +105 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +21 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +21 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +17 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +373 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js +2 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/intake.d.ts +16 -5
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +86 -23
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +37 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +164 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- package/dist/adapters/progressive-renderer.d.ts +7 -0
- package/dist/adapters/progressive-renderer.d.ts.map +1 -0
- package/dist/adapters/progressive-renderer.js +440 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +23 -10
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +60 -22
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +101 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +204 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +14 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +105 -147
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +95 -13
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +545 -211
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +11 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +197 -323
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +7 -11
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +35 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +56 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- package/dist/adapters/slack/tool-pack.d.ts +11 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +45 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/attach.js +1 -1
- package/dist/adapters/slack/tools/attach.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +106 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +40 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +8 -9
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +115 -163
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +2 -0
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +53 -188
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +132 -12
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent-events.d.ts +3 -2
- package/dist/agent-events.d.ts.map +1 -1
- package/dist/agent-events.js +19 -1
- package/dist/agent-events.js.map +1 -1
- package/dist/agent.d.ts +14 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +841 -298
- package/dist/agent.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +25 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +61 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +5 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +117 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/{download.js → cli/download.js} +2 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-dev.d.ts +2 -0
- package/dist/cli/ext-dev.d.ts.map +1 -0
- package/dist/cli/ext-dev.js +188 -0
- package/dist/cli/ext-dev.js.map +1 -0
- package/dist/cli/ext.d.ts +2 -0
- package/dist/cli/ext.d.ts.map +1 -0
- package/dist/cli/ext.js +324 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/cli/office.d.ts +2 -0
- package/dist/cli/office.d.ts.map +1 -0
- package/dist/cli/office.js +91 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/types.d.ts +16 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +3 -2
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +5 -9
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts +18 -6
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +64 -14
- package/dist/commands/extensions.js.map +1 -1
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +40 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +37 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +151 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts +2 -3
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +63 -24
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +15 -3
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/registry.d.ts +2 -2
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +1 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +83 -33
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/session-view.d.ts.map +1 -1
- package/dist/commands/session-view.js +6 -3
- package/dist/commands/session-view.js.map +1 -1
- package/dist/commands/types.d.ts +79 -7
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +23 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +222 -135
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +30 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +233 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +20 -81
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +7 -8
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +106 -110
- package/dist/execution-resolver.js.map +1 -1
- package/dist/extension-schedules.d.ts +31 -0
- package/dist/extension-schedules.d.ts.map +1 -0
- package/dist/extension-schedules.js +229 -0
- package/dist/extension-schedules.js.map +1 -0
- package/dist/harness/auth.d.ts +2 -1
- package/dist/harness/auth.d.ts.map +1 -1
- package/dist/harness/auth.js +11 -5
- package/dist/harness/auth.js.map +1 -1
- package/dist/harness/event-format.d.ts +27 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +160 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +27 -49
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +486 -130
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +107 -2
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +316 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +482 -42
- package/dist/harness/extensions/types.d.ts.map +1 -1
- package/dist/harness/extensions/types.js.map +1 -1
- package/dist/harness/index.d.ts +18 -8
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +7 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +46 -24
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +50 -54
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +232 -46
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +11 -5
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +141 -36
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/settings.d.ts +2 -20
- package/dist/harness/settings.d.ts.map +1 -1
- package/dist/harness/settings.js +12 -1
- package/dist/harness/settings.js.map +1 -1
- package/dist/harness/skills.d.ts +10 -29
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +48 -6
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +8 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +299 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent-runner.d.ts +45 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +680 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +267 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage.d.ts +6 -0
- package/dist/harness/usage.d.ts.map +1 -0
- package/dist/harness/usage.js +32 -0
- package/dist/harness/usage.js.map +1 -0
- package/dist/index.d.ts +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -6
- package/dist/index.js.map +1 -1
- package/dist/main.js +391 -127
- package/dist/main.js.map +1 -1
- package/dist/observability/instrument.js +7 -5
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.d.ts +2 -0
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +10 -2
- package/dist/observability/sentry.js.map +1 -1
- package/dist/office/address.d.ts +31 -0
- package/dist/office/address.d.ts.map +1 -0
- package/dist/office/address.js +113 -0
- package/dist/office/address.js.map +1 -0
- package/dist/office/index.d.ts +11 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +11 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/layout.d.ts +27 -0
- package/dist/office/layout.d.ts.map +1 -0
- package/dist/office/layout.js +97 -0
- package/dist/office/layout.js.map +1 -0
- package/dist/office/migration.d.ts +44 -0
- package/dist/office/migration.d.ts.map +1 -0
- package/dist/office/migration.js +255 -0
- package/dist/office/migration.js.map +1 -0
- package/dist/office/registry.d.ts +75 -0
- package/dist/office/registry.d.ts.map +1 -0
- package/dist/office/registry.js +646 -0
- package/dist/office/registry.js.map +1 -0
- package/dist/office/types.d.ts +71 -0
- package/dist/office/types.d.ts.map +1 -0
- package/dist/office/types.js +2 -0
- package/dist/office/types.js.map +1 -0
- package/dist/packages/admin.d.ts +17 -0
- package/dist/packages/admin.d.ts.map +1 -0
- package/dist/packages/admin.js +98 -0
- package/dist/packages/admin.js.map +1 -0
- package/dist/packages/index.d.ts +6 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +6 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/inspect.d.ts +11 -0
- package/dist/packages/inspect.d.ts.map +1 -0
- package/dist/packages/inspect.js +98 -0
- package/dist/packages/inspect.js.map +1 -0
- package/dist/packages/materialize.d.ts +40 -0
- package/dist/packages/materialize.d.ts.map +1 -0
- package/dist/packages/materialize.js +297 -0
- package/dist/packages/materialize.js.map +1 -0
- package/dist/packages/resolve.d.ts +25 -0
- package/dist/packages/resolve.d.ts.map +1 -0
- package/dist/packages/resolve.js +208 -0
- package/dist/packages/resolve.js.map +1 -0
- package/dist/packages/source.d.ts +39 -0
- package/dist/packages/source.d.ts.map +1 -0
- package/dist/packages/source.js +189 -0
- package/dist/packages/source.js.map +1 -0
- package/dist/packages/types.d.ts +104 -0
- package/dist/packages/types.d.ts.map +1 -0
- package/dist/packages/types.js +2 -0
- package/dist/packages/types.js.map +1 -0
- package/dist/provisioner.d.ts +66 -0
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +335 -13
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +562 -118
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +38 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +193 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +66 -7
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +3 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +13 -1
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +4 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +13 -3
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +3 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +13 -2
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin.d.ts +57 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +764 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +18 -3
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +44 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +68 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/image.d.ts.map +1 -1
- package/dist/sandbox/image.js +2 -0
- package/dist/sandbox/image.js.map +1 -1
- package/dist/sandbox/index.d.ts +17 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +37 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +65 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +14 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +68 -1
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +25 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +135 -131
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +9 -0
- package/dist/sessions/conversation-log.d.ts.map +1 -0
- package/dist/sessions/conversation-log.js +50 -0
- package/dist/sessions/conversation-log.js.map +1 -0
- package/dist/sessions/history-line.d.ts +29 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +45 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/rotation.d.ts +2 -0
- package/dist/sessions/rotation.d.ts.map +1 -0
- package/dist/sessions/rotation.js +39 -0
- package/dist/sessions/rotation.js.map +1 -0
- package/dist/sessions/session-key.d.ts +33 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +115 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts +15 -7
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +127 -36
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +19 -5
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +40 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +61 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/subagent-progress.d.ts +39 -0
- package/dist/subagent-progress.d.ts.map +1 -0
- package/dist/subagent-progress.js +225 -0
- package/dist/subagent-progress.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +26 -18
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +14 -13
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/event.d.ts +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/event.js +58 -45
- package/dist/tools/event.js.map +1 -1
- package/dist/tools/generate-image.d.ts +23 -0
- package/dist/tools/generate-image.d.ts.map +1 -0
- package/dist/tools/generate-image.js +65 -0
- package/dist/tools/generate-image.js.map +1 -0
- package/dist/tools/host-fn-tool.d.ts +21 -0
- package/dist/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/tools/host-fn-tool.js +32 -0
- package/dist/tools/host-fn-tool.js.map +1 -0
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +25 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/react.d.ts +15 -0
- package/dist/tools/react.d.ts.map +1 -0
- package/dist/tools/react.js +29 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +39 -33
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +14 -9
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent-slots.d.ts +28 -0
- package/dist/tools/subagent-slots.d.ts.map +1 -0
- package/dist/tools/subagent-slots.js +72 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +61 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +434 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +40 -32
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +2 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts +2 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +6 -9
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +411 -59
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/file-guards.d.ts +9 -0
- package/dist/utils/file-guards.d.ts.map +1 -1
- package/dist/utils/file-guards.js +44 -1
- package/dist/utils/file-guards.js.map +1 -1
- package/dist/vault/disabled.d.ts +9 -0
- package/dist/vault/disabled.d.ts.map +1 -0
- package/dist/vault/disabled.js +25 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts +45 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +127 -36
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +6 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/web/admin/portal.d.ts +31 -3
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +850 -345
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/provider-models.js +1 -1
- package/dist/web/admin/provider-models.js.map +1 -1
- package/dist/web/admin/types.d.ts +23 -3
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/login/oauth.d.ts +2 -3
- package/dist/web/login/oauth.d.ts.map +1 -1
- package/dist/web/login/oauth.js +1 -32
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.d.ts +1 -1
- package/dist/web/login/portal.d.ts.map +1 -1
- package/dist/web/login/portal.js +13 -36
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/login/types.d.ts +0 -11
- package/dist/web/login/types.d.ts.map +1 -1
- package/dist/web/login/types.js.map +1 -1
- package/dist/web/portal-shell.d.ts +21 -0
- package/dist/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → web/portal-shell.js} +67 -2
- package/dist/web/portal-shell.js.map +1 -0
- package/dist/web/server.d.ts +3 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +11 -4
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/portal.d.ts +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +37 -28
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/service.js +61 -18
- package/dist/web/session-view/service.js.map +1 -1
- package/dist/web/session-view/types.d.ts +0 -3
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/dist/web/token-store.js +1 -1
- package/dist/web/token-store.js.map +1 -1
- package/dist/workspace-projection/index.d.ts +10 -0
- package/dist/workspace-projection/index.d.ts.map +1 -0
- package/dist/workspace-projection/index.js +120 -0
- package/dist/workspace-projection/index.js.map +1 -0
- package/dist/workspace-projection/types.d.ts +16 -0
- package/dist/workspace-projection/types.d.ts.map +1 -0
- package/dist/workspace-projection/types.js +2 -0
- package/dist/workspace-projection/types.js.map +1 -0
- package/package.json +68 -37
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/adapters/telegram/html.d.ts +0 -3
- package/dist/adapters/telegram/html.d.ts.map +0 -1
- package/dist/adapters/telegram/html.js +0 -98
- package/dist/adapters/telegram/html.js.map +0 -1
- package/dist/commands/parse.d.ts +0 -7
- package/dist/commands/parse.d.ts.map +0 -1
- package/dist/commands/parse.js +0 -14
- package/dist/commands/parse.js.map +0 -1
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sandbox/path-context.d.ts +0 -3
- package/dist/sandbox/path-context.d.ts.map +0 -1
- package/dist/sandbox/path-context.js +0 -20
- package/dist/sandbox/path-context.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/sessions/metadata.d.ts +0 -3
- package/dist/sessions/metadata.d.ts.map +0 -1
- package/dist/sessions/metadata.js +0 -11
- package/dist/sessions/metadata.js.map +0 -1
- package/dist/sessions/policy.d.ts +0 -6
- package/dist/sessions/policy.d.ts.map +0 -1
- package/dist/sessions/policy.js +0 -23
- package/dist/sessions/policy.js.map +0 -1
- package/dist/store.d.ts +0 -46
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -177
- package/dist/store.js.map +0 -1
- package/dist/tools/truncate.d.ts +0 -33
- package/dist/tools/truncate.d.ts.map +0 -1
- package/dist/tools/truncate.js +0 -184
- package/dist/tools/truncate.js.map +0 -1
- package/dist/utils/date.d.ts +0 -10
- package/dist/utils/date.d.ts.map +0 -1
- package/dist/utils/date.js +0 -23
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/env.d.ts +0 -3
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -12
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/fs-atomic.d.ts +0 -10
- package/dist/utils/fs-atomic.d.ts.map +0 -1
- package/dist/utils/fs-atomic.js +0 -45
- package/dist/utils/fs-atomic.js.map +0 -1
- package/dist/utils/html.d.ts +0 -2
- package/dist/utils/html.d.ts.map +0 -1
- package/dist/utils/html.js +0 -4
- package/dist/utils/html.js.map +0 -1
- package/dist/utils/http-body.d.ts +0 -10
- package/dist/utils/http-body.d.ts.map +0 -1
- package/dist/utils/http-body.js +0 -34
- package/dist/utils/http-body.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- package/dist/web/agent-events/portal.d.ts +0 -3
- package/dist/web/agent-events/portal.d.ts.map +0 -1
- package/dist/web/agent-events/portal.js +0 -18
- package/dist/web/agent-events/portal.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ConversationKind } from "../../adapter.js";
|
|
2
|
-
import type { Attachment } from "../../
|
|
1
|
+
import type { ConversationKind, OfficeAddress } from "../../adapter.js";
|
|
2
|
+
import type { Attachment } from "../../types.js";
|
|
3
3
|
export interface SlackEvent {
|
|
4
|
+
address: OfficeAddress;
|
|
4
5
|
type: "mention" | "dm";
|
|
5
6
|
conversationId: string;
|
|
6
7
|
conversationKind: ConversationKind;
|
|
@@ -23,6 +24,8 @@ export interface SlackUser {
|
|
|
23
24
|
id: string;
|
|
24
25
|
userName: string;
|
|
25
26
|
displayName: string;
|
|
27
|
+
/** From users.list is_bot; absent when the entry predates the flag. */
|
|
28
|
+
isBot?: boolean;
|
|
26
29
|
}
|
|
27
30
|
export interface SlackChannel {
|
|
28
31
|
id: string;
|
|
@@ -81,4 +84,39 @@ export interface SlackBlockActionBody {
|
|
|
81
84
|
name?: string;
|
|
82
85
|
};
|
|
83
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Host-side Slack operations for the Slack tool pack, keyed by conversation.
|
|
89
|
+
* main.ts implements these against the running SlackMessagingBot.
|
|
90
|
+
*/
|
|
91
|
+
export interface PlatformSlackOps {
|
|
92
|
+
postBlocks(conversationId: string, args: {
|
|
93
|
+
text: string;
|
|
94
|
+
blocks: object[];
|
|
95
|
+
threadTs?: string;
|
|
96
|
+
}): Promise<{
|
|
97
|
+
ts: string;
|
|
98
|
+
}>;
|
|
99
|
+
updateBlocks(conversationId: string, args: {
|
|
100
|
+
ts: string;
|
|
101
|
+
text: string;
|
|
102
|
+
blocks: object[];
|
|
103
|
+
threadTs?: string;
|
|
104
|
+
}): Promise<void>;
|
|
105
|
+
ownsBlockKitMessage(conversationId: string, ts: string, threadTs?: string): boolean;
|
|
106
|
+
}
|
|
107
|
+
/** Conversation-bound Slack Block Kit operations, provided by the host. */
|
|
108
|
+
export interface SlackBlockKitOps {
|
|
109
|
+
postBlocks(args: {
|
|
110
|
+
text: string;
|
|
111
|
+
blocks: object[];
|
|
112
|
+
threadTs?: string;
|
|
113
|
+
}): Promise<{
|
|
114
|
+
ts: string;
|
|
115
|
+
}>;
|
|
116
|
+
updateBlocks(args: {
|
|
117
|
+
ts: string;
|
|
118
|
+
text: string;
|
|
119
|
+
blocks: object[];
|
|
120
|
+
}): Promise<void>;
|
|
121
|
+
}
|
|
84
122
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationKind } from \"../../adapter.js\";\nimport type { Attachment } from \"../../
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationKind, OfficeAddress } from \"../../adapter.js\";\nimport type { Attachment } from \"../../types.js\";\n\nexport interface SlackEvent {\n address: OfficeAddress;\n type: \"mention\" | \"dm\";\n conversationId: string;\n conversationKind: ConversationKind;\n channel: string;\n ts: string;\n thread_ts?: string;\n user: string;\n text: string;\n files?: Array<{ name?: string; url_private_download?: string; url_private?: string }>;\n /** Processed attachments with local paths (populated after logUserMessage) */\n attachments?: Attachment[];\n /** Session key passed through to ConversationEvent so handleEvent uses the correct persistent session */\n sessionKey?: string;\n}\n\nexport interface SlackUser {\n id: string;\n userName: string;\n displayName: string;\n /** From users.list is_bot; absent when the entry predates the flag. */\n isBot?: boolean;\n}\n\nexport interface SlackChannel {\n id: string;\n name: string;\n}\n\nexport interface SlackAdapterOptions {\n initialMessageTs?: string;\n replyMode?: \"top-level\" | \"thread\";\n}\n\nexport type SlackSessionRef =\n | { kind: \"channel\"; channelId: string }\n | { kind: \"thread\"; channelId: string; threadTs: string };\n\nexport interface SlackAdapterSessionPlan {\n sessionKey: string;\n rootTs?: string;\n initialMessageTs?: string;\n isThreaded: boolean;\n}\n\nexport interface SlackEventAnchorRunPlan<T = SlackEvent> {\n event: T;\n initialMessageTs?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Block action payload shapes (subset used by handleBlockAction /\n// handleSlackInteraction — @slack/types does not export these)\n// ---------------------------------------------------------------------------\n\nexport interface SlackBlockAction {\n action_id: string;\n block_id?: string;\n type?: string;\n value?: string;\n selected_option?: { text?: { text?: string }; value?: string };\n selected_options?: Array<{ text?: { text?: string }; value?: string }>;\n}\n\nexport interface SlackBlockActionBody {\n actions?: SlackBlockAction[];\n container?: { channel_id?: string; thread_ts?: string; message_ts?: string };\n user?: { id?: string; username?: string; name?: string };\n}\n\n/**\n * Host-side Slack operations for the Slack tool pack, keyed by conversation.\n * main.ts implements these against the running SlackMessagingBot.\n */\nexport interface PlatformSlackOps {\n postBlocks(\n conversationId: string,\n args: { text: string; blocks: object[]; threadTs?: string },\n ): Promise<{ ts: string }>;\n updateBlocks(\n conversationId: string,\n args: { ts: string; text: string; blocks: object[]; threadTs?: string },\n ): Promise<void>;\n ownsBlockKitMessage(conversationId: string, ts: string, threadTs?: string): boolean;\n}\n\n/** Conversation-bound Slack Block Kit operations, provided by the host. */\nexport interface SlackBlockKitOps {\n postBlocks(args: { text: string; blocks: object[]; threadTs?: string }): Promise<{ ts: string }>;\n updateBlocks(args: { ts: string; text: string; blocks: object[] }): Promise<void>;\n}\n"]}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import type { Message } from "grammy/types";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ConversationEvent, MessagingEventHandler, MessagingInfo } from "../../adapter.js";
|
|
3
|
+
import { type MessagingBot } from "../../adapter.js";
|
|
4
|
+
import { type Workspace } from "../../office/index.js";
|
|
3
5
|
export type { TelegramEvent } from "./types.js";
|
|
4
6
|
export declare class TelegramMessagingBot implements MessagingBot {
|
|
5
7
|
private client;
|
|
6
8
|
private handler;
|
|
7
9
|
private botToken;
|
|
8
|
-
private
|
|
10
|
+
private workspace;
|
|
9
11
|
private botUserId;
|
|
10
12
|
private botUsername;
|
|
11
13
|
private queues;
|
|
12
14
|
private startupTime;
|
|
13
15
|
constructor(handler: MessagingEventHandler, config: {
|
|
14
16
|
token: string;
|
|
15
|
-
|
|
17
|
+
workspace: Workspace;
|
|
16
18
|
});
|
|
17
19
|
start(): Promise<void>;
|
|
18
20
|
postMessage(channel: string, text: string): Promise<string>;
|
|
21
|
+
addReaction(channel: string, messageTs: string, emoji: string): Promise<void>;
|
|
19
22
|
updateMessage(channel: string, ts: string, text: string): Promise<void>;
|
|
20
23
|
enqueueEvent(event: ConversationEvent): boolean;
|
|
21
24
|
getMessagingInfo(): MessagingInfo;
|
|
@@ -36,16 +39,12 @@ export declare class TelegramMessagingBot implements MessagingBot {
|
|
|
36
39
|
name: string;
|
|
37
40
|
localPath: string;
|
|
38
41
|
}[]>;
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
*/
|
|
42
|
-
private processTelegramFile;
|
|
42
|
+
/** One Telegram file as a saveIncomingAttachments item; failures skip, never throw. */
|
|
43
|
+
private telegramFileItem;
|
|
43
44
|
private getQueue;
|
|
44
45
|
private extractMessageContext;
|
|
45
46
|
private isAddressedToMessagingBot;
|
|
46
47
|
private cleanText;
|
|
47
|
-
private isStopText;
|
|
48
|
-
private resolveStopTarget;
|
|
49
48
|
private setupEventHandlers;
|
|
50
49
|
}
|
|
51
50
|
//# sourceMappingURL=bot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/telegram/bot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/telegram/bot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EAErB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgB9E,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAgB5E,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmChD,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,WAAW,CAAa;IAEhC,YAAY,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAQ1F;IAMK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB3B;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASlF;IAEK,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5E;IAED,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAe9C;IAED,gBAAgB,IAAI,aAAa,CAShC;IAMK,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;IAEK,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlE;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvF;IAEK,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;IAEK,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C;IAEK,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF;IAED,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;IAED,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAE9D;IAED;;;;OAIG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAqBhD;IAED,uFAAuF;IACvF,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,kBAAkB;CAuH3B"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { readFileSync } from "fs";
|
|
2
|
-
import { basename
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { basename } from "node:path";
|
|
3
3
|
import { Bot as GrammyMessagingBot, InputFile } from "grammy";
|
|
4
|
+
import { createConversationEvent } from "../../adapter.js";
|
|
4
5
|
import * as log from "../../log.js";
|
|
5
|
-
import { resolveChatSessionKey } from "../../sessions/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { resolveChatSessionKey } from "../../sessions/session-key.js";
|
|
7
|
+
import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, downloadUrlToFile, withRetry, saveIncomingAttachments, } from "../shared.js";
|
|
8
|
+
import { telegramCommandMenu } from "../../commands/manifest.js";
|
|
8
9
|
import { processMessageIntake } from "../intake.js";
|
|
9
10
|
import { createTelegramAdapters } from "./context.js";
|
|
10
|
-
import {
|
|
11
|
+
import { createOfficeAddress } from "../../office/index.js";
|
|
11
12
|
// grammY surfaces Telegram errors as `GrammyError` with `error_code` mirroring
|
|
12
13
|
// the Bot API. 429 is the rate-limit status; the response also includes
|
|
13
14
|
// `parameters.retry_after` but exponential backoff is good enough here.
|
|
@@ -18,8 +19,20 @@ const telegramRetry = (fn) => withRetry(fn, { isRateLimited: telegramIsRateLimit
|
|
|
18
19
|
// ============================================================================
|
|
19
20
|
// TelegramMessagingBot
|
|
20
21
|
// ============================================================================
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* A response as a Telegram rich message.
|
|
24
|
+
*
|
|
25
|
+
* Telegram parses the markdown into native blocks itself — a GFM table becomes
|
|
26
|
+
* a real table, `##` a heading, a fence a code block. That is why this adapter
|
|
27
|
+
* has no converter of its own: unlike Slack and Discord, nothing here has to be
|
|
28
|
+
* translated before sending.
|
|
29
|
+
*
|
|
30
|
+
* It replaces the HTML pipeline, and with it the escape-and-retry dance that
|
|
31
|
+
* existed only because a model writing HTML by hand regularly produced markup
|
|
32
|
+
* Telegram rejected.
|
|
33
|
+
*/
|
|
34
|
+
function richMessage(markdown) {
|
|
35
|
+
return { markdown };
|
|
23
36
|
}
|
|
24
37
|
export class TelegramMessagingBot {
|
|
25
38
|
constructor(handler, config) {
|
|
@@ -29,7 +42,7 @@ export class TelegramMessagingBot {
|
|
|
29
42
|
this.startupTime = 0;
|
|
30
43
|
this.handler = handler;
|
|
31
44
|
this.botToken = config.token;
|
|
32
|
-
this.
|
|
45
|
+
this.workspace = config.workspace;
|
|
33
46
|
this.client = new GrammyMessagingBot(config.token);
|
|
34
47
|
this.client.catch((err) => {
|
|
35
48
|
log.logWarning("Telegram error", err instanceof Error ? err.message : String(err));
|
|
@@ -43,14 +56,9 @@ export class TelegramMessagingBot {
|
|
|
43
56
|
this.botUserId = String(me.id);
|
|
44
57
|
this.botUsername = me.username ?? null;
|
|
45
58
|
this.startupTime = Date.now();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{ command: "model", description: "Switch this conversation's LLM model" },
|
|
50
|
-
{ command: "sandbox", description: "Show or boost sandbox limits" },
|
|
51
|
-
{ command: "stop", description: "Stop ongoing conversation" },
|
|
52
|
-
{ command: "new", description: "Reset conversation history and start fresh" },
|
|
53
|
-
]);
|
|
59
|
+
// Menu registration derives from the command manifest; routing is
|
|
60
|
+
// separate (native handlers below + intake/dispatch for the rest).
|
|
61
|
+
await this.client.api.setMyCommands(telegramCommandMenu());
|
|
54
62
|
this.setupEventHandlers();
|
|
55
63
|
// Start polling in background (bot.start() runs indefinitely)
|
|
56
64
|
this.client.start().catch((err) => {
|
|
@@ -63,24 +71,28 @@ export class TelegramMessagingBot {
|
|
|
63
71
|
const result = await this.postMessageRaw(parseInt(channel), text);
|
|
64
72
|
return String(result);
|
|
65
73
|
}
|
|
74
|
+
async addReaction(channel, messageTs, emoji) {
|
|
75
|
+
// Telegram reactions are set via setMessageReaction with a Unicode emoji.
|
|
76
|
+
// Short names (Slack style) won't resolve; callers should pass an emoji.
|
|
77
|
+
const name = emoji.replace(/^:|:$/g, "");
|
|
78
|
+
await telegramRetry(async () => {
|
|
79
|
+
await this.client.api.setMessageReaction(parseInt(channel), parseInt(messageTs), [
|
|
80
|
+
{ type: "emoji", emoji: name },
|
|
81
|
+
]);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
66
84
|
async updateMessage(channel, ts, text) {
|
|
67
85
|
return telegramRetry(async () => {
|
|
68
86
|
try {
|
|
69
|
-
await this.client.api.editMessageText(parseInt(channel), parseInt(ts), text
|
|
70
|
-
parse_mode: "HTML",
|
|
71
|
-
});
|
|
87
|
+
await this.client.api.editMessageText(parseInt(channel), parseInt(ts), richMessage(text));
|
|
72
88
|
}
|
|
73
89
|
catch (err) {
|
|
74
90
|
const msg = err instanceof Error ? err.message : String(err);
|
|
75
|
-
|
|
91
|
+
// Editing to identical content is something streaming asks for
|
|
92
|
+
// constantly; it is a no-op, not a failure.
|
|
93
|
+
if (msg.includes("message is not modified"))
|
|
76
94
|
return;
|
|
77
|
-
|
|
78
|
-
if (!isTelegramHtmlParseError(msg)) {
|
|
79
|
-
throw err;
|
|
80
|
-
}
|
|
81
|
-
await this.client.api.editMessageText(parseInt(channel), parseInt(ts), escapeTelegramHtml(text), {
|
|
82
|
-
parse_mode: "HTML",
|
|
83
|
-
});
|
|
95
|
+
throw err;
|
|
84
96
|
}
|
|
85
97
|
});
|
|
86
98
|
}
|
|
@@ -101,7 +113,8 @@ export class TelegramMessagingBot {
|
|
|
101
113
|
getMessagingInfo() {
|
|
102
114
|
return {
|
|
103
115
|
name: "telegram",
|
|
104
|
-
|
|
116
|
+
trustModel: "membership",
|
|
117
|
+
formattingGuide: "## Telegram Formatting (Markdown)\nWrite ordinary Markdown — headings, lists, tables, code fences, quotes and links all render natively. Nothing needs converting by hand.",
|
|
105
118
|
channels: [],
|
|
106
119
|
users: [],
|
|
107
120
|
};
|
|
@@ -111,20 +124,8 @@ export class TelegramMessagingBot {
|
|
|
111
124
|
// ==========================================================================
|
|
112
125
|
async postMessageRaw(chatId, text) {
|
|
113
126
|
return telegramRetry(async () => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return result.message_id;
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
120
|
-
if (!isTelegramHtmlParseError(msg)) {
|
|
121
|
-
throw err;
|
|
122
|
-
}
|
|
123
|
-
const result = await this.client.api.sendMessage(chatId, escapeTelegramHtml(text), {
|
|
124
|
-
parse_mode: "HTML",
|
|
125
|
-
});
|
|
126
|
-
return result.message_id;
|
|
127
|
-
}
|
|
127
|
+
const result = await this.client.api.sendRichMessage(chatId, richMessage(text));
|
|
128
|
+
return result.message_id;
|
|
128
129
|
});
|
|
129
130
|
}
|
|
130
131
|
async postPlainMessage(chatId, text) {
|
|
@@ -134,24 +135,10 @@ export class TelegramMessagingBot {
|
|
|
134
135
|
}
|
|
135
136
|
async postReply(chatId, replyToMessageId, text) {
|
|
136
137
|
return telegramRetry(async () => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
});
|
|
142
|
-
return result.message_id;
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
146
|
-
if (!isTelegramHtmlParseError(msg)) {
|
|
147
|
-
throw err;
|
|
148
|
-
}
|
|
149
|
-
const result = await this.client.api.sendMessage(chatId, escapeTelegramHtml(text), {
|
|
150
|
-
parse_mode: "HTML",
|
|
151
|
-
reply_parameters: { message_id: replyToMessageId },
|
|
152
|
-
});
|
|
153
|
-
return result.message_id;
|
|
154
|
-
}
|
|
138
|
+
const result = await this.client.api.sendRichMessage(chatId, richMessage(text), {
|
|
139
|
+
reply_parameters: { message_id: replyToMessageId },
|
|
140
|
+
});
|
|
141
|
+
return result.message_id;
|
|
155
142
|
});
|
|
156
143
|
}
|
|
157
144
|
async deleteMessageRaw(chatId, messageId) {
|
|
@@ -168,10 +155,10 @@ export class TelegramMessagingBot {
|
|
|
168
155
|
});
|
|
169
156
|
}
|
|
170
157
|
logToFile(channel, entry) {
|
|
171
|
-
appendChannelLog(this.
|
|
158
|
+
appendChannelLog(this.workspace.office(createOfficeAddress("telegram", channel)), entry);
|
|
172
159
|
}
|
|
173
160
|
logBotResponse(channel, text, ts) {
|
|
174
|
-
appendBotResponseLog(this.
|
|
161
|
+
appendBotResponseLog(this.workspace.office(createOfficeAddress("telegram", channel)), text, ts);
|
|
175
162
|
}
|
|
176
163
|
/**
|
|
177
164
|
* Process attachments from a Telegram message
|
|
@@ -179,54 +166,34 @@ export class TelegramMessagingBot {
|
|
|
179
166
|
* Returns format compatible with ConversationMessage: { name: string, localPath: string }[]
|
|
180
167
|
*/
|
|
181
168
|
async processAttachments(chatId, message) {
|
|
182
|
-
const
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const fileId = photo.file_id;
|
|
188
|
-
downloads.push(this.processTelegramFile(chatId, fileId, `photo_${message.message_id}.jpg`));
|
|
169
|
+
const items = [];
|
|
170
|
+
// Photos: take the largest size for best quality.
|
|
171
|
+
const photo = message.photo?.[message.photo.length - 1];
|
|
172
|
+
if (photo) {
|
|
173
|
+
items.push(this.telegramFileItem(photo.file_id, `photo_${message.message_id}.jpg`));
|
|
189
174
|
}
|
|
190
|
-
// Handle documents
|
|
191
175
|
if (message.document) {
|
|
192
176
|
const doc = message.document;
|
|
193
|
-
|
|
194
|
-
const fileName = doc.file_name ?? `document_${message.message_id}`;
|
|
195
|
-
downloads.push(this.processTelegramFile(chatId, fileId, fileName));
|
|
196
|
-
}
|
|
197
|
-
const attachments = await Promise.all(downloads);
|
|
198
|
-
return attachments.filter((attachment) => attachment !== null);
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Download a file from Telegram and return attachment metadata
|
|
202
|
-
*/
|
|
203
|
-
async processTelegramFile(chatId, fileId, originalName) {
|
|
204
|
-
try {
|
|
205
|
-
// Get file info from Telegram
|
|
206
|
-
const file = await this.client.api.getFile(fileId);
|
|
207
|
-
if (!file.file_path) {
|
|
208
|
-
log.logWarning("Telegram file has no path", fileId);
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
// Generate local filename
|
|
212
|
-
const ts = Date.now();
|
|
213
|
-
const sanitizedName = originalName.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
214
|
-
const filename = `${ts}_${sanitizedName}`;
|
|
215
|
-
const localPath = `${chatId}/attachments/${filename}`;
|
|
216
|
-
const fullDir = join(this.workingDir, chatId, "attachments");
|
|
217
|
-
// Construct download URL
|
|
218
|
-
const downloadUrl = `https://api.telegram.org/file/bot${this.botToken}/${file.file_path}`;
|
|
219
|
-
// Download the file
|
|
220
|
-
await downloadUrlToFile(downloadUrl, join(fullDir, filename));
|
|
221
|
-
return {
|
|
222
|
-
name: originalName,
|
|
223
|
-
localPath: localPath,
|
|
224
|
-
};
|
|
177
|
+
items.push(this.telegramFileItem(doc.file_id, doc.file_name ?? `document_${message.message_id}`));
|
|
225
178
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
179
|
+
const office = this.workspace.office(createOfficeAddress("telegram", chatId));
|
|
180
|
+
const { saved, failed } = await saveIncomingAttachments(office, items);
|
|
181
|
+
for (const failure of failed) {
|
|
182
|
+
log.logWarning(`Failed to process Telegram file`, `${failure.name}: ${failure.error}`);
|
|
229
183
|
}
|
|
184
|
+
return saved.map((item) => ({ name: item.original, localPath: item.localPath }));
|
|
185
|
+
}
|
|
186
|
+
/** One Telegram file as a saveIncomingAttachments item; failures skip, never throw. */
|
|
187
|
+
telegramFileItem(fileId, name) {
|
|
188
|
+
return {
|
|
189
|
+
name,
|
|
190
|
+
download: async (destPath) => {
|
|
191
|
+
const file = await this.client.api.getFile(fileId);
|
|
192
|
+
if (!file.file_path)
|
|
193
|
+
throw new Error(`Telegram file has no path: ${fileId}`);
|
|
194
|
+
await downloadUrlToFile(`https://api.telegram.org/file/bot${this.botToken}/${file.file_path}`, destPath);
|
|
195
|
+
},
|
|
196
|
+
};
|
|
230
197
|
}
|
|
231
198
|
// ==========================================================================
|
|
232
199
|
// Private - Event Handlers
|
|
@@ -288,45 +255,49 @@ export class TelegramMessagingBot {
|
|
|
288
255
|
return text.trim();
|
|
289
256
|
return text.replace(new RegExp(`@${this.botUsername}`, "gi"), "").trim();
|
|
290
257
|
}
|
|
291
|
-
isStopText(text) {
|
|
292
|
-
return /^\/?stop(?:@\w+)?$/i.test(text.trim());
|
|
293
|
-
}
|
|
294
|
-
resolveStopTarget(mc) {
|
|
295
|
-
const directTarget = resolveStopTarget({
|
|
296
|
-
handler: this.handler,
|
|
297
|
-
conversationId: mc.chatId,
|
|
298
|
-
sessionKey: mc.sessionKey,
|
|
299
|
-
});
|
|
300
|
-
if (directTarget)
|
|
301
|
-
return directTarget;
|
|
302
|
-
return resolveOnlyScopedStopTarget(this.handler, mc.chatId);
|
|
303
|
-
}
|
|
304
258
|
setupEventHandlers() {
|
|
305
259
|
// --- Slash commands (registered before catch-all so grammY intercepts them) ---
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if (!mc)
|
|
309
|
-
return;
|
|
310
|
-
const stopTarget = this.resolveStopTarget(mc);
|
|
311
|
-
if (stopTarget) {
|
|
312
|
-
await this.handler.handleStop(stopTarget, mc.chatId, this);
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
await this.postMessage(mc.chatId, formatNothingRunning("telegram"));
|
|
316
|
-
}
|
|
317
|
-
});
|
|
260
|
+
// `/stop` is deliberately NOT registered here: it is a magic word owned by
|
|
261
|
+
// conversation intake, so the catch-all below must receive it.
|
|
318
262
|
this.client.command("new", async (ctx) => {
|
|
319
263
|
const mc = ctx.message ? this.extractMessageContext(ctx.message) : null;
|
|
320
264
|
if (!mc)
|
|
321
265
|
return;
|
|
322
|
-
|
|
266
|
+
const commandText = this.cleanText(mc.text);
|
|
267
|
+
const event = createConversationEvent({
|
|
268
|
+
platform: "telegram",
|
|
269
|
+
type: "command",
|
|
270
|
+
conversationId: mc.chatId,
|
|
271
|
+
conversationKind: mc.conversationKind,
|
|
272
|
+
ts: mc.msgId,
|
|
273
|
+
thread_ts: mc.threadTs,
|
|
274
|
+
sessionKey: mc.sessionKey,
|
|
275
|
+
user: mc.userId,
|
|
276
|
+
userName: mc.userName,
|
|
277
|
+
text: commandText,
|
|
278
|
+
attachments: [],
|
|
279
|
+
});
|
|
280
|
+
this.logToFile(mc.chatId, {
|
|
281
|
+
date: new Date(mc.msg.date * 1000).toISOString(),
|
|
282
|
+
ts: mc.msgId,
|
|
283
|
+
...(mc.conversationKind === "shared" && mc.threadTs ? { threadTs: mc.threadTs } : {}),
|
|
284
|
+
user: mc.userId,
|
|
285
|
+
userName: mc.userName,
|
|
286
|
+
text: commandText,
|
|
287
|
+
attachments: [],
|
|
288
|
+
isMessagingBot: false,
|
|
289
|
+
});
|
|
290
|
+
await this.handler.handleEvent(event, this, createTelegramAdapters(event, this));
|
|
323
291
|
});
|
|
324
292
|
this.client.command("sandbox", async (ctx) => {
|
|
325
293
|
const mc = ctx.message ? this.extractMessageContext(ctx.message) : null;
|
|
326
294
|
if (!mc)
|
|
327
295
|
return;
|
|
328
|
-
|
|
329
|
-
|
|
296
|
+
// The sandbox handler's grammar accepts /sandbox directly (manifest
|
|
297
|
+
// slash forms), so the user's spelling is logged and dispatched as-is.
|
|
298
|
+
const cleanedText = this.cleanText(mc.text);
|
|
299
|
+
const event = createConversationEvent({
|
|
300
|
+
platform: "telegram",
|
|
330
301
|
type: "command",
|
|
331
302
|
conversationId: mc.chatId,
|
|
332
303
|
conversationKind: mc.conversationKind,
|
|
@@ -337,7 +308,7 @@ export class TelegramMessagingBot {
|
|
|
337
308
|
userName: mc.userName,
|
|
338
309
|
text: cleanedText,
|
|
339
310
|
attachments: [],
|
|
340
|
-
};
|
|
311
|
+
});
|
|
341
312
|
this.logToFile(mc.chatId, {
|
|
342
313
|
date: new Date(mc.msg.date * 1000).toISOString(),
|
|
343
314
|
ts: mc.msgId,
|
|
@@ -358,27 +329,9 @@ export class TelegramMessagingBot {
|
|
|
358
329
|
return;
|
|
359
330
|
const cleanedText = this.cleanText(mc.text);
|
|
360
331
|
const addressedToMessagingBot = this.isAddressedToMessagingBot(mc.text, mc.chatType);
|
|
361
|
-
if (this.isStopText(cleanedText)) {
|
|
362
|
-
this.logToFile(mc.chatId, {
|
|
363
|
-
date: new Date(mc.msg.date * 1000).toISOString(),
|
|
364
|
-
ts: mc.msgId,
|
|
365
|
-
user: mc.userId,
|
|
366
|
-
userName: mc.userName,
|
|
367
|
-
text: cleanedText,
|
|
368
|
-
attachments: [],
|
|
369
|
-
isMessagingBot: false,
|
|
370
|
-
});
|
|
371
|
-
const stopTarget = this.resolveStopTarget(mc);
|
|
372
|
-
if (stopTarget) {
|
|
373
|
-
await this.handler.handleStop(stopTarget, mc.chatId, this);
|
|
374
|
-
}
|
|
375
|
-
else if (addressedToMessagingBot || mc.chatType === "private") {
|
|
376
|
-
await this.postMessage(mc.chatId, formatNothingRunning("telegram"));
|
|
377
|
-
}
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
332
|
const isAutoReplyCandidate = mc.chatType !== "private" && !addressedToMessagingBot;
|
|
381
|
-
const eventBase = {
|
|
333
|
+
const eventBase = createConversationEvent({
|
|
334
|
+
platform: "telegram",
|
|
382
335
|
type: "message",
|
|
383
336
|
conversationId: mc.chatId,
|
|
384
337
|
conversationKind: mc.conversationKind,
|
|
@@ -388,11 +341,16 @@ export class TelegramMessagingBot {
|
|
|
388
341
|
user: mc.userId,
|
|
389
342
|
userName: mc.userName,
|
|
390
343
|
text: cleanedText,
|
|
391
|
-
};
|
|
344
|
+
});
|
|
392
345
|
await processMessageIntake({
|
|
393
346
|
eventBase,
|
|
394
|
-
|
|
347
|
+
office: this.workspace.office(eventBase.address),
|
|
395
348
|
isAutoReplyCandidate,
|
|
349
|
+
magicWord: {
|
|
350
|
+
addressed: addressedToMessagingBot || mc.chatType === "private",
|
|
351
|
+
scopeFallback: "always",
|
|
352
|
+
},
|
|
353
|
+
busyPolicy: "reject",
|
|
396
354
|
logEntryBase: {
|
|
397
355
|
date: new Date(mc.msg.date * 1000).toISOString(),
|
|
398
356
|
ts: mc.msgId,
|
|
@@ -409,12 +367,6 @@ export class TelegramMessagingBot {
|
|
|
409
367
|
handler: this.handler,
|
|
410
368
|
bot: this,
|
|
411
369
|
createContext: (event) => createTelegramAdapters(event, this),
|
|
412
|
-
beforeEnqueue: async () => {
|
|
413
|
-
if (!this.handler.isRunning(mc.sessionKey))
|
|
414
|
-
return true;
|
|
415
|
-
await this.postMessage(mc.chatId, formatAlreadyWorking("telegram", "/stop"));
|
|
416
|
-
return false;
|
|
417
|
-
},
|
|
418
370
|
});
|
|
419
371
|
});
|
|
420
372
|
}
|