@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,8 +1,15 @@
|
|
|
1
1
|
import * as log from "../../log.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { createProgressiveRenderer } from "../progressive-renderer.js";
|
|
3
|
+
import { formatToolArgs, splitText } from "../shared.js";
|
|
4
4
|
import { buildMrkdwnContextBlock } from "./bot.js";
|
|
5
|
-
|
|
5
|
+
import { renderSlackBlocks } from "./blocks.js";
|
|
6
|
+
const MAX_MAIN_LENGTH = 35000;
|
|
7
|
+
/**
|
|
8
|
+
* Slack's own SDK buffers streamed output at this size before sending, for
|
|
9
|
+
* exactly the reason we do: appends are rate-limited per call, so forwarding
|
|
10
|
+
* every token spends the budget on latency nobody can perceive.
|
|
11
|
+
*/
|
|
12
|
+
const STREAM_MIN_DELTA_CHARS = 256;
|
|
6
13
|
const MAX_THREAD_LENGTH = 20000;
|
|
7
14
|
const FALLBACK_MAIN_LENGTH = 3000;
|
|
8
15
|
const WORKING_INDICATOR = " ...";
|
|
@@ -13,28 +20,43 @@ function isSlackMsgTooLong(err) {
|
|
|
13
20
|
const message = err instanceof Error ? err.message : String(err);
|
|
14
21
|
return data?.error === "msg_too_long" || message.includes("msg_too_long");
|
|
15
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Where to cut a response that has to be truncated.
|
|
25
|
+
*
|
|
26
|
+
* Back off to the last line break rather than slicing at the exact budget: a
|
|
27
|
+
* hard cut lands mid-word, and since the notice is inserted between the two
|
|
28
|
+
* halves, the line cannot be read whole in either place. Only back off within
|
|
29
|
+
* reach of the limit — a response with no line break in its final quarter has
|
|
30
|
+
* nothing better to offer, and losing a quarter of it would be worse.
|
|
31
|
+
*/
|
|
32
|
+
function truncationCut(text, limit) {
|
|
33
|
+
if (text.length <= limit)
|
|
34
|
+
return text.length;
|
|
35
|
+
const lastBreak = text.lastIndexOf("\n", limit);
|
|
36
|
+
return lastBreak > limit * 0.75 ? lastBreak : limit;
|
|
37
|
+
}
|
|
16
38
|
function fallbackLongSlackText(text, overflowLink, prefixLength = FALLBACK_MAIN_LENGTH) {
|
|
17
39
|
const suffix = overflowLink
|
|
18
40
|
? `\n\n_(message too long for Slack; continued in thread; session view: <${overflowLink}|open>)_`
|
|
19
41
|
: "\n\n_(message too long for Slack; continued in thread)_";
|
|
20
|
-
|
|
42
|
+
const cut = truncationCut(text, prefixLength);
|
|
43
|
+
return { text: `${text.slice(0, cut)}${suffix}`, cut };
|
|
21
44
|
}
|
|
22
45
|
async function postSlackTextWithFallback(post, text, overflowLink) {
|
|
23
46
|
let prefixLength = FALLBACK_MAIN_LENGTH;
|
|
24
|
-
let lastErr;
|
|
25
47
|
for (;;) {
|
|
26
|
-
const
|
|
48
|
+
const fallback = fallbackLongSlackText(text, overflowLink, prefixLength);
|
|
27
49
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
50
|
+
await post(fallback.text);
|
|
51
|
+
// The continuation resumes from where the text was actually cut, which
|
|
52
|
+
// is not the nominal budget once it backs off to a line break.
|
|
53
|
+
return { text: fallback.text, prefixLength: fallback.cut };
|
|
30
54
|
}
|
|
31
55
|
catch (err) {
|
|
32
56
|
if (!isSlackMsgTooLong(err))
|
|
33
57
|
throw err;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
|
|
37
|
-
}
|
|
58
|
+
if (prefixLength === 0)
|
|
59
|
+
throw err;
|
|
38
60
|
prefixLength = Math.max(0, Math.floor(prefixLength / 2));
|
|
39
61
|
}
|
|
40
62
|
}
|
|
@@ -51,351 +73,203 @@ function formatSlackToolResult(result) {
|
|
|
51
73
|
text += `*Result:*\n\`\`\`\n${result.result}\n\`\`\``;
|
|
52
74
|
return text;
|
|
53
75
|
}
|
|
76
|
+
function closeOpenFences(text) {
|
|
77
|
+
let openMarker = null;
|
|
78
|
+
for (const line of text.split("\n")) {
|
|
79
|
+
const marker = line.match(/^\s*(`{3,}|~{3,})/)?.[1];
|
|
80
|
+
if (marker === undefined)
|
|
81
|
+
continue;
|
|
82
|
+
if (openMarker === null)
|
|
83
|
+
openMarker = marker;
|
|
84
|
+
else if (marker[0] === openMarker[0] && marker.length >= openMarker.length)
|
|
85
|
+
openMarker = null;
|
|
86
|
+
}
|
|
87
|
+
return openMarker ? `${text}\n${openMarker}` : text;
|
|
88
|
+
}
|
|
89
|
+
function needsCanonicalRender(text) {
|
|
90
|
+
return renderSlackBlocks(text).blocks.some((block) => block.type === "table");
|
|
91
|
+
}
|
|
54
92
|
export function createSlackResponseContext({ event, slack, sessionPlan, replyMode, message, }) {
|
|
55
|
-
|
|
93
|
+
const channelId = event.channel;
|
|
94
|
+
const conversationId = event.conversationId;
|
|
95
|
+
const eventFilename = event.ts.match(/^event:([^:]+(?:\.json)?)/)?.[1];
|
|
96
|
+
const { rootTs, isThreaded } = sessionPlan;
|
|
97
|
+
const replyInThread = Boolean(rootTs && (isThreaded || replyMode === "thread"));
|
|
56
98
|
let assistantStatusFailureWarned = false;
|
|
99
|
+
/** The tail of an over-long response, awaiting delivery to a thread. */
|
|
100
|
+
let pendingContinuation = "";
|
|
101
|
+
let continuationAnchor = null;
|
|
102
|
+
/** How much of that tail the thread already holds. */
|
|
103
|
+
let continuationSent = "";
|
|
57
104
|
const onAssistantStatusError = (label, err) => {
|
|
58
105
|
if (assistantStatusFailureWarned)
|
|
59
106
|
return;
|
|
60
107
|
assistantStatusFailureWarned = true;
|
|
61
108
|
log.logWarning(`Slack setAssistantStatus failed (${label}; further occurrences suppressed for this session)`, err instanceof Error ? err.message : String(err));
|
|
62
109
|
};
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
let isWorking = true;
|
|
66
|
-
let mainResponseLogged = false;
|
|
67
|
-
let streamActive = false;
|
|
68
|
-
let streamUnavailable = false;
|
|
69
|
-
let streamedText = "";
|
|
70
|
-
let updatePromise = Promise.resolve();
|
|
71
|
-
const channelId = event.channel;
|
|
72
|
-
const conversationId = event.conversationId;
|
|
73
|
-
// Slack message timestamps are numeric; event-file triggers use `event:<filename>`.
|
|
74
|
-
const eventFilename = event.ts.match(/^event:([^:]+(?:\.json)?)/)?.[1];
|
|
75
|
-
const { rootTs, isThreaded } = sessionPlan;
|
|
76
|
-
const replyInThread = Boolean(rootTs && (isThreaded || replyMode === "thread"));
|
|
77
|
-
/**
|
|
78
|
-
* Post the first visible reply.
|
|
79
|
-
* Default Slack behavior is now top-level channel replies.
|
|
80
|
-
* If the triggering message is already inside a thread, stay in that thread.
|
|
81
|
-
*/
|
|
82
|
-
const postFirstMessage = async (text) => {
|
|
83
|
-
if (replyInThread && rootTs) {
|
|
84
|
-
return slack.postInThread(channelId, rootTs, text);
|
|
85
|
-
}
|
|
86
|
-
return slack.postMessage(channelId, text);
|
|
87
|
-
};
|
|
88
|
-
const postDiagnosticDirect = async (text, options) => {
|
|
89
|
-
const threadAnchor = messageTs ?? rootTs;
|
|
110
|
+
const postThreadDiagnostic = async (text, options = {}, responseId) => {
|
|
111
|
+
const threadAnchor = responseId ?? rootTs;
|
|
90
112
|
if (!threadAnchor)
|
|
91
|
-
return;
|
|
113
|
+
return [];
|
|
114
|
+
const ids = [];
|
|
92
115
|
for (const part of splitText(text, MAX_THREAD_LENGTH, formatSlackContinuation)) {
|
|
93
|
-
if (options
|
|
94
|
-
|
|
116
|
+
if (options.style === "muted") {
|
|
117
|
+
ids.push(await slack.postInThreadBlocks(channelId, threadAnchor, part, [
|
|
95
118
|
buildMrkdwnContextBlock(part),
|
|
96
|
-
]);
|
|
97
|
-
threadMessageTs.push(ts);
|
|
119
|
+
]));
|
|
98
120
|
}
|
|
99
121
|
else {
|
|
100
|
-
|
|
101
|
-
const ts = await slack.postInThread(channelId, threadAnchor, diagnosticText);
|
|
102
|
-
threadMessageTs.push(ts);
|
|
122
|
+
ids.push(await slack.postInThread(channelId, threadAnchor, options.style === "error" ? `_${part}_` : part));
|
|
103
123
|
}
|
|
104
124
|
}
|
|
125
|
+
return ids;
|
|
105
126
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const postOrUpdateMain = async (body, handleMsgTooLong = true) => {
|
|
118
|
-
const writeMain = async (text) => {
|
|
119
|
-
if (messageTs) {
|
|
120
|
-
await slack.updateMessage(channelId, messageTs, text);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
if (replyInThread && rootTs) {
|
|
124
|
-
messageTs = await slack.postInThread(channelId, rootTs, text);
|
|
125
|
-
return messageTs;
|
|
126
|
-
}
|
|
127
|
-
messageTs = await postFirstMessage(text);
|
|
128
|
-
return messageTs;
|
|
129
|
-
};
|
|
130
|
-
try {
|
|
131
|
-
await writeMain(body);
|
|
132
|
-
}
|
|
133
|
-
catch (err) {
|
|
134
|
-
if (!handleMsgTooLong || !isSlackMsgTooLong(err))
|
|
135
|
-
throw err;
|
|
136
|
-
const fallback = await postSlackTextWithFallback(writeMain, body);
|
|
137
|
-
accumulatedText = fallback.text;
|
|
138
|
-
stream.setText(accumulatedText);
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
const abandonActiveStream = async () => {
|
|
142
|
-
if (!streamActive || !messageTs)
|
|
127
|
+
/**
|
|
128
|
+
* Deliver the tail of an over-long response to its thread.
|
|
129
|
+
*
|
|
130
|
+
* Called only at points where the response is final, and idempotent, so the
|
|
131
|
+
* replace path and the end of the run can both call it without the thread
|
|
132
|
+
* seeing anything twice. Sending the whole remainder in one message is also
|
|
133
|
+
* what keeps it faithful: Slack trims message text, so every extra split is
|
|
134
|
+
* a chance to drop the whitespace it lands on.
|
|
135
|
+
*/
|
|
136
|
+
const flushContinuation = async () => {
|
|
137
|
+
if (!pendingContinuation || pendingContinuation === continuationSent)
|
|
143
138
|
return;
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (
|
|
149
|
-
messageTs = null;
|
|
150
|
-
};
|
|
151
|
-
const startOrAppendStream = async (text, displayText) => {
|
|
152
|
-
if (streamUnavailable) {
|
|
153
|
-
await postOrUpdateMain(displayText);
|
|
139
|
+
const isExtension = pendingContinuation.startsWith(continuationSent);
|
|
140
|
+
const unsent = isExtension
|
|
141
|
+
? pendingContinuation.slice(continuationSent.length)
|
|
142
|
+
: pendingContinuation;
|
|
143
|
+
if (!unsent.trim())
|
|
154
144
|
return;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
await abandonActiveStream();
|
|
160
|
-
await postOrUpdateMain(displayText);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const delta = text.slice(streamedText.length);
|
|
164
|
-
if (delta) {
|
|
165
|
-
await slack.appendMessageStream(channelId, messageTs, delta);
|
|
166
|
-
streamedText = text;
|
|
167
|
-
}
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (!replyInThread || !rootTs) {
|
|
171
|
-
streamUnavailable = true;
|
|
172
|
-
await postOrUpdateMain(displayText);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
messageTs = await slack.startMessageStream(channelId, text, rootTs, event.user);
|
|
176
|
-
streamActive = true;
|
|
177
|
-
streamedText = text;
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
streamUnavailable = true;
|
|
181
|
-
log.logWarning("Slack streaming unavailable; falling back to chat.update", err instanceof Error ? err.message : String(err));
|
|
182
|
-
await abandonActiveStream();
|
|
183
|
-
await postOrUpdateMain(displayText);
|
|
184
|
-
}
|
|
145
|
+
await postThreadDiagnostic(isExtension && continuationSent
|
|
146
|
+
? unsent
|
|
147
|
+
: `_(continued from truncated message)_\n\n${unsent}`, {}, continuationAnchor);
|
|
148
|
+
continuationSent = pendingContinuation;
|
|
185
149
|
};
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
150
|
+
// Reserve before choosing, not after failing: exceeding the start tier
|
|
151
|
+
// costs a wasted request and a visibly worse first response, and the
|
|
152
|
+
// buffered path is a working answer rather than a degraded one.
|
|
153
|
+
const streamKind = replyInThread && rootTs && slack.tryReserveStreamStart() ? "native" : "buffered";
|
|
154
|
+
const { responder } = createProgressiveRenderer({
|
|
155
|
+
label: "Slack",
|
|
156
|
+
maxLength: MAX_MAIN_LENGTH,
|
|
157
|
+
initialResponseId: sessionPlan.initialMessageTs ?? null,
|
|
158
|
+
formatContinuation: formatSlackContinuation,
|
|
159
|
+
errorPrefix: "",
|
|
160
|
+
workingIndicator: streamKind === "buffered" ? WORKING_INDICATOR : undefined,
|
|
161
|
+
formatProvisional: (text, working) => {
|
|
162
|
+
const closed = closeOpenFences(text);
|
|
163
|
+
return working ? `${closed}${WORKING_INDICATOR}` : closed;
|
|
198
164
|
},
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (!accumulatedText.startsWith(streamedText)) {
|
|
205
|
-
await abandonActiveStream();
|
|
206
|
-
await postOrUpdateMain(accumulatedText);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
const delta = accumulatedText.slice(streamedText.length);
|
|
210
|
-
if (delta) {
|
|
211
|
-
await slack.appendMessageStream(channelId, messageTs, delta);
|
|
212
|
-
streamedText = accumulatedText;
|
|
213
|
-
}
|
|
214
|
-
await slack.stopMessageStream(channelId, messageTs);
|
|
215
|
-
streamActive = false;
|
|
216
|
-
streamedText = "";
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
catch (err) {
|
|
220
|
-
streamUnavailable = true;
|
|
221
|
-
log.logWarning("Slack streaming unavailable; falling back to chat.update", err instanceof Error ? err.message : String(err));
|
|
222
|
-
await abandonActiveStream();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (messageTs || accumulatedText) {
|
|
226
|
-
await postOrUpdateMain(accumulatedText);
|
|
227
|
-
}
|
|
165
|
+
prepareSource: (text, working) => {
|
|
166
|
+
const limit = working ? MAX_MAIN_LENGTH - WORKING_INDICATOR.length : MAX_MAIN_LENGTH;
|
|
167
|
+
if (text.length <= limit)
|
|
168
|
+
return text;
|
|
169
|
+
return `${text.slice(0, Math.max(0, limit - TRUNCATION_NOTE_INCREMENTAL.length))}${TRUNCATION_NOTE_INCREMENTAL}`;
|
|
228
170
|
},
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
171
|
+
supportsDeltas: true,
|
|
172
|
+
stream: streamKind === "native"
|
|
173
|
+
? {
|
|
174
|
+
start: (text) => slack.startMessageStream(channelId, text, rootTs, event.user),
|
|
175
|
+
append: (id, delta) => slack.appendMessageStream(channelId, id, delta),
|
|
176
|
+
stop: (id) => slack.stopMessageStream(channelId, id),
|
|
177
|
+
minDeltaChars: STREAM_MIN_DELTA_CHARS,
|
|
234
178
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
179
|
+
: undefined,
|
|
180
|
+
needsCanonicalRender,
|
|
181
|
+
formatToolResult: formatSlackToolResult,
|
|
182
|
+
responseErrorContext: (responseId) => ({
|
|
183
|
+
platform: "slack",
|
|
184
|
+
conversationId,
|
|
185
|
+
channelId,
|
|
186
|
+
messageId: message.id,
|
|
187
|
+
sessionKey: message.sessionKey,
|
|
188
|
+
responseMessageId: responseId,
|
|
189
|
+
threadTs: rootTs,
|
|
190
|
+
conversationKind: message.conversationKind,
|
|
191
|
+
isThreaded,
|
|
192
|
+
}),
|
|
193
|
+
post: (text) => replyInThread && rootTs
|
|
194
|
+
? slack.postInThread(channelId, rootTs, text)
|
|
195
|
+
: slack.postMessage(channelId, text),
|
|
196
|
+
update: (id, text) => slack.updateMessage(channelId, id, text),
|
|
197
|
+
postExtra: (text, responseId) => slack.postInThread(channelId, responseId ?? rootTs ?? "", text),
|
|
198
|
+
postDiagnostic: postThreadDiagnostic,
|
|
199
|
+
delete: async (id) => {
|
|
200
|
+
if (rootTs) {
|
|
201
|
+
await slack
|
|
202
|
+
.setAssistantStatus(channelId, rootTs, "")
|
|
203
|
+
.catch((err) => onAssistantStatusError("clear-on-delete", err));
|
|
238
204
|
}
|
|
239
|
-
|
|
240
|
-
await updatePromise;
|
|
241
|
-
};
|
|
242
|
-
const responder = {
|
|
243
|
-
respond: async (text) => {
|
|
244
|
-
await queueResponseOperation("respond", "respond", async () => {
|
|
245
|
-
accumulatedText = accumulatedText ? `${accumulatedText}\n${text}` : text;
|
|
246
|
-
const mainLimit = isWorking
|
|
247
|
-
? MAX_MAIN_LENGTH - WORKING_INDICATOR.length
|
|
248
|
-
: MAX_MAIN_LENGTH;
|
|
249
|
-
if (accumulatedText.length > mainLimit) {
|
|
250
|
-
accumulatedText =
|
|
251
|
-
accumulatedText.substring(0, mainLimit - TRUNCATION_NOTE_INCREMENTAL.length) +
|
|
252
|
-
TRUNCATION_NOTE_INCREMENTAL;
|
|
253
|
-
}
|
|
254
|
-
stream.setText(accumulatedText);
|
|
255
|
-
const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
|
|
256
|
-
await startOrAppendStream(text, displayText);
|
|
257
|
-
}, () => ({
|
|
258
|
-
phase: messageTs ? "update" : "initial_post",
|
|
259
|
-
textLength: text.length,
|
|
260
|
-
accumulatedLength: accumulatedText.length,
|
|
261
|
-
}));
|
|
205
|
+
await slack.deleteMessage(channelId, id);
|
|
262
206
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
207
|
+
deleteExtra: (id) => slack.deleteMessage(channelId, String(id)),
|
|
208
|
+
setTyping: async (isTyping, responseId) => {
|
|
209
|
+
if (isTyping && !responseId && rootTs) {
|
|
210
|
+
const statusText = eventFilename ? `Starting event: ${eventFilename}` : "Thinking";
|
|
211
|
+
await slack
|
|
212
|
+
.setAssistantStatus(channelId, rootTs, statusText)
|
|
213
|
+
.catch((err) => onAssistantStatusError("typing", err));
|
|
214
|
+
}
|
|
267
215
|
},
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
await stream.finish(finalText);
|
|
271
|
-
accumulatedText = stream.getText();
|
|
272
|
-
if (messageTs && accumulatedText.trim() && !mainResponseLogged) {
|
|
273
|
-
slack.logBotResponse(channelId, accumulatedText, messageTs, replyInThread ? rootTs : undefined);
|
|
274
|
-
mainResponseLogged = true;
|
|
275
|
-
}
|
|
276
|
-
if (!rootTs)
|
|
277
|
-
return;
|
|
216
|
+
onWorkingChanged: async (working, responseId) => {
|
|
217
|
+
if (!working && responseId && rootTs) {
|
|
278
218
|
await slack
|
|
279
219
|
.setAssistantStatus(channelId, rootTs, "")
|
|
280
220
|
.catch((err) => onAssistantStatusError("clear-on-idle", err));
|
|
281
|
-
}, () => ({ finalTextLength: finalText?.length }));
|
|
282
|
-
},
|
|
283
|
-
replaceResponse: async (text, options) => {
|
|
284
|
-
await queueResponseOperation("replaceResponse", "replace_response", async () => {
|
|
285
|
-
// Lazy: only mint a token if Slack actually rejects the message.
|
|
286
|
-
let overflowLink;
|
|
287
|
-
const resolveOverflowLink = () => {
|
|
288
|
-
if (overflowLink === undefined && options?.createOverflowLink) {
|
|
289
|
-
overflowLink = options.createOverflowLink();
|
|
290
|
-
}
|
|
291
|
-
return overflowLink;
|
|
292
|
-
};
|
|
293
|
-
accumulatedText = text;
|
|
294
|
-
stream.setText(accumulatedText);
|
|
295
|
-
const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
|
|
296
|
-
try {
|
|
297
|
-
if (streamActive && messageTs) {
|
|
298
|
-
await slack.stopMessageStream(channelId, messageTs);
|
|
299
|
-
streamActive = false;
|
|
300
|
-
streamedText = "";
|
|
301
|
-
}
|
|
302
|
-
await postOrUpdateMain(displayText, false);
|
|
303
|
-
}
|
|
304
|
-
catch (err) {
|
|
305
|
-
if (!isSlackMsgTooLong(err))
|
|
306
|
-
throw err;
|
|
307
|
-
const link = resolveOverflowLink();
|
|
308
|
-
const fallback = await postSlackTextWithFallback(async (body) => {
|
|
309
|
-
await postOrUpdateMain(body);
|
|
310
|
-
}, text, link);
|
|
311
|
-
accumulatedText = fallback.text;
|
|
312
|
-
const continuation = text.slice(fallback.prefixLength).trimStart();
|
|
313
|
-
if (continuation) {
|
|
314
|
-
await postDiagnosticDirect(`_(continued from truncated message)_\n\n${continuation}`);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}, () => ({
|
|
318
|
-
textLength: text.length,
|
|
319
|
-
hadExistingResponse: Boolean(messageTs),
|
|
320
|
-
}));
|
|
321
|
-
},
|
|
322
|
-
respondDiagnostic: async (text, options) => {
|
|
323
|
-
await queueResponseOperation("respondDiagnostic", "respond_diagnostic", async () => {
|
|
324
|
-
await postDiagnosticDirect(text, options);
|
|
325
|
-
}, () => ({
|
|
326
|
-
textLength: text.length,
|
|
327
|
-
style: options?.style,
|
|
328
|
-
}));
|
|
329
|
-
},
|
|
330
|
-
respondToolResult: async (result) => {
|
|
331
|
-
await responder.respondDiagnostic(formatSlackToolResult(result));
|
|
332
|
-
},
|
|
333
|
-
setTyping: async (isTyping) => {
|
|
334
|
-
if (isTyping && !messageTs && rootTs) {
|
|
335
|
-
try {
|
|
336
|
-
const statusText = eventFilename ? `Starting event: ${eventFilename}` : "Thinking";
|
|
337
|
-
await slack.setAssistantStatus(channelId, rootTs, statusText);
|
|
338
|
-
}
|
|
339
|
-
catch (err) {
|
|
340
|
-
// Assistant API not available — first respond() call will create the message.
|
|
341
|
-
onAssistantStatusError("typing", err);
|
|
342
|
-
}
|
|
343
221
|
}
|
|
344
222
|
},
|
|
345
|
-
|
|
346
|
-
|
|
223
|
+
onFinish: async (text, responseId) => {
|
|
224
|
+
if (responseId && text.trim()) {
|
|
225
|
+
slack.logBotResponse(channelId, text, responseId, replyInThread ? rootTs : undefined);
|
|
226
|
+
}
|
|
227
|
+
if (rootTs) {
|
|
228
|
+
void slack
|
|
229
|
+
.setAssistantStatus(channelId, rootTs, "")
|
|
230
|
+
.catch((err) => onAssistantStatusError("clear-on-idle", err));
|
|
231
|
+
}
|
|
232
|
+
// The run is over, so a truncated response has to hand over its tail now
|
|
233
|
+
// or lose it — the notice on the main message already promised it.
|
|
234
|
+
await flushContinuation();
|
|
347
235
|
},
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
? [
|
|
355
|
-
slack.stopMessageStream(channelId, messageTs).then(() => {
|
|
356
|
-
streamActive = false;
|
|
357
|
-
}),
|
|
358
|
-
]
|
|
359
|
-
: [slack.updateMessage(channelId, messageTs, displayText)];
|
|
360
|
-
if (!working && rootTs) {
|
|
361
|
-
updates.push(slack
|
|
362
|
-
.setAssistantStatus(channelId, rootTs, "")
|
|
363
|
-
.catch((err) => onAssistantStatusError("clear-on-idle", err)));
|
|
364
|
-
}
|
|
365
|
-
await Promise.all(updates);
|
|
236
|
+
isTooLongError: isSlackMsgTooLong,
|
|
237
|
+
handleTooLong: async (text, operation, options, responseId, write, getResponseId) => {
|
|
238
|
+
let overflowLink;
|
|
239
|
+
const resolveOverflowLink = () => {
|
|
240
|
+
if (overflowLink === undefined && options?.createOverflowLink) {
|
|
241
|
+
overflowLink = options.createOverflowLink();
|
|
366
242
|
}
|
|
367
|
-
|
|
243
|
+
return overflowLink;
|
|
244
|
+
};
|
|
245
|
+
const fallback = await postSlackTextWithFallback(write, text, resolveOverflowLink());
|
|
246
|
+
// The truncation notice promises a thread continuation unconditionally,
|
|
247
|
+
// so every path that prints it has to deliver one. Gating delivery on
|
|
248
|
+
// the final "replace" dropped the tail whenever a run ended on the
|
|
249
|
+
// post-stream canonical render instead — silent data loss behind a
|
|
250
|
+
// message that claimed the rest was elsewhere.
|
|
251
|
+
//
|
|
252
|
+
// Incremental renders reach this repeatedly as the text grows, so the
|
|
253
|
+
// tail is only recorded here and delivered once the response is final.
|
|
254
|
+
// Posting each increment as it arrived produced a thread of dozens of
|
|
255
|
+
// fragments, and every fragment boundary that landed on a space lost it,
|
|
256
|
+
// since Slack trims message text.
|
|
257
|
+
pendingContinuation = text.slice(fallback.prefixLength).trimStart();
|
|
258
|
+
continuationAnchor = replyInThread
|
|
259
|
+
? (rootTs ?? getResponseId() ?? responseId)
|
|
260
|
+
: (getResponseId() ?? responseId);
|
|
261
|
+
// A replace is already the final word on this response; anything else
|
|
262
|
+
// waits for the run to finish.
|
|
263
|
+
if (operation === "replace")
|
|
264
|
+
await flushContinuation();
|
|
265
|
+
return fallback;
|
|
368
266
|
},
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
try {
|
|
374
|
-
await slack.setAssistantStatus(channelId, rootTs, "");
|
|
375
|
-
}
|
|
376
|
-
catch {
|
|
377
|
-
// Ignore errors clearing status
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// Delete thread messages first (in reverse order)
|
|
381
|
-
for (let i = threadMessageTs.length - 1; i >= 0; i--) {
|
|
382
|
-
try {
|
|
383
|
-
await slack.deleteMessage(channelId, threadMessageTs[i]);
|
|
384
|
-
}
|
|
385
|
-
catch {
|
|
386
|
-
// Ignore errors deleting thread messages
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
threadMessageTs.length = 0;
|
|
390
|
-
// Then delete main message
|
|
391
|
-
if (messageTs) {
|
|
392
|
-
await slack.deleteMessage(channelId, messageTs);
|
|
393
|
-
messageTs = null;
|
|
394
|
-
}
|
|
395
|
-
});
|
|
396
|
-
await updatePromise;
|
|
267
|
+
uploadFile: (filePath, title) => slack.uploadFile(channelId, filePath, title, replyInThread ? rootTs : undefined),
|
|
268
|
+
react: async (emoji) => {
|
|
269
|
+
if (!eventFilename)
|
|
270
|
+
await slack.addReaction(channelId, event.ts, emoji);
|
|
397
271
|
},
|
|
398
|
-
};
|
|
272
|
+
});
|
|
399
273
|
return responder;
|
|
400
274
|
}
|
|
401
275
|
//# sourceMappingURL=response-lifecycle.js.map
|