@geminixiang/mikan 1.0.0-beta.4 → 1.0.0-beta.41
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 +714 -0
- package/README.md +99 -36
- package/dist/adapter.d.ts +11 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +18 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +6 -7
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +88 -122
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +33 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +32 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +3 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +66 -217
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +3 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +86 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +89 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +653 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +314 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +19 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +12 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +101 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +28 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +91 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +406 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +57 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +33 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +56 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +19 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +105 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +21 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +21 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +17 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +373 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js +2 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/intake.d.ts +16 -5
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +86 -23
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +37 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +164 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- package/dist/adapters/progressive-renderer.d.ts +7 -0
- package/dist/adapters/progressive-renderer.d.ts.map +1 -0
- package/dist/adapters/progressive-renderer.js +440 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +23 -10
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +60 -22
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +101 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +204 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +14 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +105 -147
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +95 -13
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +545 -211
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +11 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +197 -323
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +7 -11
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +35 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +56 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- package/dist/adapters/slack/tool-pack.d.ts +11 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +45 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/attach.js +1 -1
- package/dist/adapters/slack/tools/attach.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +106 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +40 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +8 -9
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +115 -163
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +2 -0
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +53 -188
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +132 -12
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent-events.d.ts +3 -2
- package/dist/agent-events.d.ts.map +1 -1
- package/dist/agent-events.js +19 -1
- package/dist/agent-events.js.map +1 -1
- package/dist/agent.d.ts +14 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +841 -298
- package/dist/agent.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +25 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +61 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +5 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +117 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/{download.js → cli/download.js} +2 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-dev.d.ts +2 -0
- package/dist/cli/ext-dev.d.ts.map +1 -0
- package/dist/cli/ext-dev.js +188 -0
- package/dist/cli/ext-dev.js.map +1 -0
- package/dist/cli/ext.d.ts +2 -0
- package/dist/cli/ext.d.ts.map +1 -0
- package/dist/cli/ext.js +324 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/cli/office.d.ts +2 -0
- package/dist/cli/office.d.ts.map +1 -0
- package/dist/cli/office.js +91 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/types.d.ts +16 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +3 -2
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +5 -9
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts +18 -6
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +64 -14
- package/dist/commands/extensions.js.map +1 -1
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +40 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +37 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +151 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts +2 -3
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +63 -24
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +15 -3
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/registry.d.ts +2 -2
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +1 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +83 -33
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/session-view.d.ts.map +1 -1
- package/dist/commands/session-view.js +6 -3
- package/dist/commands/session-view.js.map +1 -1
- package/dist/commands/types.d.ts +79 -7
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +23 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +222 -135
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +30 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +233 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +20 -81
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +7 -8
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +106 -110
- package/dist/execution-resolver.js.map +1 -1
- package/dist/extension-schedules.d.ts +31 -0
- package/dist/extension-schedules.d.ts.map +1 -0
- package/dist/extension-schedules.js +229 -0
- package/dist/extension-schedules.js.map +1 -0
- package/dist/harness/auth.d.ts +2 -1
- package/dist/harness/auth.d.ts.map +1 -1
- package/dist/harness/auth.js +11 -5
- package/dist/harness/auth.js.map +1 -1
- package/dist/harness/event-format.d.ts +27 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +160 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +27 -49
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +486 -130
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +107 -2
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +316 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +482 -42
- package/dist/harness/extensions/types.d.ts.map +1 -1
- package/dist/harness/extensions/types.js.map +1 -1
- package/dist/harness/index.d.ts +18 -8
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +7 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +7 -4
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +46 -24
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +50 -54
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +232 -46
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +11 -5
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +141 -36
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/settings.d.ts +2 -20
- package/dist/harness/settings.d.ts.map +1 -1
- package/dist/harness/settings.js +12 -1
- package/dist/harness/settings.js.map +1 -1
- package/dist/harness/skills.d.ts +10 -29
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +48 -6
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +8 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +299 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent-runner.d.ts +45 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +680 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +267 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage.d.ts +6 -0
- package/dist/harness/usage.d.ts.map +1 -0
- package/dist/harness/usage.js +32 -0
- package/dist/harness/usage.js.map +1 -0
- package/dist/index.d.ts +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -6
- package/dist/index.js.map +1 -1
- package/dist/main.js +391 -127
- package/dist/main.js.map +1 -1
- package/dist/observability/instrument.js +7 -5
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.d.ts +2 -0
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +10 -2
- package/dist/observability/sentry.js.map +1 -1
- package/dist/office/address.d.ts +31 -0
- package/dist/office/address.d.ts.map +1 -0
- package/dist/office/address.js +113 -0
- package/dist/office/address.js.map +1 -0
- package/dist/office/index.d.ts +11 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +11 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/layout.d.ts +27 -0
- package/dist/office/layout.d.ts.map +1 -0
- package/dist/office/layout.js +97 -0
- package/dist/office/layout.js.map +1 -0
- package/dist/office/migration.d.ts +44 -0
- package/dist/office/migration.d.ts.map +1 -0
- package/dist/office/migration.js +255 -0
- package/dist/office/migration.js.map +1 -0
- package/dist/office/registry.d.ts +75 -0
- package/dist/office/registry.d.ts.map +1 -0
- package/dist/office/registry.js +646 -0
- package/dist/office/registry.js.map +1 -0
- package/dist/office/types.d.ts +71 -0
- package/dist/office/types.d.ts.map +1 -0
- package/dist/office/types.js +2 -0
- package/dist/office/types.js.map +1 -0
- package/dist/packages/admin.d.ts +17 -0
- package/dist/packages/admin.d.ts.map +1 -0
- package/dist/packages/admin.js +98 -0
- package/dist/packages/admin.js.map +1 -0
- package/dist/packages/index.d.ts +6 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +6 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/inspect.d.ts +11 -0
- package/dist/packages/inspect.d.ts.map +1 -0
- package/dist/packages/inspect.js +98 -0
- package/dist/packages/inspect.js.map +1 -0
- package/dist/packages/materialize.d.ts +40 -0
- package/dist/packages/materialize.d.ts.map +1 -0
- package/dist/packages/materialize.js +297 -0
- package/dist/packages/materialize.js.map +1 -0
- package/dist/packages/resolve.d.ts +25 -0
- package/dist/packages/resolve.d.ts.map +1 -0
- package/dist/packages/resolve.js +208 -0
- package/dist/packages/resolve.js.map +1 -0
- package/dist/packages/source.d.ts +39 -0
- package/dist/packages/source.d.ts.map +1 -0
- package/dist/packages/source.js +189 -0
- package/dist/packages/source.js.map +1 -0
- package/dist/packages/types.d.ts +104 -0
- package/dist/packages/types.d.ts.map +1 -0
- package/dist/packages/types.js +2 -0
- package/dist/packages/types.js.map +1 -0
- package/dist/provisioner.d.ts +66 -0
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +335 -13
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +562 -118
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +38 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +193 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +66 -7
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +3 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +13 -1
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +4 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +13 -3
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +3 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +13 -2
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin.d.ts +57 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +764 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +18 -3
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +44 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +68 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/image.d.ts.map +1 -1
- package/dist/sandbox/image.js +2 -0
- package/dist/sandbox/image.js.map +1 -1
- package/dist/sandbox/index.d.ts +17 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +37 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +65 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +14 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +68 -1
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +25 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +135 -131
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +9 -0
- package/dist/sessions/conversation-log.d.ts.map +1 -0
- package/dist/sessions/conversation-log.js +50 -0
- package/dist/sessions/conversation-log.js.map +1 -0
- package/dist/sessions/history-line.d.ts +29 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +45 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/rotation.d.ts +2 -0
- package/dist/sessions/rotation.d.ts.map +1 -0
- package/dist/sessions/rotation.js +39 -0
- package/dist/sessions/rotation.js.map +1 -0
- package/dist/sessions/session-key.d.ts +33 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +115 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts +15 -7
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +127 -36
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +19 -5
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +40 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +61 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/subagent-progress.d.ts +39 -0
- package/dist/subagent-progress.d.ts.map +1 -0
- package/dist/subagent-progress.js +225 -0
- package/dist/subagent-progress.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +26 -18
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +14 -13
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/event.d.ts +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/event.js +58 -45
- package/dist/tools/event.js.map +1 -1
- package/dist/tools/generate-image.d.ts +23 -0
- package/dist/tools/generate-image.d.ts.map +1 -0
- package/dist/tools/generate-image.js +65 -0
- package/dist/tools/generate-image.js.map +1 -0
- package/dist/tools/host-fn-tool.d.ts +21 -0
- package/dist/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/tools/host-fn-tool.js +32 -0
- package/dist/tools/host-fn-tool.js.map +1 -0
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +25 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/react.d.ts +15 -0
- package/dist/tools/react.d.ts.map +1 -0
- package/dist/tools/react.js +29 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +39 -33
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +14 -9
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent-slots.d.ts +28 -0
- package/dist/tools/subagent-slots.d.ts.map +1 -0
- package/dist/tools/subagent-slots.js +72 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +61 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +434 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +40 -32
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +2 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts +2 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +6 -9
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +411 -59
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/file-guards.d.ts +9 -0
- package/dist/utils/file-guards.d.ts.map +1 -1
- package/dist/utils/file-guards.js +44 -1
- package/dist/utils/file-guards.js.map +1 -1
- package/dist/vault/disabled.d.ts +9 -0
- package/dist/vault/disabled.d.ts.map +1 -0
- package/dist/vault/disabled.js +25 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts +45 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +127 -36
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +6 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/web/admin/portal.d.ts +31 -3
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +850 -345
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/provider-models.js +1 -1
- package/dist/web/admin/provider-models.js.map +1 -1
- package/dist/web/admin/types.d.ts +23 -3
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/login/oauth.d.ts +2 -3
- package/dist/web/login/oauth.d.ts.map +1 -1
- package/dist/web/login/oauth.js +1 -32
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.d.ts +1 -1
- package/dist/web/login/portal.d.ts.map +1 -1
- package/dist/web/login/portal.js +13 -36
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/login/types.d.ts +0 -11
- package/dist/web/login/types.d.ts.map +1 -1
- package/dist/web/login/types.js.map +1 -1
- package/dist/web/portal-shell.d.ts +21 -0
- package/dist/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → web/portal-shell.js} +67 -2
- package/dist/web/portal-shell.js.map +1 -0
- package/dist/web/server.d.ts +3 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +11 -4
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/portal.d.ts +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +37 -28
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/service.js +61 -18
- package/dist/web/session-view/service.js.map +1 -1
- package/dist/web/session-view/types.d.ts +0 -3
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/dist/web/token-store.js +1 -1
- package/dist/web/token-store.js.map +1 -1
- package/dist/workspace-projection/index.d.ts +10 -0
- package/dist/workspace-projection/index.d.ts.map +1 -0
- package/dist/workspace-projection/index.js +120 -0
- package/dist/workspace-projection/index.js.map +1 -0
- package/dist/workspace-projection/types.d.ts +16 -0
- package/dist/workspace-projection/types.d.ts.map +1 -0
- package/dist/workspace-projection/types.js +2 -0
- package/dist/workspace-projection/types.js.map +1 -0
- package/package.json +68 -37
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/adapters/telegram/html.d.ts +0 -3
- package/dist/adapters/telegram/html.d.ts.map +0 -1
- package/dist/adapters/telegram/html.js +0 -98
- package/dist/adapters/telegram/html.js.map +0 -1
- package/dist/commands/parse.d.ts +0 -7
- package/dist/commands/parse.d.ts.map +0 -1
- package/dist/commands/parse.js +0 -14
- package/dist/commands/parse.js.map +0 -1
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sandbox/path-context.d.ts +0 -3
- package/dist/sandbox/path-context.d.ts.map +0 -1
- package/dist/sandbox/path-context.js +0 -20
- package/dist/sandbox/path-context.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/sessions/metadata.d.ts +0 -3
- package/dist/sessions/metadata.d.ts.map +0 -1
- package/dist/sessions/metadata.js +0 -11
- package/dist/sessions/metadata.js.map +0 -1
- package/dist/sessions/policy.d.ts +0 -6
- package/dist/sessions/policy.d.ts.map +0 -1
- package/dist/sessions/policy.js +0 -23
- package/dist/sessions/policy.js.map +0 -1
- package/dist/store.d.ts +0 -46
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -177
- package/dist/store.js.map +0 -1
- package/dist/tools/truncate.d.ts +0 -33
- package/dist/tools/truncate.d.ts.map +0 -1
- package/dist/tools/truncate.js +0 -184
- package/dist/tools/truncate.js.map +0 -1
- package/dist/utils/date.d.ts +0 -10
- package/dist/utils/date.d.ts.map +0 -1
- package/dist/utils/date.js +0 -23
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/env.d.ts +0 -3
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -12
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/fs-atomic.d.ts +0 -10
- package/dist/utils/fs-atomic.d.ts.map +0 -1
- package/dist/utils/fs-atomic.js +0 -45
- package/dist/utils/fs-atomic.js.map +0 -1
- package/dist/utils/html.d.ts +0 -2
- package/dist/utils/html.d.ts.map +0 -1
- package/dist/utils/html.js +0 -4
- package/dist/utils/html.js.map +0 -1
- package/dist/utils/http-body.d.ts +0 -10
- package/dist/utils/http-body.d.ts.map +0 -1
- package/dist/utils/http-body.js +0 -34
- package/dist/utils/http-body.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- package/dist/web/agent-events/portal.d.ts +0 -3
- package/dist/web/agent-events/portal.d.ts.map +0 -1
- package/dist/web/agent-events/portal.js +0 -18
- package/dist/web/agent-events/portal.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
package/dist/harness/runner.d.ts
CHANGED
|
@@ -14,58 +14,12 @@
|
|
|
14
14
|
* and `auto_retry_start/_end`, preserving the event surface mikan's
|
|
15
15
|
* platform adapters already render.
|
|
16
16
|
*/
|
|
17
|
-
import { Agent, type
|
|
17
|
+
import { Agent, type AgentMessage, type AgentTool } from "@earendil-works/pi-agent-core";
|
|
18
18
|
import { type Api, type ImageContent, type Model } from "@earendil-works/pi-ai";
|
|
19
|
-
import type {
|
|
20
|
-
import type { MikanModels } from "./models.js";
|
|
21
|
-
import { resolveHarnessSettings, type BudgetSettings } from "./settings.js";
|
|
19
|
+
import type { RunOrigin } from "./extensions/types.js";
|
|
22
20
|
import type { SessionStore } from "./session-store.js";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
summary: string;
|
|
26
|
-
firstKeptEntryId: string;
|
|
27
|
-
tokensBefore: number;
|
|
28
|
-
}
|
|
29
|
-
export type HarnessEvent = AgentEvent | {
|
|
30
|
-
type: "compaction_start";
|
|
31
|
-
reason: CompactionReason;
|
|
32
|
-
} | {
|
|
33
|
-
type: "compaction_end";
|
|
34
|
-
reason: CompactionReason;
|
|
35
|
-
result?: CompactionResultSummary;
|
|
36
|
-
aborted: boolean;
|
|
37
|
-
errorMessage?: string;
|
|
38
|
-
} | {
|
|
39
|
-
type: "auto_retry_start";
|
|
40
|
-
attempt: number;
|
|
41
|
-
maxAttempts: number;
|
|
42
|
-
delayMs: number;
|
|
43
|
-
errorMessage: string;
|
|
44
|
-
} | {
|
|
45
|
-
type: "auto_retry_end";
|
|
46
|
-
success: boolean;
|
|
47
|
-
attempt: number;
|
|
48
|
-
finalError?: string;
|
|
49
|
-
} | {
|
|
50
|
-
type: "budget_exceeded";
|
|
51
|
-
/** Which cap was hit, e.g. "cost 2.01 USD > 2 USD limit". */
|
|
52
|
-
reason: string;
|
|
53
|
-
tokens: number;
|
|
54
|
-
costUsd: number;
|
|
55
|
-
llmCalls: number;
|
|
56
|
-
durationMs: number;
|
|
57
|
-
};
|
|
58
|
-
export type HarnessEventListener = (event: HarnessEvent) => void | Promise<void>;
|
|
59
|
-
export interface MikanAgentSessionOptions {
|
|
60
|
-
systemPrompt: string;
|
|
61
|
-
model: Model<Api>;
|
|
62
|
-
thinkingLevel: ThinkingLevel;
|
|
63
|
-
tools: AgentTool[];
|
|
64
|
-
models: MikanModels;
|
|
65
|
-
sessionStore: SessionStore;
|
|
66
|
-
settings?: Parameters<typeof resolveHarnessSettings>[0];
|
|
67
|
-
extensions?: ExtensionRegistry;
|
|
68
|
-
}
|
|
21
|
+
import type { BudgetSettings, HarnessEventListener, MikanAgentSessionOptions, PromptBlockedOutcome, SubagentUsage, SubagentUsageSink } from "./types.js";
|
|
22
|
+
export type { CompactionReason, HarnessEvent, HarnessEventListener, MikanAgentSessionOptions, PromptBlockedOutcome, } from "./types.js";
|
|
69
23
|
export declare class MikanAgentSession {
|
|
70
24
|
readonly agent: Agent;
|
|
71
25
|
readonly sessionStore: SessionStore;
|
|
@@ -77,48 +31,90 @@ export declare class MikanAgentSession {
|
|
|
77
31
|
private overflowRecoveryAttempted;
|
|
78
32
|
private retryAbortController;
|
|
79
33
|
private compactionAbortController;
|
|
34
|
+
private runActive;
|
|
80
35
|
private tally;
|
|
81
36
|
private runBudget;
|
|
82
37
|
private budgetExceededReason;
|
|
38
|
+
private runOrigin;
|
|
83
39
|
constructor(options: MikanAgentSessionOptions);
|
|
84
40
|
/** Conversation transcript currently held by the agent. */
|
|
85
41
|
get messages(): AgentMessage[];
|
|
86
42
|
get model(): Model<Api>;
|
|
43
|
+
/** Whether this session currently owns a prompt, including pre-model hooks. */
|
|
44
|
+
get isActiveRun(): boolean;
|
|
45
|
+
/** Resource totals and terminal budget state from the most recent prompt. */
|
|
46
|
+
getLastRunStats(): Readonly<{
|
|
47
|
+
usage: SubagentUsage;
|
|
48
|
+
tokens: number;
|
|
49
|
+
costUsd: number;
|
|
50
|
+
llmCalls: number;
|
|
51
|
+
toolCalls: number;
|
|
52
|
+
toolCallCounts: Record<string, number>;
|
|
53
|
+
durationMs: number;
|
|
54
|
+
budgetExceededReason?: string;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Fold spend incurred outside this session's own LLM calls — e.g. subagent
|
|
58
|
+
* runs launched by a tool during the current prompt — into the run tally
|
|
59
|
+
* and enforce the run budget at the fold itself: a fold that lands over a
|
|
60
|
+
* resource ceiling aborts the run now instead of waiting for a next
|
|
61
|
+
* assistant message that may never come (and would be paid for). Complete
|
|
62
|
+
* usage is folded; external runs are not this session's turns.
|
|
63
|
+
*/
|
|
64
|
+
/** Capture a usage sink bound to the tally owned by the current prompt run. */
|
|
65
|
+
captureExternalUsageSink(): SubagentUsageSink;
|
|
66
|
+
foldExternalUsage(usage: SubagentUsage): Promise<void>;
|
|
87
67
|
subscribe(listener: HarnessEventListener): () => void;
|
|
88
68
|
/** Replace the agent transcript from the persisted session tree. */
|
|
89
69
|
reloadFromSession(): number;
|
|
90
70
|
/**
|
|
91
71
|
* Send a user prompt and run the agent loop to completion, including
|
|
92
72
|
* automatic retries and compaction. Resolves when the turn (and any
|
|
93
|
-
* recovery continuations) settles.
|
|
73
|
+
* recovery continuations) settles. Returns a blocked outcome when a
|
|
74
|
+
* `before_agent_start` extension blocked the turn — the model was never
|
|
75
|
+
* called and nothing was persisted.
|
|
94
76
|
*
|
|
95
77
|
* @param options.budget Per-run resource ceilings that override the session
|
|
96
78
|
* defaults. Autonomous (event / trigger) runs should pass a budget so a
|
|
97
79
|
* runaway loop is stopped even with no human watching.
|
|
80
|
+
* @param options.origin Platform provenance forwarded to extension hooks.
|
|
98
81
|
*/
|
|
99
82
|
prompt(text: string, options?: {
|
|
100
83
|
images?: ImageContent[];
|
|
101
84
|
budget?: BudgetSettings;
|
|
102
|
-
|
|
85
|
+
origin?: RunOrigin;
|
|
86
|
+
tools?: AgentTool[];
|
|
87
|
+
}): Promise<PromptBlockedOutcome | undefined>;
|
|
88
|
+
private runPrompt;
|
|
103
89
|
/** Abort the active run, pending retry backoff, and in-flight compaction. */
|
|
104
90
|
abort(): void;
|
|
105
91
|
private ensureAuthConfigured;
|
|
106
92
|
private emit;
|
|
107
93
|
private handleAgentEvent;
|
|
108
|
-
/** Fold one assistant
|
|
94
|
+
/** Fold one assistant completion's usage into the running per-run tally. */
|
|
109
95
|
private recordUsage;
|
|
110
96
|
/** Compare the tally against the run budget; abort the run when a cap is exceeded. */
|
|
111
97
|
private enforceBudget;
|
|
98
|
+
/** Mark the run over budget, notify listeners and extensions, abort the agent. */
|
|
99
|
+
private exceedBudget;
|
|
112
100
|
private overBudgetReason;
|
|
101
|
+
/** The message-independent budget checks, shared with external-spend folds. */
|
|
102
|
+
private resourceOverBudgetReason;
|
|
113
103
|
private findLastAssistantMessage;
|
|
114
104
|
/** Decide what to do after a run settles. Returns true when the agent should continue. */
|
|
115
105
|
private handlePostRun;
|
|
116
106
|
private handleOverflow;
|
|
117
107
|
private checkThresholdCompaction;
|
|
118
108
|
private runCompaction;
|
|
109
|
+
/**
|
|
110
|
+
* Compaction can make one completion, or two when its cut splits a turn.
|
|
111
|
+
* Intercept only those opaque upstream calls so each returned assistant
|
|
112
|
+
* message is tallied exactly once. A call at maxLlmCalls is not started;
|
|
113
|
+
* the cap is otherwise enforced before any post-compaction continuation.
|
|
114
|
+
*/
|
|
115
|
+
private createCompactionModels;
|
|
119
116
|
private isRetryableError;
|
|
120
117
|
private prepareRetry;
|
|
121
118
|
private dropTrailingErrorMessage;
|
|
122
119
|
}
|
|
123
|
-
export {};
|
|
124
120
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/harness/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/harness/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,KAAK,EASL,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,GAAG,EAER,KAAK,YAAY,EACjB,KAAK,KAAK,EAGX,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EAId,oBAAoB,EAEpB,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAmCpB,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,yBAAyB,CAA8B;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAMX;IACF,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,SAAS,CAAwB;IAEzC,YAAY,OAAO,EAAE,wBAAwB,EAoD5C;IAED,2DAA2D;IAC3D,IAAI,QAAQ,IAAI,YAAY,EAAE,CAE7B;IAED,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAEtB;IAED,+EAA+E;IAC/E,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,6EAA6E;IAC7E,eAAe,IAAI,QAAQ,CAAC;QAC1B,KAAK,EAAE,aAAa,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,UAAU,EAAE,MAAM,CAAC;QACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC,CAWD;IAED;;;;;;;OAOG;IACH,+EAA+E;IAC/E,wBAAwB,IAAI,iBAAiB,CAQ5C;IAEK,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAED,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAGpD;IAED,oEAAoE;IACpE,iBAAiB,IAAI,MAAM,CAM1B;IAED;;;;;;;;;;;OAWG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,CAAC,EAAE,SAAS,CAAC;QACnB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;KACrB,GACA,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAe3C;YAEa,SAAS;IAgGvB,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAIZ;YAEa,oBAAoB;YASpB,IAAI;YAaJ,gBAAgB;IAiD9B,4EAA4E;IAC5E,OAAO,CAAC,WAAW;IAOnB,sFAAsF;YACxE,aAAa;IAO3B,kFAAkF;YACpE,YAAY;IAyB1B,OAAO,CAAC,gBAAgB;IAUxB,+EAA+E;IAC/E,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,wBAAwB;IAShC,0FAA0F;YAC5E,aAAa;YAsBb,cAAc;YAgBd,wBAAwB;YAiBxB,aAAa;IA2F3B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;YAKV,YAAY;IA+C1B,OAAO,CAAC,wBAAwB;CAMjC"}
|
package/dist/harness/runner.js
CHANGED
|
@@ -18,6 +18,7 @@ import { Agent, calculateContextTokens, compact, convertToLlm, estimateContextTo
|
|
|
18
18
|
import { isContextOverflow, } from "@earendil-works/pi-ai";
|
|
19
19
|
import * as log from "../log.js";
|
|
20
20
|
import { resolveHarnessSettings } from "./settings.js";
|
|
21
|
+
import { addSubagentUsage, copySubagentUsage, createEmptySubagentUsage } from "./usage.js";
|
|
21
22
|
// Transient provider failures worth retrying: overload/rate-limit responses,
|
|
22
23
|
// 5xx statuses, and network/stream interruptions.
|
|
23
24
|
const RETRYABLE_ERROR_PATTERN = /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i;
|
|
@@ -43,7 +44,14 @@ export class MikanAgentSession {
|
|
|
43
44
|
this.listeners = new Set();
|
|
44
45
|
this.retryAttempt = 0;
|
|
45
46
|
this.overflowRecoveryAttempted = false;
|
|
46
|
-
this.
|
|
47
|
+
this.runActive = false;
|
|
48
|
+
this.tally = {
|
|
49
|
+
usage: createEmptySubagentUsage(),
|
|
50
|
+
llmCalls: 0,
|
|
51
|
+
toolCalls: 0,
|
|
52
|
+
toolCallCounts: {},
|
|
53
|
+
startedAt: 0,
|
|
54
|
+
};
|
|
47
55
|
this.runBudget = {};
|
|
48
56
|
this.models = options.models;
|
|
49
57
|
this.sessionStore = options.sessionStore;
|
|
@@ -58,6 +66,11 @@ export class MikanAgentSession {
|
|
|
58
66
|
tools,
|
|
59
67
|
},
|
|
60
68
|
convertToLlm,
|
|
69
|
+
transformContext: async (messages) => {
|
|
70
|
+
if (!this.extensions?.hasHandlers("context"))
|
|
71
|
+
return messages;
|
|
72
|
+
return this.extensions.emitContext({ messages, origin: this.runOrigin });
|
|
73
|
+
},
|
|
61
74
|
streamFn: (model, context, streamOptions) => this.models.models.streamSimple(model, context, streamOptions),
|
|
62
75
|
beforeToolCall: async ({ toolCall, args }) => {
|
|
63
76
|
if (!this.extensions?.hasHandlers("tool_call"))
|
|
@@ -66,20 +79,26 @@ export class MikanAgentSession {
|
|
|
66
79
|
toolCallId: toolCall.id,
|
|
67
80
|
toolName: toolCall.name,
|
|
68
81
|
args,
|
|
82
|
+
origin: this.runOrigin,
|
|
69
83
|
});
|
|
70
84
|
return result ?? undefined;
|
|
71
85
|
},
|
|
72
86
|
afterToolCall: async ({ toolCall, args, result, isError }) => {
|
|
73
|
-
if (this.extensions?.hasHandlers("tool_result"))
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
if (!this.extensions?.hasHandlers("tool_result"))
|
|
88
|
+
return undefined;
|
|
89
|
+
// Chained extension rewrites (redaction, truncation) become a
|
|
90
|
+
// pi-agent-core AfterToolCallResult override; undefined keeps the
|
|
91
|
+
// executed result untouched.
|
|
92
|
+
return this.extensions.emitToolResult({
|
|
93
|
+
toolCallId: toolCall.id,
|
|
94
|
+
toolName: toolCall.name,
|
|
95
|
+
args,
|
|
96
|
+
content: result.content,
|
|
97
|
+
details: result.details,
|
|
98
|
+
isError,
|
|
99
|
+
usage: result.usage,
|
|
100
|
+
origin: this.runOrigin,
|
|
101
|
+
});
|
|
83
102
|
},
|
|
84
103
|
});
|
|
85
104
|
this.agent.subscribe(async (event) => {
|
|
@@ -93,6 +112,46 @@ export class MikanAgentSession {
|
|
|
93
112
|
get model() {
|
|
94
113
|
return this.agent.state.model;
|
|
95
114
|
}
|
|
115
|
+
/** Whether this session currently owns a prompt, including pre-model hooks. */
|
|
116
|
+
get isActiveRun() {
|
|
117
|
+
return this.runActive;
|
|
118
|
+
}
|
|
119
|
+
/** Resource totals and terminal budget state from the most recent prompt. */
|
|
120
|
+
getLastRunStats() {
|
|
121
|
+
return {
|
|
122
|
+
usage: copySubagentUsage(this.tally.usage),
|
|
123
|
+
tokens: this.tally.usage.totalTokens,
|
|
124
|
+
costUsd: this.tally.usage.cost.total,
|
|
125
|
+
llmCalls: this.tally.llmCalls,
|
|
126
|
+
toolCalls: this.tally.toolCalls,
|
|
127
|
+
toolCallCounts: { ...this.tally.toolCallCounts },
|
|
128
|
+
durationMs: this.tally.startedAt > 0 ? Date.now() - this.tally.startedAt : 0,
|
|
129
|
+
...(this.budgetExceededReason ? { budgetExceededReason: this.budgetExceededReason } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Fold spend incurred outside this session's own LLM calls — e.g. subagent
|
|
134
|
+
* runs launched by a tool during the current prompt — into the run tally
|
|
135
|
+
* and enforce the run budget at the fold itself: a fold that lands over a
|
|
136
|
+
* resource ceiling aborts the run now instead of waiting for a next
|
|
137
|
+
* assistant message that may never come (and would be paid for). Complete
|
|
138
|
+
* usage is folded; external runs are not this session's turns.
|
|
139
|
+
*/
|
|
140
|
+
/** Capture a usage sink bound to the tally owned by the current prompt run. */
|
|
141
|
+
captureExternalUsageSink() {
|
|
142
|
+
const tally = this.tally;
|
|
143
|
+
return async (usage) => {
|
|
144
|
+
addSubagentUsage(tally.usage, usage);
|
|
145
|
+
if (this.tally !== tally || this.budgetExceededReason || !this.runActive)
|
|
146
|
+
return;
|
|
147
|
+
const reason = this.resourceOverBudgetReason();
|
|
148
|
+
if (reason)
|
|
149
|
+
await this.exceedBudget(reason);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async foldExternalUsage(usage) {
|
|
153
|
+
await this.captureExternalUsageSink()(usage);
|
|
154
|
+
}
|
|
96
155
|
subscribe(listener) {
|
|
97
156
|
this.listeners.add(listener);
|
|
98
157
|
return () => this.listeners.delete(listener);
|
|
@@ -108,53 +167,107 @@ export class MikanAgentSession {
|
|
|
108
167
|
/**
|
|
109
168
|
* Send a user prompt and run the agent loop to completion, including
|
|
110
169
|
* automatic retries and compaction. Resolves when the turn (and any
|
|
111
|
-
* recovery continuations) settles.
|
|
170
|
+
* recovery continuations) settles. Returns a blocked outcome when a
|
|
171
|
+
* `before_agent_start` extension blocked the turn — the model was never
|
|
172
|
+
* called and nothing was persisted.
|
|
112
173
|
*
|
|
113
174
|
* @param options.budget Per-run resource ceilings that override the session
|
|
114
175
|
* defaults. Autonomous (event / trigger) runs should pass a budget so a
|
|
115
176
|
* runaway loop is stopped even with no human watching.
|
|
177
|
+
* @param options.origin Platform provenance forwarded to extension hooks.
|
|
116
178
|
*/
|
|
117
179
|
async prompt(text, options) {
|
|
118
|
-
if (this.
|
|
180
|
+
if (this.runActive) {
|
|
119
181
|
throw new Error("Agent is already processing a prompt");
|
|
120
182
|
}
|
|
183
|
+
this.runActive = true;
|
|
184
|
+
const runSystemPrompt = this.agent.state.systemPrompt;
|
|
185
|
+
const runTools = this.agent.state.tools;
|
|
186
|
+
if (options?.tools)
|
|
187
|
+
this.agent.state.tools = options.tools;
|
|
188
|
+
try {
|
|
189
|
+
return await this.runPrompt(text, runSystemPrompt, options);
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
this.agent.state.systemPrompt = runSystemPrompt;
|
|
193
|
+
this.agent.state.tools = runTools;
|
|
194
|
+
this.runActive = false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async runPrompt(text, runSystemPrompt, options) {
|
|
121
198
|
const model = this.agent.state.model;
|
|
122
199
|
await this.ensureAuthConfigured(model);
|
|
123
200
|
this.retryAttempt = 0;
|
|
124
201
|
this.overflowRecoveryAttempted = false;
|
|
125
202
|
this.runBudget = { ...this.settings.budget, ...options?.budget };
|
|
126
203
|
this.budgetExceededReason = undefined;
|
|
127
|
-
this.tally = {
|
|
204
|
+
this.tally = {
|
|
205
|
+
usage: createEmptySubagentUsage(),
|
|
206
|
+
llmCalls: 0,
|
|
207
|
+
toolCalls: 0,
|
|
208
|
+
toolCallCounts: {},
|
|
209
|
+
startedAt: Date.now(),
|
|
210
|
+
};
|
|
211
|
+
this.runOrigin = options?.origin;
|
|
128
212
|
// A previous turn may have ended over the threshold (for example after an
|
|
129
213
|
// abort); compact before adding new context on top.
|
|
130
214
|
const lastAssistant = this.findLastAssistantMessage();
|
|
131
215
|
if (lastAssistant && lastAssistant.stopReason !== "error") {
|
|
132
216
|
await this.checkThresholdCompaction(lastAssistant);
|
|
133
217
|
}
|
|
134
|
-
let
|
|
218
|
+
let promptText = text;
|
|
219
|
+
let systemPrompt = runSystemPrompt;
|
|
135
220
|
if (this.extensions?.hasHandlers("before_agent_start")) {
|
|
136
|
-
const result = await this.extensions.
|
|
137
|
-
prompt:
|
|
221
|
+
const result = await this.extensions.emitBeforeAgentStart({
|
|
222
|
+
prompt: promptText,
|
|
138
223
|
images: options?.images,
|
|
139
224
|
systemPrompt,
|
|
225
|
+
origin: this.runOrigin,
|
|
140
226
|
});
|
|
141
|
-
if (result?.
|
|
227
|
+
if (result?.block) {
|
|
228
|
+
// Blocked before agent.prompt(): the user message never enters the
|
|
229
|
+
// transcript or session store, so the blocked turn leaves no trace.
|
|
230
|
+
log.logInfo(`Extension blocked turn${result.reason ? `: ${result.reason}` : ""}`);
|
|
231
|
+
return { blocked: true, reason: result.reason };
|
|
232
|
+
}
|
|
233
|
+
if (result?.prompt !== undefined && result.prompt !== promptText) {
|
|
234
|
+
log.logInfo(`Extension rewrote user prompt: ${promptText.length} → ${result.prompt.length} chars`);
|
|
235
|
+
promptText = result.prompt;
|
|
236
|
+
}
|
|
237
|
+
if (result?.systemPrompt && result.systemPrompt !== systemPrompt) {
|
|
238
|
+
// An extension rewrote the system prompt for this turn. Log the new
|
|
239
|
+
// size so the diagnostic in agent.ts (which logs the pre-hook prompt)
|
|
240
|
+
// isn't mistaken for the final prompt sent to the model.
|
|
241
|
+
log.logInfo(`Extension rewrote system prompt: ${systemPrompt.length} → ${result.systemPrompt.length} chars`);
|
|
142
242
|
systemPrompt = result.systemPrompt;
|
|
143
243
|
this.agent.state.systemPrompt = systemPrompt;
|
|
144
244
|
}
|
|
145
245
|
}
|
|
146
246
|
const userMessage = {
|
|
147
247
|
role: "user",
|
|
148
|
-
content: [{ type: "text", text }, ...(options?.images ?? [])],
|
|
248
|
+
content: [{ type: "text", text: promptText }, ...(options?.images ?? [])],
|
|
149
249
|
timestamp: Date.now(),
|
|
150
250
|
};
|
|
151
251
|
await this.agent.prompt([userMessage]);
|
|
152
252
|
while (await this.handlePostRun()) {
|
|
153
253
|
await this.agent.continue();
|
|
154
254
|
}
|
|
255
|
+
// The turn settled on an error (retries exhausted or not retryable):
|
|
256
|
+
// give monitoring extensions the final failure, once per turn.
|
|
257
|
+
const settled = this.findLastAssistantMessage();
|
|
258
|
+
if (settled?.stopReason === "error" && this.extensions?.hasHandlers("agent_error")) {
|
|
259
|
+
await this.extensions.emit("agent_error", {
|
|
260
|
+
errorMessage: settled.errorMessage || "Unknown error",
|
|
261
|
+
origin: this.runOrigin,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
155
264
|
if (this.extensions?.hasHandlers("turn_end")) {
|
|
156
|
-
await this.extensions.emit("turn_end", {
|
|
265
|
+
await this.extensions.emit("turn_end", {
|
|
266
|
+
messages: this.agent.state.messages,
|
|
267
|
+
origin: this.runOrigin,
|
|
268
|
+
});
|
|
157
269
|
}
|
|
270
|
+
return undefined;
|
|
158
271
|
}
|
|
159
272
|
/** Abort the active run, pending retry backoff, and in-flight compaction. */
|
|
160
273
|
abort() {
|
|
@@ -179,10 +292,25 @@ export class MikanAgentSession {
|
|
|
179
292
|
}
|
|
180
293
|
}
|
|
181
294
|
async handleAgentEvent(event) {
|
|
182
|
-
|
|
183
|
-
|
|
295
|
+
if (event.type === "tool_execution_start") {
|
|
296
|
+
this.tally.toolCalls += 1;
|
|
297
|
+
this.tally.toolCallCounts[event.toolName] =
|
|
298
|
+
(this.tally.toolCallCounts[event.toolName] ?? 0) + 1;
|
|
299
|
+
}
|
|
300
|
+
if (event.type !== "message_end") {
|
|
301
|
+
await this.emit(event);
|
|
184
302
|
return;
|
|
185
|
-
|
|
303
|
+
}
|
|
304
|
+
let message = event.message;
|
|
305
|
+
if (this.extensions?.hasHandlers("message_end")) {
|
|
306
|
+
const result = await this.extensions.emitMessageEnd({ message, origin: this.runOrigin });
|
|
307
|
+
if (result?.message) {
|
|
308
|
+
for (const key of Object.keys(message)) {
|
|
309
|
+
delete message[key];
|
|
310
|
+
}
|
|
311
|
+
Object.assign(message, result.message);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
186
314
|
if (message.role === "user" || message.role === "assistant" || message.role === "toolResult") {
|
|
187
315
|
this.sessionStore.appendMessage(message);
|
|
188
316
|
}
|
|
@@ -190,12 +318,10 @@ export class MikanAgentSession {
|
|
|
190
318
|
const custom = message;
|
|
191
319
|
this.sessionStore.appendCustomMessageEntry(custom.customType, custom.content, custom.display, custom.details);
|
|
192
320
|
}
|
|
193
|
-
|
|
194
|
-
await this.extensions.emit("message_end", { message });
|
|
195
|
-
}
|
|
321
|
+
await this.emit({ ...event, message });
|
|
196
322
|
if (message.role === "assistant") {
|
|
197
323
|
this.recordUsage(message);
|
|
198
|
-
await this.enforceBudget();
|
|
324
|
+
await this.enforceBudget(message);
|
|
199
325
|
if (message.stopReason !== "error") {
|
|
200
326
|
this.overflowRecoveryAttempted = false;
|
|
201
327
|
if (this.retryAttempt > 0) {
|
|
@@ -205,44 +331,65 @@ export class MikanAgentSession {
|
|
|
205
331
|
}
|
|
206
332
|
}
|
|
207
333
|
}
|
|
208
|
-
/** Fold one assistant
|
|
334
|
+
/** Fold one assistant completion's usage into the running per-run tally. */
|
|
209
335
|
recordUsage(message) {
|
|
210
336
|
this.tally.llmCalls += 1;
|
|
211
337
|
const usage = message.usage;
|
|
212
338
|
if (!usage)
|
|
213
339
|
return;
|
|
214
|
-
this.tally.
|
|
215
|
-
this.tally.costUsd += usage.cost?.total ?? 0;
|
|
340
|
+
addSubagentUsage(this.tally.usage, usage);
|
|
216
341
|
}
|
|
217
342
|
/** Compare the tally against the run budget; abort the run when a cap is exceeded. */
|
|
218
|
-
async enforceBudget() {
|
|
343
|
+
async enforceBudget(message) {
|
|
219
344
|
if (this.budgetExceededReason)
|
|
220
345
|
return;
|
|
221
|
-
const reason = this.overBudgetReason();
|
|
346
|
+
const reason = this.overBudgetReason(message);
|
|
222
347
|
if (!reason)
|
|
223
348
|
return;
|
|
349
|
+
await this.exceedBudget(reason);
|
|
350
|
+
}
|
|
351
|
+
/** Mark the run over budget, notify listeners and extensions, abort the agent. */
|
|
352
|
+
async exceedBudget(reason) {
|
|
353
|
+
if (this.budgetExceededReason)
|
|
354
|
+
return;
|
|
224
355
|
this.budgetExceededReason = reason;
|
|
225
356
|
await this.emit({
|
|
226
357
|
type: "budget_exceeded",
|
|
227
358
|
reason,
|
|
228
|
-
tokens: this.tally.
|
|
229
|
-
costUsd: this.tally.
|
|
359
|
+
tokens: this.tally.usage.totalTokens,
|
|
360
|
+
costUsd: this.tally.usage.cost.total,
|
|
230
361
|
llmCalls: this.tally.llmCalls,
|
|
231
362
|
durationMs: Date.now() - this.tally.startedAt,
|
|
232
363
|
});
|
|
364
|
+
if (this.extensions?.hasHandlers("budget_exceeded")) {
|
|
365
|
+
await this.extensions.emit("budget_exceeded", {
|
|
366
|
+
reason,
|
|
367
|
+
tokens: this.tally.usage.totalTokens,
|
|
368
|
+
costUsd: this.tally.usage.cost.total,
|
|
369
|
+
llmCalls: this.tally.llmCalls,
|
|
370
|
+
durationMs: Date.now() - this.tally.startedAt,
|
|
371
|
+
origin: this.runOrigin,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
233
374
|
log.logWarning("Run budget exceeded — aborting", reason);
|
|
234
375
|
this.agent.abort();
|
|
235
376
|
}
|
|
236
|
-
overBudgetReason() {
|
|
237
|
-
const {
|
|
238
|
-
|
|
377
|
+
overBudgetReason(message) {
|
|
378
|
+
const { maxLlmCalls } = this.runBudget;
|
|
379
|
+
const needsAnotherCall = message.stopReason === "error" || message.content.some((part) => part.type === "toolCall");
|
|
380
|
+
if (needsAnotherCall && maxLlmCalls !== undefined && this.tally.llmCalls >= maxLlmCalls) {
|
|
239
381
|
return `${this.tally.llmCalls} LLM calls >= ${maxLlmCalls} limit`;
|
|
240
382
|
}
|
|
241
|
-
|
|
242
|
-
|
|
383
|
+
return this.resourceOverBudgetReason();
|
|
384
|
+
}
|
|
385
|
+
/** The message-independent budget checks, shared with external-spend folds. */
|
|
386
|
+
resourceOverBudgetReason() {
|
|
387
|
+
const { maxTokens, maxCostUsd, maxDurationMs } = this.runBudget;
|
|
388
|
+
if (maxTokens !== undefined && this.tally.usage.totalTokens >= maxTokens) {
|
|
389
|
+
return `${this.tally.usage.totalTokens} tokens >= ${maxTokens} limit`;
|
|
243
390
|
}
|
|
244
|
-
if (maxCostUsd !== undefined && this.tally.
|
|
245
|
-
return `cost ${this.tally.
|
|
391
|
+
if (maxCostUsd !== undefined && this.tally.usage.cost.total >= maxCostUsd) {
|
|
392
|
+
return `cost ${this.tally.usage.cost.total.toFixed(2)} USD >= ${maxCostUsd} USD limit`;
|
|
246
393
|
}
|
|
247
394
|
if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs) {
|
|
248
395
|
return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;
|
|
@@ -253,7 +400,7 @@ export class MikanAgentSession {
|
|
|
253
400
|
const messages = this.agent.state.messages;
|
|
254
401
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
255
402
|
const message = messages[i];
|
|
256
|
-
if (message
|
|
403
|
+
if (message?.role === "assistant")
|
|
257
404
|
return message;
|
|
258
405
|
}
|
|
259
406
|
return undefined;
|
|
@@ -322,12 +469,19 @@ export class MikanAgentSession {
|
|
|
322
469
|
started = true;
|
|
323
470
|
this.compactionAbortController = new AbortController();
|
|
324
471
|
const signal = this.compactionAbortController.signal;
|
|
325
|
-
const result = getOrThrow(await compact(preparation, this.
|
|
472
|
+
const result = getOrThrow(await compact(preparation, this.createCompactionModels(), this.agent.state.model, undefined, signal, this.agent.state.thinkingLevel));
|
|
326
473
|
if (signal.aborted) {
|
|
327
474
|
await this.emit({ type: "compaction_end", reason, aborted: true });
|
|
328
475
|
return false;
|
|
329
476
|
}
|
|
330
|
-
|
|
477
|
+
// pi 0.82 reserves an absent firstKeptEntryId for keep-nothing
|
|
478
|
+
// compactions; mikan's session format requires a kept entry on the
|
|
479
|
+
// branch, and the compaction path used here always produces one.
|
|
480
|
+
const firstKeptEntryId = result.firstKeptEntryId;
|
|
481
|
+
if (firstKeptEntryId === undefined) {
|
|
482
|
+
throw new Error("compaction returned no first kept entry");
|
|
483
|
+
}
|
|
484
|
+
const entryId = this.sessionStore.appendCompaction(result.summary, firstKeptEntryId, result.tokensBefore, result.details);
|
|
331
485
|
const context = this.sessionStore.buildSessionContext();
|
|
332
486
|
this.agent.state.messages = context.messages;
|
|
333
487
|
if (this.extensions?.hasHandlers("session_compact")) {
|
|
@@ -344,11 +498,13 @@ export class MikanAgentSession {
|
|
|
344
498
|
reason,
|
|
345
499
|
result: {
|
|
346
500
|
summary: result.summary,
|
|
347
|
-
firstKeptEntryId
|
|
501
|
+
firstKeptEntryId,
|
|
348
502
|
tokensBefore: result.tokensBefore,
|
|
349
503
|
},
|
|
350
504
|
aborted: false,
|
|
351
505
|
});
|
|
506
|
+
if (this.budgetExceededReason)
|
|
507
|
+
return false;
|
|
352
508
|
if (willRetry) {
|
|
353
509
|
this.dropTrailingErrorMessage();
|
|
354
510
|
return true;
|
|
@@ -376,6 +532,36 @@ export class MikanAgentSession {
|
|
|
376
532
|
this.compactionAbortController = undefined;
|
|
377
533
|
}
|
|
378
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* Compaction can make one completion, or two when its cut splits a turn.
|
|
537
|
+
* Intercept only those opaque upstream calls so each returned assistant
|
|
538
|
+
* message is tallied exactly once. A call at maxLlmCalls is not started;
|
|
539
|
+
* the cap is otherwise enforced before any post-compaction continuation.
|
|
540
|
+
*/
|
|
541
|
+
createCompactionModels() {
|
|
542
|
+
const models = this.models.models;
|
|
543
|
+
return new Proxy(models, {
|
|
544
|
+
get: (target, property) => {
|
|
545
|
+
if (property === "completeSimple") {
|
|
546
|
+
return async (...args) => {
|
|
547
|
+
const maxLlmCalls = this.runBudget.maxLlmCalls;
|
|
548
|
+
if (maxLlmCalls !== undefined && this.tally.llmCalls >= maxLlmCalls) {
|
|
549
|
+
await this.exceedBudget(`${this.tally.llmCalls} LLM calls >= ${maxLlmCalls} limit`);
|
|
550
|
+
throw new Error("Compaction LLM-call budget exhausted");
|
|
551
|
+
}
|
|
552
|
+
const message = await target.completeSimple(...args);
|
|
553
|
+
this.recordUsage(message);
|
|
554
|
+
const reason = this.resourceOverBudgetReason();
|
|
555
|
+
if (reason)
|
|
556
|
+
await this.exceedBudget(reason);
|
|
557
|
+
return message;
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
const value = Reflect.get(target, property, target);
|
|
561
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
562
|
+
},
|
|
563
|
+
});
|
|
564
|
+
}
|
|
379
565
|
isRetryableError(message) {
|
|
380
566
|
if (message.stopReason !== "error" || !message.errorMessage)
|
|
381
567
|
return false;
|
|
@@ -428,7 +614,7 @@ export class MikanAgentSession {
|
|
|
428
614
|
}
|
|
429
615
|
dropTrailingErrorMessage() {
|
|
430
616
|
const messages = this.agent.state.messages;
|
|
431
|
-
if (messages
|
|
617
|
+
if (messages[messages.length - 1]?.role === "assistant") {
|
|
432
618
|
this.agent.state.messages = messages.slice(0, -1);
|
|
433
619
|
}
|
|
434
620
|
}
|