@geminixiang/mikan 1.0.0-beta.45 → 1.0.0-beta.46
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 +26 -0
- package/README.md +12 -19
- 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 +3 -1
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +143 -141
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts +2 -8
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +1 -1
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts.map +1 -1
- package/dist/adapters/discord/format.js +2 -4
- package/dist/adapters/discord/format.js.map +1 -1
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +1 -4
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/context.d.ts +2 -9
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +4 -17
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +17 -86
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/tool-pack.d.ts.map +1 -1
- package/dist/adapters/github/tool-pack.js +0 -1
- package/dist/adapters/github/tool-pack.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts +0 -1
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +3 -22
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/types.d.ts +0 -33
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +311 -318
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +1 -4
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +12 -0
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +158 -178
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +2 -8
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +1 -1
- 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 +135 -123
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +1 -1
- package/dist/adapters/slack/stream-limits.js +1 -1
- package/dist/adapters/slack/stream-limits.js.map +1 -1
- package/dist/adapters/slack/types.d.ts +4 -0
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +2 -8
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +1 -2
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +11 -5
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent/catalog.d.ts +6 -18
- package/dist/agent/catalog.d.ts.map +1 -1
- package/dist/agent/catalog.js +19 -155
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/execution.d.ts +0 -7
- package/dist/agent/execution.d.ts.map +1 -1
- package/dist/agent/execution.js +23 -21
- package/dist/agent/execution.js.map +1 -1
- package/dist/agent/presenter.d.ts +7 -9
- package/dist/agent/presenter.d.ts.map +1 -1
- package/dist/agent/presenter.js +355 -357
- package/dist/agent/presenter.js.map +1 -1
- package/dist/agent/prompt.d.ts +5 -12
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +56 -81
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/runner.d.ts +0 -7
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +255 -308
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/types.d.ts +21 -17
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +0 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +7 -10
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/onboard.d.ts +10 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +237 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/types.d.ts +8 -3
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +5 -12
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/manifest.d.ts.map +1 -1
- package/dist/commands/manifest.js +9 -16
- package/dist/commands/manifest.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +15 -10
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +0 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +89 -70
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/session-view.js +9 -2
- package/dist/commands/session-view.js.map +1 -1
- package/dist/commands/types.d.ts +4 -3
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +13 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -37
- package/dist/config.js.map +1 -1
- package/dist/dream/index.d.ts +20 -0
- package/dist/dream/index.d.ts.map +1 -0
- package/dist/dream/index.js +253 -0
- package/dist/dream/index.js.map +1 -0
- package/dist/dream/types.d.ts +30 -0
- package/dist/dream/types.d.ts.map +1 -0
- package/dist/dream/types.js.map +1 -0
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +2 -34
- package/dist/env-manifest.js.map +1 -1
- package/dist/execution-resolver.d.ts +9 -2
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +26 -27
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/event-format.d.ts +1 -2
- package/dist/harness/event-format.d.ts.map +1 -1
- package/dist/harness/event-format.js +9 -15
- package/dist/harness/event-format.js.map +1 -1
- package/dist/harness/index.d.ts +1 -7
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +0 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +15 -35
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +7 -16
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +13 -131
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +1 -1
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +1 -1
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/subagent-runner.d.ts +2 -2
- package/dist/harness/subagent-runner.d.ts.map +1 -1
- package/dist/harness/subagent-runner.js +157 -162
- package/dist/harness/subagent-runner.js.map +1 -1
- package/dist/harness/types.d.ts +1 -13
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +3 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/main.js +31 -212
- package/dist/main.js.map +1 -1
- package/dist/mcp/catalog.d.ts +5 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +135 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/loader.d.ts.map +1 -1
- package/dist/mcp/loader.js +3 -6
- package/dist/mcp/loader.js.map +1 -1
- package/dist/mcp/types.d.ts +22 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/office/index.d.ts +136 -8
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +1050 -9
- package/dist/office/index.js.map +1 -1
- package/dist/office/types.d.ts +19 -1
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/packages/index.d.ts +168 -5
- package/dist/packages/index.d.ts.map +1 -1
- package/dist/packages/index.js +749 -5
- package/dist/packages/index.js.map +1 -1
- package/dist/packages/types.d.ts +1 -5
- package/dist/packages/types.d.ts.map +1 -1
- package/dist/packages/types.js.map +1 -1
- package/dist/provisioner.d.ts +2 -9
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +3 -12
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +117 -380
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +32 -18
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +159 -46
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +4 -26
- 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 -3
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +0 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +2 -3
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +4 -2
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +10 -19
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js +8 -8
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/index.d.ts +7 -10
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +45 -16
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +13 -45
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +5 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +10 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +1 -3
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +58 -11
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/migrate-v3.d.ts +2 -5
- package/dist/sessions/migrate-v3.d.ts.map +1 -1
- package/dist/sessions/migrate-v3.js +17 -1
- package/dist/sessions/migrate-v3.js.map +1 -1
- package/dist/sessions/store.d.ts +5 -6
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +62 -2
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +9 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +2 -10
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/read.js +2 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +2 -3
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent.d.ts +1 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/types.d.ts +38 -127
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +9 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +29 -5
- package/dist/vault/index.js.map +1 -1
- package/dist/web/admin/portal.d.ts +12 -1
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +437 -422
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +2 -2
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/login/portal.d.ts +7 -1
- package/dist/web/login/portal.d.ts.map +1 -1
- package/dist/web/login/portal.js +143 -78
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/portal-shell.d.ts +1 -0
- package/dist/web/portal-shell.d.ts.map +1 -1
- package/dist/web/portal-shell.js +12 -1
- package/dist/web/portal-shell.js.map +1 -1
- package/dist/web/server.d.ts +3 -3
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/portal.d.ts +8 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +609 -132
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/types.d.ts +8 -0
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/dist/workspace-projection/index.d.ts +14 -2
- package/dist/workspace-projection/index.d.ts.map +1 -1
- package/dist/workspace-projection/index.js +102 -14
- package/dist/workspace-projection/index.js.map +1 -1
- package/dist/workspace-projection/types.d.ts +14 -1
- package/dist/workspace-projection/types.d.ts.map +1 -1
- package/dist/workspace-projection/types.js.map +1 -1
- package/package.json +3 -5
- package/dist/adapters/github/cloudbuild.d.ts +0 -19
- package/dist/adapters/github/cloudbuild.d.ts.map +0 -1
- package/dist/adapters/github/cloudbuild.js +0 -71
- package/dist/adapters/github/cloudbuild.js.map +0 -1
- package/dist/adapters/github/gcp-auth.d.ts +0 -28
- package/dist/adapters/github/gcp-auth.d.ts.map +0 -1
- package/dist/adapters/github/gcp-auth.js +0 -196
- package/dist/adapters/github/gcp-auth.js.map +0 -1
- package/dist/agent/index.d.ts +0 -9
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -8
- package/dist/agent/index.js.map +0 -1
- package/dist/cli/ext-dev.d.ts +0 -2
- package/dist/cli/ext-dev.d.ts.map +0 -1
- package/dist/cli/ext-dev.js +0 -188
- package/dist/cli/ext-dev.js.map +0 -1
- package/dist/cli/ext.d.ts +0 -2
- package/dist/cli/ext.d.ts.map +0 -1
- package/dist/cli/ext.js +0 -324
- package/dist/cli/ext.js.map +0 -1
- package/dist/commands/extensions.d.ts +0 -26
- package/dist/commands/extensions.d.ts.map +0 -1
- package/dist/commands/extensions.js +0 -103
- package/dist/commands/extensions.js.map +0 -1
- package/dist/extension-schedules.d.ts +0 -31
- package/dist/extension-schedules.d.ts.map +0 -1
- package/dist/extension-schedules.js +0 -229
- package/dist/extension-schedules.js.map +0 -1
- package/dist/harness/auth.d.ts +0 -17
- package/dist/harness/auth.d.ts.map +0 -1
- package/dist/harness/auth.js +0 -92
- package/dist/harness/auth.js.map +0 -1
- package/dist/harness/extensions/loader.d.ts +0 -40
- package/dist/harness/extensions/loader.d.ts.map +0 -1
- package/dist/harness/extensions/loader.js +0 -723
- package/dist/harness/extensions/loader.js.map +0 -1
- package/dist/harness/extensions/registry.d.ts +0 -155
- package/dist/harness/extensions/registry.d.ts.map +0 -1
- package/dist/harness/extensions/registry.js +0 -420
- package/dist/harness/extensions/registry.js.map +0 -1
- package/dist/harness/extensions/types.d.ts +0 -665
- package/dist/harness/extensions/types.d.ts.map +0 -1
- package/dist/harness/extensions/types.js.map +0 -1
- package/dist/office/address.d.ts +0 -31
- package/dist/office/address.d.ts.map +0 -1
- package/dist/office/address.js +0 -113
- package/dist/office/address.js.map +0 -1
- package/dist/office/layout.d.ts +0 -27
- package/dist/office/layout.d.ts.map +0 -1
- package/dist/office/layout.js +0 -97
- package/dist/office/layout.js.map +0 -1
- package/dist/office/migration.d.ts +0 -44
- package/dist/office/migration.d.ts.map +0 -1
- package/dist/office/migration.js +0 -255
- package/dist/office/migration.js.map +0 -1
- package/dist/office/registry.d.ts +0 -75
- package/dist/office/registry.d.ts.map +0 -1
- package/dist/office/registry.js +0 -646
- package/dist/office/registry.js.map +0 -1
- package/dist/packages/admin.d.ts +0 -17
- package/dist/packages/admin.d.ts.map +0 -1
- package/dist/packages/admin.js +0 -98
- package/dist/packages/admin.js.map +0 -1
- package/dist/packages/inspect.d.ts +0 -11
- package/dist/packages/inspect.d.ts.map +0 -1
- package/dist/packages/inspect.js +0 -98
- package/dist/packages/inspect.js.map +0 -1
- package/dist/packages/materialize.d.ts +0 -40
- package/dist/packages/materialize.d.ts.map +0 -1
- package/dist/packages/materialize.js +0 -297
- package/dist/packages/materialize.js.map +0 -1
- package/dist/packages/resolve.d.ts +0 -25
- package/dist/packages/resolve.d.ts.map +0 -1
- package/dist/packages/resolve.js +0 -208
- package/dist/packages/resolve.js.map +0 -1
- package/dist/packages/source.d.ts +0 -39
- package/dist/packages/source.d.ts.map +0 -1
- package/dist/packages/source.js +0 -189
- package/dist/packages/source.js.map +0 -1
- package/dist/sandbox/errors.d.ts +0 -6
- package/dist/sandbox/errors.d.ts.map +0 -1
- package/dist/sandbox/errors.js +0 -11
- package/dist/sandbox/errors.js.map +0 -1
- package/dist/sandbox/firecracker.d.ts +0 -18
- package/dist/sandbox/firecracker.d.ts.map +0 -1
- package/dist/sandbox/firecracker.js +0 -223
- package/dist/sandbox/firecracker.js.map +0 -1
- package/dist/sandbox/gondolin.d.ts +0 -57
- package/dist/sandbox/gondolin.d.ts.map +0 -1
- package/dist/sandbox/gondolin.js +0 -764
- package/dist/sandbox/gondolin.js.map +0 -1
- package/dist/sandbox/image.d.ts +0 -3
- package/dist/sandbox/image.d.ts.map +0 -1
- package/dist/sandbox/image.js +0 -29
- package/dist/sandbox/image.js.map +0 -1
- package/dist/sessions/conversation-log.d.ts +0 -9
- package/dist/sessions/conversation-log.d.ts.map +0 -1
- package/dist/sessions/conversation-log.js +0 -50
- package/dist/sessions/conversation-log.js.map +0 -1
- package/dist/sessions/rotation.d.ts +0 -2
- package/dist/sessions/rotation.d.ts.map +0 -1
- package/dist/sessions/rotation.js +0 -41
- package/dist/sessions/rotation.js.map +0 -1
- package/dist/vault/disabled.d.ts +0 -9
- package/dist/vault/disabled.d.ts.map +0 -1
- package/dist/vault/disabled.js +0 -25
- package/dist/vault/disabled.js.map +0 -1
- package/dist/web/admin/store.d.ts +0 -13
- package/dist/web/admin/store.d.ts.map +0 -1
- package/dist/web/admin/store.js +0 -14
- package/dist/web/admin/store.js.map +0 -1
- package/dist/web/login/store.d.ts +0 -8
- package/dist/web/login/store.d.ts.map +0 -1
- package/dist/web/login/store.js +0 -15
- package/dist/web/login/store.js.map +0 -1
- package/dist/web/session-view/service.d.ts +0 -6
- package/dist/web/session-view/service.d.ts.map +0 -1
- package/dist/web/session-view/service.js +0 -517
- package/dist/web/session-view/service.js.map +0 -1
- package/dist/web/session-view/store.d.ts +0 -8
- package/dist/web/session-view/store.d.ts.map +0 -1
- package/dist/web/session-view/store.js +0 -15
- package/dist/web/session-view/store.js.map +0 -1
- /package/dist/{harness/extensions → dream}/types.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,32 @@ any release.
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [1.0.0-beta.46]
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Add an interactive `mikan onboard` wizard that configures one chat adapter, an LLM provider, and the sandbox, writing private environment and settings files while retaining non-interactive template generation.
|
|
17
|
+
- Derive shared workspace visibility from platform channel privacy: Slack public channels can update shared memory, private channels receive it read-only, and DMs, external channels, unknown kinds, and other platforms stay isolated unless explicitly overridden.
|
|
18
|
+
- Schedule Dream maintenance for Conversation-office memory with durable evidence checkpoints.
|
|
19
|
+
- Add an Admin MCP Marketplace with reviewed GitHub, Context7, Playwright, Sequential Thinking, and Metabase presets; Metabase installations accept an instance endpoint and API key.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Remove the executable extension system and its CLI/chat management surfaces; packages remain the supported path for deploying read-only skills.
|
|
24
|
+
- Remove the harness `auth.json` credential store; configure provider credentials through environment variables, onboarding, or the conversation vault.
|
|
25
|
+
- Remove Gondolin, Firecracker, and GitHub Cloud Build log integrations from the supported runtime surface.
|
|
26
|
+
- Fail closed when a sandbox backend cannot enforce an isolated office or read-only shared workspace memory; use `image:*` or explicitly select a trusted read-write projection.
|
|
27
|
+
- Consolidate runtime, session, adapter, web, and configuration ownership to reduce duplicate lifecycle and parsing rules.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- Preserve streamed UTF-8 output when host sandbox chunks split multi-byte characters.
|
|
32
|
+
- Re-aim migrated session lanes at the nearest surviving ancestor when the newest v3 entry contains facts but no v4 message.
|
|
33
|
+
|
|
34
|
+
### Tests
|
|
35
|
+
|
|
36
|
+
- Move CI action runtimes to Node 24 and strengthen runtime, presenter, workspace-projection, MCP marketplace, and session migration coverage.
|
|
37
|
+
|
|
12
38
|
## [1.0.0-beta.45]
|
|
13
39
|
|
|
14
40
|
### Fixed
|
package/README.md
CHANGED
|
@@ -22,15 +22,15 @@ mikan keeps the chat record, agent session, and execution runtime separate:
|
|
|
22
22
|
- **Chat / conversation data** is the platform-facing record: `log.jsonl`, attachments, and conversation files.
|
|
23
23
|
- **Session orchestration** turns platform events into agent runs, handles top-level/thread scopes, and persists structured context under `sessions/*.jsonl`.
|
|
24
24
|
- **mikan agent harness** (`src/harness/`, built on pi-agent-core and pi-ai) runs the model loop, session persistence, compaction, and calls mikan tools.
|
|
25
|
-
- **Sandbox runtime** is where tool commands execute: host, Docker container/image,
|
|
25
|
+
- **Sandbox runtime** is where tool commands execute: host, Docker container/image, or the experimental Cloudflare bridge.
|
|
26
26
|
- **Vault** provides runtime credentials as env vars and mounted secret files.
|
|
27
27
|
|
|
28
28
|
## Features
|
|
29
29
|
|
|
30
30
|
- **Multi-platform** — Slack, Telegram, Discord, and GitHub adapters
|
|
31
31
|
- **Concurrent conversations** — Slack threads, Discord replies/threads, and Telegram reply chains run as independent sessions
|
|
32
|
-
- **Conversation offices** — one office directory and one sandbox runtime per conversation,
|
|
33
|
-
- **Sandbox execution** — host, shared container, per-conversation managed container,
|
|
32
|
+
- **Conversation offices** — one office directory and one sandbox runtime per conversation, with platform-derived workspace sharing and explicit door-policy overrides
|
|
33
|
+
- **Sandbox execution** — host, shared container, per-conversation managed container, or Cloudflare bridge (experimental)
|
|
34
34
|
- **Credential vaults** — `/login` stores credentials under `--state-dir` and injects env into sandbox runs
|
|
35
35
|
- **Web session viewer** — read-only web view of the current session via `session` / `/session`
|
|
36
36
|
- **Persistent memory** — workspace-level and per-office `MEMORY.md`
|
|
@@ -118,20 +118,18 @@ Slack threads, Discord replies/threads, and Telegram reply chains are mapped to
|
|
|
118
118
|
|
|
119
119
|
## Sandbox
|
|
120
120
|
|
|
121
|
-
| Mode
|
|
122
|
-
|
|
|
123
|
-
| `host` (default)
|
|
124
|
-
| `container:<name>`
|
|
125
|
-
| `image:<image>`
|
|
126
|
-
| `
|
|
127
|
-
| `firecracker:<vm-id>:<path>` | Firecracker microVM (alpha; not recommended) |
|
|
128
|
-
| `cloudflare:<sandbox-id>` | Cloudflare Worker bridge (experimental; no auto workspace sync) |
|
|
121
|
+
| Mode | Description |
|
|
122
|
+
| ------------------------- | ----------------------------------------------------------------------------- |
|
|
123
|
+
| `host` (default) | Run on host; no vault env injection |
|
|
124
|
+
| `container:<name>` | Run in an existing shared container; everyone sharing it shares its one vault |
|
|
125
|
+
| `image:<image>` | Auto-provision one Docker container and one vault per conversation office |
|
|
126
|
+
| `cloudflare:<sandbox-id>` | Cloudflare Worker bridge (experimental; no auto workspace sync) |
|
|
129
127
|
|
|
130
|
-
Each office's data view is set by its **door policy
|
|
128
|
+
Each office's data view is set by its **door policy**. Without an explicit workspace setting, Slack follows the channel kind: public channels use trusted shared support and can update workspace `MEMORY.md`; private channels can read that shared memory but receive it read-only; DMs, external channels, unknown channel kinds, and other platforms stay isolated. The admin portal or `/pi-sandbox door <default|isolated|shared|shared-private|full>` can override that result. Door policy governs data access only; execution isolation is unaffected.
|
|
131
129
|
|
|
132
|
-
Only `image:*`
|
|
130
|
+
Only `image:*` can enforce isolated projections and read-only shared memory. `host`, `container:*`, and `cloudflare:*` therefore fail closed for isolated or private-channel projections; an admin must either use `image:*` or explicitly select a trusted read-write layout.
|
|
133
131
|
|
|
134
|
-
For routing, mounts, vault behavior, managed container details, and
|
|
132
|
+
For routing, mounts, vault behavior, managed container details, and Cloudflare notes, see [src/content/docs/sandbox.mdx](src/content/docs/sandbox.mdx).
|
|
135
133
|
|
|
136
134
|
## Chat commands
|
|
137
135
|
|
|
@@ -158,11 +156,6 @@ mikan reads global settings from `<state-dir>/settings.json`; host-only per-conv
|
|
|
158
156
|
"provider": "anthropic",
|
|
159
157
|
"model": "claude-sonnet-4-6",
|
|
160
158
|
"thinkingLevel": "off"
|
|
161
|
-
},
|
|
162
|
-
"sandbox": {
|
|
163
|
-
"workspace": {
|
|
164
|
-
"doorPolicy": "isolated"
|
|
165
|
-
}
|
|
166
159
|
}
|
|
167
160
|
}
|
|
168
161
|
```
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ConversationEvent, ConversationMessage, OfficeAddress, PlatformName } from "./types.js";
|
|
2
|
-
export type { MessagingBot, ConversationContext, ConversationEvent, MessagingEventHandler,
|
|
2
|
+
export type { MessagingBot, ConversationContext, ConversationEvent, MessagingEventHandler, HandleNewCommandOptions, ConversationMessage, ConversationResponder, ChatToolResult, ConversationKind, MessagingInfo, OfficeAddress, OfficeKey, PlatformHistoryMessage, PlatformHistoryOptions, PlatformName, PlatformUserInfo, RunningSession, SubagentProgressSnapshot, } from "./types.js";
|
|
3
3
|
interface ConversationIdentityInput {
|
|
4
4
|
platform: PlatformName;
|
|
5
5
|
conversationId: string;
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,UAAU,yBAAyB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAYD,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,gBAAgB,CAAC,EAC/D,KAAK,EAAE,CAAC,GAAG,yBAAyB,GAAG,CAAC,GAAG,iBAAiB,CAG7D;AAED,6EAA6E;AAC7E,wBAAgB,yBAAyB,CACvC,CAAC,SAAS,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,gBAAgB,CAAC,EACjE,KAAK,EAAE,CAAC,GAAG,yBAAyB,GAAG,CAAC,GAAG,mBAAmB,CAG/D"}
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAmCpE,SAAS,0BAA0B,CAAC,KAAgC;IAClE,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,CACjG,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CAErC,KAAoC;IACpC,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CAEvC,KAAoC;IACpC,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;AACvE,CAAC","sourcesContent":["import { createOfficeAddress, sameOffice } from \"./office/index.js\";\nimport type {\n ConversationEvent,\n ConversationMessage,\n OfficeAddress,\n PlatformName,\n} from \"./types.js\";\n\nexport type {\n MessagingBot,\n ConversationContext,\n ConversationEvent,\n MessagingEventHandler,\n HandleNewCommandOptions,\n ConversationMessage,\n ConversationResponder,\n ChatToolResult,\n ConversationKind,\n MessagingInfo,\n OfficeAddress,\n OfficeKey,\n PlatformHistoryMessage,\n PlatformHistoryOptions,\n PlatformName,\n PlatformUserInfo,\n RunningSession,\n SubagentProgressSnapshot,\n} from \"./types.js\";\n\ninterface ConversationIdentityInput {\n platform: PlatformName;\n conversationId: string;\n address?: OfficeAddress;\n}\n\nfunction resolveConversationAddress(input: ConversationIdentityInput): OfficeAddress {\n const address = createOfficeAddress(input.platform, input.conversationId);\n if (input.address && !sameOffice(address, input.address)) {\n throw new Error(\n `Conversation address mismatch for ${JSON.stringify(input.conversationId)} on ${input.platform}`,\n );\n }\n return address;\n}\n\n/** Normalize platform intake into one authoritative conversation identity. */\nexport function createConversationEvent<\n T extends Omit<ConversationEvent, \"address\" | \"conversationId\">,\n>(input: T & ConversationIdentityInput): T & ConversationEvent {\n const address = resolveConversationAddress(input);\n return { ...input, address, conversationId: address.conversationId };\n}\n\n/** Normalize a platform response context into one authoritative identity. */\nexport function createConversationMessage<\n T extends Omit<ConversationMessage, \"address\" | \"conversationId\">,\n>(input: T & ConversationIdentityInput): T & ConversationMessage {\n const address = resolveConversationAddress(input);\n return { ...input, address, conversationId: address.conversationId };\n}\n"]}
|
|
@@ -46,7 +46,7 @@ export declare class DiscordMessagingBot implements MessagingBot {
|
|
|
46
46
|
* Process attachments from a Discord message.
|
|
47
47
|
* Downloads files before returning so the agent can read them immediately.
|
|
48
48
|
*/
|
|
49
|
-
processAttachments(channelId: string, attachments: Collection<string, Attachment
|
|
49
|
+
processAttachments(channelId: string, attachments: Collection<string, Attachment>): Promise<{
|
|
50
50
|
name: string;
|
|
51
51
|
localPath: string;
|
|
52
52
|
}[]>;
|
|
@@ -57,6 +57,8 @@ export declare class DiscordMessagingBot implements MessagingBot {
|
|
|
57
57
|
private resolveConversationContext;
|
|
58
58
|
private createSlashCommandAdapters;
|
|
59
59
|
private setupEventHandlers;
|
|
60
|
+
private handleInteractionCreate;
|
|
61
|
+
private handleMessageCreate;
|
|
60
62
|
private fetchTextChannel;
|
|
61
63
|
}
|
|
62
64
|
//# sourceMappingURL=bot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/discord/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/discord/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAGf,KAAK,UAAU,EAKhB,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkC5E,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,KAAK,CAA4E;IAEzF,YAAY,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAa1F;IAMK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA6C3B;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhE;IAEK,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlF;IAED,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAe9C;IAED,gBAAgB,IAAI,aAAa,CAYhC;IAMK,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;IAEK,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnF;IAEK,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc9F;IAEK,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;IAEK,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjD;IAEK,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnF;IAEK,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMrE;IAEK,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF;IAED,cAAc,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAE/C;IAED,WAAW,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAErE;IAED,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAMhE;IAED;;;OAGG;IACG,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,GAC1C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAmBhD;IAMD,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,0BAA0B;IAmElC,OAAO,CAAC,kBAAkB;YAKZ,uBAAuB;YA8FvB,mBAAmB;YAqFnB,gBAAgB;CAS/B"}
|
|
@@ -218,7 +218,7 @@ export class DiscordMessagingBot {
|
|
|
218
218
|
* Process attachments from a Discord message.
|
|
219
219
|
* Downloads files before returning so the agent can read them immediately.
|
|
220
220
|
*/
|
|
221
|
-
async processAttachments(channelId, attachments
|
|
221
|
+
async processAttachments(channelId, attachments) {
|
|
222
222
|
const items = [];
|
|
223
223
|
for (const attachment of attachments.values()) {
|
|
224
224
|
if (!attachment.name) {
|
|
@@ -354,161 +354,163 @@ export class DiscordMessagingBot {
|
|
|
354
354
|
return { address: message.address, message, responder, platform };
|
|
355
355
|
}
|
|
356
356
|
setupEventHandlers() {
|
|
357
|
-
this.client.on(Events.InteractionCreate,
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
357
|
+
this.client.on(Events.InteractionCreate, this.handleInteractionCreate.bind(this));
|
|
358
|
+
this.client.on(Events.MessageCreate, this.handleMessageCreate.bind(this));
|
|
359
|
+
}
|
|
360
|
+
async handleInteractionCreate(interaction) {
|
|
361
|
+
if (!interaction.isChatInputCommand())
|
|
362
|
+
return;
|
|
363
|
+
const manifestEntry = COMMAND_MANIFEST.find((entry) => entry.discord && entry.name === interaction.commandName);
|
|
364
|
+
if (!manifestEntry)
|
|
365
|
+
return;
|
|
366
|
+
const isDM = !interaction.inGuild();
|
|
367
|
+
const { conversationId, threadTs } = this.resolveConversationContext({
|
|
368
|
+
channelId: interaction.channelId,
|
|
369
|
+
inGuild: interaction.inGuild(),
|
|
370
|
+
isThread: interaction.channel?.isThread() ?? false,
|
|
371
|
+
parentChannelId: interaction.channel && "parentId" in interaction.channel
|
|
372
|
+
? interaction.channel.parentId
|
|
373
|
+
: null,
|
|
374
|
+
});
|
|
375
|
+
const sessionKey = resolveChatSessionKey({
|
|
376
|
+
conversationId,
|
|
377
|
+
conversationKind: isDM ? "direct" : "shared",
|
|
378
|
+
messageId: interaction.id,
|
|
379
|
+
persistentTopLevel: true,
|
|
380
|
+
threadTs,
|
|
381
|
+
});
|
|
382
|
+
const commandArg = manifestEntry.arg
|
|
383
|
+
? interaction.options.getString(manifestEntry.arg.name)?.trim()
|
|
384
|
+
: undefined;
|
|
385
|
+
const commandText = commandArg
|
|
386
|
+
? `/${interaction.commandName} ${commandArg}`
|
|
387
|
+
: `/${interaction.commandName}`;
|
|
388
|
+
this.logToFile(conversationId, {
|
|
389
|
+
date: new Date(interaction.createdTimestamp).toISOString(),
|
|
390
|
+
ts: interaction.id,
|
|
391
|
+
...(threadTs ? { threadTs } : {}),
|
|
392
|
+
user: interaction.user.id,
|
|
393
|
+
userName: interaction.user.username,
|
|
394
|
+
text: commandText,
|
|
395
|
+
attachments: [],
|
|
396
|
+
isMessagingBot: false,
|
|
397
|
+
});
|
|
398
|
+
const context = this.createSlashCommandAdapters(interaction, commandText, sessionKey, conversationId);
|
|
399
|
+
try {
|
|
400
|
+
// Magic words are conversation-intake controls, not command handlers;
|
|
401
|
+
// the manifest's metadata routes them (today only `stop`).
|
|
402
|
+
if (manifestEntry.magicWord) {
|
|
403
|
+
const stopTarget = this.resolveStopTarget(conversationId, sessionKey);
|
|
404
|
+
if (stopTarget) {
|
|
405
|
+
await this.handler.handleStop(createOfficeAddress("discord", conversationId), stopTarget, this);
|
|
406
|
+
await context.responder.respond("Stopped the current conversation.");
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
await context.responder.respond(formatNothingRunning("discord"));
|
|
410
|
+
}
|
|
362
411
|
return;
|
|
363
|
-
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
isThread: interaction.channel?.isThread() ?? false,
|
|
368
|
-
parentChannelId: interaction.channel && "parentId" in interaction.channel
|
|
369
|
-
? interaction.channel.parentId
|
|
370
|
-
: null,
|
|
371
|
-
});
|
|
372
|
-
const sessionKey = resolveChatSessionKey({
|
|
412
|
+
}
|
|
413
|
+
const event = createConversationEvent({
|
|
414
|
+
platform: "discord",
|
|
415
|
+
type: "dm",
|
|
373
416
|
conversationId,
|
|
374
417
|
conversationKind: isDM ? "direct" : "shared",
|
|
375
|
-
messageId: interaction.id,
|
|
376
|
-
persistentTopLevel: true,
|
|
377
|
-
threadTs,
|
|
378
|
-
});
|
|
379
|
-
const commandArg = manifestEntry.arg
|
|
380
|
-
? interaction.options.getString(manifestEntry.arg.name)?.trim()
|
|
381
|
-
: undefined;
|
|
382
|
-
const commandText = commandArg
|
|
383
|
-
? `/${interaction.commandName} ${commandArg}`
|
|
384
|
-
: `/${interaction.commandName}`;
|
|
385
|
-
this.logToFile(conversationId, {
|
|
386
|
-
date: new Date(interaction.createdTimestamp).toISOString(),
|
|
387
418
|
ts: interaction.id,
|
|
388
|
-
|
|
419
|
+
thread_ts: threadTs,
|
|
420
|
+
sessionKey,
|
|
389
421
|
user: interaction.user.id,
|
|
390
|
-
userName: interaction.user.username,
|
|
391
422
|
text: commandText,
|
|
392
423
|
attachments: [],
|
|
393
|
-
isMessagingBot: false,
|
|
394
424
|
});
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
await context.responder.respond("Stopped the current conversation.");
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
await context.responder.respond(formatNothingRunning("discord"));
|
|
407
|
-
}
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
const event = createConversationEvent({
|
|
411
|
-
platform: "discord",
|
|
412
|
-
type: "dm",
|
|
413
|
-
conversationId,
|
|
414
|
-
conversationKind: isDM ? "direct" : "shared",
|
|
415
|
-
ts: interaction.id,
|
|
416
|
-
thread_ts: threadTs,
|
|
417
|
-
sessionKey,
|
|
418
|
-
user: interaction.user.id,
|
|
419
|
-
text: commandText,
|
|
420
|
-
attachments: [],
|
|
425
|
+
await this.handler.handleEvent(event, this, context);
|
|
426
|
+
}
|
|
427
|
+
catch (err) {
|
|
428
|
+
log.logWarning("Discord slash command error", err instanceof Error ? err.message : String(err));
|
|
429
|
+
if (!interaction.replied && !interaction.deferred) {
|
|
430
|
+
await interaction.reply({
|
|
431
|
+
content: `${interaction.commandName} command failed. Please try again later.`,
|
|
432
|
+
ephemeral: !isDM,
|
|
421
433
|
});
|
|
422
|
-
await this.handler.handleEvent(event, this, context);
|
|
423
|
-
}
|
|
424
|
-
catch (err) {
|
|
425
|
-
log.logWarning("Discord slash command error", err instanceof Error ? err.message : String(err));
|
|
426
|
-
if (!interaction.replied && !interaction.deferred) {
|
|
427
|
-
await interaction.reply({
|
|
428
|
-
content: `${interaction.commandName} command failed. Please try again later.`,
|
|
429
|
-
ephemeral: !isDM,
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
434
|
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
async handleMessageCreate(msg) {
|
|
438
|
+
// Skip messages from before startup
|
|
439
|
+
if (msg.createdTimestamp < this.startupTime)
|
|
440
|
+
return;
|
|
441
|
+
// Skip bot messages
|
|
442
|
+
if (msg.author.bot)
|
|
443
|
+
return;
|
|
444
|
+
const isDM = msg.channel.type === 1; // ChannelType.DM = 1
|
|
445
|
+
const isInThread = msg.channel.isThread();
|
|
446
|
+
const referencedMsgId = msg.reference?.messageId;
|
|
447
|
+
const isThreadReply = isInThread || !!referencedMsgId;
|
|
448
|
+
const isMentioned = msg.mentions.users.has(this.botUserId ?? "");
|
|
449
|
+
const isAutoReplyCandidate = !isDM && !isMentioned && !isThreadReply;
|
|
450
|
+
const { conversationId, threadTs } = this.resolveConversationContext({
|
|
451
|
+
channelId: msg.channelId,
|
|
452
|
+
inGuild: !isDM,
|
|
453
|
+
isThread: isInThread,
|
|
454
|
+
parentChannelId: "parentId" in msg.channel ? msg.channel.parentId : null,
|
|
455
|
+
referencedMsgId,
|
|
433
456
|
});
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
const
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
const eventBase = createConversationEvent({
|
|
478
|
-
platform: "discord",
|
|
479
|
-
type: isDM ? "dm" : "mention",
|
|
480
|
-
conversationId,
|
|
481
|
-
conversationKind,
|
|
457
|
+
const userId = msg.author.id;
|
|
458
|
+
const userName = msg.author.username;
|
|
459
|
+
const msgId = msg.id;
|
|
460
|
+
// Track user
|
|
461
|
+
this.users.set(userId, {
|
|
462
|
+
id: userId,
|
|
463
|
+
userName,
|
|
464
|
+
displayName: msg.member?.displayName ?? userName,
|
|
465
|
+
});
|
|
466
|
+
// Track channel
|
|
467
|
+
if (!this.channels.has(conversationId) && "name" in msg.channel) {
|
|
468
|
+
const ch = msg.channel;
|
|
469
|
+
this.channels.set(conversationId, { id: conversationId, name: ch.name });
|
|
470
|
+
}
|
|
471
|
+
const conversationKind = isDM ? "direct" : "shared";
|
|
472
|
+
const sessionKey = resolveChatSessionKey({
|
|
473
|
+
conversationId,
|
|
474
|
+
conversationKind,
|
|
475
|
+
messageId: msgId,
|
|
476
|
+
persistentTopLevel: true,
|
|
477
|
+
threadTs,
|
|
478
|
+
});
|
|
479
|
+
const cleanedText = this.stripMessagingBotMention(msg.content);
|
|
480
|
+
const eventBase = createConversationEvent({
|
|
481
|
+
platform: "discord",
|
|
482
|
+
type: isDM ? "dm" : "mention",
|
|
483
|
+
conversationId,
|
|
484
|
+
conversationKind,
|
|
485
|
+
ts: msgId,
|
|
486
|
+
thread_ts: threadTs,
|
|
487
|
+
sessionKey,
|
|
488
|
+
user: userId,
|
|
489
|
+
userName,
|
|
490
|
+
text: cleanedText,
|
|
491
|
+
});
|
|
492
|
+
await processMessageIntake({
|
|
493
|
+
eventBase,
|
|
494
|
+
office: this.workspace.office(eventBase.address),
|
|
495
|
+
isAutoReplyCandidate,
|
|
496
|
+
magicWord: { addressed: !isAutoReplyCandidate, scopeFallback: "top-level" },
|
|
497
|
+
busyPolicy: "queue",
|
|
498
|
+
logEntryBase: {
|
|
499
|
+
date: msg.createdAt.toISOString(),
|
|
482
500
|
ts: msgId,
|
|
483
|
-
|
|
484
|
-
sessionKey,
|
|
501
|
+
...(!isDM && threadTs ? { threadTs } : {}),
|
|
485
502
|
user: userId,
|
|
486
503
|
userName,
|
|
487
504
|
text: cleanedText,
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
ts: msgId,
|
|
498
|
-
...(!isDM && threadTs ? { threadTs } : {}),
|
|
499
|
-
user: userId,
|
|
500
|
-
userName,
|
|
501
|
-
text: cleanedText,
|
|
502
|
-
isMessagingBot: false,
|
|
503
|
-
},
|
|
504
|
-
log: (entry) => this.logToFile(conversationId, entry),
|
|
505
|
-
processAttachments: () => this.processAttachments(conversationId, msg.attachments, msgId),
|
|
506
|
-
queueKey: sessionKey,
|
|
507
|
-
enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),
|
|
508
|
-
handler: this.handler,
|
|
509
|
-
bot: this,
|
|
510
|
-
createContext: (event) => createDiscordAdapters(event, this),
|
|
511
|
-
});
|
|
505
|
+
isMessagingBot: false,
|
|
506
|
+
},
|
|
507
|
+
log: (entry) => this.logToFile(conversationId, entry),
|
|
508
|
+
processAttachments: () => this.processAttachments(conversationId, msg.attachments),
|
|
509
|
+
queueKey: sessionKey,
|
|
510
|
+
enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),
|
|
511
|
+
handler: this.handler,
|
|
512
|
+
bot: this,
|
|
513
|
+
createContext: (event) => createDiscordAdapters(event, this),
|
|
512
514
|
});
|
|
513
515
|
}
|
|
514
516
|
async fetchTextChannel(channelId) {
|