@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,677 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { recordSubagentOutcome, reportSubagentLaunchError } from "../../observability/index.js";
|
|
3
|
+
const MAX_DAG_NODES = 8;
|
|
4
|
+
const MAX_DAG_EDGES = 16;
|
|
5
|
+
const MAX_DAG_DEPTH = 4;
|
|
6
|
+
const MAX_CONCURRENT_SUBAGENTS = 4;
|
|
7
|
+
const MAX_DEPENDENCY_OUTPUT_CHARS = 4000;
|
|
8
|
+
/**
|
|
9
|
+
* Every subagent runs under a named profile: the profile owns the prompt,
|
|
10
|
+
* tool grant, model and budget defaults. Letting the model assemble those
|
|
11
|
+
* per call proved unstable, so the schema deliberately exposes no
|
|
12
|
+
* `systemPrompt`, `tools` or `model` escape hatch — narrowing what the model
|
|
13
|
+
* can get wrong is the point. The model may request a larger token allowance,
|
|
14
|
+
* but cannot accidentally shrink the profile's turn, cost, or duration limits.
|
|
15
|
+
*
|
|
16
|
+
* `profileNames` is baked into the schema as an enum to steer the model's
|
|
17
|
+
* choice. TypeBox does not check `enum` on a string, so an unknown name still
|
|
18
|
+
* reaches `validatePlanProfiles`, which names the available profiles.
|
|
19
|
+
*/
|
|
20
|
+
function buildTaskProperties(profileNames) {
|
|
21
|
+
return {
|
|
22
|
+
task: Type.String({ minLength: 1, description: "Self-contained task for a fresh subagent." }),
|
|
23
|
+
profile: Type.Optional(Type.String({
|
|
24
|
+
enum: profileNames,
|
|
25
|
+
description: "Profile this subagent runs under. Required, but a top-level profile covers every task and DAG node that does not set its own.",
|
|
26
|
+
})),
|
|
27
|
+
// No length bound: a label is a display string, and `taskLabel` clamps it.
|
|
28
|
+
// Bounding it in the schema only lets a cosmetic field reject a whole DAG,
|
|
29
|
+
// and validation reports that failure by echoing every node back.
|
|
30
|
+
label: Type.Optional(Type.String({ description: "Short progress label for this subagent." })),
|
|
31
|
+
input: Type.Optional(Type.Unknown({ description: "Optional JSON-serializable structured input for the task." })),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const sharedProperties = {
|
|
35
|
+
parentContext: Type.Optional(Type.Object({
|
|
36
|
+
mode: Type.Literal("normalized"),
|
|
37
|
+
recentTurns: Type.Optional(Type.Integer({ minimum: 1, maximum: 8, default: 3 })),
|
|
38
|
+
})),
|
|
39
|
+
outputSchema: Type.Optional(Type.Record(Type.String(), Type.Unknown(), {
|
|
40
|
+
description: "Optional TypeBox/JSON Schema applied to every subagent result.",
|
|
41
|
+
})),
|
|
42
|
+
budget: Type.Optional(Type.Object({
|
|
43
|
+
maxTokens: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
44
|
+
}, {
|
|
45
|
+
description: "Optionally requests a larger token allowance than the profile default.",
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* The runtime schema varies only in the `profile` enum, so every instance
|
|
50
|
+
* shares one static type and `subagentSchema` below can stand in for it.
|
|
51
|
+
*/
|
|
52
|
+
function buildSubagentSchema(profileNames) {
|
|
53
|
+
const taskProperties = buildTaskProperties(profileNames);
|
|
54
|
+
return Type.Object({
|
|
55
|
+
task: Type.Optional(taskProperties.task),
|
|
56
|
+
profile: taskProperties.profile,
|
|
57
|
+
label: taskProperties.label,
|
|
58
|
+
input: taskProperties.input,
|
|
59
|
+
tasks: Type.Optional(Type.Array(Type.Object(taskProperties), {
|
|
60
|
+
minItems: 1,
|
|
61
|
+
maxItems: MAX_DAG_NODES,
|
|
62
|
+
description: "Independent subagent tasks executed concurrently; results preserve input order.",
|
|
63
|
+
})),
|
|
64
|
+
dag: Type.Optional(Type.Object({
|
|
65
|
+
nodes: Type.Array(Type.Object({
|
|
66
|
+
id: Type.String({
|
|
67
|
+
pattern: "^[A-Za-z0-9_-]+$",
|
|
68
|
+
maxLength: 64,
|
|
69
|
+
description: "Unique stable node id used by dependsOn.",
|
|
70
|
+
}),
|
|
71
|
+
...taskProperties,
|
|
72
|
+
dependsOn: Type.Optional(Type.Array(Type.String(), { maxItems: MAX_DAG_NODES })),
|
|
73
|
+
}), { minItems: 1, maxItems: MAX_DAG_NODES }),
|
|
74
|
+
maxConcurrency: Type.Optional(Type.Integer({
|
|
75
|
+
minimum: 1,
|
|
76
|
+
maximum: MAX_CONCURRENT_SUBAGENTS,
|
|
77
|
+
default: MAX_CONCURRENT_SUBAGENTS,
|
|
78
|
+
})),
|
|
79
|
+
})),
|
|
80
|
+
...sharedProperties,
|
|
81
|
+
}, { description: "Provide task, tasks, or dag." });
|
|
82
|
+
}
|
|
83
|
+
const subagentSchema = buildSubagentSchema([]);
|
|
84
|
+
/** Shortest gap between activity-driven redraws of the dashboard. */
|
|
85
|
+
const ACTIVITY_EMIT_INTERVAL_MS = 2000;
|
|
86
|
+
class SubagentProgressTracker {
|
|
87
|
+
constructor(mode, items, onUpdate) {
|
|
88
|
+
this.mode = mode;
|
|
89
|
+
this.items = items;
|
|
90
|
+
this.onUpdate = onUpdate;
|
|
91
|
+
this.lastActivityEmit = 0;
|
|
92
|
+
this.states = new Map();
|
|
93
|
+
this.metrics = new Map();
|
|
94
|
+
for (const item of items)
|
|
95
|
+
this.states.set(item.id, "pending");
|
|
96
|
+
}
|
|
97
|
+
update(id, status, metrics) {
|
|
98
|
+
this.states.set(id, status);
|
|
99
|
+
if (metrics)
|
|
100
|
+
this.metrics.set(id, metrics);
|
|
101
|
+
this.emit();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Record what a node is doing, rate-limited.
|
|
105
|
+
*
|
|
106
|
+
* Status changes are rare and each one matters, so `update` emits every
|
|
107
|
+
* time. Activity is the opposite — it can change several times a second
|
|
108
|
+
* while text streams — and every emission redraws the whole response, on a
|
|
109
|
+
* path that is deliberately not batched. Left unbounded this would spend the
|
|
110
|
+
* platform's edit budget on a character counter.
|
|
111
|
+
*/
|
|
112
|
+
activity(id, activity) {
|
|
113
|
+
const previous = this.metrics.get(id) ?? {};
|
|
114
|
+
this.metrics.set(id, { ...previous, activity });
|
|
115
|
+
const now = Date.now();
|
|
116
|
+
if (now - this.lastActivityEmit < ACTIVITY_EMIT_INTERVAL_MS)
|
|
117
|
+
return;
|
|
118
|
+
this.lastActivityEmit = now;
|
|
119
|
+
this.emit();
|
|
120
|
+
}
|
|
121
|
+
emit() {
|
|
122
|
+
if (!this.onUpdate)
|
|
123
|
+
return;
|
|
124
|
+
const nodes = this.items.map((item) => boundSubagentProgressNode({
|
|
125
|
+
...item,
|
|
126
|
+
status: this.states.get(item.id) ?? "pending",
|
|
127
|
+
...this.metrics.get(item.id),
|
|
128
|
+
}));
|
|
129
|
+
this.onUpdate({
|
|
130
|
+
content: [],
|
|
131
|
+
details: { progress: { mode: this.mode, nodes } },
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function taskLabel(task, fallback) {
|
|
136
|
+
return clampSubagentLabel(task.label?.trim() || task.task.trim().slice(0, 48) || fallback);
|
|
137
|
+
}
|
|
138
|
+
function formatOutcome(outcome) {
|
|
139
|
+
if (outcome.status === "budget_exceeded") {
|
|
140
|
+
return `Subagent stopped: budget limit exceeded${outcome.error ? ` (${outcome.error})` : ""}`;
|
|
141
|
+
}
|
|
142
|
+
if (outcome.status !== "completed") {
|
|
143
|
+
return `Subagent ${outcome.status}${outcome.error ? `: ${outcome.error}` : ""}`;
|
|
144
|
+
}
|
|
145
|
+
return typeof outcome.output === "string"
|
|
146
|
+
? outcome.output
|
|
147
|
+
: JSON.stringify(outcome.output, null, 2);
|
|
148
|
+
}
|
|
149
|
+
function buildRequest(task, shared, signal) {
|
|
150
|
+
const outputSchema = shared.outputSchema;
|
|
151
|
+
return {
|
|
152
|
+
task: task.task,
|
|
153
|
+
...(task.profile ? { profile: task.profile } : {}),
|
|
154
|
+
...(task.input !== undefined ? { input: task.input } : {}),
|
|
155
|
+
...(shared.parentContext ? { parentContext: shared.parentContext } : {}),
|
|
156
|
+
...(outputSchema ? { outputSchema } : {}),
|
|
157
|
+
...(shared.budget ? { budget: shared.budget } : {}),
|
|
158
|
+
...(signal ? { signal } : {}),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function buildDagWaves(nodes) {
|
|
162
|
+
if (nodes.length === 0 || nodes.length > MAX_DAG_NODES) {
|
|
163
|
+
throw new Error(`Subagent DAG must contain 1-${MAX_DAG_NODES} nodes`);
|
|
164
|
+
}
|
|
165
|
+
const byId = new Map();
|
|
166
|
+
let edgeCount = 0;
|
|
167
|
+
for (const node of nodes) {
|
|
168
|
+
if (!/^[A-Za-z0-9_-]{1,64}$/.test(node.id)) {
|
|
169
|
+
throw new Error(`Invalid subagent DAG node id: ${node.id}`);
|
|
170
|
+
}
|
|
171
|
+
if (byId.has(node.id))
|
|
172
|
+
throw new Error(`Duplicate subagent DAG node id: ${node.id}`);
|
|
173
|
+
byId.set(node.id, node);
|
|
174
|
+
const dependencies = new Set(node.dependsOn ?? []);
|
|
175
|
+
if (dependencies.size !== (node.dependsOn?.length ?? 0)) {
|
|
176
|
+
throw new Error(`Duplicate dependency on subagent DAG node: ${node.id}`);
|
|
177
|
+
}
|
|
178
|
+
edgeCount += dependencies.size;
|
|
179
|
+
}
|
|
180
|
+
if (edgeCount > MAX_DAG_EDGES) {
|
|
181
|
+
throw new Error(`Subagent DAG exceeds ${MAX_DAG_EDGES} dependency edges`);
|
|
182
|
+
}
|
|
183
|
+
for (const node of nodes) {
|
|
184
|
+
for (const dependency of node.dependsOn ?? []) {
|
|
185
|
+
if (!byId.has(dependency)) {
|
|
186
|
+
throw new Error(`Unknown subagent DAG dependency ${dependency} for node ${node.id}`);
|
|
187
|
+
}
|
|
188
|
+
if (dependency === node.id)
|
|
189
|
+
throw new Error(`Subagent DAG node ${node.id} depends on itself`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const remaining = new Set(nodes.map((node) => node.id));
|
|
193
|
+
const completed = new Set();
|
|
194
|
+
const waves = [];
|
|
195
|
+
while (remaining.size > 0) {
|
|
196
|
+
const wave = nodes.filter((node) => remaining.has(node.id) && (node.dependsOn ?? []).every((id) => completed.has(id)));
|
|
197
|
+
if (wave.length === 0)
|
|
198
|
+
throw new Error("Subagent DAG contains a cycle");
|
|
199
|
+
waves.push(wave);
|
|
200
|
+
if (waves.length > MAX_DAG_DEPTH) {
|
|
201
|
+
throw new Error(`Subagent DAG exceeds maximum depth ${MAX_DAG_DEPTH}`);
|
|
202
|
+
}
|
|
203
|
+
for (const node of wave) {
|
|
204
|
+
remaining.delete(node.id);
|
|
205
|
+
completed.add(node.id);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return waves;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* A top-level `profile` is the default for every task and DAG node, like the
|
|
212
|
+
* other shared params. A fan-out that runs entirely under one profile then
|
|
213
|
+
* names it once instead of repeating it per node.
|
|
214
|
+
*/
|
|
215
|
+
function withDefaultProfile(task, fallback) {
|
|
216
|
+
return task.profile || !fallback ? task : { ...task, profile: fallback };
|
|
217
|
+
}
|
|
218
|
+
function itemForNode(node, defaultProfile) {
|
|
219
|
+
return {
|
|
220
|
+
id: node.id,
|
|
221
|
+
label: clampSubagentLabel(node.label?.trim() || node.id),
|
|
222
|
+
task: withDefaultProfile(node, defaultProfile),
|
|
223
|
+
dependsOn: node.dependsOn ?? [],
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/** Normalize every tool mode into one plan: nodes, waves, concurrency. */
|
|
227
|
+
function buildPlan(params) {
|
|
228
|
+
const modeCount = [params.task, params.tasks, params.dag].filter((mode) => mode !== undefined).length;
|
|
229
|
+
if (modeCount !== 1) {
|
|
230
|
+
throw new Error("Subagent requires exactly one of task, tasks, or dag");
|
|
231
|
+
}
|
|
232
|
+
if (params.dag !== undefined) {
|
|
233
|
+
const toItem = (node) => itemForNode(node, params.profile);
|
|
234
|
+
const waves = buildDagWaves(params.dag.nodes).map((wave) => wave.map(toItem));
|
|
235
|
+
const requested = params.dag.maxConcurrency ?? MAX_CONCURRENT_SUBAGENTS;
|
|
236
|
+
return {
|
|
237
|
+
mode: "dag",
|
|
238
|
+
items: params.dag.nodes.map(toItem),
|
|
239
|
+
waves,
|
|
240
|
+
concurrency: Math.max(1, Math.min(MAX_CONCURRENT_SUBAGENTS, Math.floor(requested))),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
if (params.tasks !== undefined) {
|
|
244
|
+
const items = params.tasks.map((task, index) => ({
|
|
245
|
+
id: String(index),
|
|
246
|
+
label: taskLabel(task, String(index + 1)),
|
|
247
|
+
task: withDefaultProfile(task, params.profile),
|
|
248
|
+
dependsOn: [],
|
|
249
|
+
}));
|
|
250
|
+
return { mode: "parallel", items, waves: [items], concurrency: MAX_CONCURRENT_SUBAGENTS };
|
|
251
|
+
}
|
|
252
|
+
if (!params.task)
|
|
253
|
+
throw new Error("Subagent requires task, tasks, or dag");
|
|
254
|
+
const task = { ...params, task: params.task };
|
|
255
|
+
const item = { id: "0", label: taskLabel(task, "subagent"), task, dependsOn: [] };
|
|
256
|
+
return { mode: "single", items: [item], waves: [[item]], concurrency: 1 };
|
|
257
|
+
}
|
|
258
|
+
/** Run `worker` over every item with at most `limit` in flight. */
|
|
259
|
+
async function forEachConcurrent(items, limit, worker) {
|
|
260
|
+
let cursor = 0;
|
|
261
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
262
|
+
while (cursor < items.length) {
|
|
263
|
+
const index = cursor++;
|
|
264
|
+
const item = items[index];
|
|
265
|
+
if (item === undefined)
|
|
266
|
+
continue;
|
|
267
|
+
await worker(item, index);
|
|
268
|
+
}
|
|
269
|
+
}));
|
|
270
|
+
}
|
|
271
|
+
function dependencyOutput(outcome) {
|
|
272
|
+
if (outcome.status !== "completed")
|
|
273
|
+
return undefined;
|
|
274
|
+
const value = outcome.output;
|
|
275
|
+
const serialized = typeof value === "string" ? value : JSON.stringify(value);
|
|
276
|
+
if (serialized === undefined)
|
|
277
|
+
return null;
|
|
278
|
+
if (serialized.length <= MAX_DEPENDENCY_OUTPUT_CHARS)
|
|
279
|
+
return value;
|
|
280
|
+
// Oversized structured output becomes a marked string — the shape is lost,
|
|
281
|
+
// which the tool description warns downstream consumers about.
|
|
282
|
+
return `${serialized.slice(0, MAX_DEPENDENCY_OUTPUT_CHARS)}\n[truncated]`;
|
|
283
|
+
}
|
|
284
|
+
function planRequest(item, shared, outcomes, signal) {
|
|
285
|
+
if (item.dependsOn.length === 0)
|
|
286
|
+
return buildRequest(item.task, shared, signal);
|
|
287
|
+
const dependencies = Object.fromEntries(item.dependsOn.map((id) => [id, dependencyOutput(outcomes.get(id))]));
|
|
288
|
+
const input = {
|
|
289
|
+
...(item.task.input !== undefined ? { input: item.task.input } : {}),
|
|
290
|
+
dependencies,
|
|
291
|
+
};
|
|
292
|
+
return buildRequest({ ...item.task, input }, shared, signal);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* One executor for every mode: wave barriers and a per-invocation concurrency
|
|
296
|
+
* bound. Process-wide slots are acquired by the shared runner seam.
|
|
297
|
+
*/
|
|
298
|
+
async function runWaves(plan, shared, runSubagent, progress, signal) {
|
|
299
|
+
const outcomes = new Map();
|
|
300
|
+
for (const wave of plan.waves) {
|
|
301
|
+
await forEachConcurrent(wave, plan.concurrency, async (item) => {
|
|
302
|
+
const failedDependency = item.dependsOn.find((id) => outcomes.get(id)?.status !== "completed");
|
|
303
|
+
if (failedDependency) {
|
|
304
|
+
outcomes.set(item.id, {
|
|
305
|
+
id: item.id,
|
|
306
|
+
status: "skipped",
|
|
307
|
+
error: `Dependency ${failedDependency} did not complete`,
|
|
308
|
+
});
|
|
309
|
+
recordSubagentOutcome({
|
|
310
|
+
itemId: item.id,
|
|
311
|
+
mode: plan.mode,
|
|
312
|
+
status: "skipped",
|
|
313
|
+
profile: item.task.profile,
|
|
314
|
+
error: `Dependency ${failedDependency} did not complete`,
|
|
315
|
+
});
|
|
316
|
+
progress.update(item.id, "skipped", {
|
|
317
|
+
reason: `Dependency ${failedDependency} did not complete`,
|
|
318
|
+
});
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
let result;
|
|
322
|
+
progress.update(item.id, "running");
|
|
323
|
+
try {
|
|
324
|
+
result = await runSubagent(planRequest(item, shared, outcomes, signal), {
|
|
325
|
+
onActivity: (activity) => progress.activity(item.id, activity),
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
reportSubagentLaunchError(error, {
|
|
330
|
+
itemId: item.id,
|
|
331
|
+
mode: plan.mode,
|
|
332
|
+
profile: item.task.profile,
|
|
333
|
+
});
|
|
334
|
+
throw error;
|
|
335
|
+
}
|
|
336
|
+
outcomes.set(item.id, { id: item.id, ...result });
|
|
337
|
+
recordSubagentOutcome({
|
|
338
|
+
itemId: item.id,
|
|
339
|
+
mode: plan.mode,
|
|
340
|
+
status: result.status,
|
|
341
|
+
profile: item.task.profile,
|
|
342
|
+
error: result.error,
|
|
343
|
+
turns: result.turns,
|
|
344
|
+
toolCalls: result.toolCalls,
|
|
345
|
+
tokens: result.tokens,
|
|
346
|
+
costUsd: result.costUsd,
|
|
347
|
+
durationMs: result.durationMs,
|
|
348
|
+
cleanupPending: result.cleanupPending,
|
|
349
|
+
});
|
|
350
|
+
progress.update(item.id, result.status, {
|
|
351
|
+
turns: result.turns,
|
|
352
|
+
toolCalls: result.toolCalls,
|
|
353
|
+
toolCallCounts: result.toolCallCounts,
|
|
354
|
+
tokens: result.tokens,
|
|
355
|
+
costUsd: result.costUsd,
|
|
356
|
+
durationMs: result.durationMs,
|
|
357
|
+
...(result.error ? { reason: result.error } : {}),
|
|
358
|
+
...(result.cleanupPending ? { cleanupPending: true } : {}),
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return plan.items.map((item) => outcomes.get(item.id));
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* The tool grant belongs in the menu. A description alone reads as a stylistic
|
|
366
|
+
* constraint, so a model will pick a no-tool profile for work that needs tools
|
|
367
|
+
* and then narrate the tool call it could not make.
|
|
368
|
+
*/
|
|
369
|
+
function formatToolGrant(tools) {
|
|
370
|
+
if (!tools)
|
|
371
|
+
return "tools unknown";
|
|
372
|
+
return tools.length === 0 ? "no tools" : `tools: ${tools.join(", ")}`;
|
|
373
|
+
}
|
|
374
|
+
function validatePlanProfiles(plan, availableProfiles) {
|
|
375
|
+
const known = [...availableProfiles].join(", ");
|
|
376
|
+
for (const item of plan.items) {
|
|
377
|
+
const profile = item.task.profile;
|
|
378
|
+
if (!profile) {
|
|
379
|
+
throw new Error(`Subagent ${item.label} must specify a profile (available: ${known})`);
|
|
380
|
+
}
|
|
381
|
+
if (!availableProfiles.has(profile)) {
|
|
382
|
+
throw new Error(`Unknown subagent profile: ${profile} (available: ${known})`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Create the normal agent's bounded subagent delegation and DAG tool.
|
|
388
|
+
* `globalSlots` is the process-wide fan-out account shared across every
|
|
389
|
+
* conversation's tool instance; omitted, fan-out is bounded per run only.
|
|
390
|
+
*
|
|
391
|
+
* `profiles` must be non-empty: it is both the model-facing menu and the only
|
|
392
|
+
* way to grant a subagent any capability at all.
|
|
393
|
+
*/
|
|
394
|
+
export function createSubagentTool(runSubagent, profiles) {
|
|
395
|
+
if (profiles.size === 0) {
|
|
396
|
+
throw new Error("createSubagentTool requires at least one subagent profile");
|
|
397
|
+
}
|
|
398
|
+
const profileDescription = [...profiles.entries()]
|
|
399
|
+
.map(([name, profile]) => `${name} [${formatToolGrant(profile.tools)}] — ${profile.description}`)
|
|
400
|
+
.join("; ");
|
|
401
|
+
return {
|
|
402
|
+
name: "subagent",
|
|
403
|
+
label: "Subagent",
|
|
404
|
+
description: `Run fresh isolated subagents. Use task for one subagent, tasks for independent concurrent work, or dag.nodes for a bounded dependency graph. At most ${MAX_CONCURRENT_SUBAGENTS} subagents run concurrently. DAG limits: ${MAX_DAG_NODES} nodes, ${MAX_DAG_EDGES} edges, depth ${MAX_DAG_DEPTH}; failed dependencies skip descendants, and dependency outputs larger than ${MAX_DEPENDENCY_OUTPUT_CHARS} characters reach downstream nodes as a truncated string. ` +
|
|
405
|
+
"Subagents are fresh by default; parentContext.mode=normalized can include a sanitized reference snapshot of the active parent run. Nested subagents are not allowed. " +
|
|
406
|
+
`Every task and DAG node must set profile; the profile supplies the prompt, tools, model and budget. Available profiles: ${profileDescription}.`,
|
|
407
|
+
parameters: buildSubagentSchema([...profiles.keys()]),
|
|
408
|
+
execute: async (_toolCallId, params, signal, onUpdate) => {
|
|
409
|
+
const plan = buildPlan(params);
|
|
410
|
+
validatePlanProfiles(plan, new Set(profiles.keys()));
|
|
411
|
+
const progress = new SubagentProgressTracker(plan.mode, plan.items.map(({ id, label, task }) => ({ id, label, profile: task.profile })), onUpdate);
|
|
412
|
+
progress.emit();
|
|
413
|
+
const ordered = await runWaves(plan, params, runSubagent, progress, signal);
|
|
414
|
+
switch (plan.mode) {
|
|
415
|
+
case "dag":
|
|
416
|
+
return {
|
|
417
|
+
content: [
|
|
418
|
+
{
|
|
419
|
+
type: "text",
|
|
420
|
+
text: ordered
|
|
421
|
+
.map((outcome) => `[${outcome.id}] ${formatOutcome(outcome)}`)
|
|
422
|
+
.join("\n\n"),
|
|
423
|
+
},
|
|
424
|
+
],
|
|
425
|
+
details: {
|
|
426
|
+
mode: "dag",
|
|
427
|
+
waves: plan.waves.map((wave) => wave.map((item) => item.id)),
|
|
428
|
+
results: ordered,
|
|
429
|
+
},
|
|
430
|
+
};
|
|
431
|
+
case "parallel": {
|
|
432
|
+
const results = ordered.map(({ id: _id, ...result }) => result);
|
|
433
|
+
return {
|
|
434
|
+
content: [
|
|
435
|
+
{
|
|
436
|
+
type: "text",
|
|
437
|
+
text: results
|
|
438
|
+
.map((result, index) => `[${index + 1}] ${formatOutcome(result)}`)
|
|
439
|
+
.join("\n\n"),
|
|
440
|
+
},
|
|
441
|
+
],
|
|
442
|
+
details: { mode: "parallel", results },
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
case "single": {
|
|
446
|
+
const single = ordered[0];
|
|
447
|
+
if (single === undefined) {
|
|
448
|
+
throw new Error("Subagent plan produced no outcome");
|
|
449
|
+
}
|
|
450
|
+
const { id: _id, ...result } = single;
|
|
451
|
+
return {
|
|
452
|
+
content: [{ type: "text", text: formatOutcome(result) }],
|
|
453
|
+
details: result,
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
// Subagent progress protocol: the tool owns construction, transport validation,
|
|
461
|
+
// settlement and its canonical response-source dashboard. Presenters consume it.
|
|
462
|
+
/** Longest label the dashboard renders; longer ones are clamped, never rejected. */
|
|
463
|
+
export const MAX_SUBAGENT_LABEL_CHARS = 100;
|
|
464
|
+
const MAX_PROFILE_CHARS = 64;
|
|
465
|
+
const MAX_REASON_CHARS = 240;
|
|
466
|
+
const MAX_ACTIVITY_CHARS = 80;
|
|
467
|
+
const SUBAGENT_STATUS_MARKER = {
|
|
468
|
+
pending: "○",
|
|
469
|
+
running: "●",
|
|
470
|
+
completed: "✓",
|
|
471
|
+
failed: "✗",
|
|
472
|
+
cancelled: "■",
|
|
473
|
+
timeout: "◷",
|
|
474
|
+
budget_exceeded: "!",
|
|
475
|
+
invalid_output: "✗",
|
|
476
|
+
skipped: "⊘",
|
|
477
|
+
};
|
|
478
|
+
const SUBAGENT_STATUS_LABEL = {
|
|
479
|
+
pending: "Waiting",
|
|
480
|
+
running: "Running",
|
|
481
|
+
completed: "Completed",
|
|
482
|
+
failed: "Failed",
|
|
483
|
+
cancelled: "Cancelled",
|
|
484
|
+
timeout: "Timed out",
|
|
485
|
+
budget_exceeded: "Budget exceeded",
|
|
486
|
+
invalid_output: "Invalid output",
|
|
487
|
+
skipped: "Skipped",
|
|
488
|
+
};
|
|
489
|
+
/**
|
|
490
|
+
* Derived from the marker table, which `satisfies` keeps exhaustive: a new
|
|
491
|
+
* terminal status is a compile error there, and this runtime set follows —
|
|
492
|
+
* the validator can never silently drop a status the tables know about.
|
|
493
|
+
*/
|
|
494
|
+
const VALID_STATUSES = new Set(Object.keys(SUBAGENT_STATUS_MARKER));
|
|
495
|
+
/** Clamp a label to the display bound, ending a truncation visibly with `…`. */
|
|
496
|
+
function clampSubagentLabel(label) {
|
|
497
|
+
if (label.length <= MAX_SUBAGENT_LABEL_CHARS)
|
|
498
|
+
return label;
|
|
499
|
+
return `${label.slice(0, MAX_SUBAGENT_LABEL_CHARS - 1)}…`;
|
|
500
|
+
}
|
|
501
|
+
/** The display bounds, applied once at construction and again on parse. */
|
|
502
|
+
export function boundSubagentProgressNode(node) {
|
|
503
|
+
return {
|
|
504
|
+
...node,
|
|
505
|
+
label: clampSubagentLabel(node.label),
|
|
506
|
+
...(node.profile !== undefined ? { profile: node.profile.slice(0, MAX_PROFILE_CHARS) } : {}),
|
|
507
|
+
...(node.activity !== undefined
|
|
508
|
+
? { activity: node.activity.slice(0, MAX_ACTIVITY_CHARS) }
|
|
509
|
+
: {}),
|
|
510
|
+
...(node.reason !== undefined ? { reason: node.reason.slice(0, MAX_REASON_CHARS) } : {}),
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
function parseNode(value) {
|
|
514
|
+
if (!value || typeof value !== "object")
|
|
515
|
+
return undefined;
|
|
516
|
+
const item = value;
|
|
517
|
+
if (typeof item.id !== "string" ||
|
|
518
|
+
typeof item.label !== "string" ||
|
|
519
|
+
typeof item.status !== "string" ||
|
|
520
|
+
!VALID_STATUSES.has(item.status)) {
|
|
521
|
+
return undefined;
|
|
522
|
+
}
|
|
523
|
+
return boundSubagentProgressNode({
|
|
524
|
+
id: item.id,
|
|
525
|
+
label: item.label,
|
|
526
|
+
status: item.status,
|
|
527
|
+
...(typeof item.profile === "string" ? { profile: item.profile } : {}),
|
|
528
|
+
...(typeof item.turns === "number" ? { turns: item.turns } : {}),
|
|
529
|
+
...(typeof item.toolCalls === "number" ? { toolCalls: item.toolCalls } : {}),
|
|
530
|
+
...(item.toolCallCounts && typeof item.toolCallCounts === "object"
|
|
531
|
+
? {
|
|
532
|
+
toolCallCounts: Object.fromEntries(Object.entries(item.toolCallCounts).filter((entry) => typeof entry[1] === "number")),
|
|
533
|
+
}
|
|
534
|
+
: {}),
|
|
535
|
+
...(typeof item.tokens === "number" ? { tokens: item.tokens } : {}),
|
|
536
|
+
...(typeof item.costUsd === "number" ? { costUsd: item.costUsd } : {}),
|
|
537
|
+
...(typeof item.durationMs === "number" ? { durationMs: item.durationMs } : {}),
|
|
538
|
+
...(typeof item.activity === "string" ? { activity: item.activity } : {}),
|
|
539
|
+
...(typeof item.reason === "string" ? { reason: item.reason } : {}),
|
|
540
|
+
...(item.cleanupPending === true ? { cleanupPending: true } : {}),
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Parse a snapshot back off the untyped transport. All-or-nothing: one
|
|
545
|
+
* malformed node means the payload is not ours (any tool can put anything in
|
|
546
|
+
* `details`), so the whole candidate is rejected rather than partially shown.
|
|
547
|
+
*/
|
|
548
|
+
export function parseSubagentProgressSnapshot(value) {
|
|
549
|
+
if (!value || typeof value !== "object")
|
|
550
|
+
return undefined;
|
|
551
|
+
const candidate = value;
|
|
552
|
+
if ((candidate.mode !== "single" && candidate.mode !== "parallel" && candidate.mode !== "dag") ||
|
|
553
|
+
!Array.isArray(candidate.nodes)) {
|
|
554
|
+
return undefined;
|
|
555
|
+
}
|
|
556
|
+
const nodes = [];
|
|
557
|
+
for (const node of candidate.nodes) {
|
|
558
|
+
const parsed = parseNode(node);
|
|
559
|
+
if (!parsed)
|
|
560
|
+
return undefined;
|
|
561
|
+
nodes.push(parsed);
|
|
562
|
+
}
|
|
563
|
+
return { mode: candidate.mode, nodes };
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Project a live snapshot to its end-of-tool state: nodes still pending or
|
|
567
|
+
* running settle to the tool call's outcome. Metrics spread through
|
|
568
|
+
* unchanged — an unsettled node never reported any.
|
|
569
|
+
*/
|
|
570
|
+
export function settleSubagentProgress(snapshot, isError) {
|
|
571
|
+
return {
|
|
572
|
+
...snapshot,
|
|
573
|
+
nodes: snapshot.nodes.map((node) => node.status !== "running" && node.status !== "pending"
|
|
574
|
+
? node
|
|
575
|
+
: { ...node, status: isError ? "failed" : "completed" }),
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Fold concurrent or successive subagent fan-outs into the single snapshot the
|
|
580
|
+
* dashboard renders. A run can call the subagent tool more than once; picking
|
|
581
|
+
* one snapshot would drop the others' cost and status, and alternating between
|
|
582
|
+
* them makes the live view flicker. Node ids are namespaced by source because
|
|
583
|
+
* each fan-out numbers its own nodes from zero.
|
|
584
|
+
*/
|
|
585
|
+
export function mergeSubagentProgress(snapshots) {
|
|
586
|
+
if (snapshots.length === 0)
|
|
587
|
+
return undefined;
|
|
588
|
+
if (snapshots.length === 1)
|
|
589
|
+
return snapshots[0];
|
|
590
|
+
const nodes = snapshots.flatMap((snapshot, index) => snapshot.nodes.map((node) => ({ ...node, id: `${index}:${node.id}` })));
|
|
591
|
+
const mode = snapshots.some((snapshot) => snapshot.mode === "dag")
|
|
592
|
+
? "dag"
|
|
593
|
+
: nodes.length > 1
|
|
594
|
+
? "parallel"
|
|
595
|
+
: "single";
|
|
596
|
+
return { mode, nodes };
|
|
597
|
+
}
|
|
598
|
+
// ---------------------------------------------------------------------------
|
|
599
|
+
// Dashboard text
|
|
600
|
+
// ---------------------------------------------------------------------------
|
|
601
|
+
function settledCount(snapshot) {
|
|
602
|
+
return snapshot.nodes.filter((node) => node.status !== "pending" && node.status !== "running")
|
|
603
|
+
.length;
|
|
604
|
+
}
|
|
605
|
+
function modeLabel(snapshot) {
|
|
606
|
+
if (snapshot.mode === "dag")
|
|
607
|
+
return "DAG";
|
|
608
|
+
if (snapshot.mode === "parallel")
|
|
609
|
+
return "Parallel";
|
|
610
|
+
return "Run";
|
|
611
|
+
}
|
|
612
|
+
function escapeMarkdown(text) {
|
|
613
|
+
return text.replace(/([\\`*_{}[\]()<>#+\-.!|~])/g, "\\$1");
|
|
614
|
+
}
|
|
615
|
+
function compactNumber(value) {
|
|
616
|
+
return new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 }).format(value);
|
|
617
|
+
}
|
|
618
|
+
function summaryText(snapshot) {
|
|
619
|
+
const totals = snapshot.nodes.reduce((sum, node) => ({
|
|
620
|
+
turns: sum.turns + (node.turns ?? 0),
|
|
621
|
+
toolCalls: sum.toolCalls + (node.toolCalls ?? 0),
|
|
622
|
+
tokens: sum.tokens + (node.tokens ?? 0),
|
|
623
|
+
costUsd: sum.costUsd + (node.costUsd ?? 0),
|
|
624
|
+
}), { turns: 0, toolCalls: 0, tokens: 0, costUsd: 0 });
|
|
625
|
+
return [
|
|
626
|
+
totals.turns > 0 ? `${totals.turns} LLM turns` : undefined,
|
|
627
|
+
totals.toolCalls > 0 ? `${totals.toolCalls} tool calls` : undefined,
|
|
628
|
+
totals.tokens > 0 ? `${compactNumber(totals.tokens)} tokens` : undefined,
|
|
629
|
+
totals.costUsd > 0 ? `$${totals.costUsd.toFixed(4)}` : undefined,
|
|
630
|
+
]
|
|
631
|
+
.filter(Boolean)
|
|
632
|
+
.join(" · ");
|
|
633
|
+
}
|
|
634
|
+
/** The dashboard's one-line summary header, unformatted. */
|
|
635
|
+
function dashboardHeader(snapshot) {
|
|
636
|
+
const base = `Subagents · ${settledCount(snapshot)}/${snapshot.nodes.length} · ${modeLabel(snapshot)}`;
|
|
637
|
+
const summary = summaryText(snapshot);
|
|
638
|
+
return summary ? `${base} · ${summary}` : base;
|
|
639
|
+
}
|
|
640
|
+
function countLabel(count, singular) {
|
|
641
|
+
return `${count} ${singular}${count === 1 ? "" : "s"}`;
|
|
642
|
+
}
|
|
643
|
+
function detailText(node) {
|
|
644
|
+
const toolBreakdown = node.toolCallCounts
|
|
645
|
+
? Object.entries(node.toolCallCounts)
|
|
646
|
+
.map(([name, count]) => `${name} ×${count}`)
|
|
647
|
+
.join(" · ")
|
|
648
|
+
: undefined;
|
|
649
|
+
const metrics = [
|
|
650
|
+
node.turns !== undefined ? countLabel(node.turns, "LLM turn") : undefined,
|
|
651
|
+
node.toolCalls !== undefined ? countLabel(node.toolCalls, "tool call") : undefined,
|
|
652
|
+
toolBreakdown,
|
|
653
|
+
node.tokens !== undefined ? `${compactNumber(node.tokens)} tokens` : undefined,
|
|
654
|
+
node.costUsd !== undefined ? `$${node.costUsd.toFixed(4)}` : undefined,
|
|
655
|
+
node.durationMs !== undefined ? `${(node.durationMs / 1000).toFixed(1)}s` : undefined,
|
|
656
|
+
].filter(Boolean);
|
|
657
|
+
const reason = node.cleanupPending ? "Cleanup pending; usage is provisional" : node.reason;
|
|
658
|
+
// Activity is shown only while running, and that is exactly when there is
|
|
659
|
+
// nothing else: a node reports its metrics on the way out, so without this
|
|
660
|
+
// the whole of a long step reads "Running · profile" and never changes.
|
|
661
|
+
const activity = node.status === "running" ? node.activity : undefined;
|
|
662
|
+
// Profile leads the line: when a node reports no tool calls, the profile is
|
|
663
|
+
// what says whether that was the plan or a bad pick.
|
|
664
|
+
return [SUBAGENT_STATUS_LABEL[node.status], node.profile, activity, ...metrics, reason]
|
|
665
|
+
.filter(Boolean)
|
|
666
|
+
.join(" · ");
|
|
667
|
+
}
|
|
668
|
+
/** The dashboard as response source Markdown; adapters own any conversion. */
|
|
669
|
+
export function renderSubagentDashboard(snapshot) {
|
|
670
|
+
const header = `**${dashboardHeader(snapshot)}**`;
|
|
671
|
+
const rows = snapshot.nodes.flatMap((node) => [
|
|
672
|
+
`${SUBAGENT_STATUS_MARKER[node.status]} ${escapeMarkdown(node.label)}`,
|
|
673
|
+
`└ ${detailText(node)}`,
|
|
674
|
+
]);
|
|
675
|
+
return [header, ...rows].join("\n");
|
|
676
|
+
}
|
|
677
|
+
//# sourceMappingURL=subagent.js.map
|