@geminixiang/mikan 1.0.0-beta.9 → 1.0.0-beta.91
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 +342 -424
- package/README.md +102 -42
- package/dist/adapters/commands/admin.d.ts.map +1 -0
- package/dist/adapters/commands/admin.js +33 -0
- package/dist/adapters/commands/admin.js.map +1 -0
- package/dist/adapters/commands/auto-reply.d.ts +5 -0
- package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
- package/dist/adapters/commands/auto-reply.js +47 -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 +158 -0
- package/dist/adapters/commands/login.js.map +1 -0
- package/dist/adapters/commands/manifest.d.ts +17 -0
- package/dist/adapters/commands/manifest.d.ts.map +1 -0
- package/dist/adapters/commands/manifest.js +121 -0
- package/dist/adapters/commands/manifest.js.map +1 -0
- package/dist/adapters/commands/model.d.ts +9 -0
- package/dist/adapters/commands/model.d.ts.map +1 -0
- package/dist/adapters/commands/model.js +136 -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 +39 -0
- package/dist/adapters/commands/new.js.map +1 -0
- package/dist/adapters/commands/registry.d.ts +4 -0
- package/dist/adapters/commands/registry.d.ts.map +1 -0
- package/dist/adapters/commands/registry.js +35 -0
- package/dist/adapters/commands/registry.js.map +1 -0
- package/dist/adapters/commands/sandbox.d.ts +6 -0
- package/dist/adapters/commands/sandbox.d.ts.map +1 -0
- package/dist/adapters/commands/sandbox.js +125 -0
- package/dist/adapters/commands/sandbox.js.map +1 -0
- package/dist/adapters/commands/session-view.d.ts.map +1 -0
- package/dist/adapters/commands/session-view.js +46 -0
- package/dist/adapters/commands/session-view.js.map +1 -0
- package/dist/adapters/commands/types.d.ts +105 -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 +11 -0
- package/dist/adapters/commands/utils.d.ts.map +1 -0
- package/dist/adapters/commands/utils.js +43 -0
- package/dist/adapters/commands/utils.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +14 -18
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +234 -303
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +4 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +9 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +3 -7
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +57 -219
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +2 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +47 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/discord/types.d.ts +91 -1
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/github/activity.d.ts +3 -0
- package/dist/adapters/github/activity.d.ts.map +1 -0
- package/dist/adapters/github/activity.js +148 -0
- package/dist/adapters/github/activity.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +24 -37
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +209 -397
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +32 -49
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +108 -118
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts +3 -8
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +74 -138
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +14 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +218 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +2 -23
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +6 -36
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/policy.d.ts +19 -0
- package/dist/adapters/github/policy.d.ts.map +1 -0
- package/dist/adapters/github/policy.js +79 -0
- package/dist/adapters/github/policy.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +4 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +40 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +14 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +78 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +18 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +44 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +17 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +40 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +17 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +134 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +14 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +34 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/types.d.ts +200 -57
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +7 -0
- package/dist/adapters/github/webhook.d.ts.map +1 -0
- package/dist/adapters/github/webhook.js +104 -0
- package/dist/adapters/github/webhook.js.map +1 -0
- package/dist/adapters/intake.d.ts +4 -10
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +85 -32
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +8 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +111 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- package/dist/adapters/messages.d.ts +13 -0
- package/dist/adapters/messages.d.ts.map +1 -0
- package/dist/adapters/messages.js +39 -0
- package/dist/adapters/messages.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 +426 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +27 -53
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +167 -91
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +21 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +103 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/auto-reply-context.d.ts +14 -0
- package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
- package/dist/adapters/slack/auto-reply-context.js +21 -0
- package/dist/adapters/slack/auto-reply-context.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +5 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +144 -145
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +60 -40
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +968 -588
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -9
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +8 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts +17 -0
- package/dist/adapters/slack/jev-context.d.ts.map +1 -0
- package/dist/adapters/slack/jev-context.js +57 -0
- package/dist/adapters/slack/jev-context.js.map +1 -0
- package/dist/adapters/slack/markdown.d.ts +2 -0
- package/dist/adapters/slack/markdown.d.ts.map +1 -0
- package/dist/adapters/slack/markdown.js +43 -0
- package/dist/adapters/slack/markdown.js.map +1 -0
- package/dist/adapters/slack/persona.d.ts +6 -0
- package/dist/adapters/slack/persona.d.ts.map +1 -0
- package/dist/adapters/slack/persona.js +13 -0
- package/dist/adapters/slack/persona.js.map +1 -0
- package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +222 -348
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +3 -2
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +9 -13
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +10 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +22 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- package/dist/adapters/slack/task-intent.d.ts +19 -0
- package/dist/adapters/slack/task-intent.d.ts.map +1 -0
- package/dist/adapters/slack/task-intent.js +65 -0
- package/dist/adapters/slack/task-intent.js.map +1 -0
- package/dist/adapters/slack/task-status.d.ts +7 -0
- package/dist/adapters/slack/task-status.d.ts.map +1 -0
- package/dist/adapters/slack/task-status.js +96 -0
- package/dist/adapters/slack/task-status.js.map +1 -0
- package/dist/adapters/slack/tool-pack.d.ts +4 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +40 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/blockkit.d.ts +17 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +98 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +91 -5
- 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 +13 -0
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
- package/dist/adapters/slack/update-diagnostics.js +128 -0
- package/dist/adapters/slack/update-diagnostics.js.map +1 -0
- package/dist/adapters/telegram/bot.d.ts +12 -19
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +114 -239
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +3 -7
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +49 -191
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +24 -1
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.js.map +1 -1
- package/dist/adapters/types.d.ts +92 -17
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts +4 -0
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
- package/dist/adapters/web/admin/client-assets.js +1766 -0
- package/dist/adapters/web/admin/client-assets.js.map +1 -0
- package/dist/adapters/web/admin/portal.d.ts +26 -0
- package/dist/adapters/web/admin/portal.d.ts.map +1 -0
- package/dist/adapters/web/admin/portal.js +1490 -0
- package/dist/adapters/web/admin/portal.js.map +1 -0
- package/dist/adapters/web/admin/provider-models.d.ts +10 -0
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
- package/dist/adapters/web/admin/provider-models.js +103 -0
- package/dist/adapters/web/admin/provider-models.js.map +1 -0
- package/dist/adapters/web/admin/types.d.ts +54 -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 +4 -0
- package/dist/adapters/web/login/oauth.d.ts.map +1 -0
- package/dist/adapters/web/login/oauth.js +219 -0
- package/dist/adapters/web/login/oauth.js.map +1 -0
- package/dist/adapters/web/login/portal.d.ts +10 -0
- package/dist/adapters/web/login/portal.d.ts.map +1 -0
- package/dist/adapters/web/login/portal.js +1336 -0
- package/dist/adapters/web/login/portal.js.map +1 -0
- package/dist/adapters/web/login/types.d.ts +34 -0
- 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 +9 -0
- package/dist/adapters/web/portal-shell.d.ts.map +1 -0
- package/dist/adapters/web/portal-shell.js +428 -0
- package/dist/adapters/web/portal-shell.js.map +1 -0
- package/dist/adapters/web/server.d.ts +35 -0
- package/dist/adapters/web/server.d.ts.map +1 -0
- package/dist/adapters/web/server.js +80 -0
- package/dist/adapters/web/server.js.map +1 -0
- package/dist/adapters/web/session-view/portal.d.ts +19 -0
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
- package/dist/adapters/web/session-view/portal.js +1833 -0
- package/dist/adapters/web/session-view/portal.js.map +1 -0
- package/dist/adapters/web/session-view/types.d.ts +45 -0
- 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 +10 -0
- package/dist/adapters/web/token-store.d.ts.map +1 -0
- package/dist/adapters/web/token-store.js +42 -0
- 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 +8 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +47 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +4 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +79 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js +84 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/migrate.d.ts +3 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +74 -0
- package/dist/cli/migrate.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 +30 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/onboard.d.ts +7 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +192 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/process-lifecycle.d.ts +14 -0
- package/dist/cli/process-lifecycle.d.ts.map +1 -0
- package/dist/cli/process-lifecycle.js +61 -0
- package/dist/cli/process-lifecycle.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.map +1 -0
- package/dist/env-manifest.d.ts +14 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +255 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events/index.d.ts +105 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +252 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/scheduler.d.ts +24 -0
- package/dist/events/scheduler.d.ts.map +1 -0
- package/dist/events/scheduler.js +221 -0
- package/dist/events/scheduler.js.map +1 -0
- package/dist/file-guards.d.ts +20 -0
- package/dist/file-guards.d.ts.map +1 -0
- package/dist/file-guards.js +166 -0
- package/dist/file-guards.js.map +1 -0
- package/dist/harness/budget-stop.d.ts +3 -0
- package/dist/harness/budget-stop.d.ts.map +1 -0
- package/dist/harness/budget-stop.js +36 -0
- package/dist/harness/budget-stop.js.map +1 -0
- package/dist/harness/execution-env.d.ts +4 -0
- package/dist/harness/execution-env.d.ts.map +1 -0
- package/dist/harness/execution-env.js +245 -0
- package/dist/harness/execution-env.js.map +1 -0
- package/dist/harness/execution-resolver.d.ts +23 -0
- package/dist/harness/execution-resolver.d.ts.map +1 -0
- package/dist/harness/execution-resolver.js +152 -0
- package/dist/harness/execution-resolver.js.map +1 -0
- package/dist/harness/http.d.ts +0 -12
- package/dist/harness/http.d.ts.map +1 -1
- package/dist/harness/http.js +0 -34
- package/dist/harness/http.js.map +1 -1
- package/dist/harness/index.d.ts +18 -17
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +11 -15
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/jev.d.ts +67 -0
- package/dist/harness/jev.d.ts.map +1 -0
- package/dist/harness/jev.js +135 -0
- package/dist/harness/jev.js.map +1 -0
- package/dist/harness/loop-guard.d.ts +10 -0
- package/dist/harness/loop-guard.d.ts.map +1 -0
- package/dist/harness/loop-guard.js +111 -0
- package/dist/harness/loop-guard.js.map +1 -0
- package/dist/harness/mcp-result.d.ts +21 -0
- package/dist/harness/mcp-result.d.ts.map +1 -0
- package/dist/harness/mcp-result.js +204 -0
- package/dist/harness/mcp-result.js.map +1 -0
- package/dist/harness/mcp.d.ts +17 -0
- package/dist/harness/mcp.d.ts.map +1 -0
- package/dist/harness/mcp.js +339 -0
- package/dist/harness/mcp.js.map +1 -0
- package/dist/harness/models.d.ts +2 -19
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +43 -95
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +3 -0
- package/dist/harness/open-connector.d.ts.map +1 -0
- package/dist/harness/open-connector.js +106 -0
- package/dist/harness/open-connector.js.map +1 -0
- package/dist/harness/presenter.d.ts +11 -0
- package/dist/harness/presenter.d.ts.map +1 -0
- package/dist/harness/presenter.js +867 -0
- package/dist/harness/presenter.js.map +1 -0
- package/dist/harness/prompt.d.ts +17 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +348 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/run-events.d.ts +10 -0
- package/dist/harness/run-events.d.ts.map +1 -0
- package/dist/harness/run-events.js +126 -0
- package/dist/harness/run-events.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 +570 -414
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +102 -0
- package/dist/harness/session.d.ts.map +1 -0
- package/dist/harness/session.js +725 -0
- package/dist/harness/session.js.map +1 -0
- package/dist/harness/skills.d.ts +7 -41
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +120 -69
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +3 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +260 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent.d.ts +39 -0
- package/dist/harness/subagent.d.ts.map +1 -0
- package/dist/harness/subagent.js +613 -0
- package/dist/harness/subagent.js.map +1 -0
- package/dist/harness/tool-args.d.ts +2 -0
- package/dist/harness/tool-args.d.ts.map +1 -0
- package/dist/harness/tool-args.js +20 -0
- package/dist/harness/tool-args.js.map +1 -0
- package/dist/harness/tools/attach.d.ts +13 -0
- package/dist/harness/tools/attach.d.ts.map +1 -0
- package/dist/harness/tools/attach.js +39 -0
- package/dist/harness/tools/attach.js.map +1 -0
- package/dist/harness/tools/codemode.d.ts +5 -0
- package/dist/harness/tools/codemode.d.ts.map +1 -0
- package/dist/harness/tools/codemode.js +229 -0
- package/dist/harness/tools/codemode.js.map +1 -0
- package/dist/harness/tools/event.d.ts +28 -0
- package/dist/harness/tools/event.d.ts.map +1 -0
- package/dist/harness/tools/event.js +183 -0
- package/dist/harness/tools/event.js.map +1 -0
- package/dist/harness/tools/generate-image.d.ts +20 -0
- package/dist/harness/tools/generate-image.d.ts.map +1 -0
- package/dist/harness/tools/generate-image.js +82 -0
- package/dist/harness/tools/generate-image.js.map +1 -0
- package/dist/harness/tools/history.d.ts +20 -0
- package/dist/harness/tools/history.d.ts.map +1 -0
- package/dist/harness/tools/history.js +293 -0
- package/dist/harness/tools/history.js.map +1 -0
- package/dist/harness/tools/host-fn-tool.d.ts +14 -0
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/harness/tools/host-fn-tool.js +39 -0
- package/dist/harness/tools/host-fn-tool.js.map +1 -0
- package/dist/harness/tools/index.d.ts +34 -0
- package/dist/harness/tools/index.d.ts.map +1 -0
- package/dist/harness/tools/index.js +49 -0
- package/dist/harness/tools/index.js.map +1 -0
- package/dist/harness/tools/jev-browser.d.ts +41 -0
- package/dist/harness/tools/jev-browser.d.ts.map +1 -0
- package/dist/harness/tools/jev-browser.js +570 -0
- package/dist/harness/tools/jev-browser.js.map +1 -0
- package/dist/harness/tools/jev.d.ts +15 -0
- package/dist/harness/tools/jev.d.ts.map +1 -0
- package/dist/harness/tools/jev.js +98 -0
- package/dist/harness/tools/jev.js.map +1 -0
- package/dist/harness/tools/pi-tools.d.ts +8 -0
- package/dist/harness/tools/pi-tools.d.ts.map +1 -0
- package/dist/harness/tools/pi-tools.js +83 -0
- package/dist/harness/tools/pi-tools.js.map +1 -0
- package/dist/harness/tools/react.d.ts +12 -0
- package/dist/harness/tools/react.d.ts.map +1 -0
- package/dist/harness/tools/react.js +25 -0
- package/dist/harness/tools/react.js.map +1 -0
- package/dist/harness/tools/sandbox.d.ts +24 -0
- package/dist/harness/tools/sandbox.d.ts.map +1 -0
- package/dist/harness/tools/sandbox.js +79 -0
- package/dist/harness/tools/sandbox.js.map +1 -0
- package/dist/harness/tools/secret-redaction.d.ts +9 -0
- package/dist/harness/tools/secret-redaction.d.ts.map +1 -0
- package/dist/harness/tools/secret-redaction.js +88 -0
- package/dist/harness/tools/secret-redaction.js.map +1 -0
- package/dist/harness/tools/subagent.d.ts +51 -0
- package/dist/harness/tools/subagent.d.ts.map +1 -0
- package/dist/harness/tools/subagent.js +581 -0
- package/dist/harness/tools/subagent.js.map +1 -0
- package/dist/harness/tools/task.d.ts +22 -0
- package/dist/harness/tools/task.d.ts.map +1 -0
- package/dist/harness/tools/task.js +80 -0
- package/dist/harness/tools/task.js.map +1 -0
- package/dist/harness/tools/tool-search.d.ts +6 -0
- package/dist/harness/tools/tool-search.d.ts.map +1 -0
- package/dist/harness/tools/tool-search.js +89 -0
- package/dist/harness/tools/tool-search.js.map +1 -0
- package/dist/harness/tools/types.d.ts +14 -0
- package/dist/harness/tools/types.d.ts.map +1 -0
- package/dist/harness/tools/types.js.map +1 -0
- package/dist/harness/types.d.ts +488 -29
- 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 +31 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -4
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +3 -28
- package/dist/log.js.map +1 -1
- package/dist/main.js +282 -258
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +15 -0
- package/dist/memory-capture/index.d.ts.map +1 -0
- package/dist/memory-capture/index.js +198 -0
- package/dist/memory-capture/index.js.map +1 -0
- package/dist/memory-capture/types.d.ts +27 -0
- package/dist/memory-capture/types.d.ts.map +1 -0
- package/dist/memory-capture/types.js +2 -0
- package/dist/memory-capture/types.js.map +1 -0
- package/dist/migrations/actor-vaults.d.ts +3 -0
- package/dist/migrations/actor-vaults.d.ts.map +1 -0
- package/dist/migrations/actor-vaults.js +43 -0
- package/dist/migrations/actor-vaults.js.map +1 -0
- package/dist/migrations/conversation-settings.d.ts +3 -0
- package/dist/migrations/conversation-settings.d.ts.map +1 -0
- package/dist/migrations/conversation-settings.js +31 -0
- package/dist/migrations/conversation-settings.js.map +1 -0
- package/dist/migrations/dream-checkpoints.d.ts +3 -0
- package/dist/migrations/dream-checkpoints.d.ts.map +1 -0
- package/dist/migrations/dream-checkpoints.js +23 -0
- package/dist/migrations/dream-checkpoints.js.map +1 -0
- package/dist/migrations/index.d.ts +14 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +105 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/models-json.d.ts +3 -0
- package/dist/migrations/models-json.d.ts.map +1 -0
- package/dist/migrations/models-json.js +18 -0
- package/dist/migrations/models-json.js.map +1 -0
- package/dist/migrations/office-layout.d.ts +4 -0
- package/dist/migrations/office-layout.d.ts.map +1 -0
- package/dist/migrations/office-layout.js +94 -0
- package/dist/migrations/office-layout.js.map +1 -0
- package/dist/migrations/office-sessions.d.ts +3 -0
- package/dist/migrations/office-sessions.d.ts.map +1 -0
- package/dist/migrations/office-sessions.js +81 -0
- package/dist/migrations/office-sessions.js.map +1 -0
- package/dist/migrations/private-office-dirs.d.ts +3 -0
- package/dist/migrations/private-office-dirs.d.ts.map +1 -0
- package/dist/migrations/private-office-dirs.js +24 -0
- package/dist/migrations/private-office-dirs.js.map +1 -0
- package/dist/migrations/sandbox-containers.d.ts +3 -0
- package/dist/migrations/sandbox-containers.d.ts.map +1 -0
- package/dist/migrations/sandbox-containers.js +36 -0
- package/dist/migrations/sandbox-containers.js.map +1 -0
- package/dist/migrations/session-files.d.ts +28 -0
- package/dist/migrations/session-files.d.ts.map +1 -0
- package/dist/migrations/session-files.js +80 -0
- package/dist/migrations/session-files.js.map +1 -0
- package/dist/migrations/session-v4.d.ts +77 -0
- package/dist/migrations/session-v4.d.ts.map +1 -0
- package/dist/migrations/session-v4.js +177 -0
- package/dist/migrations/session-v4.js.map +1 -0
- package/dist/migrations/sessions-sqlite.d.ts +3 -0
- package/dist/migrations/sessions-sqlite.d.ts.map +1 -0
- package/dist/migrations/sessions-sqlite.js +215 -0
- package/dist/migrations/sessions-sqlite.js.map +1 -0
- package/dist/migrations/sessions-v3.d.ts +8 -0
- package/dist/migrations/sessions-v3.d.ts.map +1 -0
- package/dist/migrations/sessions-v3.js +350 -0
- package/dist/migrations/sessions-v3.js.map +1 -0
- package/dist/migrations/types.d.ts +25 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +2 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/migrations/workspace-events.d.ts +3 -0
- package/dist/migrations/workspace-events.d.ts.map +1 -0
- package/dist/migrations/workspace-events.js +43 -0
- package/dist/migrations/workspace-events.js.map +1 -0
- package/dist/observability/index.d.ts +30 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +273 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrument.js +9 -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 +182 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/observability/sentry.d.ts +30 -18
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +94 -119
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +30 -19
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +49 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +395 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/projection.d.ts +11 -0
- package/dist/office/projection.d.ts.map +1 -0
- package/dist/office/projection.js +145 -0
- package/dist/office/projection.js.map +1 -0
- package/dist/office/types.d.ts +44 -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/runtime/conversation-runtime.d.ts +0 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +365 -155
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +65 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +384 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +42 -20
- 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 +59 -55
- 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 +39 -20
- 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 +42 -35
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +12 -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/index.d.ts +5 -15
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +5 -51
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/layout.d.ts +5 -0
- package/dist/sandbox/layout.d.ts.map +1 -0
- package/dist/sandbox/layout.js +13 -0
- package/dist/sandbox/layout.js.map +1 -0
- package/dist/sandbox/provisioner.d.ts +64 -0
- package/dist/sandbox/provisioner.d.ts.map +1 -0
- package/dist/sandbox/provisioner.js +546 -0
- package/dist/sandbox/provisioner.js.map +1 -0
- package/dist/sandbox/registry.d.ts +12 -0
- package/dist/sandbox/registry.d.ts.map +1 -0
- package/dist/sandbox/registry.js +93 -0
- package/dist/sandbox/registry.js.map +1 -0
- package/dist/sandbox/types.d.ts +23 -25
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +21 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +100 -8
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +19 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/chat-history-sync.js +459 -0
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/compaction-summary.d.ts +4 -0
- package/dist/sessions/compaction-summary.d.ts.map +1 -0
- package/dist/sessions/compaction-summary.js +16 -0
- package/dist/sessions/compaction-summary.js.map +1 -0
- package/dist/sessions/history-line.d.ts +10 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +29 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/session-key.d.ts +19 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +91 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/session-store.d.ts +73 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +721 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/types.d.ts +90 -34
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +2 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +9 -0
- package/dist/settings/apply.d.ts.map +1 -0
- package/dist/settings/apply.js +31 -0
- package/dist/settings/apply.js.map +1 -0
- package/dist/settings/index.d.ts +28 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +322 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/types.d.ts +209 -191
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/unknown-values.d.ts +3 -0
- package/dist/unknown-values.d.ts.map +1 -0
- package/dist/unknown-values.js +7 -0
- package/dist/unknown-values.js.map +1 -0
- package/dist/vault/index.d.ts +28 -11
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +291 -118
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +5 -19
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +87 -41
- package/dist/adapter.d.ts +0 -2
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js +0 -2
- package/dist/adapter.js.map +0 -1
- package/dist/adapters/github/repo.d.ts +0 -19
- package/dist/adapters/github/repo.d.ts.map +0 -1
- package/dist/adapters/github/repo.js +0 -58
- package/dist/adapters/github/repo.js.map +0 -1
- package/dist/adapters/slack/tools/attach.d.ts +0 -12
- package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
- package/dist/adapters/slack/tools/attach.js +0 -39
- 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 -1299
- package/dist/agent.js.map +0 -1
- package/dist/cli/ext-git.d.ts +0 -22
- package/dist/cli/ext-git.d.ts.map +0 -1
- package/dist/cli/ext-git.js +0 -76
- package/dist/cli/ext-git.js.map +0 -1
- package/dist/cli/ext.d.ts +0 -2
- package/dist/cli/ext.d.ts.map +0 -1
- package/dist/cli/ext.js +0 -217
- package/dist/cli/ext.js.map +0 -1
- package/dist/commands/admin.d.ts.map +0 -1
- package/dist/commands/admin.js +0 -30
- package/dist/commands/admin.js.map +0 -1
- package/dist/commands/auto-reply.d.ts +0 -8
- 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 +0 -7
- 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 +0 -41
- 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 +0 -29
- package/dist/commands/utils.js.map +0 -1
- package/dist/config.d.ts +0 -78
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -450
- package/dist/config.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 +0 -43
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -456
- 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 -86
- package/dist/harness/extensions/loader.d.ts.map +0 -1
- package/dist/harness/extensions/loader.js +0 -525
- 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/platform-messages.d.ts +0 -12
- package/dist/platform-messages.d.ts.map +0 -1
- package/dist/platform-messages.js +0 -36
- package/dist/platform-messages.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 +0 -366
- 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 +0 -517
- 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 +0 -484
- 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 -24
- package/dist/sessions/policy.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -72
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -193
- package/dist/sessions/store.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 +0 -56
- 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/github-pr.d.ts +0 -22
- package/dist/tools/github-pr.d.ts.map +0 -1
- package/dist/tools/github-pr.js +0 -53
- package/dist/tools/github-pr.js.map +0 -1
- package/dist/tools/index.d.ts +0 -25
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -35
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/react.d.ts +0 -15
- package/dist/tools/react.d.ts.map +0 -1
- package/dist/tools/react.js +0 -40
- 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 +0 -22
- package/dist/tools/sandbox.d.ts.map +0 -1
- package/dist/tools/sandbox.js +0 -73
- 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 +0 -9
- package/dist/utils/file-guards.d.ts.map +0 -1
- package/dist/utils/file-guards.js +0 -59
- 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 +0 -10
- package/dist/web/admin/provider-models.d.ts.map +0 -1
- package/dist/web/admin/provider-models.js +0 -96
- 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 +0 -258
- package/dist/web/login/oauth.js.map +0 -1
- package/dist/web/login/portal.d.ts +0 -17
- package/dist/web/login/portal.d.ts.map +0 -1
- package/dist/web/login/portal.js +0 -1329
- 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 +0 -50
- 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 +0 -28
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js +0 -66
- 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 +0 -1651
- 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 +0 -50
- 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 +0 -13
- package/dist/web/token-store.d.ts.map +0 -1
- package/dist/web/token-store.js +0 -44
- 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}/session-view.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/types.js +0 -0
- /package/dist/{harness/extensions → adapters/web/admin}/types.js +0 -0
- /package/dist/{tools → adapters/web/login}/types.js +0 -0
- /package/dist/{web/admin → adapters/web/session-view}/types.js +0 -0
- /package/dist/{web → adapters/web}/types.d.ts +0 -0
- /package/dist/{web/login → adapters/web}/types.js +0 -0
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{web/session-view → cli}/types.js +0 -0
- /package/dist/{web → harness/tools}/types.js +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { LogLevel, WebClient } from "@slack/web-api";
|
|
2
|
+
function formatTs(ts) {
|
|
3
|
+
const date = new Date(parseFloat(ts) * 1000);
|
|
4
|
+
return date
|
|
5
|
+
.toISOString()
|
|
6
|
+
.replace("T", " ")
|
|
7
|
+
.replace(/\.\d+Z$/, "");
|
|
8
|
+
}
|
|
9
|
+
function formatMessage(ts, user, text, indent = "") {
|
|
10
|
+
const prefix = `[${formatTs(ts)}] ${user}: `;
|
|
11
|
+
const lines = text.split("\n");
|
|
12
|
+
const firstLine = `${indent}${prefix}${lines[0]}`;
|
|
13
|
+
if (lines.length === 1)
|
|
14
|
+
return firstLine;
|
|
15
|
+
const contentIndent = indent + " ".repeat(prefix.length);
|
|
16
|
+
return [firstLine, ...lines.slice(1).map((l) => contentIndent + l)].join("\n");
|
|
17
|
+
}
|
|
18
|
+
export async function downloadChannel(channelId, botToken) {
|
|
19
|
+
const client = new WebClient(botToken, { logLevel: LogLevel.ERROR });
|
|
20
|
+
console.error(`Fetching channel info for ${channelId}...`);
|
|
21
|
+
const channelName = await resolveChannelName(client, channelId);
|
|
22
|
+
console.error(`Downloading history for #${channelName} (${channelId})...`);
|
|
23
|
+
const messages = await fetchHistory(client, channelId);
|
|
24
|
+
messages.reverse();
|
|
25
|
+
const threadReplies = await fetchThreadReplies(client, channelId, messages);
|
|
26
|
+
const totalReplies = printTranscript(messages, threadReplies);
|
|
27
|
+
console.error(`Done! ${messages.length} messages, ${totalReplies} thread replies`);
|
|
28
|
+
}
|
|
29
|
+
async function resolveChannelName(client, channelId) {
|
|
30
|
+
try {
|
|
31
|
+
const info = await client.conversations.info({ channel: channelId });
|
|
32
|
+
return typeof info.channel?.name === "string" ? info.channel.name : channelId;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return channelId;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function* pages(fetchPage) {
|
|
39
|
+
let cursor;
|
|
40
|
+
do {
|
|
41
|
+
const response = await fetchPage(cursor);
|
|
42
|
+
yield (response.messages ?? []);
|
|
43
|
+
cursor = response.response_metadata?.next_cursor;
|
|
44
|
+
} while (cursor);
|
|
45
|
+
}
|
|
46
|
+
async function fetchHistory(client, channelId) {
|
|
47
|
+
const messages = [];
|
|
48
|
+
const fetchPage = (cursor) => client.conversations.history({ channel: channelId, limit: 200, cursor });
|
|
49
|
+
for await (const page of pages(fetchPage)) {
|
|
50
|
+
messages.push(...page);
|
|
51
|
+
console.error(` Fetched ${messages.length} messages...`);
|
|
52
|
+
}
|
|
53
|
+
return messages;
|
|
54
|
+
}
|
|
55
|
+
async function fetchThreadReplies(client, channelId, messages) {
|
|
56
|
+
const parents = messages.filter((message) => message.reply_count && message.reply_count > 0);
|
|
57
|
+
console.error(`Fetching ${parents.length} threads...`);
|
|
58
|
+
const threadReplies = new Map();
|
|
59
|
+
for (const [index, parent] of parents.entries()) {
|
|
60
|
+
console.error(` Thread ${index + 1}/${parents.length} (${parent.reply_count} replies)...`);
|
|
61
|
+
threadReplies.set(parent.ts, await fetchReplies(client, channelId, parent.ts));
|
|
62
|
+
}
|
|
63
|
+
return threadReplies;
|
|
64
|
+
}
|
|
65
|
+
async function fetchReplies(client, channelId, ts) {
|
|
66
|
+
const replies = [];
|
|
67
|
+
const fetchPage = (cursor) => client.conversations.replies({ channel: channelId, ts, limit: 200, cursor });
|
|
68
|
+
for await (const page of pages(fetchPage)) {
|
|
69
|
+
replies.push(...page.slice(1));
|
|
70
|
+
}
|
|
71
|
+
return replies;
|
|
72
|
+
}
|
|
73
|
+
function printTranscript(messages, threadReplies) {
|
|
74
|
+
let totalReplies = 0;
|
|
75
|
+
for (const message of messages) {
|
|
76
|
+
console.log(formatMessage(message.ts, message.user || "unknown", message.text || ""));
|
|
77
|
+
for (const reply of threadReplies.get(message.ts) ?? []) {
|
|
78
|
+
console.log(formatMessage(reply.ts, reply.user || "unknown", reply.text || "", " "));
|
|
79
|
+
totalReplies++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return totalReplies;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/cli/download.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogLevel, WebClient } from \"@slack/web-api\";\n\ninterface Message {\n ts: string;\n user?: string;\n text?: string;\n thread_ts?: string;\n reply_count?: number;\n files?: Array<{ name: string; url_private?: string }>;\n}\n\nfunction formatTs(ts: string): string {\n const date = new Date(parseFloat(ts) * 1000);\n return date\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d+Z$/, \"\");\n}\n\nfunction formatMessage(ts: string, user: string, text: string, indent = \"\"): string {\n const prefix = `[${formatTs(ts)}] ${user}: `;\n const lines = text.split(\"\\n\");\n const firstLine = `${indent}${prefix}${lines[0]}`;\n if (lines.length === 1) return firstLine;\n const contentIndent = indent + \" \".repeat(prefix.length);\n return [firstLine, ...lines.slice(1).map((l) => contentIndent + l)].join(\"\\n\");\n}\n\nexport async function downloadChannel(channelId: string, botToken: string): Promise<void> {\n const client = new WebClient(botToken, { logLevel: LogLevel.ERROR });\n\n console.error(`Fetching channel info for ${channelId}...`);\n const channelName = await resolveChannelName(client, channelId);\n console.error(`Downloading history for #${channelName} (${channelId})...`);\n\n const messages = await fetchHistory(client, channelId);\n messages.reverse();\n\n const threadReplies = await fetchThreadReplies(client, channelId, messages);\n const totalReplies = printTranscript(messages, threadReplies);\n console.error(`Done! ${messages.length} messages, ${totalReplies} thread replies`);\n}\n\nasync function resolveChannelName(client: WebClient, channelId: string): Promise<string> {\n try {\n const info = await client.conversations.info({ channel: channelId });\n return typeof info.channel?.name === \"string\" ? info.channel.name : channelId;\n } catch {\n return channelId;\n }\n}\n\ninterface Page {\n messages?: unknown[];\n response_metadata?: { next_cursor?: string };\n}\n\nasync function* pages(fetchPage: (cursor?: string) => Promise<Page>): AsyncGenerator<Message[]> {\n let cursor: string | undefined;\n do {\n const response = await fetchPage(cursor);\n yield (response.messages ?? []) as Message[];\n cursor = response.response_metadata?.next_cursor;\n } while (cursor);\n}\n\nasync function fetchHistory(client: WebClient, channelId: string): Promise<Message[]> {\n const messages: Message[] = [];\n const fetchPage = (cursor?: string) =>\n client.conversations.history({ channel: channelId, limit: 200, cursor });\n for await (const page of pages(fetchPage)) {\n messages.push(...page);\n console.error(` Fetched ${messages.length} messages...`);\n }\n return messages;\n}\n\nasync function fetchThreadReplies(\n client: WebClient,\n channelId: string,\n messages: readonly Message[],\n): Promise<Map<string, Message[]>> {\n const parents = messages.filter((message) => message.reply_count && message.reply_count > 0);\n console.error(`Fetching ${parents.length} threads...`);\n\n const threadReplies = new Map<string, Message[]>();\n for (const [index, parent] of parents.entries()) {\n console.error(` Thread ${index + 1}/${parents.length} (${parent.reply_count} replies)...`);\n threadReplies.set(parent.ts, await fetchReplies(client, channelId, parent.ts));\n }\n return threadReplies;\n}\n\nasync function fetchReplies(client: WebClient, channelId: string, ts: string): Promise<Message[]> {\n const replies: Message[] = [];\n const fetchPage = (cursor?: string) =>\n client.conversations.replies({ channel: channelId, ts, limit: 200, cursor });\n for await (const page of pages(fetchPage)) {\n replies.push(...page.slice(1));\n }\n return replies;\n}\n\nfunction printTranscript(\n messages: readonly Message[],\n threadReplies: ReadonlyMap<string, Message[]>,\n): number {\n let totalReplies = 0;\n for (const message of messages) {\n console.log(formatMessage(message.ts, message.user || \"unknown\", message.text || \"\"));\n for (const reply of threadReplies.get(message.ts) ?? []) {\n console.log(formatMessage(reply.ts, reply.user || \"unknown\", reply.text || \"\", \" \"));\n totalReplies++;\n }\n }\n return totalReplies;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA+BxD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAmD3F"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { InvalidArgumentError } from "commander";
|
|
6
|
+
import { platformIsActive, readEnv } from "../env-manifest.js";
|
|
7
|
+
import { runMigrations } from "../migrations/index.js";
|
|
8
|
+
import { parseSandboxArg } from "../sandbox/registry.js";
|
|
9
|
+
import { assertPlatformName } from "../office/index.js";
|
|
10
|
+
import { errorMessage } from "../unknown-values.js";
|
|
11
|
+
import { cliCommand, commandExitCode, nonEmptyValue, resolveStateDir } from "./arg-grammar.js";
|
|
12
|
+
const PLATFORMS = ["slack", "telegram", "discord", "github"];
|
|
13
|
+
const execFileAsync = promisify(execFile);
|
|
14
|
+
const dockerCli = async (args) => (await execFileAsync("docker", [...args])).stdout;
|
|
15
|
+
function collectOwner(value, owners) {
|
|
16
|
+
const separator = value.lastIndexOf("=");
|
|
17
|
+
if (separator <= 0)
|
|
18
|
+
throw new InvalidArgumentError("expected <conversationId>=<platform>");
|
|
19
|
+
try {
|
|
20
|
+
owners.set(value.slice(0, separator), assertPlatformName(value.slice(separator + 1)));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new InvalidArgumentError(errorMessage(error));
|
|
24
|
+
}
|
|
25
|
+
return owners;
|
|
26
|
+
}
|
|
27
|
+
export async function runMigrateCommand(argv, docker = dockerCli) {
|
|
28
|
+
const command = cliCommand("mikan migrate")
|
|
29
|
+
.description("Apply pending state migrations (stop the daemon first)")
|
|
30
|
+
.option("--state-dir <dir>", "State directory", nonEmptyValue)
|
|
31
|
+
.option("--workspace <dir>", "Workspace directory (default: <state-dir>/workspace)")
|
|
32
|
+
.requiredOption("--sandbox <spec>", "The daemon's --sandbox value: host | container:<name> | image:<image> | cloudflare:<id>", nonEmptyValue)
|
|
33
|
+
.option("--dry-run", "List what each pending migration would change, without writing")
|
|
34
|
+
.option("--owner <conversationId=platform>", "Owning platform for a legacy conversation directory (repeatable)", collectOwner, new Map());
|
|
35
|
+
try {
|
|
36
|
+
command.parse(argv, { from: "user" });
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return commandExitCode(error, command);
|
|
40
|
+
}
|
|
41
|
+
const options = command.opts();
|
|
42
|
+
const stateDir = resolveStateDir(argv);
|
|
43
|
+
const dryRun = options.dryRun ?? false;
|
|
44
|
+
try {
|
|
45
|
+
const sandbox = parseSandboxArg(options.sandbox);
|
|
46
|
+
const ran = await runMigrations({
|
|
47
|
+
workspaceRoot: options.workspace ? resolve(options.workspace) : join(stateDir, "workspace"),
|
|
48
|
+
stateDir,
|
|
49
|
+
dryRun,
|
|
50
|
+
owners: options.owner,
|
|
51
|
+
sandbox,
|
|
52
|
+
enabledPlatforms: PLATFORMS.filter((platform) => platformIsActive(platform)),
|
|
53
|
+
piAgentDir: readEnv("PI_CODING_AGENT_DIR") ?? join(homedir(), ".pi", "agent"),
|
|
54
|
+
modelsPath: join(stateDir, "models.json"),
|
|
55
|
+
docker,
|
|
56
|
+
report: (line) => console.log(line),
|
|
57
|
+
});
|
|
58
|
+
if (ran.length === 0)
|
|
59
|
+
console.log("No pending migrations.");
|
|
60
|
+
else if (!dryRun)
|
|
61
|
+
console.log(`Applied ${ran.length}.`);
|
|
62
|
+
else {
|
|
63
|
+
console.log(`Dry run: ${ran.length} pending.`);
|
|
64
|
+
console.log("Each step was previewed against the files as they are now, so a step may find");
|
|
65
|
+
console.log("more to do once the steps before it have run.");
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(`Migration failed: ${errorMessage(error)}`);
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { InvalidArgumentError } from \"commander\";\nimport { platformIsActive, readEnv } from \"../env-manifest.js\";\nimport { runMigrations } from \"../migrations/index.js\";\nimport { parseSandboxArg } from \"../sandbox/registry.js\";\nimport type { DockerCli } from \"../migrations/types.js\";\nimport { assertPlatformName } from \"../office/index.js\";\nimport type { PlatformName } from \"../types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\nimport { cliCommand, commandExitCode, nonEmptyValue, resolveStateDir } from \"./arg-grammar.js\";\n\nconst PLATFORMS: readonly PlatformName[] = [\"slack\", \"telegram\", \"discord\", \"github\"];\n\nconst execFileAsync = promisify(execFile);\n\nconst dockerCli: DockerCli = async (args) => (await execFileAsync(\"docker\", [...args])).stdout;\n\nfunction collectOwner(value: string, owners: Map<string, PlatformName>): Map<string, PlatformName> {\n const separator = value.lastIndexOf(\"=\");\n if (separator <= 0) throw new InvalidArgumentError(\"expected <conversationId>=<platform>\");\n try {\n owners.set(value.slice(0, separator), assertPlatformName(value.slice(separator + 1)));\n } catch (error) {\n throw new InvalidArgumentError(errorMessage(error));\n }\n return owners;\n}\n\ninterface MigrateOptions {\n stateDir?: string;\n workspace?: string;\n dryRun?: boolean;\n sandbox: string;\n owner: Map<string, PlatformName>;\n}\n\nexport async function runMigrateCommand(argv: string[], docker = dockerCli): Promise<number> {\n const command = cliCommand(\"mikan migrate\")\n .description(\"Apply pending state migrations (stop the daemon first)\")\n .option(\"--state-dir <dir>\", \"State directory\", nonEmptyValue)\n .option(\"--workspace <dir>\", \"Workspace directory (default: <state-dir>/workspace)\")\n .requiredOption(\n \"--sandbox <spec>\",\n \"The daemon's --sandbox value: host | container:<name> | image:<image> | cloudflare:<id>\",\n nonEmptyValue,\n )\n .option(\"--dry-run\", \"List what each pending migration would change, without writing\")\n .option(\n \"--owner <conversationId=platform>\",\n \"Owning platform for a legacy conversation directory (repeatable)\",\n collectOwner,\n new Map<string, PlatformName>(),\n );\n try {\n command.parse(argv, { from: \"user\" });\n } catch (error) {\n return commandExitCode(error, command);\n }\n const options = command.opts<MigrateOptions>();\n const stateDir = resolveStateDir(argv);\n const dryRun = options.dryRun ?? false;\n try {\n const sandbox = parseSandboxArg(options.sandbox);\n const ran = await runMigrations({\n workspaceRoot: options.workspace ? resolve(options.workspace) : join(stateDir, \"workspace\"),\n stateDir,\n dryRun,\n owners: options.owner,\n sandbox,\n enabledPlatforms: PLATFORMS.filter((platform) => platformIsActive(platform)),\n piAgentDir: readEnv(\"PI_CODING_AGENT_DIR\") ?? join(homedir(), \".pi\", \"agent\"),\n modelsPath: join(stateDir, \"models.json\"),\n docker,\n report: (line) => console.log(line),\n });\n if (ran.length === 0) console.log(\"No pending migrations.\");\n else if (!dryRun) console.log(`Applied ${ran.length}.`);\n else {\n console.log(`Dry run: ${ran.length} pending.`);\n console.log(\"Each step was previewed against the files as they are now, so a step may find\");\n console.log(\"more to do once the steps before it have run.\");\n }\n return 0;\n } catch (error) {\n console.error(`Migration failed: ${errorMessage(error)}`);\n return 1;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../src/cli/office.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBvD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { officeKey, OfficeRegistry } from "../office/index.js";
|
|
2
|
+
import { cliCommand, commandExitCode, nonEmptyValue, resolveStateDir } from "./arg-grammar.js";
|
|
3
|
+
export function runOfficeCommand(argv) {
|
|
4
|
+
const command = cliCommand("mikan office")
|
|
5
|
+
.description("Inspect conversation offices")
|
|
6
|
+
.option("--state-dir <dir>", "State directory", nonEmptyValue);
|
|
7
|
+
let result = 1;
|
|
8
|
+
command
|
|
9
|
+
.command("list")
|
|
10
|
+
.description("List each registered office key with its platform and conversation id")
|
|
11
|
+
.action(() => {
|
|
12
|
+
result = listOffices(resolveStateDir(argv));
|
|
13
|
+
});
|
|
14
|
+
try {
|
|
15
|
+
command.parse(argv, { from: "user" });
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
return commandExitCode(error, command);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function listOffices(stateDir) {
|
|
23
|
+
const offices = new OfficeRegistry(stateDir).getOffices();
|
|
24
|
+
console.log(`Offices (${offices.length}):`);
|
|
25
|
+
for (const office of offices) {
|
|
26
|
+
console.log(` ${officeKey(office)} ${office.platform} ${office.conversationId}`);
|
|
27
|
+
}
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=office.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../src/cli/office.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/F,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC;SACvC,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACjE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACL,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC","sourcesContent":["import { officeKey, OfficeRegistry } from \"../office/index.js\";\nimport { cliCommand, commandExitCode, nonEmptyValue, resolveStateDir } from \"./arg-grammar.js\";\n\nexport function runOfficeCommand(argv: string[]): number {\n const command = cliCommand(\"mikan office\")\n .description(\"Inspect conversation offices\")\n .option(\"--state-dir <dir>\", \"State directory\", nonEmptyValue);\n let result = 1;\n command\n .command(\"list\")\n .description(\"List each registered office key with its platform and conversation id\")\n .action(() => {\n result = listOffices(resolveStateDir(argv));\n });\n try {\n command.parse(argv, { from: \"user\" });\n return result;\n } catch (error) {\n return commandExitCode(error, command);\n }\n}\n\nfunction listOffices(stateDir: string): number {\n const offices = new OfficeRegistry(stateDir).getOffices();\n console.log(`Offices (${offices.length}):`);\n for (const office of offices) {\n console.log(` ${officeKey(office)} ${office.platform} ${office.conversationId}`);\n }\n return 0;\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OnboardIo } from "./types.js";
|
|
2
|
+
export declare function renderEnvFile(existing: string | undefined, vars: Record<string, string>): string;
|
|
3
|
+
export declare function runOnboardWizard(stateDir: string, io: OnboardIo, paths?: {
|
|
4
|
+
envFilePath?: string;
|
|
5
|
+
}): Promise<number>;
|
|
6
|
+
export declare function runOnboardCommand(stateDir: string): Promise<number>;
|
|
7
|
+
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/cli/onboard.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+H5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAUhG;AAUD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,EACb,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBzE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as prompts from "@clack/prompts";
|
|
4
|
+
import { ENV_MANIFEST, envReport, readEnv } from "../env-manifest.js";
|
|
5
|
+
import { createGlobalSettingsFile } from "../settings/index.js";
|
|
6
|
+
import { recordAllMigrations } from "../migrations/index.js";
|
|
7
|
+
import { atomicWritePrivateFile } from "../file-guards.js";
|
|
8
|
+
class OnboardAborted extends Error {
|
|
9
|
+
constructor() {
|
|
10
|
+
super("Onboarding aborted.");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async function answer(result) {
|
|
14
|
+
const value = await result;
|
|
15
|
+
if (prompts.isCancel(value))
|
|
16
|
+
throw new OnboardAborted();
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function terminalIo() {
|
|
20
|
+
return {
|
|
21
|
+
ask: (message) => answer(prompts.text({ message: message.trim() })),
|
|
22
|
+
askSecret: (message) => answer(prompts.password({ message: message.trim() })),
|
|
23
|
+
select: (message, labels) => answer(prompts.select({
|
|
24
|
+
message,
|
|
25
|
+
options: labels.map((label, value) => ({ label, value })),
|
|
26
|
+
})),
|
|
27
|
+
confirm: (message) => answer(prompts.confirm({ message, initialValue: true })),
|
|
28
|
+
print: (line) => prompts.log.info(line.trim()),
|
|
29
|
+
close: () => { },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async function askRequired(io, query, secret = false) {
|
|
33
|
+
for (;;) {
|
|
34
|
+
const value = (secret ? await io.askSecret(query) : await io.ask(query)).trim();
|
|
35
|
+
if (value)
|
|
36
|
+
return value;
|
|
37
|
+
io.print(" (required)");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function askChoice(io, labels, prompt) {
|
|
41
|
+
return io.select(prompt, labels);
|
|
42
|
+
}
|
|
43
|
+
async function askAdapter(io, env) {
|
|
44
|
+
const platforms = ENV_MANIFEST.filter((group) => group.kind === "platform");
|
|
45
|
+
io.print("\nStep 1/3 — chat adapter");
|
|
46
|
+
const index = await askChoice(io, platforms.map((g) => g.title), "Platform");
|
|
47
|
+
const group = platforms[index];
|
|
48
|
+
for (const spec of group.vars.filter((v) => v.required)) {
|
|
49
|
+
env[spec.name] = await askRequired(io, ` ${spec.name} (${spec.doc}): `, spec.secret);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function askLlm(io, env) {
|
|
53
|
+
io.print("\nStep 2/3 — LLM provider");
|
|
54
|
+
const index = await askChoice(io, [
|
|
55
|
+
"Anthropic (ANTHROPIC_API_KEY)",
|
|
56
|
+
"OpenAI (OPENAI_API_KEY)",
|
|
57
|
+
"Custom OpenAI-compatible endpoint (vLLM, proxy, …) — writes models.json",
|
|
58
|
+
], "Provider");
|
|
59
|
+
if (index === 0) {
|
|
60
|
+
env.ANTHROPIC_API_KEY = await askRequired(io, " ANTHROPIC_API_KEY: ", true);
|
|
61
|
+
const model = (await io.ask(" Model [claude-sonnet-4-6]: ")).trim() || "claude-sonnet-4-6";
|
|
62
|
+
return { llm: { provider: "anthropic", model } };
|
|
63
|
+
}
|
|
64
|
+
if (index === 1) {
|
|
65
|
+
env.OPENAI_API_KEY = await askRequired(io, " OPENAI_API_KEY: ", true);
|
|
66
|
+
const model = (await io.ask(" Model [gpt-5.2]: ")).trim() || "gpt-5.2";
|
|
67
|
+
return { llm: { provider: "openai", model } };
|
|
68
|
+
}
|
|
69
|
+
const provider = (await io.ask(" Provider name [custom]: ")).trim() || "custom";
|
|
70
|
+
const baseUrl = await askRequired(io, " Base URL (e.g. http://host:8080/v1): ");
|
|
71
|
+
const apiKey = (await io.askSecret(" API key (empty if none): ")).trim();
|
|
72
|
+
const ids = (await askRequired(io, " Model ids (comma-separated): "))
|
|
73
|
+
.split(",")
|
|
74
|
+
.map((id) => id.trim())
|
|
75
|
+
.filter(Boolean);
|
|
76
|
+
const modelsJson = JSON.stringify({
|
|
77
|
+
providers: {
|
|
78
|
+
[provider]: {
|
|
79
|
+
api: "openai-completions",
|
|
80
|
+
baseUrl,
|
|
81
|
+
apiKey: apiKey ? apiKey : undefined,
|
|
82
|
+
models: ids.map((id) => ({ id })),
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
}, null, 2);
|
|
86
|
+
return { llm: { provider, model: ids[0] }, modelsJson };
|
|
87
|
+
}
|
|
88
|
+
async function askSandbox(io) {
|
|
89
|
+
io.print("\nStep 3/3 — sandbox (where agent commands run)");
|
|
90
|
+
const index = await askChoice(io, [
|
|
91
|
+
"host — run directly on this machine (default)",
|
|
92
|
+
"image — per-conversation Docker containers (needs Docker)",
|
|
93
|
+
"other — configure later via --sandbox (cloudflare)",
|
|
94
|
+
], "Sandbox");
|
|
95
|
+
if (index === 0)
|
|
96
|
+
return undefined;
|
|
97
|
+
if (index === 1) {
|
|
98
|
+
const image = (await io.ask(" Image [ghcr.io/geminixiang/mikan-sandbox:latest]: ")).trim() ||
|
|
99
|
+
"ghcr.io/geminixiang/mikan-sandbox:latest";
|
|
100
|
+
return `image:${image}`;
|
|
101
|
+
}
|
|
102
|
+
io.print(" See `mikan --help` for the --sandbox spec.");
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
export function renderEnvFile(existing, vars) {
|
|
106
|
+
const pending = new Map(Object.entries(vars));
|
|
107
|
+
const lines = [];
|
|
108
|
+
for (const line of existing ? existing.split("\n") : []) {
|
|
109
|
+
const rendered = rewriteEnvLine(line, pending);
|
|
110
|
+
if (rendered.trim() || lines.length > 0)
|
|
111
|
+
lines.push(rendered);
|
|
112
|
+
}
|
|
113
|
+
while (lines.at(-1) === "")
|
|
114
|
+
lines.pop();
|
|
115
|
+
for (const [key, value] of pending)
|
|
116
|
+
lines.push(`${key}=${value}`);
|
|
117
|
+
return `${lines.join("\n")}\n`;
|
|
118
|
+
}
|
|
119
|
+
function rewriteEnvLine(line, pending) {
|
|
120
|
+
const key = /^([A-Za-z_][A-Za-z0-9_]*)=/.exec(line)?.[1];
|
|
121
|
+
if (key === undefined || !pending.has(key))
|
|
122
|
+
return line;
|
|
123
|
+
const value = pending.get(key);
|
|
124
|
+
pending.delete(key);
|
|
125
|
+
return `${key}=${value}`;
|
|
126
|
+
}
|
|
127
|
+
export async function runOnboardWizard(stateDir, io, paths) {
|
|
128
|
+
const settingsPath = join(stateDir, "settings.json");
|
|
129
|
+
if (existsSync(settingsPath)) {
|
|
130
|
+
io.print(`Global settings already exists at ${settingsPath}.`);
|
|
131
|
+
io.print("Remove it first to re-run onboarding, or edit it directly.");
|
|
132
|
+
return 1;
|
|
133
|
+
}
|
|
134
|
+
const env = {};
|
|
135
|
+
await askAdapter(io, env);
|
|
136
|
+
const { llm, modelsJson } = await askLlm(io, env);
|
|
137
|
+
const sandboxArg = await askSandbox(io);
|
|
138
|
+
const modelsPath = join(stateDir, "models.json");
|
|
139
|
+
if (modelsJson && existsSync(modelsPath)) {
|
|
140
|
+
io.print(`models.json already exists at ${modelsPath}. Add the provider manually before retrying; nothing was written.`);
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
io.print(`Review settings\nProvider: ${llm.provider}\nModel: ${llm.model}\nSandbox: ${sandboxArg ?? "host"}\nSettings: ${settingsPath}\nCredentials: ${paths?.envFilePath ?? join(stateDir, "mikan.env")}${modelsJson ? `\nModels: ${modelsPath}` : ""}\nSecrets are hidden.`);
|
|
144
|
+
if (!(await io.confirm("Save these settings?"))) {
|
|
145
|
+
io.print("Onboarding cancelled; nothing was written.");
|
|
146
|
+
return 1;
|
|
147
|
+
}
|
|
148
|
+
createGlobalSettingsFile(stateDir, llm);
|
|
149
|
+
recordAllMigrations(stateDir);
|
|
150
|
+
io.print(`\nWrote ${settingsPath}`);
|
|
151
|
+
if (modelsJson) {
|
|
152
|
+
atomicWritePrivateFile(modelsPath, `${modelsJson}\n`);
|
|
153
|
+
io.print(`Wrote ${modelsPath}`);
|
|
154
|
+
}
|
|
155
|
+
const envFilePath = paths?.envFilePath ?? join(stateDir, "mikan.env");
|
|
156
|
+
const existing = existsSync(envFilePath) ? readFileSync(envFilePath, "utf-8") : undefined;
|
|
157
|
+
atomicWritePrivateFile(envFilePath, renderEnvFile(existing, env));
|
|
158
|
+
io.print(`Wrote ${envFilePath} (0600)`);
|
|
159
|
+
io.print(`\n${envReport((name) => env[name] ?? readEnv(name))}`);
|
|
160
|
+
const sandboxFlag = sandboxArg ? ` --sandbox ${sandboxArg}` : "";
|
|
161
|
+
io.print("Next steps:");
|
|
162
|
+
io.print(` pm2: pm2 start ecosystem.config.cjs (loads ${envFilePath}; see deploy/pm2/)`);
|
|
163
|
+
io.print(` direct: set -a; source ${envFilePath}; set +a; mikan${sandboxFlag}`);
|
|
164
|
+
return 0;
|
|
165
|
+
}
|
|
166
|
+
export async function runOnboardCommand(stateDir) {
|
|
167
|
+
if (!process.stdin.isTTY) {
|
|
168
|
+
const settingsPath = createGlobalSettingsFile(stateDir);
|
|
169
|
+
recordAllMigrations(stateDir);
|
|
170
|
+
console.log(`Created global settings at ${settingsPath}`);
|
|
171
|
+
console.log(`Review the file, then start mikan (workspace defaults to ${join(stateDir, "workspace")}).`);
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
prompts.intro("Mikan setup · arrows to choose · Esc / Ctrl+C to cancel");
|
|
175
|
+
const io = terminalIo();
|
|
176
|
+
try {
|
|
177
|
+
const code = await runOnboardWizard(stateDir, io);
|
|
178
|
+
prompts.outro(code === 0 ? "Setup complete" : "Setup not saved");
|
|
179
|
+
return code;
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
if (err instanceof OnboardAborted) {
|
|
183
|
+
prompts.cancel("Onboarding aborted; nothing was written.");
|
|
184
|
+
return 1;
|
|
185
|
+
}
|
|
186
|
+
throw err;
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
io.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=onboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/cli/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,cAAe,SAAQ,KAAK;IAChC;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,KAAK,UAAU,MAAM,CAAI,MAAkB;IACzC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IACxD,OAAO,KAA2B,CAAC;AACrC,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAC1B,MAAM,CACJ,OAAO,CAAC,MAAM,CAAC;YACb,OAAO;YACP,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SAC1D,CAAC,CACH;QACH,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAa,EAAE,KAAa,EAAE,MAAM,GAAG,KAAK;IACrE,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,EAAa,EAAE,MAAgB,EAAE,MAAc;IACtE,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAa,EAAE,GAA2B;IAClE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC5E,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,EAAE,EACF,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAC7B,UAAU,CACX,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,EAAa,EACb,GAA2B;IAE3B,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,EAAE,EACF;QACE,+BAA+B;QAC/B,yBAAyB;QACzB,yEAAyE;KAC1E,EACD,UAAU,CACX,CAAC;IACF,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,GAAG,CAAC,iBAAiB,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,mBAAmB,CAAC;QAC5F,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,GAAG,CAAC,cAAc,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACxE,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;IACjF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,yCAAyC,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,GAAG,GAAG,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;SACnE,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B;QACE,SAAS,EAAE;YACT,CAAC,QAAQ,CAAC,EAAE;gBACV,GAAG,EAAE,oBAAoB;gBACzB,OAAO;gBACP,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACnC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAClC;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAa;IACrC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,EAAE,EACF;QACE,+CAA+C;QAC/C,2DAA2D;QAC3D,oDAAoD;KACrD,EACD,SAAS,CACV,CAAC;IACF,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,KAAK,GACT,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC,IAAI,EAAE;YAC7E,0CAA0C,CAAC;QAC7C,OAAO,SAAS,KAAK,EAAE,CAAC;IAC1B,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA4B,EAAE,IAA4B;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAClE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,OAA4B;IAChE,MAAM,GAAG,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,EAAa,EACb,KAAgC;IAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,KAAK,CAAC,qCAAqC,YAAY,GAAG,CAAC,CAAC;QAC/D,EAAE,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;IAExC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,EAAE,CAAC,KAAK,CACN,iCAAiC,UAAU,mEAAmE,CAC/G,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,EAAE,CAAC,KAAK,CACN,8BAA8B,GAAG,CAAC,QAAQ,YAAY,GAAG,CAAC,KAAK,cAAc,UAAU,IAAI,MAAM,eAAe,YAAY,kBAAkB,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,uBAAuB,CACrQ,CAAC;IACF,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC;QAChD,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9B,EAAE,CAAC,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;IAEpC,IAAI,UAAU,EAAE,CAAC;QACf,sBAAsB,CAAC,UAAU,EAAE,GAAG,UAAU,IAAI,CAAC,CAAC;QACtD,EAAE,CAAC,KAAK,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,sBAAsB,CAAC,WAAW,EAAE,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAClE,EAAE,CAAC,KAAK,CAAC,SAAS,WAAW,SAAS,CAAC,CAAC;IAExC,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxB,EAAE,CAAC,KAAK,CAAC,qDAAqD,WAAW,oBAAoB,CAAC,CAAC;IAC/F,EAAE,CAAC,KAAK,CAAC,4BAA4B,WAAW,kBAAkB,WAAW,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxD,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CACT,4DAA4D,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAC5F,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport * as prompts from \"@clack/prompts\";\nimport { ENV_MANIFEST, envReport, readEnv } from \"../env-manifest.js\";\nimport { createGlobalSettingsFile } from \"../settings/index.js\";\nimport { recordAllMigrations } from \"../migrations/index.js\";\nimport type { OnboardLlmChoice } from \"../types.js\";\nimport { atomicWritePrivateFile } from \"../file-guards.js\";\nimport type { OnboardIo } from \"./types.js\";\n\nclass OnboardAborted extends Error {\n constructor() {\n super(\"Onboarding aborted.\");\n }\n}\n\nasync function answer<T>(result: Promise<T>): Promise<Exclude<T, symbol>> {\n const value = await result;\n if (prompts.isCancel(value)) throw new OnboardAborted();\n return value as Exclude<T, symbol>;\n}\n\nfunction terminalIo(): OnboardIo {\n return {\n ask: (message) => answer(prompts.text({ message: message.trim() })),\n askSecret: (message) => answer(prompts.password({ message: message.trim() })),\n select: (message, labels) =>\n answer(\n prompts.select({\n message,\n options: labels.map((label, value) => ({ label, value })),\n }),\n ),\n confirm: (message) => answer(prompts.confirm({ message, initialValue: true })),\n print: (line) => prompts.log.info(line.trim()),\n close: () => {},\n };\n}\n\nasync function askRequired(io: OnboardIo, query: string, secret = false): Promise<string> {\n for (;;) {\n const value = (secret ? await io.askSecret(query) : await io.ask(query)).trim();\n if (value) return value;\n io.print(\" (required)\");\n }\n}\n\nasync function askChoice(io: OnboardIo, labels: string[], prompt: string): Promise<number> {\n return io.select(prompt, labels);\n}\n\nasync function askAdapter(io: OnboardIo, env: Record<string, string>): Promise<void> {\n const platforms = ENV_MANIFEST.filter((group) => group.kind === \"platform\");\n io.print(\"\\nStep 1/3 — chat adapter\");\n const index = await askChoice(\n io,\n platforms.map((g) => g.title),\n \"Platform\",\n );\n const group = platforms[index]!;\n for (const spec of group.vars.filter((v) => v.required)) {\n env[spec.name] = await askRequired(io, ` ${spec.name} (${spec.doc}): `, spec.secret);\n }\n}\n\nasync function askLlm(\n io: OnboardIo,\n env: Record<string, string>,\n): Promise<{ llm: OnboardLlmChoice; modelsJson?: string }> {\n io.print(\"\\nStep 2/3 — LLM provider\");\n const index = await askChoice(\n io,\n [\n \"Anthropic (ANTHROPIC_API_KEY)\",\n \"OpenAI (OPENAI_API_KEY)\",\n \"Custom OpenAI-compatible endpoint (vLLM, proxy, …) — writes models.json\",\n ],\n \"Provider\",\n );\n if (index === 0) {\n env.ANTHROPIC_API_KEY = await askRequired(io, \" ANTHROPIC_API_KEY: \", true);\n const model = (await io.ask(\" Model [claude-sonnet-4-6]: \")).trim() || \"claude-sonnet-4-6\";\n return { llm: { provider: \"anthropic\", model } };\n }\n if (index === 1) {\n env.OPENAI_API_KEY = await askRequired(io, \" OPENAI_API_KEY: \", true);\n const model = (await io.ask(\" Model [gpt-5.2]: \")).trim() || \"gpt-5.2\";\n return { llm: { provider: \"openai\", model } };\n }\n const provider = (await io.ask(\" Provider name [custom]: \")).trim() || \"custom\";\n const baseUrl = await askRequired(io, \" Base URL (e.g. http://host:8080/v1): \");\n const apiKey = (await io.askSecret(\" API key (empty if none): \")).trim();\n const ids = (await askRequired(io, \" Model ids (comma-separated): \"))\n .split(\",\")\n .map((id) => id.trim())\n .filter(Boolean);\n const modelsJson = JSON.stringify(\n {\n providers: {\n [provider]: {\n api: \"openai-completions\",\n baseUrl,\n apiKey: apiKey ? apiKey : undefined,\n models: ids.map((id) => ({ id })),\n },\n },\n },\n null,\n 2,\n );\n return { llm: { provider, model: ids[0]! }, modelsJson };\n}\n\nasync function askSandbox(io: OnboardIo): Promise<string | undefined> {\n io.print(\"\\nStep 3/3 — sandbox (where agent commands run)\");\n const index = await askChoice(\n io,\n [\n \"host — run directly on this machine (default)\",\n \"image — per-conversation Docker containers (needs Docker)\",\n \"other — configure later via --sandbox (cloudflare)\",\n ],\n \"Sandbox\",\n );\n if (index === 0) return undefined;\n if (index === 1) {\n const image =\n (await io.ask(\" Image [ghcr.io/geminixiang/mikan-sandbox:latest]: \")).trim() ||\n \"ghcr.io/geminixiang/mikan-sandbox:latest\";\n return `image:${image}`;\n }\n io.print(\" See `mikan --help` for the --sandbox spec.\");\n return undefined;\n}\n\nexport function renderEnvFile(existing: string | undefined, vars: Record<string, string>): string {\n const pending = new Map(Object.entries(vars));\n const lines: string[] = [];\n for (const line of existing ? existing.split(\"\\n\") : []) {\n const rendered = rewriteEnvLine(line, pending);\n if (rendered.trim() || lines.length > 0) lines.push(rendered);\n }\n while (lines.at(-1) === \"\") lines.pop();\n for (const [key, value] of pending) lines.push(`${key}=${value}`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction rewriteEnvLine(line: string, pending: Map<string, string>): string {\n const key = /^([A-Za-z_][A-Za-z0-9_]*)=/.exec(line)?.[1];\n if (key === undefined || !pending.has(key)) return line;\n const value = pending.get(key);\n pending.delete(key);\n return `${key}=${value}`;\n}\n\nexport async function runOnboardWizard(\n stateDir: string,\n io: OnboardIo,\n paths?: { envFilePath?: string },\n): Promise<number> {\n const settingsPath = join(stateDir, \"settings.json\");\n if (existsSync(settingsPath)) {\n io.print(`Global settings already exists at ${settingsPath}.`);\n io.print(\"Remove it first to re-run onboarding, or edit it directly.\");\n return 1;\n }\n\n const env: Record<string, string> = {};\n await askAdapter(io, env);\n const { llm, modelsJson } = await askLlm(io, env);\n const sandboxArg = await askSandbox(io);\n\n const modelsPath = join(stateDir, \"models.json\");\n if (modelsJson && existsSync(modelsPath)) {\n io.print(\n `models.json already exists at ${modelsPath}. Add the provider manually before retrying; nothing was written.`,\n );\n return 1;\n }\n io.print(\n `Review settings\\nProvider: ${llm.provider}\\nModel: ${llm.model}\\nSandbox: ${sandboxArg ?? \"host\"}\\nSettings: ${settingsPath}\\nCredentials: ${paths?.envFilePath ?? join(stateDir, \"mikan.env\")}${modelsJson ? `\\nModels: ${modelsPath}` : \"\"}\\nSecrets are hidden.`,\n );\n if (!(await io.confirm(\"Save these settings?\"))) {\n io.print(\"Onboarding cancelled; nothing was written.\");\n return 1;\n }\n\n createGlobalSettingsFile(stateDir, llm);\n recordAllMigrations(stateDir);\n io.print(`\\nWrote ${settingsPath}`);\n\n if (modelsJson) {\n atomicWritePrivateFile(modelsPath, `${modelsJson}\\n`);\n io.print(`Wrote ${modelsPath}`);\n }\n\n const envFilePath = paths?.envFilePath ?? join(stateDir, \"mikan.env\");\n const existing = existsSync(envFilePath) ? readFileSync(envFilePath, \"utf-8\") : undefined;\n atomicWritePrivateFile(envFilePath, renderEnvFile(existing, env));\n io.print(`Wrote ${envFilePath} (0600)`);\n\n io.print(`\\n${envReport((name) => env[name] ?? readEnv(name))}`);\n\n const sandboxFlag = sandboxArg ? ` --sandbox ${sandboxArg}` : \"\";\n io.print(\"Next steps:\");\n io.print(` pm2: pm2 start ecosystem.config.cjs (loads ${envFilePath}; see deploy/pm2/)`);\n io.print(` direct: set -a; source ${envFilePath}; set +a; mikan${sandboxFlag}`);\n return 0;\n}\n\nexport async function runOnboardCommand(stateDir: string): Promise<number> {\n if (!process.stdin.isTTY) {\n const settingsPath = createGlobalSettingsFile(stateDir);\n recordAllMigrations(stateDir);\n console.log(`Created global settings at ${settingsPath}`);\n console.log(\n `Review the file, then start mikan (workspace defaults to ${join(stateDir, \"workspace\")}).`,\n );\n return 0;\n }\n prompts.intro(\"Mikan setup · arrows to choose · Esc / Ctrl+C to cancel\");\n const io = terminalIo();\n try {\n const code = await runOnboardWizard(stateDir, io);\n prompts.outro(code === 0 ? \"Setup complete\" : \"Setup not saved\");\n return code;\n } catch (err) {\n if (err instanceof OnboardAborted) {\n prompts.cancel(\"Onboarding aborted; nothing was written.\");\n return 1;\n }\n throw err;\n } finally {\n io.close();\n }\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface ProcessShutdownOptions {
|
|
2
|
+
stop: () => Promise<void>;
|
|
3
|
+
shutdownObservability: () => Promise<boolean>;
|
|
4
|
+
captureError: (error: Error) => void;
|
|
5
|
+
warn: (message: string, details?: string) => void;
|
|
6
|
+
exit: (code: number) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function runShutdownSteps(steps: readonly {
|
|
9
|
+
name: string;
|
|
10
|
+
run: () => Promise<void>;
|
|
11
|
+
}[]): Promise<void>;
|
|
12
|
+
export declare function createProcessShutdownHandler(options: ProcessShutdownOptions): (signal: NodeJS.Signals) => Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=process-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-lifecycle.d.ts","sourceRoot":"","sources":["../../src/cli/process-lifecycle.ts"],"names":[],"mappings":"AAAA,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qBAAqB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAYD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAqC3C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
function asError(error) {
|
|
2
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
3
|
+
}
|
|
4
|
+
function describeFailure(error) {
|
|
5
|
+
if (!(error instanceof AggregateError))
|
|
6
|
+
return error.message;
|
|
7
|
+
const inner = error.errors.map((entry) => describeFailure(asError(entry)));
|
|
8
|
+
return `${error.message}: ${inner.join("; ")}`;
|
|
9
|
+
}
|
|
10
|
+
export async function runShutdownSteps(steps) {
|
|
11
|
+
const failures = [];
|
|
12
|
+
for (const step of steps) {
|
|
13
|
+
try {
|
|
14
|
+
await step.run();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
const failure = asError(error);
|
|
18
|
+
failures.push(new Error(`${step.name}: ${failure.message}`, { cause: failure }));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (failures.length > 0)
|
|
22
|
+
throw new AggregateError(failures, "Graceful shutdown failed");
|
|
23
|
+
}
|
|
24
|
+
export function createProcessShutdownHandler(options) {
|
|
25
|
+
let shutdown;
|
|
26
|
+
let forced = false;
|
|
27
|
+
return function handleSignal(signal) {
|
|
28
|
+
if (shutdown) {
|
|
29
|
+
forced = true;
|
|
30
|
+
options.warn(`Received ${signal} during shutdown; forcing exit`);
|
|
31
|
+
options.exit(1);
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
}
|
|
34
|
+
shutdown = (async () => {
|
|
35
|
+
let exitCode = 0;
|
|
36
|
+
try {
|
|
37
|
+
await options.stop();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const failure = asError(error);
|
|
41
|
+
exitCode = 1;
|
|
42
|
+
options.warn("Graceful shutdown failed", describeFailure(failure));
|
|
43
|
+
options.captureError(failure);
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
if (!(await options.shutdownObservability())) {
|
|
47
|
+
exitCode = 1;
|
|
48
|
+
options.warn("Observability shutdown timed out");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
exitCode = 1;
|
|
53
|
+
options.warn("Observability shutdown failed", asError(error).message);
|
|
54
|
+
}
|
|
55
|
+
if (!forced)
|
|
56
|
+
options.exit(exitCode);
|
|
57
|
+
})();
|
|
58
|
+
return shutdown;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=process-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../src/cli/process-lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["interface ProcessShutdownOptions {\n stop: () => Promise<void>;\n shutdownObservability: () => Promise<boolean>;\n captureError: (error: Error) => void;\n warn: (message: string, details?: string) => void;\n exit: (code: number) => void;\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction describeFailure(error: Error): string {\n if (!(error instanceof AggregateError)) return error.message;\n const inner = error.errors.map((entry) => describeFailure(asError(entry)));\n return `${error.message}: ${inner.join(\"; \")}`;\n}\n\nexport async function runShutdownSteps(\n steps: readonly { name: string; run: () => Promise<void> }[],\n): Promise<void> {\n const failures: Error[] = [];\n for (const step of steps) {\n try {\n await step.run();\n } catch (error) {\n const failure = asError(error);\n failures.push(new Error(`${step.name}: ${failure.message}`, { cause: failure }));\n }\n }\n if (failures.length > 0) throw new AggregateError(failures, \"Graceful shutdown failed\");\n}\n\nexport function createProcessShutdownHandler(\n options: ProcessShutdownOptions,\n): (signal: NodeJS.Signals) => Promise<void> {\n let shutdown: Promise<void> | undefined;\n let forced = false;\n\n return function handleSignal(signal: NodeJS.Signals): Promise<void> {\n if (shutdown) {\n forced = true;\n options.warn(`Received ${signal} during shutdown; forcing exit`);\n options.exit(1);\n return Promise.resolve();\n }\n\n shutdown = (async () => {\n let exitCode = 0;\n try {\n await options.stop();\n } catch (error) {\n const failure = asError(error);\n exitCode = 1;\n options.warn(\"Graceful shutdown failed\", describeFailure(failure));\n options.captureError(failure);\n }\n\n try {\n if (!(await options.shutdownObservability())) {\n exitCode = 1;\n options.warn(\"Observability shutdown timed out\");\n }\n } catch (error) {\n exitCode = 1;\n options.warn(\"Observability shutdown failed\", asError(error).message);\n }\n\n if (!forced) options.exit(exitCode);\n })();\n return shutdown;\n };\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SandboxConfig } from "../sandbox/types.js";
|
|
2
|
+
export interface OnboardIo {
|
|
3
|
+
ask(query: string): Promise<string>;
|
|
4
|
+
askSecret(query: string): Promise<string>;
|
|
5
|
+
select(query: string, labels: string[]): Promise<number>;
|
|
6
|
+
confirm(query: string): Promise<boolean>;
|
|
7
|
+
print(line: string): void;
|
|
8
|
+
close(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface BootPlan {
|
|
11
|
+
mode: "migrate" | "office" | "env" | "help" | "version" | "onboard" | "download" | "run";
|
|
12
|
+
migrateArgs?: string[];
|
|
13
|
+
officeArgs?: string[];
|
|
14
|
+
stateDir: string;
|
|
15
|
+
workingDir: string;
|
|
16
|
+
workingDirExplicit: boolean;
|
|
17
|
+
sandbox: SandboxConfig;
|
|
18
|
+
downloadChannel?: string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;IACzF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { SandboxConfig } from \"../sandbox/types.js\";\n\nexport interface OnboardIo {\n ask(query: string): Promise<string>;\n askSecret(query: string): Promise<string>;\n select(query: string, labels: string[]): Promise<number>;\n confirm(query: string): Promise<boolean>;\n print(line: string): void;\n close(): void;\n}\n\nexport interface BootPlan {\n mode: \"migrate\" | \"office\" | \"env\" | \"help\" | \"version\" | \"onboard\" | \"download\" | \"run\";\n migrateArgs?: string[];\n officeArgs?: string[];\n stateDir: string;\n workingDir: string;\n workingDirExplicit: boolean;\n sandbox: SandboxConfig;\n downloadChannel?: string;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EnvGroup } from "./types.js";
|
|
2
|
+
export declare function readEnv(name: string): string | undefined;
|
|
3
|
+
export declare function readStandardEnv(name: string): string | undefined;
|
|
4
|
+
export declare function setEnvAliases(name: string, value: string): void;
|
|
5
|
+
export declare const ENV_MANIFEST: readonly EnvGroup[];
|
|
6
|
+
type EnvLookup = (name: string) => string | undefined;
|
|
7
|
+
export declare function platformIsActive(key: string, env?: EnvLookup): boolean;
|
|
8
|
+
export declare function noPlatformsMessage(): string;
|
|
9
|
+
export declare function envSummaryLines(): string[];
|
|
10
|
+
export declare function envReport(env?: EnvLookup): string;
|
|
11
|
+
export declare function resolveLinkListenHost(read?: (name: string) => string | undefined): string;
|
|
12
|
+
export declare function resolveLinkBaseUrl(): string | undefined;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=env-manifest.d.ts.map
|