@geminixiang/mikan 1.0.0-beta.2 → 1.0.0-beta.20
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 +354 -0
- package/README.md +42 -16
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +1 -0
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +36 -67
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +17 -42
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +148 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +1031 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +118 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +309 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +24 -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 +9 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +175 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +31 -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/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +53 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +30 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +136 -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 +24 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +116 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +22 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +59 -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 +59 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +22 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +152 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +19 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +49 -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 +45 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +350 -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 +79 -22
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +8 -6
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +81 -133
- 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 +3 -14
- 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 +14 -17
- 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 +5 -8
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/streaming.d.ts +4 -0
- package/dist/adapters/streaming.d.ts.map +1 -1
- package/dist/adapters/streaming.js +11 -0
- package/dist/adapters/streaming.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +1 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +27 -62
- 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 +8 -27
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +28 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent.d.ts +38 -14
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +358 -224
- package/dist/agent.js.map +1 -1
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-git.d.ts +22 -0
- package/dist/cli/ext-git.d.ts.map +1 -0
- package/dist/cli/ext-git.js +76 -0
- package/dist/cli/ext-git.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 +217 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +2 -1
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +2 -6
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +16 -6
- 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 +30 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +72 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +121 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +3 -1
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +2 -1
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +16 -12
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/text.d.ts +2 -0
- package/dist/commands/text.d.ts.map +1 -0
- package/dist/commands/text.js +16 -0
- package/dist/commands/text.js.map +1 -0
- package/dist/commands/types.d.ts +14 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -54
- package/dist/config.js.map +1 -1
- package/dist/events.d.ts +10 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +14 -5
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +3 -2
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +28 -12
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/extensions/loader.d.ts +39 -9
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +258 -54
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +48 -1
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +146 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +161 -14
- 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 +5 -5
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +2 -2
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +5 -0
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +10 -0
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +21 -2
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +80 -22
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +4 -1
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +11 -2
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/subagent-runner.d.ts +17 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +307 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +53 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +232 -29
- package/dist/main.js.map +1 -1
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +2 -5
- 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 +264 -41
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +32 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +2 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +7 -0
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +3 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +8 -2
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +2 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +7 -1
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin-fleet.d.ts +104 -0
- package/dist/sandbox/gondolin-fleet.d.ts.map +1 -0
- package/dist/sandbox/gondolin-fleet.js +330 -0
- package/dist/sandbox/gondolin-fleet.js.map +1 -0
- package/dist/sandbox/gondolin-gateway.d.ts +85 -0
- package/dist/sandbox/gondolin-gateway.d.ts.map +1 -0
- package/dist/sandbox/gondolin-gateway.js +400 -0
- package/dist/sandbox/gondolin-gateway.js.map +1 -0
- package/dist/sandbox/gondolin-inventory.d.ts +89 -0
- package/dist/sandbox/gondolin-inventory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-inventory.js +267 -0
- package/dist/sandbox/gondolin-inventory.js.map +1 -0
- package/dist/sandbox/gondolin-join.d.ts +62 -0
- package/dist/sandbox/gondolin-join.d.ts.map +1 -0
- package/dist/sandbox/gondolin-join.js +261 -0
- package/dist/sandbox/gondolin-join.js.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts +15 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.js +60 -0
- package/dist/sandbox/gondolin-nfs-advisory.js.map +1 -0
- package/dist/sandbox/gondolin-placement.d.ts +32 -0
- package/dist/sandbox/gondolin-placement.d.ts.map +1 -0
- package/dist/sandbox/gondolin-placement.js +83 -0
- package/dist/sandbox/gondolin-placement.js.map +1 -0
- package/dist/sandbox/gondolin-remote.d.ts +73 -0
- package/dist/sandbox/gondolin-remote.d.ts.map +1 -0
- package/dist/sandbox/gondolin-remote.js +352 -0
- package/dist/sandbox/gondolin-remote.js.map +1 -0
- package/dist/sandbox/gondolin-worker-client.d.ts +139 -0
- package/dist/sandbox/gondolin-worker-client.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-client.js +325 -0
- package/dist/sandbox/gondolin-worker-client.js.map +1 -0
- package/dist/sandbox/gondolin-worker-main.d.ts +2 -0
- package/dist/sandbox/gondolin-worker-main.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-main.js +22 -0
- package/dist/sandbox/gondolin-worker-main.js.map +1 -0
- package/dist/sandbox/gondolin-worker.d.ts +55 -0
- package/dist/sandbox/gondolin-worker.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker.js +201 -0
- package/dist/sandbox/gondolin-worker.js.map +1 -0
- package/dist/sandbox/gondolin.d.ts +52 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +425 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +2 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +11 -0
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +21 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +36 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +4 -3
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +5 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +26 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +11 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +35 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/agent-memory-file-manager.d.ts.map +1 -1
- package/dist/sessions/agent-memory-file-manager.js +16 -30
- package/dist/sessions/agent-memory-file-manager.js.map +1 -1
- package/dist/sessions/history-line.d.ts +20 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +24 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/policy.d.ts.map +1 -1
- package/dist/sessions/policy.js +5 -3
- package/dist/sessions/policy.js.map +1 -1
- package/dist/sessions/session-key.d.ts +31 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +44 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +2 -2
- package/dist/sessions/store.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +24 -17
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +9 -12
- 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 +33 -4
- package/dist/tools/event.js.map +1 -1
- package/dist/tools/generate-image.d.ts +17 -0
- package/dist/tools/generate-image.d.ts.map +1 -0
- package/dist/tools/generate-image.js +63 -0
- package/dist/tools/generate-image.js.map +1 -0
- package/dist/tools/index.d.ts +16 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +27 -3
- 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 +40 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +8 -7
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent.d.ts +69 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +286 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +34 -1
- 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 +1 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -2
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +139 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.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 +23 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +3 -24
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/policy.d.ts +20 -0
- package/dist/vault/policy.d.ts.map +1 -0
- package/dist/vault/policy.js +20 -0
- package/dist/vault/policy.js.map +1 -0
- package/dist/vault/routing.d.ts +1 -0
- package/dist/vault/routing.d.ts.map +1 -1
- package/dist/vault/routing.js +3 -10
- package/dist/vault/routing.js.map +1 -1
- package/dist/web/admin/portal.d.ts +27 -0
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +91 -130
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +3 -0
- 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 +0 -31
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.js +1 -1
- 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 +4 -0
- package/dist/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → web/portal-shell.js} +2 -2
- package/dist/web/portal-shell.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +7 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/command.d.ts.map +1 -1
- package/dist/web/session-view/command.js +4 -1
- package/dist/web/session-view/command.js.map +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +4 -3
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/service.js +2 -1
- package/dist/web/session-view/service.js.map +1 -1
- package/dist/web/session-view/types.d.ts +2 -1
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/package.json +7 -4
- 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/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{download.js → cli/download.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EACjB,qBAAqB,EAKrB,aAAa,EACd,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,15 @@ import { WebClient } from "@slack/web-api";
|
|
|
3
3
|
import { existsSync, readFileSync } from "fs";
|
|
4
4
|
import { readFile } from "fs/promises";
|
|
5
5
|
import { basename, join } from "path";
|
|
6
|
+
import { COMMAND_MANIFEST } from "../../commands/manifest.js";
|
|
6
7
|
import { resolveConversationSettings } from "../../config.js";
|
|
7
8
|
import * as log from "../../log.js";
|
|
8
|
-
import { PRODUCT_NAME, formatForceStopped
|
|
9
|
-
import { appendBotResponseLog, appendChannelLog, MessagingEventQueue,
|
|
9
|
+
import { PRODUCT_NAME, formatForceStopped } from "../../platform-messages.js";
|
|
10
|
+
import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, withRetry, } from "../shared.js";
|
|
10
11
|
import { processMessageIntake } from "../intake.js";
|
|
11
12
|
import { createSlackAdapters } from "./context.js";
|
|
12
13
|
import { hasMaterializedChatSession, registerThreadSession, } from "../../sessions/agent-memory-file-manager.js";
|
|
14
|
+
import { conversationIdOf } from "../../sessions/session-key.js";
|
|
13
15
|
import { isSlackThreadSessionKey, planSlackAdapterSession, planSlackEventAnchorRun, resolveSlackSessionKey, } from "./session.js";
|
|
14
16
|
import { reportUserFacingError } from "../../observability/sentry.js";
|
|
15
17
|
import { renderSlackBlocks } from "./blocks.js";
|
|
@@ -152,6 +154,21 @@ export class SlackMessagingBot {
|
|
|
152
154
|
return result.ts;
|
|
153
155
|
});
|
|
154
156
|
}
|
|
157
|
+
async addReaction(channel, messageTs, emoji) {
|
|
158
|
+
// Slack reaction names are colon-free short names; strip any wrapping colons.
|
|
159
|
+
const name = emoji.replace(/^:|:$/g, "");
|
|
160
|
+
await slackRetry(async () => {
|
|
161
|
+
try {
|
|
162
|
+
await this.webClient.reactions.add({ channel, timestamp: messageTs, name });
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
// Re-reacting with the same emoji is not an error worth surfacing.
|
|
166
|
+
if (err?.data?.error === "already_reacted")
|
|
167
|
+
return;
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
155
172
|
async postEphemeral(channel, user, text, threadTs) {
|
|
156
173
|
return slackRetry(async () => {
|
|
157
174
|
await this.webClient.chat.postEphemeral({
|
|
@@ -297,6 +314,7 @@ export class SlackMessagingBot {
|
|
|
297
314
|
getMessagingInfo() {
|
|
298
315
|
return {
|
|
299
316
|
name: "slack",
|
|
317
|
+
trustModel: "membership",
|
|
300
318
|
formattingGuide: "## Slack Formatting (mrkdwn, NOT Markdown)\nBold: *text*, Italic: _text_, Code: `code`, Block: ```code```, Links: <url|text>\nDo NOT use **double asterisks** or [markdown](links).",
|
|
301
319
|
channels: this.getAllChannels().map((c) => ({ id: c.id, name: c.name })),
|
|
302
320
|
users: this.getAllUsers().map((u) => ({
|
|
@@ -410,10 +428,17 @@ export class SlackMessagingBot {
|
|
|
410
428
|
});
|
|
411
429
|
}
|
|
412
430
|
processSlackMessageIntake(options) {
|
|
413
|
-
|
|
431
|
+
const absorbAttachmentFailure = () => {
|
|
432
|
+
void options.attachmentsPromise.catch((err) => {
|
|
433
|
+
log.logWarning("Failed to log Slack message", String(err));
|
|
434
|
+
});
|
|
435
|
+
};
|
|
436
|
+
processMessageIntake({
|
|
414
437
|
eventBase: options.event,
|
|
415
438
|
workingDir: this.workingDir,
|
|
416
439
|
isAutoReplyCandidate: options.isAutoReplyCandidate,
|
|
440
|
+
magicWord: { addressed: options.addressed, scopeFallback: "top-level" },
|
|
441
|
+
busyPolicy: "queue",
|
|
417
442
|
logEntryBase: {},
|
|
418
443
|
processAttachments: () => options.attachmentsPromise,
|
|
419
444
|
queueKey: options.queueKey,
|
|
@@ -421,8 +446,15 @@ export class SlackMessagingBot {
|
|
|
421
446
|
handler: this.handler,
|
|
422
447
|
bot: this,
|
|
423
448
|
createContext: (event) => this.createContext(event),
|
|
424
|
-
onNotTriggered: options.onNotTriggered,
|
|
425
449
|
deferAttachmentsUntilRun: true,
|
|
450
|
+
}).then((outcome) => {
|
|
451
|
+
// Slack logs eagerly via logUserMessage; when intake does not enqueue,
|
|
452
|
+
// nothing awaits the attachment download, so absorb its failure here.
|
|
453
|
+
if (outcome !== "enqueued")
|
|
454
|
+
absorbAttachmentFailure();
|
|
455
|
+
}, (err) => {
|
|
456
|
+
log.logWarning("Slack message intake failed", String(err));
|
|
457
|
+
absorbAttachmentFailure();
|
|
426
458
|
});
|
|
427
459
|
}
|
|
428
460
|
buildHomeView() {
|
|
@@ -460,7 +492,7 @@ export class SlackMessagingBot {
|
|
|
460
492
|
// Threshold for "stuck" detection (10 minutes)
|
|
461
493
|
const STUCK_THRESHOLD_MS = 10 * 60 * 1000;
|
|
462
494
|
for (const session of runningSessions) {
|
|
463
|
-
const channelId = session.sessionKey
|
|
495
|
+
const channelId = conversationIdOf(session.sessionKey);
|
|
464
496
|
const channel = this.channels.get(channelId);
|
|
465
497
|
const channelName = channel ? `#${channel.name}` : channelId;
|
|
466
498
|
const elapsed = Math.floor((Date.now() - session.startedAt) / 60000);
|
|
@@ -500,7 +532,14 @@ export class SlackMessagingBot {
|
|
|
500
532
|
{
|
|
501
533
|
type: "button",
|
|
502
534
|
text: { type: "plain_text", text: "Force Stop", emoji: true },
|
|
535
|
+
// The raw session key travels in `value` (Slack returns it
|
|
536
|
+
// verbatim); the action_id only routes and must be unique per
|
|
537
|
+
// view, so it carries a sanitized copy of the key. Never
|
|
538
|
+
// decode the key from the action_id — the `:`↔`_` rewrite is
|
|
539
|
+
// irreversible for conversation ids that contain `_` (GitHub's
|
|
540
|
+
// GH_owner_repo_number do, by design).
|
|
503
541
|
action_id: `force_stop_${session.sessionKey.replace(/:/g, "_")}`,
|
|
542
|
+
value: session.sessionKey,
|
|
504
543
|
style: "danger",
|
|
505
544
|
},
|
|
506
545
|
],
|
|
@@ -559,22 +598,6 @@ export class SlackMessagingBot {
|
|
|
559
598
|
});
|
|
560
599
|
return { type: "home", blocks: blocks };
|
|
561
600
|
}
|
|
562
|
-
resolveStopTarget(channelId, threadTs) {
|
|
563
|
-
const directTarget = resolveStopTarget({
|
|
564
|
-
handler: this.handler,
|
|
565
|
-
conversationId: channelId,
|
|
566
|
-
sessionKey: resolveSlackSessionKey(channelId, threadTs),
|
|
567
|
-
});
|
|
568
|
-
if (directTarget)
|
|
569
|
-
return directTarget;
|
|
570
|
-
if (threadTs)
|
|
571
|
-
return null;
|
|
572
|
-
return resolveOnlyScopedStopTarget(this.handler, channelId);
|
|
573
|
-
}
|
|
574
|
-
isStopText(text) {
|
|
575
|
-
const normalized = text.trim().toLowerCase();
|
|
576
|
-
return normalized === "stop" || normalized === "/stop";
|
|
577
|
-
}
|
|
578
601
|
createCommandAdapters(conversationId, userId, userName, text, ts, options = {}) {
|
|
579
602
|
const message = {
|
|
580
603
|
id: ts,
|
|
@@ -665,10 +688,23 @@ export class SlackMessagingBot {
|
|
|
665
688
|
const context = this.createCommandAdapters(conversationId, payload.user_id, userName, commandText, eventTs, isDirectMessage ? { threadTs } : { ephemeralChannelId: conversationId, threadTs });
|
|
666
689
|
return { event, context };
|
|
667
690
|
}
|
|
668
|
-
|
|
691
|
+
/**
|
|
692
|
+
* Generic slash-command route: synthesize the command text per the
|
|
693
|
+
* manifest's SlackSlashRoute data and dispatch to the handler. `/pi-new`
|
|
694
|
+
* stays bespoke (routeSlashNewCommand) because it replies in 中文 and calls
|
|
695
|
+
* handleNewCommand directly.
|
|
696
|
+
*/
|
|
697
|
+
async routeSlashCommand(route, payload) {
|
|
669
698
|
const { event, context } = this.buildSlashCommandEvent(payload, {
|
|
670
|
-
|
|
671
|
-
|
|
699
|
+
includeText: route.includeText,
|
|
700
|
+
thread: route.thread,
|
|
701
|
+
...(route.privateCommand
|
|
702
|
+
? {
|
|
703
|
+
type: payload.channel_id.startsWith("D")
|
|
704
|
+
? "dm"
|
|
705
|
+
: "private_command",
|
|
706
|
+
}
|
|
707
|
+
: {}),
|
|
672
708
|
});
|
|
673
709
|
await this.handler.handleEvent(event, this, context);
|
|
674
710
|
}
|
|
@@ -699,18 +735,6 @@ export class SlackMessagingBot {
|
|
|
699
735
|
};
|
|
700
736
|
await this.handler.handleNewCommand(conversationId, conversationId, commandMessagingBot);
|
|
701
737
|
}
|
|
702
|
-
async routeSlashModelCommand(payload) {
|
|
703
|
-
const { event, context } = this.buildSlashCommandEvent(payload, { includeText: true });
|
|
704
|
-
await this.handler.handleEvent(event, this, context);
|
|
705
|
-
}
|
|
706
|
-
async routeSlashSessionCommand(payload) {
|
|
707
|
-
const { event, context } = this.buildSlashCommandEvent(payload, { thread: true });
|
|
708
|
-
await this.handler.handleEvent(event, this, context);
|
|
709
|
-
}
|
|
710
|
-
async routeSlashAdminCommand(payload) {
|
|
711
|
-
const { event, context } = this.buildSlashCommandEvent(payload, { thread: true });
|
|
712
|
-
await this.handler.handleEvent(event, this, context);
|
|
713
|
-
}
|
|
714
738
|
setupEventHandlers() {
|
|
715
739
|
this.socketClient.on("disconnect", (err) => {
|
|
716
740
|
log.logWarning("Slack socket disconnect", err ? String(err) : "");
|
|
@@ -761,26 +785,12 @@ export class SlackMessagingBot {
|
|
|
761
785
|
ack();
|
|
762
786
|
return;
|
|
763
787
|
}
|
|
764
|
-
// Check for stop command - execute immediately, don't queue!
|
|
765
|
-
if (this.isStopText(slackEvent.text)) {
|
|
766
|
-
const stopTarget = this.resolveStopTarget(e.channel, e.thread_ts);
|
|
767
|
-
if (stopTarget) {
|
|
768
|
-
this.handler.handleStop(stopTarget, e.channel, this);
|
|
769
|
-
}
|
|
770
|
-
else {
|
|
771
|
-
this.postMessage(e.channel, formatNothingRunning("slack"));
|
|
772
|
-
}
|
|
773
|
-
void attachmentsPromise.catch((err) => {
|
|
774
|
-
log.logWarning("Failed to log Slack message", String(err));
|
|
775
|
-
});
|
|
776
|
-
ack();
|
|
777
|
-
return;
|
|
778
|
-
}
|
|
779
788
|
this.processSlackMessageIntake({
|
|
780
789
|
event: slackEvent,
|
|
781
790
|
attachmentsPromise,
|
|
782
791
|
queueKey: this.resolveQueueKey(e.channel, sessionKey),
|
|
783
792
|
isAutoReplyCandidate: false,
|
|
793
|
+
addressed: true,
|
|
784
794
|
});
|
|
785
795
|
ack();
|
|
786
796
|
}
|
|
@@ -853,59 +863,26 @@ export class SlackMessagingBot {
|
|
|
853
863
|
ack();
|
|
854
864
|
return;
|
|
855
865
|
}
|
|
856
|
-
|
|
857
|
-
if (isDM && this.isStopText(slackEvent.text)) {
|
|
858
|
-
const stopTarget = this.resolveStopTarget(e.channel, e.thread_ts);
|
|
859
|
-
if (stopTarget) {
|
|
860
|
-
this.handler.handleStop(stopTarget, e.channel, this);
|
|
861
|
-
}
|
|
862
|
-
else {
|
|
863
|
-
this.postMessage(e.channel, formatNothingRunning("slack"));
|
|
864
|
-
}
|
|
865
|
-
void attachmentsPromise.catch((err) => {
|
|
866
|
-
log.logWarning("Failed to log Slack message", String(err));
|
|
867
|
-
});
|
|
868
|
-
ack();
|
|
869
|
-
return;
|
|
870
|
-
}
|
|
871
|
-
const enqueueTriggered = () => {
|
|
872
|
-
const activeSessionKey = slackEvent.sessionKey ?? resolveSlackSessionKey(e.channel, e.thread_ts);
|
|
873
|
-
// Auto-reply top-level channel messages start with no sessionKey because
|
|
874
|
-
// they are only candidates until the policy allows them. Once triggered,
|
|
875
|
-
// persist the resolved key on the event; otherwise the runtime fallback
|
|
876
|
-
// treats the message ts as a thread session (`channel:ts`) instead of the
|
|
877
|
-
// persistent top-level channel session.
|
|
878
|
-
slackEvent.sessionKey = activeSessionKey;
|
|
879
|
-
this.processSlackMessageIntake({
|
|
880
|
-
event: slackEvent,
|
|
881
|
-
attachmentsPromise,
|
|
882
|
-
queueKey: this.resolveQueueKey(e.channel, activeSessionKey),
|
|
883
|
-
isAutoReplyCandidate: false,
|
|
884
|
-
});
|
|
885
|
-
};
|
|
886
|
-
const logOnly = () => {
|
|
866
|
+
if (!isDM && isThreadReply) {
|
|
887
867
|
void attachmentsPromise.catch((err) => {
|
|
888
868
|
log.logWarning("Failed to log Slack message", String(err));
|
|
889
869
|
});
|
|
890
|
-
};
|
|
891
|
-
if (isDM) {
|
|
892
|
-
enqueueTriggered();
|
|
893
870
|
ack();
|
|
894
871
|
return;
|
|
895
872
|
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
873
|
+
const activeSessionKey = slackEvent.sessionKey ?? resolveSlackSessionKey(e.channel, e.thread_ts);
|
|
874
|
+
// Auto-reply top-level channel messages start with no sessionKey because
|
|
875
|
+
// they are only candidates until the policy allows them. Persist the
|
|
876
|
+
// resolved key on the event; otherwise the runtime fallback treats the
|
|
877
|
+
// message ts as a thread session (`channel:ts`) instead of the persistent
|
|
878
|
+
// top-level channel session.
|
|
902
879
|
slackEvent.sessionKey = activeSessionKey;
|
|
903
880
|
this.processSlackMessageIntake({
|
|
904
881
|
event: slackEvent,
|
|
905
882
|
attachmentsPromise,
|
|
906
883
|
queueKey: this.resolveQueueKey(e.channel, activeSessionKey),
|
|
907
|
-
isAutoReplyCandidate:
|
|
908
|
-
|
|
884
|
+
isAutoReplyCandidate: !isDM,
|
|
885
|
+
addressed: isDM,
|
|
909
886
|
});
|
|
910
887
|
ack();
|
|
911
888
|
}
|
|
@@ -916,52 +893,20 @@ export class SlackMessagingBot {
|
|
|
916
893
|
return;
|
|
917
894
|
}
|
|
918
895
|
const { command, text, channel_id, user_id, user_name, thread_ts } = payload;
|
|
896
|
+
const entry = COMMAND_MANIFEST.find((candidate) => candidate.slackCommand === command);
|
|
897
|
+
if (!entry)
|
|
898
|
+
return;
|
|
919
899
|
let handlerPromise = null;
|
|
920
|
-
if (
|
|
921
|
-
handlerPromise = this.routeSlashLoginCommand({
|
|
922
|
-
command,
|
|
923
|
-
text,
|
|
924
|
-
channel_id,
|
|
925
|
-
user_id,
|
|
926
|
-
user_name,
|
|
927
|
-
});
|
|
928
|
-
}
|
|
929
|
-
else if (command === "/pi-new") {
|
|
900
|
+
if (entry.name === "new") {
|
|
930
901
|
handlerPromise = this.routeSlashNewCommand({ command, channel_id, user_id, user_name });
|
|
931
902
|
}
|
|
932
|
-
else if (
|
|
933
|
-
handlerPromise = this.
|
|
934
|
-
command,
|
|
935
|
-
channel_id,
|
|
936
|
-
user_id,
|
|
937
|
-
user_name,
|
|
938
|
-
thread_ts,
|
|
939
|
-
});
|
|
940
|
-
}
|
|
941
|
-
else if (command === "/pi-model") {
|
|
942
|
-
handlerPromise = this.routeSlashModelCommand({
|
|
943
|
-
command,
|
|
944
|
-
text,
|
|
945
|
-
channel_id,
|
|
946
|
-
user_id,
|
|
947
|
-
user_name,
|
|
948
|
-
});
|
|
949
|
-
}
|
|
950
|
-
else if (command === "/pi-sandbox" || command === "/pi-auto-reply") {
|
|
951
|
-
handlerPromise = this.routeSlashModelCommand({
|
|
903
|
+
else if (entry.slackRoute) {
|
|
904
|
+
handlerPromise = this.routeSlashCommand(entry.slackRoute, {
|
|
952
905
|
command,
|
|
953
906
|
text,
|
|
954
907
|
channel_id,
|
|
955
908
|
user_id,
|
|
956
909
|
user_name,
|
|
957
|
-
});
|
|
958
|
-
}
|
|
959
|
-
else if (command === "/pi-admin") {
|
|
960
|
-
handlerPromise = this.routeSlashAdminCommand({
|
|
961
|
-
command,
|
|
962
|
-
channel_id,
|
|
963
|
-
user_id,
|
|
964
|
-
user_name,
|
|
965
910
|
thread_ts,
|
|
966
911
|
});
|
|
967
912
|
}
|
|
@@ -998,9 +943,12 @@ export class SlackMessagingBot {
|
|
|
998
943
|
return;
|
|
999
944
|
}
|
|
1000
945
|
ack();
|
|
1001
|
-
|
|
946
|
+
// Prefer the verbatim key from `value`; the action_id fallback only
|
|
947
|
+
// serves buttons rendered before `value` existed and misdecodes session
|
|
948
|
+
// keys whose conversation id contains "_".
|
|
949
|
+
const sessionKey = action.value ?? action.action_id.replace("force_stop_", "").replace(/_/g, ":");
|
|
1002
950
|
const userId = body.user?.id;
|
|
1003
|
-
const channelId = body.container?.channel_id || sessionKey
|
|
951
|
+
const channelId = body.container?.channel_id || conversationIdOf(sessionKey);
|
|
1004
952
|
log.logInfo(`[Force Stop] User ${userId} requested force stop for ${sessionKey}`);
|
|
1005
953
|
// Use handler's forceStop method
|
|
1006
954
|
this.handler.forceStop(sessionKey);
|