@geminixiang/mikan 1.0.0-beta.78 → 1.0.0-beta.79
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 +24 -0
- package/dist/adapters/commands/admin.js +1 -1
- package/dist/adapters/commands/admin.js.map +1 -1
- package/dist/adapters/commands/login.d.ts.map +1 -1
- package/dist/adapters/commands/login.js +3 -2
- package/dist/adapters/commands/login.js.map +1 -1
- package/dist/adapters/commands/manifest.d.ts +0 -1
- package/dist/adapters/commands/manifest.d.ts.map +1 -1
- package/dist/adapters/commands/manifest.js.map +1 -1
- package/dist/adapters/commands/model.d.ts +0 -1
- package/dist/adapters/commands/model.d.ts.map +1 -1
- package/dist/adapters/commands/model.js +8 -20
- package/dist/adapters/commands/model.js.map +1 -1
- package/dist/adapters/commands/new.js +1 -1
- package/dist/adapters/commands/new.js.map +1 -1
- package/dist/adapters/commands/registry.js +1 -1
- package/dist/adapters/commands/registry.js.map +1 -1
- package/dist/adapters/commands/sandbox.d.ts +0 -1
- package/dist/adapters/commands/sandbox.d.ts.map +1 -1
- package/dist/adapters/commands/sandbox.js +1 -1
- package/dist/adapters/commands/sandbox.js.map +1 -1
- package/dist/adapters/commands/types.d.ts +6 -17
- package/dist/adapters/commands/types.d.ts.map +1 -1
- package/dist/adapters/commands/types.js.map +1 -1
- package/dist/adapters/commands/utils.d.ts +1 -1
- package/dist/adapters/commands/utils.d.ts.map +1 -1
- package/dist/adapters/commands/utils.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +4 -10
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +26 -22
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +0 -1
- package/dist/adapters/discord/components.d.ts.map +1 -1
- package/dist/adapters/discord/components.js.map +1 -1
- package/dist/adapters/discord/context.d.ts +3 -3
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +1 -1
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/types.d.ts +83 -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 +4 -5
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +10 -10
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.js +1 -1
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts +3 -4
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +1 -2
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +5 -6
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +1 -2
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/ids.d.ts +0 -3
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +0 -19
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/repo.d.ts +1 -1
- package/dist/adapters/github/repo.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts +6 -4
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +4 -3
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/issue.d.ts +10 -8
- package/dist/adapters/github/tools/issue.d.ts.map +1 -1
- package/dist/adapters/github/tools/issue.js +4 -3
- package/dist/adapters/github/tools/issue.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts +8 -6
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +4 -3
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/tools/read.d.ts +9 -7
- package/dist/adapters/github/tools/read.d.ts.map +1 -1
- package/dist/adapters/github/tools/read.js +4 -3
- package/dist/adapters/github/tools/read.js.map +1 -1
- package/dist/adapters/github/tools/review-reply.d.ts +6 -4
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
- package/dist/adapters/github/tools/review-reply.js +4 -3
- package/dist/adapters/github/tools/review-reply.js.map +1 -1
- package/dist/adapters/github/tools/sync.d.ts +5 -3
- package/dist/adapters/github/tools/sync.d.ts.map +1 -1
- package/dist/adapters/github/tools/sync.js +4 -3
- package/dist/adapters/github/tools/sync.js.map +1 -1
- package/dist/adapters/github/types.d.ts +5 -4
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +0 -1
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/intake.d.ts +1 -1
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +0 -1
- package/dist/adapters/markdown-tables.d.ts.map +1 -1
- package/dist/adapters/markdown-tables.js.map +1 -1
- package/dist/adapters/messages.d.ts +1 -1
- package/dist/adapters/messages.d.ts.map +1 -1
- package/dist/adapters/messages.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +8 -6
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +6 -4
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +39 -25
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +0 -1
- package/dist/adapters/slack/assistant.d.ts.map +1 -1
- package/dist/adapters/slack/assistant.js +2 -1
- package/dist/adapters/slack/assistant.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +5 -10
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +84 -86
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -5
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +1 -2
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts.map +1 -1
- package/dist/adapters/slack/jev-context.js +4 -2
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +5 -3
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/task-intent.js +1 -1
- package/dist/adapters/slack/task-intent.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +2 -1
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +0 -1
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
- package/dist/adapters/slack/tool-pack.js +2 -1
- package/dist/adapters/slack/tool-pack.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts +9 -7
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
- package/dist/adapters/slack/tools/blockkit.js +6 -4
- package/dist/adapters/slack/tools/blockkit.js.map +1 -1
- package/dist/adapters/slack/types.d.ts +36 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +3 -8
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +11 -11
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +3 -3
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +2 -2
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +24 -1
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -1
- package/dist/adapters/web/admin/client-assets.js +3 -2
- package/dist/adapters/web/admin/client-assets.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +4 -11
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +27 -30
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
- package/dist/adapters/web/admin/provider-models.js.map +1 -1
- package/dist/adapters/web/admin/types.d.ts +10 -4
- package/dist/adapters/web/admin/types.d.ts.map +1 -1
- package/dist/adapters/web/admin/types.js.map +1 -1
- package/dist/adapters/web/login/oauth.d.ts +0 -1
- package/dist/adapters/web/login/oauth.d.ts.map +1 -1
- package/dist/adapters/web/login/oauth.js +12 -12
- package/dist/adapters/web/login/oauth.js.map +1 -1
- package/dist/adapters/web/login/portal.d.ts +3 -6
- package/dist/adapters/web/login/portal.d.ts.map +1 -1
- package/dist/adapters/web/login/portal.js +5 -4
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/login/types.d.ts +1 -1
- package/dist/adapters/web/login/types.d.ts.map +1 -1
- package/dist/adapters/web/login/types.js.map +1 -1
- package/dist/adapters/web/portal-shell.d.ts +0 -1
- package/dist/adapters/web/portal-shell.d.ts.map +1 -1
- package/dist/adapters/web/portal-shell.js.map +1 -1
- package/dist/adapters/web/server.d.ts +6 -6
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +3 -2
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts +2 -3
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +12 -12
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- package/dist/adapters/web/session-view/types.d.ts +1 -11
- package/dist/adapters/web/session-view/types.d.ts.map +1 -1
- package/dist/adapters/web/session-view/types.js.map +1 -1
- package/dist/adapters/web/token-store.d.ts +0 -1
- package/dist/adapters/web/token-store.d.ts.map +1 -1
- package/dist/adapters/web/token-store.js.map +1 -1
- package/dist/cli/boot.d.ts +0 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +4 -4
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +4 -3
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.js +1 -1
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/sandbox.d.ts.map +1 -1
- package/dist/cli/sandbox.js +2 -1
- package/dist/cli/sandbox.js.map +1 -1
- package/dist/cli/sessions.d.ts.map +1 -1
- package/dist/cli/sessions.js +2 -1
- package/dist/cli/sessions.js.map +1 -1
- package/dist/env-manifest.d.ts +1 -1
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +3 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +11 -10
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts +1 -2
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +4 -4
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +8 -6
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +10 -15
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/execution-env.d.ts +1 -1
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +7 -6
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/execution-resolver.d.ts +4 -6
- package/dist/harness/execution-resolver.d.ts.map +1 -1
- package/dist/harness/execution-resolver.js +1 -1
- package/dist/harness/execution-resolver.js.map +1 -1
- package/dist/harness/jev.d.ts +1 -1
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js +1 -4
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/mcp-result.d.ts.map +1 -1
- package/dist/harness/mcp-result.js +15 -7
- package/dist/harness/mcp-result.js.map +1 -1
- package/dist/harness/mcp.d.ts +0 -2
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +13 -15
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.d.ts +0 -1
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +2 -1
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +2 -3
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +13 -9
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts +4 -25
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +26 -20
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -2
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +34 -17
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +0 -7
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +16 -14
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills.d.ts +2 -5
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +0 -1
- package/dist/harness/subagent-profiles.d.ts.map +1 -1
- package/dist/harness/subagent-profiles.js +12 -16
- package/dist/harness/subagent-profiles.js.map +1 -1
- package/dist/harness/subagent.d.ts +1 -1
- package/dist/harness/subagent.d.ts.map +1 -1
- package/dist/harness/subagent.js +17 -17
- package/dist/harness/subagent.js.map +1 -1
- package/dist/harness/tool-args.d.ts +2 -0
- package/dist/harness/tool-args.d.ts.map +1 -0
- package/dist/harness/tool-args.js +20 -0
- package/dist/harness/tool-args.js.map +1 -0
- package/dist/harness/tools/attach.d.ts +5 -4
- package/dist/harness/tools/attach.d.ts.map +1 -1
- package/dist/harness/tools/attach.js +1 -1
- package/dist/harness/tools/attach.js.map +1 -1
- package/dist/harness/tools/event.d.ts +12 -11
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +1 -1
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts +7 -5
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js +7 -5
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/host-fn-tool.d.ts +3 -2
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
- package/dist/harness/tools/host-fn-tool.js +5 -2
- package/dist/harness/tools/host-fn-tool.js.map +1 -1
- package/dist/harness/tools/index.d.ts +3 -4
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +1 -3
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +12 -10
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +6 -4
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/tools/jev.d.ts +9 -7
- package/dist/harness/tools/jev.d.ts.map +1 -1
- package/dist/harness/tools/jev.js +5 -6
- package/dist/harness/tools/jev.js.map +1 -1
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +2 -2
- package/dist/harness/tools/pi-tools.js.map +1 -1
- package/dist/harness/tools/react.d.ts +3 -2
- package/dist/harness/tools/react.d.ts.map +1 -1
- package/dist/harness/tools/react.js +1 -1
- package/dist/harness/tools/react.js.map +1 -1
- package/dist/harness/tools/sandbox.d.ts +7 -6
- package/dist/harness/tools/sandbox.d.ts.map +1 -1
- package/dist/harness/tools/sandbox.js +3 -2
- package/dist/harness/tools/sandbox.js.map +1 -1
- package/dist/harness/tools/subagent.d.ts +26 -26
- package/dist/harness/tools/subagent.d.ts.map +1 -1
- package/dist/harness/tools/subagent.js +25 -29
- package/dist/harness/tools/subagent.js.map +1 -1
- package/dist/harness/tools/task.d.ts +11 -8
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +8 -6
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/tools/types.d.ts +2 -1
- package/dist/harness/tools/types.d.ts.map +1 -1
- package/dist/harness/tools/types.js.map +1 -1
- package/dist/harness/types.d.ts +37 -4
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +16 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +1 -1
- package/dist/log.js.map +1 -1
- package/dist/main.js +27 -17
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +1 -2
- package/dist/memory-capture/index.d.ts.map +1 -1
- package/dist/memory-capture/index.js +8 -3
- package/dist/memory-capture/index.js.map +1 -1
- package/dist/memory-capture/types.d.ts +1 -1
- package/dist/memory-capture/types.js.map +1 -1
- package/dist/observability/index.d.ts +0 -3
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +11 -16
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/sentry.d.ts +9 -12
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +9 -118
- package/dist/observability/sentry.js.map +1 -1
- package/dist/office/index.d.ts +14 -3
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +51 -14
- package/dist/office/index.js.map +1 -1
- package/dist/office/projection.d.ts +1 -3
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +5 -5
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +5 -0
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +0 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +10 -6
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +2 -1
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +8 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +3 -2
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +2 -1
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.js +1 -1
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +0 -1
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/index.d.ts +4 -14
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +4 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +0 -1
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +12 -11
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sandbox/registry.d.ts +12 -0
- package/dist/sandbox/registry.d.ts.map +1 -0
- package/dist/sandbox/registry.js +93 -0
- package/dist/sandbox/registry.js.map +1 -0
- package/dist/sandbox/types.d.ts +3 -0
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +1 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +2 -2
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +32 -23
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/migrate-common.js +2 -2
- package/dist/sessions/migrate-common.js.map +1 -1
- package/dist/sessions/migrate-pi-084.d.ts +0 -1
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
- package/dist/sessions/migrate-pi-084.js +4 -6
- package/dist/sessions/migrate-pi-084.js.map +1 -1
- package/dist/sessions/migrate-v3.d.ts +0 -1
- package/dist/sessions/migrate-v3.d.ts.map +1 -1
- package/dist/sessions/migrate-v3.js +3 -5
- package/dist/sessions/migrate-v3.js.map +1 -1
- package/dist/sessions/session-key.d.ts +0 -1
- package/dist/sessions/session-key.d.ts.map +1 -1
- package/dist/sessions/session-key.js.map +1 -1
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +12 -19
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/store.d.ts +0 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +5 -3
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +1 -0
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +1 -2
- package/dist/settings/apply.d.ts.map +1 -1
- package/dist/settings/apply.js.map +1 -1
- package/dist/settings/index.d.ts +37 -34
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +28 -22
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/migrate.d.ts +1 -1
- package/dist/settings/migrate.d.ts.map +1 -1
- package/dist/settings/migrate.js +5 -4
- package/dist/settings/migrate.js.map +1 -1
- package/dist/types.d.ts +17 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/unknown-values.d.ts +3 -0
- package/dist/unknown-values.d.ts.map +1 -0
- package/dist/unknown-values.js +7 -0
- package/dist/unknown-values.js.map +1 -0
- package/dist/vault/index.d.ts +10 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +16 -7
- package/dist/vault/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/adapters/index.d.ts +0 -11
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -19
- package/dist/adapters/index.js.map +0 -1
package/dist/harness/session.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { TODO_CONTEXT, OperationMismatch, getOrThrow, DEFAULT_COMPACTION_SETTINGS, } from "@earendil-works/pi-agent-core";
|
|
2
2
|
import * as log from "../log.js";
|
|
3
3
|
import { adaptAgentTool, isHarnessTool } from "./tools/pi-tools.js";
|
|
4
|
+
import { START_TASK_TOOL, TASK_STATUS_TOOL } from "./tools/task.js";
|
|
5
|
+
import { errorMessage } from "../unknown-values.js";
|
|
4
6
|
const FORWARDED_EVENTS = [
|
|
5
7
|
"run_start",
|
|
6
8
|
"run_end",
|
|
@@ -64,7 +66,7 @@ export class MikanAgentSession {
|
|
|
64
66
|
toolCalls: this.tally.toolCalls,
|
|
65
67
|
toolCallCounts: { ...this.tally.toolCallCounts },
|
|
66
68
|
durationMs: this.tally.startedAt > 0 ? (this.tally.endedAt ?? Date.now()) - this.tally.startedAt : 0,
|
|
67
|
-
|
|
69
|
+
budgetExceededReason: this.budgetExceededReason || undefined,
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
captureExternalUsageSink() {
|
|
@@ -138,8 +140,8 @@ export class MikanAgentSession {
|
|
|
138
140
|
return;
|
|
139
141
|
const harness = this.harness;
|
|
140
142
|
const lane = this.lane;
|
|
141
|
-
const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter((tool) => (tool.name !==
|
|
142
|
-
(tool.name !==
|
|
143
|
+
const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter((tool) => (tool.name !== START_TASK_TOOL || options?.allowTaskHandoff === true) &&
|
|
144
|
+
(tool.name !== TASK_STATUS_TOOL || options?.allowTaskStatus === true));
|
|
143
145
|
await harness.setTools(tools, TODO_CONTEXT);
|
|
144
146
|
await lane.setActiveTools(tools.map((tool) => tool.name), TODO_CONTEXT);
|
|
145
147
|
await this.reloadFromSession();
|
|
@@ -349,9 +351,11 @@ export class MikanAgentSession {
|
|
|
349
351
|
const calls = assistant?.role === "assistant"
|
|
350
352
|
? assistant.content.filter((part) => part.type === "toolCall")
|
|
351
353
|
: [];
|
|
352
|
-
if (calls.length > 1 && calls.some((call) => call.name ===
|
|
354
|
+
if (calls.length > 1 && calls.some((call) => call.name === START_TASK_TOOL)) {
|
|
353
355
|
return {
|
|
354
|
-
block: {
|
|
356
|
+
block: {
|
|
357
|
+
reason: `Call ${START_TASK_TOOL} alone, without other tools in the same batch.`,
|
|
358
|
+
},
|
|
355
359
|
};
|
|
356
360
|
}
|
|
357
361
|
return undefined;
|
|
@@ -366,7 +370,7 @@ export class MikanAgentSession {
|
|
|
366
370
|
await listener(event);
|
|
367
371
|
}
|
|
368
372
|
catch (error) {
|
|
369
|
-
log.logWarning("Harness event listener failed",
|
|
373
|
+
log.logWarning("Harness event listener failed", errorMessage(error));
|
|
370
374
|
}
|
|
371
375
|
}
|
|
372
376
|
}
|
|
@@ -509,16 +513,14 @@ export class MikanAgentSession {
|
|
|
509
513
|
type: "compaction_end",
|
|
510
514
|
reason: event.reason,
|
|
511
515
|
aborted: event.status === "aborted",
|
|
512
|
-
|
|
513
|
-
|
|
516
|
+
errorMessage: event.status === "failed" ? event.error.message : undefined,
|
|
517
|
+
result: entry?.type === "compaction"
|
|
514
518
|
? {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
tokensBefore: entry.tokensBefore,
|
|
519
|
-
},
|
|
519
|
+
summary: entry.summary,
|
|
520
|
+
retainedMessages: entry.retainedTail.length,
|
|
521
|
+
tokensBefore: entry.tokensBefore,
|
|
520
522
|
}
|
|
521
|
-
:
|
|
523
|
+
: undefined,
|
|
522
524
|
});
|
|
523
525
|
return;
|
|
524
526
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,UAAU,EAKV,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC;AAwBvC,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBpE,MAAM,gBAAgB,GAAG;IACvB,WAAW;IACX,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,gBAAgB;IAChB,OAAO;IACP,OAAO;CACC,CAAC;AAEX,MAAM,OAAO,iBAAiB;IAkC5B,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;QA9B7C,cAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;QAErD,eAAU,GAAmB,EAAE,CAAC;QAGhC,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;QASnB,cAAS,GAAmB,EAAE,CAAC;QAE/B,iBAAY,GAAG,CAAC,CAAC;QACjB,6BAAwB,GAAG,KAAK,CAAC;QACjC,2BAAsB,GAAG,KAAK,CAAC;QAC/B,gBAAW,GAAmB,EAAE,CAAC;QACxB,aAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC/C,UAAK,GAAa;YACxB,KAAK,EAAE,gBAAgB,EAAE;YACzB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,CAAC;SACb,CAAC;QAGA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED,eAAe;QAUb,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAClC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;YACpC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YACpC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAChD,UAAU,EACR,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1F,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1F,CAAC;IACJ,CAAC;IAED,wBAAwB;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,oBAAoB;gBAAE,OAAO;YACjF,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC/C,IAAI,MAAM;gBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAoB;QAC1C,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,QAA8B;QACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,OAMC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACnE,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA+D;QAC1E,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,GAAG,CACf,IAAwB,EACxB,OAMC;QAED,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;QACjE,IAAI,CAAC,KAAK,GAAG;YACX,KAAK,EAAE,gBAAgB,EAAE;YACzB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,UAA0C,CAAC;QAC/C,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAAE,OAAO;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC5B,IAAI,CAAC,IAAI;gBACP,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,KAAK,CAAC,QAAQ,mDAAmD,CACvG,CAAC;YACJ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAQ,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAC5E,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;gBAClE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC,CACrE,CAAC;YACF,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,cAAc,CACvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9B,YAAY,CACb,CAAC;YACF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAAE,OAAO;YAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,IAAe,EACf,IAAwB,EACxB,MAAuB;QAEvB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC1D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,CAC1E,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QACzC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,CACvB,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAC3F,CAAC;QACF,IACE,MAAM,CAAC,IAAI,KAAK,SAAS;YACzB,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ;YAClC,CAAC,IAAI,CAAC,sBAAsB,EAC5B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,UAA0C;QACjE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,cAA8C,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC;YACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC;YAChC,IAAI,IAAI,CAAC,iBAAiB;gBAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,GAAG,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CACtB,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EACxC,2CAA2C,EAC3C,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAC5B,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,GAAG,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,UAAU,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7C,GAAG,CAAC,OAAO,CACT,uBAAuB,IAAI,CAAC,SAAS,CAAC;gBACpC,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK;aACzC,CAAC,EAAE,CACL,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QACjE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI;aAC1B,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;aAC5C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,iBAAiB,CAAC;gBAAE,MAAM,MAAM,CAAC,KAAK,CAAC;QACrF,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC5C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,OAAO;YAAE,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACnD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,kBAAkB,CAAC,OAAyC;QAClE,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,IAAI,CAAC,sBAAsB,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACzD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,CAAC;QACD,IAAI,IAAI,CAAC,qBAAqB,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,sBAAsB,CAC5B,OAA6B,EAC7B,OAAyC;QAEzC,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACrC,OAAO;YACL,GAAG,OAAO;YACV,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;gBAClC,MAAM,WAAW,GAAG,MAAM,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,IAAI,CAAC,sBAAsB,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;oBACzD,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;gBACvC,CAAC;gBACD,OAAO,WAAW,CAAC;YACrB,CAAC;SACU,CAAC;IAChB,CAAC;IAEO,mBAAmB,CACzB,KAAiF;QAEjF,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EACtC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CACvC,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,oBAAoB,CAC1B,KAAgE;QAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO;gBAAE,OAAO,OAAO,CAAC;YAC7B,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,MAAM,CAAC;YAChB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM,KAAK,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;YACvB,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACxB,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAqC,EAAE,EAAE,CAC1E,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACnF,CAAC;gBACN,CAAC;gBACD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAuC,EAAE,EAAE,CAC5E,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE,CACpC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACrF,CAAC;gBACN,CAAC;gBACD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAuC,EAAE,EAAE,CAC3E,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACpF,CAAC;gBACN,CAAC;gBACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAY,CAAC;gBAC/D,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,KAAuB;QAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YACnD,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACtD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9C,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5E,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC1B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACtB,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EACzD,YAAY,CACb,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtD,IAAI,CAAC,sBAAsB,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YACxF,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YACtF,MAAM,KAAK,GACT,SAAS,EAAE,IAAI,KAAK,WAAW;gBAC7B,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;gBACzE,OAAO;oBACL,KAAK,EAAE,EAAE,MAAM,EAAE,+DAA+D,EAAE;iBACnF,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,KAAmB;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,UAAU,CACZ,+BAA+B,EAC/B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAqB;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QACjF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,aAAa;gBAChB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO;gBAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;oBACpC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC;oBAC7D,IAAI,CAAC,wBAAwB;wBAC3B,OAAO,CAAC,UAAU,KAAK,OAAO;4BAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvE,OAAO;YACT,KAAK,eAAe;gBAClB,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,KAAK,gBAAgB;gBACnB,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,qBAAqB,EAAE,KAAK,CAAC,KAAK;iBACnC,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,YAAY;gBACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,KAAK,UAAU;gBACb,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,YAAY,CAAC;YAClB,KAAK,aAAa,CAAC;YACnB,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,KAAK,WAAW,CAAC;YACjB,KAAK,SAAS,CAAC;YACf,KAAK,iBAAiB,CAAC;YACvB,KAAK,WAAW,CAAC;YACjB,KAAK,kBAAkB,CAAC;YACxB,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,OAAO;gBACV,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAAoB;QAC5C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GACV,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9D,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,IAAI,MAAM;YAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAmF;QAEnF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACvC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,sBAAsB;oBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,aAAa;gBAChB,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,uBAAuB;oBAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;oBAC/C,aAAa,EAAE,KAAK,CAAC,aAAa;iBACnC,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,UAAU;gBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACvC,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,oBAAoB;oBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBACH,OAAO;QACX,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,KAWC;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,WAAW;gBACd,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAChD,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBACzC,OAAO;YACT,KAAK,iBAAiB;gBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,IAAI,CAAC,YAAY;oBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC;oBAClC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,YAAY,EAAE,KAAK,CAAC,YAAY;iBACjC,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,WAAW;gBACd,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;iBAC7B,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,kBAAkB;gBACrB,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpE,OAAO;YACT,KAAK,gBAAgB,EAAE,CAAC;gBACtB,MAAM,KAAK,GACT,KAAK,CAAC,MAAM,KAAK,WAAW;oBAC1B,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;oBACjD,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY;oBAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACjE,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS;oBACnC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,YAAY;wBAC9B,CAAC,CAAC;4BACE,MAAM,EAAE;gCACN,OAAO,EAAE,KAAK,CAAC,OAAO;gCACtB,gBAAgB,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;gCAC3C,YAAY,EAAE,KAAK,CAAC,YAAY;6BACjC;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,IAAI,CAAC,YAAY;wBAC1B,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO;qBAClF,CAAC,CAAC;oBACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACxB,CAAC;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACnE,OAAO;QACX,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc;QACvC,IAAI,IAAI,CAAC,oBAAoB;YAAE,OAAO;QACtC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,iBAAiB;YACvB,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;YACpC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YACpC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9E,IAAI,MAAM;YAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACxD,CAAC;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;YACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,iBAAiB,KAAK,QAAQ,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,wBAAwB;QAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAChE,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS;YACtE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,cAAc,SAAS,QAAQ,CAAC;QACxE,IAAI,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU;YACvE,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,UAAU,YAAY,CAAC;QACzF,IAAI,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa;YACnF,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,SAAS,aAAa,UAAU,CAAC;QAC9E,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,WAAW;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QACnD,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC9F,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,GAAG,UAAU,CAC7B,GAAG,EAAE;YACH,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,EAAE,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAC3C,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,SAAS,aAAa,UAAU,CACrE,CAAC;QACJ,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,aAAa,CAAC,CAChD,CAAC;IACJ,CAAC;CACF;AAOD,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAmB,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IAC7B,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,SAItC;IACC,OAAO;QACL,UAAU,EAAE,EAAE,GAAG,2BAA2B,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE;QACxE,KAAK,EAAE,EAAE,GAAG,sBAAsB,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE;QACzD,MAAM,EAAE,EAAE,GAAG,uBAAuB,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE;KAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,KAAY;IAC1C,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IAC3B,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC7B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC;IACnC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IACrC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAErC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/C,CAAC","sourcesContent":["import {\n TODO_CONTEXT,\n OperationMismatch,\n getOrThrow,\n type AgentHarness,\n type AgentLane,\n type AgentMessage,\n type HarnessEvent as PiHarnessEvent,\n DEFAULT_COMPACTION_SETTINGS,\n type CompactionSettings,\n} from \"@earendil-works/pi-agent-core\";\nimport type {\n Api,\n AssistantMessageEventStream,\n ImageContent,\n Model,\n Models,\n ProviderRequestOptions,\n Usage,\n} from \"@earendil-works/pi-ai\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type {\n BudgetSettings,\n HarnessEvent,\n HarnessEventListener,\n HarnessSettings,\n MikanAgentSessionOptions,\n MikanHarnessTool,\n MikanToolInput,\n SubagentUsage,\n SubagentUsageSink,\n RetrySettings,\n} from \"./types.js\";\n\nimport * as log from \"../log.js\";\nimport { adaptAgentTool, isHarnessTool } from \"./tools/pi-tools.js\";\n\nexport type { CompactionReason } from \"./types.js\";\nexport type { HarnessEvent } from \"./types.js\";\nexport type { HarnessEventListener } from \"./types.js\";\nexport type { MikanAgentSessionOptions } from \"./types.js\";\n\ninterface RunTally {\n usage: SubagentUsage;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n startedAt: number;\n endedAt?: number;\n}\n\ninterface ProviderRequestState {\n token: symbol;\n runId: string;\n}\n\nconst FORWARDED_EVENTS = [\n \"run_start\",\n \"run_end\",\n \"message_start\",\n \"message_update\",\n \"entry_added\",\n \"turn_start\",\n \"turn_end\",\n \"tool_start\",\n \"tool_update\",\n \"tool_end\",\n \"retry_scheduled\",\n \"retry_end\",\n \"compaction_start\",\n \"compaction_end\",\n \"usage\",\n \"fault\",\n] as const;\n\nexport class MikanAgentSession {\n readonly sessionStore: SessionStore;\n readonly model: Model<Api>;\n private readonly settings: HarnessSettings;\n private readonly listeners = new Set<HarnessEventListener>();\n private systemPrompt: string;\n private transcript: AgentMessage[] = [];\n private harness: AgentHarness | undefined;\n private lane: AgentLane | undefined;\n private runActive = false;\n private runAborted = false;\n private pendingProviderRequest: ProviderRequestState | undefined;\n private currentProviderRequest: ProviderRequestState | undefined;\n private activeProviderRequest: ProviderRequestState | undefined;\n private operationId: string | undefined;\n private cancellation: Promise<void> | undefined;\n private cancellationError: unknown;\n private deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n private deadlineNotification: Promise<void> | undefined;\n private runBudget: BudgetSettings = {};\n private budgetExceededReason: string | undefined;\n private retryAttempt = 0;\n private latestAssistantNeedsCall = false;\n private latestAssistantErrored = false;\n private runMessages: AgentMessage[] = [];\n private readonly toolArgs = new Map<string, unknown>();\n private tally: RunTally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: 0,\n };\n\n constructor(private readonly options: MikanAgentSessionOptions) {\n this.sessionStore = options.sessionStore;\n this.model = options.model;\n this.systemPrompt = options.systemPrompt;\n this.settings = resolveHarnessSettings(options.settings);\n }\n\n get messages(): AgentMessage[] {\n return this.transcript;\n }\n get isActiveRun(): boolean {\n return this.runActive;\n }\n\n setSystemPrompt(prompt: string): void {\n if (this.runActive) throw new Error(\"Cannot change the system prompt during a run\");\n this.systemPrompt = prompt;\n }\n\n getLastRunStats(): Readonly<{\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n durationMs: number;\n budgetExceededReason?: string;\n }> {\n return {\n usage: copyUsage(this.tally.usage),\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n toolCalls: this.tally.toolCalls,\n toolCallCounts: { ...this.tally.toolCallCounts },\n durationMs:\n this.tally.startedAt > 0 ? (this.tally.endedAt ?? Date.now()) - this.tally.startedAt : 0,\n ...(this.budgetExceededReason ? { budgetExceededReason: this.budgetExceededReason } : {}),\n };\n }\n\n captureExternalUsageSink(): SubagentUsageSink {\n const tally = this.tally;\n return async (usage) => {\n addUsage(tally.usage, usage);\n if (this.tally !== tally || !this.runActive || this.budgetExceededReason) return;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n };\n }\n\n async foldExternalUsage(usage: SubagentUsage): Promise<void> {\n await this.captureExternalUsageSink()(usage);\n }\n\n subscribe(listener: HarnessEventListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n async reloadFromSession(): Promise<number> {\n this.transcript = (await this.sessionStore.buildSessionContext()).messages;\n return this.transcript.length;\n }\n\n async prompt(\n text: string,\n options?: {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n },\n ): Promise<void> {\n await this.run(text, options);\n }\n\n async steer(text: string): Promise<boolean> {\n if (!this.runActive || this.runAborted || !this.lane) return false;\n getOrThrow(await this.lane.steer(text, undefined, TODO_CONTEXT));\n return true;\n }\n\n async resume(options?: { budget?: BudgetSettings; tools?: MikanToolInput[] }): Promise<void> {\n await this.run(undefined, options);\n }\n\n private async run(\n text: string | undefined,\n options?: {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n },\n ): Promise<void> {\n if (this.runActive) throw new Error(\"Agent is already processing a prompt\");\n this.runActive = true;\n this.runAborted = false;\n this.pendingProviderRequest = undefined;\n this.currentProviderRequest = undefined;\n this.activeProviderRequest = undefined;\n this.budgetExceededReason = undefined;\n this.cancellationError = undefined;\n this.retryAttempt = 0;\n this.latestAssistantNeedsCall = false;\n this.latestAssistantErrored = false;\n this.runMessages = [];\n this.runBudget = { ...this.settings.budget, ...options?.budget };\n this.tally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: Date.now(),\n };\n let runFailure: { error: unknown } | undefined;\n try {\n if (!(await this.checkCallBudget())) return;\n this.armDeadline();\n const auth = await this.options.models.getAuth(this.model);\n if (this.runAborted) return;\n if (!auth)\n throw new Error(\n `No credentials for provider \"${this.model.provider}\". Set the provider API key environment variable.`,\n );\n await this.initialize();\n if (this.runAborted) return;\n const harness = this.harness!;\n const lane = this.lane!;\n const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter(\n (tool) =>\n (tool.name !== \"start_task\" || options?.allowTaskHandoff === true) &&\n (tool.name !== \"task_status\" || options?.allowTaskStatus === true),\n );\n await harness.setTools(tools, TODO_CONTEXT);\n await lane.setActiveTools(\n tools.map((tool) => tool.name),\n TODO_CONTEXT,\n );\n await this.reloadFromSession();\n if (!(await this.checkCallBudget())) return;\n await this.driveOperation(lane, text, options?.images);\n } catch (error) {\n runFailure = { error };\n throw error;\n } finally {\n await this.cleanupRun(runFailure);\n }\n }\n\n private async driveOperation(\n lane: AgentLane,\n text: string | undefined,\n images?: ImageContent[],\n ): Promise<void> {\n if (text === undefined) {\n const current = await lane.inspectExecution(TODO_CONTEXT);\n this.operationId = current.current?.id;\n if (this.runAborted) this.requestCancellation();\n const result = getOrThrow(await lane.resume(TODO_CONTEXT));\n if (result.status === \"failed\") throw new Error(result.error?.message ?? \"Pi run failed\");\n return;\n }\n const admission = getOrThrow(\n await lane.accept({ kind: \"prompt\", prompt: text, images }, TODO_CONTEXT),\n );\n this.operationId = admission.operationId;\n if (this.runAborted) this.requestCancellation();\n const result = getOrThrow(\n await lane.drive({ operationId: admission.operationId, waitForRetry: true }, TODO_CONTEXT),\n );\n if (\n result.kind === \"settled\" &&\n result.outcome.status === \"failed\" &&\n !this.latestAssistantErrored\n ) {\n throw new Error(result.outcome.error?.message ?? \"Pi run failed\");\n }\n }\n\n private async cleanupRun(runFailure: { error: unknown } | undefined): Promise<void> {\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n let cleanupFailure: { error: unknown } | undefined;\n try {\n await this.cancellation;\n await this.deadlineNotification;\n if (this.cancellationError) throw this.cancellationError;\n } catch (error) {\n cleanupFailure = { error };\n } finally {\n this.toolArgs.clear();\n this.pendingProviderRequest = undefined;\n this.currentProviderRequest = undefined;\n this.activeProviderRequest = undefined;\n this.operationId = undefined;\n this.cancellation = undefined;\n this.deadlineNotification = undefined;\n this.tally.endedAt = Date.now();\n this.runActive = false;\n }\n if (!cleanupFailure) return;\n if (runFailure) {\n throw new AggregateError(\n [runFailure.error, cleanupFailure.error],\n \"Agent run and cancellation cleanup failed\",\n { cause: runFailure.error },\n );\n }\n throw cleanupFailure.error;\n }\n\n abort(reason = \"cancelled\"): void {\n if (!this.runActive) return;\n const firstAbort = !this.runAborted;\n this.runAborted = true;\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n if (firstAbort && this.activeProviderRequest) {\n log.logInfo(\n `LLM request aborted ${JSON.stringify({\n abort_reason: reason,\n run_id: this.activeProviderRequest.runId,\n })}`,\n );\n }\n this.requestCancellation();\n }\n\n private requestCancellation(): void {\n if (!this.lane || !this.operationId || this.cancellation) return;\n this.cancellation = this.lane\n .requestAbort(this.operationId, TODO_CONTEXT)\n .then((result) => {\n if (!result.ok && !(result.error instanceof OperationMismatch)) throw result.error;\n })\n .catch((error: unknown) => {\n this.cancellationError = error;\n });\n }\n\n private beginProviderRequest(): ProviderRequestState | undefined {\n const request = this.pendingProviderRequest;\n this.pendingProviderRequest = undefined;\n if (request) this.currentProviderRequest = request;\n return request;\n }\n\n private endProviderRequest(request: ProviderRequestState | undefined): void {\n if (!request) return;\n if (this.currentProviderRequest?.token === request.token) {\n this.currentProviderRequest = undefined;\n }\n if (this.activeProviderRequest?.token === request.token) {\n this.activeProviderRequest = undefined;\n }\n }\n\n private withProviderActivation<TOptions extends ProviderRequestOptions>(\n options: TOptions | undefined,\n request: ProviderRequestState | undefined,\n ): TOptions | undefined {\n if (!request) return options;\n const onPayload = options?.onPayload;\n return {\n ...options,\n onPayload: async (payload, model) => {\n const transformed = await onPayload?.(payload, model);\n if (this.currentProviderRequest?.token === request.token) {\n this.activeProviderRequest = request;\n }\n return transformed;\n },\n } as TOptions;\n }\n\n private trackProviderStream(\n start: (request: ProviderRequestState | undefined) => AssistantMessageEventStream,\n ): AssistantMessageEventStream {\n const request = this.beginProviderRequest();\n try {\n const stream = start(request);\n if (request) {\n void stream.result().then(\n () => this.endProviderRequest(request),\n () => this.endProviderRequest(request),\n );\n }\n return stream;\n } catch (error) {\n this.endProviderRequest(request);\n throw error;\n }\n }\n\n private trackProviderPromise<T>(\n start: (request: ProviderRequestState | undefined) => Promise<T>,\n ): Promise<T> {\n const request = this.beginProviderRequest();\n try {\n const promise = start(request);\n if (!request) return promise;\n return promise.then(\n (result) => {\n this.endProviderRequest(request);\n return result;\n },\n (error: unknown) => {\n this.endProviderRequest(request);\n throw error;\n },\n );\n } catch (error) {\n this.endProviderRequest(request);\n throw error;\n }\n }\n\n private trackedModels(models: Models): Models {\n return new Proxy(models, {\n get: (target, property) => {\n if (property === \"streamSimple\") {\n return (...[model, context, options]: Parameters<Models[\"streamSimple\"]>) =>\n this.trackProviderStream((request) =>\n target.streamSimple(model, context, this.withProviderActivation(options, request)),\n );\n }\n if (property === \"completeSimple\") {\n return (...[model, context, options]: Parameters<Models[\"completeSimple\"]>) =>\n this.trackProviderPromise((request) =>\n target.completeSimple(model, context, this.withProviderActivation(options, request)),\n );\n }\n if (property === \"streamDeferred\") {\n return (...[model, handle, options]: Parameters<Models[\"streamDeferred\"]>) =>\n this.trackProviderStream((request) =>\n target.streamDeferred(model, handle, this.withProviderActivation(options, request)),\n );\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n }\n\n private toHarnessTools(tools: MikanToolInput[]): MikanHarnessTool[] {\n return tools.map((tool) => (isHarnessTool(tool) ? tool : adaptAgentTool(tool)));\n }\n\n private async initialize(): Promise<void> {\n if (this.harness) return;\n this.harness = await this.sessionStore.createHarness({\n models: this.trackedModels(this.options.models.models),\n model: this.model,\n thinkingLevel: this.options.thinkingLevel,\n tools: this.toHarnessTools(this.options.tools),\n toolContext: this.options.toolContext,\n systemPrompt: () => this.sessionStore.withMcpInstructions(this.systemPrompt),\n retry: this.settings.retry,\n compaction: this.settings.compaction,\n });\n this.lane = await this.harness.lane(\"main\", TODO_CONTEXT);\n await this.lane.setModel(\n { provider: this.model.provider, modelId: this.model.id },\n TODO_CONTEXT,\n );\n await this.lane.setThinkingLevel(this.options.thinkingLevel, TODO_CONTEXT);\n this.harness.hooks.on(\"before_request\", async (event) => {\n if (!(await this.checkCallBudget())) return undefined;\n this.pendingProviderRequest = { token: Symbol(\"provider-request\"), runId: event.runId };\n this.tally.llmCalls += 1;\n return undefined;\n });\n this.harness.hooks.on(\"before_tool\", () => {\n const assistant = this.transcript.findLast((message) => message.role === \"assistant\");\n const calls =\n assistant?.role === \"assistant\"\n ? assistant.content.filter((part) => part.type === \"toolCall\")\n : [];\n if (calls.length > 1 && calls.some((call) => call.name === \"start_task\")) {\n return {\n block: { reason: \"Call start_task alone, without other tools in the same batch.\" },\n };\n }\n return undefined;\n });\n for (const type of FORWARDED_EVENTS) {\n this.harness.events.on(type, (event) => this.handlePiEvent(event));\n }\n }\n\n private async emit(event: HarnessEvent): Promise<void> {\n for (const listener of this.listeners) {\n try {\n await listener(event);\n } catch (error) {\n log.logWarning(\n \"Harness event listener failed\",\n error instanceof Error ? error.message : String(error),\n );\n }\n }\n }\n\n private async handlePiEvent(event: PiHarnessEvent): Promise<void> {\n if (!this.runActive) return;\n if (\"lane\" in event && event.lane !== undefined && event.lane !== \"main\") return;\n switch (event.type) {\n case \"entry_added\":\n if (event.entry.type !== \"message\") return;\n this.transcript.push(event.entry.message);\n this.runMessages.push(event.entry.message);\n if (event.entry.message.role === \"assistant\") {\n const message = event.entry.message;\n this.latestAssistantErrored = message.stopReason === \"error\";\n this.latestAssistantNeedsCall =\n message.stopReason === \"error\" ||\n message.content.some((part) => part.type === \"toolCall\");\n }\n await this.emit({ type: \"message_end\", message: event.entry.message });\n return;\n case \"message_start\":\n await this.emit({ type: \"message_start\", message: event.message });\n return;\n case \"message_update\":\n await this.emit({\n type: \"message_update\",\n message: event.message,\n assistantMessageEvent: event.event,\n });\n return;\n case \"turn_start\":\n await this.emit({ type: \"turn_start\" });\n return;\n case \"turn_end\":\n await this.emit({\n type: \"turn_end\",\n message: event.message,\n toolResults: event.toolResults,\n });\n return;\n case \"tool_start\":\n case \"tool_update\":\n case \"tool_end\":\n return this.handlePiToolEvent(event);\n case \"usage\":\n return this.recordUsage(event.row.usage);\n case \"run_start\":\n case \"run_end\":\n case \"retry_scheduled\":\n case \"retry_end\":\n case \"compaction_start\":\n case \"compaction_end\":\n return this.handlePiLifecycleEvent(event);\n case \"fault\":\n throw new Error(event.message);\n }\n }\n\n private async recordUsage(usage: SubagentUsage): Promise<void> {\n addUsage(this.tally.usage, usage);\n const reason =\n (this.latestAssistantNeedsCall && this.callOverBudgetReason()) ||\n this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async handlePiToolEvent(\n event: Extract<PiHarnessEvent, { type: \"tool_start\" | \"tool_update\" | \"tool_end\" }>,\n ): Promise<void> {\n switch (event.type) {\n case \"tool_start\":\n this.toolArgs.set(event.toolCallId, event.args);\n this.tally.toolCalls += 1;\n this.tally.toolCallCounts[event.toolName] =\n (this.tally.toolCallCounts[event.toolName] ?? 0) + 1;\n await this.emit({\n type: \"tool_execution_start\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n return;\n case \"tool_update\":\n await this.emit({\n type: \"tool_execution_update\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: this.toolArgs.get(event.toolCallId) ?? {},\n partialResult: event.partialResult,\n });\n return;\n case \"tool_end\":\n this.toolArgs.delete(event.toolCallId);\n await this.emit({\n type: \"tool_execution_end\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n isError: event.isError,\n });\n return;\n }\n }\n\n private async handlePiLifecycleEvent(\n event: Extract<\n PiHarnessEvent,\n {\n type:\n | \"run_start\"\n | \"run_end\"\n | \"retry_scheduled\"\n | \"retry_end\"\n | \"compaction_start\"\n | \"compaction_end\";\n }\n >,\n ): Promise<void> {\n switch (event.type) {\n case \"run_start\":\n this.operationId = event.runId;\n if (this.runAborted) this.requestCancellation();\n await this.emit({ type: \"agent_start\" });\n return;\n case \"retry_scheduled\":\n this.retryAttempt = event.attempt - 1;\n await this.emit({\n type: \"auto_retry_start\",\n attempt: this.retryAttempt,\n maxAttempts: event.maxAttempts - 1,\n delayMs: event.delayMs,\n errorMessage: event.errorMessage,\n });\n return;\n case \"retry_end\":\n this.retryAttempt = 0;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: event.attempt - 1,\n success: event.success,\n finalError: event.finalError,\n });\n return;\n case \"compaction_start\":\n await this.emit({ type: \"compaction_start\", reason: event.reason });\n return;\n case \"compaction_end\": {\n const entry =\n event.status === \"completed\"\n ? await this.sessionStore.getEntry(event.entryId)\n : undefined;\n if (entry?.type === \"compaction\") await this.reloadFromSession();\n await this.emit({\n type: \"compaction_end\",\n reason: event.reason,\n aborted: event.status === \"aborted\",\n ...(event.status === \"failed\" ? { errorMessage: event.error.message } : {}),\n ...(entry?.type === \"compaction\"\n ? {\n result: {\n summary: entry.summary,\n retainedMessages: entry.retainedTail.length,\n tokensBefore: entry.tokensBefore,\n },\n }\n : {}),\n });\n return;\n }\n case \"run_end\":\n if (this.retryAttempt > 0) {\n await this.emit({\n type: \"auto_retry_end\",\n attempt: this.retryAttempt,\n success: false,\n finalError: event.status === \"aborted\" ? \"Retry cancelled\" : event.error?.message,\n });\n this.retryAttempt = 0;\n }\n await this.emit({ type: \"agent_end\", messages: this.runMessages });\n return;\n }\n }\n\n private async exceedBudget(reason: string): Promise<void> {\n if (this.budgetExceededReason) return;\n this.budgetExceededReason = reason;\n this.abort(reason);\n await this.emit({\n type: \"budget_exceeded\",\n reason,\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n durationMs: Date.now() - this.tally.startedAt,\n });\n log.logWarning(\"Run budget exceeded — aborting\", reason);\n }\n\n private async checkCallBudget(): Promise<boolean> {\n if (this.runAborted || this.budgetExceededReason) {\n this.requestCancellation();\n return false;\n }\n const reason = this.callOverBudgetReason() ?? this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n return !this.runAborted && !this.budgetExceededReason;\n }\n\n private callOverBudgetReason(): string | undefined {\n const limit = this.runBudget.maxLlmCalls;\n if (limit !== undefined && this.tally.llmCalls >= limit)\n return `${this.tally.llmCalls} LLM calls >= ${limit} limit`;\n return undefined;\n }\n\n private resourceOverBudgetReason(): string | undefined {\n const { maxTokens, maxCostUsd, maxDurationMs } = this.runBudget;\n if (maxTokens !== undefined && this.tally.usage.totalTokens >= maxTokens)\n return `${this.tally.usage.totalTokens} tokens >= ${maxTokens} limit`;\n if (maxCostUsd !== undefined && this.tally.usage.cost.total >= maxCostUsd)\n return `cost ${this.tally.usage.cost.total.toFixed(2)} USD >= ${maxCostUsd} USD limit`;\n if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs)\n return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;\n return undefined;\n }\n\n private armDeadline(): void {\n const maxDurationMs = this.runBudget.maxDurationMs;\n if (maxDurationMs === undefined || !Number.isFinite(maxDurationMs) || this.runAborted) return;\n const remaining = maxDurationMs - (Date.now() - this.tally.startedAt);\n this.deadlineTimer = setTimeout(\n () => {\n if (Date.now() - this.tally.startedAt < maxDurationMs) {\n this.armDeadline();\n return;\n }\n this.deadlineNotification = this.exceedBudget(\n `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`,\n );\n },\n Math.min(Math.max(0, remaining), 2_147_483_647),\n );\n }\n}\n\nexport type { CompactionSettings };\nexport type { BudgetSettings } from \"./types.js\";\nexport type { HarnessSettings } from \"./types.js\";\nexport type { RetrySettings } from \"./types.js\";\n\nexport const DEFAULT_RETRY_SETTINGS: RetrySettings = {\n enabled: true,\n maxRetries: 3,\n baseDelayMs: 2000,\n};\n\nexport const DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\nexport const DEFAULT_EVENT_BUDGET: BudgetSettings = {\n maxDurationMs: 10 * 60 * 1000,\n maxLlmCalls: 50,\n maxCostUsd: 10,\n};\n\nexport function resolveHarnessSettings(overrides?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n}): HarnessSettings {\n return {\n compaction: { ...DEFAULT_COMPACTION_SETTINGS, ...overrides?.compaction },\n retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },\n budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },\n };\n}\n\nexport function createEmptyUsage(): Usage {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n };\n}\n\nfunction addUsage(total: Usage, usage: Usage): void {\n total.input += usage.input;\n total.output += usage.output;\n total.cacheRead += usage.cacheRead;\n total.cacheWrite += usage.cacheWrite;\n total.totalTokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n total.cost.input += usage.cost.input;\n total.cost.output += usage.cost.output;\n total.cost.cacheRead += usage.cost.cacheRead;\n total.cost.cacheWrite += usage.cost.cacheWrite;\n total.cost.total += usage.cost.total;\n\n if (usage.cacheWrite1h !== undefined) {\n total.cacheWrite1h = (total.cacheWrite1h ?? 0) + usage.cacheWrite1h;\n }\n if (usage.reasoning !== undefined) {\n total.reasoning = (total.reasoning ?? 0) + usage.reasoning;\n }\n}\n\nexport function copyUsage(usage: Usage): Usage {\n return { ...usage, cost: { ...usage.cost } };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TODO_CONTEXT,\n OperationMismatch,\n getOrThrow,\n type AgentHarness,\n type AgentLane,\n type AgentMessage,\n type HarnessEvent as PiHarnessEvent,\n DEFAULT_COMPACTION_SETTINGS,\n type CompactionSettings,\n} from \"@earendil-works/pi-agent-core\";\nimport type {\n Api,\n AssistantMessageEventStream,\n ImageContent,\n Model,\n Models,\n ProviderRequestOptions,\n Usage,\n} from \"@earendil-works/pi-ai\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type {\n BudgetSettings,\n HarnessEvent,\n HarnessEventListener,\n HarnessSettings,\n MikanAgentSessionOptions,\n MikanHarnessTool,\n MikanToolInput,\n SubagentUsage,\n SubagentUsageSink,\n RetrySettings,\n} from \"./types.js\";\n\nimport * as log from \"../log.js\";\nimport { adaptAgentTool, isHarnessTool } from \"./tools/pi-tools.js\";\nimport { START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\ninterface RunTally {\n usage: SubagentUsage;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n startedAt: number;\n endedAt?: number;\n}\n\ninterface ProviderRequestState {\n token: symbol;\n runId: string;\n}\n\nconst FORWARDED_EVENTS = [\n \"run_start\",\n \"run_end\",\n \"message_start\",\n \"message_update\",\n \"entry_added\",\n \"turn_start\",\n \"turn_end\",\n \"tool_start\",\n \"tool_update\",\n \"tool_end\",\n \"retry_scheduled\",\n \"retry_end\",\n \"compaction_start\",\n \"compaction_end\",\n \"usage\",\n \"fault\",\n] as const;\n\nexport class MikanAgentSession {\n readonly sessionStore: SessionStore;\n readonly model: Model<Api>;\n private readonly settings: HarnessSettings;\n private readonly listeners = new Set<HarnessEventListener>();\n private systemPrompt: string;\n private transcript: AgentMessage[] = [];\n private harness: AgentHarness | undefined;\n private lane: AgentLane | undefined;\n private runActive = false;\n private runAborted = false;\n private pendingProviderRequest: ProviderRequestState | undefined;\n private currentProviderRequest: ProviderRequestState | undefined;\n private activeProviderRequest: ProviderRequestState | undefined;\n private operationId: string | undefined;\n private cancellation: Promise<void> | undefined;\n private cancellationError: unknown;\n private deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n private deadlineNotification: Promise<void> | undefined;\n private runBudget: BudgetSettings = {};\n private budgetExceededReason: string | undefined;\n private retryAttempt = 0;\n private latestAssistantNeedsCall = false;\n private latestAssistantErrored = false;\n private runMessages: AgentMessage[] = [];\n private readonly toolArgs = new Map<string, unknown>();\n private tally: RunTally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: 0,\n };\n\n constructor(private readonly options: MikanAgentSessionOptions) {\n this.sessionStore = options.sessionStore;\n this.model = options.model;\n this.systemPrompt = options.systemPrompt;\n this.settings = resolveHarnessSettings(options.settings);\n }\n\n get messages(): AgentMessage[] {\n return this.transcript;\n }\n get isActiveRun(): boolean {\n return this.runActive;\n }\n\n setSystemPrompt(prompt: string): void {\n if (this.runActive) throw new Error(\"Cannot change the system prompt during a run\");\n this.systemPrompt = prompt;\n }\n\n getLastRunStats(): Readonly<{\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n durationMs: number;\n budgetExceededReason?: string;\n }> {\n return {\n usage: copyUsage(this.tally.usage),\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n toolCalls: this.tally.toolCalls,\n toolCallCounts: { ...this.tally.toolCallCounts },\n durationMs:\n this.tally.startedAt > 0 ? (this.tally.endedAt ?? Date.now()) - this.tally.startedAt : 0,\n budgetExceededReason: this.budgetExceededReason || undefined,\n };\n }\n\n captureExternalUsageSink(): SubagentUsageSink {\n const tally = this.tally;\n return async (usage) => {\n addUsage(tally.usage, usage);\n if (this.tally !== tally || !this.runActive || this.budgetExceededReason) return;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n };\n }\n\n async foldExternalUsage(usage: SubagentUsage): Promise<void> {\n await this.captureExternalUsageSink()(usage);\n }\n\n subscribe(listener: HarnessEventListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n async reloadFromSession(): Promise<number> {\n this.transcript = (await this.sessionStore.buildSessionContext()).messages;\n return this.transcript.length;\n }\n\n async prompt(\n text: string,\n options?: {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n },\n ): Promise<void> {\n await this.run(text, options);\n }\n\n async steer(text: string): Promise<boolean> {\n if (!this.runActive || this.runAborted || !this.lane) return false;\n getOrThrow(await this.lane.steer(text, undefined, TODO_CONTEXT));\n return true;\n }\n\n async resume(options?: { budget?: BudgetSettings; tools?: MikanToolInput[] }): Promise<void> {\n await this.run(undefined, options);\n }\n\n private async run(\n text: string | undefined,\n options?: {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n },\n ): Promise<void> {\n if (this.runActive) throw new Error(\"Agent is already processing a prompt\");\n this.runActive = true;\n this.runAborted = false;\n this.pendingProviderRequest = undefined;\n this.currentProviderRequest = undefined;\n this.activeProviderRequest = undefined;\n this.budgetExceededReason = undefined;\n this.cancellationError = undefined;\n this.retryAttempt = 0;\n this.latestAssistantNeedsCall = false;\n this.latestAssistantErrored = false;\n this.runMessages = [];\n this.runBudget = { ...this.settings.budget, ...options?.budget };\n this.tally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: Date.now(),\n };\n let runFailure: { error: unknown } | undefined;\n try {\n if (!(await this.checkCallBudget())) return;\n this.armDeadline();\n const auth = await this.options.models.getAuth(this.model);\n if (this.runAborted) return;\n if (!auth)\n throw new Error(\n `No credentials for provider \"${this.model.provider}\". Set the provider API key environment variable.`,\n );\n await this.initialize();\n if (this.runAborted) return;\n const harness = this.harness!;\n const lane = this.lane!;\n const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter(\n (tool) =>\n (tool.name !== START_TASK_TOOL || options?.allowTaskHandoff === true) &&\n (tool.name !== TASK_STATUS_TOOL || options?.allowTaskStatus === true),\n );\n await harness.setTools(tools, TODO_CONTEXT);\n await lane.setActiveTools(\n tools.map((tool) => tool.name),\n TODO_CONTEXT,\n );\n await this.reloadFromSession();\n if (!(await this.checkCallBudget())) return;\n await this.driveOperation(lane, text, options?.images);\n } catch (error) {\n runFailure = { error };\n throw error;\n } finally {\n await this.cleanupRun(runFailure);\n }\n }\n\n private async driveOperation(\n lane: AgentLane,\n text: string | undefined,\n images?: ImageContent[],\n ): Promise<void> {\n if (text === undefined) {\n const current = await lane.inspectExecution(TODO_CONTEXT);\n this.operationId = current.current?.id;\n if (this.runAborted) this.requestCancellation();\n const result = getOrThrow(await lane.resume(TODO_CONTEXT));\n if (result.status === \"failed\") throw new Error(result.error?.message ?? \"Pi run failed\");\n return;\n }\n const admission = getOrThrow(\n await lane.accept({ kind: \"prompt\", prompt: text, images }, TODO_CONTEXT),\n );\n this.operationId = admission.operationId;\n if (this.runAborted) this.requestCancellation();\n const result = getOrThrow(\n await lane.drive({ operationId: admission.operationId, waitForRetry: true }, TODO_CONTEXT),\n );\n if (\n result.kind === \"settled\" &&\n result.outcome.status === \"failed\" &&\n !this.latestAssistantErrored\n ) {\n throw new Error(result.outcome.error?.message ?? \"Pi run failed\");\n }\n }\n\n private async cleanupRun(runFailure: { error: unknown } | undefined): Promise<void> {\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n let cleanupFailure: { error: unknown } | undefined;\n try {\n await this.cancellation;\n await this.deadlineNotification;\n if (this.cancellationError) throw this.cancellationError;\n } catch (error) {\n cleanupFailure = { error };\n } finally {\n this.toolArgs.clear();\n this.pendingProviderRequest = undefined;\n this.currentProviderRequest = undefined;\n this.activeProviderRequest = undefined;\n this.operationId = undefined;\n this.cancellation = undefined;\n this.deadlineNotification = undefined;\n this.tally.endedAt = Date.now();\n this.runActive = false;\n }\n if (!cleanupFailure) return;\n if (runFailure) {\n throw new AggregateError(\n [runFailure.error, cleanupFailure.error],\n \"Agent run and cancellation cleanup failed\",\n { cause: runFailure.error },\n );\n }\n throw cleanupFailure.error;\n }\n\n abort(reason = \"cancelled\"): void {\n if (!this.runActive) return;\n const firstAbort = !this.runAborted;\n this.runAborted = true;\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n if (firstAbort && this.activeProviderRequest) {\n log.logInfo(\n `LLM request aborted ${JSON.stringify({\n abort_reason: reason,\n run_id: this.activeProviderRequest.runId,\n })}`,\n );\n }\n this.requestCancellation();\n }\n\n private requestCancellation(): void {\n if (!this.lane || !this.operationId || this.cancellation) return;\n this.cancellation = this.lane\n .requestAbort(this.operationId, TODO_CONTEXT)\n .then((result) => {\n if (!result.ok && !(result.error instanceof OperationMismatch)) throw result.error;\n })\n .catch((error: unknown) => {\n this.cancellationError = error;\n });\n }\n\n private beginProviderRequest(): ProviderRequestState | undefined {\n const request = this.pendingProviderRequest;\n this.pendingProviderRequest = undefined;\n if (request) this.currentProviderRequest = request;\n return request;\n }\n\n private endProviderRequest(request: ProviderRequestState | undefined): void {\n if (!request) return;\n if (this.currentProviderRequest?.token === request.token) {\n this.currentProviderRequest = undefined;\n }\n if (this.activeProviderRequest?.token === request.token) {\n this.activeProviderRequest = undefined;\n }\n }\n\n private withProviderActivation<TOptions extends ProviderRequestOptions>(\n options: TOptions | undefined,\n request: ProviderRequestState | undefined,\n ): TOptions | undefined {\n if (!request) return options;\n const onPayload = options?.onPayload;\n return {\n ...options,\n onPayload: async (payload, model) => {\n const transformed = await onPayload?.(payload, model);\n if (this.currentProviderRequest?.token === request.token) {\n this.activeProviderRequest = request;\n }\n return transformed;\n },\n } as TOptions;\n }\n\n private trackProviderStream(\n start: (request: ProviderRequestState | undefined) => AssistantMessageEventStream,\n ): AssistantMessageEventStream {\n const request = this.beginProviderRequest();\n try {\n const stream = start(request);\n if (request) {\n void stream.result().then(\n () => this.endProviderRequest(request),\n () => this.endProviderRequest(request),\n );\n }\n return stream;\n } catch (error) {\n this.endProviderRequest(request);\n throw error;\n }\n }\n\n private trackProviderPromise<T>(\n start: (request: ProviderRequestState | undefined) => Promise<T>,\n ): Promise<T> {\n const request = this.beginProviderRequest();\n try {\n const promise = start(request);\n if (!request) return promise;\n return promise.then(\n (result) => {\n this.endProviderRequest(request);\n return result;\n },\n (error: unknown) => {\n this.endProviderRequest(request);\n throw error;\n },\n );\n } catch (error) {\n this.endProviderRequest(request);\n throw error;\n }\n }\n\n private trackedModels(models: Models): Models {\n return new Proxy(models, {\n get: (target, property) => {\n if (property === \"streamSimple\") {\n return (...[model, context, options]: Parameters<Models[\"streamSimple\"]>) =>\n this.trackProviderStream((request) =>\n target.streamSimple(model, context, this.withProviderActivation(options, request)),\n );\n }\n if (property === \"completeSimple\") {\n return (...[model, context, options]: Parameters<Models[\"completeSimple\"]>) =>\n this.trackProviderPromise((request) =>\n target.completeSimple(model, context, this.withProviderActivation(options, request)),\n );\n }\n if (property === \"streamDeferred\") {\n return (...[model, handle, options]: Parameters<Models[\"streamDeferred\"]>) =>\n this.trackProviderStream((request) =>\n target.streamDeferred(model, handle, this.withProviderActivation(options, request)),\n );\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n }\n\n private toHarnessTools(tools: MikanToolInput[]): MikanHarnessTool[] {\n return tools.map((tool) => (isHarnessTool(tool) ? tool : adaptAgentTool(tool)));\n }\n\n private async initialize(): Promise<void> {\n if (this.harness) return;\n this.harness = await this.sessionStore.createHarness({\n models: this.trackedModels(this.options.models.models),\n model: this.model,\n thinkingLevel: this.options.thinkingLevel,\n tools: this.toHarnessTools(this.options.tools),\n toolContext: this.options.toolContext,\n systemPrompt: () => this.sessionStore.withMcpInstructions(this.systemPrompt),\n retry: this.settings.retry,\n compaction: this.settings.compaction,\n });\n this.lane = await this.harness.lane(\"main\", TODO_CONTEXT);\n await this.lane.setModel(\n { provider: this.model.provider, modelId: this.model.id },\n TODO_CONTEXT,\n );\n await this.lane.setThinkingLevel(this.options.thinkingLevel, TODO_CONTEXT);\n this.harness.hooks.on(\"before_request\", async (event) => {\n if (!(await this.checkCallBudget())) return undefined;\n this.pendingProviderRequest = { token: Symbol(\"provider-request\"), runId: event.runId };\n this.tally.llmCalls += 1;\n return undefined;\n });\n this.harness.hooks.on(\"before_tool\", () => {\n const assistant = this.transcript.findLast((message) => message.role === \"assistant\");\n const calls =\n assistant?.role === \"assistant\"\n ? assistant.content.filter((part) => part.type === \"toolCall\")\n : [];\n if (calls.length > 1 && calls.some((call) => call.name === START_TASK_TOOL)) {\n return {\n block: {\n reason: `Call ${START_TASK_TOOL} alone, without other tools in the same batch.`,\n },\n };\n }\n return undefined;\n });\n for (const type of FORWARDED_EVENTS) {\n this.harness.events.on(type, (event) => this.handlePiEvent(event));\n }\n }\n\n private async emit(event: HarnessEvent): Promise<void> {\n for (const listener of this.listeners) {\n try {\n await listener(event);\n } catch (error) {\n log.logWarning(\"Harness event listener failed\", errorMessage(error));\n }\n }\n }\n\n private async handlePiEvent(event: PiHarnessEvent): Promise<void> {\n if (!this.runActive) return;\n if (\"lane\" in event && event.lane !== undefined && event.lane !== \"main\") return;\n switch (event.type) {\n case \"entry_added\":\n if (event.entry.type !== \"message\") return;\n this.transcript.push(event.entry.message);\n this.runMessages.push(event.entry.message);\n if (event.entry.message.role === \"assistant\") {\n const message = event.entry.message;\n this.latestAssistantErrored = message.stopReason === \"error\";\n this.latestAssistantNeedsCall =\n message.stopReason === \"error\" ||\n message.content.some((part) => part.type === \"toolCall\");\n }\n await this.emit({ type: \"message_end\", message: event.entry.message });\n return;\n case \"message_start\":\n await this.emit({ type: \"message_start\", message: event.message });\n return;\n case \"message_update\":\n await this.emit({\n type: \"message_update\",\n message: event.message,\n assistantMessageEvent: event.event,\n });\n return;\n case \"turn_start\":\n await this.emit({ type: \"turn_start\" });\n return;\n case \"turn_end\":\n await this.emit({\n type: \"turn_end\",\n message: event.message,\n toolResults: event.toolResults,\n });\n return;\n case \"tool_start\":\n case \"tool_update\":\n case \"tool_end\":\n return this.handlePiToolEvent(event);\n case \"usage\":\n return this.recordUsage(event.row.usage);\n case \"run_start\":\n case \"run_end\":\n case \"retry_scheduled\":\n case \"retry_end\":\n case \"compaction_start\":\n case \"compaction_end\":\n return this.handlePiLifecycleEvent(event);\n case \"fault\":\n throw new Error(event.message);\n }\n }\n\n private async recordUsage(usage: SubagentUsage): Promise<void> {\n addUsage(this.tally.usage, usage);\n const reason =\n (this.latestAssistantNeedsCall && this.callOverBudgetReason()) ||\n this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async handlePiToolEvent(\n event: Extract<PiHarnessEvent, { type: \"tool_start\" | \"tool_update\" | \"tool_end\" }>,\n ): Promise<void> {\n switch (event.type) {\n case \"tool_start\":\n this.toolArgs.set(event.toolCallId, event.args);\n this.tally.toolCalls += 1;\n this.tally.toolCallCounts[event.toolName] =\n (this.tally.toolCallCounts[event.toolName] ?? 0) + 1;\n await this.emit({\n type: \"tool_execution_start\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n return;\n case \"tool_update\":\n await this.emit({\n type: \"tool_execution_update\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: this.toolArgs.get(event.toolCallId) ?? {},\n partialResult: event.partialResult,\n });\n return;\n case \"tool_end\":\n this.toolArgs.delete(event.toolCallId);\n await this.emit({\n type: \"tool_execution_end\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n isError: event.isError,\n });\n return;\n }\n }\n\n private async handlePiLifecycleEvent(\n event: Extract<\n PiHarnessEvent,\n {\n type:\n | \"run_start\"\n | \"run_end\"\n | \"retry_scheduled\"\n | \"retry_end\"\n | \"compaction_start\"\n | \"compaction_end\";\n }\n >,\n ): Promise<void> {\n switch (event.type) {\n case \"run_start\":\n this.operationId = event.runId;\n if (this.runAborted) this.requestCancellation();\n await this.emit({ type: \"agent_start\" });\n return;\n case \"retry_scheduled\":\n this.retryAttempt = event.attempt - 1;\n await this.emit({\n type: \"auto_retry_start\",\n attempt: this.retryAttempt,\n maxAttempts: event.maxAttempts - 1,\n delayMs: event.delayMs,\n errorMessage: event.errorMessage,\n });\n return;\n case \"retry_end\":\n this.retryAttempt = 0;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: event.attempt - 1,\n success: event.success,\n finalError: event.finalError,\n });\n return;\n case \"compaction_start\":\n await this.emit({ type: \"compaction_start\", reason: event.reason });\n return;\n case \"compaction_end\": {\n const entry =\n event.status === \"completed\"\n ? await this.sessionStore.getEntry(event.entryId)\n : undefined;\n if (entry?.type === \"compaction\") await this.reloadFromSession();\n await this.emit({\n type: \"compaction_end\",\n reason: event.reason,\n aborted: event.status === \"aborted\",\n errorMessage: event.status === \"failed\" ? event.error.message : undefined,\n result:\n entry?.type === \"compaction\"\n ? {\n summary: entry.summary,\n retainedMessages: entry.retainedTail.length,\n tokensBefore: entry.tokensBefore,\n }\n : undefined,\n });\n return;\n }\n case \"run_end\":\n if (this.retryAttempt > 0) {\n await this.emit({\n type: \"auto_retry_end\",\n attempt: this.retryAttempt,\n success: false,\n finalError: event.status === \"aborted\" ? \"Retry cancelled\" : event.error?.message,\n });\n this.retryAttempt = 0;\n }\n await this.emit({ type: \"agent_end\", messages: this.runMessages });\n return;\n }\n }\n\n private async exceedBudget(reason: string): Promise<void> {\n if (this.budgetExceededReason) return;\n this.budgetExceededReason = reason;\n this.abort(reason);\n await this.emit({\n type: \"budget_exceeded\",\n reason,\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n durationMs: Date.now() - this.tally.startedAt,\n });\n log.logWarning(\"Run budget exceeded — aborting\", reason);\n }\n\n private async checkCallBudget(): Promise<boolean> {\n if (this.runAborted || this.budgetExceededReason) {\n this.requestCancellation();\n return false;\n }\n const reason = this.callOverBudgetReason() ?? this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n return !this.runAborted && !this.budgetExceededReason;\n }\n\n private callOverBudgetReason(): string | undefined {\n const limit = this.runBudget.maxLlmCalls;\n if (limit !== undefined && this.tally.llmCalls >= limit)\n return `${this.tally.llmCalls} LLM calls >= ${limit} limit`;\n return undefined;\n }\n\n private resourceOverBudgetReason(): string | undefined {\n const { maxTokens, maxCostUsd, maxDurationMs } = this.runBudget;\n if (maxTokens !== undefined && this.tally.usage.totalTokens >= maxTokens)\n return `${this.tally.usage.totalTokens} tokens >= ${maxTokens} limit`;\n if (maxCostUsd !== undefined && this.tally.usage.cost.total >= maxCostUsd)\n return `cost ${this.tally.usage.cost.total.toFixed(2)} USD >= ${maxCostUsd} USD limit`;\n if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs)\n return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;\n return undefined;\n }\n\n private armDeadline(): void {\n const maxDurationMs = this.runBudget.maxDurationMs;\n if (maxDurationMs === undefined || !Number.isFinite(maxDurationMs) || this.runAborted) return;\n const remaining = maxDurationMs - (Date.now() - this.tally.startedAt);\n this.deadlineTimer = setTimeout(\n () => {\n if (Date.now() - this.tally.startedAt < maxDurationMs) {\n this.armDeadline();\n return;\n }\n this.deadlineNotification = this.exceedBudget(\n `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`,\n );\n },\n Math.min(Math.max(0, remaining), 2_147_483_647),\n );\n }\n}\n\nexport type { CompactionSettings };\n\nexport const DEFAULT_RETRY_SETTINGS: RetrySettings = {\n enabled: true,\n maxRetries: 3,\n baseDelayMs: 2000,\n};\n\nexport const DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\nexport const DEFAULT_EVENT_BUDGET: BudgetSettings = {\n maxDurationMs: 10 * 60 * 1000,\n maxLlmCalls: 50,\n maxCostUsd: 10,\n};\n\nexport function resolveHarnessSettings(overrides?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n}): HarnessSettings {\n return {\n compaction: { ...DEFAULT_COMPACTION_SETTINGS, ...overrides?.compaction },\n retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },\n budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },\n };\n}\n\nexport function createEmptyUsage(): Usage {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n };\n}\n\nfunction addUsage(total: Usage, usage: Usage): void {\n total.input += usage.input;\n total.output += usage.output;\n total.cacheRead += usage.cacheRead;\n total.cacheWrite += usage.cacheWrite;\n total.totalTokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n total.cost.input += usage.cost.input;\n total.cost.output += usage.cost.output;\n total.cost.cacheRead += usage.cost.cacheRead;\n total.cost.cacheWrite += usage.cost.cacheWrite;\n total.cost.total += usage.cost.total;\n\n if (usage.cacheWrite1h !== undefined) {\n total.cacheWrite1h = (total.cacheWrite1h ?? 0) + usage.cacheWrite1h;\n }\n if (usage.reasoning !== undefined) {\n total.reasoning = (total.reasoning ?? 0) + usage.reasoning;\n }\n}\n\nexport function copyUsage(usage: Usage): Usage {\n return { ...usage, cost: { ...usage.cost } };\n}\n"]}
|
package/dist/harness/skills.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import type { Office } from "../office/index.js";
|
|
2
1
|
import type { MikanSkill, LoadSkillsResult } from "./types.js";
|
|
3
|
-
import type { WorkspaceProjection } from "../office/types.js";
|
|
2
|
+
import type { WorkspaceProjection, Office } from "../office/types.js";
|
|
4
3
|
export declare function loadMikanSkills(office: Office, workspacePath: string, projection: WorkspaceProjection): {
|
|
5
4
|
skills: MikanSkill[];
|
|
6
5
|
skippedSkillLinks: string[];
|
|
7
6
|
};
|
|
8
|
-
export type { LoadSkillsResult } from "./types.js";
|
|
9
|
-
export type { MikanSkill } from "./types.js";
|
|
10
|
-
export type { SkillDiagnostic } from "./types.js";
|
|
11
7
|
interface Frontmatter {
|
|
12
8
|
values: Record<string, string>;
|
|
13
9
|
body: string;
|
|
@@ -20,4 +16,5 @@ export declare function loadSkillsFromDir(options: {
|
|
|
20
16
|
rejectSymlinks?: boolean;
|
|
21
17
|
}): LoadSkillsResult;
|
|
22
18
|
export declare function formatSkillsForPrompt(skills: MikanSkill[]): string;
|
|
19
|
+
export {};
|
|
23
20
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/harness/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/harness/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+BtE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,mBAAmB,GAC9B;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBvD;AAMD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAoB7D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBzE;AA2CD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,gBAAgB,CAgBnB;AAoGD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAwBlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/harness/skills.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAEjC,SAAS,SAAS,CAChB,QAAiC,EACjC,MAAoB,EACpB,WAAqC;IAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAA8B,EAC9B,aAAuC;IAEvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QAC5C,GAAG,CAAC,UAAU,CAAC,6CAA6C,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,aAAqB,EACrB,UAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAChD,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAU,EAAE,CACjD,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACpC,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC1D,CAAC,CAAC,QAAQ,CAAC;IAEf,MAAM,kBAAkB,GAAG,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC;IACpE,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;QAC3C,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC,qBAAqB;QACnD,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7F,SAAS,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE9D,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAKD,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAOpC,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,SAAS;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAAmB;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,gBAAgB,eAAe,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,IACE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,uBAAuB,sBAAsB,gBAAgB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,MAAc;IACzD,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAE7C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1F,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO;YACL,MAAM,EAAE;gBACN;oBACE,IAAI;oBACJ,WAAW;oBACX,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;oBACpB,QAAQ;oBACR,OAAO,EAAE,QAAQ;oBACjB,MAAM;oBACN,sBAAsB,EAAE,MAAM,CAAC,0BAA0B,CAAC,KAAK,MAAM;iBACtE;aACF;YACD,WAAW;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;YAC9E,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAIjC;IACC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC;IACvD,IAAI,cAAc,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,MAAM,EAAE,EAAE;YACV,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,wCAAwC;oBACjD,IAAI,EAAE,OAAO,CAAC,GAAG;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO,yBAAyB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mCAAmC;QAC5C,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,GAAW,EACX,MAAc,EACd,gBAAyB,EACzB,cAAuB;IAEvB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAErD,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/F,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,cAAc,IAAI,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;YAAE,SAAS;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3F,SAAS;QACX,IAAI,cAAc,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC7C,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC;YACpE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CACjB,GAAW,EACX,KAAqE;IAErE,IAAI,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,GAAW,EACX,KAA0E;IAE1E,IAAI,KAAK,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG;QACZ,+EAA+E;QAC/E,iFAAiF;QACjF,8KAA8K;QAC9K,EAAE;QACF,oBAAoB;KACrB,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["import type { Office } from \"../office/index.js\";\nimport type { MikanSkill, SkillDiagnostic, LoadSkillsResult } from \"./types.js\";\nimport type { WorkspaceProjection } from \"../office/types.js\";\nimport { existsSync, lstatSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport * as log from \"../log.js\";\n\nfunction addSkills(\n skillMap: Map<string, MikanSkill>,\n skills: MikanSkill[],\n rewritePath: (path: string) => string,\n): void {\n for (const skill of skills) {\n skill.filePath = rewritePath(skill.filePath);\n skill.baseDir = rewritePath(skill.baseDir);\n skillMap.set(skill.name, skill);\n }\n}\n\nfunction skippedSymlinkPaths(\n diagnostics: SkillDiagnostic[],\n translatePath: (path: string) => string,\n): string[] {\n const skipped: string[] = [];\n for (const diagnostic of diagnostics) {\n if (diagnostic.code !== \"symlink\") continue;\n log.logWarning(\"Skipping conversation skill entry (symlink)\", diagnostic.path);\n skipped.push(translatePath(diagnostic.path));\n }\n return skipped;\n}\n\nexport function loadMikanSkills(\n office: Office,\n workspacePath: string,\n projection: WorkspaceProjection,\n): { skills: MikanSkill[]; skippedSkillLinks: string[] } {\n const skillMap = new Map<string, MikanSkill>();\n\n const hostWorkspacePath = office.workspace.root;\n const translatePath = (hostPath: string): string =>\n hostPath.startsWith(hostWorkspacePath)\n ? workspacePath + hostPath.slice(hostWorkspacePath.length)\n : hostPath;\n\n const workspaceSkillsDir = projection.promptSources.globalSkillsDir;\n if (workspaceSkillsDir) {\n const loaded = loadSkillsFromDir({ dir: workspaceSkillsDir, source: \"workspace\" });\n addSkills(skillMap, loaded.skills, translatePath);\n }\n\n const conversationSkills = loadSkillsFromDir({\n dir: projection.promptSources.conversationSkillsDir,\n source: \"channel\",\n rejectSymlinks: true,\n });\n const skippedSkillLinks = skippedSymlinkPaths(conversationSkills.diagnostics, translatePath);\n addSkills(skillMap, conversationSkills.skills, translatePath);\n\n return { skills: Array.from(skillMap.values()), skippedSkillLinks };\n}\nexport type { LoadSkillsResult } from \"./types.js\";\nexport type { MikanSkill } from \"./types.js\";\nexport type { SkillDiagnostic } from \"./types.js\";\n\nconst MAX_NAME_LENGTH = 64;\n\nconst MAX_DESCRIPTION_LENGTH = 1024;\n\ninterface Frontmatter {\n values: Record<string, string>;\n body: string;\n}\n\nexport function parseFrontmatter(content: string): Frontmatter {\n const match = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/);\n if (!match) return { values: {}, body: content };\n\n const values: Record<string, string> = {};\n for (const line of (match[1] ?? \"\").split(/\\r?\\n/)) {\n const separator = line.indexOf(\":\");\n if (separator === -1) continue;\n const key = line.slice(0, separator).trim();\n if (!key) continue;\n let value = line.slice(separator + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n values[key] = value;\n }\n return { values, body: content.slice(match[0].length) };\n}\n\nexport function validateSkill(name: string, description: string): string[] {\n const errors: string[] = [];\n if (name.length > MAX_NAME_LENGTH) {\n errors.push(`name exceeds ${MAX_NAME_LENGTH} characters (${name.length})`);\n }\n if (\n !/^[a-z0-9-]+$/.test(name) ||\n name.startsWith(\"-\") ||\n name.endsWith(\"-\") ||\n name.includes(\"--\")\n ) {\n errors.push(\"name must be lowercase a-z, 0-9 and single hyphens, not at the edges\");\n }\n if (description.length > MAX_DESCRIPTION_LENGTH) {\n errors.push(`description exceeds ${MAX_DESCRIPTION_LENGTH} characters (${description.length})`);\n }\n return errors;\n}\n\nfunction loadSkillFromFile(filePath: string, source: string): LoadSkillsResult {\n const diagnostics: SkillDiagnostic[] = [];\n try {\n const raw = readFileSync(filePath, \"utf-8\");\n const { values, body } = parseFrontmatter(raw);\n const skillDir = dirname(filePath);\n const name = values.name || basename(skillDir);\n const description = values.description ?? \"\";\n\n if (!description.trim()) {\n diagnostics.push({ type: \"warning\", message: \"description is required\", path: filePath });\n return { skills: [], diagnostics };\n }\n for (const error of validateSkill(name, description)) {\n diagnostics.push({ type: \"warning\", message: error, path: filePath });\n }\n\n return {\n skills: [\n {\n name,\n description,\n content: body.trim(),\n filePath,\n baseDir: skillDir,\n source,\n disableModelInvocation: values[\"disable-model-invocation\"] === \"true\",\n },\n ],\n diagnostics,\n };\n } catch (error) {\n diagnostics.push({\n type: \"warning\",\n message: error instanceof Error ? error.message : \"failed to parse skill file\",\n path: filePath,\n });\n return { skills: [], diagnostics };\n }\n}\n\nexport function loadSkillsFromDir(options: {\n dir: string;\n source: string;\n rejectSymlinks?: boolean;\n}): LoadSkillsResult {\n const rejectSymlinks = options.rejectSymlinks === true;\n if (rejectSymlinks && isSymlink(options.dir)) {\n return {\n skills: [],\n diagnostics: [\n {\n type: \"warning\",\n code: \"symlink\",\n message: \"Skills directory is a symlink; skipped\",\n path: options.dir,\n },\n ],\n };\n }\n return loadSkillsFromDirInternal(options.dir, options.source, true, rejectSymlinks);\n}\n\nfunction isSymlink(path: string): boolean {\n try {\n return lstatSync(path).isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nfunction symlinkDiagnostic(path: string): SkillDiagnostic {\n return {\n type: \"warning\",\n code: \"symlink\",\n message: \"Skill entry is a symlink; skipped\",\n path,\n };\n}\n\nfunction loadSkillsFromDirInternal(\n dir: string,\n source: string,\n includeRootFiles: boolean,\n rejectSymlinks: boolean,\n): LoadSkillsResult {\n const skills: MikanSkill[] = [];\n const diagnostics: SkillDiagnostic[] = [];\n if (!existsSync(dir)) return { skills, diagnostics };\n\n let entries;\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return { skills, diagnostics };\n }\n\n const skillFile = entries.find((entry) => entry.name === \"SKILL.md\" && isFileLike(dir, entry));\n if (skillFile) {\n if (rejectSymlinks && skillFile.isSymbolicLink()) {\n diagnostics.push(symlinkDiagnostic(join(dir, skillFile.name)));\n return { skills, diagnostics };\n }\n return loadSkillFromFile(join(dir, skillFile.name), source);\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const fullPath = join(dir, entry.name);\n\n const directory = isDirectoryLike(dir, entry);\n if (!directory && !(includeRootFiles && entry.name.endsWith(\".md\") && isFileLike(dir, entry)))\n continue;\n if (rejectSymlinks && entry.isSymbolicLink()) {\n diagnostics.push(symlinkDiagnostic(fullPath));\n continue;\n }\n const result = directory\n ? loadSkillsFromDirInternal(fullPath, source, false, rejectSymlinks)\n : loadSkillFromFile(fullPath, source);\n skills.push(...result.skills);\n diagnostics.push(...result.diagnostics);\n }\n return { skills, diagnostics };\n}\n\nfunction isFileLike(\n dir: string,\n entry: { name: string; isFile(): boolean; isSymbolicLink(): boolean },\n): boolean {\n if (entry.isFile()) return true;\n if (!entry.isSymbolicLink()) return false;\n try {\n return statSync(join(dir, entry.name)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction isDirectoryLike(\n dir: string,\n entry: { name: string; isDirectory(): boolean; isSymbolicLink(): boolean },\n): boolean {\n if (entry.isDirectory()) return true;\n if (!entry.isSymbolicLink()) return false;\n try {\n return statSync(join(dir, entry.name)).isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function formatSkillsForPrompt(skills: MikanSkill[]): string {\n const visible = skills.filter((skill) => !skill.disableModelInvocation);\n if (visible.length === 0) return \"\";\n\n const lines = [\n \"\\n\\nThe following skills provide specialized instructions for specific tasks.\",\n \"Use the read tool to load a skill's file when the task matches its description.\",\n \"When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\",\n \"\",\n \"<available_skills>\",\n ];\n for (const skill of visible) {\n lines.push(\" <skill>\");\n lines.push(` <name>${escapeXml(skill.name)}</name>`);\n lines.push(` <description>${escapeXml(skill.description)}</description>`);\n if (skill.inline) {\n lines.push(` <instructions>${escapeXml(skill.content)}</instructions>`);\n } else {\n lines.push(` <location>${escapeXml(skill.filePath)}</location>`);\n }\n lines.push(\" </skill>\");\n }\n lines.push(\"</available_skills>\");\n return lines.join(\"\\n\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/harness/skills.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MikanSkill, SkillDiagnostic, LoadSkillsResult } from \"./types.js\";\nimport type { WorkspaceProjection, Office } from \"../office/types.js\";\nimport { existsSync, lstatSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport * as log from \"../log.js\";\n\nfunction addSkills(\n skillMap: Map<string, MikanSkill>,\n skills: MikanSkill[],\n rewritePath: (path: string) => string,\n): void {\n for (const skill of skills) {\n skill.filePath = rewritePath(skill.filePath);\n skill.baseDir = rewritePath(skill.baseDir);\n skillMap.set(skill.name, skill);\n }\n}\n\nfunction skippedSymlinkPaths(\n diagnostics: SkillDiagnostic[],\n translatePath: (path: string) => string,\n): string[] {\n const skipped: string[] = [];\n for (const diagnostic of diagnostics) {\n if (diagnostic.code !== \"symlink\") continue;\n log.logWarning(\"Skipping conversation skill entry (symlink)\", diagnostic.path);\n skipped.push(translatePath(diagnostic.path));\n }\n return skipped;\n}\n\nexport function loadMikanSkills(\n office: Office,\n workspacePath: string,\n projection: WorkspaceProjection,\n): { skills: MikanSkill[]; skippedSkillLinks: string[] } {\n const skillMap = new Map<string, MikanSkill>();\n\n const hostWorkspacePath = office.workspace.root;\n const translatePath = (hostPath: string): string =>\n hostPath.startsWith(hostWorkspacePath)\n ? workspacePath + hostPath.slice(hostWorkspacePath.length)\n : hostPath;\n\n const workspaceSkillsDir = projection.promptSources.globalSkillsDir;\n if (workspaceSkillsDir) {\n const loaded = loadSkillsFromDir({ dir: workspaceSkillsDir, source: \"workspace\" });\n addSkills(skillMap, loaded.skills, translatePath);\n }\n\n const conversationSkills = loadSkillsFromDir({\n dir: projection.promptSources.conversationSkillsDir,\n source: \"channel\",\n rejectSymlinks: true,\n });\n const skippedSkillLinks = skippedSymlinkPaths(conversationSkills.diagnostics, translatePath);\n addSkills(skillMap, conversationSkills.skills, translatePath);\n\n return { skills: Array.from(skillMap.values()), skippedSkillLinks };\n}\n\nconst MAX_NAME_LENGTH = 64;\n\nconst MAX_DESCRIPTION_LENGTH = 1024;\n\ninterface Frontmatter {\n values: Record<string, string>;\n body: string;\n}\n\nexport function parseFrontmatter(content: string): Frontmatter {\n const match = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/);\n if (!match) return { values: {}, body: content };\n\n const values: Record<string, string> = {};\n for (const line of (match[1] ?? \"\").split(/\\r?\\n/)) {\n const separator = line.indexOf(\":\");\n if (separator === -1) continue;\n const key = line.slice(0, separator).trim();\n if (!key) continue;\n let value = line.slice(separator + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n values[key] = value;\n }\n return { values, body: content.slice(match[0].length) };\n}\n\nexport function validateSkill(name: string, description: string): string[] {\n const errors: string[] = [];\n if (name.length > MAX_NAME_LENGTH) {\n errors.push(`name exceeds ${MAX_NAME_LENGTH} characters (${name.length})`);\n }\n if (\n !/^[a-z0-9-]+$/.test(name) ||\n name.startsWith(\"-\") ||\n name.endsWith(\"-\") ||\n name.includes(\"--\")\n ) {\n errors.push(\"name must be lowercase a-z, 0-9 and single hyphens, not at the edges\");\n }\n if (description.length > MAX_DESCRIPTION_LENGTH) {\n errors.push(`description exceeds ${MAX_DESCRIPTION_LENGTH} characters (${description.length})`);\n }\n return errors;\n}\n\nfunction loadSkillFromFile(filePath: string, source: string): LoadSkillsResult {\n const diagnostics: SkillDiagnostic[] = [];\n try {\n const raw = readFileSync(filePath, \"utf-8\");\n const { values, body } = parseFrontmatter(raw);\n const skillDir = dirname(filePath);\n const name = values.name || basename(skillDir);\n const description = values.description ?? \"\";\n\n if (!description.trim()) {\n diagnostics.push({ type: \"warning\", message: \"description is required\", path: filePath });\n return { skills: [], diagnostics };\n }\n for (const error of validateSkill(name, description)) {\n diagnostics.push({ type: \"warning\", message: error, path: filePath });\n }\n\n return {\n skills: [\n {\n name,\n description,\n content: body.trim(),\n filePath,\n baseDir: skillDir,\n source,\n disableModelInvocation: values[\"disable-model-invocation\"] === \"true\",\n },\n ],\n diagnostics,\n };\n } catch (error) {\n diagnostics.push({\n type: \"warning\",\n message: error instanceof Error ? error.message : \"failed to parse skill file\",\n path: filePath,\n });\n return { skills: [], diagnostics };\n }\n}\n\nexport function loadSkillsFromDir(options: {\n dir: string;\n source: string;\n rejectSymlinks?: boolean;\n}): LoadSkillsResult {\n const rejectSymlinks = options.rejectSymlinks === true;\n if (rejectSymlinks && isSymlink(options.dir)) {\n return {\n skills: [],\n diagnostics: [\n {\n type: \"warning\",\n code: \"symlink\",\n message: \"Skills directory is a symlink; skipped\",\n path: options.dir,\n },\n ],\n };\n }\n return loadSkillsFromDirInternal(options.dir, options.source, true, rejectSymlinks);\n}\n\nfunction isSymlink(path: string): boolean {\n try {\n return lstatSync(path).isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nfunction symlinkDiagnostic(path: string): SkillDiagnostic {\n return {\n type: \"warning\",\n code: \"symlink\",\n message: \"Skill entry is a symlink; skipped\",\n path,\n };\n}\n\nfunction loadSkillsFromDirInternal(\n dir: string,\n source: string,\n includeRootFiles: boolean,\n rejectSymlinks: boolean,\n): LoadSkillsResult {\n const skills: MikanSkill[] = [];\n const diagnostics: SkillDiagnostic[] = [];\n if (!existsSync(dir)) return { skills, diagnostics };\n\n let entries;\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return { skills, diagnostics };\n }\n\n const skillFile = entries.find((entry) => entry.name === \"SKILL.md\" && isFileLike(dir, entry));\n if (skillFile) {\n if (rejectSymlinks && skillFile.isSymbolicLink()) {\n diagnostics.push(symlinkDiagnostic(join(dir, skillFile.name)));\n return { skills, diagnostics };\n }\n return loadSkillFromFile(join(dir, skillFile.name), source);\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const fullPath = join(dir, entry.name);\n\n const directory = isDirectoryLike(dir, entry);\n if (!directory && !(includeRootFiles && entry.name.endsWith(\".md\") && isFileLike(dir, entry)))\n continue;\n if (rejectSymlinks && entry.isSymbolicLink()) {\n diagnostics.push(symlinkDiagnostic(fullPath));\n continue;\n }\n const result = directory\n ? loadSkillsFromDirInternal(fullPath, source, false, rejectSymlinks)\n : loadSkillFromFile(fullPath, source);\n skills.push(...result.skills);\n diagnostics.push(...result.diagnostics);\n }\n return { skills, diagnostics };\n}\n\nfunction isFileLike(\n dir: string,\n entry: { name: string; isFile(): boolean; isSymbolicLink(): boolean },\n): boolean {\n if (entry.isFile()) return true;\n if (!entry.isSymbolicLink()) return false;\n try {\n return statSync(join(dir, entry.name)).isFile();\n } catch {\n return false;\n }\n}\n\nfunction isDirectoryLike(\n dir: string,\n entry: { name: string; isDirectory(): boolean; isSymbolicLink(): boolean },\n): boolean {\n if (entry.isDirectory()) return true;\n if (!entry.isSymbolicLink()) return false;\n try {\n return statSync(join(dir, entry.name)).isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function formatSkillsForPrompt(skills: MikanSkill[]): string {\n const visible = skills.filter((skill) => !skill.disableModelInvocation);\n if (visible.length === 0) return \"\";\n\n const lines = [\n \"\\n\\nThe following skills provide specialized instructions for specific tasks.\",\n \"Use the read tool to load a skill's file when the task matches its description.\",\n \"When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\",\n \"\",\n \"<available_skills>\",\n ];\n for (const skill of visible) {\n lines.push(\" <skill>\");\n lines.push(` <name>${escapeXml(skill.name)}</name>`);\n lines.push(` <description>${escapeXml(skill.description)}</description>`);\n if (skill.inline) {\n lines.push(` <instructions>${escapeXml(skill.content)}</instructions>`);\n } else {\n lines.push(` <location>${escapeXml(skill.filePath)}</location>`);\n }\n lines.push(\" </skill>\");\n }\n lines.push(\"</available_skills>\");\n return lines.join(\"\\n\");\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { LoadSubagentProfilesResult } from "./types.js";
|
|
2
|
-
export type { LoadSubagentProfilesResult, SubagentProfileDiagnostic } from "./types.js";
|
|
3
2
|
export declare function loadSubagentProfiles(workspaceDir: string): LoadSubagentProfilesResult;
|
|
4
3
|
//# sourceMappingURL=subagent-profiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-profiles.d.ts","sourceRoot":"","sources":["../../src/harness/subagent-profiles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0BAA0B,EAI3B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent-profiles.d.ts","sourceRoot":"","sources":["../../src/harness/subagent-profiles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0BAA0B,EAI3B,MAAM,YAAY,CAAC;AA8PpB,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,0BAA0B,CAiCrF"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
2
|
import { basename, join } from "node:path";
|
|
3
|
+
import { isThinkingLevel } from "../settings/index.js";
|
|
3
4
|
import { parseFrontmatter } from "./skills.js";
|
|
5
|
+
import { JEV_TOOL } from "./tools/jev.js";
|
|
6
|
+
import { GENERATE_IMAGE_TOOL } from "./tools/generate-image.js";
|
|
7
|
+
import { errorMessage } from "../unknown-values.js";
|
|
4
8
|
const BUILTIN_PROFILES = [
|
|
5
9
|
{
|
|
6
10
|
name: "worker",
|
|
@@ -12,7 +16,7 @@ const BUILTIN_PROFILES = [
|
|
|
12
16
|
"",
|
|
13
17
|
"Keep verbose discovery and command output in this isolated run. Return the completed result, files or artifacts changed, verification performed, and any unresolved blocker.",
|
|
14
18
|
].join("\n"),
|
|
15
|
-
tools: ["read", "bash", "edit", "write",
|
|
19
|
+
tools: ["read", "bash", "edit", "write", JEV_TOOL],
|
|
16
20
|
thinkingLevel: "high",
|
|
17
21
|
maxTurns: 100,
|
|
18
22
|
maxTokens: 1_000_000,
|
|
@@ -28,7 +32,7 @@ const BUILTIN_PROFILES = [
|
|
|
28
32
|
"",
|
|
29
33
|
"Keep source discovery, build logs, browser traces, and repetitive diagnostics in this isolated run. Return the implemented or diagnosed outcome, decisive technical evidence, changed artifact paths when applicable, verification results, and remaining engineering risk.",
|
|
30
34
|
].join("\n"),
|
|
31
|
-
tools: ["read", "bash", "edit", "write",
|
|
35
|
+
tools: ["read", "bash", "edit", "write", JEV_TOOL],
|
|
32
36
|
thinkingLevel: "high",
|
|
33
37
|
maxTurns: 100,
|
|
34
38
|
maxTokens: 1_000_000,
|
|
@@ -60,7 +64,7 @@ const BUILTIN_PROFILES = [
|
|
|
60
64
|
"",
|
|
61
65
|
"Keep verbose rows and query output in this isolated run. Return the conclusion, key figures with units and scope, methodology and checks, and limitations that affect confidence.",
|
|
62
66
|
].join("\n"),
|
|
63
|
-
tools: ["read", "bash", "write",
|
|
67
|
+
tools: ["read", "bash", "write", JEV_TOOL],
|
|
64
68
|
thinkingLevel: "high",
|
|
65
69
|
maxTurns: 100,
|
|
66
70
|
maxTokens: 1_000_000,
|
|
@@ -108,7 +112,7 @@ const BUILTIN_PROFILES = [
|
|
|
108
112
|
"",
|
|
109
113
|
"Keep generation logs, intermediate assets, and provider polling in this isolated run. Return deliverable paths or external identifiers, a concise production summary, verification results, and unresolved creative, quality, or rights constraints.",
|
|
110
114
|
].join("\n"),
|
|
111
|
-
tools: ["read", "bash", "write",
|
|
115
|
+
tools: ["read", "bash", "write", GENERATE_IMAGE_TOOL],
|
|
112
116
|
thinkingLevel: "high",
|
|
113
117
|
maxTurns: 100,
|
|
114
118
|
maxTokens: 1_000_000,
|
|
@@ -138,21 +142,13 @@ const BUILTIN_PROFILES = [
|
|
|
138
142
|
"",
|
|
139
143
|
"Do not claim to have inspected files, executed commands, accessed URLs, or verified external state. Clearly distinguish dependency-provided facts from your own analysis. If the supplied evidence is insufficient, state the limitation instead of inventing details. `jev` is your only tool: use it to classify, rank, or check claims against the supplied input when the volume is large or a calibrated probability helps.",
|
|
140
144
|
].join("\n"),
|
|
141
|
-
tools: [
|
|
145
|
+
tools: [JEV_TOOL],
|
|
142
146
|
thinkingLevel: "high",
|
|
143
147
|
maxTurns: 100,
|
|
144
148
|
maxTokens: 1_000_000,
|
|
145
149
|
maxCostUsd: 10,
|
|
146
150
|
},
|
|
147
151
|
];
|
|
148
|
-
const THINKING_LEVELS = new Set([
|
|
149
|
-
"off",
|
|
150
|
-
"minimal",
|
|
151
|
-
"low",
|
|
152
|
-
"medium",
|
|
153
|
-
"high",
|
|
154
|
-
"xhigh",
|
|
155
|
-
]);
|
|
156
152
|
function csv(value) {
|
|
157
153
|
if (value.trim() === "none")
|
|
158
154
|
return [];
|
|
@@ -171,7 +167,7 @@ function parseModel(value) {
|
|
|
171
167
|
return { provider: value.slice(0, separator), id: value.slice(separator + 1) };
|
|
172
168
|
}
|
|
173
169
|
function parseThinking(value) {
|
|
174
|
-
if (!
|
|
170
|
+
if (!isThinkingLevel(value)) {
|
|
175
171
|
throw new Error(`unknown thinking level: ${value}`);
|
|
176
172
|
}
|
|
177
173
|
return value;
|
|
@@ -238,7 +234,7 @@ export function loadSubagentProfiles(workspaceDir) {
|
|
|
238
234
|
catch (error) {
|
|
239
235
|
diagnostics.push({
|
|
240
236
|
type: "warning",
|
|
241
|
-
message:
|
|
237
|
+
message: errorMessage(error),
|
|
242
238
|
path: dir,
|
|
243
239
|
});
|
|
244
240
|
return { profiles, diagnostics };
|
|
@@ -254,7 +250,7 @@ export function loadSubagentProfiles(workspaceDir) {
|
|
|
254
250
|
catch (error) {
|
|
255
251
|
diagnostics.push({
|
|
256
252
|
type: "warning",
|
|
257
|
-
message:
|
|
253
|
+
message: errorMessage(error),
|
|
258
254
|
path: filePath,
|
|
259
255
|
});
|
|
260
256
|
}
|