@geminixiang/mikan 1.0.0-beta.76 → 1.0.0-beta.78
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 +39 -0
- package/dist/adapters/commands/login.d.ts.map +1 -1
- package/dist/adapters/commands/login.js +0 -9
- package/dist/adapters/commands/login.js.map +1 -1
- package/dist/adapters/commands/manifest.d.ts +0 -19
- package/dist/adapters/commands/manifest.d.ts.map +1 -1
- package/dist/adapters/commands/manifest.js +0 -34
- package/dist/adapters/commands/manifest.js.map +1 -1
- package/dist/adapters/commands/model.d.ts +0 -5
- package/dist/adapters/commands/model.d.ts.map +1 -1
- package/dist/adapters/commands/model.js +0 -5
- package/dist/adapters/commands/model.js.map +1 -1
- package/dist/adapters/commands/new.d.ts.map +1 -1
- package/dist/adapters/commands/new.js +0 -2
- package/dist/adapters/commands/new.js.map +1 -1
- package/dist/adapters/commands/registry.d.ts +0 -1
- package/dist/adapters/commands/registry.d.ts.map +1 -1
- package/dist/adapters/commands/registry.js +0 -8
- package/dist/adapters/commands/registry.js.map +1 -1
- package/dist/adapters/commands/session-view.d.ts.map +1 -1
- package/dist/adapters/commands/session-view.js +0 -2
- package/dist/adapters/commands/session-view.js.map +1 -1
- package/dist/adapters/commands/types.d.ts +0 -29
- package/dist/adapters/commands/types.d.ts.map +1 -1
- package/dist/adapters/commands/types.js.map +1 -1
- package/dist/adapters/commands/utils.d.ts +0 -3
- package/dist/adapters/commands/utils.d.ts.map +1 -1
- package/dist/adapters/commands/utils.js +0 -3
- package/dist/adapters/commands/utils.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +0 -4
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +5 -41
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +0 -23
- package/dist/adapters/discord/components.d.ts.map +1 -1
- package/dist/adapters/discord/components.js +0 -23
- package/dist/adapters/discord/components.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +1 -11
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +0 -1
- package/dist/adapters/discord/format.d.ts.map +1 -1
- package/dist/adapters/discord/format.js +0 -37
- package/dist/adapters/discord/format.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +0 -44
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +1 -120
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +0 -57
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +0 -59
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +1 -8
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +0 -55
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +0 -59
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/ids.d.ts +0 -27
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +0 -29
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/repo.d.ts +0 -25
- package/dist/adapters/github/repo.d.ts.map +1 -1
- package/dist/adapters/github/repo.js +0 -49
- package/dist/adapters/github/repo.js.map +1 -1
- package/dist/adapters/github/tool-pack.d.ts +0 -10
- package/dist/adapters/github/tool-pack.d.ts.map +1 -1
- package/dist/adapters/github/tool-pack.js +0 -10
- package/dist/adapters/github/tool-pack.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts +0 -6
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +0 -7
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/issue.d.ts +0 -5
- package/dist/adapters/github/tools/issue.d.ts.map +1 -1
- package/dist/adapters/github/tools/issue.js +0 -5
- package/dist/adapters/github/tools/issue.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts +0 -7
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +0 -7
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/tools/read.d.ts +0 -6
- package/dist/adapters/github/tools/read.d.ts.map +1 -1
- package/dist/adapters/github/tools/read.js +0 -8
- package/dist/adapters/github/tools/read.js.map +1 -1
- package/dist/adapters/github/tools/review-reply.d.ts +0 -5
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
- package/dist/adapters/github/tools/review-reply.js +0 -5
- package/dist/adapters/github/tools/review-reply.js.map +1 -1
- package/dist/adapters/github/tools/sync.d.ts +0 -6
- package/dist/adapters/github/tools/sync.d.ts.map +1 -1
- package/dist/adapters/github/tools/sync.js +0 -6
- package/dist/adapters/github/tools/sync.js.map +1 -1
- package/dist/adapters/github/types.d.ts +0 -88
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +0 -13
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js +0 -16
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/index.d.ts +3 -4
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/intake.d.ts +0 -17
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +6 -32
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +0 -10
- package/dist/adapters/markdown-tables.d.ts.map +1 -1
- package/dist/adapters/markdown-tables.js +1 -42
- package/dist/adapters/markdown-tables.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +3 -25
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +0 -57
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +0 -71
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +0 -49
- package/dist/adapters/slack/assistant.d.ts.map +1 -1
- package/dist/adapters/slack/assistant.js +0 -97
- package/dist/adapters/slack/assistant.js.map +1 -1
- package/dist/adapters/slack/auto-reply-context.d.ts +0 -7
- package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -1
- package/dist/adapters/slack/auto-reply-context.js +0 -7
- package/dist/adapters/slack/auto-reply-context.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts +0 -9
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +0 -20
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +0 -116
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +7 -231
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +1 -3
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts +0 -13
- package/dist/adapters/slack/jev-context.d.ts.map +1 -1
- package/dist/adapters/slack/jev-context.js +0 -12
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/markdown.d.ts +0 -1
- package/dist/adapters/slack/markdown.d.ts.map +1 -1
- package/dist/adapters/slack/markdown.js +0 -5
- package/dist/adapters/slack/markdown.js.map +1 -1
- package/dist/adapters/slack/persona.d.ts +0 -9
- package/dist/adapters/slack/persona.d.ts.map +1 -1
- package/dist/adapters/slack/persona.js +0 -9
- package/dist/adapters/slack/persona.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +1 -45
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +2 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +2 -2
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +0 -25
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -1
- package/dist/adapters/slack/stream-limits.js +0 -34
- package/dist/adapters/slack/stream-limits.js.map +1 -1
- package/dist/adapters/slack/task-intent.d.ts +0 -13
- package/dist/adapters/slack/task-intent.d.ts.map +1 -1
- package/dist/adapters/slack/task-intent.js +0 -7
- package/dist/adapters/slack/task-intent.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts +0 -1
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +1 -9
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +0 -6
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
- package/dist/adapters/slack/tool-pack.js +0 -6
- package/dist/adapters/slack/tool-pack.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
- package/dist/adapters/slack/tools/blockkit.js +0 -11
- package/dist/adapters/slack/tools/blockkit.js.map +1 -1
- package/dist/adapters/slack/types.d.ts +0 -19
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/slack/update-diagnostics.d.ts +0 -1
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -1
- package/dist/adapters/slack/update-diagnostics.js +1 -7
- package/dist/adapters/slack/update-diagnostics.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +0 -6
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +1 -50
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +1 -8
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +0 -57
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts +4 -0
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
- package/dist/adapters/web/admin/client-assets.js +1765 -0
- package/dist/adapters/web/admin/client-assets.js.map +1 -0
- package/dist/adapters/web/admin/portal.d.ts +0 -10
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +6 -1909
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/types.d.ts +0 -3
- package/dist/adapters/web/admin/types.d.ts.map +1 -1
- package/dist/adapters/web/admin/types.js.map +1 -1
- package/dist/adapters/web/login/oauth.d.ts.map +1 -1
- package/dist/adapters/web/login/oauth.js +3 -7
- package/dist/adapters/web/login/oauth.js.map +1 -1
- package/dist/adapters/web/login/portal.d.ts +0 -10
- package/dist/adapters/web/login/portal.d.ts.map +1 -1
- package/dist/adapters/web/login/portal.js +4 -37
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/login/types.d.ts +0 -5
- package/dist/adapters/web/login/types.d.ts.map +1 -1
- package/dist/adapters/web/login/types.js.map +1 -1
- package/dist/adapters/web/portal-shell.d.ts +0 -12
- package/dist/adapters/web/portal-shell.d.ts.map +1 -1
- package/dist/adapters/web/portal-shell.js +8 -25
- package/dist/adapters/web/portal-shell.js.map +1 -1
- package/dist/adapters/web/server.d.ts +0 -1
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +0 -2
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +13 -24
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- package/dist/adapters/web/session-view/types.d.ts.map +1 -1
- package/dist/adapters/web/session-view/types.js.map +1 -1
- package/dist/adapters/web/token-store.d.ts +0 -2
- package/dist/adapters/web/token-store.d.ts.map +1 -1
- package/dist/adapters/web/token-store.js +0 -2
- package/dist/adapters/web/token-store.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +0 -3
- package/dist/cli/arg-grammar.d.ts.map +1 -1
- package/dist/cli/arg-grammar.js +0 -3
- package/dist/cli/arg-grammar.js.map +1 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +3 -12
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/download.d.ts.map +1 -1
- package/dist/cli/download.js +2 -6
- package/dist/cli/download.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +0 -31
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.d.ts +0 -2
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +0 -30
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/process-lifecycle.d.ts +0 -5
- package/dist/cli/process-lifecycle.d.ts.map +1 -1
- package/dist/cli/process-lifecycle.js +0 -6
- package/dist/cli/process-lifecycle.js.map +1 -1
- package/dist/cli/sandbox.d.ts +3 -0
- package/dist/cli/sandbox.d.ts.map +1 -0
- package/dist/cli/sandbox.js +79 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/sessions.d.ts.map +1 -1
- package/dist/cli/sessions.js +0 -11
- package/dist/cli/sessions.js.map +1 -1
- package/dist/cli/types.d.ts +2 -6
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/env-manifest.d.ts +0 -21
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +0 -11
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +0 -51
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +0 -42
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts +0 -8
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +0 -8
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +0 -15
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +2 -26
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/execution-env.d.ts +0 -15
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +4 -55
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/http.d.ts +0 -12
- package/dist/harness/http.d.ts.map +1 -1
- package/dist/harness/http.js +0 -34
- package/dist/harness/http.js.map +1 -1
- package/dist/harness/index.d.ts +4 -7
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +4 -7
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/jev.d.ts +0 -28
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js +0 -45
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/mcp-result.d.ts +20 -0
- package/dist/harness/mcp-result.d.ts.map +1 -0
- package/dist/harness/mcp-result.js +171 -0
- package/dist/harness/mcp-result.js.map +1 -0
- package/dist/harness/mcp.d.ts +0 -19
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +7 -66
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.d.ts +0 -19
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +0 -52
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +0 -12
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +0 -22
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts +1 -0
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +16 -66
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +0 -11
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +1 -18
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +8 -28
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +11 -28
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +100 -38
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills.d.ts +0 -22
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +0 -20
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +0 -4
- package/dist/harness/subagent-profiles.d.ts.map +1 -1
- package/dist/harness/subagent-profiles.js +0 -29
- package/dist/harness/subagent-profiles.js.map +1 -1
- package/dist/harness/subagent.d.ts +0 -25
- package/dist/harness/subagent.d.ts.map +1 -1
- package/dist/harness/subagent.js +1 -70
- package/dist/harness/subagent.js.map +1 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +0 -9
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts +0 -6
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/host-fn-tool.d.ts +0 -17
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
- package/dist/harness/tools/host-fn-tool.js +0 -16
- package/dist/harness/tools/host-fn-tool.js.map +1 -1
- package/dist/harness/tools/index.d.ts +1 -7
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +3 -14
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +4 -94
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +203 -92
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/tools/jev.d.ts +0 -8
- package/dist/harness/tools/jev.d.ts.map +1 -1
- package/dist/harness/tools/jev.js +0 -11
- package/dist/harness/tools/jev.js.map +1 -1
- package/dist/harness/tools/pi-tools.d.ts +1 -11
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +1 -30
- package/dist/harness/tools/pi-tools.js.map +1 -1
- package/dist/harness/tools/react.d.ts +0 -5
- package/dist/harness/tools/react.d.ts.map +1 -1
- package/dist/harness/tools/react.js +0 -5
- package/dist/harness/tools/react.js.map +1 -1
- package/dist/harness/tools/secret-redaction.d.ts +0 -25
- package/dist/harness/tools/secret-redaction.d.ts.map +1 -1
- package/dist/harness/tools/secret-redaction.js +3 -36
- package/dist/harness/tools/secret-redaction.js.map +1 -1
- package/dist/harness/tools/subagent.d.ts +0 -34
- package/dist/harness/tools/subagent.d.ts.map +1 -1
- package/dist/harness/tools/subagent.js +0 -92
- package/dist/harness/tools/subagent.js.map +1 -1
- package/dist/harness/tools/task.d.ts +0 -1
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +0 -1
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/tools/types.d.ts +0 -16
- package/dist/harness/tools/types.d.ts.map +1 -1
- package/dist/harness/tools/types.js.map +1 -1
- package/dist/harness/types.d.ts +1 -77
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +0 -13
- package/dist/log.js.map +1 -1
- package/dist/main.js +7 -52
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +16 -0
- package/dist/memory-capture/index.d.ts.map +1 -0
- package/dist/memory-capture/index.js +194 -0
- package/dist/memory-capture/index.js.map +1 -0
- package/dist/memory-capture/types.d.ts +27 -0
- package/dist/memory-capture/types.d.ts.map +1 -0
- package/dist/memory-capture/types.js.map +1 -0
- package/dist/observability/index.d.ts +0 -9
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +0 -9
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/instrument.js +0 -5
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/otel.js +0 -1
- package/dist/observability/otel.js.map +1 -1
- package/dist/observability/sentry.d.ts +0 -18
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +0 -36
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +1 -10
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +0 -76
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +4 -154
- package/dist/office/index.js.map +1 -1
- package/dist/office/projection.d.ts +0 -29
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +5 -41
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +0 -66
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +22 -83
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +0 -10
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +0 -12
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +2 -29
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +2 -1
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +21 -15
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +0 -2
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +0 -28
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js +0 -28
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/index.d.ts +0 -18
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +2 -19
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/layout.d.ts +7 -0
- package/dist/sandbox/layout.d.ts.map +1 -0
- package/dist/sandbox/layout.js +13 -0
- package/dist/sandbox/layout.js.map +1 -0
- package/dist/sandbox/provisioner.d.ts +24 -65
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +213 -125
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sandbox/types.d.ts +0 -39
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +2 -5
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +31 -31
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +0 -6
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +1 -33
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/history-line.d.ts +0 -20
- package/dist/sessions/history-line.d.ts.map +1 -1
- package/dist/sessions/history-line.js +0 -20
- package/dist/sessions/history-line.js.map +1 -1
- package/dist/sessions/migrate-common.d.ts +0 -15
- package/dist/sessions/migrate-common.d.ts.map +1 -1
- package/dist/sessions/migrate-common.js +0 -19
- package/dist/sessions/migrate-common.js.map +1 -1
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
- package/dist/sessions/migrate-pi-084.js +0 -7
- package/dist/sessions/migrate-pi-084.js.map +1 -1
- package/dist/sessions/migrate-v3.d.ts +0 -7
- package/dist/sessions/migrate-v3.d.ts.map +1 -1
- package/dist/sessions/migrate-v3.js +1 -67
- package/dist/sessions/migrate-v3.js.map +1 -1
- package/dist/sessions/session-key.d.ts +3 -17
- package/dist/sessions/session-key.d.ts.map +1 -1
- package/dist/sessions/session-key.js +8 -35
- package/dist/sessions/session-key.js.map +1 -1
- package/dist/sessions/session-store.d.ts +1 -7
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +8 -50
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/store.d.ts +0 -60
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +0 -113
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +0 -17
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +0 -6
- package/dist/settings/apply.d.ts.map +1 -1
- package/dist/settings/apply.js +0 -29
- package/dist/settings/apply.js.map +1 -1
- package/dist/settings/index.d.ts +0 -53
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +0 -77
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/migrate.d.ts +0 -5
- package/dist/settings/migrate.d.ts.map +1 -1
- package/dist/settings/migrate.js +0 -17
- package/dist/settings/migrate.js.map +1 -1
- package/dist/types.d.ts +9 -159
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +2 -36
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +135 -65
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +0 -15
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/dream/index.d.ts +0 -20
- package/dist/dream/index.d.ts.map +0 -1
- package/dist/dream/index.js +0 -264
- package/dist/dream/index.js.map +0 -1
- package/dist/dream/types.d.ts +0 -30
- package/dist/dream/types.d.ts.map +0 -1
- package/dist/dream/types.js.map +0 -1
- /package/dist/{dream → memory-capture}/types.js +0 -0
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* How many native response streams we are willing to open per minute.
|
|
3
|
-
*
|
|
4
|
-
* `chat.startStream` and `chat.stopStream` sit in a much tighter rate tier
|
|
5
|
-
* than `chat.postMessage`, and every streamed reply spends one of each — so
|
|
6
|
-
* the binding constraint is the number of *streams started*, not the number
|
|
7
|
-
* of tokens appended. A workspace answering a burst of mentions, or an
|
|
8
|
-
* process firing a batch of scheduled runs, reaches that ceiling long
|
|
9
|
-
* before it reaches any posting limit.
|
|
10
|
-
*
|
|
11
|
-
* Exceeding it is not fatal — the renderer catches the failure and falls back
|
|
12
|
-
* to edit-based updates — but it costs a wasted request, a warning line, and
|
|
13
|
-
* a visibly worse first response. Declining to start a stream *before*
|
|
14
|
-
* spending the request converts that into a silent, deliberate downgrade.
|
|
15
|
-
*
|
|
16
|
-
* The reservation is per process, which is the same grain as the connection
|
|
17
|
-
* to Slack. Two mikan instances on one workspace would each keep their own
|
|
18
|
-
* count; that is a deployment mistake with worse symptoms than rate limiting
|
|
19
|
-
* (duplicate replies), so it is not defended against here.
|
|
20
|
-
*/
|
|
21
|
-
/**
|
|
22
|
-
* Conservative: the published tier is a floor rather than a ceiling, and
|
|
23
|
-
* leaving headroom means an unlucky burst degrades gracefully instead of
|
|
24
|
-
* discovering the real limit. Streams are a presentation nicety — the reply
|
|
25
|
-
* still arrives without one.
|
|
26
|
-
*/
|
|
27
1
|
const MAX_STREAM_STARTS_PER_WINDOW = 15;
|
|
28
2
|
const WINDOW_MS = 60_000;
|
|
29
3
|
export class StreamStartLimiter {
|
|
@@ -33,22 +7,14 @@ export class StreamStartLimiter {
|
|
|
33
7
|
this.now = now;
|
|
34
8
|
this.starts = [];
|
|
35
9
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Claim one stream start, or refuse. Refusing is the caller's signal to use
|
|
38
|
-
* the non-streaming path; it is not an error.
|
|
39
|
-
*/
|
|
40
10
|
tryReserve() {
|
|
41
11
|
const cutoff = this.now() - this.windowMs;
|
|
42
|
-
// Rolling window rather than fixed buckets: a fixed bucket lets twice the
|
|
43
|
-
// limit through across a boundary, which is exactly the burst shape this
|
|
44
|
-
// exists to survive.
|
|
45
12
|
this.starts = this.starts.filter((at) => at > cutoff);
|
|
46
13
|
if (this.starts.length >= this.limit)
|
|
47
14
|
return false;
|
|
48
15
|
this.starts.push(this.now());
|
|
49
16
|
return true;
|
|
50
17
|
}
|
|
51
|
-
/** Streams started inside the current window, for diagnostics. */
|
|
52
18
|
get used() {
|
|
53
19
|
return this.starts.filter((at) => at > this.now() - this.windowMs).length;
|
|
54
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-limits.js","sourceRoot":"","sources":["../../../src/adapters/slack/stream-limits.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stream-limits.js","sourceRoot":"","sources":["../../../src/adapters/slack/stream-limits.ts"],"names":[],"mappings":"AAAA,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,OAAO,kBAAkB;IAG7B,YACmB,KAAK,GAAW,4BAA4B,EAC5C,QAAQ,GAAW,SAAS,EAC5B,GAAG,GAAiB,IAAI,CAAC,GAAG;QAF5B,UAAK,GAAL,KAAK,CAAuC;QAC5C,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,QAAG,GAAH,GAAG,CAAyB;QALvC,WAAM,GAAa,EAAE,CAAC;IAM3B,CAAC;IAEJ,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC5E,CAAC;CACF","sourcesContent":["const MAX_STREAM_STARTS_PER_WINDOW = 15;\nconst WINDOW_MS = 60_000;\n\nexport class StreamStartLimiter {\n private starts: number[] = [];\n\n constructor(\n private readonly limit: number = MAX_STREAM_STARTS_PER_WINDOW,\n private readonly windowMs: number = WINDOW_MS,\n private readonly now: () => number = Date.now,\n ) {}\n\n tryReserve(): boolean {\n const cutoff = this.now() - this.windowMs;\n this.starts = this.starts.filter((at) => at > cutoff);\n if (this.starts.length >= this.limit) return false;\n this.starts.push(this.now());\n return true;\n }\n\n get used(): number {\n return this.starts.filter((at) => at > this.now() - this.windowMs).length;\n }\n}\n"]}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import type { TaskStatus } from "../../types.js";
|
|
2
2
|
import { type SlackNameResolver } from "./jev-context.js";
|
|
3
|
-
/**
|
|
4
|
-
* What a DM message means while a task is around:
|
|
5
|
-
* - `status`: a pure progress question, answered from observation without a model turn
|
|
6
|
-
* - `steer`: a supplement or correction for the running work, folded into its next step
|
|
7
|
-
* - `request`: anything else, handled as an ordinary conversation turn
|
|
8
|
-
*/
|
|
9
3
|
export type TaskIntent = "status" | "steer" | "request";
|
|
10
|
-
/** The shared `state` Jev scores: the scope's recent lines, the tasks in play, and the new message. */
|
|
11
4
|
export declare function buildTaskIntentState(conversationDir: string, event: {
|
|
12
5
|
ts: string;
|
|
13
6
|
thread_ts?: string;
|
|
@@ -19,12 +12,6 @@ export declare function buildTaskIntentState(conversationDir: string, event: {
|
|
|
19
12
|
resolveName?: SlackNameResolver;
|
|
20
13
|
botUserId?: string | null;
|
|
21
14
|
}): string;
|
|
22
|
-
/**
|
|
23
|
-
* Classify with Jev. When Jev is unavailable or fails, reproduce the pre-Jev
|
|
24
|
-
* behavior exactly: the regex shortcut decides `status`, and other text is
|
|
25
|
-
* `steer` inside a task thread (where it always targeted that task) or
|
|
26
|
-
* `request` at top level.
|
|
27
|
-
*/
|
|
28
15
|
export declare function classifyTaskIntent(state: string, text: string, context: {
|
|
29
16
|
conversationId: string;
|
|
30
17
|
inTaskThread: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-intent.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/task-intent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAG1B
|
|
1
|
+
{"version":3,"file":"task-intent.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/task-intent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAWxD,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACrE,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,MAAM,CA0BR;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GACzD,OAAO,CAAC,UAAU,CAAC,CAqCrB"}
|
|
@@ -8,7 +8,6 @@ const TASK_INTENT_CRITERIA = {
|
|
|
8
8
|
steer: "Adds information, a constraint, a correction, or a change of direction for the ongoing work while it continues (e.g. 先不要部署, also check the staging config, use the other branch). May be combined with a progress question.",
|
|
9
9
|
request: "A new standalone question or request unrelated to steering the ongoing work, a reaction to a finished result, or anything else.",
|
|
10
10
|
};
|
|
11
|
-
/** The shared `state` Jev scores: the scope's recent lines, the tasks in play, and the new message. */
|
|
12
11
|
export function buildTaskIntentState(conversationDir, event, options) {
|
|
13
12
|
const resolve = options.resolveName ?? (() => undefined);
|
|
14
13
|
const humanize = (text) => humanizeMentions(text, resolve, options.botUserId ?? null);
|
|
@@ -33,12 +32,6 @@ export function buildTaskIntentState(conversationDir, event, options) {
|
|
|
33
32
|
humanize(event.text),
|
|
34
33
|
].join("\n");
|
|
35
34
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Classify with Jev. When Jev is unavailable or fails, reproduce the pre-Jev
|
|
38
|
-
* behavior exactly: the regex shortcut decides `status`, and other text is
|
|
39
|
-
* `steer` inside a task thread (where it always targeted that task) or
|
|
40
|
-
* `request` at top level.
|
|
41
|
-
*/
|
|
42
35
|
export async function classifyTaskIntent(state, text, context) {
|
|
43
36
|
const fallback = () => isTaskStatusQuestion(text) ? "status" : context.inTaskThread ? "steer" : "request";
|
|
44
37
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-intent.js","sourceRoot":"","sources":["../../../src/adapters/slack/task-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-intent.js","sourceRoot":"","sources":["../../../src/adapters/slack/task-intent.ts"],"names":[],"mappings":"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","sourcesContent":["import { evaluateWithJev, JevNotConfiguredError } from \"../../harness/index.js\";\nimport { reportUserFacingError } from \"../../observability/index.js\";\nimport * as log from \"../../log.js\";\nimport type { TaskStatus } from \"../../types.js\";\nimport {\n formatRecentScope,\n humanizeMentions,\n readRecentScope,\n type SlackNameResolver,\n} from \"./jev-context.js\";\nimport { isTaskStatusQuestion } from \"./task-status.js\";\n\nexport type TaskIntent = \"status\" | \"steer\" | \"request\";\n\nconst TASK_INTENT_CRITERIA = {\n status:\n \"Only asks whether the ongoing work is done, how it is going, what step it is on, or how long it will take. Contains no new instruction, constraint, correction, or request for content.\",\n steer:\n \"Adds information, a constraint, a correction, or a change of direction for the ongoing work while it continues (e.g. 先不要部署, also check the staging config, use the other branch). May be combined with a progress question.\",\n request:\n \"A new standalone question or request unrelated to steering the ongoing work, a reaction to a finished result, or anything else.\",\n} as const;\n\nexport function buildTaskIntentState(\n conversationDir: string,\n event: { ts: string; thread_ts?: string; user: string; text: string },\n options: {\n speaker?: string;\n tasks: TaskStatus[];\n resolveName?: SlackNameResolver;\n botUserId?: string | null;\n },\n): string {\n const resolve = options.resolveName ?? (() => undefined);\n const humanize = (text: string) => humanizeMentions(text, resolve, options.botUserId ?? null);\n const recent = readRecentScope(conversationDir, event, { humanize });\n const tasks = options.tasks.length\n ? options.tasks\n .map(\n (t) =>\n `- ${t.status}${t.currentTool ? ` (currently: ${t.currentTool})` : \"\"}: ${t.acknowledgement}`,\n )\n .join(\"\\n\")\n : \"(none)\";\n return [\n event.thread_ts\n ? \"Slack DM reply inside a background task thread.\"\n : \"Slack DM top-level message while background tasks exist.\",\n \"\",\n \"Tasks in this DM (most recent first):\",\n tasks,\n \"\",\n \"Recent messages in this scope (oldest first):\",\n formatRecentScope(recent),\n \"\",\n `NEW message from ${options.speaker ?? event.user}:`,\n humanize(event.text),\n ].join(\"\\n\");\n}\n\nexport async function classifyTaskIntent(\n state: string,\n text: string,\n context: { conversationId: string; inTaskThread: boolean },\n): Promise<TaskIntent> {\n const fallback = (): TaskIntent =>\n isTaskStatusQuestion(text) ? \"status\" : context.inTaskThread ? \"steer\" : \"request\";\n try {\n const result = await evaluateWithJev(\n state,\n {\n intent: {\n type: \"choice\",\n instructions:\n \"Given the tasks in play and the recent conversation, what does the NEW message mean?\",\n criteria: TASK_INTENT_CRITERIA,\n },\n },\n { caller: \"task_intent\" },\n );\n const choice = result.answers.intent.choice;\n const probabilities = result.answers.intent.probabilities;\n log.logInfo(\n `[${context.conversationId}] jev task intent: ${choice}${\n probabilities ? ` ${JSON.stringify(probabilities)}` : \"\"\n } text=\"${text.slice(0, 80)}\"`,\n );\n if (choice === \"status\" || choice === \"steer\" || choice === \"request\") return choice;\n return fallback();\n } catch (err) {\n if (!(err instanceof JevNotConfiguredError)) {\n reportUserFacingError(err, {\n domain: \"chat_platform\",\n surface: \"slack_task_intent_jev\",\n operation: \"evaluate\",\n severity: \"warning\",\n context: { conversationId: context.conversationId },\n });\n }\n return fallback();\n }\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { TaskStatus, RunningSession } from "../../types.js";
|
|
2
|
-
/** Narrow pure-status shortcut. Mixed instructions must still reach the agent. */
|
|
3
2
|
export declare function isTaskStatusQuestion(text: string): boolean;
|
|
4
3
|
export declare function readTaskRoots(conversationDir: string): Map<string, string>;
|
|
5
4
|
export declare function querySlackTasks(conversationDir: string, channel: string, running: RunningSession[], sessionKey?: string): Promise<TaskStatus[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-status.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/task-status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,
|
|
1
|
+
{"version":3,"file":"task-status.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/task-status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW1E;AAED,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAmDvB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAwB5D"}
|
|
@@ -4,7 +4,6 @@ import { resolveSlackSessionKey } from "./session.js";
|
|
|
4
4
|
import { getThreadSessionFile } from "../../sessions/store.js";
|
|
5
5
|
import { reportUserFacingError } from "../../observability/index.js";
|
|
6
6
|
import { SessionStore } from "../../sessions/session-store.js";
|
|
7
|
-
/** Narrow pure-status shortcut. Mixed instructions must still reach the agent. */
|
|
8
7
|
export function isTaskStatusQuestion(text) {
|
|
9
8
|
return /^(好了嗎|完成了嗎|有進展嗎|現在做到哪了|進度如何|還要多久|還要多久啊|現在怎麼樣|怎麼樣了|how(?:'s| is) it going|are you done|any updates|status)[??!!。\s]*$/i.test(text.trim());
|
|
10
9
|
}
|
|
@@ -17,9 +16,7 @@ export function readTaskRoots(conversationDir) {
|
|
|
17
16
|
if (entry.taskRoot === true && entry.isMessagingBot === true && typeof entry.ts === "string")
|
|
18
17
|
roots.set(entry.ts, String(entry.text ?? ""));
|
|
19
18
|
}
|
|
20
|
-
catch {
|
|
21
|
-
/* unrelated malformed log record */
|
|
22
|
-
}
|
|
19
|
+
catch { }
|
|
23
20
|
}
|
|
24
21
|
return roots;
|
|
25
22
|
}
|
|
@@ -31,7 +28,6 @@ export async function querySlackTasks(conversationDir, channel, running, session
|
|
|
31
28
|
const activeByKey = new Map(running
|
|
32
29
|
.filter((s) => s.address.platform === "slack" && s.address.conversationId === channel)
|
|
33
30
|
.map((s) => [s.sessionKey, s]));
|
|
34
|
-
// Never hide active work behind the recent-completed history limit.
|
|
35
31
|
const selected = matching.filter(([root], index) => index < 10 || activeByKey.has(resolveSlackSessionKey(channel, root)));
|
|
36
32
|
const observations = [];
|
|
37
33
|
for (const [root, acknowledgement] of selected) {
|
|
@@ -57,9 +53,6 @@ export async function querySlackTasks(conversationDir, channel, running, session
|
|
|
57
53
|
observation.endedAt = new Date(state.result.endedAt).toISOString();
|
|
58
54
|
}
|
|
59
55
|
else if (!state.started) {
|
|
60
|
-
// Admitted (the root exists) but no operation has been recorded yet:
|
|
61
|
-
// the run is still waiting in the queue. An open operation with no
|
|
62
|
-
// runtime stays unknown, since that is a crash, not a queue.
|
|
63
56
|
observation.status = "queued";
|
|
64
57
|
}
|
|
65
58
|
}
|
|
@@ -72,7 +65,6 @@ export async function querySlackTasks(conversationDir, channel, running, session
|
|
|
72
65
|
platform: "slack",
|
|
73
66
|
context: { conversationId: channel, sessionKey: key, threadTs: root },
|
|
74
67
|
});
|
|
75
|
-
// No runtime or durable outcome: do not invent queued/completed state.
|
|
76
68
|
}
|
|
77
69
|
observations.push(observation);
|
|
78
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-status.js","sourceRoot":"","sources":["../../../src/adapters/slack/task-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,
|
|
1
|
+
{"version":3,"file":"task-status.js","sourceRoot":"","sources":["../../../src/adapters/slack/task-status.ts"],"names":[],"mappings":"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","sourcesContent":["import { readTextFileIfExists } from \"../../file-guards.js\";\nimport { join } from \"node:path\";\nimport { resolveSlackSessionKey } from \"./session.js\";\nimport { getThreadSessionFile } from \"../../sessions/store.js\";\nimport { reportUserFacingError } from \"../../observability/index.js\";\nimport { SessionStore } from \"../../sessions/session-store.js\";\nimport type { TaskStatus, RunningSession } from \"../../types.js\";\n\nexport function isTaskStatusQuestion(text: string): boolean {\n return /^(好了嗎|完成了嗎|有進展嗎|現在做到哪了|進度如何|還要多久|還要多久啊|現在怎麼樣|怎麼樣了|how(?:'s| is) it going|are you done|any updates|status)[??!!。\\s]*$/i.test(\n text.trim(),\n );\n}\n\nexport function readTaskRoots(conversationDir: string): Map<string, string> {\n const raw = readTextFileIfExists(join(conversationDir, \"log.jsonl\")) ?? \"\";\n const roots = new Map<string, string>();\n for (const line of raw.split(\"\\n\")) {\n try {\n const entry = JSON.parse(line);\n if (entry.taskRoot === true && entry.isMessagingBot === true && typeof entry.ts === \"string\")\n roots.set(entry.ts, String(entry.text ?? \"\"));\n } catch {}\n }\n return roots;\n}\n\nexport async function querySlackTasks(\n conversationDir: string,\n channel: string,\n running: RunningSession[],\n sessionKey?: string,\n): Promise<TaskStatus[]> {\n const roots = readTaskRoots(conversationDir);\n const matching = [...roots]\n .toReversed()\n .filter(([root]) => !sessionKey || resolveSlackSessionKey(channel, root) === sessionKey);\n const activeByKey = new Map(\n running\n .filter((s) => s.address.platform === \"slack\" && s.address.conversationId === channel)\n .map((s) => [s.sessionKey, s]),\n );\n const selected = matching.filter(\n ([root], index) => index < 10 || activeByKey.has(resolveSlackSessionKey(channel, root)),\n );\n const observations: TaskStatus[] = [];\n for (const [root, acknowledgement] of selected) {\n const key = resolveSlackSessionKey(channel, root);\n const active = activeByKey.get(key);\n const observation: TaskStatus = {\n sessionKey: key,\n threadTs: root,\n acknowledgement,\n observedAt: new Date().toISOString(),\n status: \"unknown\",\n };\n if (active) {\n observation.status = active.stopping ? \"stopping\" : \"running\";\n observation.currentTool = active.currentTool;\n observations.push(observation);\n continue;\n }\n try {\n const state = await SessionStore.inspectExecution(getThreadSessionFile(conversationDir, key));\n if (!state.open && state.result) {\n observation.status = state.result.status;\n observation.endedAt = new Date(state.result.endedAt).toISOString();\n } else if (!state.started) {\n observation.status = \"queued\";\n }\n } catch (error) {\n reportUserFacingError(error, {\n domain: \"mikan\",\n surface: \"task_status\",\n operation: \"inspect_task_status\",\n severity: \"warning\",\n platform: \"slack\",\n context: { conversationId: channel, sessionKey: key, threadTs: root },\n });\n }\n observations.push(observation);\n }\n return observations;\n}\n\nexport function formatTaskStatus(tasks: TaskStatus[]): string {\n if (!tasks.length) return \"找不到這個任務的狀態。\";\n return tasks\n .map((task) => {\n switch (task.status) {\n case \"running\":\n return `還在處理${task.currentTool ? `,目前正在:${task.currentTool}` : \"\"}。目前無法可靠估計還要多久,結束後會通知你。`;\n case \"completed\":\n return \"這一輪執行已結束。這是執行狀態,不代表結果訊息已成功送達;請查看任務對話串。\";\n case \"aborted\":\n return \"這一輪已停止,不會自行繼續。你可以補充新要求後再繼續。\";\n case \"failed\":\n return \"這一輪執行失敗。\";\n case \"queued\":\n return \"任務尚未開始執行。\";\n case \"declined\":\n return \"這一輪沒有執行。\";\n case \"stopping\":\n return \"正在停止,還在等待執行收尾。\";\n default:\n return \"目前無法確認任務狀態,不能判定已完成。\";\n }\n })\n .join(\"\\n\\n\");\n}\n"]}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import type { PlatformToolPack } from "../../harness/tools/types.js";
|
|
2
2
|
export type { PlatformSlackOps } from "./types.js";
|
|
3
3
|
import type { PlatformSlackOps } from "./types.js";
|
|
4
|
-
/**
|
|
5
|
-
* Slack capability pack: tools that post platform-native surfaces (Block Kit)
|
|
6
|
-
* the response renderer deliberately does not produce. bindRun enables the
|
|
7
|
-
* tools only for slack-named conversations so multi-platform processes stay
|
|
8
|
-
* safe.
|
|
9
|
-
*/
|
|
10
4
|
export declare function createSlackToolPack(ops: PlatformSlackOps): PlatformToolPack;
|
|
11
5
|
//# sourceMappingURL=tool-pack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-pack.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/tool-pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"tool-pack.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/tool-pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB,CAuC3E"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import { createSlackBlockKitTool } from "./tools/blockkit.js";
|
|
2
|
-
/**
|
|
3
|
-
* Slack capability pack: tools that post platform-native surfaces (Block Kit)
|
|
4
|
-
* the response renderer deliberately does not produce. bindRun enables the
|
|
5
|
-
* tools only for slack-named conversations so multi-platform processes stay
|
|
6
|
-
* safe.
|
|
7
|
-
*/
|
|
8
2
|
export function createSlackToolPack(ops) {
|
|
9
3
|
const { tool: blockkitTool, setSlackBlockKitOps } = createSlackBlockKitTool();
|
|
10
4
|
const ownedMessageTs = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-pack.js","sourceRoot":"","sources":["../../../src/adapters/slack/tool-pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAI9D
|
|
1
|
+
{"version":3,"file":"tool-pack.js","sourceRoot":"","sources":["../../../src/adapters/slack/tool-pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,MAAM,UAAU,mBAAmB,CAAC,GAAqB;IACvD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,WAA+B,CAAC;IAEpC,OAAO;QACL,KAAK,EAAE,CAAC,YAAY,CAAC;QACrB,OAAO,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE;YAChD,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;gBAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,cAAc,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC9D,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3B,cAAc,CAAC,KAAK,EAAE,CAAC;gBACvB,WAAW,GAAG,MAAM,CAAC;YACvB,CAAC;YACD,mBAAmB,CAAC;gBAClB,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAC9D,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;oBACvF,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC3E,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC9B,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBAC3B,IACE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC5B,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,EAC3D,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;oBACjF,CAAC;oBACD,MAAM,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC9D,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,CAAC;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { PlatformToolPack } from \"../../harness/tools/types.js\";\nimport { createSlackBlockKitTool } from \"./tools/blockkit.js\";\nexport type { PlatformSlackOps } from \"./types.js\";\nimport type { PlatformSlackOps } from \"./types.js\";\n\nexport function createSlackToolPack(ops: PlatformSlackOps): PlatformToolPack {\n const { tool: blockkitTool, setSlackBlockKitOps } = createSlackBlockKitTool();\n const ownedMessageTs = new Set<string>();\n let boundTarget: string | undefined;\n\n return {\n tools: [blockkitTool],\n bindRun({ conversationId, platformName, threadTs }) {\n if (platformName !== \"slack\") {\n setSlackBlockKitOps(null);\n return;\n }\n const target = `${conversationId}:${threadTs ?? \"top-level\"}`;\n if (boundTarget !== target) {\n ownedMessageTs.clear();\n boundTarget = target;\n }\n setSlackBlockKitOps({\n postBlocks: async (args) => {\n if (args.threadTs !== undefined && args.threadTs !== threadTs) {\n throw new Error(\"slack_blockkit cannot post outside the active conversation thread\");\n }\n const result = await ops.postBlocks(conversationId, { ...args, threadTs });\n ownedMessageTs.add(result.ts);\n return result;\n },\n updateBlocks: async (args) => {\n if (\n !ownedMessageTs.has(args.ts) &&\n !ops.ownsBlockKitMessage(conversationId, args.ts, threadTs)\n ) {\n throw new Error(\"slack_blockkit can only update messages posted by this tool\");\n }\n await ops.updateBlocks(conversationId, { ...args, threadTs });\n ownedMessageTs.add(args.ts);\n },\n });\n },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockkit.d.ts","sourceRoot":"","sources":["../../../../src/adapters/slack/tools/blockkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"blockkit.d.ts","sourceRoot":"","sources":["../../../../src/adapters/slack/tools/blockkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,QAAA,MAAM,cAAc;;;;;;EAqBlB,CAAC;AA+BH,wBAAgB,uBAAuB,IAAI;IACzC,IAAI,EAAE,SAAS,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,mBAAmB,EAAE,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC7D,CAsEA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
|
-
/** Slack's own ceilings: 50 blocks per message, and a payload well under 64KB. */
|
|
3
2
|
const MAX_BLOCKS = 50;
|
|
4
3
|
const MAX_ARGUMENT_BYTES = 64 * 1024;
|
|
5
4
|
const blockkitSchema = Type.Object({
|
|
@@ -18,16 +17,6 @@ const blockkitSchema = Type.Object({
|
|
|
18
17
|
description: "Update a message previously posted by slack_blockkit in this conversation instead of posting a new one.",
|
|
19
18
|
})),
|
|
20
19
|
});
|
|
21
|
-
/**
|
|
22
|
-
* Reject a runaway payload before schema validation sees it.
|
|
23
|
-
*
|
|
24
|
-
* `prepareArguments` runs ahead of validation, which reports a failure by
|
|
25
|
-
* embedding the entire argument object in its message. A malformed multi-
|
|
26
|
-
* hundred-KB `blocks` array therefore lands in the session twice — once as the
|
|
27
|
-
* call, once echoed back as the result — and every later reader pays for it.
|
|
28
|
-
* Only a bounded result belongs there, so the size complaint stays short and
|
|
29
|
-
* never quotes what it rejected.
|
|
30
|
-
*/
|
|
31
20
|
function guardBlockKitArguments(args) {
|
|
32
21
|
if (!args || typeof args !== "object")
|
|
33
22
|
return args;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockkit.js","sourceRoot":"","sources":["../../../../src/adapters/slack/tools/blockkit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIzC,
|
|
1
|
+
{"version":3,"file":"blockkit.js","sourceRoot":"","sources":["../../../../src/adapters/slack/tools/blockkit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"@sinclair/typebox\";\nexport type { SlackBlockKitOps } from \"../types.js\";\nimport type { SlackBlockKitOps } from \"../types.js\";\n\nconst MAX_BLOCKS = 50;\nconst MAX_ARGUMENT_BYTES = 64 * 1024;\n\nconst blockkitSchema = Type.Object({\n label: Type.String({ description: \"Brief description of this action (shown to user)\" }),\n blocks: Type.Array(Type.Unknown(), {\n maxItems: MAX_BLOCKS,\n description: `Slack Block Kit blocks (max ${MAX_BLOCKS}). Use {type:'markdown', text} for prose, {type:'table'} for tables, and actions/section blocks for buttons and select menus.`,\n }),\n text: Type.String({\n description: \"Plain-text fallback shown in notifications and screen readers\",\n }),\n thread_ts: Type.Optional(\n Type.String({\n description:\n \"Optional active-thread TS. Posts are always constrained to the current conversation thread.\",\n }),\n ),\n update_ts: Type.Optional(\n Type.String({\n description:\n \"Update a message previously posted by slack_blockkit in this conversation instead of posting a new one.\",\n }),\n ),\n});\n\nfunction guardBlockKitArguments(args: unknown): unknown {\n if (!args || typeof args !== \"object\") return args;\n const bytes = Buffer.byteLength(JSON.stringify(args) ?? \"\", \"utf-8\");\n if (bytes > MAX_ARGUMENT_BYTES) {\n throw new Error(\n `slack_blockkit arguments are ${Math.round(bytes / 1024)}KB, over the ${MAX_ARGUMENT_BYTES / 1024}KB limit. ` +\n \"Post a short message and attach the long content as a file instead.\",\n );\n }\n const blocks = (args as { blocks?: unknown }).blocks;\n if (Array.isArray(blocks) && blocks.length > MAX_BLOCKS) {\n throw new Error(`slack_blockkit accepts at most ${MAX_BLOCKS} blocks, got ${blocks.length}.`);\n }\n return args;\n}\n\nfunction formatSlackApiError(err: unknown): Error {\n const data = (\n err as { data?: { error?: string; response_metadata?: { messages?: string[] } } } | undefined\n )?.data;\n if (!data?.error) return err instanceof Error ? err : new Error(String(err));\n const details = data.response_metadata?.messages?.length\n ? `\\n${data.response_metadata.messages.join(\"\\n\")}`\n : \"\";\n return new Error(\n `Slack rejected the request: ${data.error}${details}\\nFix the blocks JSON and retry.`,\n );\n}\n\nexport function createSlackBlockKitTool(): {\n tool: AgentTool<typeof blockkitSchema>;\n setSlackBlockKitOps: (ops: SlackBlockKitOps | null) => void;\n} {\n let boundOps: SlackBlockKitOps | null = null;\n\n const tool: AgentTool<typeof blockkitSchema> = {\n name: \"slack_blockkit\",\n label: \"slack_blockkit\",\n description:\n \"Post an interactive Slack Block Kit message (buttons, select menus, custom layouts) to the current conversation, or update one previously posted with this tool. Normal replies already render Markdown — use this only when you need interactive elements or a layout Markdown cannot express. When a user clicks a button or picks an option, you receive a new message '[Slack action] <action_id>: <value>' — choose descriptive action_ids and values so the interaction tells you what to do. Returns the message ts; pass it back as update_ts to edit the message later (e.g. refreshing vote tallies). After handling an interaction, update the message via update_ts to replace the buttons with the outcome (e.g. '✅ approved') — buttons stay clickable otherwise and repeated clicks re-trigger the action. If Slack rejects the blocks, the error includes its validation messages — fix the JSON and retry.\",\n parameters: blockkitSchema,\n prepareArguments: guardBlockKitArguments as (args: unknown) => typeof blockkitSchema.static,\n execute: async (\n _toolCallId: string,\n {\n blocks,\n text,\n thread_ts,\n update_ts,\n }: {\n blocks: unknown[];\n text: string;\n thread_ts?: string;\n update_ts?: string;\n label?: string;\n },\n signal?: AbortSignal,\n ) => {\n const ops = boundOps;\n if (!ops) {\n throw new Error(\"slack_blockkit is only available in Slack conversations\");\n }\n if (signal?.aborted) {\n throw new Error(\"Operation aborted\");\n }\n\n try {\n if (update_ts) {\n await ops.updateBlocks({ ts: update_ts, text, blocks: blocks as object[] });\n return {\n content: [\n { type: \"text\" as const, text: `Updated Block Kit message (ts: ${update_ts}).` },\n ],\n details: undefined,\n };\n }\n const { ts } = await ops.postBlocks({\n text,\n blocks: blocks as object[],\n threadTs: thread_ts,\n });\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Posted Block Kit message (ts: ${ts}). Interactive elements will arrive as \"[Slack action] <action_id>: <value>\" messages; pass ts back as update_ts to edit this message.`,\n },\n ],\n details: undefined,\n };\n } catch (err) {\n throw formatSlackApiError(err);\n }\n },\n };\n\n return {\n tool,\n setSlackBlockKitOps: (ops) => {\n boundOps = ops;\n },\n };\n}\n"]}
|
|
@@ -3,7 +3,6 @@ import type { Attachment } from "../../types.js";
|
|
|
3
3
|
export interface SlackEvent {
|
|
4
4
|
address: OfficeAddress;
|
|
5
5
|
type: "mention" | "dm";
|
|
6
|
-
conversationId: string;
|
|
7
6
|
conversationKind: ConversationKind;
|
|
8
7
|
channel: string;
|
|
9
8
|
ts: string;
|
|
@@ -15,24 +14,19 @@ export interface SlackEvent {
|
|
|
15
14
|
url_private_download?: string;
|
|
16
15
|
url_private?: string;
|
|
17
16
|
}>;
|
|
18
|
-
/** Processed attachments with local paths (populated after logUserMessage) */
|
|
19
17
|
attachments?: Attachment[];
|
|
20
|
-
/** Session key passed through to ConversationEvent so handleEvent uses the correct persistent session */
|
|
21
18
|
sessionKey?: string;
|
|
22
19
|
}
|
|
23
20
|
export interface SlackUser {
|
|
24
21
|
id: string;
|
|
25
22
|
userName: string;
|
|
26
23
|
displayName: string;
|
|
27
|
-
/** From users.list is_bot; absent when the entry predates the flag. */
|
|
28
24
|
isBot?: boolean;
|
|
29
25
|
}
|
|
30
26
|
export interface SlackChannel {
|
|
31
27
|
id: string;
|
|
32
28
|
name: string;
|
|
33
|
-
/** Slack's own channel privacy flag; absent for DM entries and unknown channels. */
|
|
34
29
|
isPrivate?: boolean;
|
|
35
|
-
/** Slack Connect / externally shared channel — visible outside this workspace. */
|
|
36
30
|
isExternallyShared?: boolean;
|
|
37
31
|
}
|
|
38
32
|
export interface SlackAdapterOptions {
|
|
@@ -88,10 +82,6 @@ export interface SlackBlockActionBody {
|
|
|
88
82
|
name?: string;
|
|
89
83
|
};
|
|
90
84
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Host-side Slack operations for the Slack tool pack, keyed by conversation.
|
|
93
|
-
* main.ts implements these against the running SlackMessagingBot.
|
|
94
|
-
*/
|
|
95
85
|
export interface PlatformSlackOps {
|
|
96
86
|
postBlocks(conversationId: string, args: {
|
|
97
87
|
text: string;
|
|
@@ -108,7 +98,6 @@ export interface PlatformSlackOps {
|
|
|
108
98
|
}): Promise<void>;
|
|
109
99
|
ownsBlockKitMessage(conversationId: string, ts: string, threadTs?: string): boolean;
|
|
110
100
|
}
|
|
111
|
-
/** Conversation-bound Slack Block Kit operations, provided by the host. */
|
|
112
101
|
export interface SlackBlockKitOps {
|
|
113
102
|
postBlocks(args: {
|
|
114
103
|
text: string;
|
|
@@ -129,11 +118,6 @@ export interface AssistantThreadPayload {
|
|
|
129
118
|
thread_ts?: string;
|
|
130
119
|
context?: AgentContext;
|
|
131
120
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Which channel the person is viewing beside the pane. Slack spells this
|
|
134
|
-
* `context` on `app_home_opened` and `app_context_changed`, and `app_context`
|
|
135
|
-
* on `message.im` — the asymmetry is Slack's, normalized here.
|
|
136
|
-
*/
|
|
137
121
|
export interface AgentContext {
|
|
138
122
|
channel_id?: string;
|
|
139
123
|
team_id?: string;
|
|
@@ -143,13 +127,10 @@ export interface SuggestedPrompt {
|
|
|
143
127
|
title: string;
|
|
144
128
|
message: string;
|
|
145
129
|
}
|
|
146
|
-
/** What the adapter needs from the bot to serve this surface. */
|
|
147
130
|
export interface AssistantSurfaceOps {
|
|
148
131
|
postInThread(channel: string, threadTs: string, text: string): Promise<string>;
|
|
149
|
-
/** `threadTs` omitted pins the prompts to the DM instead of one thread. */
|
|
150
132
|
setSuggestedPrompts(channel: string, threadTs: string | undefined, prompts: SuggestedPrompt[]): Promise<void>;
|
|
151
133
|
setTitle(channel: string, threadTs: string, title: string): Promise<void>;
|
|
152
|
-
/** Human-readable channel name for context, when the bot knows it. */
|
|
153
134
|
channelName(channelId: string): string | undefined;
|
|
154
135
|
}
|
|
155
136
|
//# 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,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,UAAU;IACrD,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CACR,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3B,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,YAAY,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationKind, OfficeAddress } from \"../index.js\";\nimport type { Attachment } from \"../../types.js\";\n\nexport interface SlackEvent {\n address: OfficeAddress;\n type: \"mention\" | \"dm\";\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/slack/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationKind, OfficeAddress } from \"../index.js\";\nimport type { Attachment } from \"../../types.js\";\n\nexport interface SlackEvent {\n address: OfficeAddress;\n type: \"mention\" | \"dm\";\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 attachments?: Attachment[];\n sessionKey?: string;\n}\n\nexport interface SlackUser {\n id: string;\n userName: string;\n displayName: string;\n isBot?: boolean;\n}\n\nexport interface SlackChannel {\n id: string;\n name: string;\n isPrivate?: boolean;\n isExternallyShared?: boolean;\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\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\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\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\nexport interface AssistantThreadPayload {\n user_id?: string;\n channel_id?: string;\n thread_ts?: string;\n context?: AgentContext;\n}\n\nexport interface AgentContext {\n channel_id?: string;\n team_id?: string;\n enterprise_id?: string | null;\n}\n\nexport interface SuggestedPrompt {\n title: string;\n message: string;\n}\n\nexport interface AssistantSurfaceOps {\n postInThread(channel: string, threadTs: string, text: string): Promise<string>;\n setSuggestedPrompts(\n channel: string,\n threadTs: string | undefined,\n prompts: SuggestedPrompt[],\n ): Promise<void>;\n setTitle(channel: string, threadTs: string, title: string): Promise<void>;\n channelName(channelId: string): string | undefined;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/update-diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"update-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/update-diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAkG/C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,EAC/C,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAC9C,IAAI,CAiCN"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { recordDiagnosticEvent } from "../../observability/index.js";
|
|
2
|
-
// Diagnostic correlation only: eviction never changes transport behavior.
|
|
3
2
|
const pending = new WeakMap();
|
|
4
3
|
const MAX_PENDING = 128;
|
|
5
4
|
const RETENTION_MS = 10 * 60_000;
|
|
@@ -47,7 +46,6 @@ function shape(source, payload) {
|
|
|
47
46
|
fallbackLength: payload.text.length,
|
|
48
47
|
blockCount: payload.blocks.length,
|
|
49
48
|
...syntax(source),
|
|
50
|
-
// Flat arrays survive the existing Sentry depth limit. No text or identifiers.
|
|
51
49
|
blockTypes: payload.blocks
|
|
52
50
|
.slice(0, 50)
|
|
53
51
|
.map((block) => (BLOCK_TYPES.has(block.type) ? block.type : "other")),
|
|
@@ -74,7 +72,6 @@ function validation(error) {
|
|
|
74
72
|
return {
|
|
75
73
|
errorCode: typeof data.error === "string" && ERROR_CODES.has(data.error) ? data.error : "other",
|
|
76
74
|
validationCount: Array.isArray(messages) ? messages.length : 0,
|
|
77
|
-
// Never copy a free-form Slack validation message: it can quote user content.
|
|
78
75
|
validationCategories: details.map((message) => /must be less than|maximum|too long/i.test(message)
|
|
79
76
|
? "limit"
|
|
80
77
|
: /missing|required/i.test(message)
|
|
@@ -89,7 +86,6 @@ function validation(error) {
|
|
|
89
86
|
.slice(0, 10),
|
|
90
87
|
};
|
|
91
88
|
}
|
|
92
|
-
/** Best-effort telemetry: must not mask an API error or fail a successful update. */
|
|
93
89
|
export function recordSlackUpdate(owner, target, source, payload, outcome) {
|
|
94
90
|
try {
|
|
95
91
|
const { channel, ts } = target;
|
|
@@ -127,8 +123,6 @@ export function recordSlackUpdate(owner, target, source, payload, outcome) {
|
|
|
127
123
|
...("error" in outcome ? validation(outcome.error) : {}),
|
|
128
124
|
});
|
|
129
125
|
}
|
|
130
|
-
catch {
|
|
131
|
-
// Observability must never change delivery or retry semantics.
|
|
132
|
-
}
|
|
126
|
+
catch { }
|
|
133
127
|
}
|
|
134
128
|
//# sourceMappingURL=update-diagnostics.js.map
|