@geminixiang/mikan 1.0.0-beta.76 → 1.0.0-beta.78
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 +39 -0
- package/dist/adapters/commands/login.d.ts.map +1 -1
- package/dist/adapters/commands/login.js +0 -9
- package/dist/adapters/commands/login.js.map +1 -1
- package/dist/adapters/commands/manifest.d.ts +0 -19
- package/dist/adapters/commands/manifest.d.ts.map +1 -1
- package/dist/adapters/commands/manifest.js +0 -34
- package/dist/adapters/commands/manifest.js.map +1 -1
- package/dist/adapters/commands/model.d.ts +0 -5
- package/dist/adapters/commands/model.d.ts.map +1 -1
- package/dist/adapters/commands/model.js +0 -5
- package/dist/adapters/commands/model.js.map +1 -1
- package/dist/adapters/commands/new.d.ts.map +1 -1
- package/dist/adapters/commands/new.js +0 -2
- package/dist/adapters/commands/new.js.map +1 -1
- package/dist/adapters/commands/registry.d.ts +0 -1
- package/dist/adapters/commands/registry.d.ts.map +1 -1
- package/dist/adapters/commands/registry.js +0 -8
- package/dist/adapters/commands/registry.js.map +1 -1
- package/dist/adapters/commands/session-view.d.ts.map +1 -1
- package/dist/adapters/commands/session-view.js +0 -2
- package/dist/adapters/commands/session-view.js.map +1 -1
- package/dist/adapters/commands/types.d.ts +0 -29
- 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 +0 -3
- package/dist/adapters/commands/utils.d.ts.map +1 -1
- package/dist/adapters/commands/utils.js +0 -3
- package/dist/adapters/commands/utils.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +0 -4
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +5 -41
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +0 -23
- package/dist/adapters/discord/components.d.ts.map +1 -1
- package/dist/adapters/discord/components.js +0 -23
- package/dist/adapters/discord/components.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +1 -11
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +0 -1
- package/dist/adapters/discord/format.d.ts.map +1 -1
- package/dist/adapters/discord/format.js +0 -37
- package/dist/adapters/discord/format.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +0 -44
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +1 -120
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +0 -57
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +0 -59
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +1 -8
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +0 -55
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +0 -59
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/ids.d.ts +0 -27
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +0 -29
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/repo.d.ts +0 -25
- package/dist/adapters/github/repo.d.ts.map +1 -1
- package/dist/adapters/github/repo.js +0 -49
- package/dist/adapters/github/repo.js.map +1 -1
- package/dist/adapters/github/tool-pack.d.ts +0 -10
- package/dist/adapters/github/tool-pack.d.ts.map +1 -1
- package/dist/adapters/github/tool-pack.js +0 -10
- package/dist/adapters/github/tool-pack.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts +0 -6
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +0 -7
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/issue.d.ts +0 -5
- package/dist/adapters/github/tools/issue.d.ts.map +1 -1
- package/dist/adapters/github/tools/issue.js +0 -5
- package/dist/adapters/github/tools/issue.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts +0 -7
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +0 -7
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/tools/read.d.ts +0 -6
- package/dist/adapters/github/tools/read.d.ts.map +1 -1
- package/dist/adapters/github/tools/read.js +0 -8
- package/dist/adapters/github/tools/read.js.map +1 -1
- package/dist/adapters/github/tools/review-reply.d.ts +0 -5
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
- package/dist/adapters/github/tools/review-reply.js +0 -5
- package/dist/adapters/github/tools/review-reply.js.map +1 -1
- package/dist/adapters/github/tools/sync.d.ts +0 -6
- package/dist/adapters/github/tools/sync.d.ts.map +1 -1
- package/dist/adapters/github/tools/sync.js +0 -6
- package/dist/adapters/github/tools/sync.js.map +1 -1
- package/dist/adapters/github/types.d.ts +0 -88
- 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 -13
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js +0 -16
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/index.d.ts +3 -4
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/intake.d.ts +0 -17
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +6 -32
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +0 -10
- package/dist/adapters/markdown-tables.d.ts.map +1 -1
- package/dist/adapters/markdown-tables.js +1 -42
- package/dist/adapters/markdown-tables.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +3 -25
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +0 -57
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +0 -71
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +0 -49
- package/dist/adapters/slack/assistant.d.ts.map +1 -1
- package/dist/adapters/slack/assistant.js +0 -97
- package/dist/adapters/slack/assistant.js.map +1 -1
- package/dist/adapters/slack/auto-reply-context.d.ts +0 -7
- package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -1
- package/dist/adapters/slack/auto-reply-context.js +0 -7
- package/dist/adapters/slack/auto-reply-context.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts +0 -9
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +0 -20
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +0 -116
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +7 -231
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +1 -3
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts +0 -13
- package/dist/adapters/slack/jev-context.d.ts.map +1 -1
- package/dist/adapters/slack/jev-context.js +0 -12
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/markdown.d.ts +0 -1
- package/dist/adapters/slack/markdown.d.ts.map +1 -1
- package/dist/adapters/slack/markdown.js +0 -5
- package/dist/adapters/slack/markdown.js.map +1 -1
- package/dist/adapters/slack/persona.d.ts +0 -9
- package/dist/adapters/slack/persona.d.ts.map +1 -1
- package/dist/adapters/slack/persona.js +0 -9
- package/dist/adapters/slack/persona.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +1 -45
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +2 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +2 -2
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +0 -25
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -1
- package/dist/adapters/slack/stream-limits.js +0 -34
- package/dist/adapters/slack/stream-limits.js.map +1 -1
- package/dist/adapters/slack/task-intent.d.ts +0 -13
- package/dist/adapters/slack/task-intent.d.ts.map +1 -1
- package/dist/adapters/slack/task-intent.js +0 -7
- package/dist/adapters/slack/task-intent.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts +0 -1
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +1 -9
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +0 -6
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
- package/dist/adapters/slack/tool-pack.js +0 -6
- package/dist/adapters/slack/tool-pack.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
- package/dist/adapters/slack/tools/blockkit.js +0 -11
- package/dist/adapters/slack/tools/blockkit.js.map +1 -1
- package/dist/adapters/slack/types.d.ts +0 -19
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/slack/update-diagnostics.d.ts +0 -1
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -1
- package/dist/adapters/slack/update-diagnostics.js +1 -7
- package/dist/adapters/slack/update-diagnostics.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +0 -6
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +1 -50
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +1 -8
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +0 -57
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts +4 -0
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
- package/dist/adapters/web/admin/client-assets.js +1765 -0
- package/dist/adapters/web/admin/client-assets.js.map +1 -0
- package/dist/adapters/web/admin/portal.d.ts +0 -10
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +6 -1909
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/types.d.ts +0 -3
- 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.map +1 -1
- package/dist/adapters/web/login/oauth.js +3 -7
- package/dist/adapters/web/login/oauth.js.map +1 -1
- package/dist/adapters/web/login/portal.d.ts +0 -10
- package/dist/adapters/web/login/portal.d.ts.map +1 -1
- package/dist/adapters/web/login/portal.js +4 -37
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/login/types.d.ts +0 -5
- 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 -12
- package/dist/adapters/web/portal-shell.d.ts.map +1 -1
- package/dist/adapters/web/portal-shell.js +8 -25
- package/dist/adapters/web/portal-shell.js.map +1 -1
- package/dist/adapters/web/server.d.ts +0 -1
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +0 -2
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +13 -24
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- 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 -2
- package/dist/adapters/web/token-store.d.ts.map +1 -1
- package/dist/adapters/web/token-store.js +0 -2
- package/dist/adapters/web/token-store.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +0 -3
- package/dist/cli/arg-grammar.d.ts.map +1 -1
- package/dist/cli/arg-grammar.js +0 -3
- package/dist/cli/arg-grammar.js.map +1 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +3 -12
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/download.d.ts.map +1 -1
- package/dist/cli/download.js +2 -6
- package/dist/cli/download.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +0 -31
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.d.ts +0 -2
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +0 -30
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/process-lifecycle.d.ts +0 -5
- package/dist/cli/process-lifecycle.d.ts.map +1 -1
- package/dist/cli/process-lifecycle.js +0 -6
- package/dist/cli/process-lifecycle.js.map +1 -1
- package/dist/cli/sandbox.d.ts +3 -0
- package/dist/cli/sandbox.d.ts.map +1 -0
- package/dist/cli/sandbox.js +79 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/sessions.d.ts.map +1 -1
- package/dist/cli/sessions.js +0 -11
- package/dist/cli/sessions.js.map +1 -1
- package/dist/cli/types.d.ts +2 -6
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/env-manifest.d.ts +0 -21
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +0 -11
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +0 -51
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +0 -42
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts +0 -8
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +0 -8
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +0 -15
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +2 -26
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/execution-env.d.ts +0 -15
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +4 -55
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/http.d.ts +0 -12
- package/dist/harness/http.d.ts.map +1 -1
- package/dist/harness/http.js +0 -34
- package/dist/harness/http.js.map +1 -1
- package/dist/harness/index.d.ts +4 -7
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +4 -7
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/jev.d.ts +0 -28
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js +0 -45
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/mcp-result.d.ts +20 -0
- package/dist/harness/mcp-result.d.ts.map +1 -0
- package/dist/harness/mcp-result.js +171 -0
- package/dist/harness/mcp-result.js.map +1 -0
- package/dist/harness/mcp.d.ts +0 -19
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +7 -66
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.d.ts +0 -19
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +0 -52
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +0 -12
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +0 -22
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts +1 -0
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +16 -66
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +0 -11
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +1 -18
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +8 -28
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +11 -28
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +100 -38
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills.d.ts +0 -22
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +0 -20
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +0 -4
- package/dist/harness/subagent-profiles.d.ts.map +1 -1
- package/dist/harness/subagent-profiles.js +0 -29
- package/dist/harness/subagent-profiles.js.map +1 -1
- package/dist/harness/subagent.d.ts +0 -25
- package/dist/harness/subagent.d.ts.map +1 -1
- package/dist/harness/subagent.js +1 -70
- package/dist/harness/subagent.js.map +1 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +0 -9
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts +0 -6
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/host-fn-tool.d.ts +0 -17
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
- package/dist/harness/tools/host-fn-tool.js +0 -16
- package/dist/harness/tools/host-fn-tool.js.map +1 -1
- package/dist/harness/tools/index.d.ts +1 -7
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +3 -14
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +4 -94
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +203 -92
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/tools/jev.d.ts +0 -8
- package/dist/harness/tools/jev.d.ts.map +1 -1
- package/dist/harness/tools/jev.js +0 -11
- package/dist/harness/tools/jev.js.map +1 -1
- package/dist/harness/tools/pi-tools.d.ts +1 -11
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +1 -30
- package/dist/harness/tools/pi-tools.js.map +1 -1
- package/dist/harness/tools/react.d.ts +0 -5
- package/dist/harness/tools/react.d.ts.map +1 -1
- package/dist/harness/tools/react.js +0 -5
- package/dist/harness/tools/react.js.map +1 -1
- package/dist/harness/tools/secret-redaction.d.ts +0 -25
- package/dist/harness/tools/secret-redaction.d.ts.map +1 -1
- package/dist/harness/tools/secret-redaction.js +3 -36
- package/dist/harness/tools/secret-redaction.js.map +1 -1
- package/dist/harness/tools/subagent.d.ts +0 -34
- package/dist/harness/tools/subagent.d.ts.map +1 -1
- package/dist/harness/tools/subagent.js +0 -92
- package/dist/harness/tools/subagent.js.map +1 -1
- package/dist/harness/tools/task.d.ts +0 -1
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +0 -1
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/tools/types.d.ts +0 -16
- 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 +1 -77
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +0 -13
- package/dist/log.js.map +1 -1
- package/dist/main.js +7 -52
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +16 -0
- package/dist/memory-capture/index.d.ts.map +1 -0
- package/dist/memory-capture/index.js +194 -0
- package/dist/memory-capture/index.js.map +1 -0
- package/dist/memory-capture/types.d.ts +27 -0
- package/dist/memory-capture/types.d.ts.map +1 -0
- package/dist/memory-capture/types.js.map +1 -0
- package/dist/observability/index.d.ts +0 -9
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +0 -9
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/instrument.js +0 -5
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/otel.js +0 -1
- package/dist/observability/otel.js.map +1 -1
- package/dist/observability/sentry.d.ts +0 -18
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +0 -36
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +1 -10
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +0 -76
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +4 -154
- package/dist/office/index.js.map +1 -1
- package/dist/office/projection.d.ts +0 -29
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +5 -41
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +0 -66
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +22 -83
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +0 -10
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +0 -12
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +2 -29
- 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 +2 -1
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +21 -15
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +0 -2
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +0 -28
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js +0 -28
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/index.d.ts +0 -18
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +2 -19
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/layout.d.ts +7 -0
- package/dist/sandbox/layout.d.ts.map +1 -0
- package/dist/sandbox/layout.js +13 -0
- package/dist/sandbox/layout.js.map +1 -0
- package/dist/sandbox/provisioner.d.ts +24 -65
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +213 -125
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sandbox/types.d.ts +0 -39
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +2 -5
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +31 -31
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +0 -6
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +1 -33
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/history-line.d.ts +0 -20
- package/dist/sessions/history-line.d.ts.map +1 -1
- package/dist/sessions/history-line.js +0 -20
- package/dist/sessions/history-line.js.map +1 -1
- package/dist/sessions/migrate-common.d.ts +0 -15
- package/dist/sessions/migrate-common.d.ts.map +1 -1
- package/dist/sessions/migrate-common.js +0 -19
- package/dist/sessions/migrate-common.js.map +1 -1
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
- package/dist/sessions/migrate-pi-084.js +0 -7
- package/dist/sessions/migrate-pi-084.js.map +1 -1
- package/dist/sessions/migrate-v3.d.ts +0 -7
- package/dist/sessions/migrate-v3.d.ts.map +1 -1
- package/dist/sessions/migrate-v3.js +1 -67
- package/dist/sessions/migrate-v3.js.map +1 -1
- package/dist/sessions/session-key.d.ts +3 -17
- package/dist/sessions/session-key.d.ts.map +1 -1
- package/dist/sessions/session-key.js +8 -35
- package/dist/sessions/session-key.js.map +1 -1
- package/dist/sessions/session-store.d.ts +1 -7
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +8 -50
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/store.d.ts +0 -60
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +0 -113
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +0 -17
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +0 -6
- package/dist/settings/apply.d.ts.map +1 -1
- package/dist/settings/apply.js +0 -29
- package/dist/settings/apply.js.map +1 -1
- package/dist/settings/index.d.ts +0 -53
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +0 -77
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/migrate.d.ts +0 -5
- package/dist/settings/migrate.d.ts.map +1 -1
- package/dist/settings/migrate.js +0 -17
- package/dist/settings/migrate.js.map +1 -1
- package/dist/types.d.ts +9 -159
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +2 -36
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +135 -65
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +0 -15
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/dream/index.d.ts +0 -20
- package/dist/dream/index.d.ts.map +0 -1
- package/dist/dream/index.js +0 -264
- package/dist/dream/index.js.map +0 -1
- package/dist/dream/types.d.ts +0 -30
- package/dist/dream/types.d.ts.map +0 -1
- package/dist/dream/types.js.map +0 -1
- /package/dist/{dream → memory-capture}/types.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AgentMessage, type CompactionSettings } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import type { ImageContent, Model,
|
|
2
|
+
import type { Api, ImageContent, Model, Usage } from "@earendil-works/pi-ai";
|
|
3
3
|
import type { SessionStore } from "../sessions/session-store.js";
|
|
4
4
|
import type { BudgetSettings, HarnessEventListener, HarnessSettings, MikanAgentSessionOptions, MikanToolInput, SubagentUsage, SubagentUsageSink, RetrySettings } from "./types.js";
|
|
5
5
|
export type { CompactionReason } from "./types.js";
|
|
@@ -18,6 +18,9 @@ export declare class MikanAgentSession {
|
|
|
18
18
|
private lane;
|
|
19
19
|
private runActive;
|
|
20
20
|
private runAborted;
|
|
21
|
+
private pendingProviderRequest;
|
|
22
|
+
private currentProviderRequest;
|
|
23
|
+
private activeProviderRequest;
|
|
21
24
|
private operationId;
|
|
22
25
|
private cancellation;
|
|
23
26
|
private cancellationError;
|
|
@@ -45,7 +48,6 @@ export declare class MikanAgentSession {
|
|
|
45
48
|
durationMs: number;
|
|
46
49
|
budgetExceededReason?: string;
|
|
47
50
|
}>;
|
|
48
|
-
/** Bind delegated spend to its owning prompt, even when cleanup finishes late. */
|
|
49
51
|
captureExternalUsageSink(): SubagentUsageSink;
|
|
50
52
|
foldExternalUsage(usage: SubagentUsage): Promise<void>;
|
|
51
53
|
subscribe(listener: HarnessEventListener): () => void;
|
|
@@ -58,7 +60,6 @@ export declare class MikanAgentSession {
|
|
|
58
60
|
allowTaskStatus?: boolean;
|
|
59
61
|
}): Promise<void>;
|
|
60
62
|
steer(text: string): Promise<boolean>;
|
|
61
|
-
/** Resume an operation left open by a previous process using Pi's recovery rules. */
|
|
62
63
|
resume(options?: {
|
|
63
64
|
budget?: BudgetSettings;
|
|
64
65
|
tools?: MikanToolInput[];
|
|
@@ -66,10 +67,14 @@ export declare class MikanAgentSession {
|
|
|
66
67
|
private run;
|
|
67
68
|
private driveOperation;
|
|
68
69
|
private cleanupRun;
|
|
69
|
-
|
|
70
|
-
abort(): void;
|
|
70
|
+
abort(reason?: string): void;
|
|
71
71
|
private requestCancellation;
|
|
72
|
-
|
|
72
|
+
private beginProviderRequest;
|
|
73
|
+
private endProviderRequest;
|
|
74
|
+
private withProviderActivation;
|
|
75
|
+
private trackProviderStream;
|
|
76
|
+
private trackProviderPromise;
|
|
77
|
+
private trackedModels;
|
|
73
78
|
private toHarnessTools;
|
|
74
79
|
private initialize;
|
|
75
80
|
private emit;
|
|
@@ -88,35 +93,13 @@ export type { BudgetSettings } from "./types.js";
|
|
|
88
93
|
export type { HarnessSettings } from "./types.js";
|
|
89
94
|
export type { RetrySettings } from "./types.js";
|
|
90
95
|
export declare const DEFAULT_RETRY_SETTINGS: RetrySettings;
|
|
91
|
-
/**
|
|
92
|
-
* Per-run resource ceilings — the harness's external circuit breakers.
|
|
93
|
-
*
|
|
94
|
-
* An LLM cannot reliably decide on its own when to stop (the halting problem),
|
|
95
|
-
* so a runaway run has to be stopped from the outside. When any populated cap
|
|
96
|
-
* is exceeded, the run is aborted and a `budget_exceeded` event is emitted.
|
|
97
|
-
* Every field is a cap on a single `prompt()` call; an undefined field means
|
|
98
|
-
* "no cap on that axis". Interactive runs are gated turn-by-turn by a human,
|
|
99
|
-
* so they default to uncapped; autonomous runs (scheduled events, triggers)
|
|
100
|
-
* pass {@link DEFAULT_EVENT_BUDGET}, where nobody is watching the loop.
|
|
101
|
-
*/
|
|
102
|
-
/** Interactive runs are human-gated per turn — no automatic ceiling by default. */
|
|
103
96
|
export declare const DEFAULT_BUDGET_SETTINGS: BudgetSettings;
|
|
104
|
-
/**
|
|
105
|
-
* Ceiling for autonomous (event / trigger) runs, where no human is watching
|
|
106
|
-
* the loop. Deliberately generous — it is a stop-loss, not a target.
|
|
107
|
-
*/
|
|
108
97
|
export declare const DEFAULT_EVENT_BUDGET: BudgetSettings;
|
|
109
98
|
export declare function resolveHarnessSettings(overrides?: {
|
|
110
99
|
compaction?: Partial<CompactionSettings>;
|
|
111
100
|
retry?: Partial<RetrySettings>;
|
|
112
101
|
budget?: Partial<BudgetSettings>;
|
|
113
102
|
}): HarnessSettings;
|
|
114
|
-
/**
|
|
115
|
-
* Harness-wide usage accounting: parent-session assistant turns, compaction
|
|
116
|
-
* completions, and subagent folds all accumulate through these helpers.
|
|
117
|
-
* `SubagentUsage` (public surface) is an alias of pi-ai's `Usage`; the
|
|
118
|
-
* aggregation rules here are not subagent-specific.
|
|
119
|
-
*/
|
|
120
103
|
export declare function createEmptyUsage(): Usage;
|
|
121
104
|
export declare function copyUsage(usage: Usage): Usage;
|
|
122
105
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,YAAY,EAGjB,KAAK,kBAAkB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/session.js
CHANGED
|
@@ -67,7 +67,6 @@ export class MikanAgentSession {
|
|
|
67
67
|
...(this.budgetExceededReason ? { budgetExceededReason: this.budgetExceededReason } : {}),
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
/** Bind delegated spend to its owning prompt, even when cleanup finishes late. */
|
|
71
70
|
captureExternalUsageSink() {
|
|
72
71
|
const tally = this.tally;
|
|
73
72
|
return async (usage) => {
|
|
@@ -99,7 +98,6 @@ export class MikanAgentSession {
|
|
|
99
98
|
getOrThrow(await this.lane.steer(text, undefined, TODO_CONTEXT));
|
|
100
99
|
return true;
|
|
101
100
|
}
|
|
102
|
-
/** Resume an operation left open by a previous process using Pi's recovery rules. */
|
|
103
101
|
async resume(options) {
|
|
104
102
|
await this.run(undefined, options);
|
|
105
103
|
}
|
|
@@ -108,6 +106,9 @@ export class MikanAgentSession {
|
|
|
108
106
|
throw new Error("Agent is already processing a prompt");
|
|
109
107
|
this.runActive = true;
|
|
110
108
|
this.runAborted = false;
|
|
109
|
+
this.pendingProviderRequest = undefined;
|
|
110
|
+
this.currentProviderRequest = undefined;
|
|
111
|
+
this.activeProviderRequest = undefined;
|
|
111
112
|
this.budgetExceededReason = undefined;
|
|
112
113
|
this.cancellationError = undefined;
|
|
113
114
|
this.retryAttempt = 0;
|
|
@@ -165,13 +166,11 @@ export class MikanAgentSession {
|
|
|
165
166
|
throw new Error(result.error?.message ?? "Pi run failed");
|
|
166
167
|
return;
|
|
167
168
|
}
|
|
168
|
-
// Pi owns admission, retries, compaction, persistence, and the tool loop.
|
|
169
169
|
const admission = getOrThrow(await lane.accept({ kind: "prompt", prompt: text, images }, TODO_CONTEXT));
|
|
170
170
|
this.operationId = admission.operationId;
|
|
171
171
|
if (this.runAborted)
|
|
172
172
|
this.requestCancellation();
|
|
173
173
|
const result = getOrThrow(await lane.drive({ operationId: admission.operationId, waitForRetry: true }, TODO_CONTEXT));
|
|
174
|
-
// The assistant error is already persisted and presented when present.
|
|
175
174
|
if (result.kind === "settled" &&
|
|
176
175
|
result.outcome.status === "failed" &&
|
|
177
176
|
!this.latestAssistantErrored) {
|
|
@@ -193,6 +192,9 @@ export class MikanAgentSession {
|
|
|
193
192
|
}
|
|
194
193
|
finally {
|
|
195
194
|
this.toolArgs.clear();
|
|
195
|
+
this.pendingProviderRequest = undefined;
|
|
196
|
+
this.currentProviderRequest = undefined;
|
|
197
|
+
this.activeProviderRequest = undefined;
|
|
196
198
|
this.operationId = undefined;
|
|
197
199
|
this.cancellation = undefined;
|
|
198
200
|
this.deadlineNotification = undefined;
|
|
@@ -206,21 +208,24 @@ export class MikanAgentSession {
|
|
|
206
208
|
}
|
|
207
209
|
throw cleanupFailure.error;
|
|
208
210
|
}
|
|
209
|
-
|
|
210
|
-
abort() {
|
|
211
|
+
abort(reason = "cancelled") {
|
|
211
212
|
if (!this.runActive)
|
|
212
213
|
return;
|
|
214
|
+
const firstAbort = !this.runAborted;
|
|
213
215
|
this.runAborted = true;
|
|
214
216
|
clearTimeout(this.deadlineTimer);
|
|
215
217
|
this.deadlineTimer = undefined;
|
|
218
|
+
if (firstAbort && this.activeProviderRequest) {
|
|
219
|
+
log.logInfo(`LLM request aborted ${JSON.stringify({
|
|
220
|
+
abort_reason: reason,
|
|
221
|
+
run_id: this.activeProviderRequest.runId,
|
|
222
|
+
})}`);
|
|
223
|
+
}
|
|
216
224
|
this.requestCancellation();
|
|
217
225
|
}
|
|
218
226
|
requestCancellation() {
|
|
219
227
|
if (!this.lane || !this.operationId || this.cancellation)
|
|
220
228
|
return;
|
|
221
|
-
// Do not await a lane mutation inside an event listener: Pi serializes event
|
|
222
|
-
// delivery, and the abort mutation itself emits another event. The native
|
|
223
|
-
// gate closes synchronously; prompt() drains the mutation before releasing ownership.
|
|
224
229
|
this.cancellation = this.lane
|
|
225
230
|
.requestAbort(this.operationId, TODO_CONTEXT)
|
|
226
231
|
.then((result) => {
|
|
@@ -231,7 +236,88 @@ export class MikanAgentSession {
|
|
|
231
236
|
this.cancellationError = error;
|
|
232
237
|
});
|
|
233
238
|
}
|
|
234
|
-
|
|
239
|
+
beginProviderRequest() {
|
|
240
|
+
const request = this.pendingProviderRequest;
|
|
241
|
+
this.pendingProviderRequest = undefined;
|
|
242
|
+
if (request)
|
|
243
|
+
this.currentProviderRequest = request;
|
|
244
|
+
return request;
|
|
245
|
+
}
|
|
246
|
+
endProviderRequest(request) {
|
|
247
|
+
if (!request)
|
|
248
|
+
return;
|
|
249
|
+
if (this.currentProviderRequest?.token === request.token) {
|
|
250
|
+
this.currentProviderRequest = undefined;
|
|
251
|
+
}
|
|
252
|
+
if (this.activeProviderRequest?.token === request.token) {
|
|
253
|
+
this.activeProviderRequest = undefined;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
withProviderActivation(options, request) {
|
|
257
|
+
if (!request)
|
|
258
|
+
return options;
|
|
259
|
+
const onPayload = options?.onPayload;
|
|
260
|
+
return {
|
|
261
|
+
...options,
|
|
262
|
+
onPayload: async (payload, model) => {
|
|
263
|
+
const transformed = await onPayload?.(payload, model);
|
|
264
|
+
if (this.currentProviderRequest?.token === request.token) {
|
|
265
|
+
this.activeProviderRequest = request;
|
|
266
|
+
}
|
|
267
|
+
return transformed;
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
trackProviderStream(start) {
|
|
272
|
+
const request = this.beginProviderRequest();
|
|
273
|
+
try {
|
|
274
|
+
const stream = start(request);
|
|
275
|
+
if (request) {
|
|
276
|
+
void stream.result().then(() => this.endProviderRequest(request), () => this.endProviderRequest(request));
|
|
277
|
+
}
|
|
278
|
+
return stream;
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
this.endProviderRequest(request);
|
|
282
|
+
throw error;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
trackProviderPromise(start) {
|
|
286
|
+
const request = this.beginProviderRequest();
|
|
287
|
+
try {
|
|
288
|
+
const promise = start(request);
|
|
289
|
+
if (!request)
|
|
290
|
+
return promise;
|
|
291
|
+
return promise.then((result) => {
|
|
292
|
+
this.endProviderRequest(request);
|
|
293
|
+
return result;
|
|
294
|
+
}, (error) => {
|
|
295
|
+
this.endProviderRequest(request);
|
|
296
|
+
throw error;
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
this.endProviderRequest(request);
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
trackedModels(models) {
|
|
305
|
+
return new Proxy(models, {
|
|
306
|
+
get: (target, property) => {
|
|
307
|
+
if (property === "streamSimple") {
|
|
308
|
+
return (...[model, context, options]) => this.trackProviderStream((request) => target.streamSimple(model, context, this.withProviderActivation(options, request)));
|
|
309
|
+
}
|
|
310
|
+
if (property === "completeSimple") {
|
|
311
|
+
return (...[model, context, options]) => this.trackProviderPromise((request) => target.completeSimple(model, context, this.withProviderActivation(options, request)));
|
|
312
|
+
}
|
|
313
|
+
if (property === "streamDeferred") {
|
|
314
|
+
return (...[model, handle, options]) => this.trackProviderStream((request) => target.streamDeferred(model, handle, this.withProviderActivation(options, request)));
|
|
315
|
+
}
|
|
316
|
+
const value = Reflect.get(target, property, target);
|
|
317
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
}
|
|
235
321
|
toHarnessTools(tools) {
|
|
236
322
|
return tools.map((tool) => (isHarnessTool(tool) ? tool : adaptAgentTool(tool)));
|
|
237
323
|
}
|
|
@@ -239,7 +325,7 @@ export class MikanAgentSession {
|
|
|
239
325
|
if (this.harness)
|
|
240
326
|
return;
|
|
241
327
|
this.harness = await this.sessionStore.createHarness({
|
|
242
|
-
models: this.options.models.models,
|
|
328
|
+
models: this.trackedModels(this.options.models.models),
|
|
243
329
|
model: this.model,
|
|
244
330
|
thinkingLevel: this.options.thinkingLevel,
|
|
245
331
|
tools: this.toHarnessTools(this.options.tools),
|
|
@@ -249,17 +335,15 @@ export class MikanAgentSession {
|
|
|
249
335
|
compaction: this.settings.compaction,
|
|
250
336
|
});
|
|
251
337
|
this.lane = await this.harness.lane("main", TODO_CONTEXT);
|
|
252
|
-
// Restored lanes retain their old configuration; the runtime's selected
|
|
253
|
-
// model and thinking level apply to this session wrapper.
|
|
254
338
|
await this.lane.setModel({ provider: this.model.provider, modelId: this.model.id }, TODO_CONTEXT);
|
|
255
339
|
await this.lane.setThinkingLevel(this.options.thinkingLevel, TODO_CONTEXT);
|
|
256
|
-
this.harness.hooks.on("before_request", async () => {
|
|
340
|
+
this.harness.hooks.on("before_request", async (event) => {
|
|
257
341
|
if (!(await this.checkCallBudget()))
|
|
258
342
|
return undefined;
|
|
343
|
+
this.pendingProviderRequest = { token: Symbol("provider-request"), runId: event.runId };
|
|
259
344
|
this.tally.llmCalls += 1;
|
|
260
345
|
return undefined;
|
|
261
346
|
});
|
|
262
|
-
// A handoff must never share a batch with effects in the parent session.
|
|
263
347
|
this.harness.hooks.on("before_tool", () => {
|
|
264
348
|
const assistant = this.transcript.findLast((message) => message.role === "assistant");
|
|
265
349
|
const calls = assistant?.role === "assistant"
|
|
@@ -456,7 +540,7 @@ export class MikanAgentSession {
|
|
|
456
540
|
if (this.budgetExceededReason)
|
|
457
541
|
return;
|
|
458
542
|
this.budgetExceededReason = reason;
|
|
459
|
-
this.abort();
|
|
543
|
+
this.abort(reason);
|
|
460
544
|
await this.emit({
|
|
461
545
|
type: "budget_exceeded",
|
|
462
546
|
reason,
|
|
@@ -512,23 +596,7 @@ export const DEFAULT_RETRY_SETTINGS = {
|
|
|
512
596
|
maxRetries: 3,
|
|
513
597
|
baseDelayMs: 2000,
|
|
514
598
|
};
|
|
515
|
-
/**
|
|
516
|
-
* Per-run resource ceilings — the harness's external circuit breakers.
|
|
517
|
-
*
|
|
518
|
-
* An LLM cannot reliably decide on its own when to stop (the halting problem),
|
|
519
|
-
* so a runaway run has to be stopped from the outside. When any populated cap
|
|
520
|
-
* is exceeded, the run is aborted and a `budget_exceeded` event is emitted.
|
|
521
|
-
* Every field is a cap on a single `prompt()` call; an undefined field means
|
|
522
|
-
* "no cap on that axis". Interactive runs are gated turn-by-turn by a human,
|
|
523
|
-
* so they default to uncapped; autonomous runs (scheduled events, triggers)
|
|
524
|
-
* pass {@link DEFAULT_EVENT_BUDGET}, where nobody is watching the loop.
|
|
525
|
-
*/
|
|
526
|
-
/** Interactive runs are human-gated per turn — no automatic ceiling by default. */
|
|
527
599
|
export const DEFAULT_BUDGET_SETTINGS = {};
|
|
528
|
-
/**
|
|
529
|
-
* Ceiling for autonomous (event / trigger) runs, where no human is watching
|
|
530
|
-
* the loop. Deliberately generous — it is a stop-loss, not a target.
|
|
531
|
-
*/
|
|
532
600
|
export const DEFAULT_EVENT_BUDGET = {
|
|
533
601
|
maxDurationMs: 10 * 60 * 1000,
|
|
534
602
|
maxLlmCalls: 50,
|
|
@@ -541,12 +609,6 @@ export function resolveHarnessSettings(overrides) {
|
|
|
541
609
|
budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },
|
|
542
610
|
};
|
|
543
611
|
}
|
|
544
|
-
/**
|
|
545
|
-
* Harness-wide usage accounting: parent-session assistant turns, compaction
|
|
546
|
-
* completions, and subagent folds all accumulate through these helpers.
|
|
547
|
-
* `SubagentUsage` (public surface) is an alias of pi-ai's `Usage`; the
|
|
548
|
-
* aggregation rules here are not subagent-specific.
|
|
549
|
-
*/
|
|
550
612
|
export function createEmptyUsage() {
|
|
551
613
|
return {
|
|
552
614
|
input: 0,
|
|
@@ -1 +1 @@
|
|
|
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 { ImageContent, Model, Api, Usage } 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\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 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 /** Bind delegated spend to its owning prompt, even when cleanup finishes late. */\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 /** Resume an operation left open by a previous process using Pi's recovery rules. */\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.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 // Pi owns admission, retries, compaction, persistence, and the tool loop.\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 // The assistant error is already persisted and presented when present.\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.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 /** Pi's durable cancellation gate stops providers, tools, retries, and summaries. */\n abort(): void {\n if (!this.runActive) return;\n this.runAborted = true;\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n this.requestCancellation();\n }\n\n private requestCancellation(): void {\n if (!this.lane || !this.operationId || this.cancellation) return;\n // Do not await a lane mutation inside an event listener: Pi serializes event\n // delivery, and the abort mutation itself emits another event. The native\n // gate closes synchronously; prompt() drains the mutation before releasing ownership.\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 /** Upgrade mikan's own `AgentTool`s; harness-native tools pass through. */\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.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 // Restored lanes retain their old configuration; the runtime's selected\n // model and thinking level apply to this session wrapper.\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 () => {\n if (!(await this.checkCallBudget())) return undefined;\n this.tally.llmCalls += 1;\n return undefined;\n });\n // A handoff must never share a batch with effects in the parent session.\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();\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\n/**\n * Per-run resource ceilings — the harness's external circuit breakers.\n *\n * An LLM cannot reliably decide on its own when to stop (the halting problem),\n * so a runaway run has to be stopped from the outside. When any populated cap\n * is exceeded, the run is aborted and a `budget_exceeded` event is emitted.\n * Every field is a cap on a single `prompt()` call; an undefined field means\n * \"no cap on that axis\". Interactive runs are gated turn-by-turn by a human,\n * so they default to uncapped; autonomous runs (scheduled events, triggers)\n * pass {@link DEFAULT_EVENT_BUDGET}, where nobody is watching the loop.\n */\n/** Interactive runs are human-gated per turn — no automatic ceiling by default. */\nexport const DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\n/**\n * Ceiling for autonomous (event / trigger) runs, where no human is watching\n * the loop. Deliberately generous — it is a stop-loss, not a target.\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\n/**\n * Harness-wide usage accounting: parent-session assistant turns, compaction\n * completions, and subagent folds all accumulate through these helpers.\n * `SubagentUsage` (public surface) is an alias of pi-ai's `Usage`; the\n * aggregation rules here are not subagent-specific.\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\";\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"]}
|
package/dist/harness/skills.d.ts
CHANGED
|
@@ -12,34 +12,12 @@ interface Frontmatter {
|
|
|
12
12
|
values: Record<string, string>;
|
|
13
13
|
body: string;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Parse simple `key: value` YAML frontmatter delimited by `---` lines.
|
|
17
|
-
* Quoted values are unquoted; nested structures are not supported.
|
|
18
|
-
*/
|
|
19
15
|
export declare function parseFrontmatter(content: string): Frontmatter;
|
|
20
|
-
/** Exposed so the admin portal can validate a skill draft before writing it. */
|
|
21
16
|
export declare function validateSkill(name: string, description: string): string[];
|
|
22
|
-
/**
|
|
23
|
-
* Load skills from a directory tree.
|
|
24
|
-
* - A directory containing `SKILL.md` is a skill root; no further recursion.
|
|
25
|
-
* - Direct `.md` children of the top-level directory load as skills.
|
|
26
|
-
* - Dot-directories and `node_modules` are skipped.
|
|
27
|
-
*/
|
|
28
17
|
export declare function loadSkillsFromDir(options: {
|
|
29
18
|
dir: string;
|
|
30
19
|
source: string;
|
|
31
|
-
/**
|
|
32
|
-
* Refuse to follow symlinks on any path this load would read, skipping the
|
|
33
|
-
* offending entry with a `code: "symlink"` diagnostic instead of loading
|
|
34
|
-
* it. For untrusted trees (conversation offices) the host must never
|
|
35
|
-
* follow an agent-created link; entries the loader never reads — dot
|
|
36
|
-
* directories, vendored node_modules — cannot disqualify anything.
|
|
37
|
-
*/
|
|
38
20
|
rejectSymlinks?: boolean;
|
|
39
21
|
}): LoadSkillsResult;
|
|
40
|
-
/**
|
|
41
|
-
* Format skills for a system prompt using the Agent Skills XML block.
|
|
42
|
-
* Skills with `disableModelInvocation` are excluded.
|
|
43
|
-
*/
|
|
44
22
|
export declare function formatSkillsForPrompt(skills: MikanSkill[]): string;
|
|
45
23
|
//# 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,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/harness/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA+B9D,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;AACD,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,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"}
|