@geminixiang/mikan 1.0.0-beta.2 → 1.0.0-beta.21
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 +388 -0
- package/README.md +49 -16
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/buffered-responder.d.ts +60 -0
- package/dist/adapters/buffered-responder.d.ts.map +1 -0
- package/dist/adapters/buffered-responder.js +201 -0
- package/dist/adapters/buffered-responder.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +1 -0
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +36 -67
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +44 -204
- 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 +24 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +9 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +103 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +31 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/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 +24 -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 +22 -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 +22 -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 +19 -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 +350 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js +2 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/intake.d.ts +16 -5
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +79 -22
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +8 -6
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +82 -134
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +3 -14
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +14 -17
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +5 -8
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/streaming.d.ts +4 -0
- package/dist/adapters/streaming.d.ts.map +1 -1
- package/dist/adapters/streaming.js +11 -0
- package/dist/adapters/streaming.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +1 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +27 -62
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +37 -174
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +28 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent.d.ts +37 -14
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +359 -229
- 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 +16 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +119 -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-git.d.ts +22 -0
- package/dist/cli/ext-git.d.ts.map +1 -0
- package/dist/cli/ext-git.js +76 -0
- package/dist/cli/ext-git.js.map +1 -0
- package/dist/cli/ext.d.ts +2 -0
- package/dist/cli/ext.d.ts.map +1 -0
- package/dist/cli/ext.js +215 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +2 -1
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +2 -6
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +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 +72 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +121 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +11 -9
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +2 -1
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +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 +14 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +1 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +98 -95
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +35 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +225 -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 +4 -2
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +54 -41
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/event-format.d.ts +66 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +112 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +44 -11
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +273 -84
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +48 -1
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +146 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +165 -22
- 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 +6 -5
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +3 -2
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +5 -0
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +10 -0
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +37 -2
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +107 -23
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +4 -1
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +11 -2
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/subagent-runner.d.ts +34 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +339 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +53 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +260 -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/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +2 -5
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +276 -43
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +36 -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 +10 -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 +11 -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 +10 -1
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin-bootstrap.d.ts +26 -0
- package/dist/sandbox/gondolin-bootstrap.d.ts.map +1 -0
- package/dist/sandbox/gondolin-bootstrap.js +27 -0
- package/dist/sandbox/gondolin-bootstrap.js.map +1 -0
- package/dist/sandbox/gondolin-contract.d.ts +125 -0
- package/dist/sandbox/gondolin-contract.d.ts.map +1 -0
- package/dist/sandbox/gondolin-contract.js +155 -0
- package/dist/sandbox/gondolin-contract.js.map +1 -0
- package/dist/sandbox/gondolin-fleet.d.ts +104 -0
- package/dist/sandbox/gondolin-fleet.d.ts.map +1 -0
- package/dist/sandbox/gondolin-fleet.js +330 -0
- package/dist/sandbox/gondolin-fleet.js.map +1 -0
- package/dist/sandbox/gondolin-gateway.d.ts +86 -0
- package/dist/sandbox/gondolin-gateway.d.ts.map +1 -0
- package/dist/sandbox/gondolin-gateway.js +407 -0
- package/dist/sandbox/gondolin-gateway.js.map +1 -0
- package/dist/sandbox/gondolin-inventory.d.ts +75 -0
- package/dist/sandbox/gondolin-inventory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-inventory.js +257 -0
- package/dist/sandbox/gondolin-inventory.js.map +1 -0
- package/dist/sandbox/gondolin-join.d.ts +62 -0
- package/dist/sandbox/gondolin-join.d.ts.map +1 -0
- package/dist/sandbox/gondolin-join.js +261 -0
- package/dist/sandbox/gondolin-join.js.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts +15 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.js +60 -0
- package/dist/sandbox/gondolin-nfs-advisory.js.map +1 -0
- package/dist/sandbox/gondolin-placement.d.ts +30 -0
- package/dist/sandbox/gondolin-placement.d.ts.map +1 -0
- package/dist/sandbox/gondolin-placement.js +77 -0
- package/dist/sandbox/gondolin-placement.js.map +1 -0
- package/dist/sandbox/gondolin-recovery.d.ts +33 -0
- package/dist/sandbox/gondolin-recovery.d.ts.map +1 -0
- package/dist/sandbox/gondolin-recovery.js +39 -0
- package/dist/sandbox/gondolin-recovery.js.map +1 -0
- package/dist/sandbox/gondolin-remote.d.ts +70 -0
- package/dist/sandbox/gondolin-remote.d.ts.map +1 -0
- package/dist/sandbox/gondolin-remote.js +325 -0
- package/dist/sandbox/gondolin-remote.js.map +1 -0
- package/dist/sandbox/gondolin-worker-client.d.ts +135 -0
- package/dist/sandbox/gondolin-worker-client.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-client.js +323 -0
- package/dist/sandbox/gondolin-worker-client.js.map +1 -0
- package/dist/sandbox/gondolin-worker-main.d.ts +2 -0
- package/dist/sandbox/gondolin-worker-main.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-main.js +22 -0
- package/dist/sandbox/gondolin-worker-main.js.map +1 -0
- package/dist/sandbox/gondolin-worker.d.ts +17 -0
- package/dist/sandbox/gondolin-worker.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker.js +201 -0
- package/dist/sandbox/gondolin-worker.js.map +1 -0
- package/dist/sandbox/gondolin.d.ts +53 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +429 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +14 -0
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +21 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +36 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +13 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +19 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +31 -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 +32 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +40 -113
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +13 -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 +31 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +44 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +6 -12
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -2
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +23 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +42 -0
- package/dist/settings-mutation.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 +24 -17
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +9 -12
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/event.d.ts +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/event.js +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 +17 -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.map +1 -1
- package/dist/tools/read.js +7 -26
- 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 +13 -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 +57 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +74 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +335 -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 +1 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -2
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +144 -31
- 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 +1 -32
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/injection.d.ts +20 -0
- package/dist/vault/injection.d.ts.map +1 -0
- package/dist/vault/injection.js +27 -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 +0 -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 +27 -0
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +117 -154
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +6 -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/package.json +7 -4
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/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
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { defaultCommandHandlers, dispatchCommand } from "./commands/registry.js";
|
|
2
2
|
export * from "./harness/index.js";
|
|
3
|
-
export * from "./sessions/
|
|
3
|
+
export * from "./sessions/chat-history-sync.js";
|
|
4
4
|
export * from "./sessions/metadata.js";
|
|
5
5
|
export * from "./sessions/policy.js";
|
|
6
6
|
export * from "./sessions/store.js";
|
|
7
7
|
export { createConversationRuntime, } from "./runtime/conversation-runtime.js";
|
|
8
|
-
export { SandboxError, createExecutor, getSandboxAdapters, parseSandboxArg, validateSandbox, } from "./sandbox/index.js";
|
|
8
|
+
export { SandboxError, configureGondolinRuntime, createExecutor, getSandboxAdapters, parseSandboxArg, validateSandbox, } from "./sandbox/index.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
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;AACjF,cAAc,oBAAoB,CAAC;AAEnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,cAAc,oBAAoB,CAAC;AAEnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,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 * from \"./harness/index.js\";\nexport type { CommandContext, CommandHandler, CommandServices } from \"./commands/types.js\";\nexport * from \"./sessions/chat-history-sync.js\";\nexport * from \"./sessions/metadata.js\";\nexport * from \"./sessions/policy.js\";\nexport * from \"./sessions/store.js\";\nexport {\n createConversationRuntime,\n type RunSessionOptions,\n type ConversationRuntime,\n type ConversationRuntimeOptions,\n} from \"./runtime/conversation-runtime.js\";\nexport type {\n MessagingBot,\n ConversationContext,\n ConversationEvent,\n MessagingEventHandler,\n ChatAdapter,\n ConversationMessage,\n ConversationResponder,\n ChatToolResult,\n ConversationKind,\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,16 @@
|
|
|
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 { downloadChannel } from "./download.js";
|
|
13
|
+
import { downloadChannel } from "./cli/download.js";
|
|
12
14
|
import { EventsWatcher } from "./events.js";
|
|
13
15
|
import * as log from "./log.js";
|
|
14
16
|
import { startWebServer } from "./web/server.js";
|
|
@@ -16,13 +18,23 @@ import { InMemoryAdminTokenStore } from "./web/admin/store.js";
|
|
|
16
18
|
import { InMemoryLinkTokenStore } from "./web/login/store.js";
|
|
17
19
|
import { InMemorySessionViewTokenStore } from "./web/session-view/store.js";
|
|
18
20
|
import { DockerContainerManager } from "./provisioner.js";
|
|
19
|
-
import { assertStateDirOutsideWorkspace, createGlobalSettingsFile, loadGlobalSettings, MissingGlobalSettingsError, } from "./config.js";
|
|
21
|
+
import { assertStateDirOutsideWorkspace, createGlobalSettingsFile, loadGlobalSettings, MissingGlobalSettingsError, resolveLinkBaseUrl, } from "./config.js";
|
|
20
22
|
import { configureHttpDispatcher, defaultAuthPath, defaultModelsJsonPath, parseHttpIdleTimeoutMs, } from "./harness/index.js";
|
|
21
23
|
import { existsSync, readFileSync } from "fs";
|
|
22
24
|
import { readEnv, setEnvAliases } from "./utils/env.js";
|
|
23
25
|
import { ensureDirExists, isRecord, readJsonFileIfExists } from "./utils/file-guards.js";
|
|
24
|
-
import { SandboxError,
|
|
26
|
+
import { SandboxError, validateSandbox } from "./sandbox/index.js";
|
|
27
|
+
import { helpText, resolveBoot } from "./cli/boot.js";
|
|
28
|
+
import { envReport, noPlatformsMessage, platformIsActive } from "./env-manifest.js";
|
|
29
|
+
import { disconnectAllGondolinRuntimes, gondolinResources, stopIdleGondolinVms, sweepUnadoptedGondolinWorkers, } from "./sandbox/gondolin.js";
|
|
30
|
+
import { configureGondolinRuntime } from "./sandbox/gondolin-bootstrap.js";
|
|
31
|
+
import { gondolinInventory } from "./sandbox/gondolin-inventory.js";
|
|
32
|
+
import { gondolinFleet } from "./sandbox/gondolin-fleet.js";
|
|
33
|
+
import { gondolinGateway } from "./sandbox/gondolin-gateway.js";
|
|
34
|
+
import { gondolinJoin } from "./sandbox/gondolin-join.js";
|
|
35
|
+
import { checkWorkspaceExported } from "./sandbox/gondolin-nfs-advisory.js";
|
|
25
36
|
import { FileVaultManager } from "./vault/index.js";
|
|
37
|
+
import { runExtCommand } from "./cli/ext.js";
|
|
26
38
|
import { createConversationRuntime } from "./runtime/conversation-runtime.js";
|
|
27
39
|
import { ChannelStore } from "./store.js";
|
|
28
40
|
import * as Sentry from "@sentry/node";
|
|
@@ -44,56 +56,19 @@ const SLACK_APP_TOKEN = readEnv("SLACK_APP_TOKEN");
|
|
|
44
56
|
const SLACK_BOT_TOKEN = readEnv("SLACK_BOT_TOKEN");
|
|
45
57
|
const TELEGRAM_BOT_TOKEN = readEnv("TELEGRAM_BOT_TOKEN");
|
|
46
58
|
const DISCORD_BOT_TOKEN = readEnv("DISCORD_BOT_TOKEN");
|
|
47
|
-
const
|
|
59
|
+
const GITHUB_APP_ID = readEnv("GITHUB_APP_ID");
|
|
60
|
+
const GITHUB_APP_PRIVATE_KEY = readEnv("GITHUB_APP_PRIVATE_KEY");
|
|
61
|
+
const GITHUB_APP_PRIVATE_KEY_PATH = readEnv("GITHUB_APP_PRIVATE_KEY_PATH");
|
|
62
|
+
const GITHUB_INSTALLATION_ID = readEnv("GITHUB_INSTALLATION_ID");
|
|
63
|
+
const GITHUB_REPOS = readEnv("GITHUB_REPOS");
|
|
64
|
+
const GITHUB_POLL_INTERVAL = readEnv("GITHUB_POLL_INTERVAL");
|
|
65
|
+
const GOOGLE_APPLICATION_CREDENTIALS = readEnv("GOOGLE_APPLICATION_CREDENTIALS");
|
|
66
|
+
const GOOGLE_CLOUD_PROJECT = readEnv("GOOGLE_CLOUD_PROJECT");
|
|
67
|
+
// Externally-visible base URL of the link/OAuth server; the env read and
|
|
68
|
+
// trailing-slash normalization live in config.resolveLinkBaseUrl.
|
|
69
|
+
const LINK_BASE_URL = resolveLinkBaseUrl();
|
|
48
70
|
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
|
-
}
|
|
71
|
+
const LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;
|
|
97
72
|
const WORLD_WRITABLE_MODE = 0o002;
|
|
98
73
|
function ensureSecureStateDir(path) {
|
|
99
74
|
let stat;
|
|
@@ -149,31 +124,79 @@ function handleStartupError(error) {
|
|
|
149
124
|
console.error(String(error));
|
|
150
125
|
process.exit(1);
|
|
151
126
|
}
|
|
152
|
-
let
|
|
127
|
+
let plan;
|
|
153
128
|
try {
|
|
154
|
-
|
|
129
|
+
plan = resolveBoot();
|
|
155
130
|
}
|
|
156
131
|
catch (error) {
|
|
157
132
|
handleStartupError(error);
|
|
158
133
|
}
|
|
134
|
+
// `mikan ext …` manages extensions and exits; handle it before the normal
|
|
135
|
+
// bot-mode startup (which requires platform tokens).
|
|
136
|
+
if (plan.mode === "ext") {
|
|
137
|
+
const code = await runExtCommand(plan.extArgs ?? []);
|
|
138
|
+
process.exit(code);
|
|
139
|
+
}
|
|
159
140
|
// Global fetch: proxy support (HTTP_PROXY/HTTPS_PROXY/NO_PROXY) and idle
|
|
160
141
|
// timeouts so a stalled LLM stream errors out instead of hanging a session.
|
|
161
142
|
const httpIdleTimeoutMs = parseHttpIdleTimeoutMs(readEnv("HTTP_IDLE_TIMEOUT"));
|
|
162
143
|
configureHttpDispatcher(httpIdleTimeoutMs);
|
|
163
|
-
|
|
164
|
-
|
|
144
|
+
if (plan.mode === "help") {
|
|
145
|
+
console.log(helpText());
|
|
146
|
+
process.exit(0);
|
|
147
|
+
}
|
|
148
|
+
if (plan.mode === "env") {
|
|
149
|
+
console.log(envReport());
|
|
150
|
+
process.exit(0);
|
|
151
|
+
}
|
|
152
|
+
if (plan.mode === "version") {
|
|
165
153
|
console.log(getVersion());
|
|
166
154
|
process.exit(0);
|
|
167
155
|
}
|
|
156
|
+
// Handle --worker-token: mint a one-time join token for a dial-home worker
|
|
157
|
+
if (plan.mode === "worker-token") {
|
|
158
|
+
const stateDir = plan.stateDir;
|
|
159
|
+
setEnvAliases("STATE_DIR", stateDir);
|
|
160
|
+
ensureSecureStateDir(stateDir);
|
|
161
|
+
gondolinJoin.configure(join(stateDir, "gondolin-gateway"));
|
|
162
|
+
try {
|
|
163
|
+
let gatewayPort = 8433;
|
|
164
|
+
let gatewayHost;
|
|
165
|
+
try {
|
|
166
|
+
const gateway = loadGlobalSettings().sandbox?.gondolin?.remote?.gateway;
|
|
167
|
+
if (gateway) {
|
|
168
|
+
gatewayPort = gateway.port;
|
|
169
|
+
gatewayHost = gateway.hostnames?.[0];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// settings are optional for minting; the CA lives in the state dir
|
|
174
|
+
}
|
|
175
|
+
const minted = await gondolinJoin.mintToken();
|
|
176
|
+
const host = gatewayHost ?? "<mikan-host>";
|
|
177
|
+
console.log("Worker join token (single use, expires in 15 minutes):");
|
|
178
|
+
console.log("");
|
|
179
|
+
console.log(` mikan-worker join https://${host}:${gatewayPort} \\`);
|
|
180
|
+
console.log(` --token ${minted.token} \\`);
|
|
181
|
+
console.log(` --ca-pin ${minted.fingerprint} \\`);
|
|
182
|
+
console.log(` --name <worker-name> --workspace-root <shared-workspace-path> \\`);
|
|
183
|
+
console.log(` --worker-entry /opt/mikan/dist/sandbox/gondolin-worker-main.js`);
|
|
184
|
+
process.exit(0);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
168
191
|
// Handle --onboard mode
|
|
169
|
-
if (
|
|
170
|
-
const stateDir =
|
|
192
|
+
if (plan.mode === "onboard") {
|
|
193
|
+
const stateDir = plan.stateDir;
|
|
171
194
|
setEnvAliases("STATE_DIR", stateDir);
|
|
172
195
|
ensureSecureStateDir(stateDir);
|
|
173
196
|
try {
|
|
174
197
|
const settingsPath = createGlobalSettingsFile(stateDir);
|
|
175
198
|
console.log(`Created global settings at ${settingsPath}`);
|
|
176
|
-
console.log(
|
|
199
|
+
console.log(`Review the file, then start mikan (workspace defaults to ${join(stateDir, "workspace")}).`);
|
|
177
200
|
process.exit(0);
|
|
178
201
|
}
|
|
179
202
|
catch (err) {
|
|
@@ -182,40 +205,36 @@ if (parsedArgs.showOnboard) {
|
|
|
182
205
|
}
|
|
183
206
|
}
|
|
184
207
|
// Handle --download mode (Slack only)
|
|
185
|
-
if (
|
|
208
|
+
if (plan.mode === "download" && plan.downloadChannel) {
|
|
186
209
|
if (!SLACK_BOT_TOKEN) {
|
|
187
210
|
console.error("Missing env: SLACK_BOT_TOKEN");
|
|
188
211
|
process.exit(1);
|
|
189
212
|
}
|
|
190
|
-
await downloadChannel(
|
|
213
|
+
await downloadChannel(plan.downloadChannel, SLACK_BOT_TOKEN);
|
|
191
214
|
process.exit(0);
|
|
192
215
|
}
|
|
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");
|
|
216
|
+
// Normal bot mode - working dir is optional and defaults under the state dir
|
|
217
|
+
const sandbox = plan.sandbox;
|
|
218
|
+
const stateDir = plan.stateDir;
|
|
219
|
+
const workingDir = plan.workingDir;
|
|
202
220
|
setEnvAliases("STATE_DIR", stateDir);
|
|
203
221
|
ensureSecureStateDir(stateDir);
|
|
222
|
+
if (!plan.workingDirExplicit) {
|
|
223
|
+
ensureDirExists(workingDir);
|
|
224
|
+
}
|
|
204
225
|
try {
|
|
205
226
|
assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);
|
|
206
227
|
}
|
|
207
228
|
catch (error) {
|
|
208
229
|
handleStartupError(error);
|
|
209
230
|
}
|
|
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");
|
|
231
|
+
// Validate platform tokens — activation rules live in the env manifest.
|
|
232
|
+
const hasSlack = platformIsActive("slack");
|
|
233
|
+
const hasTelegram = platformIsActive("telegram");
|
|
234
|
+
const hasDiscord = platformIsActive("discord");
|
|
235
|
+
const hasGithub = platformIsActive("github");
|
|
236
|
+
if (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {
|
|
237
|
+
console.error(noPlatformsMessage());
|
|
219
238
|
process.exit(1);
|
|
220
239
|
}
|
|
221
240
|
try {
|
|
@@ -228,7 +247,10 @@ const vaultManager = new FileVaultManager(stateDir);
|
|
|
228
247
|
if (vaultManager.isEnabled()) {
|
|
229
248
|
console.log(sandbox.type === "container"
|
|
230
249
|
? " Vault system enabled. Container vault active."
|
|
231
|
-
: sandbox.type === "image" ||
|
|
250
|
+
: sandbox.type === "image" ||
|
|
251
|
+
sandbox.type === "gondolin" ||
|
|
252
|
+
sandbox.type === "firecracker" ||
|
|
253
|
+
sandbox.type === "cloudflare"
|
|
232
254
|
? " Vault system enabled. Conversation-scoped credential routing active."
|
|
233
255
|
: " Vault system enabled. Host mode will not inject vault env.");
|
|
234
256
|
}
|
|
@@ -240,11 +262,12 @@ const startupConfig = (() => {
|
|
|
240
262
|
handleStartupError(error);
|
|
241
263
|
}
|
|
242
264
|
})();
|
|
243
|
-
const
|
|
244
|
-
|
|
265
|
+
const sandboxSettings = startupConfig.sandbox;
|
|
266
|
+
const sandboxLimits = sandboxSettings?.cpus || sandboxSettings?.memory
|
|
267
|
+
? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }
|
|
245
268
|
: undefined;
|
|
246
|
-
const sandboxBoostLimits =
|
|
247
|
-
? { cpus:
|
|
269
|
+
const sandboxBoostLimits = sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory
|
|
270
|
+
? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }
|
|
248
271
|
: undefined;
|
|
249
272
|
const provisioner = sandbox.type === "image"
|
|
250
273
|
? new DockerContainerManager(sandbox.image, {
|
|
@@ -252,7 +275,26 @@ const provisioner = sandbox.type === "image"
|
|
|
252
275
|
boostLimits: sandboxBoostLimits,
|
|
253
276
|
})
|
|
254
277
|
: undefined;
|
|
255
|
-
if (sandbox.type === "
|
|
278
|
+
if (sandbox.type === "gondolin") {
|
|
279
|
+
try {
|
|
280
|
+
configureGondolinRuntime({
|
|
281
|
+
stateDir,
|
|
282
|
+
limits: sandboxLimits,
|
|
283
|
+
boostLimits: sandboxBoostLimits,
|
|
284
|
+
remote: sandboxSettings?.gondolin?.remote,
|
|
285
|
+
requireRemote: sandbox.profile === "remote",
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
handleStartupError(error);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const resourceController = sandbox.type === "image"
|
|
293
|
+
? provisioner
|
|
294
|
+
: sandbox.type === "gondolin"
|
|
295
|
+
? gondolinResources
|
|
296
|
+
: undefined;
|
|
297
|
+
if (sandbox.type === "image" || sandbox.type === "gondolin") {
|
|
256
298
|
ensureDirExists(join(workingDir, "skills"));
|
|
257
299
|
ensureDirExists(join(workingDir, "events"));
|
|
258
300
|
try {
|
|
@@ -270,50 +312,119 @@ setInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
|
270
312
|
setInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
271
313
|
setInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();
|
|
272
314
|
function portalBaseUrl() {
|
|
273
|
-
if (
|
|
274
|
-
return
|
|
315
|
+
if (LINK_BASE_URL)
|
|
316
|
+
return LINK_BASE_URL;
|
|
275
317
|
if (LINK_PORT)
|
|
276
318
|
return `http://localhost:${LINK_PORT}`;
|
|
277
319
|
return undefined;
|
|
278
320
|
}
|
|
279
|
-
/** Idle timeout for managed
|
|
280
|
-
const
|
|
321
|
+
/** Idle timeout for managed sandboxes (10 minutes) */
|
|
322
|
+
const MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
281
323
|
if (provisioner) {
|
|
282
324
|
await provisioner.reconcile();
|
|
283
|
-
await provisioner.stopIdle(
|
|
284
|
-
setInterval(() => provisioner.stopIdle(
|
|
325
|
+
await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);
|
|
326
|
+
setInterval(() => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS), MANAGED_SANDBOX_IDLE_TIMEOUT_MS).unref();
|
|
327
|
+
}
|
|
328
|
+
if (sandbox.type === "gondolin" && sandbox.profile === "remote") {
|
|
329
|
+
checkWorkspaceExported(workingDir, sandboxSettings?.gondolin?.remote?.gateway?.hostnames?.[0]);
|
|
330
|
+
await gondolinGateway.start();
|
|
331
|
+
await gondolinFleet.reconcile();
|
|
332
|
+
setInterval(() => {
|
|
333
|
+
void stopIdleGondolinVms(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);
|
|
334
|
+
void gondolinFleet.reconcile();
|
|
335
|
+
}, MANAGED_SANDBOX_IDLE_TIMEOUT_MS).unref();
|
|
336
|
+
}
|
|
337
|
+
else if (sandbox.type === "gondolin") {
|
|
338
|
+
gondolinInventory.touchHeartbeat();
|
|
339
|
+
await gondolinInventory.reconcile();
|
|
340
|
+
setInterval(() => {
|
|
341
|
+
gondolinInventory.touchHeartbeat();
|
|
342
|
+
void stopIdleGondolinVms(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);
|
|
343
|
+
void sweepUnadoptedGondolinWorkers();
|
|
344
|
+
}, MANAGED_SANDBOX_IDLE_TIMEOUT_MS).unref();
|
|
285
345
|
}
|
|
286
|
-
// Declared before the runtime so the notifier closure can capture them;
|
|
287
|
-
// bots register below once their platforms initialize.
|
|
288
|
-
const bots = [];
|
|
289
346
|
const botsByPlatform = {};
|
|
290
347
|
/**
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
* sole running platform.
|
|
348
|
+
* Resolve which platform bot to use: an explicit platform, or the sole
|
|
349
|
+
* running one. Mirrors event-file platform resolution.
|
|
294
350
|
*/
|
|
295
|
-
|
|
351
|
+
function resolvePlatformBot(op, platform) {
|
|
296
352
|
const available = Object.keys(botsByPlatform);
|
|
297
353
|
const key = platform?.trim().toLowerCase() || (available.length === 1 ? available[0] : undefined);
|
|
298
354
|
const bot = key ? botsByPlatform[key] : undefined;
|
|
299
355
|
if (!bot) {
|
|
300
356
|
throw new Error(platform
|
|
301
|
-
?
|
|
302
|
-
:
|
|
357
|
+
? `${op}: unknown platform '${platform}' (available: ${available.join(", ") || "none"})`
|
|
358
|
+
: `${op}: multiple platforms active (${available.join(", ")}); specify platform`);
|
|
303
359
|
}
|
|
360
|
+
return [key, bot];
|
|
361
|
+
}
|
|
362
|
+
/** Extension `api.notify` backend: post into a conversation without a run. */
|
|
363
|
+
const platformNotifier = async (conversationId, text, platform) => {
|
|
364
|
+
const [key, bot] = resolvePlatformBot("notify", platform);
|
|
304
365
|
await bot.postMessage(conversationId, text);
|
|
305
366
|
log.logInfo(`[notify] posted to ${key}/${conversationId} (${text.length} chars)`);
|
|
306
367
|
};
|
|
368
|
+
/** Extension `api.react` backend: add a reaction to a message. */
|
|
369
|
+
const platformReactor = async (conversationId, messageTs, emoji, platform) => {
|
|
370
|
+
const [key, bot] = resolvePlatformBot("react", platform);
|
|
371
|
+
if (!bot.addReaction) {
|
|
372
|
+
throw new Error(`react: platform '${key}' does not support reactions`);
|
|
373
|
+
}
|
|
374
|
+
await bot.addReaction(conversationId, messageTs, emoji);
|
|
375
|
+
log.logInfo(`[react] :${emoji}: on ${key}/${conversationId}`);
|
|
376
|
+
};
|
|
377
|
+
/** Extension `api.uploadFile` backend: send a host file into a conversation. */
|
|
378
|
+
const platformUploader = async (conversationId, filePath, title, platform) => {
|
|
379
|
+
const [key, bot] = resolvePlatformBot("upload", platform);
|
|
380
|
+
if (!bot.uploadFile) {
|
|
381
|
+
throw new Error(`upload: platform '${key}' does not support file uploads`);
|
|
382
|
+
}
|
|
383
|
+
await bot.uploadFile(conversationId, filePath, title);
|
|
384
|
+
log.logInfo(`[upload] ${filePath} to ${key}/${conversationId}`);
|
|
385
|
+
};
|
|
386
|
+
/** github_* tool backends: PR push/create and CI checks, host-side. */
|
|
387
|
+
function requireGithubBot(op) {
|
|
388
|
+
const bot = botsByPlatform.github;
|
|
389
|
+
if (!bot) {
|
|
390
|
+
throw new Error(`${op}: the GitHub platform is not running`);
|
|
391
|
+
}
|
|
392
|
+
return bot;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Platform capability pack factories — only when the corresponding bot is
|
|
396
|
+
* configured. Factories, not instances: each runner materializes its own
|
|
397
|
+
* pack so per-run bind state never crosses conversations.
|
|
398
|
+
*/
|
|
399
|
+
function buildPlatformToolPackFactories() {
|
|
400
|
+
if (!hasGithub)
|
|
401
|
+
return [];
|
|
402
|
+
const platformGithubOps = {
|
|
403
|
+
pushAndCreatePr: (conversationId, request) => requireGithubBot("github_pr").ops.pushAndCreatePr(conversationId, request),
|
|
404
|
+
getChecks: (conversationId, branch) => requireGithubBot("github_checks").ops.getChecks(conversationId, branch),
|
|
405
|
+
getJobLog: (conversationId, jobId) => requireGithubBot("github_checks").ops.getJobLog(conversationId, jobId),
|
|
406
|
+
getBuildLog: (conversationId, buildId) => requireGithubBot("github_checks").ops.getBuildLog(conversationId, buildId),
|
|
407
|
+
replyToReviewThread: (conversationId, commentId, body) => requireGithubBot("github_review_reply").ops.replyToReviewThread(conversationId, commentId, body),
|
|
408
|
+
syncRepo: (conversationId, branch) => requireGithubBot("github_sync").ops.syncRepo(conversationId, branch),
|
|
409
|
+
readGithub: (conversationId, request) => requireGithubBot("github_read").ops.readGithub(conversationId, request),
|
|
410
|
+
manageIssue: (conversationId, request) => requireGithubBot("github_issue").ops.manageIssue(conversationId, request),
|
|
411
|
+
};
|
|
412
|
+
return [() => createGithubToolPack(platformGithubOps)];
|
|
413
|
+
}
|
|
307
414
|
const handler = createConversationRuntime({
|
|
308
415
|
workingDir,
|
|
309
416
|
sandbox,
|
|
310
417
|
vaultManager,
|
|
311
418
|
provisioner,
|
|
419
|
+
resourceController,
|
|
312
420
|
linkTokenStore,
|
|
313
421
|
sessionViewTokenStore,
|
|
314
422
|
adminTokenStore,
|
|
315
423
|
portalBaseUrl: portalBaseUrl(),
|
|
316
424
|
platformNotifier,
|
|
425
|
+
platformReactor,
|
|
426
|
+
platformUploader,
|
|
427
|
+
platformToolPackFactories: buildPlatformToolPackFactories(),
|
|
317
428
|
});
|
|
318
429
|
const sandboxDesc = sandbox.type === "host"
|
|
319
430
|
? "host"
|
|
@@ -321,9 +432,11 @@ const sandboxDesc = sandbox.type === "host"
|
|
|
321
432
|
? `container:${sandbox.container}`
|
|
322
433
|
: sandbox.type === "image"
|
|
323
434
|
? `image:${sandbox.image}`
|
|
324
|
-
: sandbox.type === "
|
|
325
|
-
? `
|
|
326
|
-
:
|
|
435
|
+
: sandbox.type === "gondolin"
|
|
436
|
+
? `gondolin:${sandbox.profile}`
|
|
437
|
+
: sandbox.type === "firecracker"
|
|
438
|
+
? `firecracker:${sandbox.vmId}`
|
|
439
|
+
: `cloudflare:${sandbox.sandboxId}`;
|
|
327
440
|
log.logStartup(workingDir, sandboxDesc);
|
|
328
441
|
logHarnessStartupSummary();
|
|
329
442
|
/**
|
|
@@ -368,7 +481,6 @@ if (hasSlack) {
|
|
|
368
481
|
workingDir,
|
|
369
482
|
store: sharedStore,
|
|
370
483
|
});
|
|
371
|
-
bots.push(slackMessagingBot);
|
|
372
484
|
botsByPlatform.slack = slackMessagingBot;
|
|
373
485
|
log.logInfo("Platform: Slack");
|
|
374
486
|
}
|
|
@@ -381,7 +493,6 @@ if (hasTelegram) {
|
|
|
381
493
|
token: telegramToken,
|
|
382
494
|
workingDir,
|
|
383
495
|
});
|
|
384
|
-
bots.push(telegramMessagingBot);
|
|
385
496
|
botsByPlatform.telegram = telegramMessagingBot;
|
|
386
497
|
log.logInfo("Platform: Telegram");
|
|
387
498
|
}
|
|
@@ -394,10 +505,49 @@ if (hasDiscord) {
|
|
|
394
505
|
token: discordToken,
|
|
395
506
|
workingDir,
|
|
396
507
|
});
|
|
397
|
-
bots.push(discordMessagingBot);
|
|
398
508
|
botsByPlatform.discord = discordMessagingBot;
|
|
399
509
|
log.logInfo("Platform: Discord");
|
|
400
510
|
}
|
|
511
|
+
if (hasGithub) {
|
|
512
|
+
if (!GITHUB_APP_ID || !GITHUB_INSTALLATION_ID) {
|
|
513
|
+
throw new Error("GitHub startup requires GITHUB_APP_ID and GITHUB_INSTALLATION_ID");
|
|
514
|
+
}
|
|
515
|
+
// Env vars flatten PEM newlines to literal `\n`; a key file avoids that.
|
|
516
|
+
const githubPrivateKey = GITHUB_APP_PRIVATE_KEY_PATH
|
|
517
|
+
? readFileSync(GITHUB_APP_PRIVATE_KEY_PATH, "utf-8")
|
|
518
|
+
: GITHUB_APP_PRIVATE_KEY?.replace(/\\n/g, "\n");
|
|
519
|
+
if (!githubPrivateKey) {
|
|
520
|
+
throw new Error("GitHub startup requires GITHUB_APP_PRIVATE_KEY or GITHUB_APP_PRIVATE_KEY_PATH");
|
|
521
|
+
}
|
|
522
|
+
const pollIntervalSeconds = GITHUB_POLL_INTERVAL ? parseInt(GITHUB_POLL_INTERVAL, 10) : NaN;
|
|
523
|
+
const githubMessagingBot = new GithubMessagingBot(handler, {
|
|
524
|
+
appId: GITHUB_APP_ID,
|
|
525
|
+
privateKey: githubPrivateKey,
|
|
526
|
+
installationId: GITHUB_INSTALLATION_ID,
|
|
527
|
+
repos: GITHUB_REPOS
|
|
528
|
+
? GITHUB_REPOS.split(",")
|
|
529
|
+
.map((repo) => repo.trim())
|
|
530
|
+
.filter(Boolean)
|
|
531
|
+
: [],
|
|
532
|
+
pollIntervalMs: (Number.isFinite(pollIntervalSeconds) && pollIntervalSeconds > 0 ? pollIntervalSeconds : 60) *
|
|
533
|
+
1000,
|
|
534
|
+
workingDir,
|
|
535
|
+
syncStatePath: join(stateDir, "github-sync.json"),
|
|
536
|
+
// Host-side GCP creds (e.g. a WIF external_account file) unlock Cloud
|
|
537
|
+
// Build logs in github_checks; without them external CI degrades to
|
|
538
|
+
// guidance text. Credentials never enter the sandbox.
|
|
539
|
+
cloudBuild: GOOGLE_APPLICATION_CREDENTIALS
|
|
540
|
+
? {
|
|
541
|
+
tokenProvider: new GcpTokenProvider({
|
|
542
|
+
credentialsPath: GOOGLE_APPLICATION_CREDENTIALS,
|
|
543
|
+
}),
|
|
544
|
+
projectFallback: GOOGLE_CLOUD_PROJECT,
|
|
545
|
+
}
|
|
546
|
+
: undefined,
|
|
547
|
+
});
|
|
548
|
+
botsByPlatform.github = githubMessagingBot;
|
|
549
|
+
log.logInfo(`Platform: GitHub${GOOGLE_APPLICATION_CREDENTIALS ? " (Cloud Build logs enabled)" : ""}`);
|
|
550
|
+
}
|
|
401
551
|
if (LINK_PORT) {
|
|
402
552
|
startWebServer({
|
|
403
553
|
port: LINK_PORT,
|
|
@@ -424,13 +574,14 @@ eventsWatcher.start();
|
|
|
424
574
|
async function shutdown() {
|
|
425
575
|
await handler.shutdown();
|
|
426
576
|
eventsWatcher.stop();
|
|
577
|
+
await disconnectAllGondolinRuntimes();
|
|
427
578
|
await Sentry.close(5000);
|
|
428
579
|
process.exit(0);
|
|
429
580
|
}
|
|
430
581
|
process.on("SIGINT", shutdown);
|
|
431
582
|
process.on("SIGTERM", shutdown);
|
|
432
583
|
// Start all bots
|
|
433
|
-
await Promise.all(
|
|
584
|
+
await Promise.all(Object.values(botsByPlatform).map((bot) => bot.start().catch((err) => {
|
|
434
585
|
log.logWarning("Failed to start bot", err instanceof Error ? err.message : String(err));
|
|
435
586
|
process.exit(1);
|
|
436
587
|
})));
|