@geminixiang/mikan 1.0.0-beta.3 → 1.0.0-beta.30
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 +563 -0
- package/README.md +60 -24
- 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 +47 -65
- 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 +46 -211
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +86 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +640 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +314 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +19 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +9 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +98 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +28 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +90 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +405 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +53 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +32 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +56 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +19 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +105 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +21 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +21 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +17 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +372 -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 +84 -22
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts +7 -0
- package/dist/adapters/progressive-renderer.d.ts.map +1 -0
- package/dist/adapters/progressive-renderer.js +383 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +111 -111
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +10 -6
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +173 -145
- 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 +126 -323
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +5 -8
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +11 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +45 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +106 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +37 -0
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +1 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +51 -63
- 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 +55 -182
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +86 -10
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent.d.ts +14 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +745 -243
- package/dist/agent.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +25 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +59 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +5 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +112 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-dev.d.ts +2 -0
- package/dist/cli/ext-dev.d.ts.map +1 -0
- package/dist/cli/ext-dev.js +177 -0
- package/dist/cli/ext-dev.js.map +1 -0
- package/dist/cli/ext-git.d.ts +17 -0
- package/dist/cli/ext-git.d.ts.map +1 -0
- package/dist/cli/ext-git.js +107 -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 +222 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/cli/types.d.ts +20 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +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 +18 -8
- 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 +35 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +30 -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 +2 -3
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +57 -20
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +10 -2
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/registry.d.ts +2 -2
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +1 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +23 -17
- 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 +70 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +1 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +102 -95
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +28 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +214 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +9 -73
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +7 -6
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +105 -110
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/auth.d.ts +2 -1
- package/dist/harness/auth.d.ts.map +1 -1
- package/dist/harness/auth.js +6 -0
- package/dist/harness/auth.js.map +1 -1
- package/dist/harness/event-format.d.ts +25 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +159 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/blockkit.d.ts +19 -0
- package/dist/harness/extensions/blockkit.d.ts.map +1 -0
- package/dist/harness/extensions/blockkit.js +42 -0
- package/dist/harness/extensions/blockkit.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +25 -48
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +373 -113
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +75 -2
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +239 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +318 -25
- package/dist/harness/extensions/types.d.ts.map +1 -1
- package/dist/harness/extensions/types.js.map +1 -1
- package/dist/harness/index.d.ts +18 -8
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +7 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +10 -0
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +50 -54
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +230 -44
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +9 -5
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +131 -30
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/settings.d.ts +2 -20
- package/dist/harness/settings.d.ts.map +1 -1
- package/dist/harness/settings.js +11 -0
- package/dist/harness/settings.js.map +1 -1
- package/dist/harness/skills.d.ts +2 -29
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +8 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +290 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent-runner.d.ts +39 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +615 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +263 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage.d.ts +6 -0
- package/dist/harness/usage.d.ts.map +1 -0
- package/dist/harness/usage.js +32 -0
- package/dist/harness/usage.js.map +1 -0
- package/dist/index.d.ts +33 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -6
- package/dist/index.js.map +1 -1
- package/dist/main.js +253 -109
- package/dist/main.js.map +1 -1
- package/dist/observability/instrument.js +6 -4
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +3 -2
- package/dist/observability/sentry.js.map +1 -1
- package/dist/packages/admin.d.ts +17 -0
- package/dist/packages/admin.d.ts.map +1 -0
- package/dist/packages/admin.js +96 -0
- package/dist/packages/admin.js.map +1 -0
- package/dist/packages/index.d.ts +6 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +6 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/inspect.d.ts +11 -0
- package/dist/packages/inspect.d.ts.map +1 -0
- package/dist/packages/inspect.js +100 -0
- package/dist/packages/inspect.js.map +1 -0
- package/dist/packages/materialize.d.ts +39 -0
- package/dist/packages/materialize.d.ts.map +1 -0
- package/dist/packages/materialize.js +300 -0
- package/dist/packages/materialize.js.map +1 -0
- package/dist/packages/resolve.d.ts +25 -0
- package/dist/packages/resolve.d.ts.map +1 -0
- package/dist/packages/resolve.js +212 -0
- package/dist/packages/resolve.js.map +1 -0
- package/dist/packages/source.d.ts +33 -0
- package/dist/packages/source.d.ts.map +1 -0
- package/dist/packages/source.js +177 -0
- package/dist/packages/source.js.map +1 -0
- package/dist/packages/types.d.ts +104 -0
- package/dist/packages/types.d.ts.map +1 -0
- package/dist/packages/types.js +2 -0
- package/dist/packages/types.js.map +1 -0
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +6 -6
- 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 +481 -98
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +28 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +161 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +45 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +3 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +11 -0
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +4 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +12 -2
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +3 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +11 -1
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin.d.ts +57 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +764 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +4 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +52 -0
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +16 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +42 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/image.d.ts.map +1 -1
- package/dist/sandbox/image.js +1 -0
- package/dist/sandbox/image.js.map +1 -1
- package/dist/sandbox/index.d.ts +15 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +25 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/path-context.js +18 -8
- package/dist/sandbox/path-context.js.map +1 -1
- package/dist/sandbox/types.d.ts +65 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +12 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +38 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +25 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +98 -124
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +9 -0
- package/dist/sessions/conversation-log.d.ts.map +1 -0
- package/dist/sessions/conversation-log.js +47 -0
- package/dist/sessions/conversation-log.js.map +1 -0
- 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/rotation.d.ts +2 -0
- package/dist/sessions/rotation.d.ts.map +1 -0
- package/dist/sessions/rotation.js +39 -0
- package/dist/sessions/rotation.js.map +1 -0
- package/dist/sessions/session-key.d.ts +40 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +92 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +40 -18
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +17 -4
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +8 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +43 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/subagent-progress.d.ts +43 -0
- package/dist/subagent-progress.d.ts.map +1 -0
- package/dist/subagent-progress.js +220 -0
- package/dist/subagent-progress.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +25 -17
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +10 -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 +53 -43
- 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/host-fn-tool.d.ts +21 -0
- package/dist/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/tools/host-fn-tool.js +32 -0
- package/dist/tools/host-fn-tool.js.map +1 -0
- package/dist/tools/index.d.ts +14 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +28 -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 +29 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +37 -31
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +14 -9
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent-slots.d.ts +28 -0
- package/dist/tools/subagent-slots.d.ts.map +1 -0
- package/dist/tools/subagent-slots.js +72 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +54 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +401 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +40 -6
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +2 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -2
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +232 -32
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/date.d.ts +1 -1
- package/dist/utils/date.js +1 -1
- package/dist/utils/date.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 +22 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts +0 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +30 -33
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/injection.d.ts +10 -0
- package/dist/vault/injection.d.ts.map +1 -0
- package/dist/vault/injection.js +30 -0
- package/dist/vault/injection.js.map +1 -0
- 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/types.d.ts +4 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/web/admin/portal.d.ts +17 -2
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +385 -155
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +18 -0
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/agent-events/portal.d.ts.map +1 -1
- package/dist/web/agent-events/portal.js +2 -1
- package/dist/web/agent-events/portal.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/dist/workspace-projection/index.d.ts +5 -0
- package/dist/workspace-projection/index.d.ts.map +1 -0
- package/dist/workspace-projection/index.js +71 -0
- package/dist/workspace-projection/index.js.map +1 -0
- package/dist/workspace-projection/types.d.ts +7 -0
- package/dist/workspace-projection/types.d.ts.map +1 -0
- package/dist/workspace-projection/types.js +2 -0
- package/dist/workspace-projection/types.js.map +1 -0
- package/package.json +28 -15
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/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/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{download.js → cli/download.js} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGjF,gFAAgF;AAChF,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AA8FxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,GAI1B,MAAM,mCAAmC,CAAC;AAc3C,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,oBAAoB,CAAC","sourcesContent":["export { defaultCommandHandlers, dispatchCommand } from \"./commands/registry.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\n\n// Public harness interface. Keep this list explicit: adding an internal harness\n// helper must not silently expand the npm package interface.\nexport { FileCredentialStore, defaultAuthPath } from \"./harness/auth.js\";\nexport {\n DEFAULT_HTTP_IDLE_TIMEOUT_MS,\n configureHttpDispatcher,\n parseHttpIdleTimeoutMs,\n} from \"./harness/http.js\";\nexport { MikanModels, defaultModelsJsonPath } from \"./harness/models.js\";\nexport {\n SessionStore,\n loadSessionFileEntries,\n parseSessionFileEntries,\n} from \"./harness/session-store.js\";\nexport { MikanAgentSession } from \"./harness/runner.js\";\nexport { formatSkillsForPrompt, loadSkillsFromDir, parseFrontmatter } from \"./harness/skills.js\";\nexport { loadSubagentProfiles } from \"./harness/subagent-profiles.js\";\nexport {\n DEFAULT_BUDGET_SETTINGS,\n DEFAULT_EVENT_BUDGET,\n DEFAULT_RETRY_SETTINGS,\n resolveHarnessSettings,\n} from \"./harness/settings.js\";\nexport { buildEventPayload, EventTypeSchema, parseEventPayload } from \"./harness/event-format.js\";\nexport { ExtensionRegistry, parseCommandInput } from \"./harness/extensions/registry.js\";\nexport {\n EXT_ACTION_PREFIX,\n namespaceActionIds,\n parseExtActionId,\n} from \"./harness/extensions/blockkit.js\";\nexport {\n defaultExtensionDirs,\n extensionSlug,\n listInstalledExtensions,\n loadExtensions,\n validateExtension,\n} from \"./harness/extensions/loader.js\";\nexport type { CreateMikanModelsOptions } from \"./harness/models.js\";\nexport type {\n CompactionReason,\n HarnessEvent,\n HarnessEventListener,\n MikanAgentSessionOptions,\n PromptBlockedOutcome,\n} from \"./harness/runner.js\";\nexport type { LoadSkillsResult, MikanSkill, SkillDiagnostic } from \"./harness/skills.js\";\nexport type {\n LoadSubagentProfilesResult,\n SubagentProfileDiagnostic,\n} from \"./harness/subagent-profiles.js\";\nexport type {\n BudgetSettings,\n CompactionSettings,\n HarnessSettings,\n RetrySettings,\n} from \"./harness/settings.js\";\nexport type {\n EventConversationKind,\n EventFilePayload,\n EventPayloadInput,\n EventType,\n ImmediateEventPayload,\n OneShotEventPayload,\n PeriodicEventPayload,\n} from \"./harness/event-format.js\";\nexport type {\n ExtensionValidation,\n InstalledExtensionInfo,\n LoadExtensionsOptions,\n LoadExtensionsResult,\n} from \"./harness/extensions/loader.js\";\nexport type {\n AgentErrorHookEvent,\n BeforeAgentStartHookEvent,\n BeforeAgentStartHookResult,\n BudgetExceededHookEvent,\n ContextHookEvent,\n ContextHookResult,\n ExtensionBlockAction,\n ExtensionBlockActionHandler,\n ExtensionBlockKitMessage,\n ExtensionCommand,\n ExtensionCommandContext,\n ExtensionDisposer,\n ExtensionHostServices,\n ExtensionLoadError,\n ExtensionManifest,\n ExtensionScheduleInfo,\n ExtensionSchedulePayload,\n ExtensionScheduleSpec,\n ExtensionScheduleStore,\n LoadedExtension,\n MessageEndHookEvent,\n MessageEndHookResult,\n MikanExtensionActivate,\n MikanExtensionApi,\n MikanExtensionModule,\n MikanHookMap,\n MikanHookName,\n RunOrigin,\n SessionCompactHookEvent,\n SubagentApi,\n ToolCallHookEvent,\n ToolCallHookResult,\n ToolResultHookEvent,\n ToolResultHookResult,\n TurnEndHookEvent,\n} from \"./harness/extensions/types.js\";\nexport type {\n BranchSummaryEntry,\n CompactionEntry,\n CustomEntry,\n CustomMessageEntry,\n SessionContext,\n SessionEntry,\n SessionFileEntry,\n SessionHeader,\n SessionInfoEntry,\n SessionMessageEntry,\n SubagentModelSpec,\n SubagentParentContext,\n SubagentProfile,\n SubagentRunBudget,\n SubagentRunOutput,\n SubagentRunRequest,\n SubagentRunResult,\n SubagentRunStatus,\n SubagentUsage,\n SubagentUsageSink,\n} from \"./harness/types.js\";\nexport { CURRENT_SESSION_VERSION } from \"./harness/types.js\";\n\nexport {\n ChatHistorySync,\n hasMaterializedChatSession,\n registerThreadSession,\n waitForThreadSessionBootstrap,\n} from \"./sessions/chat-history-sync.js\";\nexport type {\n ChatHistorySyncOptions,\n ChatSyncReport,\n HasMaterializedSessionOptions,\n RegisterThreadSessionOptions,\n ResetChatSessionOptions,\n ResolveChatSessionScopeOptions,\n SyncChatSessionOptions,\n ThreadBootstrapWaitOptions,\n} from \"./sessions/chat-history-sync.js\";\nexport { isPlatformHistorySession } from \"./sessions/metadata.js\";\nexport type { MikanSessionHeader } from \"./sessions/metadata.js\";\nexport { inferConversationKind, resolveChatSessionKey } from \"./sessions/policy.js\";\nexport type { ResolveSessionKeyOptions } from \"./sessions/policy.js\";\nexport {\n createManagedSessionFile,\n createManagedSessionFileAtPath,\n createNewSessionFile,\n extractSessionSuffix,\n extractSessionUuid,\n getChannelSessionDir,\n getThreadSessionFile,\n openManagedSession,\n resolveChannelSessionFile,\n resolveManagedSessionFile,\n resolveSessionFile,\n tryResolveCurrentSession,\n tryResolveThreadSession,\n} from \"./sessions/store.js\";\nexport type { ResolvedSessionScope, ThreadRootMessage } from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n type RunSessionOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport type {\n ChatAdapter,\n ChatToolResult,\n ConversationContext,\n ConversationEvent,\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingBot,\n MessagingEventHandler,\n MessagingInfo,\n RunningSession,\n} from \"./adapter.js\";\nexport {\n SandboxError,\n configureGondolinRuntime,\n createExecutor,\n getSandboxAdapters,\n parseSandboxArg,\n validateSandbox,\n type GondolinBootstrapOptions,\n} from \"./sandbox/index.js\";\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n SandboxAdapter,\n SandboxConfig,\n} from \"./sandbox/index.js\";\n"]}
|
package/dist/main.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./observability/instrument.js";
|
|
3
|
-
import { join
|
|
3
|
+
import { join } from "path";
|
|
4
4
|
import { mkdirSync, statSync, writeFileSync } from "fs";
|
|
5
|
-
import { homedir } from "os";
|
|
6
5
|
import { fileURLToPath } from "url";
|
|
7
6
|
import { dirname, join as pathJoin } from "path";
|
|
8
7
|
import { DiscordMessagingBot } from "./adapters/discord/bot.js";
|
|
8
|
+
import { GithubMessagingBot } from "./adapters/github/bot.js";
|
|
9
|
+
import { createGithubToolPack } from "./adapters/github/tool-pack.js";
|
|
10
|
+
import { GcpTokenProvider } from "./adapters/github/gcp-auth.js";
|
|
9
11
|
import { TelegramMessagingBot } from "./adapters/telegram/bot.js";
|
|
10
12
|
import { SlackMessagingBot as SlackMessagingBotClass } from "./adapters/slack/bot.js";
|
|
11
|
-
import {
|
|
13
|
+
import { createSlackToolPack } from "./adapters/slack/tool-pack.js";
|
|
14
|
+
import { downloadChannel } from "./cli/download.js";
|
|
12
15
|
import { EventsWatcher } from "./events.js";
|
|
13
16
|
import * as log from "./log.js";
|
|
14
17
|
import { startWebServer } from "./web/server.js";
|
|
@@ -16,13 +19,17 @@ import { InMemoryAdminTokenStore } from "./web/admin/store.js";
|
|
|
16
19
|
import { InMemoryLinkTokenStore } from "./web/login/store.js";
|
|
17
20
|
import { InMemorySessionViewTokenStore } from "./web/session-view/store.js";
|
|
18
21
|
import { DockerContainerManager } from "./provisioner.js";
|
|
19
|
-
import { assertStateDirOutsideWorkspace, createGlobalSettingsFile, loadGlobalSettings, MissingGlobalSettingsError, } from "./config.js";
|
|
22
|
+
import { assertStateDirOutsideWorkspace, createGlobalSettingsFile, loadGlobalSettings, MissingGlobalSettingsError, resolveLinkBaseUrl, } from "./config.js";
|
|
20
23
|
import { configureHttpDispatcher, defaultAuthPath, defaultModelsJsonPath, parseHttpIdleTimeoutMs, } from "./harness/index.js";
|
|
21
24
|
import { existsSync, readFileSync } from "fs";
|
|
22
25
|
import { readEnv, setEnvAliases } from "./utils/env.js";
|
|
23
26
|
import { ensureDirExists, isRecord, readJsonFileIfExists } from "./utils/file-guards.js";
|
|
24
|
-
import { SandboxError,
|
|
27
|
+
import { SandboxError, validateSandbox } from "./sandbox/index.js";
|
|
28
|
+
import { helpText, resolveBoot } from "./cli/boot.js";
|
|
29
|
+
import { envReport, noPlatformsMessage, platformIsActive } from "./env-manifest.js";
|
|
30
|
+
import { configureGondolinRuntime, gondolinResources, reconcileGondolinRuntimes, stopAllGondolinRuntimes, stopIdleGondolinVms, } from "./sandbox/gondolin.js";
|
|
25
31
|
import { FileVaultManager } from "./vault/index.js";
|
|
32
|
+
import { runExtCommand } from "./cli/ext.js";
|
|
26
33
|
import { createConversationRuntime } from "./runtime/conversation-runtime.js";
|
|
27
34
|
import { ChannelStore } from "./store.js";
|
|
28
35
|
import * as Sentry from "@sentry/node";
|
|
@@ -44,56 +51,19 @@ const SLACK_APP_TOKEN = readEnv("SLACK_APP_TOKEN");
|
|
|
44
51
|
const SLACK_BOT_TOKEN = readEnv("SLACK_BOT_TOKEN");
|
|
45
52
|
const TELEGRAM_BOT_TOKEN = readEnv("TELEGRAM_BOT_TOKEN");
|
|
46
53
|
const DISCORD_BOT_TOKEN = readEnv("DISCORD_BOT_TOKEN");
|
|
47
|
-
const
|
|
54
|
+
const GITHUB_APP_ID = readEnv("GITHUB_APP_ID");
|
|
55
|
+
const GITHUB_APP_PRIVATE_KEY = readEnv("GITHUB_APP_PRIVATE_KEY");
|
|
56
|
+
const GITHUB_APP_PRIVATE_KEY_PATH = readEnv("GITHUB_APP_PRIVATE_KEY_PATH");
|
|
57
|
+
const GITHUB_INSTALLATION_ID = readEnv("GITHUB_INSTALLATION_ID");
|
|
58
|
+
const GITHUB_REPOS = readEnv("GITHUB_REPOS");
|
|
59
|
+
const GITHUB_POLL_INTERVAL = readEnv("GITHUB_POLL_INTERVAL");
|
|
60
|
+
const GOOGLE_APPLICATION_CREDENTIALS = readEnv("GOOGLE_APPLICATION_CREDENTIALS");
|
|
61
|
+
const GOOGLE_CLOUD_PROJECT = readEnv("GOOGLE_CLOUD_PROJECT");
|
|
62
|
+
// Externally-visible base URL of the link/OAuth server; the env read and
|
|
63
|
+
// trailing-slash normalization live in config.resolveLinkBaseUrl.
|
|
64
|
+
const LINK_BASE_URL = resolveLinkBaseUrl();
|
|
48
65
|
const LINK_PORT_RAW = readEnv("LINK_PORT");
|
|
49
|
-
const LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) :
|
|
50
|
-
function parseArgs() {
|
|
51
|
-
const args = process.argv.slice(2);
|
|
52
|
-
let sandbox = { type: "host" };
|
|
53
|
-
let workingDir;
|
|
54
|
-
let stateDirArg;
|
|
55
|
-
let downloadChannelId;
|
|
56
|
-
let showOnboard = false;
|
|
57
|
-
let showVersion = false;
|
|
58
|
-
for (let i = 0; i < args.length; i++) {
|
|
59
|
-
const arg = args[i];
|
|
60
|
-
if (arg === "--version" || arg === "-v" || arg === "-V") {
|
|
61
|
-
showVersion = true;
|
|
62
|
-
}
|
|
63
|
-
else if (arg === "--onboard") {
|
|
64
|
-
showOnboard = true;
|
|
65
|
-
}
|
|
66
|
-
else if (arg.startsWith("--sandbox=")) {
|
|
67
|
-
sandbox = parseSandboxArg(arg.slice("--sandbox=".length));
|
|
68
|
-
}
|
|
69
|
-
else if (arg === "--sandbox") {
|
|
70
|
-
sandbox = parseSandboxArg(args[++i] || "");
|
|
71
|
-
}
|
|
72
|
-
else if (arg.startsWith("--state-dir=")) {
|
|
73
|
-
stateDirArg = arg.slice("--state-dir=".length);
|
|
74
|
-
}
|
|
75
|
-
else if (arg === "--state-dir") {
|
|
76
|
-
stateDirArg = args[++i];
|
|
77
|
-
}
|
|
78
|
-
else if (arg.startsWith("--download=")) {
|
|
79
|
-
downloadChannelId = arg.slice("--download=".length);
|
|
80
|
-
}
|
|
81
|
-
else if (arg === "--download") {
|
|
82
|
-
downloadChannelId = args[++i];
|
|
83
|
-
}
|
|
84
|
-
else if (!arg.startsWith("-")) {
|
|
85
|
-
workingDir = arg;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
workingDir: workingDir ? resolve(workingDir) : undefined,
|
|
90
|
-
stateDir: stateDirArg ? resolve(stateDirArg) : undefined,
|
|
91
|
-
sandbox,
|
|
92
|
-
downloadChannel: downloadChannelId,
|
|
93
|
-
showOnboard,
|
|
94
|
-
showVersion,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
66
|
+
const LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;
|
|
97
67
|
const WORLD_WRITABLE_MODE = 0o002;
|
|
98
68
|
function ensureSecureStateDir(path) {
|
|
99
69
|
let stat;
|
|
@@ -149,31 +119,44 @@ function handleStartupError(error) {
|
|
|
149
119
|
console.error(String(error));
|
|
150
120
|
process.exit(1);
|
|
151
121
|
}
|
|
152
|
-
let
|
|
122
|
+
let plan;
|
|
153
123
|
try {
|
|
154
|
-
|
|
124
|
+
plan = resolveBoot();
|
|
155
125
|
}
|
|
156
126
|
catch (error) {
|
|
157
127
|
handleStartupError(error);
|
|
158
128
|
}
|
|
129
|
+
// `mikan ext …` manages extensions and exits; handle it before the normal
|
|
130
|
+
// bot-mode startup (which requires platform tokens).
|
|
131
|
+
if (plan.mode === "ext") {
|
|
132
|
+
const code = await runExtCommand(plan.extArgs ?? []);
|
|
133
|
+
process.exit(code);
|
|
134
|
+
}
|
|
159
135
|
// Global fetch: proxy support (HTTP_PROXY/HTTPS_PROXY/NO_PROXY) and idle
|
|
160
136
|
// timeouts so a stalled LLM stream errors out instead of hanging a session.
|
|
161
137
|
const httpIdleTimeoutMs = parseHttpIdleTimeoutMs(readEnv("HTTP_IDLE_TIMEOUT"));
|
|
162
138
|
configureHttpDispatcher(httpIdleTimeoutMs);
|
|
163
|
-
|
|
164
|
-
|
|
139
|
+
if (plan.mode === "help") {
|
|
140
|
+
console.log(helpText());
|
|
141
|
+
process.exit(0);
|
|
142
|
+
}
|
|
143
|
+
if (plan.mode === "env") {
|
|
144
|
+
console.log(envReport());
|
|
145
|
+
process.exit(0);
|
|
146
|
+
}
|
|
147
|
+
if (plan.mode === "version") {
|
|
165
148
|
console.log(getVersion());
|
|
166
149
|
process.exit(0);
|
|
167
150
|
}
|
|
168
151
|
// Handle --onboard mode
|
|
169
|
-
if (
|
|
170
|
-
const stateDir =
|
|
152
|
+
if (plan.mode === "onboard") {
|
|
153
|
+
const stateDir = plan.stateDir;
|
|
171
154
|
setEnvAliases("STATE_DIR", stateDir);
|
|
172
155
|
ensureSecureStateDir(stateDir);
|
|
173
156
|
try {
|
|
174
157
|
const settingsPath = createGlobalSettingsFile(stateDir);
|
|
175
158
|
console.log(`Created global settings at ${settingsPath}`);
|
|
176
|
-
console.log(
|
|
159
|
+
console.log(`Review the file, then start mikan (workspace defaults to ${join(stateDir, "workspace")}).`);
|
|
177
160
|
process.exit(0);
|
|
178
161
|
}
|
|
179
162
|
catch (err) {
|
|
@@ -182,40 +165,36 @@ if (parsedArgs.showOnboard) {
|
|
|
182
165
|
}
|
|
183
166
|
}
|
|
184
167
|
// Handle --download mode (Slack only)
|
|
185
|
-
if (
|
|
168
|
+
if (plan.mode === "download" && plan.downloadChannel) {
|
|
186
169
|
if (!SLACK_BOT_TOKEN) {
|
|
187
170
|
console.error("Missing env: SLACK_BOT_TOKEN");
|
|
188
171
|
process.exit(1);
|
|
189
172
|
}
|
|
190
|
-
await downloadChannel(
|
|
173
|
+
await downloadChannel(plan.downloadChannel, SLACK_BOT_TOKEN);
|
|
191
174
|
process.exit(0);
|
|
192
175
|
}
|
|
193
|
-
// Normal bot mode -
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
console.error(" mikan --download <channel-id>");
|
|
198
|
-
process.exit(1);
|
|
199
|
-
}
|
|
200
|
-
const { workingDir, sandbox } = { workingDir: parsedArgs.workingDir, sandbox: parsedArgs.sandbox };
|
|
201
|
-
const stateDir = parsedArgs.stateDir ?? join(homedir(), ".mikan");
|
|
176
|
+
// Normal bot mode - working dir is optional and defaults under the state dir
|
|
177
|
+
const sandbox = plan.sandbox;
|
|
178
|
+
const stateDir = plan.stateDir;
|
|
179
|
+
const workingDir = plan.workingDir;
|
|
202
180
|
setEnvAliases("STATE_DIR", stateDir);
|
|
203
181
|
ensureSecureStateDir(stateDir);
|
|
182
|
+
if (!plan.workingDirExplicit) {
|
|
183
|
+
ensureDirExists(workingDir);
|
|
184
|
+
}
|
|
204
185
|
try {
|
|
205
186
|
assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);
|
|
206
187
|
}
|
|
207
188
|
catch (error) {
|
|
208
189
|
handleStartupError(error);
|
|
209
190
|
}
|
|
210
|
-
// Validate platform tokens
|
|
211
|
-
const hasSlack =
|
|
212
|
-
const hasTelegram =
|
|
213
|
-
const hasDiscord =
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
" Telegram: TELEGRAM_BOT_TOKEN\n" +
|
|
218
|
-
" Discord: DISCORD_BOT_TOKEN");
|
|
191
|
+
// Validate platform tokens — activation rules live in the env manifest.
|
|
192
|
+
const hasSlack = platformIsActive("slack");
|
|
193
|
+
const hasTelegram = platformIsActive("telegram");
|
|
194
|
+
const hasDiscord = platformIsActive("discord");
|
|
195
|
+
const hasGithub = platformIsActive("github");
|
|
196
|
+
if (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {
|
|
197
|
+
console.error(noPlatformsMessage());
|
|
219
198
|
process.exit(1);
|
|
220
199
|
}
|
|
221
200
|
try {
|
|
@@ -228,7 +207,10 @@ const vaultManager = new FileVaultManager(stateDir);
|
|
|
228
207
|
if (vaultManager.isEnabled()) {
|
|
229
208
|
console.log(sandbox.type === "container"
|
|
230
209
|
? " Vault system enabled. Container vault active."
|
|
231
|
-
: sandbox.type === "image" ||
|
|
210
|
+
: sandbox.type === "image" ||
|
|
211
|
+
sandbox.type === "gondolin" ||
|
|
212
|
+
sandbox.type === "firecracker" ||
|
|
213
|
+
sandbox.type === "cloudflare"
|
|
232
214
|
? " Vault system enabled. Conversation-scoped credential routing active."
|
|
233
215
|
: " Vault system enabled. Host mode will not inject vault env.");
|
|
234
216
|
}
|
|
@@ -240,11 +222,12 @@ const startupConfig = (() => {
|
|
|
240
222
|
handleStartupError(error);
|
|
241
223
|
}
|
|
242
224
|
})();
|
|
243
|
-
const
|
|
244
|
-
|
|
225
|
+
const sandboxSettings = startupConfig.sandbox;
|
|
226
|
+
const sandboxLimits = sandboxSettings?.cpus || sandboxSettings?.memory
|
|
227
|
+
? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }
|
|
245
228
|
: undefined;
|
|
246
|
-
const sandboxBoostLimits =
|
|
247
|
-
? { cpus:
|
|
229
|
+
const sandboxBoostLimits = sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory
|
|
230
|
+
? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }
|
|
248
231
|
: undefined;
|
|
249
232
|
const provisioner = sandbox.type === "image"
|
|
250
233
|
? new DockerContainerManager(sandbox.image, {
|
|
@@ -252,9 +235,26 @@ const provisioner = sandbox.type === "image"
|
|
|
252
235
|
boostLimits: sandboxBoostLimits,
|
|
253
236
|
})
|
|
254
237
|
: undefined;
|
|
255
|
-
if (sandbox.type === "
|
|
238
|
+
if (sandbox.type === "gondolin") {
|
|
239
|
+
try {
|
|
240
|
+
configureGondolinRuntime({
|
|
241
|
+
limits: sandboxLimits,
|
|
242
|
+
boostLimits: sandboxBoostLimits,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
handleStartupError(error);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const resourceController = sandbox.type === "image"
|
|
250
|
+
? provisioner
|
|
251
|
+
: sandbox.type === "gondolin"
|
|
252
|
+
? gondolinResources
|
|
253
|
+
: undefined;
|
|
254
|
+
if (sandbox.type === "image" || sandbox.type === "gondolin") {
|
|
256
255
|
ensureDirExists(join(workingDir, "skills"));
|
|
257
256
|
ensureDirExists(join(workingDir, "events"));
|
|
257
|
+
ensureDirExists(join(workingDir, "agents"));
|
|
258
258
|
try {
|
|
259
259
|
writeFileSync(join(workingDir, "MEMORY.md"), "", { flag: "wx" });
|
|
260
260
|
}
|
|
@@ -270,50 +270,154 @@ setInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
|
270
270
|
setInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
271
271
|
setInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
272
272
|
function portalBaseUrl() {
|
|
273
|
-
if (
|
|
274
|
-
return
|
|
273
|
+
if (LINK_BASE_URL)
|
|
274
|
+
return LINK_BASE_URL;
|
|
275
275
|
if (LINK_PORT)
|
|
276
276
|
return `http://localhost:${LINK_PORT}`;
|
|
277
277
|
return undefined;
|
|
278
278
|
}
|
|
279
|
-
/** Idle timeout for managed
|
|
280
|
-
const
|
|
279
|
+
/** Idle timeout for managed sandboxes (10 minutes) */
|
|
280
|
+
const MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
281
281
|
if (provisioner) {
|
|
282
282
|
await provisioner.reconcile();
|
|
283
|
-
await provisioner.stopIdle(
|
|
284
|
-
setInterval(() => provisioner.stopIdle(
|
|
283
|
+
await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);
|
|
284
|
+
setInterval(() => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS), MANAGED_SANDBOX_IDLE_TIMEOUT_MS).unref();
|
|
285
|
+
}
|
|
286
|
+
if (sandbox.type === "gondolin") {
|
|
287
|
+
await reconcileGondolinRuntimes();
|
|
288
|
+
setInterval(() => void stopIdleGondolinVms(MANAGED_SANDBOX_IDLE_TIMEOUT_MS), MANAGED_SANDBOX_IDLE_TIMEOUT_MS).unref();
|
|
285
289
|
}
|
|
286
|
-
// Declared before the runtime so the notifier closure can capture them;
|
|
287
|
-
// bots register below once their platforms initialize.
|
|
288
|
-
const bots = [];
|
|
289
290
|
const botsByPlatform = {};
|
|
290
291
|
/**
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
* sole running platform.
|
|
292
|
+
* Resolve which platform bot to use: an explicit platform, or the sole
|
|
293
|
+
* running one. Mirrors event-file platform resolution.
|
|
294
294
|
*/
|
|
295
|
-
|
|
295
|
+
function resolvePlatformBot(op, platform) {
|
|
296
296
|
const available = Object.keys(botsByPlatform);
|
|
297
297
|
const key = platform?.trim().toLowerCase() || (available.length === 1 ? available[0] : undefined);
|
|
298
298
|
const bot = key ? botsByPlatform[key] : undefined;
|
|
299
299
|
if (!bot) {
|
|
300
300
|
throw new Error(platform
|
|
301
|
-
?
|
|
302
|
-
:
|
|
301
|
+
? `${op}: unknown platform '${platform}' (available: ${available.join(", ") || "none"})`
|
|
302
|
+
: `${op}: multiple platforms active (${available.join(", ")}); specify platform`);
|
|
303
303
|
}
|
|
304
|
+
return [key, bot];
|
|
305
|
+
}
|
|
306
|
+
/** Extension `api.notify` backend: post into a conversation without a run. */
|
|
307
|
+
const platformNotifier = async (conversationId, text, platform) => {
|
|
308
|
+
const [key, bot] = resolvePlatformBot("notify", platform);
|
|
304
309
|
await bot.postMessage(conversationId, text);
|
|
305
310
|
log.logInfo(`[notify] posted to ${key}/${conversationId} (${text.length} chars)`);
|
|
306
311
|
};
|
|
312
|
+
/** Extension `api.react` backend: add a reaction to a message. */
|
|
313
|
+
const platformReactor = async (conversationId, messageTs, emoji, platform) => {
|
|
314
|
+
const [key, bot] = resolvePlatformBot("react", platform);
|
|
315
|
+
if (!bot.addReaction) {
|
|
316
|
+
throw new Error(`react: platform '${key}' does not support reactions`);
|
|
317
|
+
}
|
|
318
|
+
await bot.addReaction(conversationId, messageTs, emoji);
|
|
319
|
+
log.logInfo(`[react] :${emoji}: on ${key}/${conversationId}`);
|
|
320
|
+
};
|
|
321
|
+
/** Extension `api.uploadFile` backend: send a host file into a conversation. */
|
|
322
|
+
const platformUploader = async (conversationId, filePath, title, platform) => {
|
|
323
|
+
const [key, bot] = resolvePlatformBot("upload", platform);
|
|
324
|
+
if (!bot.uploadFile) {
|
|
325
|
+
throw new Error(`upload: platform '${key}' does not support file uploads`);
|
|
326
|
+
}
|
|
327
|
+
await bot.uploadFile(conversationId, filePath, title);
|
|
328
|
+
log.logInfo(`[upload] ${filePath} to ${key}/${conversationId}`);
|
|
329
|
+
};
|
|
330
|
+
/** github_* tool backends: PR push/create and CI checks, host-side. */
|
|
331
|
+
function requireGithubBot(op) {
|
|
332
|
+
const bot = botsByPlatform.github;
|
|
333
|
+
if (!bot) {
|
|
334
|
+
throw new Error(`${op}: the GitHub platform is not running`);
|
|
335
|
+
}
|
|
336
|
+
return bot;
|
|
337
|
+
}
|
|
338
|
+
/** slack_* tool backends: Block Kit posting/updating, host-side. */
|
|
339
|
+
function requireSlackBot(op) {
|
|
340
|
+
const bot = botsByPlatform.slack;
|
|
341
|
+
if (!bot) {
|
|
342
|
+
throw new Error(`${op}: the Slack platform is not running`);
|
|
343
|
+
}
|
|
344
|
+
return bot;
|
|
345
|
+
}
|
|
346
|
+
/** Extension `api.blockkit` backend: interactive Block Kit, Slack-only today. */
|
|
347
|
+
const platformBlockKit = {
|
|
348
|
+
postBlocks: async (conversationId, message, platform) => {
|
|
349
|
+
if (platform && platform !== "slack") {
|
|
350
|
+
throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);
|
|
351
|
+
}
|
|
352
|
+
const bot = requireSlackBot("blockkit");
|
|
353
|
+
const ts = message.threadTs
|
|
354
|
+
? await bot.postInThreadBlocks(conversationId, message.threadTs, message.text, message.blocks)
|
|
355
|
+
: await bot.postMessageBlocks(conversationId, message.text, message.blocks);
|
|
356
|
+
return { ts };
|
|
357
|
+
},
|
|
358
|
+
updateBlocks: async (conversationId, messageTs, message, platform) => {
|
|
359
|
+
if (platform && platform !== "slack") {
|
|
360
|
+
throw new Error(`blockkit: platform '${platform}' does not support Block Kit`);
|
|
361
|
+
}
|
|
362
|
+
await requireSlackBot("blockkit").updateMessageBlocks(conversationId, messageTs, message.text, message.blocks);
|
|
363
|
+
},
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Platform capability pack factories — only when the corresponding bot is
|
|
367
|
+
* configured. Factories, not instances: each runner materializes its own
|
|
368
|
+
* pack so per-run bind state never crosses conversations.
|
|
369
|
+
*/
|
|
370
|
+
function buildPlatformToolPackFactories() {
|
|
371
|
+
const factories = [];
|
|
372
|
+
if (hasSlack) {
|
|
373
|
+
const platformSlackOps = {
|
|
374
|
+
postBlocks: async (conversationId, { text, blocks, threadTs }) => {
|
|
375
|
+
const bot = requireSlackBot("slack_blockkit");
|
|
376
|
+
const ts = threadTs
|
|
377
|
+
? await bot.postInThreadBlocks(conversationId, threadTs, text, blocks)
|
|
378
|
+
: await bot.postMessageBlocks(conversationId, text, blocks);
|
|
379
|
+
bot.logBotResponse(conversationId, text, ts, threadTs, blocks);
|
|
380
|
+
return { ts };
|
|
381
|
+
},
|
|
382
|
+
updateBlocks: async (conversationId, { ts, text, blocks, threadTs }) => {
|
|
383
|
+
const bot = requireSlackBot("slack_blockkit");
|
|
384
|
+
await bot.updateMessageBlocks(conversationId, ts, text, blocks);
|
|
385
|
+
bot.logBotResponse(conversationId, text, ts, threadTs, blocks);
|
|
386
|
+
},
|
|
387
|
+
ownsBlockKitMessage: (conversationId, ts, threadTs) => requireSlackBot("slack_blockkit").ownsBlockKitMessage(conversationId, ts, threadTs),
|
|
388
|
+
};
|
|
389
|
+
factories.push(() => createSlackToolPack(platformSlackOps));
|
|
390
|
+
}
|
|
391
|
+
if (!hasGithub)
|
|
392
|
+
return factories;
|
|
393
|
+
const platformGithubOps = {
|
|
394
|
+
pushAndCreatePr: (conversationId, request) => requireGithubBot("github_pr").ops.pushAndCreatePr(conversationId, request),
|
|
395
|
+
getChecks: (conversationId, branch) => requireGithubBot("github_checks").ops.getChecks(conversationId, branch),
|
|
396
|
+
getJobLog: (conversationId, jobId) => requireGithubBot("github_checks").ops.getJobLog(conversationId, jobId),
|
|
397
|
+
getBuildLog: (conversationId, buildId) => requireGithubBot("github_checks").ops.getBuildLog(conversationId, buildId),
|
|
398
|
+
replyToReviewThread: (conversationId, commentId, body) => requireGithubBot("github_review_reply").ops.replyToReviewThread(conversationId, commentId, body),
|
|
399
|
+
syncRepo: (conversationId, branch) => requireGithubBot("github_sync").ops.syncRepo(conversationId, branch),
|
|
400
|
+
readGithub: (conversationId, request) => requireGithubBot("github_read").ops.readGithub(conversationId, request),
|
|
401
|
+
manageIssue: (conversationId, request) => requireGithubBot("github_issue").ops.manageIssue(conversationId, request),
|
|
402
|
+
};
|
|
403
|
+
factories.push(() => createGithubToolPack(platformGithubOps));
|
|
404
|
+
return factories;
|
|
405
|
+
}
|
|
307
406
|
const handler = createConversationRuntime({
|
|
308
407
|
workingDir,
|
|
309
408
|
sandbox,
|
|
310
409
|
vaultManager,
|
|
311
410
|
provisioner,
|
|
411
|
+
resourceController,
|
|
312
412
|
linkTokenStore,
|
|
313
413
|
sessionViewTokenStore,
|
|
314
414
|
adminTokenStore,
|
|
315
415
|
portalBaseUrl: portalBaseUrl(),
|
|
316
416
|
platformNotifier,
|
|
417
|
+
platformReactor,
|
|
418
|
+
platformUploader,
|
|
419
|
+
platformBlockKit,
|
|
420
|
+
platformToolPackFactories: buildPlatformToolPackFactories(),
|
|
317
421
|
});
|
|
318
422
|
const sandboxDesc = sandbox.type === "host"
|
|
319
423
|
? "host"
|
|
@@ -321,9 +425,11 @@ const sandboxDesc = sandbox.type === "host"
|
|
|
321
425
|
? `container:${sandbox.container}`
|
|
322
426
|
: sandbox.type === "image"
|
|
323
427
|
? `image:${sandbox.image}`
|
|
324
|
-
: sandbox.type === "
|
|
325
|
-
? `
|
|
326
|
-
:
|
|
428
|
+
: sandbox.type === "gondolin"
|
|
429
|
+
? `gondolin:${sandbox.profile}`
|
|
430
|
+
: sandbox.type === "firecracker"
|
|
431
|
+
? `firecracker:${sandbox.vmId}`
|
|
432
|
+
: `cloudflare:${sandbox.sandboxId}`;
|
|
327
433
|
log.logStartup(workingDir, sandboxDesc);
|
|
328
434
|
logHarnessStartupSummary();
|
|
329
435
|
/**
|
|
@@ -368,7 +474,6 @@ if (hasSlack) {
|
|
|
368
474
|
workingDir,
|
|
369
475
|
store: sharedStore,
|
|
370
476
|
});
|
|
371
|
-
bots.push(slackMessagingBot);
|
|
372
477
|
botsByPlatform.slack = slackMessagingBot;
|
|
373
478
|
log.logInfo("Platform: Slack");
|
|
374
479
|
}
|
|
@@ -381,7 +486,6 @@ if (hasTelegram) {
|
|
|
381
486
|
token: telegramToken,
|
|
382
487
|
workingDir,
|
|
383
488
|
});
|
|
384
|
-
bots.push(telegramMessagingBot);
|
|
385
489
|
botsByPlatform.telegram = telegramMessagingBot;
|
|
386
490
|
log.logInfo("Platform: Telegram");
|
|
387
491
|
}
|
|
@@ -394,10 +498,49 @@ if (hasDiscord) {
|
|
|
394
498
|
token: discordToken,
|
|
395
499
|
workingDir,
|
|
396
500
|
});
|
|
397
|
-
bots.push(discordMessagingBot);
|
|
398
501
|
botsByPlatform.discord = discordMessagingBot;
|
|
399
502
|
log.logInfo("Platform: Discord");
|
|
400
503
|
}
|
|
504
|
+
if (hasGithub) {
|
|
505
|
+
if (!GITHUB_APP_ID || !GITHUB_INSTALLATION_ID) {
|
|
506
|
+
throw new Error("GitHub startup requires GITHUB_APP_ID and GITHUB_INSTALLATION_ID");
|
|
507
|
+
}
|
|
508
|
+
// Env vars flatten PEM newlines to literal `\n`; a key file avoids that.
|
|
509
|
+
const githubPrivateKey = GITHUB_APP_PRIVATE_KEY_PATH
|
|
510
|
+
? readFileSync(GITHUB_APP_PRIVATE_KEY_PATH, "utf-8")
|
|
511
|
+
: GITHUB_APP_PRIVATE_KEY?.replace(/\\n/g, "\n");
|
|
512
|
+
if (!githubPrivateKey) {
|
|
513
|
+
throw new Error("GitHub startup requires GITHUB_APP_PRIVATE_KEY or GITHUB_APP_PRIVATE_KEY_PATH");
|
|
514
|
+
}
|
|
515
|
+
const pollIntervalSeconds = GITHUB_POLL_INTERVAL ? parseInt(GITHUB_POLL_INTERVAL, 10) : NaN;
|
|
516
|
+
const githubMessagingBot = new GithubMessagingBot(handler, {
|
|
517
|
+
appId: GITHUB_APP_ID,
|
|
518
|
+
privateKey: githubPrivateKey,
|
|
519
|
+
installationId: GITHUB_INSTALLATION_ID,
|
|
520
|
+
repos: GITHUB_REPOS
|
|
521
|
+
? GITHUB_REPOS.split(",")
|
|
522
|
+
.map((repo) => repo.trim())
|
|
523
|
+
.filter(Boolean)
|
|
524
|
+
: [],
|
|
525
|
+
pollIntervalMs: (Number.isFinite(pollIntervalSeconds) && pollIntervalSeconds > 0 ? pollIntervalSeconds : 60) *
|
|
526
|
+
1000,
|
|
527
|
+
workingDir,
|
|
528
|
+
syncStatePath: join(stateDir, "github-sync.json"),
|
|
529
|
+
// Host-side GCP creds (e.g. a WIF external_account file) unlock Cloud
|
|
530
|
+
// Build logs in github_checks; without them external CI degrades to
|
|
531
|
+
// guidance text. Credentials never enter the sandbox.
|
|
532
|
+
cloudBuild: GOOGLE_APPLICATION_CREDENTIALS
|
|
533
|
+
? {
|
|
534
|
+
tokenProvider: new GcpTokenProvider({
|
|
535
|
+
credentialsPath: GOOGLE_APPLICATION_CREDENTIALS,
|
|
536
|
+
}),
|
|
537
|
+
projectFallback: GOOGLE_CLOUD_PROJECT,
|
|
538
|
+
}
|
|
539
|
+
: undefined,
|
|
540
|
+
});
|
|
541
|
+
botsByPlatform.github = githubMessagingBot;
|
|
542
|
+
log.logInfo(`Platform: GitHub${GOOGLE_APPLICATION_CREDENTIALS ? " (Cloud Build logs enabled)" : ""}`);
|
|
543
|
+
}
|
|
401
544
|
if (LINK_PORT) {
|
|
402
545
|
startWebServer({
|
|
403
546
|
port: LINK_PORT,
|
|
@@ -424,13 +567,14 @@ eventsWatcher.start();
|
|
|
424
567
|
async function shutdown() {
|
|
425
568
|
await handler.shutdown();
|
|
426
569
|
eventsWatcher.stop();
|
|
570
|
+
await stopAllGondolinRuntimes();
|
|
427
571
|
await Sentry.close(5000);
|
|
428
572
|
process.exit(0);
|
|
429
573
|
}
|
|
430
574
|
process.on("SIGINT", shutdown);
|
|
431
575
|
process.on("SIGTERM", shutdown);
|
|
432
576
|
// Start all bots
|
|
433
|
-
await Promise.all(
|
|
577
|
+
await Promise.all(Object.values(botsByPlatform).map((bot) => bot.start().catch((err) => {
|
|
434
578
|
log.logWarning("Failed to start bot", err instanceof Error ? err.message : String(err));
|
|
435
579
|
process.exit(1);
|
|
436
580
|
})));
|