@geminixiang/mikan 1.0.0-beta.3 → 1.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +563 -0
- package/README.md +60 -24
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +1 -0
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +47 -65
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +46 -211
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +86 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +640 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +314 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +19 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +9 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +98 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +28 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +90 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +405 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +53 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +32 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +56 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +19 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +105 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +21 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +21 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +17 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +372 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js +2 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/intake.d.ts +16 -5
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +84 -22
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts +7 -0
- package/dist/adapters/progressive-renderer.d.ts.map +1 -0
- package/dist/adapters/progressive-renderer.js +383 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +111 -111
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +10 -6
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +173 -145
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +3 -14
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +126 -323
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +5 -8
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +11 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +45 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +106 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +37 -0
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +1 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +51 -63
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +55 -182
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +86 -10
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent.d.ts +14 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +745 -243
- package/dist/agent.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +25 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +59 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +5 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +112 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-dev.d.ts +2 -0
- package/dist/cli/ext-dev.d.ts.map +1 -0
- package/dist/cli/ext-dev.js +177 -0
- package/dist/cli/ext-dev.js.map +1 -0
- package/dist/cli/ext-git.d.ts +17 -0
- package/dist/cli/ext-git.d.ts.map +1 -0
- package/dist/cli/ext-git.js +107 -0
- package/dist/cli/ext-git.js.map +1 -0
- package/dist/cli/ext.d.ts +2 -0
- package/dist/cli/ext.d.ts.map +1 -0
- package/dist/cli/ext.js +222 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/cli/types.d.ts +20 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +2 -1
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +2 -6
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +18 -8
- package/dist/commands/extensions.js.map +1 -1
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +35 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +30 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +121 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts +2 -3
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +57 -20
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +10 -2
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/registry.d.ts +2 -2
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +1 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +23 -17
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/text.d.ts +2 -0
- package/dist/commands/text.d.ts.map +1 -0
- package/dist/commands/text.js +16 -0
- package/dist/commands/text.js.map +1 -0
- package/dist/commands/types.d.ts +70 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +1 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +102 -95
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +28 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +214 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +9 -73
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +7 -6
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +105 -110
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/auth.d.ts +2 -1
- package/dist/harness/auth.d.ts.map +1 -1
- package/dist/harness/auth.js +6 -0
- package/dist/harness/auth.js.map +1 -1
- package/dist/harness/event-format.d.ts +25 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +159 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/blockkit.d.ts +19 -0
- package/dist/harness/extensions/blockkit.d.ts.map +1 -0
- package/dist/harness/extensions/blockkit.js +42 -0
- package/dist/harness/extensions/blockkit.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +25 -48
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +373 -113
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +75 -2
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +239 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +318 -25
- package/dist/harness/extensions/types.d.ts.map +1 -1
- package/dist/harness/extensions/types.js.map +1 -1
- package/dist/harness/index.d.ts +18 -8
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +7 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +10 -0
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +50 -54
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +230 -44
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +9 -5
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +131 -30
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/settings.d.ts +2 -20
- package/dist/harness/settings.d.ts.map +1 -1
- package/dist/harness/settings.js +11 -0
- package/dist/harness/settings.js.map +1 -1
- package/dist/harness/skills.d.ts +2 -29
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +8 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +290 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent-runner.d.ts +39 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +615 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +263 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage.d.ts +6 -0
- package/dist/harness/usage.d.ts.map +1 -0
- package/dist/harness/usage.js +32 -0
- package/dist/harness/usage.js.map +1 -0
- package/dist/index.d.ts +33 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -6
- package/dist/index.js.map +1 -1
- package/dist/main.js +253 -109
- package/dist/main.js.map +1 -1
- package/dist/observability/instrument.js +6 -4
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +3 -2
- package/dist/observability/sentry.js.map +1 -1
- package/dist/packages/admin.d.ts +17 -0
- package/dist/packages/admin.d.ts.map +1 -0
- package/dist/packages/admin.js +96 -0
- package/dist/packages/admin.js.map +1 -0
- package/dist/packages/index.d.ts +6 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +6 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/inspect.d.ts +11 -0
- package/dist/packages/inspect.d.ts.map +1 -0
- package/dist/packages/inspect.js +100 -0
- package/dist/packages/inspect.js.map +1 -0
- package/dist/packages/materialize.d.ts +39 -0
- package/dist/packages/materialize.d.ts.map +1 -0
- package/dist/packages/materialize.js +300 -0
- package/dist/packages/materialize.js.map +1 -0
- package/dist/packages/resolve.d.ts +25 -0
- package/dist/packages/resolve.d.ts.map +1 -0
- package/dist/packages/resolve.js +212 -0
- package/dist/packages/resolve.js.map +1 -0
- package/dist/packages/source.d.ts +33 -0
- package/dist/packages/source.d.ts.map +1 -0
- package/dist/packages/source.js +177 -0
- package/dist/packages/source.js.map +1 -0
- package/dist/packages/types.d.ts +104 -0
- package/dist/packages/types.d.ts.map +1 -0
- package/dist/packages/types.js +2 -0
- package/dist/packages/types.js.map +1 -0
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +6 -6
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +481 -98
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +28 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +161 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +45 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +3 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +11 -0
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +4 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +12 -2
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +3 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +11 -1
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin.d.ts +57 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +764 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +4 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +52 -0
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +16 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +42 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/image.d.ts.map +1 -1
- package/dist/sandbox/image.js +1 -0
- package/dist/sandbox/image.js.map +1 -1
- package/dist/sandbox/index.d.ts +15 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +25 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/path-context.js +18 -8
- package/dist/sandbox/path-context.js.map +1 -1
- package/dist/sandbox/types.d.ts +65 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +12 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +38 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +25 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +98 -124
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +9 -0
- package/dist/sessions/conversation-log.d.ts.map +1 -0
- package/dist/sessions/conversation-log.js +47 -0
- package/dist/sessions/conversation-log.js.map +1 -0
- package/dist/sessions/history-line.d.ts +20 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +24 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/policy.d.ts.map +1 -1
- package/dist/sessions/policy.js +5 -3
- package/dist/sessions/policy.js.map +1 -1
- package/dist/sessions/rotation.d.ts +2 -0
- package/dist/sessions/rotation.d.ts.map +1 -0
- package/dist/sessions/rotation.js +39 -0
- package/dist/sessions/rotation.js.map +1 -0
- package/dist/sessions/session-key.d.ts +40 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +92 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +40 -18
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +17 -4
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +8 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +43 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/subagent-progress.d.ts +43 -0
- package/dist/subagent-progress.d.ts.map +1 -0
- package/dist/subagent-progress.js +220 -0
- package/dist/subagent-progress.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +25 -17
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +10 -12
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/event.d.ts +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/event.js +53 -43
- package/dist/tools/event.js.map +1 -1
- package/dist/tools/generate-image.d.ts +17 -0
- package/dist/tools/generate-image.d.ts.map +1 -0
- package/dist/tools/generate-image.js +63 -0
- package/dist/tools/generate-image.js.map +1 -0
- package/dist/tools/host-fn-tool.d.ts +21 -0
- package/dist/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/tools/host-fn-tool.js +32 -0
- package/dist/tools/host-fn-tool.js.map +1 -0
- package/dist/tools/index.d.ts +14 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +28 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/react.d.ts +15 -0
- package/dist/tools/react.d.ts.map +1 -0
- package/dist/tools/react.js +29 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +37 -31
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +14 -9
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent-slots.d.ts +28 -0
- package/dist/tools/subagent-slots.d.ts.map +1 -0
- package/dist/tools/subagent-slots.js +72 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +54 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +401 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +40 -6
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +2 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -2
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +232 -32
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/date.d.ts +1 -1
- package/dist/utils/date.js +1 -1
- package/dist/utils/date.js.map +1 -1
- package/dist/vault/disabled.d.ts +9 -0
- package/dist/vault/disabled.d.ts.map +1 -0
- package/dist/vault/disabled.js +22 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts +0 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +30 -33
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/injection.d.ts +10 -0
- package/dist/vault/injection.d.ts.map +1 -0
- package/dist/vault/injection.js +30 -0
- package/dist/vault/injection.js.map +1 -0
- package/dist/vault/policy.d.ts +20 -0
- package/dist/vault/policy.d.ts.map +1 -0
- package/dist/vault/policy.js +20 -0
- package/dist/vault/policy.js.map +1 -0
- package/dist/vault/types.d.ts +4 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/web/admin/portal.d.ts +17 -2
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +385 -155
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +18 -0
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/agent-events/portal.d.ts.map +1 -1
- package/dist/web/agent-events/portal.js +2 -1
- package/dist/web/agent-events/portal.js.map +1 -1
- package/dist/web/login/oauth.d.ts +2 -3
- package/dist/web/login/oauth.d.ts.map +1 -1
- package/dist/web/login/oauth.js +0 -31
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.js +1 -1
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/login/types.d.ts +0 -11
- package/dist/web/login/types.d.ts.map +1 -1
- package/dist/web/login/types.js.map +1 -1
- package/dist/web/portal-shell.d.ts +4 -0
- package/dist/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → web/portal-shell.js} +2 -2
- package/dist/web/portal-shell.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +7 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/command.d.ts.map +1 -1
- package/dist/web/session-view/command.js +4 -1
- package/dist/web/session-view/command.js.map +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +4 -3
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/service.js +2 -1
- package/dist/web/session-view/service.js.map +1 -1
- package/dist/web/session-view/types.d.ts +2 -1
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/dist/workspace-projection/index.d.ts +5 -0
- package/dist/workspace-projection/index.d.ts.map +1 -0
- package/dist/workspace-projection/index.js +71 -0
- package/dist/workspace-projection/index.js.map +1 -0
- package/dist/workspace-projection/types.d.ts +7 -0
- package/dist/workspace-projection/types.d.ts.map +1 -0
- package/dist/workspace-projection/types.js +2 -0
- package/dist/workspace-projection/types.js.map +1 -0
- package/package.json +28 -15
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{download.js → cli/download.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/commands/text.ts"],"names":[],"mappings":"AAkBA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { COMMAND_MANIFEST } from "./manifest.js";
|
|
2
|
+
/**
|
|
3
|
+
* Chat-command text recognition, derived from the command manifest so the
|
|
4
|
+
* inventory has a single source of truth. Session resume uses it to keep
|
|
5
|
+
* command messages out of replayed history.
|
|
6
|
+
*
|
|
7
|
+
* The `pi-[\w-]+` alternative is a catch-all for platform-prefixed command
|
|
8
|
+
* names (including ones a platform registers but this build no longer
|
|
9
|
+
* handles), independent of the manifest.
|
|
10
|
+
*/
|
|
11
|
+
const COMMAND_NAMES = COMMAND_MANIFEST.flatMap((entry) => [entry.name].concat(entry.aliases ?? []));
|
|
12
|
+
const COMMAND_TEXT_PATTERN = new RegExp(`^\\/(?:pi-[\\w-]+|${COMMAND_NAMES.join("|")})(?:@\\w+)?(?:\\s|$)`, "i");
|
|
13
|
+
export function isCommandText(text) {
|
|
14
|
+
return COMMAND_TEXT_PATTERN.test(text.trim());
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/commands/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;AAEpG,MAAM,oBAAoB,GAAG,IAAI,MAAM,CACrC,qBAAqB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAClE,GAAG,CACJ,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { COMMAND_MANIFEST } from \"./manifest.js\";\n\n/**\n * Chat-command text recognition, derived from the command manifest so the\n * inventory has a single source of truth. Session resume uses it to keep\n * command messages out of replayed history.\n *\n * The `pi-[\\w-]+` alternative is a catch-all for platform-prefixed command\n * names (including ones a platform registers but this build no longer\n * handles), independent of the manifest.\n */\nconst COMMAND_NAMES = COMMAND_MANIFEST.flatMap((entry) => [entry.name].concat(entry.aliases ?? []));\n\nconst COMMAND_TEXT_PATTERN = new RegExp(\n `^\\\\/(?:pi-[\\\\w-]+|${COMMAND_NAMES.join(\"|\")})(?:@\\\\w+)?(?:\\\\s|$)`,\n \"i\",\n);\n\nexport function isCommandText(text: string): boolean {\n return COMMAND_TEXT_PATTERN.test(text.trim());\n}\n"]}
|
package/dist/commands/types.d.ts
CHANGED
|
@@ -1,8 +1,53 @@
|
|
|
1
1
|
import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
2
3
|
import type { MessagingBot, ConversationContext, PlatformName } from "../adapter.js";
|
|
3
4
|
import type { DockerContainerManager } from "../provisioner.js";
|
|
4
5
|
import type { SandboxConfig } from "../sandbox/index.js";
|
|
6
|
+
import type { SandboxResourceController } from "../types.js";
|
|
5
7
|
import type { VaultManager } from "../vault/index.js";
|
|
8
|
+
interface CommandArgSpec {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
required: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Data for the Slack adapter's generic slash route (how the synthesized
|
|
15
|
+
* command event is built). All flags default to false.
|
|
16
|
+
*/
|
|
17
|
+
export interface SlackSlashRoute {
|
|
18
|
+
/** Append the slash payload's free text to the synthesized command text. */
|
|
19
|
+
includeText?: boolean;
|
|
20
|
+
/** Scope the event to the invoking thread (thread-scoped session key). */
|
|
21
|
+
thread?: boolean;
|
|
22
|
+
/** Outside DMs, mark the event `private_command` so replies stay between the bot and the user. */
|
|
23
|
+
privateCommand?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface CommandManifestEntry {
|
|
26
|
+
/** Canonical name without slash, e.g. "login"; `/login` and `/pi-login` are derived. */
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
/** Extra accepted spellings beyond `name` (e.g. "autoreply"); each also gets a `pi-` form. */
|
|
30
|
+
aliases?: readonly string[];
|
|
31
|
+
/** Optional single free-text argument for platforms that register typed args. */
|
|
32
|
+
arg?: CommandArgSpec;
|
|
33
|
+
/** Accepted without a leading slash. Per CONTEXT.md, only `session`. */
|
|
34
|
+
bare?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Routed by conversation intake as a magic word, never by a command
|
|
37
|
+
* handler. Such an entry exists for platform registration/UI only.
|
|
38
|
+
*/
|
|
39
|
+
magicWord?: boolean;
|
|
40
|
+
/** Slack slash-command name, e.g. "/pi-login". Absent = not a Slack slash command. */
|
|
41
|
+
slackCommand?: string;
|
|
42
|
+
/** Slack routing data; absent for `new`, whose Slack dispatch is bespoke. */
|
|
43
|
+
slackRoute?: SlackSlashRoute;
|
|
44
|
+
/** Registered as a Discord application command. */
|
|
45
|
+
discord?: boolean;
|
|
46
|
+
/** Listed in Telegram's command menu; `description` overrides the shared one. */
|
|
47
|
+
telegramMenu?: {
|
|
48
|
+
description?: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
6
51
|
export interface LinkTokenStoreLike {
|
|
7
52
|
create(platform: PlatformName, platformUserId: string, conversationId: string, vaultId: string, providerId: string): {
|
|
8
53
|
token: string;
|
|
@@ -13,7 +58,7 @@ export interface SessionViewTokenStoreLike {
|
|
|
13
58
|
token: string;
|
|
14
59
|
};
|
|
15
60
|
}
|
|
16
|
-
interface AdminTokenStoreLike {
|
|
61
|
+
export interface AdminTokenStoreLike {
|
|
17
62
|
create(args: {
|
|
18
63
|
platform: PlatformName;
|
|
19
64
|
platformUserId: string;
|
|
@@ -24,7 +69,7 @@ interface AdminTokenStoreLike {
|
|
|
24
69
|
};
|
|
25
70
|
}
|
|
26
71
|
interface CommandRuntimeBridge {
|
|
27
|
-
handleNewCommand(sessionKey: string, conversationId: string, bot: MessagingBot): Promise<void>;
|
|
72
|
+
handleNewCommand(sessionKey: string, conversationId: string, bot: MessagingBot, message: ConversationContext["message"], responder: ConversationContext["responder"], platform: ConversationContext["platform"]): Promise<void>;
|
|
28
73
|
switchConversationModel(conversationId: string, provider: string, model: string): boolean;
|
|
29
74
|
refreshConversationEnvironment(conversationId: string): boolean;
|
|
30
75
|
}
|
|
@@ -34,6 +79,7 @@ export interface CommandServices {
|
|
|
34
79
|
sandbox: SandboxConfig;
|
|
35
80
|
vaultManager: VaultManager;
|
|
36
81
|
provisioner?: DockerContainerManager;
|
|
82
|
+
resourceController?: SandboxResourceController;
|
|
37
83
|
linkTokenStore: LinkTokenStoreLike;
|
|
38
84
|
sessionViewTokenStore: SessionViewTokenStoreLike;
|
|
39
85
|
adminTokenStore: AdminTokenStoreLike;
|
|
@@ -44,6 +90,7 @@ export interface CommandContext {
|
|
|
44
90
|
responder: ConversationContext["responder"];
|
|
45
91
|
platform: PlatformName;
|
|
46
92
|
platformUserId: string;
|
|
93
|
+
platformUserName?: string;
|
|
47
94
|
conversationId: string;
|
|
48
95
|
vaultConversationId?: string;
|
|
49
96
|
sessionKey: string;
|
|
@@ -54,13 +101,34 @@ export interface CommandContext {
|
|
|
54
101
|
export interface CommandHandler {
|
|
55
102
|
tryHandle(context: CommandContext): Promise<boolean>;
|
|
56
103
|
}
|
|
104
|
+
/** Minimal model lookup contract used by the model command. */
|
|
105
|
+
export interface ModelRegistry {
|
|
106
|
+
find(provider: string, modelId: string): Model<Api> | undefined;
|
|
107
|
+
}
|
|
57
108
|
export interface ParsedModelCommand {
|
|
58
109
|
provider?: string;
|
|
110
|
+
/** Model id without a thinking-level suffix, when one was supplied. */
|
|
59
111
|
model?: string;
|
|
112
|
+
/** Complete model id candidate, including a possible colon suffix. */
|
|
113
|
+
modelCandidate?: string;
|
|
114
|
+
/** Suffix kept for handler-side validation after exact model lookup. */
|
|
115
|
+
thinkingLevelCandidate?: string;
|
|
60
116
|
thinkingLevel?: ThinkingLevel;
|
|
117
|
+
error?: "invalid_spec";
|
|
61
118
|
}
|
|
62
119
|
export interface ParsedSandboxCommand {
|
|
63
120
|
action?: "boost" | "private" | "full";
|
|
64
121
|
}
|
|
122
|
+
export type ParsedLoginCommand = {
|
|
123
|
+
action: "setup";
|
|
124
|
+
} | {
|
|
125
|
+
action: "shared_create" | "shared_update" | "shared_delete";
|
|
126
|
+
name: string;
|
|
127
|
+
} | {
|
|
128
|
+
action: "shared_list";
|
|
129
|
+
} | {
|
|
130
|
+
action: "copy_shared";
|
|
131
|
+
name: string;
|
|
132
|
+
};
|
|
65
133
|
export {};
|
|
66
134
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CACJ,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CACJ,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { MessagingBot, ConversationContext, PlatformName } from \"../adapter.js\";\nimport type { DockerContainerManager } from \"../provisioner.js\";\nimport type { SandboxConfig } from \"../sandbox/index.js\";\nimport type { VaultManager } from \"../vault/index.js\";\n\nexport interface LinkTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n vaultId: string,\n providerId: string,\n ): { token: string };\n}\n\nexport interface SessionViewTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n sessionKey: string,\n sessionFile: string,\n platformUserName?: string,\n ): { token: string };\n}\n\
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { MessagingBot, ConversationContext, PlatformName } from \"../adapter.js\";\nimport type { DockerContainerManager } from \"../provisioner.js\";\nimport type { SandboxConfig } from \"../sandbox/index.js\";\nimport type { SandboxResourceController } from \"../types.js\";\nimport type { VaultManager } from \"../vault/index.js\";\n\ninterface CommandArgSpec {\n name: string;\n description: string;\n required: boolean;\n}\n\n/**\n * Data for the Slack adapter's generic slash route (how the synthesized\n * command event is built). All flags default to false.\n */\nexport interface SlackSlashRoute {\n /** Append the slash payload's free text to the synthesized command text. */\n includeText?: boolean;\n /** Scope the event to the invoking thread (thread-scoped session key). */\n thread?: boolean;\n /** Outside DMs, mark the event `private_command` so replies stay between the bot and the user. */\n privateCommand?: boolean;\n}\n\nexport interface CommandManifestEntry {\n /** Canonical name without slash, e.g. \"login\"; `/login` and `/pi-login` are derived. */\n name: string;\n description: string;\n /** Extra accepted spellings beyond `name` (e.g. \"autoreply\"); each also gets a `pi-` form. */\n aliases?: readonly string[];\n /** Optional single free-text argument for platforms that register typed args. */\n arg?: CommandArgSpec;\n /** Accepted without a leading slash. Per CONTEXT.md, only `session`. */\n bare?: boolean;\n /**\n * Routed by conversation intake as a magic word, never by a command\n * handler. Such an entry exists for platform registration/UI only.\n */\n magicWord?: boolean;\n /** Slack slash-command name, e.g. \"/pi-login\". Absent = not a Slack slash command. */\n slackCommand?: string;\n /** Slack routing data; absent for `new`, whose Slack dispatch is bespoke. */\n slackRoute?: SlackSlashRoute;\n /** Registered as a Discord application command. */\n discord?: boolean;\n /** Listed in Telegram's command menu; `description` overrides the shared one. */\n telegramMenu?: { description?: string };\n}\n\nexport interface LinkTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n vaultId: string,\n providerId: string,\n ): { token: string };\n}\n\nexport interface SessionViewTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n sessionKey: string,\n sessionFile: string,\n platformUserName?: string,\n ): { token: string };\n}\n\nexport interface AdminTokenStoreLike {\n create(args: {\n platform: PlatformName;\n platformUserId: string;\n conversationId: string;\n platformUserName?: string;\n }): { token: string };\n}\n\ninterface CommandRuntimeBridge {\n handleNewCommand(\n sessionKey: string,\n conversationId: string,\n bot: MessagingBot,\n message: ConversationContext[\"message\"],\n responder: ConversationContext[\"responder\"],\n platform: ConversationContext[\"platform\"],\n ): Promise<void>;\n switchConversationModel(conversationId: string, provider: string, model: string): boolean;\n refreshConversationEnvironment(conversationId: string): boolean;\n}\n\nexport interface CommandServices {\n workingDir: string;\n runtime?: CommandRuntimeBridge;\n sandbox: SandboxConfig;\n vaultManager: VaultManager;\n provisioner?: DockerContainerManager;\n resourceController?: SandboxResourceController;\n linkTokenStore: LinkTokenStoreLike;\n sessionViewTokenStore: SessionViewTokenStoreLike;\n adminTokenStore: AdminTokenStoreLike;\n portalBaseUrl?: string;\n}\n\nexport interface CommandContext {\n bot: MessagingBot;\n responder: ConversationContext[\"responder\"];\n platform: PlatformName;\n platformUserId: string;\n platformUserName?: string;\n conversationId: string;\n vaultConversationId?: string;\n sessionKey: string;\n commandText: string;\n privateConversation: boolean;\n services: CommandServices;\n}\n\nexport interface CommandHandler {\n tryHandle(context: CommandContext): Promise<boolean>;\n}\n\n/** Minimal model lookup contract used by the model command. */\nexport interface ModelRegistry {\n find(provider: string, modelId: string): Model<Api> | undefined;\n}\n\n// ── command-specific parsed types ────────────────────────────────────────────\n\nexport interface ParsedModelCommand {\n provider?: string;\n /** Model id without a thinking-level suffix, when one was supplied. */\n model?: string;\n /** Complete model id candidate, including a possible colon suffix. */\n modelCandidate?: string;\n /** Suffix kept for handler-side validation after exact model lookup. */\n thinkingLevelCandidate?: string;\n thinkingLevel?: ThinkingLevel;\n error?: \"invalid_spec\";\n}\n\nexport interface ParsedSandboxCommand {\n action?: \"boost\" | \"private\" | \"full\";\n}\n\nexport type ParsedLoginCommand =\n | { action: \"setup\" }\n | { action: \"shared_create\" | \"shared_update\" | \"shared_delete\"; name: string }\n | { action: \"shared_list\" }\n | { action: \"copy_shared\"; name: string };\n"]}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare class MissingGlobalSettingsError extends Error {
|
|
|
2
2
|
readonly settingsPath: string;
|
|
3
3
|
constructor(settingsPath: string);
|
|
4
4
|
}
|
|
5
|
-
export type { AgentConfig, AutoReplyConfig, JudgeModelConfig } from "./types.js";
|
|
5
|
+
export type { AgentConfig, AutoReplyConfig, JudgeModelConfig, SandboxSettings } from "./types.js";
|
|
6
6
|
import type { AgentConfig, AutoReplyConfig, JudgeModelConfig } from "./types.js";
|
|
7
7
|
export declare function loadGlobalSettings(): AgentConfig;
|
|
8
8
|
/**
|
|
@@ -48,8 +48,6 @@ export declare function loadConversationAutoReplyConfig(conversationDir: string)
|
|
|
48
48
|
* @deprecated Auto-reply is kept for compatibility while its future is undecided.
|
|
49
49
|
*/
|
|
50
50
|
export declare function saveConversationAutoReplyConfig(conversationDir: string, config: AutoReplyConfig): void;
|
|
51
|
-
export declare function resolveWorkspaceDirFromArgv(args?: string[]): string | undefined;
|
|
52
|
-
export declare function resolveStateDirFromArgv(args?: string[]): string;
|
|
53
51
|
/**
|
|
54
52
|
* True when `child` is `parent` or a path inside it. Purely lexical (no
|
|
55
53
|
* symlink resolution) — used for configuration sanity checks, not as the
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AA2OlG,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CA2BxE;AAED,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,CAoBhF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAUlF;AAUD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAYxF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GACtB,IAAI,CAaN;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAInE;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,IAAI,CAWN;AAOD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAIvD;AA2ED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAEtE;AAED,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CAEN"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { existsSync, readFileSync, renameSync, rmSync } from "fs";
|
|
3
|
-
import { homedir } from "os";
|
|
4
3
|
import { basename, dirname, join, resolve } from "path";
|
|
4
|
+
import { effectiveStateDir } from "./cli/arg-grammar.js";
|
|
5
5
|
import { readEnv } from "./utils/env.js";
|
|
6
6
|
import { ensureDirExists, readJsonSchemaFileIfExists } from "./utils/file-guards.js";
|
|
7
7
|
import { atomicWritePrivateFile } from "./utils/fs-atomic.js";
|
|
@@ -50,6 +50,7 @@ const SettingsFileSchema = Type.Object({
|
|
|
50
50
|
Type.Literal("medium"),
|
|
51
51
|
Type.Literal("high"),
|
|
52
52
|
Type.Literal("xhigh"),
|
|
53
|
+
Type.Literal("max"),
|
|
53
54
|
])),
|
|
54
55
|
autoReply: Type.Optional(Type.Object({
|
|
55
56
|
provider: Type.Optional(Type.String()),
|
|
@@ -78,15 +79,29 @@ const SettingsFileSchema = Type.Object({
|
|
|
78
79
|
enabled: Type.Optional(Type.Boolean()),
|
|
79
80
|
rules: Type.Optional(Type.Array(Type.String())),
|
|
80
81
|
})),
|
|
82
|
+
/** Package sources for this scope; see `src/packages`. */
|
|
83
|
+
packages: Type.Optional(Type.Array(Type.String())),
|
|
81
84
|
});
|
|
82
85
|
function loadSettingsFile(settingsPath) {
|
|
86
|
+
if (existsSync(settingsPath)) {
|
|
87
|
+
try {
|
|
88
|
+
const raw = JSON.parse(readFileSync(settingsPath, "utf-8"));
|
|
89
|
+
if (raw?.sandbox?.gondolin?.remote !== undefined) {
|
|
90
|
+
throw new Error("sandbox.gondolin.remote is no longer supported; use gondolin:default and remove the remote setting");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof Error && error.message.startsWith("sandbox.gondolin.remote")) {
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
83
99
|
return readJsonSchemaFileIfExists(settingsPath, SettingsFileSchema, (detail) => detail === "unexpected JSON shape"
|
|
84
100
|
? `Malformed settings file at ${settingsPath}: expected a JSON object at the top level`
|
|
85
101
|
: `Malformed settings file at ${settingsPath}: ${detail}`);
|
|
86
102
|
}
|
|
87
103
|
function getStateDir() {
|
|
88
|
-
|
|
89
|
-
return raw ? resolve(raw) : join(homedir(), ".mikan");
|
|
104
|
+
return effectiveStateDir();
|
|
90
105
|
}
|
|
91
106
|
function normalizeSettingsConfig(config) {
|
|
92
107
|
return {
|
|
@@ -94,21 +109,56 @@ function normalizeSettingsConfig(config) {
|
|
|
94
109
|
...(config.llm?.model !== undefined ? { model: config.llm.model } : {}),
|
|
95
110
|
...(config.llm?.thinkingLevel !== undefined ? { thinkingLevel: config.llm.thinkingLevel } : {}),
|
|
96
111
|
...(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
|
-
: {}),
|
|
112
|
+
...(config.sandbox !== undefined ? { sandbox: normalizeSandboxSettings(config.sandbox) } : {}),
|
|
111
113
|
...(config.slack !== undefined ? { slack: config.slack } : {}),
|
|
114
|
+
...(config.packages !== undefined ? { packages: normalizePackages(config.packages) } : {}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/** Drop blank entries and duplicates while preserving the author's order. */
|
|
118
|
+
function normalizePackages(packages) {
|
|
119
|
+
const seen = new Set();
|
|
120
|
+
const normalized = [];
|
|
121
|
+
for (const entry of packages) {
|
|
122
|
+
const trimmed = entry.trim();
|
|
123
|
+
if (!trimmed || seen.has(trimmed))
|
|
124
|
+
continue;
|
|
125
|
+
seen.add(trimmed);
|
|
126
|
+
normalized.push(trimmed);
|
|
127
|
+
}
|
|
128
|
+
return normalized;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* File shape → in-memory shape for the sandbox group. An empty or
|
|
132
|
+
* whitespace-only `defaultSharedVault` means "no default" and is dropped;
|
|
133
|
+
* non-empty values are trimmed. Everything else passes through as-is.
|
|
134
|
+
*/
|
|
135
|
+
function normalizeSandboxSettings(sandbox) {
|
|
136
|
+
const defaultSharedVault = sandbox.defaultSharedVault?.trim();
|
|
137
|
+
return {
|
|
138
|
+
...(sandbox.cpus !== undefined ? { cpus: sandbox.cpus } : {}),
|
|
139
|
+
...(sandbox.memory !== undefined ? { memory: sandbox.memory } : {}),
|
|
140
|
+
...(sandbox.boost !== undefined ? { boost: sandbox.boost } : {}),
|
|
141
|
+
...(sandbox.image !== undefined ? { image: sandbox.image } : {}),
|
|
142
|
+
...(defaultSharedVault ? { defaultSharedVault } : {}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Merge two sandbox settings groups. The merge invariant is LEAF-LEVEL:
|
|
147
|
+
* an override that only sets `sandbox.memory` keeps the base `sandbox.cpus`,
|
|
148
|
+
* and an override that only sets `boost.memory` keeps the base `boost.cpus`
|
|
149
|
+
* (same for `image`). This mirrors how the fields merged when they were
|
|
150
|
+
* flat top-level keys; a group-level spread would silently drop base leaves.
|
|
151
|
+
*/
|
|
152
|
+
function mergeSandboxSettings(base, override) {
|
|
153
|
+
if (!base)
|
|
154
|
+
return override;
|
|
155
|
+
if (!override)
|
|
156
|
+
return base;
|
|
157
|
+
return {
|
|
158
|
+
...base,
|
|
159
|
+
...override,
|
|
160
|
+
...(base.boost || override.boost ? { boost: { ...base.boost, ...override.boost } } : {}),
|
|
161
|
+
...(base.image || override.image ? { image: { ...base.image, ...override.image } } : {}),
|
|
112
162
|
};
|
|
113
163
|
}
|
|
114
164
|
function getSettingsPath() {
|
|
@@ -135,26 +185,18 @@ function toAgentConfig(fromFile) {
|
|
|
135
185
|
const provider = requireString(fromFile.provider, "llm.provider");
|
|
136
186
|
const model = requireString(fromFile.model, "llm.model");
|
|
137
187
|
const thinkingLevel = requireThinkingLevel(fromFile.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;
|
|
188
|
+
const sentryDsn = sentryDsnFrom(fromFile.sentryDsn);
|
|
189
|
+
const sandbox = fromFile.sandbox;
|
|
145
190
|
const slack = fromFile.slack;
|
|
191
|
+
const packages = fromFile.packages;
|
|
146
192
|
return {
|
|
147
193
|
provider,
|
|
148
194
|
model,
|
|
149
195
|
thinkingLevel,
|
|
150
196
|
sentryDsn,
|
|
151
|
-
|
|
152
|
-
sandboxMemory,
|
|
153
|
-
sandboxBoostCpus,
|
|
154
|
-
sandboxBoostMemory,
|
|
155
|
-
sandboxImageWorkspaceMount,
|
|
156
|
-
defaultSharedVault,
|
|
197
|
+
sandbox,
|
|
157
198
|
slack,
|
|
199
|
+
packages,
|
|
158
200
|
};
|
|
159
201
|
}
|
|
160
202
|
function loadRawGlobalSettings() {
|
|
@@ -213,7 +255,21 @@ export function conversationSettingsPath(conversationDir) {
|
|
|
213
255
|
export function resolveConversationSettings(conversationDir) {
|
|
214
256
|
const globalConfig = loadRawGlobalSettings();
|
|
215
257
|
const conversationConfig = normalizeSettingsConfig(loadSettingsFile(conversationSettingsPath(conversationDir)) ?? {});
|
|
216
|
-
|
|
258
|
+
// The sandbox group merges at the leaf level (see mergeSandboxSettings):
|
|
259
|
+
// a conversation that only sets sandbox.memory keeps the global sandbox.cpus.
|
|
260
|
+
const sandbox = mergeSandboxSettings(globalConfig.sandbox, conversationConfig.sandbox);
|
|
261
|
+
return toAgentConfig({
|
|
262
|
+
...globalConfig,
|
|
263
|
+
...conversationConfig,
|
|
264
|
+
...(sandbox ? { sandbox } : {}),
|
|
265
|
+
// Packages are additive across scopes, so the spread above would be wrong
|
|
266
|
+
// twice over: an unset conversation list would read as the global list
|
|
267
|
+
// (loading every global package a second time under the conversation
|
|
268
|
+
// scope), and a set one would read as if it had replaced the global list.
|
|
269
|
+
// Report only this conversation's entries; resolveConversationPackages
|
|
270
|
+
// combines the scopes.
|
|
271
|
+
packages: conversationConfig.packages,
|
|
272
|
+
});
|
|
217
273
|
}
|
|
218
274
|
/**
|
|
219
275
|
* Resolve the model used to judge auto-reply rules. Falls back to the main
|
|
@@ -275,39 +331,6 @@ export function saveConversationAutoReplyConfig(conversationDir, config) {
|
|
|
275
331
|
}
|
|
276
332
|
atomicWritePrivateFile(targetPath, config.rules.join("\n"));
|
|
277
333
|
}
|
|
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
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return undefined;
|
|
298
|
-
}
|
|
299
|
-
export function resolveStateDirFromArgv(args = process.argv.slice(2)) {
|
|
300
|
-
for (let i = 0; i < args.length; i++) {
|
|
301
|
-
const arg = args[i];
|
|
302
|
-
if (arg.startsWith("--state-dir=")) {
|
|
303
|
-
return resolve(arg.slice("--state-dir=".length));
|
|
304
|
-
}
|
|
305
|
-
if (arg === "--state-dir") {
|
|
306
|
-
return resolve(args[++i] || "");
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
return join(homedir(), ".mikan");
|
|
310
|
-
}
|
|
311
334
|
/**
|
|
312
335
|
* True when `child` is `parent` or a path inside it. Purely lexical (no
|
|
313
336
|
* symlink resolution) — used for configuration sanity checks, not as the
|
|
@@ -338,12 +361,13 @@ export function assertStateDirOutsideWorkspace(stateDir, workingDir, sandboxType
|
|
|
338
361
|
}
|
|
339
362
|
throw new Error(message);
|
|
340
363
|
}
|
|
364
|
+
/** Settings-file DSN wins over SENTRY_DSN env — the rule lives only here. */
|
|
365
|
+
function sentryDsnFrom(fromFile) {
|
|
366
|
+
return fromFile || readEnv("SENTRY_DSN");
|
|
367
|
+
}
|
|
341
368
|
export function resolveSentryDsn() {
|
|
342
369
|
const fromFile = normalizeSettingsConfig(loadSettingsFile(getSettingsPath()) ?? {});
|
|
343
|
-
|
|
344
|
-
return fromFile.sentryDsn;
|
|
345
|
-
}
|
|
346
|
-
return process.env.SENTRY_DSN;
|
|
370
|
+
return sentryDsnFrom(fromFile.sentryDsn);
|
|
347
371
|
}
|
|
348
372
|
export function createGlobalSettingsFile(stateDir) {
|
|
349
373
|
const settingsPath = join(stateDir, "settings.json");
|
|
@@ -375,6 +399,9 @@ function compactSettingsConfig(config) {
|
|
|
375
399
|
...(hasDefinedValue(config.sandbox) ? { sandbox: config.sandbox } : {}),
|
|
376
400
|
...(hasDefinedValue(config.autoReply) ? { autoReply: config.autoReply } : {}),
|
|
377
401
|
...(hasDefinedValue(config.slack) ? { slack: config.slack } : {}),
|
|
402
|
+
// An empty list is meaningful (the admin removed the last package) and
|
|
403
|
+
// must survive the round trip, so this checks for the key, not for values.
|
|
404
|
+
...(config.packages !== undefined ? { packages: config.packages } : {}),
|
|
378
405
|
};
|
|
379
406
|
}
|
|
380
407
|
function patchSettingsConfig(existing, config) {
|
|
@@ -390,37 +417,17 @@ function patchSettingsConfig(existing, config) {
|
|
|
390
417
|
...existing.sentry,
|
|
391
418
|
...(config.sentryDsn !== undefined ? { dsn: config.sentryDsn } : {}),
|
|
392
419
|
},
|
|
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
|
-
},
|
|
420
|
+
// Leaf-level merge: a patch that only sets sandbox.boost.memory keeps the
|
|
421
|
+
// existing boost.cpus (and every other existing leaf). compactSettingsConfig
|
|
422
|
+
// drops the group entirely when it ends up with no defined values.
|
|
423
|
+
sandbox: mergeSandboxSettings(existing.sandbox, config.sandbox) ?? {},
|
|
420
424
|
slack: {
|
|
421
425
|
...existing.slack,
|
|
422
426
|
...config.slack,
|
|
423
427
|
},
|
|
428
|
+
// The package list is replaced wholesale, not merged: the portal edits it
|
|
429
|
+
// as a list, and a merge would make removal impossible.
|
|
430
|
+
...(config.packages !== undefined ? { packages: normalizePackages(config.packages) } : {}),
|
|
424
431
|
};
|
|
425
432
|
return compactSettingsConfig(patched);
|
|
426
433
|
}
|