@geminixiang/mikan 1.0.0-beta.76 → 1.0.0-beta.77
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 +20 -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 +0 -5
- 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 +1 -35
- 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 +0 -11
- 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/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 +0 -5
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/dream/index.js +0 -2
- package/dist/dream/index.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 +0 -7
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +0 -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.d.ts +0 -19
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +0 -34
- 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.map +1 -1
- package/dist/harness/presenter.js +15 -65
- 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 +0 -17
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +0 -25
- 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 +0 -11
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +0 -29
- 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 +0 -76
- 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 +0 -47
- package/dist/main.js.map +1 -1
- 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 +0 -9
- 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 +2 -153
- 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 +0 -37
- 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 +9 -27
- 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 +0 -28
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +0 -1
- 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 +0 -18
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +0 -61
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +3 -105
- 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 +0 -6
- 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 -59
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +6 -88
- 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 +0 -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 +128 -59
- 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
|
@@ -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"}
|
package/dist/harness/skills.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { existsSync, lstatSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { basename, dirname, join } from "node:path";
|
|
3
3
|
import * as log from "../log.js";
|
|
4
|
-
/** Register skills under their prompt-side paths; a later source overrides an earlier one. */
|
|
5
4
|
function addSkills(skillMap, skills, rewritePath) {
|
|
6
5
|
for (const skill of skills) {
|
|
7
6
|
skill.filePath = rewritePath(skill.filePath);
|
|
@@ -9,7 +8,6 @@ function addSkills(skillMap, skills, rewritePath) {
|
|
|
9
8
|
skillMap.set(skill.name, skill);
|
|
10
9
|
}
|
|
11
10
|
}
|
|
12
|
-
/** Conversation skill entries that are symlinks are refused, and reported to the prompt. */
|
|
13
11
|
function skippedSymlinkPaths(diagnostics, translatePath) {
|
|
14
12
|
const skipped = [];
|
|
15
13
|
for (const diagnostic of diagnostics) {
|
|
@@ -22,8 +20,6 @@ function skippedSymlinkPaths(diagnostics, translatePath) {
|
|
|
22
20
|
}
|
|
23
21
|
export function loadMikanSkills(office, workspacePath, projection) {
|
|
24
22
|
const skillMap = new Map();
|
|
25
|
-
// workspacePath is the runtime-side root (e.g. /workspace); host paths under
|
|
26
|
-
// the workspace root translate onto it for prompt references.
|
|
27
23
|
const hostWorkspacePath = office.workspace.root;
|
|
28
24
|
const translatePath = (hostPath) => hostPath.startsWith(hostWorkspacePath)
|
|
29
25
|
? workspacePath + hostPath.slice(hostWorkspacePath.length)
|
|
@@ -44,10 +40,6 @@ export function loadMikanSkills(office, workspacePath, projection) {
|
|
|
44
40
|
}
|
|
45
41
|
const MAX_NAME_LENGTH = 64;
|
|
46
42
|
const MAX_DESCRIPTION_LENGTH = 1024;
|
|
47
|
-
/**
|
|
48
|
-
* Parse simple `key: value` YAML frontmatter delimited by `---` lines.
|
|
49
|
-
* Quoted values are unquoted; nested structures are not supported.
|
|
50
|
-
*/
|
|
51
43
|
export function parseFrontmatter(content) {
|
|
52
44
|
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
|
|
53
45
|
if (!match)
|
|
@@ -69,7 +61,6 @@ export function parseFrontmatter(content) {
|
|
|
69
61
|
}
|
|
70
62
|
return { values, body: content.slice(match[0].length) };
|
|
71
63
|
}
|
|
72
|
-
/** Exposed so the admin portal can validate a skill draft before writing it. */
|
|
73
64
|
export function validateSkill(name, description) {
|
|
74
65
|
const errors = [];
|
|
75
66
|
if (name.length > MAX_NAME_LENGTH) {
|
|
@@ -125,12 +116,6 @@ function loadSkillFromFile(filePath, source) {
|
|
|
125
116
|
return { skills: [], diagnostics };
|
|
126
117
|
}
|
|
127
118
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Load skills from a directory tree.
|
|
130
|
-
* - A directory containing `SKILL.md` is a skill root; no further recursion.
|
|
131
|
-
* - Direct `.md` children of the top-level directory load as skills.
|
|
132
|
-
* - Dot-directories and `node_modules` are skipped.
|
|
133
|
-
*/
|
|
134
119
|
export function loadSkillsFromDir(options) {
|
|
135
120
|
const rejectSymlinks = options.rejectSymlinks === true;
|
|
136
121
|
if (rejectSymlinks && isSymlink(options.dir)) {
|
|
@@ -235,10 +220,6 @@ function escapeXml(str) {
|
|
|
235
220
|
.replace(/"/g, """)
|
|
236
221
|
.replace(/'/g, "'");
|
|
237
222
|
}
|
|
238
|
-
/**
|
|
239
|
-
* Format skills for a system prompt using the Agent Skills XML block.
|
|
240
|
-
* Skills with `disableModelInvocation` are excluded.
|
|
241
|
-
*/
|
|
242
223
|
export function formatSkillsForPrompt(skills) {
|
|
243
224
|
const visible = skills.filter((skill) => !skill.disableModelInvocation);
|
|
244
225
|
if (visible.length === 0)
|
|
@@ -255,7 +236,6 @@ export function formatSkillsForPrompt(skills) {
|
|
|
255
236
|
lines.push(` <name>${escapeXml(skill.name)}</name>`);
|
|
256
237
|
lines.push(` <description>${escapeXml(skill.description)}</description>`);
|
|
257
238
|
if (skill.inline) {
|
|
258
|
-
// Inline skills carry their body: the agent cannot read their file.
|
|
259
239
|
lines.push(` <instructions>${escapeXml(skill.content)}</instructions>`);
|
|
260
240
|
}
|
|
261
241
|
else {
|