@geminixiang/mikan 1.0.0-beta.7 → 1.0.0-beta.71
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 +1052 -0
- package/README.md +98 -38
- package/dist/adapters/commands/admin.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/admin.js +11 -8
- package/dist/adapters/commands/admin.js.map +1 -0
- package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
- package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
- package/dist/adapters/commands/auto-reply.js +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 +166 -0
- package/dist/adapters/commands/login.js.map +1 -0
- package/dist/adapters/commands/manifest.d.ts +37 -0
- package/dist/adapters/commands/manifest.d.ts.map +1 -0
- package/dist/adapters/commands/manifest.js +155 -0
- package/dist/adapters/commands/manifest.js.map +1 -0
- package/dist/adapters/commands/model.d.ts +15 -0
- package/dist/adapters/commands/model.d.ts.map +1 -0
- package/dist/adapters/commands/model.js +153 -0
- package/dist/adapters/commands/model.js.map +1 -0
- package/dist/adapters/commands/new.d.ts.map +1 -0
- package/dist/adapters/commands/new.js +41 -0
- package/dist/adapters/commands/new.js.map +1 -0
- package/dist/adapters/commands/registry.d.ts +5 -0
- package/dist/adapters/commands/registry.d.ts.map +1 -0
- package/dist/adapters/commands/registry.js +43 -0
- package/dist/adapters/commands/registry.js.map +1 -0
- package/dist/adapters/commands/sandbox.d.ts.map +1 -0
- package/dist/adapters/commands/sandbox.js +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 +23 -16
- package/dist/adapters/commands/session-view.js.map +1 -0
- package/dist/adapters/commands/types.d.ts +145 -0
- package/dist/adapters/commands/types.d.ts.map +1 -0
- package/dist/adapters/commands/types.js.map +1 -0
- package/dist/adapters/commands/utils.d.ts +14 -0
- package/dist/adapters/commands/utils.d.ts.map +1 -0
- package/dist/{commands → adapters/commands}/utils.js +18 -1
- package/dist/adapters/commands/utils.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +11 -8
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +223 -256
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +28 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +32 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +2 -6
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +64 -218
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +3 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +84 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/discord/types.d.ts +8 -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 +102 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +720 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +301 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/context.d.ts +5 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +101 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +78 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +337 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +57 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +33 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +55 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +18 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +86 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +21 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +21 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +17 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +345 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/github/webhook.d.ts +20 -0
- package/dist/adapters/github/webhook.d.ts.map +1 -0
- package/dist/adapters/github/webhook.js +78 -0
- package/dist/adapters/github/webhook.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +19 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/intake.d.ts +17 -6
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +96 -27
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +19 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +152 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- package/dist/{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 +443 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +37 -11
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +130 -24
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +73 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +205 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
- package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
- package/dist/adapters/slack/auto-reply-context.js +28 -0
- package/dist/adapters/slack/auto-reply-context.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +14 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +104 -148
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +154 -21
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +1037 -484
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +2 -6
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +11 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts +30 -0
- package/dist/adapters/slack/jev-context.d.ts.map +1 -0
- package/dist/adapters/slack/jev-context.js +67 -0
- package/dist/adapters/slack/jev-context.js.map +1 -0
- package/dist/adapters/slack/markdown.d.ts +3 -0
- package/dist/adapters/slack/markdown.d.ts.map +1 -0
- package/dist/adapters/slack/markdown.js +48 -0
- package/dist/adapters/slack/markdown.js.map +1 -0
- package/dist/adapters/slack/persona.d.ts +15 -0
- package/dist/adapters/slack/persona.d.ts.map +1 -0
- package/dist/adapters/slack/persona.js +22 -0
- package/dist/adapters/slack/persona.js.map +1 -0
- package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +261 -345
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +7 -11
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +35 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +56 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- package/dist/adapters/slack/task-intent.d.ts +32 -0
- package/dist/adapters/slack/task-intent.d.ts.map +1 -0
- package/dist/adapters/slack/task-intent.js +72 -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 +107 -0
- package/dist/adapters/slack/task-status.js.map +1 -0
- package/dist/adapters/slack/tool-pack.d.ts +11 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +45 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +106 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +73 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
- package/dist/adapters/slack/update-diagnostics.js +134 -0
- package/dist/adapters/slack/update-diagnostics.js.map +1 -0
- package/dist/adapters/telegram/bot.d.ts +10 -9
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +133 -202
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +2 -6
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +53 -190
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +1 -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 +144 -13
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +44 -0
- package/dist/adapters/web/admin/portal.d.ts.map +1 -0
- package/dist/adapters/web/admin/portal.js +3207 -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 +53 -0
- package/dist/adapters/web/admin/types.d.ts.map +1 -0
- package/dist/adapters/web/admin/types.js.map +1 -0
- package/dist/adapters/web/login/oauth.d.ts +5 -0
- package/dist/adapters/web/login/oauth.d.ts.map +1 -0
- package/dist/{web → adapters/web}/login/oauth.js +50 -85
- package/dist/adapters/web/login/oauth.js.map +1 -0
- package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
- package/dist/adapters/web/login/portal.d.ts.map +1 -0
- package/dist/{web → adapters/web}/login/portal.js +161 -119
- package/dist/adapters/web/login/portal.js.map +1 -0
- package/dist/{web → adapters/web}/login/types.d.ts +1 -12
- package/dist/adapters/web/login/types.d.ts.map +1 -0
- package/dist/adapters/web/login/types.js.map +1 -0
- package/dist/adapters/web/portal-shell.d.ts +22 -0
- package/dist/adapters/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
- package/dist/adapters/web/portal-shell.js.map +1 -0
- package/dist/{web → adapters/web}/server.d.ts +14 -8
- package/dist/adapters/web/server.d.ts.map +1 -0
- package/dist/{web → adapters/web}/server.js +14 -7
- package/dist/adapters/web/server.js.map +1 -0
- package/dist/adapters/web/session-view/portal.d.ts +20 -0
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
- package/dist/{web → adapters/web}/session-view/portal.js +633 -162
- package/dist/adapters/web/session-view/portal.js.map +1 -0
- package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
- package/dist/adapters/web/session-view/types.d.ts.map +1 -0
- package/dist/adapters/web/session-view/types.js.map +1 -0
- package/dist/adapters/web/token-store.d.ts.map +1 -0
- package/dist/{web → adapters/web}/token-store.js +1 -1
- package/dist/adapters/web/token-store.js.map +1 -0
- package/dist/adapters/web/types.d.ts.map +1 -0
- package/dist/adapters/web/types.js.map +1 -0
- package/dist/cli/arg-grammar.d.ts +11 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +50 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +5 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +90 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js +88 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/office.d.ts +2 -0
- package/dist/cli/office.d.ts.map +1 -0
- package/dist/cli/office.js +181 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/onboard.d.ts +10 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +225 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/process-lifecycle.d.ts +19 -0
- package/dist/cli/process-lifecycle.d.ts.map +1 -0
- package/dist/cli/process-lifecycle.js +67 -0
- package/dist/cli/process-lifecycle.js.map +1 -0
- package/dist/cli/sessions.d.ts +2 -0
- package/dist/cli/sessions.d.ts.map +1 -0
- package/dist/cli/sessions.js +88 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/types.d.ts +25 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/dream/index.d.ts +20 -0
- package/dist/dream/index.d.ts.map +1 -0
- package/dist/dream/index.js +264 -0
- package/dist/dream/index.js.map +1 -0
- package/dist/dream/types.d.ts +30 -0
- package/dist/dream/types.d.ts.map +1 -0
- package/dist/dream/types.js +2 -0
- package/dist/dream/types.js.map +1 -0
- package/dist/env-manifest.d.ts +38 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +260 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events/index.d.ts +172 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +340 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/scheduler.d.ts +34 -0
- package/dist/events/scheduler.d.ts.map +1 -0
- package/dist/events/scheduler.js +231 -0
- package/dist/events/scheduler.js.map +1 -0
- package/dist/file-guards.d.ts +26 -0
- package/dist/file-guards.d.ts.map +1 -0
- package/dist/file-guards.js +133 -0
- package/dist/file-guards.js.map +1 -0
- package/dist/harness/execution-env.d.ts +19 -0
- package/dist/harness/execution-env.d.ts.map +1 -0
- package/dist/harness/execution-env.js +262 -0
- package/dist/harness/execution-env.js.map +1 -0
- package/dist/harness/execution-resolver.d.ts +25 -0
- package/dist/harness/execution-resolver.d.ts.map +1 -0
- package/dist/harness/execution-resolver.js +156 -0
- package/dist/harness/execution-resolver.js.map +1 -0
- package/dist/harness/index.d.ts +18 -13
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +11 -11
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/jev.d.ts +86 -0
- package/dist/harness/jev.d.ts.map +1 -0
- package/dist/harness/jev.js +167 -0
- package/dist/harness/jev.js.map +1 -0
- package/dist/harness/mcp.d.ts +38 -0
- package/dist/harness/mcp.d.ts.map +1 -0
- package/dist/harness/mcp.js +304 -0
- package/dist/harness/mcp.js.map +1 -0
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +54 -55
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +25 -0
- package/dist/harness/open-connector.d.ts.map +1 -0
- package/dist/harness/open-connector.js +178 -0
- package/dist/harness/open-connector.js.map +1 -0
- package/dist/harness/presenter.d.ts +31 -0
- package/dist/harness/presenter.d.ts.map +1 -0
- package/dist/harness/presenter.js +859 -0
- package/dist/harness/presenter.js.map +1 -0
- package/dist/harness/prompt.d.ts +30 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +420 -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 +551 -416
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +122 -0
- package/dist/harness/session.d.ts.map +1 -0
- package/dist/harness/session.js +581 -0
- package/dist/harness/session.js.map +1 -0
- package/dist/harness/skills.d.ts +17 -28
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +104 -39
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +8 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +293 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent.d.ts +64 -0
- package/dist/harness/subagent.d.ts.map +1 -0
- package/dist/harness/subagent.js +687 -0
- package/dist/harness/subagent.js.map +1 -0
- package/dist/harness/tools/attach.d.ts.map +1 -0
- package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
- package/dist/harness/tools/attach.js.map +1 -0
- package/dist/{tools → harness/tools}/event.d.ts +4 -33
- package/dist/harness/tools/event.d.ts.map +1 -0
- package/dist/harness/tools/event.js +175 -0
- package/dist/harness/tools/event.js.map +1 -0
- package/dist/harness/tools/generate-image.d.ts +23 -0
- package/dist/harness/tools/generate-image.d.ts.map +1 -0
- package/dist/harness/tools/generate-image.js +65 -0
- package/dist/harness/tools/generate-image.js.map +1 -0
- package/dist/harness/tools/host-fn-tool.d.ts +21 -0
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/harness/tools/host-fn-tool.js +32 -0
- package/dist/harness/tools/host-fn-tool.js.map +1 -0
- package/dist/harness/tools/index.d.ts +41 -0
- package/dist/harness/tools/index.d.ts.map +1 -0
- package/dist/harness/tools/index.js +51 -0
- package/dist/harness/tools/index.js.map +1 -0
- package/dist/harness/tools/jev.d.ts +21 -0
- package/dist/harness/tools/jev.d.ts.map +1 -0
- package/dist/harness/tools/jev.js +109 -0
- package/dist/harness/tools/jev.js.map +1 -0
- package/dist/harness/tools/pi-tools.d.ts +18 -0
- package/dist/harness/tools/pi-tools.d.ts.map +1 -0
- package/dist/harness/tools/pi-tools.js +84 -0
- package/dist/harness/tools/pi-tools.js.map +1 -0
- package/dist/harness/tools/react.d.ts.map +1 -0
- package/dist/{tools → harness/tools}/react.js +6 -17
- package/dist/harness/tools/react.js.map +1 -0
- package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
- package/dist/harness/tools/sandbox.d.ts.map +1 -0
- package/dist/{tools → harness/tools}/sandbox.js +12 -8
- package/dist/harness/tools/sandbox.js.map +1 -0
- package/dist/harness/tools/subagent.d.ts +85 -0
- package/dist/harness/tools/subagent.d.ts.map +1 -0
- package/dist/harness/tools/subagent.js +677 -0
- package/dist/harness/tools/subagent.js.map +1 -0
- package/dist/harness/tools/task.d.ts +20 -0
- package/dist/harness/tools/task.d.ts.map +1 -0
- package/dist/harness/tools/task.js +79 -0
- package/dist/harness/tools/task.js.map +1 -0
- package/dist/harness/tools/types.d.ts +29 -0
- package/dist/harness/tools/types.d.ts.map +1 -0
- package/dist/harness/tools/types.js +2 -0
- package/dist/harness/tools/types.js.map +1 -0
- package/dist/harness/types.d.ts +384 -25
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +33 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +4 -1
- package/dist/log.js.map +1 -1
- package/dist/main.js +357 -198
- package/dist/main.js.map +1 -1
- package/dist/observability/index.d.ts +33 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +257 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrument.js +14 -6
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/otel.d.ts +10 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +183 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/observability/sentry.d.ts +40 -7
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +176 -32
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +24 -3
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +139 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +1084 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/projection.d.ts +42 -0
- package/dist/office/projection.d.ts.map +1 -0
- package/dist/office/projection.js +182 -0
- package/dist/office/projection.js.map +1 -0
- package/dist/office/types.d.ts +116 -0
- package/dist/office/types.d.ts.map +1 -0
- package/dist/office/types.js +2 -0
- package/dist/office/types.js.map +1 -0
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +423 -152
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +76 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +404 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +63 -15
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +4 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +54 -52
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +3 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +19 -7
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +44 -35
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +42 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +77 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +24 -6
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +77 -17
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +139 -0
- package/dist/sandbox/provisioner.d.ts.map +1 -0
- package/dist/{provisioner.js → sandbox/provisioner.js} +378 -24
- package/dist/sandbox/provisioner.js.map +1 -0
- package/dist/sandbox/types.d.ts +43 -9
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +24 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +92 -1
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +23 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/history-line.d.ts +29 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +45 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/migrate-common.d.ts +43 -0
- package/dist/sessions/migrate-common.d.ts.map +1 -0
- package/dist/sessions/migrate-common.js +99 -0
- package/dist/sessions/migrate-common.js.map +1 -0
- package/dist/sessions/migrate-pi-084.d.ts +8 -0
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
- package/dist/sessions/migrate-pi-084.js +302 -0
- package/dist/sessions/migrate-pi-084.js.map +1 -0
- package/dist/sessions/migrate-v3.d.ts +15 -0
- package/dist/sessions/migrate-v3.d.ts.map +1 -0
- package/dist/sessions/migrate-v3.js +419 -0
- package/dist/sessions/migrate-v3.js.map +1 -0
- package/dist/sessions/session-key.d.ts +33 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +115 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/session-store.d.ts +61 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +684 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/store.d.ts +17 -10
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +182 -47
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +74 -8
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +16 -0
- package/dist/settings/apply.d.ts.map +1 -0
- package/dist/settings/apply.js +60 -0
- package/dist/settings/apply.js.map +1 -0
- package/dist/settings/index.d.ts +126 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +422 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/migrate.d.ts +21 -0
- package/dist/settings/migrate.d.ts.map +1 -0
- package/dist/settings/migrate.js +86 -0
- package/dist/settings/migrate.js.map +1 -0
- package/dist/types.d.ts +330 -141
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +52 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +218 -86
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +6 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +79 -40
- 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.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 +0 -61
- package/dist/provisioner.d.ts.map +0 -1
- package/dist/provisioner.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sandbox/errors.d.ts +0 -6
- package/dist/sandbox/errors.d.ts.map +0 -1
- package/dist/sandbox/errors.js +0 -11
- package/dist/sandbox/errors.js.map +0 -1
- package/dist/sandbox/firecracker.d.ts +0 -15
- package/dist/sandbox/firecracker.d.ts.map +0 -1
- package/dist/sandbox/firecracker.js +0 -212
- package/dist/sandbox/firecracker.js.map +0 -1
- package/dist/sandbox/image.d.ts +0 -3
- package/dist/sandbox/image.d.ts.map +0 -1
- package/dist/sandbox/image.js +0 -27
- package/dist/sandbox/image.js.map +0 -1
- package/dist/sandbox/path-context.d.ts +0 -3
- package/dist/sandbox/path-context.d.ts.map +0 -1
- package/dist/sandbox/path-context.js +0 -20
- package/dist/sandbox/path-context.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/sessions/metadata.d.ts +0 -3
- package/dist/sessions/metadata.d.ts.map +0 -1
- package/dist/sessions/metadata.js +0 -11
- package/dist/sessions/metadata.js.map +0 -1
- package/dist/sessions/policy.d.ts +0 -6
- package/dist/sessions/policy.d.ts.map +0 -1
- package/dist/sessions/policy.js +0 -23
- package/dist/sessions/policy.js.map +0 -1
- package/dist/store.d.ts +0 -46
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -177
- package/dist/store.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -10
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -80
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/edit.d.ts +0 -11
- package/dist/tools/edit.d.ts.map +0 -1
- package/dist/tools/edit.js +0 -131
- package/dist/tools/edit.js.map +0 -1
- package/dist/tools/event.d.ts.map +0 -1
- package/dist/tools/event.js +0 -252
- package/dist/tools/event.js.map +0 -1
- package/dist/tools/index.d.ts +0 -24
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -31
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/react.d.ts.map +0 -1
- package/dist/tools/react.js.map +0 -1
- package/dist/tools/read.d.ts +0 -11
- package/dist/tools/read.d.ts.map +0 -1
- package/dist/tools/read.js +0 -134
- package/dist/tools/read.js.map +0 -1
- package/dist/tools/sandbox.d.ts.map +0 -1
- package/dist/tools/sandbox.js.map +0 -1
- package/dist/tools/truncate.d.ts +0 -33
- package/dist/tools/truncate.d.ts.map +0 -1
- package/dist/tools/truncate.js +0 -184
- package/dist/tools/truncate.js.map +0 -1
- package/dist/tools/types.d.ts +0 -54
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/write.d.ts +0 -10
- package/dist/tools/write.d.ts.map +0 -1
- package/dist/tools/write.js +0 -29
- package/dist/tools/write.js.map +0 -1
- package/dist/trigger.d.ts +0 -22
- package/dist/trigger.d.ts.map +0 -1
- package/dist/trigger.js +0 -100
- package/dist/trigger.js.map +0 -1
- package/dist/utils/date.d.ts +0 -10
- package/dist/utils/date.d.ts.map +0 -1
- package/dist/utils/date.js +0 -23
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/env.d.ts +0 -3
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -12
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/file-guards.d.ts +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.map +0 -1
- package/dist/web/login/portal.js.map +0 -1
- package/dist/web/login/store.d.ts +0 -8
- package/dist/web/login/store.d.ts.map +0 -1
- package/dist/web/login/store.js +0 -15
- package/dist/web/login/store.js.map +0 -1
- package/dist/web/login/types.d.ts.map +0 -1
- package/dist/web/login/types.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- package/dist/web/session-view/portal.d.ts +0 -13
- package/dist/web/session-view/portal.d.ts.map +0 -1
- package/dist/web/session-view/portal.js.map +0 -1
- package/dist/web/session-view/service.d.ts +0 -6
- package/dist/web/session-view/service.d.ts.map +0 -1
- package/dist/web/session-view/service.js +0 -498
- package/dist/web/session-view/service.js.map +0 -1
- package/dist/web/session-view/store.d.ts +0 -8
- package/dist/web/session-view/store.d.ts.map +0 -1
- package/dist/web/session-view/store.js +0 -15
- package/dist/web/session-view/store.js.map +0 -1
- package/dist/web/session-view/types.d.ts.map +0 -1
- package/dist/web/session-view/types.js.map +0 -1
- package/dist/web/token-store.d.ts.map +0 -1
- package/dist/web/token-store.js.map +0 -1
- package/dist/web/types.d.ts.map +0 -1
- package/dist/web/types.js.map +0 -1
- /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/types.js +0 -0
- /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
- /package/dist/{tools → adapters/web/admin}/types.js +0 -0
- /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
- /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
- /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
- /package/dist/{web → adapters/web}/types.d.ts +0 -0
- /package/dist/{web/session-view → adapters/web}/types.js +0 -0
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{web → cli}/types.js +0 -0
- /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
- /package/dist/{tools → harness/tools}/react.d.ts +0 -0
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import { contentText } from "@earendil-works/pi-ai";
|
|
4
|
+
import { Kind, Type } from "@sinclair/typebox";
|
|
5
|
+
import { Value } from "@sinclair/typebox/value";
|
|
6
|
+
import { MikanAgentSession, copyUsage, createEmptyUsage } from "./session.js";
|
|
7
|
+
import { SessionStore } from "../sessions/session-store.js";
|
|
8
|
+
import * as log from "../log.js";
|
|
9
|
+
const subagentRunDepth = new AsyncLocalStorage();
|
|
10
|
+
const DEFAULT_SYSTEM_PROMPT = "You are a focused subagent. Complete only the assigned task and return the result directly.";
|
|
11
|
+
export const DEFAULT_SUBAGENT_BUDGET = {
|
|
12
|
+
maxTurns: 100,
|
|
13
|
+
maxCostUsd: 10,
|
|
14
|
+
maxDurationMs: 10 * 60 * 1000,
|
|
15
|
+
};
|
|
16
|
+
/** Time allowed for an aborted subagent to settle before detached cleanup. */
|
|
17
|
+
export const SUBAGENT_ABORT_GRACE_MS = 100;
|
|
18
|
+
const SCHEMA_STRUCTURAL_KEYS = new Set([
|
|
19
|
+
"type",
|
|
20
|
+
"properties",
|
|
21
|
+
"required",
|
|
22
|
+
"items",
|
|
23
|
+
"enum",
|
|
24
|
+
"const",
|
|
25
|
+
"anyOf",
|
|
26
|
+
"oneOf",
|
|
27
|
+
"allOf",
|
|
28
|
+
]);
|
|
29
|
+
function isRecord(value) {
|
|
30
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
31
|
+
}
|
|
32
|
+
function schemaOptions(node) {
|
|
33
|
+
const options = {};
|
|
34
|
+
for (const [key, value] of Object.entries(node)) {
|
|
35
|
+
if (!SCHEMA_STRUCTURAL_KEYS.has(key))
|
|
36
|
+
options[key] = value;
|
|
37
|
+
}
|
|
38
|
+
if (isRecord(options.additionalProperties)) {
|
|
39
|
+
options.additionalProperties = hydrateSchema(options.additionalProperties);
|
|
40
|
+
}
|
|
41
|
+
return options;
|
|
42
|
+
}
|
|
43
|
+
function isSchemaLiteral(value) {
|
|
44
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
|
|
45
|
+
}
|
|
46
|
+
function hydrateObject(schema, options) {
|
|
47
|
+
const properties = isRecord(schema.properties) ? schema.properties : {};
|
|
48
|
+
const required = new Set(Array.isArray(schema.required) ? schema.required : []);
|
|
49
|
+
const props = {};
|
|
50
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
51
|
+
const hydrated = hydrateSchema(value);
|
|
52
|
+
props[key] = required.has(key) ? hydrated : Type.Optional(hydrated);
|
|
53
|
+
}
|
|
54
|
+
return Type.Object(props, options);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* outputSchema arrives over the subagent tool as plain JSON (tool-call
|
|
58
|
+
* arguments never carry TypeBox's Kind symbol), but Value.Check dispatches
|
|
59
|
+
* purely on schema[Kind] and throws ValueCheckUnknownTypeError for anything
|
|
60
|
+
* without it. Hydrate plain JSON Schema into real TypeBox schema nodes so
|
|
61
|
+
* validation runs instead of throwing; schemas built with TypeBox already
|
|
62
|
+
* carry Kind and pass through untouched.
|
|
63
|
+
*
|
|
64
|
+
* Unsupported keywords ($ref, not, patternProperties, if/then/else) degrade to
|
|
65
|
+
* a permissive Unknown — fail-open by design: outputSchema is advisory output
|
|
66
|
+
* validation, not a security boundary.
|
|
67
|
+
*/
|
|
68
|
+
function hydrateSchema(schema) {
|
|
69
|
+
if (isRecord(schema) && Kind in schema)
|
|
70
|
+
return schema;
|
|
71
|
+
if (!isRecord(schema))
|
|
72
|
+
return Type.Unknown();
|
|
73
|
+
if (Array.isArray(schema.enum)) {
|
|
74
|
+
const literals = schema.enum.filter(isSchemaLiteral);
|
|
75
|
+
return literals.length > 0
|
|
76
|
+
? Type.Union(literals.map((value) => Type.Literal(value)))
|
|
77
|
+
: Type.Unknown();
|
|
78
|
+
}
|
|
79
|
+
if ("const" in schema) {
|
|
80
|
+
return isSchemaLiteral(schema.const) ? Type.Literal(schema.const) : Type.Unknown();
|
|
81
|
+
}
|
|
82
|
+
if (Array.isArray(schema.anyOf))
|
|
83
|
+
return Type.Union(schema.anyOf.map(hydrateSchema));
|
|
84
|
+
if (Array.isArray(schema.oneOf))
|
|
85
|
+
return Type.Union(schema.oneOf.map(hydrateSchema));
|
|
86
|
+
if (Array.isArray(schema.allOf))
|
|
87
|
+
return Type.Intersect(schema.allOf.map(hydrateSchema));
|
|
88
|
+
const type = Array.isArray(schema.type)
|
|
89
|
+
? schema.type
|
|
90
|
+
: (schema.type ?? (schema.properties ? "object" : schema.items ? "array" : undefined));
|
|
91
|
+
if (Array.isArray(type)) {
|
|
92
|
+
return Type.Union(type.map((variant) => hydrateSchema({ ...schema, type: variant })));
|
|
93
|
+
}
|
|
94
|
+
const options = schemaOptions(schema);
|
|
95
|
+
switch (type) {
|
|
96
|
+
case "object":
|
|
97
|
+
return hydrateObject(schema, options);
|
|
98
|
+
case "array":
|
|
99
|
+
return Type.Array(hydrateSchema(schema.items), options);
|
|
100
|
+
case "string":
|
|
101
|
+
return Type.String(options);
|
|
102
|
+
case "number":
|
|
103
|
+
return Type.Number(options);
|
|
104
|
+
case "integer":
|
|
105
|
+
return Type.Integer(options);
|
|
106
|
+
case "boolean":
|
|
107
|
+
return Type.Boolean(options);
|
|
108
|
+
case "null":
|
|
109
|
+
return Type.Null(options);
|
|
110
|
+
default:
|
|
111
|
+
return Type.Unknown(options);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Translate a subagent session's event stream into short activity lines.
|
|
116
|
+
*
|
|
117
|
+
* The stream was always there — nothing subscribed to it, so every subagent
|
|
118
|
+
* was silent for its whole run and a slow step looked identical to a hung one.
|
|
119
|
+
*
|
|
120
|
+
* Text is reported as a growing character count rather than its content: it
|
|
121
|
+
* proves liveness during a long single-turn generation, which is the case with
|
|
122
|
+
* nothing else to show, without putting a half-written answer on screen.
|
|
123
|
+
*/
|
|
124
|
+
function reportSubagentActivity(session, onActivity) {
|
|
125
|
+
let characters = 0;
|
|
126
|
+
let reportedAt = 0;
|
|
127
|
+
const report = (activity) => {
|
|
128
|
+
try {
|
|
129
|
+
onActivity(activity);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
log.logWarning("Subagent onActivity listener failed", String(err));
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
session.subscribe(async (event) => {
|
|
136
|
+
if (event.type === "tool_execution_start") {
|
|
137
|
+
const args = (event.args ?? {});
|
|
138
|
+
const name = String(event.toolName ?? "tool");
|
|
139
|
+
report(args.label ? `${name}: ${args.label}` : name);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (event.type === "tool_execution_end") {
|
|
143
|
+
report("thinking");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (event.type === "message_start") {
|
|
147
|
+
characters = 0;
|
|
148
|
+
reportedAt = 0;
|
|
149
|
+
report("thinking");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (event.type === "message_update") {
|
|
153
|
+
const delta = event
|
|
154
|
+
.assistantMessageEvent;
|
|
155
|
+
if (delta?.type !== "text_delta" || !delta.delta)
|
|
156
|
+
return;
|
|
157
|
+
characters += delta.delta.length;
|
|
158
|
+
// Coarse steps: deltas arrive per token, and one report each would churn
|
|
159
|
+
// the dashboard for no added information.
|
|
160
|
+
if (characters - reportedAt < ACTIVITY_CHARS_STEP)
|
|
161
|
+
return;
|
|
162
|
+
reportedAt = characters;
|
|
163
|
+
report(`writing · ${characters} chars`);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (event.type === "auto_retry_start") {
|
|
167
|
+
// The most valuable line here: a retry is the usual reason a run goes
|
|
168
|
+
// quiet for minutes, and it was completely invisible.
|
|
169
|
+
report("retrying after an error");
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** How much new text earns a fresh activity line during a long generation. */
|
|
174
|
+
const ACTIVITY_CHARS_STEP = 250;
|
|
175
|
+
function resolveBudget(budget) {
|
|
176
|
+
const resolved = { ...DEFAULT_SUBAGENT_BUDGET, ...budget };
|
|
177
|
+
const positiveIntegerFields = [
|
|
178
|
+
["maxTurns", resolved.maxTurns],
|
|
179
|
+
["maxTokens", resolved.maxTokens],
|
|
180
|
+
["maxDurationMs", resolved.maxDurationMs],
|
|
181
|
+
];
|
|
182
|
+
for (const [name, value] of positiveIntegerFields) {
|
|
183
|
+
if (value !== undefined && (!Number.isInteger(value) || value <= 0)) {
|
|
184
|
+
throw new Error(`api.subagent.run budget.${name} must be a positive integer`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (!Number.isFinite(resolved.maxCostUsd) || resolved.maxCostUsd < 0) {
|
|
188
|
+
throw new Error("api.subagent.run budget.maxCostUsd must be a non-negative number");
|
|
189
|
+
}
|
|
190
|
+
return resolved;
|
|
191
|
+
}
|
|
192
|
+
function selectTools(requested, available) {
|
|
193
|
+
if (!requested || requested.length === 0)
|
|
194
|
+
return [];
|
|
195
|
+
const byName = new Map();
|
|
196
|
+
for (const tool of available) {
|
|
197
|
+
if (!byName.has(tool.name))
|
|
198
|
+
byName.set(tool.name, tool);
|
|
199
|
+
}
|
|
200
|
+
const selected = [];
|
|
201
|
+
for (const name of new Set(requested)) {
|
|
202
|
+
const tool = byName.get(name);
|
|
203
|
+
if (!tool)
|
|
204
|
+
throw new Error(`Unknown or unavailable subagent tool: ${name}`);
|
|
205
|
+
selected.push(tool);
|
|
206
|
+
}
|
|
207
|
+
return selected;
|
|
208
|
+
}
|
|
209
|
+
function formatTask(task, input, parentContext) {
|
|
210
|
+
const trimmed = task.trim();
|
|
211
|
+
if (!trimmed)
|
|
212
|
+
throw new Error("api.subagent.run requires a non-empty task");
|
|
213
|
+
let formatted = trimmed;
|
|
214
|
+
if (input !== undefined) {
|
|
215
|
+
let serialized;
|
|
216
|
+
try {
|
|
217
|
+
serialized = JSON.stringify(input, null, 2);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
throw new Error(`api.subagent.run input must be JSON-serializable: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
221
|
+
}
|
|
222
|
+
if (serialized === undefined)
|
|
223
|
+
throw new Error("api.subagent.run input must be JSON-serializable");
|
|
224
|
+
formatted = `${trimmed}\n\nInput:\n${serialized}`;
|
|
225
|
+
}
|
|
226
|
+
return parentContext ? `${parentContext}\n\n${formatted}` : formatted;
|
|
227
|
+
}
|
|
228
|
+
function messageText(message) {
|
|
229
|
+
if (message.role === "compactionSummary" || message.role === "branchSummary") {
|
|
230
|
+
return message.summary;
|
|
231
|
+
}
|
|
232
|
+
if (!("content" in message))
|
|
233
|
+
return "";
|
|
234
|
+
return contentText(message.content, "");
|
|
235
|
+
}
|
|
236
|
+
function normalizedParentContext(request, messages) {
|
|
237
|
+
if (!request.parentContext || !messages)
|
|
238
|
+
return undefined;
|
|
239
|
+
const recentTurns = request.parentContext.recentTurns ?? 3;
|
|
240
|
+
if (!Number.isInteger(recentTurns) || recentTurns < 1 || recentTurns > 8) {
|
|
241
|
+
throw new Error("api.subagent.run parentContext.recentTurns must be an integer from 1 to 8");
|
|
242
|
+
}
|
|
243
|
+
const conversation = messages.filter((message) => (message.role === "user" || message.role === "assistant") && messageText(message));
|
|
244
|
+
let first = conversation.length;
|
|
245
|
+
let users = 0;
|
|
246
|
+
while (first > 0 && users < recentTurns) {
|
|
247
|
+
first -= 1;
|
|
248
|
+
if (conversation[first]?.role === "user")
|
|
249
|
+
users += 1;
|
|
250
|
+
}
|
|
251
|
+
const recent = conversation.slice(first);
|
|
252
|
+
const recentStart = recent[0] ? messages.indexOf(recent[0]) : messages.length;
|
|
253
|
+
const summary = messages
|
|
254
|
+
.slice(0, recentStart)
|
|
255
|
+
.findLast((message) => message.role === "compactionSummary" || message.role === "branchSummary");
|
|
256
|
+
return [
|
|
257
|
+
"<parent_reference_context>",
|
|
258
|
+
summary ? `Earlier summary: ${messageText(summary)}` : "[Earlier parent context omitted]",
|
|
259
|
+
...recent.map((message) => `${message.role === "user" ? "User" : "Assistant"}: ${messageText(message)}`),
|
|
260
|
+
"</parent_reference_context>",
|
|
261
|
+
].join("\n");
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* The evidence policy has to name the actual grant. Told to "use granted
|
|
265
|
+
* tools" while holding none, a model will write a tool call as prose and
|
|
266
|
+
* hand that text back as its answer — which then flows to dependent DAG
|
|
267
|
+
* nodes as if it were a finding.
|
|
268
|
+
*/
|
|
269
|
+
function groundingPolicy(toolNames) {
|
|
270
|
+
if (toolNames.length === 0) {
|
|
271
|
+
return [
|
|
272
|
+
"Evidence policy:",
|
|
273
|
+
"- You have NO tools in this run. Do not emit tool calls or tool-call syntax; they will not execute.",
|
|
274
|
+
"- Answer only from the task text and any structured input supplied to you.",
|
|
275
|
+
"- Never claim to have read a file, run a command, or reached a repository or URL.",
|
|
276
|
+
"- If the task cannot be done without a tool, say so plainly and stop.",
|
|
277
|
+
].join("\n");
|
|
278
|
+
}
|
|
279
|
+
return [
|
|
280
|
+
"Evidence policy:",
|
|
281
|
+
`- Your tools this run: ${toolNames.join(", ")}. Nothing else will execute.`,
|
|
282
|
+
"- Use them for any claim about files, commands, repositories, or external state.",
|
|
283
|
+
"- Never simulate tool output or claim a tool was used when it was not.",
|
|
284
|
+
"- If the task requires a tool you were not granted, state that you cannot verify it instead of guessing.",
|
|
285
|
+
].join("\n");
|
|
286
|
+
}
|
|
287
|
+
function buildSystemPrompt(base, outputSchema, toolNames) {
|
|
288
|
+
const prompt = [base?.trim() || DEFAULT_SYSTEM_PROMPT, groundingPolicy(toolNames)].join("\n\n");
|
|
289
|
+
if (!outputSchema)
|
|
290
|
+
return prompt;
|
|
291
|
+
return [
|
|
292
|
+
prompt,
|
|
293
|
+
"",
|
|
294
|
+
"Return only one JSON value matching this JSON Schema. Do not use Markdown or code fences.",
|
|
295
|
+
JSON.stringify(outputSchema),
|
|
296
|
+
].join("\n");
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Every SubagentRunResult's metric fields are born here — one derivation from
|
|
300
|
+
* the session's run stats, so adding a metric is one edit and no terminal
|
|
301
|
+
* site can drift (the abort branch once shipped without toolCallCounts). The
|
|
302
|
+
* terminal sites state only what differs: status, error, text.
|
|
303
|
+
*/
|
|
304
|
+
function baseRunResult(runId, model, startedAt, stats) {
|
|
305
|
+
const usage = stats?.usage ?? createEmptyUsage();
|
|
306
|
+
return {
|
|
307
|
+
runId,
|
|
308
|
+
model,
|
|
309
|
+
turns: stats?.llmCalls ?? 0,
|
|
310
|
+
toolCalls: stats?.toolCalls ?? 0,
|
|
311
|
+
toolCallCounts: stats?.toolCallCounts ?? {},
|
|
312
|
+
usage,
|
|
313
|
+
tokens: usage.totalTokens,
|
|
314
|
+
costUsd: usage.cost.total,
|
|
315
|
+
durationMs: Date.now() - startedAt,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function finalAssistant(messages) {
|
|
319
|
+
return messages.findLast((message) => message.role === "assistant");
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Execute one non-recursive, fresh subagent run. Never rejects: every
|
|
323
|
+
* failure — including request validation — is a result with a terminal
|
|
324
|
+
* status, so batch callers (`tasks` / `dag`) can never orphan in-flight
|
|
325
|
+
* sibling runs on one bad request. Usage is reported once, after the
|
|
326
|
+
* underlying run settles; an aborted run may report it from detached cleanup.
|
|
327
|
+
*/
|
|
328
|
+
export async function runSubagent(options) {
|
|
329
|
+
const execution = await executeBoundedSubagentRun(options);
|
|
330
|
+
if (execution.cleanup) {
|
|
331
|
+
void execution.cleanup
|
|
332
|
+
.then(async (result) => {
|
|
333
|
+
await reportSubagentUsage(options.onUsage, result.usage);
|
|
334
|
+
})
|
|
335
|
+
.catch((err) => {
|
|
336
|
+
log.logWarning("Subagent detached cleanup failed", String(err));
|
|
337
|
+
});
|
|
338
|
+
return execution.result;
|
|
339
|
+
}
|
|
340
|
+
await reportSubagentUsage(options.onUsage, execution.result.usage);
|
|
341
|
+
return execution.result;
|
|
342
|
+
}
|
|
343
|
+
async function reportSubagentUsage(onUsage, usage) {
|
|
344
|
+
try {
|
|
345
|
+
await onUsage?.(copyUsage(usage));
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
log.logWarning("Subagent onUsage listener failed", String(err));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
async function executeBoundedSubagentRun(options) {
|
|
352
|
+
const startedAt = Date.now();
|
|
353
|
+
let release;
|
|
354
|
+
try {
|
|
355
|
+
release = await (options.slots ?? unboundedSlotPool()).acquire(options.request.signal);
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
359
|
+
const model = options.request.model ?? {
|
|
360
|
+
provider: options.defaultModel.provider,
|
|
361
|
+
id: options.defaultModel.id,
|
|
362
|
+
};
|
|
363
|
+
return {
|
|
364
|
+
result: { ...baseRunResult(randomUUID(), model, startedAt), status: "cancelled" },
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
throw err;
|
|
368
|
+
}
|
|
369
|
+
if (!release)
|
|
370
|
+
throw new Error("Subagent slot acquisition returned no release handle");
|
|
371
|
+
try {
|
|
372
|
+
const execution = await executeSubagentRun(options);
|
|
373
|
+
if (!execution.cleanup) {
|
|
374
|
+
release();
|
|
375
|
+
release = undefined;
|
|
376
|
+
return execution;
|
|
377
|
+
}
|
|
378
|
+
const cleanup = execution.cleanup;
|
|
379
|
+
const heldRelease = release;
|
|
380
|
+
void cleanup
|
|
381
|
+
.then(() => heldRelease(), (err) => {
|
|
382
|
+
log.logWarning("Subagent detached cleanup failed", String(err));
|
|
383
|
+
heldRelease();
|
|
384
|
+
})
|
|
385
|
+
.catch((err) => {
|
|
386
|
+
log.logWarning("Subagent detached release failed", String(err));
|
|
387
|
+
heldRelease();
|
|
388
|
+
});
|
|
389
|
+
release = undefined;
|
|
390
|
+
return execution;
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
release?.();
|
|
394
|
+
release = undefined;
|
|
395
|
+
throw err;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
function noop() { }
|
|
399
|
+
/**
|
|
400
|
+
* Expand `request.profile` into the concrete capability set it names. Most
|
|
401
|
+
* profile budgets are caps that callers may only tighten. Token budgets are
|
|
402
|
+
* different: the effective allowance is the larger of the profile default and
|
|
403
|
+
* the caller's request.
|
|
404
|
+
*/
|
|
405
|
+
function resolveProfile(request, options) {
|
|
406
|
+
if (!request.profile)
|
|
407
|
+
return request;
|
|
408
|
+
const profile = options.profiles?.get(request.profile);
|
|
409
|
+
if (!profile) {
|
|
410
|
+
const known = [...(options.profiles?.keys() ?? [])].join(", ");
|
|
411
|
+
throw new Error(`Unknown subagent profile: ${request.profile}${known ? ` (available: ${known})` : ""}`);
|
|
412
|
+
}
|
|
413
|
+
if (request.tools || request.model || request.systemPrompt || request.thinkingLevel) {
|
|
414
|
+
throw new Error(`Subagent profile ${request.profile} cannot be combined with tools, model, systemPrompt, or thinkingLevel`);
|
|
415
|
+
}
|
|
416
|
+
const budget = { ...request.budget };
|
|
417
|
+
for (const field of ["maxTurns", "maxCostUsd", "maxDurationMs"]) {
|
|
418
|
+
const cap = profile[field];
|
|
419
|
+
if (cap !== undefined)
|
|
420
|
+
budget[field] = Math.min(cap, budget[field] ?? cap);
|
|
421
|
+
}
|
|
422
|
+
if (profile.maxTokens !== undefined || budget.maxTokens !== undefined) {
|
|
423
|
+
budget.maxTokens = Math.max(profile.maxTokens ?? 0, budget.maxTokens ?? 0);
|
|
424
|
+
}
|
|
425
|
+
return {
|
|
426
|
+
...request,
|
|
427
|
+
systemPrompt: profile.systemPrompt,
|
|
428
|
+
tools: profile.tools,
|
|
429
|
+
...(profile.model ? { model: profile.model } : {}),
|
|
430
|
+
...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),
|
|
431
|
+
...(Object.keys(budget).length > 0 ? { budget } : {}),
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
function prepareSubagentRun(options, request, runId, startedAt) {
|
|
435
|
+
const model = request.model
|
|
436
|
+
? options.models.resolve(request.model.provider, request.model.id)
|
|
437
|
+
: options.defaultModel;
|
|
438
|
+
const granted = selectTools(request.tools, options.availableTools);
|
|
439
|
+
const task = formatTask(request.task, request.input, normalizedParentContext(request, options.parentMessages));
|
|
440
|
+
const session = new MikanAgentSession({
|
|
441
|
+
systemPrompt: buildSystemPrompt(request.systemPrompt, request.outputSchema, granted.map((tool) => tool.name)),
|
|
442
|
+
model,
|
|
443
|
+
thinkingLevel: request.thinkingLevel ?? options.thinkingLevel,
|
|
444
|
+
tools: granted,
|
|
445
|
+
toolContext: options.toolContext,
|
|
446
|
+
models: options.models,
|
|
447
|
+
sessionStore: SessionStore.inMemory(options.workspaceDir),
|
|
448
|
+
settings: { compaction: { enabled: false } },
|
|
449
|
+
});
|
|
450
|
+
if (options.onActivity)
|
|
451
|
+
reportSubagentActivity(session, options.onActivity);
|
|
452
|
+
return {
|
|
453
|
+
request,
|
|
454
|
+
runId,
|
|
455
|
+
startedAt,
|
|
456
|
+
modelSpec: { provider: model.provider, id: model.id },
|
|
457
|
+
session,
|
|
458
|
+
budget: resolveBudget(request.budget),
|
|
459
|
+
task,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
function buildSubagentResult(run, terminalSignal, cleanupPending = false) {
|
|
463
|
+
const { session, request, budget } = run;
|
|
464
|
+
const stats = session.getLastRunStats();
|
|
465
|
+
const assistant = finalAssistant(session.messages);
|
|
466
|
+
const text = assistant ? contentText(assistant.content, "") : "";
|
|
467
|
+
const base = {
|
|
468
|
+
...baseRunResult(run.runId, run.modelSpec, run.startedAt, stats),
|
|
469
|
+
...(text ? { text } : {}),
|
|
470
|
+
...(cleanupPending ? { cleanupPending: true } : {}),
|
|
471
|
+
};
|
|
472
|
+
if (terminalSignal) {
|
|
473
|
+
return {
|
|
474
|
+
...base,
|
|
475
|
+
status: terminalSignal,
|
|
476
|
+
...(terminalSignal === "timeout"
|
|
477
|
+
? { error: `Subagent exceeded its ${budget.maxDurationMs}ms duration limit` }
|
|
478
|
+
: {}),
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
if (stats.budgetExceededReason) {
|
|
482
|
+
return { ...base, status: "budget_exceeded", error: stats.budgetExceededReason };
|
|
483
|
+
}
|
|
484
|
+
if (assistant?.stopReason === "error") {
|
|
485
|
+
return { ...base, status: "failed", error: assistant.errorMessage || "Subagent failed" };
|
|
486
|
+
}
|
|
487
|
+
if (!assistant) {
|
|
488
|
+
return { ...base, status: "failed", error: "Subagent produced no assistant response" };
|
|
489
|
+
}
|
|
490
|
+
if (!request.outputSchema) {
|
|
491
|
+
return text
|
|
492
|
+
? { ...base, status: "completed", output: text }
|
|
493
|
+
: { ...base, status: "failed", error: "Subagent produced no text output" };
|
|
494
|
+
}
|
|
495
|
+
let parsed;
|
|
496
|
+
try {
|
|
497
|
+
parsed = JSON.parse(text);
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
return { ...base, status: "invalid_output", error: "Subagent output is not valid JSON" };
|
|
501
|
+
}
|
|
502
|
+
if (!Value.Check(hydrateSchema(request.outputSchema), parsed)) {
|
|
503
|
+
return {
|
|
504
|
+
...base,
|
|
505
|
+
status: "invalid_output",
|
|
506
|
+
error: "Subagent output does not match the requested schema",
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
return {
|
|
510
|
+
...base,
|
|
511
|
+
status: "completed",
|
|
512
|
+
output: parsed,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
function buildSubagentFailure(run, terminalSignal, err) {
|
|
516
|
+
return {
|
|
517
|
+
...baseRunResult(run.runId, run.modelSpec, run.startedAt, run.session.getLastRunStats()),
|
|
518
|
+
status: terminalSignal ?? "failed",
|
|
519
|
+
error: err instanceof Error ? err.message : String(err),
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
async function executeSubagentPrompt(run, abortRequested, terminalSignal) {
|
|
523
|
+
if (terminalSignal())
|
|
524
|
+
return undefined;
|
|
525
|
+
const promptOutcome = subagentRunDepth
|
|
526
|
+
.run(1, () => run.session.prompt(run.task, {
|
|
527
|
+
budget: {
|
|
528
|
+
maxLlmCalls: run.budget.maxTurns,
|
|
529
|
+
maxTokens: run.budget.maxTokens,
|
|
530
|
+
maxCostUsd: run.budget.maxCostUsd,
|
|
531
|
+
},
|
|
532
|
+
}))
|
|
533
|
+
.then(() => ({ ok: true }), (error) => ({ ok: false, error }));
|
|
534
|
+
const winner = await Promise.race([
|
|
535
|
+
promptOutcome.then((outcome) => ({ type: "settled", outcome })),
|
|
536
|
+
abortRequested.then(async () => {
|
|
537
|
+
let graceTimer;
|
|
538
|
+
const graceExpired = new Promise((resolve) => {
|
|
539
|
+
graceTimer = setTimeout(() => resolve("expired"), SUBAGENT_ABORT_GRACE_MS);
|
|
540
|
+
});
|
|
541
|
+
const outcome = await Promise.race([
|
|
542
|
+
promptOutcome.then((settledOutcome) => ({
|
|
543
|
+
type: "settled",
|
|
544
|
+
outcome: settledOutcome,
|
|
545
|
+
})),
|
|
546
|
+
graceExpired.then((value) => ({ type: value })),
|
|
547
|
+
]);
|
|
548
|
+
if (graceTimer)
|
|
549
|
+
clearTimeout(graceTimer);
|
|
550
|
+
return outcome;
|
|
551
|
+
}),
|
|
552
|
+
]);
|
|
553
|
+
if (winner.type === "expired") {
|
|
554
|
+
const cleanup = promptOutcome.then((outcome) => outcome.ok
|
|
555
|
+
? buildSubagentResult(run, terminalSignal())
|
|
556
|
+
: buildSubagentFailure(run, terminalSignal(), outcome.error));
|
|
557
|
+
return { result: buildSubagentResult(run, terminalSignal(), true), cleanup };
|
|
558
|
+
}
|
|
559
|
+
if (!winner.outcome.ok)
|
|
560
|
+
throw winner.outcome.error;
|
|
561
|
+
return undefined;
|
|
562
|
+
}
|
|
563
|
+
async function executeSubagentRun(options) {
|
|
564
|
+
const request = resolveProfile(options.request, options);
|
|
565
|
+
const runId = randomUUID();
|
|
566
|
+
const startedAt = Date.now();
|
|
567
|
+
const initialModelSpec = request.model ?? {
|
|
568
|
+
provider: options.defaultModel.provider,
|
|
569
|
+
id: options.defaultModel.id,
|
|
570
|
+
};
|
|
571
|
+
let run;
|
|
572
|
+
let terminalSignal;
|
|
573
|
+
let timeout;
|
|
574
|
+
let notifyAbort = noop;
|
|
575
|
+
const abortRequested = new Promise((resolve) => {
|
|
576
|
+
notifyAbort = resolve;
|
|
577
|
+
});
|
|
578
|
+
const abort = (reason) => {
|
|
579
|
+
if (terminalSignal)
|
|
580
|
+
return;
|
|
581
|
+
terminalSignal = reason;
|
|
582
|
+
run?.session.abort();
|
|
583
|
+
notifyAbort();
|
|
584
|
+
};
|
|
585
|
+
const onAbort = () => abort("cancelled");
|
|
586
|
+
try {
|
|
587
|
+
if ((subagentRunDepth.getStore() ?? 0) >= 1) {
|
|
588
|
+
throw new Error("Nested api.subagent.run calls are not allowed");
|
|
589
|
+
}
|
|
590
|
+
run = prepareSubagentRun(options, request, runId, startedAt);
|
|
591
|
+
request.signal?.addEventListener("abort", onAbort, { once: true });
|
|
592
|
+
if (request.signal?.aborted)
|
|
593
|
+
abort("cancelled");
|
|
594
|
+
timeout = setTimeout(() => abort("timeout"), run.budget.maxDurationMs);
|
|
595
|
+
timeout.unref();
|
|
596
|
+
const earlyResult = await executeSubagentPrompt(run, abortRequested, () => terminalSignal);
|
|
597
|
+
return earlyResult ?? { result: buildSubagentResult(run, terminalSignal) };
|
|
598
|
+
}
|
|
599
|
+
catch (err) {
|
|
600
|
+
return {
|
|
601
|
+
result: run
|
|
602
|
+
? buildSubagentFailure(run, terminalSignal, err)
|
|
603
|
+
: {
|
|
604
|
+
...baseRunResult(runId, initialModelSpec, startedAt),
|
|
605
|
+
status: terminalSignal ?? "failed",
|
|
606
|
+
error: err instanceof Error ? err.message : String(err),
|
|
607
|
+
},
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
finally {
|
|
611
|
+
if (timeout)
|
|
612
|
+
clearTimeout(timeout);
|
|
613
|
+
request.signal?.removeEventListener("abort", onAbort);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Process-wide subagent fan-out account. The per-conversation queues
|
|
618
|
+
* serialize agent runs, and each run's subagent tool bounds its own fan-out
|
|
619
|
+
* — but without a shared ceiling, N busy conversations hold N × per-run-cap
|
|
620
|
+
* live subagent sessions. Every subagent launch draws a slot from one shared
|
|
621
|
+
* pool; the per-run cap and this global ceiling are the two bounds, enforced
|
|
622
|
+
* where each concrete subagent session is launched.
|
|
623
|
+
*/
|
|
624
|
+
function abortError() {
|
|
625
|
+
return new DOMException("The operation was aborted", "AbortError");
|
|
626
|
+
}
|
|
627
|
+
/** Default process-wide ceiling on concurrently live subagent sessions. */
|
|
628
|
+
export const DEFAULT_GLOBAL_SUBAGENT_SLOTS = 8;
|
|
629
|
+
/** Async slot pool: at most `capacity` concurrent holders, FIFO waiters. */
|
|
630
|
+
export class SubagentSlotPool {
|
|
631
|
+
constructor(capacity) {
|
|
632
|
+
this.capacity = capacity;
|
|
633
|
+
this.held = 0;
|
|
634
|
+
this.waiters = [];
|
|
635
|
+
if (!(capacity >= 1)) {
|
|
636
|
+
throw new Error(`SubagentSlotPool capacity must be >= 1, got ${capacity}`);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
/** Currently held slots (for tests and capacity reporting). */
|
|
640
|
+
get inFlight() {
|
|
641
|
+
return this.held;
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Resolve with a release function once a slot frees up. Call the release
|
|
645
|
+
* exactly once; releasing hands the slot to the oldest waiter.
|
|
646
|
+
*/
|
|
647
|
+
async acquire(signal) {
|
|
648
|
+
if (signal?.aborted)
|
|
649
|
+
throw abortError();
|
|
650
|
+
if (this.held < this.capacity) {
|
|
651
|
+
this.held += 1;
|
|
652
|
+
return this.releaser();
|
|
653
|
+
}
|
|
654
|
+
return new Promise((resolve, reject) => {
|
|
655
|
+
const waiter = { resolve, signal };
|
|
656
|
+
waiter.onAbort = () => {
|
|
657
|
+
const index = this.waiters.indexOf(waiter);
|
|
658
|
+
if (index < 0)
|
|
659
|
+
return;
|
|
660
|
+
this.waiters.splice(index, 1);
|
|
661
|
+
reject(abortError());
|
|
662
|
+
};
|
|
663
|
+
signal?.addEventListener("abort", waiter.onAbort, { once: true });
|
|
664
|
+
this.waiters.push(waiter);
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
releaser() {
|
|
668
|
+
let released = false;
|
|
669
|
+
return () => {
|
|
670
|
+
if (released)
|
|
671
|
+
return;
|
|
672
|
+
released = true;
|
|
673
|
+
const next = this.waiters.shift();
|
|
674
|
+
if (next) {
|
|
675
|
+
next.signal?.removeEventListener("abort", next.onAbort);
|
|
676
|
+
next.resolve(this.releaser());
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
this.held -= 1;
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
/** A pool that never blocks — the default when no shared ceiling is wired. */
|
|
684
|
+
export function unboundedSlotPool() {
|
|
685
|
+
return new SubagentSlotPool(Number.MAX_SAFE_INTEGER);
|
|
686
|
+
}
|
|
687
|
+
//# sourceMappingURL=subagent.js.map
|