@geminixiang/mikan 1.0.0-beta.8 → 1.0.0-beta.80
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 +1149 -0
- package/README.md +98 -38
- package/dist/adapters/commands/admin.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/admin.js +12 -9
- package/dist/adapters/commands/admin.js.map +1 -0
- package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
- package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
- package/dist/adapters/commands/auto-reply.js +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/{commands → adapters/commands}/sandbox.d.ts +0 -1
- 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/{commands → adapters/commands}/session-view.js +21 -16
- 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/{commands → adapters/commands}/utils.js +15 -1
- package/dist/adapters/commands/utils.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +10 -17
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +232 -297
- 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 +55 -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 +90 -1
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +25 -9
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +326 -154
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +35 -23
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +121 -28
- 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 +64 -131
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +22 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +277 -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/repo.d.ts +8 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +92 -0
- package/dist/adapters/github/repo.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 +45 -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 +80 -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 +42 -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/tools/sync.d.ts +13 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +29 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +197 -18
- 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 +6 -0
- package/dist/adapters/github/webhook.d.ts.map +1 -0
- package/dist/adapters/github/webhook.js +62 -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 +74 -31
- 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/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
- package/dist/adapters/messages.d.ts.map +1 -0
- package/dist/{platform-messages.js → adapters/messages.js} +4 -1
- 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 +423 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +24 -53
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +140 -91
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +23 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +109 -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 +84 -148
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +51 -39
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +892 -567
- 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 +221 -347
- 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 +6 -0
- package/dist/adapters/slack/task-status.d.ts.map +1 -0
- package/dist/adapters/slack/task-status.js +100 -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 +8 -18
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +114 -232
- 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 +47 -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 +89 -16
- 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 +27 -0
- package/dist/adapters/web/admin/portal.d.ts.map +1 -0
- package/dist/adapters/web/admin/portal.js +1506 -0
- package/dist/adapters/web/admin/portal.js.map +1 -0
- package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
- package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
- package/dist/adapters/web/admin/provider-models.js.map +1 -0
- package/dist/adapters/web/admin/types.d.ts +56 -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/{web → adapters/web}/login/oauth.js +61 -100
- 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/{web → adapters/web}/login/portal.js +169 -159
- package/dist/adapters/web/login/portal.js.map +1 -0
- package/dist/{web → adapters/web}/login/types.d.ts +1 -17
- 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/{portal-shell.js → adapters/web/portal-shell.js} +73 -11
- package/dist/adapters/web/portal-shell.js.map +1 -0
- package/dist/adapters/web/server.d.ts +33 -0
- package/dist/adapters/web/server.d.ts.map +1 -0
- package/dist/{web → adapters/web}/server.js +15 -9
- 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/{web → adapters/web}/session-view/portal.js +641 -181
- package/dist/adapters/web/session-view/portal.js.map +1 -0
- package/dist/{web → adapters/web}/session-view/types.d.ts +1 -6
- package/dist/adapters/web/session-view/types.d.ts.map +1 -0
- package/dist/adapters/web/session-view/types.js.map +1 -0
- package/dist/{web → adapters/web}/token-store.d.ts +0 -3
- package/dist/adapters/web/token-store.d.ts.map +1 -0
- package/dist/{web → adapters/web}/token-store.js +1 -3
- 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 +81 -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/office.d.ts +2 -0
- package/dist/cli/office.d.ts.map +1 -0
- package/dist/cli/office.js +151 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/onboard.d.ts +8 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +195 -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/sandbox.d.ts +3 -0
- package/dist/cli/sandbox.d.ts.map +1 -0
- package/dist/cli/sandbox.js +80 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/sessions.d.ts +2 -0
- package/dist/cli/sessions.d.ts.map +1 -0
- package/dist/cli/sessions.js +78 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/types.d.ts +21 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/env-manifest.d.ts +17 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +249 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events/index.d.ts +122 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +299 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/scheduler.d.ts +25 -0
- package/dist/events/scheduler.d.ts.map +1 -0
- package/dist/events/scheduler.js +223 -0
- package/dist/events/scheduler.js.map +1 -0
- package/dist/file-guards.d.ts +13 -0
- package/dist/file-guards.d.ts.map +1 -0
- package/dist/file-guards.js +104 -0
- package/dist/file-guards.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 +156 -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 +19 -17
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +12 -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/mcp-result.d.ts +20 -0
- package/dist/harness/mcp-result.d.ts.map +1 -0
- package/dist/harness/mcp-result.js +179 -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 +243 -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 +42 -94
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +12 -0
- package/dist/harness/open-connector.d.ts.map +1 -0
- package/dist/harness/open-connector.js +160 -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 +824 -0
- package/dist/harness/presenter.js.map +1 -0
- package/dist/harness/prompt.d.ts +18 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +403 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/runner.d.ts +2 -123
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +547 -415
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +98 -0
- package/dist/harness/session.d.ts.map +1 -0
- package/dist/harness/session.js +645 -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 +101 -55
- 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 +618 -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/{adapters/slack → harness}/tools/attach.js +2 -2
- package/dist/harness/tools/attach.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 +166 -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 +68 -0
- package/dist/harness/tools/generate-image.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 +42 -0
- package/dist/harness/tools/jev-browser.d.ts.map +1 -0
- package/dist/harness/tools/jev-browser.js +547 -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 +55 -0
- package/dist/harness/tools/pi-tools.js.map +1 -0
- package/dist/harness/tools/react.d.ts +11 -0
- package/dist/harness/tools/react.d.ts.map +1 -0
- package/dist/harness/tools/react.js +24 -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/{tools → harness/tools}/sandbox.js +15 -9
- 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 +44 -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/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 +345 -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 +36 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +3 -13
- package/dist/log.js.map +1 -1
- package/dist/main.js +300 -217
- 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 +199 -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/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 +32 -13
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +85 -58
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +30 -3
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +74 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +971 -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 +146 -0
- package/dist/office/projection.js.map +1 -0
- package/dist/office/types.d.ts +55 -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 +375 -152
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +66 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +393 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +41 -17
- 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 +13 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +49 -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 +7 -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/{provisioner.d.ts → sandbox/provisioner.d.ts} +41 -4
- package/dist/sandbox/provisioner.d.ts.map +1 -0
- package/dist/sandbox/provisioner.js +971 -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 +17 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +224 -183
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/history-line.d.ts +9 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +25 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/migrate-common.d.ts +28 -0
- package/dist/sessions/migrate-common.d.ts.map +1 -0
- package/dist/sessions/migrate-common.js +80 -0
- package/dist/sessions/migrate-common.js.map +1 -0
- package/dist/sessions/migrate-pi-084.d.ts +7 -0
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
- package/dist/sessions/migrate-pi-084.js +293 -0
- package/dist/sessions/migrate-pi-084.js.map +1 -0
- package/dist/sessions/migrate-v3.d.ts +7 -0
- package/dist/sessions/migrate-v3.d.ts.map +1 -0
- package/dist/sessions/migrate-v3.js +351 -0
- package/dist/sessions/migrate-v3.js.map +1 -0
- package/dist/sessions/session-key.d.ts +18 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +88 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/session-store.d.ts +55 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +635 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/store.d.ts +7 -61
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +126 -102
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +59 -8
- 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 +76 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +351 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/migrate.d.ts +16 -0
- package/dist/settings/migrate.d.ts.map +1 -0
- package/dist/settings/migrate.js +70 -0
- package/dist/settings/migrate.js.map +1 -0
- package/dist/types.d.ts +231 -173
- 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 +35 -11
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +326 -115
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +5 -16
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +82 -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/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.map +0 -1
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/adapters/telegram/html.d.ts +0 -3
- package/dist/adapters/telegram/html.d.ts.map +0 -1
- package/dist/adapters/telegram/html.js +0 -98
- package/dist/adapters/telegram/html.js.map +0 -1
- package/dist/agent-events.d.ts +0 -5
- package/dist/agent-events.d.ts.map +0 -1
- package/dist/agent-events.js +0 -26
- package/dist/agent-events.js.map +0 -1
- package/dist/agent.d.ts +0 -39
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -1291
- package/dist/agent.js.map +0 -1
- package/dist/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.map +0 -1
- package/dist/commands/auto-reply.d.ts.map +0 -1
- package/dist/commands/auto-reply.js +0 -76
- package/dist/commands/auto-reply.js.map +0 -1
- package/dist/commands/extensions.d.ts +0 -14
- package/dist/commands/extensions.d.ts.map +0 -1
- package/dist/commands/extensions.js +0 -55
- package/dist/commands/extensions.js.map +0 -1
- package/dist/commands/login.d.ts +0 -5
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -115
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/model.d.ts +0 -10
- package/dist/commands/model.d.ts.map +0 -1
- package/dist/commands/model.js +0 -102
- package/dist/commands/model.js.map +0 -1
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -25
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/parse.d.ts +0 -7
- package/dist/commands/parse.d.ts.map +0 -1
- package/dist/commands/parse.js +0 -14
- package/dist/commands/parse.js.map +0 -1
- package/dist/commands/registry.d.ts +0 -5
- package/dist/commands/registry.d.ts.map +0 -1
- package/dist/commands/registry.js +0 -31
- package/dist/commands/registry.js.map +0 -1
- package/dist/commands/sandbox.d.ts.map +0 -1
- package/dist/commands/sandbox.js +0 -78
- package/dist/commands/sandbox.js.map +0 -1
- package/dist/commands/session-view.d.ts.map +0 -1
- package/dist/commands/session-view.js.map +0 -1
- package/dist/commands/types.d.ts +0 -66
- package/dist/commands/types.d.ts.map +0 -1
- package/dist/commands/types.js.map +0 -1
- package/dist/commands/utils.d.ts +0 -11
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js.map +0 -1
- package/dist/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.map +0 -1
- 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.map +0 -1
- 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.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/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/index.d.ts +0 -24
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -31
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/react.d.ts +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.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.map +0 -1
- package/dist/web/admin/provider-models.js.map +0 -1
- package/dist/web/admin/store.d.ts +0 -13
- package/dist/web/admin/store.d.ts.map +0 -1
- package/dist/web/admin/store.js +0 -14
- package/dist/web/admin/store.js.map +0 -1
- package/dist/web/admin/types.d.ts +0 -30
- package/dist/web/admin/types.d.ts.map +0 -1
- package/dist/web/admin/types.js.map +0 -1
- package/dist/web/agent-events/portal.d.ts +0 -3
- package/dist/web/agent-events/portal.d.ts.map +0 -1
- package/dist/web/agent-events/portal.js +0 -18
- package/dist/web/agent-events/portal.js.map +0 -1
- package/dist/web/login/oauth.d.ts +0 -6
- package/dist/web/login/oauth.d.ts.map +0 -1
- package/dist/web/login/oauth.js.map +0 -1
- package/dist/web/login/portal.d.ts +0 -17
- package/dist/web/login/portal.d.ts.map +0 -1
- package/dist/web/login/portal.js.map +0 -1
- package/dist/web/login/store.d.ts +0 -8
- package/dist/web/login/store.d.ts.map +0 -1
- package/dist/web/login/store.js +0 -15
- package/dist/web/login/store.js.map +0 -1
- package/dist/web/login/types.d.ts.map +0 -1
- package/dist/web/login/types.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/server.d.ts +0 -28
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- package/dist/web/session-view/portal.d.ts +0 -13
- package/dist/web/session-view/portal.d.ts.map +0 -1
- package/dist/web/session-view/portal.js.map +0 -1
- package/dist/web/session-view/service.d.ts +0 -6
- package/dist/web/session-view/service.d.ts.map +0 -1
- package/dist/web/session-view/service.js +0 -498
- package/dist/web/session-view/service.js.map +0 -1
- package/dist/web/session-view/store.d.ts +0 -8
- package/dist/web/session-view/store.d.ts.map +0 -1
- package/dist/web/session-view/store.js +0 -15
- package/dist/web/session-view/store.js.map +0 -1
- package/dist/web/session-view/types.d.ts.map +0 -1
- package/dist/web/session-view/types.js.map +0 -1
- package/dist/web/token-store.d.ts.map +0 -1
- package/dist/web/token-store.js.map +0 -1
- package/dist/web/types.d.ts.map +0 -1
- package/dist/web/types.js.map +0 -1
- /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/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
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
import { createHash, randomBytes } from "crypto";
|
|
2
|
-
import { escapeHtml } from "
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { escapeHtml, readJsonBody, renderPortalShell, requestBaseUrl } from "../portal-shell.js";
|
|
3
|
+
import { resolveLinkBaseUrl } from "../../../env-manifest.js";
|
|
4
|
+
import { readEnv } from "../../../env-manifest.js";
|
|
5
|
+
import { InMemoryTokenStore } from "../token-store.js";
|
|
6
|
+
import { getOAuthServices, resolveOAuthService } from "./oauth.js";
|
|
7
|
+
import * as log from "../../../log.js";
|
|
8
|
+
import { reportUserFacingError } from "../../../observability/index.js";
|
|
9
|
+
import { PRODUCT_NAME } from "../../messages.js";
|
|
10
|
+
import { defaultVaultTargetPath } from "../../../vault/index.js";
|
|
11
|
+
const TTL_MS = 15 * 60 * 1000;
|
|
12
|
+
export class InMemoryLinkTokenStore extends InMemoryTokenStore {
|
|
13
|
+
create(platform, platformUserId, conversationId, vaultId, providerId) {
|
|
14
|
+
this.deleteWhere((token) => token.platform === platform && token.platformUserId === platformUserId);
|
|
15
|
+
return this.createRecord(TTL_MS, {
|
|
16
|
+
platform,
|
|
17
|
+
platformUserId,
|
|
18
|
+
vaultId,
|
|
19
|
+
providerId,
|
|
20
|
+
conversationId,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
import { errorMessage, isRecord } from "../../../unknown-values.js";
|
|
12
25
|
const OAUTH_STATE_TTL_MS = 10 * 60 * 1000;
|
|
13
26
|
const DEFAULT_SECRET_CONFIG_ID = "manual";
|
|
14
27
|
const SECRET_PRESETS = [
|
|
@@ -176,17 +189,6 @@ const SECRET_PRESETS = [
|
|
|
176
189
|
],
|
|
177
190
|
},
|
|
178
191
|
];
|
|
179
|
-
// ── request handler ───────────────────────────────────────────────────────────
|
|
180
|
-
/**
|
|
181
|
-
* Start a small HTTP server that receives credential onboarding callbacks from the web portal.
|
|
182
|
-
*
|
|
183
|
-
* Routes:
|
|
184
|
-
* GET /health — health check
|
|
185
|
-
* GET /link?token=xxx — credential onboarding page
|
|
186
|
-
* POST /api/link/complete — API key completion endpoint
|
|
187
|
-
* POST /api/oauth/start — creates provider OAuth redirect URL
|
|
188
|
-
* GET /oauth/callback — OAuth callback endpoint
|
|
189
|
-
*/
|
|
190
192
|
export function createLoginRequestHandler(linkTokenStore, vaultManager, notify) {
|
|
191
193
|
const oauthStates = new Map();
|
|
192
194
|
return (req, res, url) => {
|
|
@@ -205,29 +207,52 @@ export function createLoginRequestHandler(linkTokenStore, vaultManager, notify)
|
|
|
205
207
|
const defaultMode = oauthServiceHint ? "oauth" : "api_key";
|
|
206
208
|
const existingSecrets = describeVaultSecrets(vaultManager, linkToken.vaultId);
|
|
207
209
|
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
208
|
-
res.end(renderCredentialPage(
|
|
209
|
-
|
|
210
|
-
:
|
|
210
|
+
res.end(renderCredentialPage({
|
|
211
|
+
token: rawToken,
|
|
212
|
+
title: oauthServiceHint ? `${oauthServiceHint.label} OAuth` : "Store Secret",
|
|
213
|
+
defaultMode,
|
|
214
|
+
initialEnvKey: "",
|
|
215
|
+
secretLabel: "Secret value",
|
|
216
|
+
placeholder: "sk-...",
|
|
217
|
+
helpText: oauthServiceHint
|
|
218
|
+
? `Authorize ${oauthServiceHint.label} and store tokens in your vault.`
|
|
219
|
+
: "Set any environment variable key/value pair in your vault.",
|
|
220
|
+
oauthServices,
|
|
221
|
+
oauthServiceIdHint: oauthServiceHint?.id,
|
|
222
|
+
existingSecrets,
|
|
223
|
+
}));
|
|
211
224
|
return true;
|
|
212
225
|
}
|
|
213
226
|
if (req.method === "POST" && url.pathname === "/api/link/complete") {
|
|
214
227
|
if (!enforceCsrf(req, res))
|
|
215
228
|
return true;
|
|
216
|
-
void readJsonBody(req, res,
|
|
217
|
-
|
|
229
|
+
void readJsonBody(req, res, 16 * 1024).then((body) => {
|
|
230
|
+
if (body === null)
|
|
231
|
+
return;
|
|
232
|
+
return handleLinkComplete(body, linkTokenStore, vaultManager, notify, res);
|
|
218
233
|
});
|
|
219
234
|
return true;
|
|
220
235
|
}
|
|
221
236
|
if (req.method === "POST" && url.pathname === "/api/oauth/start") {
|
|
222
237
|
if (!enforceCsrf(req, res))
|
|
223
238
|
return true;
|
|
224
|
-
void readJsonBody(req, res,
|
|
225
|
-
|
|
239
|
+
void readJsonBody(req, res, 16 * 1024).then((body) => {
|
|
240
|
+
if (body === null)
|
|
241
|
+
return;
|
|
242
|
+
return handleOAuthStart(body, req, linkTokenStore, oauthStates, res);
|
|
226
243
|
});
|
|
227
244
|
return true;
|
|
228
245
|
}
|
|
229
246
|
if (req.method === "GET" && url.pathname === "/oauth/callback") {
|
|
230
|
-
void handleOAuthCallback(
|
|
247
|
+
void handleOAuthCallback({
|
|
248
|
+
url,
|
|
249
|
+
req,
|
|
250
|
+
linkTokenStore,
|
|
251
|
+
vaultManager,
|
|
252
|
+
notify,
|
|
253
|
+
oauthStates,
|
|
254
|
+
res,
|
|
255
|
+
}).catch((err) => {
|
|
231
256
|
log.logWarning("OAuth callback failed", err.message);
|
|
232
257
|
reportUserFacingError(err, {
|
|
233
258
|
domain: "login",
|
|
@@ -244,16 +269,6 @@ export function createLoginRequestHandler(linkTokenStore, vaultManager, notify)
|
|
|
244
269
|
return false;
|
|
245
270
|
};
|
|
246
271
|
}
|
|
247
|
-
/**
|
|
248
|
-
* Block cross-site POSTs to the credential endpoints. Two defenses:
|
|
249
|
-
* 1. Require Content-Type: application/json, which forces a CORS preflight
|
|
250
|
-
* for any cross-origin fetch and rules out `<form enctype="text/plain">`
|
|
251
|
-
* tricks that could otherwise smuggle a JSON body.
|
|
252
|
-
* 2. When MIKAN_LINK_URL is configured, require that the Origin (or Referer,
|
|
253
|
-
* as a fallback for browsers that strip Origin) matches that base URL.
|
|
254
|
-
* This stops an attacker-controlled page — even one that somehow stole a
|
|
255
|
-
* victim's link token — from completing the flow.
|
|
256
|
-
*/
|
|
257
272
|
function enforceCsrf(req, res) {
|
|
258
273
|
const contentType = req.headers["content-type"]
|
|
259
274
|
?.split(";")[0]
|
|
@@ -266,8 +281,6 @@ function enforceCsrf(req, res) {
|
|
|
266
281
|
}
|
|
267
282
|
const configured = resolveLinkBaseUrl();
|
|
268
283
|
if (!configured) {
|
|
269
|
-
// No trusted origin to compare against in local/dev mode; the loopback
|
|
270
|
-
// bind already prevents cross-host access.
|
|
271
284
|
return true;
|
|
272
285
|
}
|
|
273
286
|
let configuredOrigin;
|
|
@@ -275,7 +288,6 @@ function enforceCsrf(req, res) {
|
|
|
275
288
|
configuredOrigin = new URL(configured).origin;
|
|
276
289
|
}
|
|
277
290
|
catch {
|
|
278
|
-
// Misconfigured MIKAN_LINK_URL — fail closed.
|
|
279
291
|
res.writeHead(500, { "Content-Type": "application/json" });
|
|
280
292
|
res.end(JSON.stringify({ error: "Server misconfiguration" }));
|
|
281
293
|
return false;
|
|
@@ -287,7 +299,6 @@ function enforceCsrf(req, res) {
|
|
|
287
299
|
}
|
|
288
300
|
return true;
|
|
289
301
|
}
|
|
290
|
-
/** Best-effort origin of the request, derived from Origin or Referer. */
|
|
291
302
|
function requestOrigin(req) {
|
|
292
303
|
const origin = req.headers.origin?.trim();
|
|
293
304
|
if (origin && origin !== "null")
|
|
@@ -302,18 +313,9 @@ function requestOrigin(req) {
|
|
|
302
313
|
return undefined;
|
|
303
314
|
}
|
|
304
315
|
}
|
|
305
|
-
async function readJsonBody(req, res, onBody) {
|
|
306
|
-
const body = await readRawBody(req, res, 16 * 1024);
|
|
307
|
-
if (body === null)
|
|
308
|
-
return;
|
|
309
|
-
await onBody(body);
|
|
310
|
-
}
|
|
311
|
-
// ── HTML helpers ───────────────────────────────────────────────────────────────
|
|
312
316
|
const esc = escapeHtml;
|
|
313
317
|
const loginViewStyles = `
|
|
314
|
-
|
|
315
|
-
This module only adds preset cards, service logos, help popovers,
|
|
316
|
-
and the mode toggle. */
|
|
318
|
+
|
|
317
319
|
|
|
318
320
|
p { margin: 0; color: var(--muted); font-size: 0.92rem; line-height: 1.55; }
|
|
319
321
|
|
|
@@ -669,7 +671,7 @@ function renderServiceLogo(kind) {
|
|
|
669
671
|
sentry: { className: "sentry", text: "S" },
|
|
670
672
|
manual: { className: "manual", text: ">_" },
|
|
671
673
|
};
|
|
672
|
-
const logo = textLogos[kind] ?? textLogos.manual;
|
|
674
|
+
const logo = textLogos[kind] ?? textLogos.manual ?? { className: "manual", text: ">_" };
|
|
673
675
|
return `<span class="service-logo ${logo.className}" aria-hidden="true"><span class="service-logo-text">${logo.text}</span></span>`;
|
|
674
676
|
}
|
|
675
677
|
function resolveFieldEnvKeys(field) {
|
|
@@ -739,42 +741,8 @@ function renderManualProviderCard(initialEnvKey, secretLabel, placeholder) {
|
|
|
739
741
|
</div>
|
|
740
742
|
</section>`;
|
|
741
743
|
}
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
.map((service) => {
|
|
745
|
-
const selected = service.id === oauthServiceIdHint ? ' selected="selected"' : "";
|
|
746
|
-
return `<option value="${esc(service.id)}"${selected}>${esc(service.label)}</option>`;
|
|
747
|
-
})
|
|
748
|
-
.join("\n");
|
|
749
|
-
const presetCards = SECRET_PRESETS.map(renderPresetProviderCard).join("\n");
|
|
750
|
-
return renderHtmlDocument("Login", `<section class="card stack">
|
|
751
|
-
<p class="eyebrow">${PRODUCT_NAME}</p>
|
|
752
|
-
<h1 class="page-title">${esc(title)}</h1>
|
|
753
|
-
<p>Your personal sandbox is already provisioned automatically.</p>
|
|
754
|
-
<p>${esc(helpText)}</p>
|
|
755
|
-
${renderSecretsSummary(existingSecrets)}
|
|
756
|
-
<div class="mode">
|
|
757
|
-
<label><input type="radio" name="mode" value="api_key" ${defaultMode === "api_key" ? "checked" : ""}> Secrets / API tokens</label>
|
|
758
|
-
<label><input type="radio" name="mode" value="oauth" ${defaultMode === "oauth" ? "checked" : ""}> OAuth login</label>
|
|
759
|
-
</div>
|
|
760
|
-
</section>
|
|
761
|
-
|
|
762
|
-
<div id="api-panel" class="panel">
|
|
763
|
-
${presetCards}
|
|
764
|
-
${renderManualProviderCard(initialEnvKey, secretLabel, placeholder)}
|
|
765
|
-
</div>
|
|
766
|
-
|
|
767
|
-
<div id="oauth-panel" class="panel card stack">
|
|
768
|
-
<label for="oauthService">OAuth service</label>
|
|
769
|
-
<select id="oauthService" name="oauthService">${oauthOptions}</select>
|
|
770
|
-
<p class="panel-note">You'll be redirected to the selected service's authorization page.</p>
|
|
771
|
-
</div>
|
|
772
|
-
|
|
773
|
-
<div>
|
|
774
|
-
<button id="btn" class="primary-button" onclick="connect()">Continue</button>
|
|
775
|
-
<div id="result" class="result" aria-live="polite"></div>
|
|
776
|
-
</div>
|
|
777
|
-
<script>
|
|
744
|
+
const CREDENTIAL_PAGE_TOKEN = "__MIKAN_LOGIN_TOKEN__";
|
|
745
|
+
const CREDENTIAL_PAGE_SCRIPT = ` <script>
|
|
778
746
|
const envKeyPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
779
747
|
|
|
780
748
|
function selectedMode() {
|
|
@@ -858,7 +826,7 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
|
|
|
858
826
|
const r = await fetch('/api/oauth/start', {
|
|
859
827
|
method: 'POST',
|
|
860
828
|
headers: { 'Content-Type': 'application/json' },
|
|
861
|
-
body: JSON.stringify({ token: '
|
|
829
|
+
body: JSON.stringify({ token: '__MIKAN_LOGIN_TOKEN__', serviceId }),
|
|
862
830
|
});
|
|
863
831
|
const data = await r.json();
|
|
864
832
|
if (!r.ok) {
|
|
@@ -880,7 +848,7 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
|
|
|
880
848
|
const r = await fetch('/api/link/complete', {
|
|
881
849
|
method: 'POST',
|
|
882
850
|
headers: { 'Content-Type': 'application/json' },
|
|
883
|
-
body: JSON.stringify({ token: '
|
|
851
|
+
body: JSON.stringify({ token: '__MIKAN_LOGIN_TOKEN__', mode: 'api_key', env: payload.env }),
|
|
884
852
|
});
|
|
885
853
|
const data = await r.json();
|
|
886
854
|
if (r.ok) {
|
|
@@ -941,7 +909,47 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
|
|
|
941
909
|
resetContinueButton();
|
|
942
910
|
}
|
|
943
911
|
}
|
|
944
|
-
</script
|
|
912
|
+
</script>`;
|
|
913
|
+
function renderCredentialPageScript(token) {
|
|
914
|
+
return CREDENTIAL_PAGE_SCRIPT.replaceAll(CREDENTIAL_PAGE_TOKEN, () => esc(token));
|
|
915
|
+
}
|
|
916
|
+
function renderCredentialPage(options) {
|
|
917
|
+
const { token, title, defaultMode, initialEnvKey, secretLabel, placeholder, helpText, oauthServices, oauthServiceIdHint, existingSecrets, } = options;
|
|
918
|
+
const oauthOptions = oauthServices
|
|
919
|
+
.map((service) => {
|
|
920
|
+
const selected = service.id === oauthServiceIdHint ? ' selected="selected"' : "";
|
|
921
|
+
return `<option value="${esc(service.id)}"${selected}>${esc(service.label)}</option>`;
|
|
922
|
+
})
|
|
923
|
+
.join("\n");
|
|
924
|
+
const presetCards = SECRET_PRESETS.map(renderPresetProviderCard).join("\n");
|
|
925
|
+
return renderHtmlDocument("Login", `<section class="card stack">
|
|
926
|
+
<p class="eyebrow">${PRODUCT_NAME}</p>
|
|
927
|
+
<h1 class="page-title">${esc(title)}</h1>
|
|
928
|
+
<p>Your personal sandbox is already provisioned automatically.</p>
|
|
929
|
+
<p>${esc(helpText)}</p>
|
|
930
|
+
${renderSecretsSummary(existingSecrets)}
|
|
931
|
+
<div class="mode">
|
|
932
|
+
<label><input type="radio" name="mode" value="api_key" ${defaultMode === "api_key" ? "checked" : ""}> Secrets / API tokens</label>
|
|
933
|
+
<label><input type="radio" name="mode" value="oauth" ${defaultMode === "oauth" ? "checked" : ""}> OAuth login</label>
|
|
934
|
+
</div>
|
|
935
|
+
</section>
|
|
936
|
+
|
|
937
|
+
<div id="api-panel" class="panel">
|
|
938
|
+
${presetCards}
|
|
939
|
+
${renderManualProviderCard(initialEnvKey, secretLabel, placeholder)}
|
|
940
|
+
</div>
|
|
941
|
+
|
|
942
|
+
<div id="oauth-panel" class="panel card stack">
|
|
943
|
+
<label for="oauthService">OAuth service</label>
|
|
944
|
+
<select id="oauthService" name="oauthService">${oauthOptions}</select>
|
|
945
|
+
<p class="panel-note">You'll be redirected to the selected service's authorization page.</p>
|
|
946
|
+
</div>
|
|
947
|
+
|
|
948
|
+
<div>
|
|
949
|
+
<button id="btn" class="primary-button" onclick="connect()">Continue</button>
|
|
950
|
+
<div id="result" class="result" aria-live="polite"></div>
|
|
951
|
+
</div>
|
|
952
|
+
${renderCredentialPageScript(token)}`);
|
|
945
953
|
}
|
|
946
954
|
function renderErrorPage(message) {
|
|
947
955
|
return renderStatusPage("Login Error", message, "err");
|
|
@@ -953,7 +961,7 @@ function isValidEnvKey(value) {
|
|
|
953
961
|
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);
|
|
954
962
|
}
|
|
955
963
|
function extractEnvUpdates(data) {
|
|
956
|
-
if (
|
|
964
|
+
if (isRecord(data.env)) {
|
|
957
965
|
const rawEntries = Object.entries(data.env);
|
|
958
966
|
if (rawEntries.length === 0)
|
|
959
967
|
return { error: "Missing required field: env" };
|
|
@@ -1001,17 +1009,7 @@ function renderSentryCliConfig(updates) {
|
|
|
1001
1009
|
}
|
|
1002
1010
|
return lines.join("\n");
|
|
1003
1011
|
}
|
|
1004
|
-
|
|
1005
|
-
async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, res) {
|
|
1006
|
-
let data;
|
|
1007
|
-
try {
|
|
1008
|
-
data = JSON.parse(body);
|
|
1009
|
-
}
|
|
1010
|
-
catch {
|
|
1011
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1012
|
-
res.end(JSON.stringify({ error: "Invalid JSON" }));
|
|
1013
|
-
return;
|
|
1014
|
-
}
|
|
1012
|
+
async function handleLinkComplete(data, linkTokenStore, vaultManager, notify, res) {
|
|
1015
1013
|
if (!data.token) {
|
|
1016
1014
|
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1017
1015
|
res.end(JSON.stringify({ error: "Missing required field: token" }));
|
|
@@ -1024,8 +1022,6 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
|
|
|
1024
1022
|
return;
|
|
1025
1023
|
}
|
|
1026
1024
|
const envKeys = Object.keys(updates).toSorted((left, right) => left.localeCompare(right));
|
|
1027
|
-
// Atomic consume prevents two concurrent requests from both passing the
|
|
1028
|
-
// validity check before either deletes the token.
|
|
1029
1025
|
const linkToken = linkTokenStore.consume(data.token);
|
|
1030
1026
|
if (!linkToken) {
|
|
1031
1027
|
res.writeHead(400, { "Content-Type": "application/json" });
|
|
@@ -1037,12 +1033,13 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
|
|
|
1037
1033
|
try {
|
|
1038
1034
|
vaultManager.upsertEnv(linkToken.vaultId, updates);
|
|
1039
1035
|
if (sentryCliConfig) {
|
|
1040
|
-
|
|
1041
|
-
|
|
1036
|
+
const target = defaultVaultTargetPath(".sentryclirc");
|
|
1037
|
+
vaultManager.upsertFile(linkToken.vaultId, ".sentryclirc", sentryCliConfig, target);
|
|
1038
|
+
fileTargets.push(target);
|
|
1042
1039
|
}
|
|
1043
1040
|
}
|
|
1044
1041
|
catch (persistError) {
|
|
1045
|
-
log.logWarning(`Failed to persist [${envKeys.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId}`,
|
|
1042
|
+
log.logWarning(`Failed to persist [${envKeys.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId}`, errorMessage(persistError));
|
|
1046
1043
|
reportUserFacingError(persistError, {
|
|
1047
1044
|
domain: "login",
|
|
1048
1045
|
surface: "credential_login",
|
|
@@ -1085,17 +1082,7 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
|
|
|
1085
1082
|
});
|
|
1086
1083
|
});
|
|
1087
1084
|
}
|
|
1088
|
-
|
|
1089
|
-
async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
|
|
1090
|
-
let data;
|
|
1091
|
-
try {
|
|
1092
|
-
data = JSON.parse(body);
|
|
1093
|
-
}
|
|
1094
|
-
catch {
|
|
1095
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1096
|
-
res.end(JSON.stringify({ error: "Invalid JSON" }));
|
|
1097
|
-
return;
|
|
1098
|
-
}
|
|
1085
|
+
async function handleOAuthStart(data, req, linkTokenStore, oauthStates, res) {
|
|
1099
1086
|
if (!data.token || !data.serviceId) {
|
|
1100
1087
|
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1101
1088
|
res.end(JSON.stringify({ error: "Missing required fields: token/serviceId" }));
|
|
@@ -1113,8 +1100,8 @@ async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
|
|
|
1113
1100
|
res.end(JSON.stringify({ error: `Unsupported OAuth service: ${data.serviceId}` }));
|
|
1114
1101
|
return;
|
|
1115
1102
|
}
|
|
1116
|
-
const clientId =
|
|
1117
|
-
const clientSecret =
|
|
1103
|
+
const clientId = readEnv(service.clientIdEnvKey);
|
|
1104
|
+
const clientSecret = readEnv(service.clientSecretEnvKey);
|
|
1118
1105
|
if (!clientId || !clientSecret) {
|
|
1119
1106
|
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1120
1107
|
res.end(JSON.stringify({
|
|
@@ -1153,69 +1140,64 @@ async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
|
|
|
1153
1140
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1154
1141
|
res.end(JSON.stringify({ ok: true, redirectUrl: authorizeUrl.toString() }));
|
|
1155
1142
|
}
|
|
1156
|
-
|
|
1143
|
+
function resolveOAuthCallback(options) {
|
|
1144
|
+
const { url, oauthStates, linkTokenStore, res } = options;
|
|
1157
1145
|
const state = url.searchParams.get("state") ?? "";
|
|
1158
1146
|
const code = url.searchParams.get("code") ?? "";
|
|
1159
1147
|
const oauthError = url.searchParams.get("error");
|
|
1160
|
-
// Atomic pop: whatever path we take from here, this state is spent.
|
|
1161
|
-
// Done before any `await` to close the TOCTOU window between the state
|
|
1162
|
-
// lookup and the final delete.
|
|
1163
1148
|
const pending = oauthStates.get(state);
|
|
1164
1149
|
if (pending)
|
|
1165
1150
|
oauthStates.delete(state);
|
|
1166
1151
|
if (oauthError) {
|
|
1167
1152
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1168
1153
|
res.end(renderErrorPage(`OAuth authorization failed: ${oauthError}`));
|
|
1169
|
-
return;
|
|
1154
|
+
return undefined;
|
|
1170
1155
|
}
|
|
1171
1156
|
if (!pending || Date.now() > pending.expiresAt) {
|
|
1172
1157
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1173
1158
|
res.end(renderErrorPage("OAuth state is invalid or expired. Please run /login again."));
|
|
1174
|
-
return;
|
|
1159
|
+
return undefined;
|
|
1175
1160
|
}
|
|
1176
1161
|
if (!code) {
|
|
1177
1162
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1178
1163
|
res.end(renderErrorPage("Missing OAuth authorization code."));
|
|
1179
|
-
return;
|
|
1164
|
+
return undefined;
|
|
1180
1165
|
}
|
|
1181
1166
|
const service = resolveOAuthService(pending.serviceId);
|
|
1182
1167
|
if (!service) {
|
|
1183
1168
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1184
1169
|
res.end(renderErrorPage("Unsupported OAuth service."));
|
|
1185
|
-
return;
|
|
1170
|
+
return undefined;
|
|
1186
1171
|
}
|
|
1187
|
-
const clientId =
|
|
1188
|
-
const clientSecret =
|
|
1172
|
+
const clientId = readEnv(service.clientIdEnvKey);
|
|
1173
|
+
const clientSecret = readEnv(service.clientSecretEnvKey);
|
|
1189
1174
|
if (!clientId || !clientSecret) {
|
|
1190
1175
|
res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
|
|
1191
1176
|
res.end(renderErrorPage("OAuth service is not configured on server."));
|
|
1192
|
-
return;
|
|
1177
|
+
return undefined;
|
|
1193
1178
|
}
|
|
1194
|
-
// Atomic consume: pairs with the callback being one-shot. Two concurrent
|
|
1195
|
-
// callbacks for the same state would previously both pass `peek` and both
|
|
1196
|
-
// run `exchangeOAuthCode` across the await; only one reaches `consume`.
|
|
1197
1179
|
const linkToken = linkTokenStore.consume(pending.linkToken);
|
|
1198
1180
|
if (!linkToken) {
|
|
1199
1181
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1200
1182
|
res.end(renderErrorPage("Login link is invalid or expired. Please run /login again."));
|
|
1201
|
-
return;
|
|
1183
|
+
return undefined;
|
|
1202
1184
|
}
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
const
|
|
1185
|
+
return { code, codeVerifier: pending.codeVerifier, service, clientId, clientSecret, linkToken };
|
|
1186
|
+
}
|
|
1187
|
+
function storeOAuthCredentials(options) {
|
|
1188
|
+
const { tokenResponse, service, clientId, clientSecret, linkToken, vaultManager, res } = options;
|
|
1189
|
+
const accessToken = tokenResponse.access_token?.trim();
|
|
1190
|
+
const refreshToken = tokenResponse.refresh_token?.trim();
|
|
1207
1191
|
if (!accessToken) {
|
|
1208
1192
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1209
1193
|
res.end(renderErrorPage("OAuth token exchange did not return an access_token."));
|
|
1210
|
-
return;
|
|
1194
|
+
return undefined;
|
|
1211
1195
|
}
|
|
1212
1196
|
const updates = {};
|
|
1213
|
-
for (const key of service.accessTokenEnvKeys ?? [])
|
|
1197
|
+
for (const key of service.accessTokenEnvKeys ?? [])
|
|
1214
1198
|
updates[key] = accessToken;
|
|
1215
|
-
|
|
1216
|
-
if (refreshToken && service.refreshTokenEnvKey) {
|
|
1199
|
+
if (refreshToken && service.refreshTokenEnvKey)
|
|
1217
1200
|
updates[service.refreshTokenEnvKey] = refreshToken;
|
|
1218
|
-
}
|
|
1219
1201
|
const fileOutput = service.fileOutput;
|
|
1220
1202
|
let mountedPath;
|
|
1221
1203
|
if (fileOutput?.type === "authorized_user") {
|
|
@@ -1223,15 +1205,13 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
|
|
|
1223
1205
|
res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
|
|
1224
1206
|
res.end(renderErrorPage("OAuth token exchange did not return a refresh_token. " +
|
|
1225
1207
|
"Retry after revoking prior consent or ensure prompt=consent is applied."));
|
|
1226
|
-
return;
|
|
1208
|
+
return undefined;
|
|
1227
1209
|
}
|
|
1228
1210
|
mountedPath = fileOutput.targetPath ?? defaultVaultTargetPath(fileOutput.relativePath);
|
|
1229
|
-
if (fileOutput.envKey)
|
|
1211
|
+
if (fileOutput.envKey)
|
|
1230
1212
|
updates[fileOutput.envKey] = mountedPath;
|
|
1231
|
-
|
|
1232
|
-
for (const key of fileOutput.additionalEnvKeys ?? []) {
|
|
1213
|
+
for (const key of fileOutput.additionalEnvKeys ?? [])
|
|
1233
1214
|
updates[key] = mountedPath;
|
|
1234
|
-
}
|
|
1235
1215
|
}
|
|
1236
1216
|
const storedTargets = [];
|
|
1237
1217
|
try {
|
|
@@ -1246,7 +1226,7 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
|
|
|
1246
1226
|
}
|
|
1247
1227
|
}
|
|
1248
1228
|
catch (persistError) {
|
|
1249
|
-
log.logWarning(`Failed to persist OAuth credentials for ${linkToken.platform}/${linkToken.platformUserId}`,
|
|
1229
|
+
log.logWarning(`Failed to persist OAuth credentials for ${linkToken.platform}/${linkToken.platformUserId}`, errorMessage(persistError));
|
|
1250
1230
|
reportUserFacingError(persistError, {
|
|
1251
1231
|
domain: "login",
|
|
1252
1232
|
surface: "oauth",
|
|
@@ -1263,10 +1243,39 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
|
|
|
1263
1243
|
});
|
|
1264
1244
|
res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
|
|
1265
1245
|
res.end(renderErrorPage("OAuth tokens were received but could not be stored on the server. Fix the server issue and run /login again."));
|
|
1266
|
-
return;
|
|
1246
|
+
return undefined;
|
|
1267
1247
|
}
|
|
1248
|
+
return storedTargets;
|
|
1249
|
+
}
|
|
1250
|
+
async function handleOAuthCallback(options) {
|
|
1251
|
+
const resolved = resolveOAuthCallback(options);
|
|
1252
|
+
if (!resolved)
|
|
1253
|
+
return;
|
|
1254
|
+
const { service, code, clientId, clientSecret, codeVerifier, linkToken } = resolved;
|
|
1255
|
+
const redirectUri = `${requestBaseUrl(options.req)}/oauth/callback`;
|
|
1256
|
+
const tokenResponse = await exchangeOAuthCode({
|
|
1257
|
+
service,
|
|
1258
|
+
code,
|
|
1259
|
+
clientId,
|
|
1260
|
+
clientSecret,
|
|
1261
|
+
redirectUri,
|
|
1262
|
+
codeVerifier,
|
|
1263
|
+
});
|
|
1264
|
+
const storedTargets = storeOAuthCredentials({
|
|
1265
|
+
tokenResponse,
|
|
1266
|
+
service,
|
|
1267
|
+
clientId,
|
|
1268
|
+
clientSecret,
|
|
1269
|
+
linkToken,
|
|
1270
|
+
vaultManager: options.vaultManager,
|
|
1271
|
+
res: options.res,
|
|
1272
|
+
});
|
|
1273
|
+
if (!storedTargets)
|
|
1274
|
+
return;
|
|
1268
1275
|
log.logInfo(`Stored [${storedTargets.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId} in vault:${linkToken.vaultId}`);
|
|
1269
|
-
|
|
1276
|
+
options
|
|
1277
|
+
.notify(linkToken.platform, linkToken.conversationId, `${service.label} OAuth stored (${storedTargets.join(", ")}) in vault \`${linkToken.vaultId}\`.`)
|
|
1278
|
+
.catch((err) => {
|
|
1270
1279
|
log.logWarning("Failed to notify user after OAuth login", err.message);
|
|
1271
1280
|
reportUserFacingError(err, {
|
|
1272
1281
|
domain: "login",
|
|
@@ -1283,10 +1292,11 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
|
|
|
1283
1292
|
},
|
|
1284
1293
|
});
|
|
1285
1294
|
});
|
|
1286
|
-
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
1287
|
-
res.end(renderSuccessPage(`${service.label} OAuth connected successfully.`));
|
|
1295
|
+
options.res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
1296
|
+
options.res.end(renderSuccessPage(`${service.label} OAuth connected successfully.`));
|
|
1288
1297
|
}
|
|
1289
|
-
async function exchangeOAuthCode(
|
|
1298
|
+
async function exchangeOAuthCode(options) {
|
|
1299
|
+
const { service, code, clientId, clientSecret, redirectUri, codeVerifier } = options;
|
|
1290
1300
|
const params = new URLSearchParams();
|
|
1291
1301
|
params.set("grant_type", "authorization_code");
|
|
1292
1302
|
params.set("code", code);
|