@geminixiang/mikan 1.0.0-beta.6 → 1.0.0-beta.60
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 +926 -0
- package/README.md +95 -37
- package/dist/adapter.d.ts +11 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +18 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/commands/admin.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/admin.js +11 -8
- package/dist/adapters/commands/admin.js.map +1 -0
- package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
- package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
- package/dist/adapters/commands/auto-reply.js +38 -0
- package/dist/adapters/commands/auto-reply.js.map +1 -0
- package/dist/adapters/commands/login.d.ts +6 -0
- package/dist/adapters/commands/login.d.ts.map +1 -0
- package/dist/adapters/commands/login.js +166 -0
- package/dist/adapters/commands/login.js.map +1 -0
- package/dist/adapters/commands/manifest.d.ts +37 -0
- package/dist/adapters/commands/manifest.d.ts.map +1 -0
- package/dist/adapters/commands/manifest.js +155 -0
- package/dist/adapters/commands/manifest.js.map +1 -0
- package/dist/adapters/commands/model.d.ts +15 -0
- package/dist/adapters/commands/model.d.ts.map +1 -0
- package/dist/adapters/commands/model.js +153 -0
- package/dist/adapters/commands/model.js.map +1 -0
- package/dist/adapters/commands/new.d.ts.map +1 -0
- package/dist/adapters/commands/new.js +41 -0
- package/dist/adapters/commands/new.js.map +1 -0
- package/dist/adapters/commands/registry.d.ts +5 -0
- package/dist/adapters/commands/registry.d.ts.map +1 -0
- package/dist/adapters/commands/registry.js +43 -0
- package/dist/adapters/commands/registry.js.map +1 -0
- package/dist/adapters/commands/sandbox.d.ts.map +1 -0
- package/dist/adapters/commands/sandbox.js +148 -0
- package/dist/adapters/commands/sandbox.js.map +1 -0
- package/dist/adapters/commands/session-view.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/session-view.js +23 -16
- package/dist/adapters/commands/session-view.js.map +1 -0
- package/dist/adapters/commands/types.d.ts +145 -0
- package/dist/adapters/commands/types.d.ts.map +1 -0
- package/dist/adapters/commands/types.js.map +1 -0
- package/dist/adapters/commands/utils.d.ts +14 -0
- package/dist/adapters/commands/utils.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/utils.js +18 -1
- package/dist/adapters/commands/utils.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +11 -8
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +218 -252
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +28 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +32 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +2 -6
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +63 -218
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +3 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +84 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/discord/types.d.ts +7 -0
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +102 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +720 -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 +301 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/context.d.ts +5 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +101 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +78 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +337 -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 +57 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +33 -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 +55 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +18 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +86 -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 +345 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/github/webhook.d.ts +20 -0
- package/dist/adapters/github/webhook.d.ts.map +1 -0
- package/dist/adapters/github/webhook.js +78 -0
- package/dist/adapters/github/webhook.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 +86 -27
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +19 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +152 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- 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 +439 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +35 -11
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +105 -24
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +73 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +205 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +14 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +104 -148
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +116 -18
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +760 -468
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +2 -6
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +11 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/markdown.d.ts +3 -0
- package/dist/adapters/slack/markdown.d.ts.map +1 -0
- package/dist/adapters/slack/markdown.js +48 -0
- package/dist/adapters/slack/markdown.js.map +1 -0
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +240 -345
- 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 +7 -11
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +35 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +56 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- 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 +73 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
- package/dist/adapters/slack/update-diagnostics.js +134 -0
- package/dist/adapters/slack/update-diagnostics.js.map +1 -0
- package/dist/adapters/telegram/bot.d.ts +10 -9
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +129 -198
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +2 -6
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +52 -190
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +144 -13
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +44 -0
- package/dist/adapters/web/admin/portal.d.ts.map +1 -0
- package/dist/adapters/web/admin/portal.js +3284 -0
- package/dist/adapters/web/admin/portal.js.map +1 -0
- package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
- package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
- package/dist/adapters/web/admin/provider-models.js.map +1 -0
- package/dist/adapters/web/admin/types.d.ts +50 -0
- package/dist/adapters/web/admin/types.d.ts.map +1 -0
- package/dist/adapters/web/admin/types.js.map +1 -0
- package/dist/adapters/web/login/oauth.d.ts +5 -0
- package/dist/adapters/web/login/oauth.d.ts.map +1 -0
- package/dist/{web → adapters/web}/login/oauth.js +50 -85
- package/dist/adapters/web/login/oauth.js.map +1 -0
- package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
- package/dist/adapters/web/login/portal.d.ts.map +1 -0
- package/dist/{web → adapters/web}/login/portal.js +161 -119
- package/dist/adapters/web/login/portal.js.map +1 -0
- package/dist/{web → adapters/web}/login/types.d.ts +1 -12
- package/dist/adapters/web/login/types.d.ts.map +1 -0
- package/dist/adapters/web/login/types.js.map +1 -0
- package/dist/adapters/web/portal-shell.d.ts +22 -0
- package/dist/adapters/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
- package/dist/adapters/web/portal-shell.js.map +1 -0
- package/dist/{web → adapters/web}/server.d.ts +11 -8
- package/dist/adapters/web/server.d.ts.map +1 -0
- package/dist/{web → adapters/web}/server.js +16 -7
- package/dist/adapters/web/server.js.map +1 -0
- package/dist/adapters/web/session-view/portal.d.ts +20 -0
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
- package/dist/{web → adapters/web}/session-view/portal.js +632 -162
- package/dist/adapters/web/session-view/portal.js.map +1 -0
- package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
- package/dist/adapters/web/session-view/types.d.ts.map +1 -0
- package/dist/adapters/web/session-view/types.js.map +1 -0
- package/dist/adapters/web/token-store.d.ts.map +1 -0
- package/dist/{web → adapters/web}/token-store.js +1 -1
- package/dist/adapters/web/token-store.js.map +1 -0
- package/dist/adapters/web/types.d.ts.map +1 -0
- package/dist/adapters/web/types.js.map +1 -0
- package/dist/cli/arg-grammar.d.ts +11 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +50 -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 +90 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js +88 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/office.d.ts +2 -0
- package/dist/cli/office.d.ts.map +1 -0
- package/dist/cli/office.js +83 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/onboard.d.ts +10 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +225 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/sessions.d.ts +2 -0
- package/dist/cli/sessions.d.ts.map +1 -0
- package/dist/cli/sessions.js +88 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/types.d.ts +25 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config.d.ts +38 -39
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +256 -215
- package/dist/config.js.map +1 -1
- package/dist/dream/index.d.ts +20 -0
- package/dist/dream/index.d.ts.map +1 -0
- package/dist/dream/index.js +264 -0
- package/dist/dream/index.js.map +1 -0
- package/dist/dream/types.d.ts +30 -0
- package/dist/dream/types.d.ts.map +1 -0
- package/dist/dream/types.js +2 -0
- package/dist/dream/types.js.map +1 -0
- package/dist/env-manifest.d.ts +32 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +244 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events/index.d.ts +150 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +249 -0
- package/dist/events/index.js.map +1 -0
- package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
- package/dist/events/watcher.d.ts.map +1 -0
- package/dist/{events.js → events/watcher.js} +23 -84
- package/dist/events/watcher.js.map +1 -0
- package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +9 -0
- package/dist/file-guards.d.ts.map +1 -0
- package/dist/{utils/file-guards.js → file-guards.js} +44 -1
- package/dist/file-guards.js.map +1 -0
- package/dist/harness/execution-env.d.ts +19 -0
- package/dist/harness/execution-env.d.ts.map +1 -0
- package/dist/harness/execution-env.js +262 -0
- package/dist/harness/execution-env.js.map +1 -0
- package/dist/harness/execution-resolver.d.ts +25 -0
- package/dist/harness/execution-resolver.d.ts.map +1 -0
- package/dist/harness/execution-resolver.js +156 -0
- package/dist/harness/execution-resolver.js.map +1 -0
- package/dist/harness/index.d.ts +17 -13
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +10 -11
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/mcp.d.ts +38 -0
- package/dist/harness/mcp.d.ts.map +1 -0
- package/dist/harness/mcp.js +306 -0
- package/dist/harness/mcp.js.map +1 -0
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +54 -55
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +14 -0
- package/dist/harness/open-connector.d.ts.map +1 -0
- package/dist/harness/open-connector.js +204 -0
- package/dist/harness/open-connector.js.map +1 -0
- package/dist/harness/presenter.d.ts +30 -0
- package/dist/harness/presenter.d.ts.map +1 -0
- package/dist/harness/presenter.js +804 -0
- package/dist/harness/presenter.js.map +1 -0
- package/dist/harness/prompt.d.ts +30 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +426 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/runner.d.ts +2 -123
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +505 -417
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +119 -0
- package/dist/harness/session.d.ts.map +1 -0
- package/dist/harness/session.js +561 -0
- package/dist/harness/session.js.map +1 -0
- package/dist/harness/skills.d.ts +17 -28
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +104 -39
- 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 +284 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent.d.ts +64 -0
- package/dist/harness/subagent.d.ts.map +1 -0
- package/dist/harness/subagent.js +687 -0
- package/dist/harness/subagent.js.map +1 -0
- package/dist/harness/tools/attach.d.ts.map +1 -0
- package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
- package/dist/harness/tools/attach.js.map +1 -0
- package/dist/{tools → harness/tools}/event.d.ts +3 -32
- package/dist/harness/tools/event.d.ts.map +1 -0
- package/dist/harness/tools/event.js +178 -0
- package/dist/harness/tools/event.js.map +1 -0
- package/dist/harness/tools/generate-image.d.ts +23 -0
- package/dist/harness/tools/generate-image.d.ts.map +1 -0
- package/dist/harness/tools/generate-image.js +65 -0
- package/dist/harness/tools/generate-image.js.map +1 -0
- package/dist/harness/tools/host-fn-tool.d.ts +21 -0
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/harness/tools/host-fn-tool.js +32 -0
- package/dist/harness/tools/host-fn-tool.js.map +1 -0
- package/dist/harness/tools/index.d.ts +38 -0
- package/dist/harness/tools/index.d.ts.map +1 -0
- package/dist/harness/tools/index.js +45 -0
- package/dist/harness/tools/index.js.map +1 -0
- package/dist/harness/tools/pi-tools.d.ts +18 -0
- package/dist/harness/tools/pi-tools.d.ts.map +1 -0
- package/dist/harness/tools/pi-tools.js +84 -0
- package/dist/harness/tools/pi-tools.js.map +1 -0
- package/dist/harness/tools/react.d.ts.map +1 -0
- package/dist/{tools → harness/tools}/react.js +6 -17
- package/dist/harness/tools/react.js.map +1 -0
- package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
- package/dist/harness/tools/sandbox.d.ts.map +1 -0
- package/dist/{tools → harness/tools}/sandbox.js +12 -8
- package/dist/harness/tools/sandbox.js.map +1 -0
- package/dist/harness/tools/subagent.d.ts +88 -0
- package/dist/harness/tools/subagent.d.ts.map +1 -0
- package/dist/harness/tools/subagent.js +681 -0
- package/dist/harness/tools/subagent.js.map +1 -0
- package/dist/harness/tools/types.d.ts +29 -0
- package/dist/harness/tools/types.d.ts.map +1 -0
- package/dist/harness/tools/types.js +2 -0
- package/dist/harness/tools/types.js.map +1 -0
- package/dist/harness/types.d.ts +384 -25
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +33 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/main.js +344 -188
- package/dist/main.js.map +1 -1
- package/dist/observability/index.d.ts +33 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +257 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrument.js +14 -6
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/otel.d.ts +10 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +183 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/observability/sentry.d.ts +40 -7
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +176 -32
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +24 -3
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +138 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +1084 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/projection.d.ts +22 -0
- package/dist/office/projection.d.ts.map +1 -0
- package/dist/office/projection.js +208 -0
- package/dist/office/projection.js.map +1 -0
- package/dist/office/types.d.ts +116 -0
- package/dist/office/types.d.ts.map +1 -0
- package/dist/office/types.js +2 -0
- package/dist/office/types.js.map +1 -0
- package/dist/platform-messages.d.ts +1 -0
- package/dist/platform-messages.d.ts.map +1 -1
- package/dist/platform-messages.js +3 -0
- package/dist/platform-messages.js.map +1 -1
- package/dist/process-lifecycle.d.ts +19 -0
- package/dist/process-lifecycle.d.ts.map +1 -0
- package/dist/process-lifecycle.js +67 -0
- package/dist/process-lifecycle.js.map +1 -0
- 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 +398 -149
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +76 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +404 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +58 -14
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +4 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +54 -52
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +3 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +19 -7
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +44 -35
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +42 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +77 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +16 -6
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +73 -17
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +121 -0
- package/dist/sandbox/provisioner.d.ts.map +1 -0
- package/dist/{provisioner.js → sandbox/provisioner.js} +352 -20
- package/dist/sandbox/provisioner.js.map +1 -0
- package/dist/sandbox/types.d.ts +43 -9
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +24 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +92 -1
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +23 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +234 -175
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/history-line.d.ts +29 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +45 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/migrate-common.d.ts +43 -0
- package/dist/sessions/migrate-common.d.ts.map +1 -0
- package/dist/sessions/migrate-common.js +99 -0
- package/dist/sessions/migrate-common.js.map +1 -0
- package/dist/sessions/migrate-pi-084.d.ts +8 -0
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
- package/dist/sessions/migrate-pi-084.js +302 -0
- package/dist/sessions/migrate-pi-084.js.map +1 -0
- package/dist/sessions/migrate-v3.d.ts +15 -0
- package/dist/sessions/migrate-v3.d.ts.map +1 -0
- package/dist/sessions/migrate-v3.js +419 -0
- package/dist/sessions/migrate-v3.js.map +1 -0
- package/dist/sessions/session-key.d.ts +33 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +115 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/session-store.d.ts +51 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +658 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/store.d.ts +17 -10
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +182 -47
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +73 -7
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +40 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +66 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/types.d.ts +331 -140
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +52 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +218 -86
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +6 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +77 -39
- package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
- package/dist/adapters/slack/tools/attach.js.map +0 -1
- 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/adapters/telegram/html.d.ts +0 -3
- package/dist/adapters/telegram/html.d.ts.map +0 -1
- package/dist/adapters/telegram/html.js +0 -98
- package/dist/adapters/telegram/html.js.map +0 -1
- package/dist/agent-events.d.ts +0 -5
- package/dist/agent-events.d.ts.map +0 -1
- package/dist/agent-events.js +0 -26
- package/dist/agent-events.js.map +0 -1
- package/dist/agent.d.ts +0 -39
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -1291
- package/dist/agent.js.map +0 -1
- package/dist/commands/admin.d.ts.map +0 -1
- package/dist/commands/admin.js.map +0 -1
- package/dist/commands/auto-reply.d.ts.map +0 -1
- package/dist/commands/auto-reply.js +0 -76
- package/dist/commands/auto-reply.js.map +0 -1
- package/dist/commands/extensions.d.ts +0 -14
- package/dist/commands/extensions.d.ts.map +0 -1
- package/dist/commands/extensions.js +0 -55
- package/dist/commands/extensions.js.map +0 -1
- package/dist/commands/login.d.ts +0 -5
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -115
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/model.d.ts +0 -10
- package/dist/commands/model.d.ts.map +0 -1
- package/dist/commands/model.js +0 -102
- package/dist/commands/model.js.map +0 -1
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -25
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/parse.d.ts +0 -7
- package/dist/commands/parse.d.ts.map +0 -1
- package/dist/commands/parse.js +0 -14
- package/dist/commands/parse.js.map +0 -1
- package/dist/commands/registry.d.ts +0 -5
- package/dist/commands/registry.d.ts.map +0 -1
- package/dist/commands/registry.js +0 -31
- package/dist/commands/registry.js.map +0 -1
- package/dist/commands/sandbox.d.ts.map +0 -1
- package/dist/commands/sandbox.js +0 -78
- package/dist/commands/sandbox.js.map +0 -1
- package/dist/commands/session-view.d.ts.map +0 -1
- package/dist/commands/session-view.js.map +0 -1
- package/dist/commands/types.d.ts +0 -66
- package/dist/commands/types.d.ts.map +0 -1
- package/dist/commands/types.js.map +0 -1
- package/dist/commands/utils.d.ts +0 -11
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js.map +0 -1
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js +0 -89
- package/dist/download.js.map +0 -1
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/execution-resolver.d.ts +0 -21
- package/dist/execution-resolver.d.ts.map +0 -1
- package/dist/execution-resolver.js +0 -170
- package/dist/execution-resolver.js.map +0 -1
- package/dist/harness/auth.d.ts +0 -16
- package/dist/harness/auth.d.ts.map +0 -1
- package/dist/harness/auth.js +0 -86
- package/dist/harness/auth.js.map +0 -1
- package/dist/harness/extensions/loader.d.ts +0 -62
- package/dist/harness/extensions/loader.d.ts.map +0 -1
- package/dist/harness/extensions/loader.js +0 -374
- package/dist/harness/extensions/loader.js.map +0 -1
- package/dist/harness/extensions/registry.d.ts +0 -23
- package/dist/harness/extensions/registry.d.ts.map +0 -1
- package/dist/harness/extensions/registry.js +0 -45
- package/dist/harness/extensions/registry.js.map +0 -1
- package/dist/harness/extensions/types.d.ts +0 -248
- package/dist/harness/extensions/types.d.ts.map +0 -1
- package/dist/harness/extensions/types.js.map +0 -1
- package/dist/harness/session-store.d.ts +0 -77
- package/dist/harness/session-store.d.ts.map +0 -1
- package/dist/harness/session-store.js +0 -248
- package/dist/harness/session-store.js.map +0 -1
- package/dist/harness/settings.d.ts +0 -47
- package/dist/harness/settings.d.ts.map +0 -1
- package/dist/harness/settings.js +0 -29
- package/dist/harness/settings.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/provisioner.d.ts +0 -61
- package/dist/provisioner.d.ts.map +0 -1
- package/dist/provisioner.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/sandbox/errors.d.ts +0 -6
- package/dist/sandbox/errors.d.ts.map +0 -1
- package/dist/sandbox/errors.js +0 -11
- package/dist/sandbox/errors.js.map +0 -1
- package/dist/sandbox/firecracker.d.ts +0 -15
- package/dist/sandbox/firecracker.d.ts.map +0 -1
- package/dist/sandbox/firecracker.js +0 -212
- package/dist/sandbox/firecracker.js.map +0 -1
- package/dist/sandbox/image.d.ts +0 -3
- package/dist/sandbox/image.d.ts.map +0 -1
- package/dist/sandbox/image.js +0 -27
- package/dist/sandbox/image.js.map +0 -1
- package/dist/sandbox/path-context.d.ts +0 -3
- package/dist/sandbox/path-context.d.ts.map +0 -1
- package/dist/sandbox/path-context.js +0 -20
- package/dist/sandbox/path-context.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/sessions/metadata.d.ts +0 -3
- package/dist/sessions/metadata.d.ts.map +0 -1
- package/dist/sessions/metadata.js +0 -11
- package/dist/sessions/metadata.js.map +0 -1
- package/dist/sessions/policy.d.ts +0 -6
- package/dist/sessions/policy.d.ts.map +0 -1
- package/dist/sessions/policy.js +0 -23
- package/dist/sessions/policy.js.map +0 -1
- package/dist/store.d.ts +0 -46
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -177
- package/dist/store.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -10
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -80
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/edit.d.ts +0 -11
- package/dist/tools/edit.d.ts.map +0 -1
- package/dist/tools/edit.js +0 -131
- package/dist/tools/edit.js.map +0 -1
- package/dist/tools/event.d.ts.map +0 -1
- package/dist/tools/event.js +0 -252
- package/dist/tools/event.js.map +0 -1
- package/dist/tools/index.d.ts +0 -24
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -31
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/react.d.ts.map +0 -1
- package/dist/tools/react.js.map +0 -1
- package/dist/tools/read.d.ts +0 -11
- package/dist/tools/read.d.ts.map +0 -1
- package/dist/tools/read.js +0 -134
- package/dist/tools/read.js.map +0 -1
- package/dist/tools/sandbox.d.ts.map +0 -1
- package/dist/tools/sandbox.js.map +0 -1
- package/dist/tools/truncate.d.ts +0 -33
- package/dist/tools/truncate.d.ts.map +0 -1
- package/dist/tools/truncate.js +0 -184
- package/dist/tools/truncate.js.map +0 -1
- package/dist/tools/types.d.ts +0 -54
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/write.d.ts +0 -10
- package/dist/tools/write.d.ts.map +0 -1
- package/dist/tools/write.js +0 -29
- package/dist/tools/write.js.map +0 -1
- package/dist/trigger.d.ts +0 -22
- package/dist/trigger.d.ts.map +0 -1
- package/dist/trigger.js +0 -100
- package/dist/trigger.js.map +0 -1
- package/dist/utils/date.d.ts +0 -10
- package/dist/utils/date.d.ts.map +0 -1
- package/dist/utils/date.js +0 -23
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/env.d.ts +0 -3
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -12
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/file-guards.d.ts.map +0 -1
- package/dist/utils/file-guards.js.map +0 -1
- package/dist/utils/fs-atomic.d.ts +0 -10
- package/dist/utils/fs-atomic.d.ts.map +0 -1
- package/dist/utils/fs-atomic.js +0 -45
- package/dist/utils/fs-atomic.js.map +0 -1
- package/dist/utils/html.d.ts +0 -2
- package/dist/utils/html.d.ts.map +0 -1
- package/dist/utils/html.js +0 -4
- package/dist/utils/html.js.map +0 -1
- package/dist/utils/http-body.d.ts +0 -10
- package/dist/utils/http-body.d.ts.map +0 -1
- package/dist/utils/http-body.js +0 -34
- package/dist/utils/http-body.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/web/admin/portal.d.ts +0 -5
- package/dist/web/admin/portal.d.ts.map +0 -1
- package/dist/web/admin/portal.js +0 -2572
- package/dist/web/admin/portal.js.map +0 -1
- package/dist/web/admin/provider-models.d.ts.map +0 -1
- package/dist/web/admin/provider-models.js.map +0 -1
- package/dist/web/admin/store.d.ts +0 -13
- package/dist/web/admin/store.d.ts.map +0 -1
- package/dist/web/admin/store.js +0 -14
- package/dist/web/admin/store.js.map +0 -1
- package/dist/web/admin/types.d.ts +0 -30
- package/dist/web/admin/types.d.ts.map +0 -1
- package/dist/web/admin/types.js.map +0 -1
- package/dist/web/agent-events/portal.d.ts +0 -3
- package/dist/web/agent-events/portal.d.ts.map +0 -1
- package/dist/web/agent-events/portal.js +0 -18
- package/dist/web/agent-events/portal.js.map +0 -1
- package/dist/web/login/oauth.d.ts +0 -6
- package/dist/web/login/oauth.d.ts.map +0 -1
- package/dist/web/login/oauth.js.map +0 -1
- package/dist/web/login/portal.d.ts.map +0 -1
- package/dist/web/login/portal.js.map +0 -1
- package/dist/web/login/store.d.ts +0 -8
- package/dist/web/login/store.d.ts.map +0 -1
- package/dist/web/login/store.js +0 -15
- package/dist/web/login/store.js.map +0 -1
- package/dist/web/login/types.d.ts.map +0 -1
- package/dist/web/login/types.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- package/dist/web/session-view/portal.d.ts +0 -13
- package/dist/web/session-view/portal.d.ts.map +0 -1
- package/dist/web/session-view/portal.js.map +0 -1
- package/dist/web/session-view/service.d.ts +0 -6
- package/dist/web/session-view/service.d.ts.map +0 -1
- package/dist/web/session-view/service.js +0 -498
- package/dist/web/session-view/service.js.map +0 -1
- package/dist/web/session-view/store.d.ts +0 -8
- package/dist/web/session-view/store.d.ts.map +0 -1
- package/dist/web/session-view/store.js +0 -15
- package/dist/web/session-view/store.js.map +0 -1
- package/dist/web/session-view/types.d.ts.map +0 -1
- package/dist/web/session-view/types.js.map +0 -1
- package/dist/web/token-store.d.ts.map +0 -1
- package/dist/web/token-store.js.map +0 -1
- package/dist/web/types.d.ts.map +0 -1
- package/dist/web/types.js.map +0 -1
- /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/types.js +0 -0
- /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
- /package/dist/{tools → adapters/web/admin}/types.js +0 -0
- /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
- /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
- /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
- /package/dist/{web → adapters/web}/types.d.ts +0 -0
- /package/dist/{web/session-view → adapters/web}/types.js +0 -0
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{web → cli}/types.js +0 -0
- /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
- /package/dist/{tools → harness/tools}/react.d.ts +0 -0
package/dist/config.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { existsSync, readFileSync, renameSync, rmSync } from "fs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { readEnv } from "./
|
|
6
|
-
import { ensureDirExists, readJsonSchemaFileIfExists } from "./
|
|
7
|
-
import { atomicWritePrivateFile } from "./
|
|
2
|
+
import { existsSync, lstatSync, readFileSync, renameSync, rmSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { effectiveStateDir } from "./cli/arg-grammar.js";
|
|
5
|
+
import { readEnv } from "./env-manifest.js";
|
|
6
|
+
import { ensureDirExists, readJsonSchemaFileIfExists } from "./file-guards.js";
|
|
7
|
+
import { atomicWritePrivateFile } from "./file-guards.js";
|
|
8
8
|
import * as log from "./log.js";
|
|
9
9
|
export class MissingGlobalSettingsError extends Error {
|
|
10
10
|
constructor(settingsPath) {
|
|
@@ -18,10 +18,6 @@ const ONBOARD_SETTINGS = {
|
|
|
18
18
|
provider: "anthropic",
|
|
19
19
|
model: "claude-sonnet-4-6",
|
|
20
20
|
thinkingLevel: "off",
|
|
21
|
-
autoReply: {
|
|
22
|
-
provider: "anthropic",
|
|
23
|
-
model: "claude-haiku-4-5",
|
|
24
|
-
},
|
|
25
21
|
},
|
|
26
22
|
slack: {
|
|
27
23
|
replyMode: "top-level",
|
|
@@ -33,9 +29,11 @@ const ONBOARD_SETTINGS = {
|
|
|
33
29
|
cpus: "2",
|
|
34
30
|
memory: "4g",
|
|
35
31
|
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
// No pinned workspace door policy: with nothing set, the projection
|
|
33
|
+
// follows the platform's own channel vocabulary (public channels share
|
|
34
|
+
// workspace memory, private channels read it without writing, DMs stay
|
|
35
|
+
// isolated — see workspace-projection platformDerivedWorkspace).
|
|
36
|
+
// Deployments that predate this keep their explicit isolated setting.
|
|
39
37
|
defaultSharedVault: "",
|
|
40
38
|
},
|
|
41
39
|
};
|
|
@@ -50,11 +48,8 @@ const SettingsFileSchema = Type.Object({
|
|
|
50
48
|
Type.Literal("medium"),
|
|
51
49
|
Type.Literal("high"),
|
|
52
50
|
Type.Literal("xhigh"),
|
|
51
|
+
Type.Literal("max"),
|
|
53
52
|
])),
|
|
54
|
-
autoReply: Type.Optional(Type.Object({
|
|
55
|
-
provider: Type.Optional(Type.String()),
|
|
56
|
-
model: Type.Optional(Type.String()),
|
|
57
|
-
})),
|
|
58
53
|
})),
|
|
59
54
|
sentry: Type.Optional(Type.Object({
|
|
60
55
|
dsn: Type.Optional(Type.String()),
|
|
@@ -72,47 +67,96 @@ const SettingsFileSchema = Type.Object({
|
|
|
72
67
|
image: Type.Optional(Type.Object({
|
|
73
68
|
workspaceMount: Type.Optional(Type.Union([Type.Literal("private"), Type.Literal("full")])),
|
|
74
69
|
})),
|
|
70
|
+
workspace: Type.Optional(Type.Object({
|
|
71
|
+
doorPolicy: Type.Optional(Type.Union([Type.Literal("isolated"), Type.Literal("trusted")])),
|
|
72
|
+
layout: Type.Optional(Type.Union([
|
|
73
|
+
Type.Literal("conversation"),
|
|
74
|
+
Type.Literal("shared-support"),
|
|
75
|
+
Type.Literal("full"),
|
|
76
|
+
])),
|
|
77
|
+
visibility: Type.Optional(Type.Union([Type.Literal("public"), Type.Literal("private")])),
|
|
78
|
+
})),
|
|
75
79
|
defaultSharedVault: Type.Optional(Type.String()),
|
|
76
80
|
})),
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
/**
|
|
82
|
+
* MCP servers, keyed by name. Merged per key across scopes: a conversation
|
|
83
|
+
* entry overrides (or, with `disabled: true`, turns off) the same-name
|
|
84
|
+
* global entry; other global entries stay available. The reserved
|
|
85
|
+
* `open-connector` name is ignored by runner construction.
|
|
86
|
+
*/
|
|
87
|
+
mcpServers: Type.Optional(Type.Record(Type.String(), Type.Object({
|
|
88
|
+
command: Type.Optional(Type.String()),
|
|
89
|
+
args: Type.Optional(Type.Array(Type.String())),
|
|
90
|
+
env: Type.Optional(Type.Record(Type.String(), Type.String())),
|
|
91
|
+
url: Type.Optional(Type.String()),
|
|
92
|
+
headers: Type.Optional(Type.Record(Type.String(), Type.String())),
|
|
93
|
+
disabled: Type.Optional(Type.Boolean()),
|
|
94
|
+
}))),
|
|
81
95
|
});
|
|
82
96
|
function loadSettingsFile(settingsPath) {
|
|
83
97
|
return readJsonSchemaFileIfExists(settingsPath, SettingsFileSchema, (detail) => detail === "unexpected JSON shape"
|
|
84
98
|
? `Malformed settings file at ${settingsPath}: expected a JSON object at the top level`
|
|
85
99
|
: `Malformed settings file at ${settingsPath}: ${detail}`);
|
|
86
100
|
}
|
|
87
|
-
function getStateDir() {
|
|
88
|
-
const raw = readEnv("STATE_DIR");
|
|
89
|
-
return raw ? resolve(raw) : join(homedir(), ".mikan");
|
|
90
|
-
}
|
|
91
101
|
function normalizeSettingsConfig(config) {
|
|
92
102
|
return {
|
|
93
103
|
...(config.llm?.provider !== undefined ? { provider: config.llm.provider } : {}),
|
|
94
104
|
...(config.llm?.model !== undefined ? { model: config.llm.model } : {}),
|
|
95
105
|
...(config.llm?.thinkingLevel !== undefined ? { thinkingLevel: config.llm.thinkingLevel } : {}),
|
|
96
106
|
...(config.sentry?.dsn !== undefined ? { sentryDsn: config.sentry.dsn } : {}),
|
|
97
|
-
...(config.sandbox
|
|
98
|
-
...(config.sandbox?.memory !== undefined ? { sandboxMemory: config.sandbox.memory } : {}),
|
|
99
|
-
...(config.sandbox?.boost?.cpus !== undefined
|
|
100
|
-
? { sandboxBoostCpus: config.sandbox.boost.cpus }
|
|
101
|
-
: {}),
|
|
102
|
-
...(config.sandbox?.boost?.memory !== undefined
|
|
103
|
-
? { sandboxBoostMemory: config.sandbox.boost.memory }
|
|
104
|
-
: {}),
|
|
105
|
-
...(config.sandbox?.image?.workspaceMount !== undefined
|
|
106
|
-
? { sandboxImageWorkspaceMount: config.sandbox.image.workspaceMount }
|
|
107
|
-
: {}),
|
|
108
|
-
...(config.sandbox?.defaultSharedVault?.trim()
|
|
109
|
-
? { defaultSharedVault: config.sandbox.defaultSharedVault.trim() }
|
|
110
|
-
: {}),
|
|
107
|
+
...(config.sandbox !== undefined ? { sandbox: normalizeSandboxSettings(config.sandbox) } : {}),
|
|
111
108
|
...(config.slack !== undefined ? { slack: config.slack } : {}),
|
|
109
|
+
...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* File shape → in-memory shape for the sandbox group. An empty or
|
|
114
|
+
* whitespace-only `defaultSharedVault` means "no default" and is dropped;
|
|
115
|
+
* non-empty values are trimmed. Everything else passes through as-is.
|
|
116
|
+
*/
|
|
117
|
+
function normalizeSandboxSettings(sandbox) {
|
|
118
|
+
const defaultSharedVault = sandbox.defaultSharedVault?.trim();
|
|
119
|
+
const legacyWorkspace = sandbox.image?.workspaceMount === "private"
|
|
120
|
+
? { doorPolicy: "trusted", layout: "shared-support" }
|
|
121
|
+
: sandbox.image?.workspaceMount === "full"
|
|
122
|
+
? { doorPolicy: "trusted", layout: "full" }
|
|
123
|
+
: undefined;
|
|
124
|
+
const workspace = legacyWorkspace
|
|
125
|
+
? { ...legacyWorkspace, ...sandbox.workspace }
|
|
126
|
+
: sandbox.workspace;
|
|
127
|
+
return {
|
|
128
|
+
...(sandbox.cpus !== undefined ? { cpus: sandbox.cpus } : {}),
|
|
129
|
+
...(sandbox.memory !== undefined ? { memory: sandbox.memory } : {}),
|
|
130
|
+
...(sandbox.boost !== undefined ? { boost: sandbox.boost } : {}),
|
|
131
|
+
...(sandbox.image !== undefined ? { image: sandbox.image } : {}),
|
|
132
|
+
...(workspace !== undefined ? { workspace } : {}),
|
|
133
|
+
...(defaultSharedVault ? { defaultSharedVault } : {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Merge two sandbox settings groups. The merge invariant is LEAF-LEVEL:
|
|
138
|
+
* an override that only sets `sandbox.memory` keeps the base `sandbox.cpus`,
|
|
139
|
+
* and an override that only sets `boost.memory` keeps the base `boost.cpus`
|
|
140
|
+
* (same for `image`). This mirrors how the fields merged when they were
|
|
141
|
+
* flat top-level keys; a group-level spread would silently drop base leaves.
|
|
142
|
+
*/
|
|
143
|
+
function mergeSandboxSettings(base, override) {
|
|
144
|
+
if (!base)
|
|
145
|
+
return override;
|
|
146
|
+
if (!override)
|
|
147
|
+
return base;
|
|
148
|
+
return {
|
|
149
|
+
...base,
|
|
150
|
+
...override,
|
|
151
|
+
...(base.boost || override.boost ? { boost: { ...base.boost, ...override.boost } } : {}),
|
|
152
|
+
...(base.image || override.image ? { image: { ...base.image, ...override.image } } : {}),
|
|
153
|
+
...(base.workspace || override.workspace
|
|
154
|
+
? { workspace: { ...base.workspace, ...override.workspace } }
|
|
155
|
+
: {}),
|
|
112
156
|
};
|
|
113
157
|
}
|
|
114
158
|
function getSettingsPath() {
|
|
115
|
-
return join(
|
|
159
|
+
return join(effectiveStateDir(), "settings.json");
|
|
116
160
|
}
|
|
117
161
|
function requireGlobalSettings() {
|
|
118
162
|
const settingsPath = getSettingsPath();
|
|
@@ -128,33 +172,22 @@ function requireString(value, path) {
|
|
|
128
172
|
}
|
|
129
173
|
return value;
|
|
130
174
|
}
|
|
131
|
-
function requireThinkingLevel(value) {
|
|
132
|
-
return requireString(value, "llm.thinkingLevel");
|
|
133
|
-
}
|
|
134
175
|
function toAgentConfig(fromFile) {
|
|
135
176
|
const provider = requireString(fromFile.provider, "llm.provider");
|
|
136
177
|
const model = requireString(fromFile.model, "llm.model");
|
|
137
|
-
const thinkingLevel =
|
|
138
|
-
const sentryDsn = fromFile.sentryDsn
|
|
139
|
-
const
|
|
140
|
-
const sandboxMemory = fromFile.sandboxMemory;
|
|
141
|
-
const sandboxBoostCpus = fromFile.sandboxBoostCpus;
|
|
142
|
-
const sandboxBoostMemory = fromFile.sandboxBoostMemory;
|
|
143
|
-
const sandboxImageWorkspaceMount = fromFile.sandboxImageWorkspaceMount;
|
|
144
|
-
const defaultSharedVault = fromFile.defaultSharedVault;
|
|
178
|
+
const thinkingLevel = requireString(fromFile.thinkingLevel, "llm.thinkingLevel");
|
|
179
|
+
const sentryDsn = sentryDsnFrom(fromFile.sentryDsn);
|
|
180
|
+
const sandbox = fromFile.sandbox;
|
|
145
181
|
const slack = fromFile.slack;
|
|
182
|
+
const mcpServers = fromFile.mcpServers;
|
|
146
183
|
return {
|
|
147
184
|
provider,
|
|
148
185
|
model,
|
|
149
186
|
thinkingLevel,
|
|
150
187
|
sentryDsn,
|
|
151
|
-
|
|
152
|
-
sandboxMemory,
|
|
153
|
-
sandboxBoostCpus,
|
|
154
|
-
sandboxBoostMemory,
|
|
155
|
-
sandboxImageWorkspaceMount,
|
|
156
|
-
defaultSharedVault,
|
|
188
|
+
sandbox,
|
|
157
189
|
slack,
|
|
190
|
+
mcpServers,
|
|
158
191
|
};
|
|
159
192
|
}
|
|
160
193
|
function loadRawGlobalSettings() {
|
|
@@ -165,7 +198,9 @@ export function loadGlobalSettings() {
|
|
|
165
198
|
}
|
|
166
199
|
/**
|
|
167
200
|
* Host-authoritative location of a conversation's settings file:
|
|
168
|
-
* `<
|
|
201
|
+
* `<office state dir>/settings.json`. The Office value names both the
|
|
202
|
+
* state-dir key and the legacy pre-host-migration location (its workspace
|
|
203
|
+
* dir) — the key is never inferred from a directory basename.
|
|
169
204
|
*
|
|
170
205
|
* Conversation settings used to live at `<conversationDir>/settings.json`,
|
|
171
206
|
* but conversation dirs are bind-mounted read-write into sandbox containers
|
|
@@ -180,23 +215,23 @@ export function loadGlobalSettings() {
|
|
|
180
215
|
* migration marker — a legacy file (re)appearing later, e.g. planted from
|
|
181
216
|
* inside the sandbox, is never read again.
|
|
182
217
|
*/
|
|
183
|
-
export function conversationSettingsPath(
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
218
|
+
export function conversationSettingsPath(office) {
|
|
219
|
+
const hostPath = join(office.stateDir, "settings.json");
|
|
220
|
+
if (existsSync(hostPath)) {
|
|
221
|
+
assertSettingsFile(hostPath, "Host conversation settings");
|
|
187
222
|
return hostPath;
|
|
223
|
+
}
|
|
188
224
|
ensureDirExists(dirname(hostPath));
|
|
189
|
-
const legacyPath = join(
|
|
225
|
+
const legacyPath = join(office.dir, "settings.json");
|
|
190
226
|
let content = "{}\n";
|
|
191
227
|
let migrated = false;
|
|
192
228
|
if (existsSync(legacyPath)) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
229
|
+
assertSettingsFile(legacyPath, "Legacy conversation settings");
|
|
230
|
+
content = readFileSync(legacyPath, "utf-8");
|
|
231
|
+
// Validate before moving the file. A malformed legacy file must fail
|
|
232
|
+
// closed and remain available for an operator to repair.
|
|
233
|
+
loadSettingsFile(legacyPath);
|
|
234
|
+
migrated = true;
|
|
200
235
|
}
|
|
201
236
|
atomicWritePrivateFile(hostPath, content);
|
|
202
237
|
if (migrated) {
|
|
@@ -210,103 +245,53 @@ export function conversationSettingsPath(conversationDir) {
|
|
|
210
245
|
}
|
|
211
246
|
return hostPath;
|
|
212
247
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
*/
|
|
225
|
-
export function loadAutoReplyJudgeModel(conversationDir) {
|
|
226
|
-
const global = requireGlobalSettings();
|
|
227
|
-
const local = conversationDir
|
|
228
|
-
? (loadSettingsFile(conversationSettingsPath(conversationDir)) ?? {})
|
|
229
|
-
: {};
|
|
230
|
-
const merged = { ...global.llm, ...local.llm };
|
|
231
|
-
const judge = { ...global.llm?.autoReply, ...local.llm?.autoReply };
|
|
232
|
-
const provider = requireString(judge.provider ?? merged?.provider, "llm.autoReply.provider");
|
|
233
|
-
const model = requireString(judge.model ?? merged?.model, "llm.autoReply.model");
|
|
234
|
-
return { provider, model };
|
|
248
|
+
function assertSettingsFile(path, label) {
|
|
249
|
+
let stats;
|
|
250
|
+
try {
|
|
251
|
+
stats = lstatSync(path);
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
throw new Error(`${label} cannot be inspected: ${path}`, { cause: err });
|
|
255
|
+
}
|
|
256
|
+
if (stats.isSymbolicLink() || !stats.isFile()) {
|
|
257
|
+
throw new Error(`${label} must be a regular non-symlink file: ${path}`);
|
|
258
|
+
}
|
|
235
259
|
}
|
|
236
260
|
const AUTO_REPLY_FILE = "auto-reply";
|
|
237
261
|
const AUTO_REPLY_DISABLED_FILE = "auto-reply.disabled";
|
|
238
|
-
function
|
|
239
|
-
|
|
240
|
-
return text ? [text] : [];
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Load the mom-compatible auto-reply marker file state for a conversation.
|
|
244
|
-
*
|
|
245
|
-
* - `auto-reply` exists: enabled; empty file means reply to any top-level message.
|
|
246
|
-
* - `auto-reply.disabled` exists: disabled, preserving any rules text for re-enable.
|
|
247
|
-
* - neither exists: disabled.
|
|
248
|
-
*
|
|
249
|
-
* @deprecated Auto-reply is kept for compatibility while its future is undecided.
|
|
250
|
-
*/
|
|
251
|
-
export function loadConversationAutoReplyConfig(conversationDir) {
|
|
252
|
-
const enabledPath = join(conversationDir, AUTO_REPLY_FILE);
|
|
253
|
-
if (existsSync(enabledPath)) {
|
|
254
|
-
return { enabled: true, rules: readAutoReplyRulesFile(enabledPath) };
|
|
255
|
-
}
|
|
256
|
-
const disabledPath = join(conversationDir, AUTO_REPLY_DISABLED_FILE);
|
|
257
|
-
if (existsSync(disabledPath)) {
|
|
258
|
-
return { enabled: false, rules: readAutoReplyRulesFile(disabledPath) };
|
|
259
|
-
}
|
|
260
|
-
return { enabled: false, rules: [] };
|
|
262
|
+
export function slackConversationAutoReplyEnabled(office) {
|
|
263
|
+
return existsSync(join(office.dir, AUTO_REPLY_FILE));
|
|
261
264
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
ensureDirExists(conversationDir);
|
|
269
|
-
const enabledPath = join(conversationDir, AUTO_REPLY_FILE);
|
|
270
|
-
const disabledPath = join(conversationDir, AUTO_REPLY_DISABLED_FILE);
|
|
271
|
-
const targetPath = config.enabled ? enabledPath : disabledPath;
|
|
272
|
-
const otherPath = config.enabled ? disabledPath : enabledPath;
|
|
265
|
+
export function setSlackConversationAutoReply(office, enabled) {
|
|
266
|
+
ensureDirExists(office.dir);
|
|
267
|
+
const enabledPath = join(office.dir, AUTO_REPLY_FILE);
|
|
268
|
+
const disabledPath = join(office.dir, AUTO_REPLY_DISABLED_FILE);
|
|
269
|
+
const targetPath = enabled ? enabledPath : disabledPath;
|
|
270
|
+
const otherPath = enabled ? disabledPath : enabledPath;
|
|
273
271
|
if (existsSync(otherPath)) {
|
|
274
272
|
renameSync(otherPath, targetPath);
|
|
273
|
+
return;
|
|
275
274
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
export function resolveWorkspaceDirFromArgv(args = process.argv.slice(2)) {
|
|
279
|
-
for (let i = 0; i < args.length; i++) {
|
|
280
|
-
const arg = args[i];
|
|
281
|
-
if (arg === "--sandbox" || arg === "--download" || arg === "--state-dir") {
|
|
282
|
-
i += 1;
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
if (arg === "--version" || arg === "-v" || arg === "-V" || arg === "--onboard") {
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
|
-
if (arg.startsWith("--sandbox=") ||
|
|
289
|
-
arg.startsWith("--download=") ||
|
|
290
|
-
arg.startsWith("--state-dir=")) {
|
|
291
|
-
continue;
|
|
292
|
-
}
|
|
293
|
-
if (!arg.startsWith("-")) {
|
|
294
|
-
return arg;
|
|
295
|
-
}
|
|
275
|
+
if (enabled && !existsSync(targetPath)) {
|
|
276
|
+
atomicWritePrivateFile(targetPath, "");
|
|
296
277
|
}
|
|
297
|
-
return undefined;
|
|
298
278
|
}
|
|
299
|
-
export function
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return
|
|
279
|
+
export function resolveConversationSettings(office) {
|
|
280
|
+
const globalConfig = loadRawGlobalSettings();
|
|
281
|
+
const conversationConfig = normalizeSettingsConfig(loadSettingsFile(conversationSettingsPath(office)) ?? {});
|
|
282
|
+
// MCP servers merge per key: a conversation redefines or disables individual
|
|
283
|
+
// servers without losing the rest of the global set. Runner construction
|
|
284
|
+
// removes the reserved open-connector entry before loading servers.
|
|
285
|
+
const mcpServers = { ...globalConfig.mcpServers, ...conversationConfig.mcpServers };
|
|
286
|
+
// The sandbox group merges at the leaf level (see mergeSandboxSettings):
|
|
287
|
+
// a conversation that only sets sandbox.memory keeps the global sandbox.cpus.
|
|
288
|
+
const sandbox = mergeSandboxSettings(globalConfig.sandbox, conversationConfig.sandbox);
|
|
289
|
+
return toAgentConfig({
|
|
290
|
+
...globalConfig,
|
|
291
|
+
...conversationConfig,
|
|
292
|
+
...(sandbox ? { sandbox } : {}),
|
|
293
|
+
...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
|
|
294
|
+
});
|
|
310
295
|
}
|
|
311
296
|
/**
|
|
312
297
|
* True when `child` is `parent` or a path inside it. Purely lexical (no
|
|
@@ -319,39 +304,49 @@ export function isPathInside(child, parent) {
|
|
|
319
304
|
return childPath === parentPath || childPath.startsWith(parentPath + "/");
|
|
320
305
|
}
|
|
321
306
|
/**
|
|
322
|
-
* The state dir (
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
* state
|
|
326
|
-
*
|
|
327
|
-
* host mode has no mounts, so only warn about the bad hygiene.
|
|
307
|
+
* The state dir (settings, office records, vaults) must never live inside
|
|
308
|
+
* the working dir: conversation opt-in "full" mode mounts the entire working
|
|
309
|
+
* dir read-write into sandbox containers, which would expose host-authoritative
|
|
310
|
+
* state and credentials. Fatal under sandboxed modes; host mode has no mounts,
|
|
311
|
+
* so only warn about the bad hygiene.
|
|
328
312
|
*/
|
|
329
313
|
export function assertStateDirOutsideWorkspace(stateDir, workingDir, sandboxType) {
|
|
330
314
|
if (!isPathInside(stateDir, workingDir))
|
|
331
315
|
return;
|
|
332
316
|
const message = `--state-dir (${stateDir}) must not be inside the working directory (${workingDir}): ` +
|
|
333
317
|
`sandbox containers mount the working directory, and a mounted state dir ` +
|
|
334
|
-
`would expose
|
|
318
|
+
`would expose settings, office records, vaults, and credentials to sandboxed code.`;
|
|
335
319
|
if (sandboxType === "host") {
|
|
336
320
|
log.logWarning("Insecure state dir location", message);
|
|
337
321
|
return;
|
|
338
322
|
}
|
|
339
323
|
throw new Error(message);
|
|
340
324
|
}
|
|
325
|
+
/** Settings-file DSN wins over SENTRY_DSN env — the rule lives only here. */
|
|
326
|
+
function sentryDsnFrom(fromFile) {
|
|
327
|
+
return fromFile || readEnv("SENTRY_DSN");
|
|
328
|
+
}
|
|
341
329
|
export function resolveSentryDsn() {
|
|
342
330
|
const fromFile = normalizeSettingsConfig(loadSettingsFile(getSettingsPath()) ?? {});
|
|
343
|
-
|
|
344
|
-
return fromFile.sentryDsn;
|
|
345
|
-
}
|
|
346
|
-
return process.env.SENTRY_DSN;
|
|
331
|
+
return sentryDsnFrom(fromFile.sentryDsn);
|
|
347
332
|
}
|
|
348
|
-
export function createGlobalSettingsFile(stateDir) {
|
|
333
|
+
export function createGlobalSettingsFile(stateDir, llm) {
|
|
349
334
|
const settingsPath = join(stateDir, "settings.json");
|
|
350
335
|
if (existsSync(settingsPath)) {
|
|
351
336
|
throw new Error(`Global settings already exists at ${settingsPath}`);
|
|
352
337
|
}
|
|
353
338
|
ensureDirExists(stateDir);
|
|
354
|
-
|
|
339
|
+
const settings = llm
|
|
340
|
+
? {
|
|
341
|
+
...ONBOARD_SETTINGS,
|
|
342
|
+
llm: {
|
|
343
|
+
...ONBOARD_SETTINGS.llm,
|
|
344
|
+
provider: llm.provider,
|
|
345
|
+
model: llm.model,
|
|
346
|
+
},
|
|
347
|
+
}
|
|
348
|
+
: ONBOARD_SETTINGS;
|
|
349
|
+
atomicWritePrivateFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
355
350
|
return settingsPath;
|
|
356
351
|
}
|
|
357
352
|
/**
|
|
@@ -373,8 +368,9 @@ function compactSettingsConfig(config) {
|
|
|
373
368
|
...(hasDefinedValue(config.llm) ? { llm: config.llm } : {}),
|
|
374
369
|
...(hasDefinedValue(config.sentry) ? { sentry: config.sentry } : {}),
|
|
375
370
|
...(hasDefinedValue(config.sandbox) ? { sandbox: config.sandbox } : {}),
|
|
376
|
-
...(hasDefinedValue(config.autoReply) ? { autoReply: config.autoReply } : {}),
|
|
377
371
|
...(hasDefinedValue(config.slack) ? { slack: config.slack } : {}),
|
|
372
|
+
// An empty map means "all servers removed".
|
|
373
|
+
...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
|
|
378
374
|
};
|
|
379
375
|
}
|
|
380
376
|
function patchSettingsConfig(existing, config) {
|
|
@@ -390,61 +386,106 @@ function patchSettingsConfig(existing, config) {
|
|
|
390
386
|
...existing.sentry,
|
|
391
387
|
...(config.sentryDsn !== undefined ? { dsn: config.sentryDsn } : {}),
|
|
392
388
|
},
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
...(config.sandboxBoostCpus !== undefined || config.sandboxBoostMemory !== undefined
|
|
398
|
-
? {
|
|
399
|
-
boost: {
|
|
400
|
-
...existing.sandbox?.boost,
|
|
401
|
-
...(config.sandboxBoostCpus !== undefined ? { cpus: config.sandboxBoostCpus } : {}),
|
|
402
|
-
...(config.sandboxBoostMemory !== undefined
|
|
403
|
-
? { memory: config.sandboxBoostMemory }
|
|
404
|
-
: {}),
|
|
405
|
-
},
|
|
406
|
-
}
|
|
407
|
-
: {}),
|
|
408
|
-
...(config.sandboxImageWorkspaceMount !== undefined
|
|
409
|
-
? {
|
|
410
|
-
image: {
|
|
411
|
-
...existing.sandbox?.image,
|
|
412
|
-
workspaceMount: config.sandboxImageWorkspaceMount,
|
|
413
|
-
},
|
|
414
|
-
}
|
|
415
|
-
: {}),
|
|
416
|
-
...(config.defaultSharedVault !== undefined
|
|
417
|
-
? { defaultSharedVault: config.defaultSharedVault }
|
|
418
|
-
: {}),
|
|
419
|
-
},
|
|
389
|
+
// Leaf-level merge: a patch that only sets sandbox.boost.memory keeps the
|
|
390
|
+
// existing boost.cpus (and every other existing leaf). compactSettingsConfig
|
|
391
|
+
// drops the group entirely when it ends up with no defined values.
|
|
392
|
+
sandbox: mergeSandboxSettings(existing.sandbox, config.sandbox) ?? {},
|
|
420
393
|
slack: {
|
|
421
394
|
...existing.slack,
|
|
422
395
|
...config.slack,
|
|
423
396
|
},
|
|
397
|
+
// The portal edits the full MCP map, and
|
|
398
|
+
// a merge would make removing a server impossible.
|
|
399
|
+
...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
|
|
424
400
|
};
|
|
425
401
|
return compactSettingsConfig(patched);
|
|
426
402
|
}
|
|
427
|
-
function
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
}
|
|
403
|
+
function loadSettingsFileForUpdate(settingsPath, defaultSettings) {
|
|
404
|
+
if (!existsSync(settingsPath))
|
|
405
|
+
return defaultSettings;
|
|
406
|
+
try {
|
|
407
|
+
return loadSettingsFile(settingsPath) ?? {};
|
|
408
|
+
}
|
|
409
|
+
catch (err) {
|
|
410
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
411
|
+
const message = detail.startsWith("Malformed settings file")
|
|
412
|
+
? detail.replace("Malformed settings file", "Refusing to overwrite malformed settings file")
|
|
413
|
+
: detail;
|
|
414
|
+
throw new Error(message, { cause: err });
|
|
440
415
|
}
|
|
416
|
+
}
|
|
417
|
+
function updateSettingsFile(settingsPath, patch, defaultSettings) {
|
|
418
|
+
const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);
|
|
441
419
|
ensureDirExists(dirname(settingsPath));
|
|
442
420
|
atomicWritePrivateFile(settingsPath, JSON.stringify(patchSettingsConfig(existing, patch), null, 2));
|
|
443
421
|
}
|
|
444
422
|
export function updateGlobalSettings(patch) {
|
|
445
|
-
updateSettingsFile(
|
|
423
|
+
updateSettingsFile(getSettingsPath(), patch, ONBOARD_SETTINGS);
|
|
424
|
+
}
|
|
425
|
+
export function updateConversationSettings(office, patch) {
|
|
426
|
+
updateSettingsFile(conversationSettingsPath(office), patch, {});
|
|
446
427
|
}
|
|
447
|
-
|
|
448
|
-
|
|
428
|
+
/**
|
|
429
|
+
* The two scope-level MCP server maps, unmerged: the portal edits each scope's
|
|
430
|
+
* own file, so it needs the raw per-scope values, not the effective merge
|
|
431
|
+
* (`resolveConversationSettings` owns that).
|
|
432
|
+
*/
|
|
433
|
+
export function loadScopeMcpServers(office) {
|
|
434
|
+
return {
|
|
435
|
+
global: loadRawGlobalSettings().mcpServers ?? {},
|
|
436
|
+
conversation: loadSettingsFile(conversationSettingsPath(office))?.mcpServers ?? {},
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* The conversation's own door-policy override (legacy `image.workspaceMount`
|
|
441
|
+
* included), or null when the office follows the global default. Missing
|
|
442
|
+
* `visibility` on a shared-support choice defaults to "public" downstream
|
|
443
|
+
* (see resolveEffectiveWorkspace), preserving today's read-write behavior for
|
|
444
|
+
* every office that predates this setting.
|
|
445
|
+
*/
|
|
446
|
+
export function loadConversationWorkspaceOverride(office) {
|
|
447
|
+
const file = loadSettingsFile(conversationSettingsPath(office));
|
|
448
|
+
const sandbox = file?.sandbox;
|
|
449
|
+
if (sandbox?.workspace?.doorPolicy === "isolated")
|
|
450
|
+
return { doorPolicy: "isolated" };
|
|
451
|
+
if (sandbox?.workspace?.doorPolicy === "trusted") {
|
|
452
|
+
if (sandbox.workspace.layout === "full")
|
|
453
|
+
return { doorPolicy: "trusted", layout: "full" };
|
|
454
|
+
return {
|
|
455
|
+
doorPolicy: "trusted",
|
|
456
|
+
layout: "shared-support",
|
|
457
|
+
...(sandbox.workspace.visibility ? { visibility: sandbox.workspace.visibility } : {}),
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
if (sandbox?.image?.workspaceMount === "full")
|
|
461
|
+
return { doorPolicy: "trusted", layout: "full" };
|
|
462
|
+
if (sandbox?.image?.workspaceMount === "private") {
|
|
463
|
+
return { doorPolicy: "trusted", layout: "shared-support" };
|
|
464
|
+
}
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
export function setConversationWorkspacePolicy(office, choice) {
|
|
468
|
+
writeWorkspacePolicy(conversationSettingsPath(office), choice, {});
|
|
469
|
+
}
|
|
470
|
+
export function setGlobalWorkspacePolicy(choice) {
|
|
471
|
+
writeWorkspacePolicy(getSettingsPath(), choice, ONBOARD_SETTINGS);
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* The generic settings patch merges leaves and cannot remove keys, so the
|
|
475
|
+
* door-policy writer edits the file shape directly: it always drops the
|
|
476
|
+
* legacy `image.workspaceMount` (the explicit choice replaces it) and either
|
|
477
|
+
* sets or removes the `workspace` group.
|
|
478
|
+
*/
|
|
479
|
+
function writeWorkspacePolicy(settingsPath, choice, defaultSettings) {
|
|
480
|
+
const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);
|
|
481
|
+
const { workspaceMount: _legacy, ...image } = existing.sandbox?.image ?? {};
|
|
482
|
+
const { workspace: _previous, image: _image, ...sandboxRest } = existing.sandbox ?? {};
|
|
483
|
+
const sandbox = {
|
|
484
|
+
...sandboxRest,
|
|
485
|
+
...(hasDefinedValue(image) ? { image } : {}),
|
|
486
|
+
...(choice ? { workspace: choice } : {}),
|
|
487
|
+
};
|
|
488
|
+
ensureDirExists(dirname(settingsPath));
|
|
489
|
+
atomicWritePrivateFile(settingsPath, JSON.stringify(compactSettingsConfig({ ...existing, sandbox }), null, 2));
|
|
449
490
|
}
|
|
450
491
|
//# sourceMappingURL=config.js.map
|