@geminixiang/mikan 1.0.0-beta.9 → 1.0.0-beta.90
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 +337 -426
- package/README.md +102 -42
- package/dist/adapters/commands/admin.d.ts.map +1 -0
- package/dist/adapters/commands/admin.js +33 -0
- package/dist/adapters/commands/admin.js.map +1 -0
- package/dist/adapters/commands/auto-reply.d.ts +5 -0
- package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
- package/dist/adapters/commands/auto-reply.js +47 -0
- package/dist/adapters/commands/auto-reply.js.map +1 -0
- package/dist/adapters/commands/login.d.ts +6 -0
- package/dist/adapters/commands/login.d.ts.map +1 -0
- package/dist/adapters/commands/login.js +158 -0
- package/dist/adapters/commands/login.js.map +1 -0
- package/dist/adapters/commands/manifest.d.ts +17 -0
- package/dist/adapters/commands/manifest.d.ts.map +1 -0
- package/dist/adapters/commands/manifest.js +121 -0
- package/dist/adapters/commands/manifest.js.map +1 -0
- package/dist/adapters/commands/model.d.ts +9 -0
- package/dist/adapters/commands/model.d.ts.map +1 -0
- package/dist/adapters/commands/model.js +136 -0
- package/dist/adapters/commands/model.js.map +1 -0
- package/dist/adapters/commands/new.d.ts.map +1 -0
- package/dist/adapters/commands/new.js +39 -0
- package/dist/adapters/commands/new.js.map +1 -0
- package/dist/adapters/commands/registry.d.ts +4 -0
- package/dist/adapters/commands/registry.d.ts.map +1 -0
- package/dist/adapters/commands/registry.js +35 -0
- package/dist/adapters/commands/registry.js.map +1 -0
- package/dist/adapters/commands/sandbox.d.ts +6 -0
- package/dist/adapters/commands/sandbox.d.ts.map +1 -0
- package/dist/adapters/commands/sandbox.js +125 -0
- package/dist/adapters/commands/sandbox.js.map +1 -0
- package/dist/adapters/commands/session-view.d.ts.map +1 -0
- package/dist/adapters/commands/session-view.js +46 -0
- package/dist/adapters/commands/session-view.js.map +1 -0
- package/dist/adapters/commands/types.d.ts +105 -0
- package/dist/adapters/commands/types.d.ts.map +1 -0
- package/dist/adapters/commands/types.js.map +1 -0
- package/dist/adapters/commands/utils.d.ts +11 -0
- package/dist/adapters/commands/utils.d.ts.map +1 -0
- package/dist/adapters/commands/utils.js +43 -0
- package/dist/adapters/commands/utils.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +14 -18
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +234 -303
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +4 -0
- package/dist/adapters/discord/components.d.ts.map +1 -0
- package/dist/adapters/discord/components.js +9 -0
- package/dist/adapters/discord/components.js.map +1 -0
- package/dist/adapters/discord/context.d.ts +3 -7
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +57 -219
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/format.d.ts +2 -0
- package/dist/adapters/discord/format.d.ts.map +1 -0
- package/dist/adapters/discord/format.js +47 -0
- package/dist/adapters/discord/format.js.map +1 -0
- package/dist/adapters/discord/types.d.ts +91 -1
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/github/activity.d.ts +3 -0
- package/dist/adapters/github/activity.d.ts.map +1 -0
- package/dist/adapters/github/activity.js +148 -0
- package/dist/adapters/github/activity.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +24 -37
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +209 -397
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +32 -49
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +108 -118
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts +3 -8
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +74 -138
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +14 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +218 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +2 -23
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +6 -36
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/policy.d.ts +19 -0
- package/dist/adapters/github/policy.d.ts.map +1 -0
- package/dist/adapters/github/policy.js +79 -0
- package/dist/adapters/github/policy.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +4 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +40 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +14 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +78 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +18 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +44 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +17 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +40 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +17 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +134 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +14 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +34 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/types.d.ts +200 -57
- 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 +7 -0
- package/dist/adapters/github/webhook.d.ts.map +1 -0
- package/dist/adapters/github/webhook.js +104 -0
- package/dist/adapters/github/webhook.js.map +1 -0
- package/dist/adapters/intake.d.ts +4 -10
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +85 -32
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +8 -0
- package/dist/adapters/markdown-tables.d.ts.map +1 -0
- package/dist/adapters/markdown-tables.js +111 -0
- package/dist/adapters/markdown-tables.js.map +1 -0
- package/dist/adapters/messages.d.ts +13 -0
- package/dist/adapters/messages.d.ts.map +1 -0
- package/dist/adapters/messages.js +39 -0
- package/dist/adapters/messages.js.map +1 -0
- package/dist/adapters/progressive-renderer.d.ts +7 -0
- package/dist/adapters/progressive-renderer.d.ts.map +1 -0
- package/dist/adapters/progressive-renderer.js +426 -0
- package/dist/adapters/progressive-renderer.js.map +1 -0
- package/dist/adapters/shared.d.ts +27 -53
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +167 -91
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +21 -0
- package/dist/adapters/slack/assistant.d.ts.map +1 -0
- package/dist/adapters/slack/assistant.js +103 -0
- package/dist/adapters/slack/assistant.js.map +1 -0
- package/dist/adapters/slack/auto-reply-context.d.ts +14 -0
- package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
- package/dist/adapters/slack/auto-reply-context.js +21 -0
- package/dist/adapters/slack/auto-reply-context.js.map +1 -0
- package/dist/adapters/slack/blocks.d.ts +5 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +144 -145
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +60 -40
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +968 -588
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -9
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +8 -17
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts +17 -0
- package/dist/adapters/slack/jev-context.d.ts.map +1 -0
- package/dist/adapters/slack/jev-context.js +57 -0
- package/dist/adapters/slack/jev-context.js.map +1 -0
- package/dist/adapters/slack/markdown.d.ts +2 -0
- package/dist/adapters/slack/markdown.d.ts.map +1 -0
- package/dist/adapters/slack/markdown.js +43 -0
- package/dist/adapters/slack/markdown.js.map +1 -0
- package/dist/adapters/slack/persona.d.ts +6 -0
- package/dist/adapters/slack/persona.d.ts.map +1 -0
- package/dist/adapters/slack/persona.js +13 -0
- package/dist/adapters/slack/persona.js.map +1 -0
- package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +222 -348
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +3 -2
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +9 -13
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/stream-limits.d.ts +10 -0
- package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
- package/dist/adapters/slack/stream-limits.js +22 -0
- package/dist/adapters/slack/stream-limits.js.map +1 -0
- package/dist/adapters/slack/task-intent.d.ts +19 -0
- package/dist/adapters/slack/task-intent.d.ts.map +1 -0
- package/dist/adapters/slack/task-intent.js +65 -0
- package/dist/adapters/slack/task-intent.js.map +1 -0
- package/dist/adapters/slack/task-status.d.ts +7 -0
- package/dist/adapters/slack/task-status.d.ts.map +1 -0
- package/dist/adapters/slack/task-status.js +96 -0
- package/dist/adapters/slack/task-status.js.map +1 -0
- package/dist/adapters/slack/tool-pack.d.ts +4 -0
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
- package/dist/adapters/slack/tool-pack.js +40 -0
- package/dist/adapters/slack/tool-pack.js.map +1 -0
- package/dist/adapters/slack/tools/blockkit.d.ts +17 -0
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
- package/dist/adapters/slack/tools/blockkit.js +98 -0
- package/dist/adapters/slack/tools/blockkit.js.map +1 -0
- package/dist/adapters/slack/types.d.ts +91 -5
- 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 +13 -0
- package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
- package/dist/adapters/slack/update-diagnostics.js +128 -0
- package/dist/adapters/slack/update-diagnostics.js.map +1 -0
- package/dist/adapters/telegram/bot.d.ts +12 -19
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +114 -239
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +3 -7
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +49 -191
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +24 -1
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.js.map +1 -1
- package/dist/adapters/types.d.ts +92 -17
- 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 +1766 -0
- package/dist/adapters/web/admin/client-assets.js.map +1 -0
- package/dist/adapters/web/admin/portal.d.ts +26 -0
- package/dist/adapters/web/admin/portal.d.ts.map +1 -0
- package/dist/adapters/web/admin/portal.js +1490 -0
- package/dist/adapters/web/admin/portal.js.map +1 -0
- package/dist/adapters/web/admin/provider-models.d.ts +10 -0
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
- package/dist/adapters/web/admin/provider-models.js +103 -0
- package/dist/adapters/web/admin/provider-models.js.map +1 -0
- package/dist/adapters/web/admin/types.d.ts +54 -0
- package/dist/adapters/web/admin/types.d.ts.map +1 -0
- package/dist/adapters/web/admin/types.js.map +1 -0
- package/dist/adapters/web/login/oauth.d.ts +4 -0
- package/dist/adapters/web/login/oauth.d.ts.map +1 -0
- package/dist/adapters/web/login/oauth.js +219 -0
- package/dist/adapters/web/login/oauth.js.map +1 -0
- package/dist/adapters/web/login/portal.d.ts +10 -0
- package/dist/adapters/web/login/portal.d.ts.map +1 -0
- package/dist/adapters/web/login/portal.js +1336 -0
- package/dist/adapters/web/login/portal.js.map +1 -0
- package/dist/adapters/web/login/types.d.ts +34 -0
- package/dist/adapters/web/login/types.d.ts.map +1 -0
- package/dist/adapters/web/login/types.js.map +1 -0
- package/dist/adapters/web/portal-shell.d.ts +9 -0
- package/dist/adapters/web/portal-shell.d.ts.map +1 -0
- package/dist/adapters/web/portal-shell.js +428 -0
- package/dist/adapters/web/portal-shell.js.map +1 -0
- package/dist/adapters/web/server.d.ts +35 -0
- package/dist/adapters/web/server.d.ts.map +1 -0
- package/dist/adapters/web/server.js +80 -0
- package/dist/adapters/web/server.js.map +1 -0
- package/dist/adapters/web/session-view/portal.d.ts +19 -0
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
- package/dist/adapters/web/session-view/portal.js +1833 -0
- package/dist/adapters/web/session-view/portal.js.map +1 -0
- package/dist/adapters/web/session-view/types.d.ts +45 -0
- package/dist/adapters/web/session-view/types.d.ts.map +1 -0
- package/dist/adapters/web/session-view/types.js.map +1 -0
- package/dist/adapters/web/token-store.d.ts +10 -0
- package/dist/adapters/web/token-store.d.ts.map +1 -0
- package/dist/adapters/web/token-store.js +42 -0
- package/dist/adapters/web/token-store.js.map +1 -0
- package/dist/adapters/web/types.d.ts.map +1 -0
- package/dist/adapters/web/types.js.map +1 -0
- package/dist/cli/arg-grammar.d.ts +8 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +47 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +4 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +79 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js +84 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/migrate.d.ts +3 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +74 -0
- package/dist/cli/migrate.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 +30 -0
- package/dist/cli/office.js.map +1 -0
- package/dist/cli/onboard.d.ts +7 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +192 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/process-lifecycle.d.ts +14 -0
- package/dist/cli/process-lifecycle.d.ts.map +1 -0
- package/dist/cli/process-lifecycle.js +61 -0
- package/dist/cli/process-lifecycle.js.map +1 -0
- package/dist/cli/types.d.ts +20 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/env-manifest.d.ts +14 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +255 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events/index.d.ts +105 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +252 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/scheduler.d.ts +24 -0
- package/dist/events/scheduler.d.ts.map +1 -0
- package/dist/events/scheduler.js +221 -0
- package/dist/events/scheduler.js.map +1 -0
- package/dist/file-guards.d.ts +20 -0
- package/dist/file-guards.d.ts.map +1 -0
- package/dist/file-guards.js +166 -0
- package/dist/file-guards.js.map +1 -0
- package/dist/harness/budget-stop.d.ts +3 -0
- package/dist/harness/budget-stop.d.ts.map +1 -0
- package/dist/harness/budget-stop.js +36 -0
- package/dist/harness/budget-stop.js.map +1 -0
- package/dist/harness/execution-env.d.ts +4 -0
- package/dist/harness/execution-env.d.ts.map +1 -0
- package/dist/harness/execution-env.js +245 -0
- package/dist/harness/execution-env.js.map +1 -0
- package/dist/harness/execution-resolver.d.ts +23 -0
- package/dist/harness/execution-resolver.d.ts.map +1 -0
- package/dist/harness/execution-resolver.js +152 -0
- package/dist/harness/execution-resolver.js.map +1 -0
- 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 +18 -17
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +11 -15
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/jev.d.ts +67 -0
- package/dist/harness/jev.d.ts.map +1 -0
- package/dist/harness/jev.js +135 -0
- package/dist/harness/jev.js.map +1 -0
- package/dist/harness/loop-guard.d.ts +10 -0
- package/dist/harness/loop-guard.d.ts.map +1 -0
- package/dist/harness/loop-guard.js +111 -0
- package/dist/harness/loop-guard.js.map +1 -0
- package/dist/harness/mcp-result.d.ts +21 -0
- package/dist/harness/mcp-result.d.ts.map +1 -0
- package/dist/harness/mcp-result.js +193 -0
- package/dist/harness/mcp-result.js.map +1 -0
- package/dist/harness/mcp.d.ts +17 -0
- package/dist/harness/mcp.d.ts.map +1 -0
- package/dist/harness/mcp.js +287 -0
- package/dist/harness/mcp.js.map +1 -0
- package/dist/harness/models.d.ts +2 -19
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +43 -95
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +3 -0
- package/dist/harness/open-connector.d.ts.map +1 -0
- package/dist/harness/open-connector.js +106 -0
- package/dist/harness/open-connector.js.map +1 -0
- package/dist/harness/presenter.d.ts +11 -0
- package/dist/harness/presenter.d.ts.map +1 -0
- package/dist/harness/presenter.js +867 -0
- package/dist/harness/presenter.js.map +1 -0
- package/dist/harness/prompt.d.ts +17 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +348 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/run-events.d.ts +10 -0
- package/dist/harness/run-events.d.ts.map +1 -0
- package/dist/harness/run-events.js +126 -0
- package/dist/harness/run-events.js.map +1 -0
- package/dist/harness/runner.d.ts +2 -123
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +570 -414
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +102 -0
- package/dist/harness/session.d.ts.map +1 -0
- package/dist/harness/session.js +720 -0
- package/dist/harness/session.js.map +1 -0
- package/dist/harness/skills.d.ts +7 -41
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +120 -69
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +3 -0
- package/dist/harness/subagent-profiles.d.ts.map +1 -0
- package/dist/harness/subagent-profiles.js +260 -0
- package/dist/harness/subagent-profiles.js.map +1 -0
- package/dist/harness/subagent.d.ts +39 -0
- package/dist/harness/subagent.d.ts.map +1 -0
- package/dist/harness/subagent.js +613 -0
- package/dist/harness/subagent.js.map +1 -0
- package/dist/harness/tool-args.d.ts +2 -0
- package/dist/harness/tool-args.d.ts.map +1 -0
- package/dist/harness/tool-args.js +20 -0
- package/dist/harness/tool-args.js.map +1 -0
- package/dist/harness/tools/attach.d.ts +13 -0
- package/dist/harness/tools/attach.d.ts.map +1 -0
- package/dist/harness/tools/attach.js +39 -0
- package/dist/harness/tools/attach.js.map +1 -0
- package/dist/harness/tools/codemode.d.ts +3 -0
- package/dist/harness/tools/codemode.d.ts.map +1 -0
- package/dist/harness/tools/codemode.js +173 -0
- package/dist/harness/tools/codemode.js.map +1 -0
- package/dist/harness/tools/event.d.ts +28 -0
- package/dist/harness/tools/event.d.ts.map +1 -0
- package/dist/harness/tools/event.js +183 -0
- package/dist/harness/tools/event.js.map +1 -0
- package/dist/harness/tools/generate-image.d.ts +20 -0
- package/dist/harness/tools/generate-image.d.ts.map +1 -0
- package/dist/harness/tools/generate-image.js +82 -0
- package/dist/harness/tools/generate-image.js.map +1 -0
- package/dist/harness/tools/history.d.ts +20 -0
- package/dist/harness/tools/history.d.ts.map +1 -0
- package/dist/harness/tools/history.js +293 -0
- package/dist/harness/tools/history.js.map +1 -0
- package/dist/harness/tools/host-fn-tool.d.ts +14 -0
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/harness/tools/host-fn-tool.js +39 -0
- package/dist/harness/tools/host-fn-tool.js.map +1 -0
- package/dist/harness/tools/index.d.ts +34 -0
- package/dist/harness/tools/index.d.ts.map +1 -0
- package/dist/harness/tools/index.js +49 -0
- package/dist/harness/tools/index.js.map +1 -0
- package/dist/harness/tools/jev-browser.d.ts +41 -0
- package/dist/harness/tools/jev-browser.d.ts.map +1 -0
- package/dist/harness/tools/jev-browser.js +570 -0
- package/dist/harness/tools/jev-browser.js.map +1 -0
- package/dist/harness/tools/jev.d.ts +15 -0
- package/dist/harness/tools/jev.d.ts.map +1 -0
- package/dist/harness/tools/jev.js +98 -0
- package/dist/harness/tools/jev.js.map +1 -0
- package/dist/harness/tools/pi-tools.d.ts +8 -0
- package/dist/harness/tools/pi-tools.d.ts.map +1 -0
- package/dist/harness/tools/pi-tools.js +81 -0
- package/dist/harness/tools/pi-tools.js.map +1 -0
- package/dist/harness/tools/react.d.ts +12 -0
- package/dist/harness/tools/react.d.ts.map +1 -0
- package/dist/harness/tools/react.js +25 -0
- package/dist/harness/tools/react.js.map +1 -0
- package/dist/harness/tools/sandbox.d.ts +24 -0
- package/dist/harness/tools/sandbox.d.ts.map +1 -0
- package/dist/harness/tools/sandbox.js +79 -0
- package/dist/harness/tools/sandbox.js.map +1 -0
- package/dist/harness/tools/secret-redaction.d.ts +9 -0
- package/dist/harness/tools/secret-redaction.d.ts.map +1 -0
- package/dist/harness/tools/secret-redaction.js +88 -0
- package/dist/harness/tools/secret-redaction.js.map +1 -0
- package/dist/harness/tools/subagent.d.ts +51 -0
- package/dist/harness/tools/subagent.d.ts.map +1 -0
- package/dist/harness/tools/subagent.js +581 -0
- package/dist/harness/tools/subagent.js.map +1 -0
- package/dist/harness/tools/task.d.ts +22 -0
- package/dist/harness/tools/task.d.ts.map +1 -0
- package/dist/harness/tools/task.js +80 -0
- package/dist/harness/tools/task.js.map +1 -0
- package/dist/harness/tools/tool-search.d.ts +5 -0
- package/dist/harness/tools/tool-search.d.ts.map +1 -0
- package/dist/harness/tools/tool-search.js +84 -0
- package/dist/harness/tools/tool-search.js.map +1 -0
- package/dist/harness/tools/types.d.ts +14 -0
- package/dist/harness/tools/types.d.ts.map +1 -0
- package/dist/harness/tools/types.js.map +1 -0
- package/dist/harness/types.d.ts +482 -29
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +31 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -4
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +3 -28
- package/dist/log.js.map +1 -1
- package/dist/main.js +282 -258
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +15 -0
- package/dist/memory-capture/index.d.ts.map +1 -0
- package/dist/memory-capture/index.js +198 -0
- package/dist/memory-capture/index.js.map +1 -0
- package/dist/memory-capture/types.d.ts +27 -0
- package/dist/memory-capture/types.d.ts.map +1 -0
- package/dist/memory-capture/types.js +2 -0
- package/dist/memory-capture/types.js.map +1 -0
- package/dist/migrations/actor-vaults.d.ts +3 -0
- package/dist/migrations/actor-vaults.d.ts.map +1 -0
- package/dist/migrations/actor-vaults.js +43 -0
- package/dist/migrations/actor-vaults.js.map +1 -0
- package/dist/migrations/conversation-settings.d.ts +3 -0
- package/dist/migrations/conversation-settings.d.ts.map +1 -0
- package/dist/migrations/conversation-settings.js +31 -0
- package/dist/migrations/conversation-settings.js.map +1 -0
- package/dist/migrations/dream-checkpoints.d.ts +3 -0
- package/dist/migrations/dream-checkpoints.d.ts.map +1 -0
- package/dist/migrations/dream-checkpoints.js +23 -0
- package/dist/migrations/dream-checkpoints.js.map +1 -0
- package/dist/migrations/index.d.ts +14 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +105 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/models-json.d.ts +3 -0
- package/dist/migrations/models-json.d.ts.map +1 -0
- package/dist/migrations/models-json.js +18 -0
- package/dist/migrations/models-json.js.map +1 -0
- package/dist/migrations/office-layout.d.ts +4 -0
- package/dist/migrations/office-layout.d.ts.map +1 -0
- package/dist/migrations/office-layout.js +94 -0
- package/dist/migrations/office-layout.js.map +1 -0
- package/dist/migrations/office-sessions.d.ts +3 -0
- package/dist/migrations/office-sessions.d.ts.map +1 -0
- package/dist/migrations/office-sessions.js +81 -0
- package/dist/migrations/office-sessions.js.map +1 -0
- package/dist/migrations/private-office-dirs.d.ts +3 -0
- package/dist/migrations/private-office-dirs.d.ts.map +1 -0
- package/dist/migrations/private-office-dirs.js +24 -0
- package/dist/migrations/private-office-dirs.js.map +1 -0
- package/dist/migrations/sandbox-containers.d.ts +3 -0
- package/dist/migrations/sandbox-containers.d.ts.map +1 -0
- package/dist/migrations/sandbox-containers.js +36 -0
- package/dist/migrations/sandbox-containers.js.map +1 -0
- package/dist/migrations/session-files.d.ts +28 -0
- package/dist/migrations/session-files.d.ts.map +1 -0
- package/dist/migrations/session-files.js +80 -0
- package/dist/migrations/session-files.js.map +1 -0
- package/dist/migrations/session-v4.d.ts +77 -0
- package/dist/migrations/session-v4.d.ts.map +1 -0
- package/dist/migrations/session-v4.js +177 -0
- package/dist/migrations/session-v4.js.map +1 -0
- package/dist/migrations/sessions-sqlite.d.ts +3 -0
- package/dist/migrations/sessions-sqlite.d.ts.map +1 -0
- package/dist/migrations/sessions-sqlite.js +215 -0
- package/dist/migrations/sessions-sqlite.js.map +1 -0
- package/dist/migrations/sessions-v3.d.ts +8 -0
- package/dist/migrations/sessions-v3.d.ts.map +1 -0
- package/dist/migrations/sessions-v3.js +350 -0
- package/dist/migrations/sessions-v3.js.map +1 -0
- package/dist/migrations/types.d.ts +25 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +2 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/migrations/workspace-events.d.ts +3 -0
- package/dist/migrations/workspace-events.d.ts.map +1 -0
- package/dist/migrations/workspace-events.js +43 -0
- package/dist/migrations/workspace-events.js.map +1 -0
- package/dist/observability/index.d.ts +30 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +273 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrument.js +9 -6
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/otel.d.ts +10 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +182 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/observability/sentry.d.ts +30 -18
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +94 -119
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts +30 -19
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/office/index.d.ts +49 -0
- package/dist/office/index.d.ts.map +1 -0
- package/dist/office/index.js +395 -0
- package/dist/office/index.js.map +1 -0
- package/dist/office/projection.d.ts +11 -0
- package/dist/office/projection.d.ts.map +1 -0
- package/dist/office/projection.js +145 -0
- package/dist/office/projection.js.map +1 -0
- package/dist/office/types.d.ts +44 -0
- package/dist/office/types.d.ts.map +1 -0
- package/dist/office/types.js +2 -0
- package/dist/office/types.js.map +1 -0
- package/dist/runtime/conversation-runtime.d.ts +0 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +365 -155
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +65 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -0
- package/dist/runtime/session-lifecycle.js +384 -0
- package/dist/runtime/session-lifecycle.js.map +1 -0
- package/dist/runtime/types.d.ts +42 -20
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +4 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +59 -55
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +3 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +39 -20
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +42 -35
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +12 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +42 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +5 -15
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +5 -51
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/layout.d.ts +5 -0
- package/dist/sandbox/layout.d.ts.map +1 -0
- package/dist/sandbox/layout.js +13 -0
- package/dist/sandbox/layout.js.map +1 -0
- package/dist/sandbox/provisioner.d.ts +64 -0
- package/dist/sandbox/provisioner.d.ts.map +1 -0
- package/dist/sandbox/provisioner.js +546 -0
- package/dist/sandbox/provisioner.js.map +1 -0
- package/dist/sandbox/registry.d.ts +12 -0
- package/dist/sandbox/registry.d.ts.map +1 -0
- package/dist/sandbox/registry.js +93 -0
- package/dist/sandbox/registry.js.map +1 -0
- package/dist/sandbox/types.d.ts +23 -25
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +21 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +100 -8
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +19 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/chat-history-sync.js +459 -0
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/compaction-summary.d.ts +4 -0
- package/dist/sessions/compaction-summary.d.ts.map +1 -0
- package/dist/sessions/compaction-summary.js +16 -0
- package/dist/sessions/compaction-summary.js.map +1 -0
- package/dist/sessions/history-line.d.ts +10 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +29 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/session-key.d.ts +19 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +91 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/session-store.d.ts +73 -0
- package/dist/sessions/session-store.d.ts.map +1 -0
- package/dist/sessions/session-store.js +722 -0
- package/dist/sessions/session-store.js.map +1 -0
- package/dist/sessions/types.d.ts +90 -34
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +2 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +9 -0
- package/dist/settings/apply.d.ts.map +1 -0
- package/dist/settings/apply.js +31 -0
- package/dist/settings/apply.js.map +1 -0
- package/dist/settings/index.d.ts +28 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +320 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/types.d.ts +209 -191
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/unknown-values.d.ts +3 -0
- package/dist/unknown-values.d.ts.map +1 -0
- package/dist/unknown-values.js +7 -0
- package/dist/unknown-values.js.map +1 -0
- package/dist/vault/index.d.ts +28 -11
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +291 -118
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/types.d.ts +5 -19
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +87 -41
- package/dist/adapter.d.ts +0 -2
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js +0 -2
- package/dist/adapter.js.map +0 -1
- package/dist/adapters/github/repo.d.ts +0 -19
- package/dist/adapters/github/repo.d.ts.map +0 -1
- package/dist/adapters/github/repo.js +0 -58
- package/dist/adapters/github/repo.js.map +0 -1
- package/dist/adapters/slack/tools/attach.d.ts +0 -12
- package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
- package/dist/adapters/slack/tools/attach.js +0 -39
- package/dist/adapters/slack/tools/attach.js.map +0 -1
- package/dist/adapters/streaming.d.ts +0 -18
- package/dist/adapters/streaming.d.ts.map +0 -1
- package/dist/adapters/streaming.js +0 -44
- package/dist/adapters/streaming.js.map +0 -1
- package/dist/adapters/telegram/html.d.ts +0 -3
- package/dist/adapters/telegram/html.d.ts.map +0 -1
- package/dist/adapters/telegram/html.js +0 -98
- package/dist/adapters/telegram/html.js.map +0 -1
- package/dist/agent-events.d.ts +0 -5
- package/dist/agent-events.d.ts.map +0 -1
- package/dist/agent-events.js +0 -26
- package/dist/agent-events.js.map +0 -1
- package/dist/agent.d.ts +0 -39
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -1299
- package/dist/agent.js.map +0 -1
- package/dist/cli/ext-git.d.ts +0 -22
- package/dist/cli/ext-git.d.ts.map +0 -1
- package/dist/cli/ext-git.js +0 -76
- package/dist/cli/ext-git.js.map +0 -1
- package/dist/cli/ext.d.ts +0 -2
- package/dist/cli/ext.d.ts.map +0 -1
- package/dist/cli/ext.js +0 -217
- package/dist/cli/ext.js.map +0 -1
- package/dist/commands/admin.d.ts.map +0 -1
- package/dist/commands/admin.js +0 -30
- package/dist/commands/admin.js.map +0 -1
- package/dist/commands/auto-reply.d.ts +0 -8
- package/dist/commands/auto-reply.d.ts.map +0 -1
- package/dist/commands/auto-reply.js +0 -76
- package/dist/commands/auto-reply.js.map +0 -1
- package/dist/commands/extensions.d.ts +0 -14
- package/dist/commands/extensions.d.ts.map +0 -1
- package/dist/commands/extensions.js +0 -55
- package/dist/commands/extensions.js.map +0 -1
- package/dist/commands/login.d.ts +0 -5
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -115
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/model.d.ts +0 -10
- package/dist/commands/model.d.ts.map +0 -1
- package/dist/commands/model.js +0 -102
- package/dist/commands/model.js.map +0 -1
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -25
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/parse.d.ts +0 -7
- package/dist/commands/parse.d.ts.map +0 -1
- package/dist/commands/parse.js +0 -14
- package/dist/commands/parse.js.map +0 -1
- package/dist/commands/registry.d.ts +0 -5
- package/dist/commands/registry.d.ts.map +0 -1
- package/dist/commands/registry.js +0 -31
- package/dist/commands/registry.js.map +0 -1
- package/dist/commands/sandbox.d.ts +0 -7
- package/dist/commands/sandbox.d.ts.map +0 -1
- package/dist/commands/sandbox.js +0 -78
- package/dist/commands/sandbox.js.map +0 -1
- package/dist/commands/session-view.d.ts.map +0 -1
- package/dist/commands/session-view.js +0 -41
- package/dist/commands/session-view.js.map +0 -1
- package/dist/commands/types.d.ts +0 -66
- package/dist/commands/types.d.ts.map +0 -1
- package/dist/commands/types.js.map +0 -1
- package/dist/commands/utils.d.ts +0 -11
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js +0 -29
- package/dist/commands/utils.js.map +0 -1
- package/dist/config.d.ts +0 -78
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -450
- package/dist/config.js.map +0 -1
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js +0 -89
- package/dist/download.js.map +0 -1
- package/dist/events.d.ts +0 -43
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -456
- package/dist/events.js.map +0 -1
- package/dist/execution-resolver.d.ts +0 -21
- package/dist/execution-resolver.d.ts.map +0 -1
- package/dist/execution-resolver.js +0 -170
- package/dist/execution-resolver.js.map +0 -1
- package/dist/harness/auth.d.ts +0 -16
- package/dist/harness/auth.d.ts.map +0 -1
- package/dist/harness/auth.js +0 -86
- package/dist/harness/auth.js.map +0 -1
- package/dist/harness/extensions/loader.d.ts +0 -86
- package/dist/harness/extensions/loader.d.ts.map +0 -1
- package/dist/harness/extensions/loader.js +0 -525
- package/dist/harness/extensions/loader.js.map +0 -1
- package/dist/harness/extensions/registry.d.ts +0 -23
- package/dist/harness/extensions/registry.d.ts.map +0 -1
- package/dist/harness/extensions/registry.js +0 -45
- package/dist/harness/extensions/registry.js.map +0 -1
- package/dist/harness/extensions/types.d.ts +0 -248
- package/dist/harness/extensions/types.d.ts.map +0 -1
- package/dist/harness/extensions/types.js.map +0 -1
- package/dist/harness/session-store.d.ts +0 -77
- package/dist/harness/session-store.d.ts.map +0 -1
- package/dist/harness/session-store.js +0 -248
- package/dist/harness/session-store.js.map +0 -1
- package/dist/harness/settings.d.ts +0 -47
- package/dist/harness/settings.d.ts.map +0 -1
- package/dist/harness/settings.js +0 -29
- package/dist/harness/settings.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/platform-messages.d.ts +0 -12
- package/dist/platform-messages.d.ts.map +0 -1
- package/dist/platform-messages.js +0 -36
- package/dist/platform-messages.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js +0 -366
- package/dist/portal-shell.js.map +0 -1
- package/dist/provisioner.d.ts +0 -61
- package/dist/provisioner.d.ts.map +0 -1
- package/dist/provisioner.js +0 -517
- package/dist/provisioner.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sandbox/errors.d.ts +0 -6
- package/dist/sandbox/errors.d.ts.map +0 -1
- package/dist/sandbox/errors.js +0 -11
- package/dist/sandbox/errors.js.map +0 -1
- package/dist/sandbox/firecracker.d.ts +0 -15
- package/dist/sandbox/firecracker.d.ts.map +0 -1
- package/dist/sandbox/firecracker.js +0 -212
- package/dist/sandbox/firecracker.js.map +0 -1
- package/dist/sandbox/image.d.ts +0 -3
- package/dist/sandbox/image.d.ts.map +0 -1
- package/dist/sandbox/image.js +0 -27
- package/dist/sandbox/image.js.map +0 -1
- package/dist/sandbox/path-context.d.ts +0 -3
- package/dist/sandbox/path-context.d.ts.map +0 -1
- package/dist/sandbox/path-context.js +0 -20
- package/dist/sandbox/path-context.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js +0 -484
- 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 -24
- package/dist/sessions/policy.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -72
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -193
- package/dist/sessions/store.js.map +0 -1
- package/dist/store.d.ts +0 -46
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -177
- package/dist/store.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -10
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -80
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/edit.d.ts +0 -11
- package/dist/tools/edit.d.ts.map +0 -1
- package/dist/tools/edit.js +0 -131
- package/dist/tools/edit.js.map +0 -1
- package/dist/tools/event.d.ts +0 -56
- package/dist/tools/event.d.ts.map +0 -1
- package/dist/tools/event.js +0 -252
- package/dist/tools/event.js.map +0 -1
- package/dist/tools/github-pr.d.ts +0 -22
- package/dist/tools/github-pr.d.ts.map +0 -1
- package/dist/tools/github-pr.js +0 -53
- package/dist/tools/github-pr.js.map +0 -1
- package/dist/tools/index.d.ts +0 -25
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -35
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/react.d.ts +0 -15
- package/dist/tools/react.d.ts.map +0 -1
- package/dist/tools/react.js +0 -40
- package/dist/tools/react.js.map +0 -1
- package/dist/tools/read.d.ts +0 -11
- package/dist/tools/read.d.ts.map +0 -1
- package/dist/tools/read.js +0 -134
- package/dist/tools/read.js.map +0 -1
- package/dist/tools/sandbox.d.ts +0 -22
- package/dist/tools/sandbox.d.ts.map +0 -1
- package/dist/tools/sandbox.js +0 -73
- package/dist/tools/sandbox.js.map +0 -1
- package/dist/tools/truncate.d.ts +0 -33
- package/dist/tools/truncate.d.ts.map +0 -1
- package/dist/tools/truncate.js +0 -184
- package/dist/tools/truncate.js.map +0 -1
- package/dist/tools/types.d.ts +0 -54
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/write.d.ts +0 -10
- package/dist/tools/write.d.ts.map +0 -1
- package/dist/tools/write.js +0 -29
- package/dist/tools/write.js.map +0 -1
- package/dist/trigger.d.ts +0 -22
- package/dist/trigger.d.ts.map +0 -1
- package/dist/trigger.js +0 -100
- package/dist/trigger.js.map +0 -1
- package/dist/utils/date.d.ts +0 -10
- package/dist/utils/date.d.ts.map +0 -1
- package/dist/utils/date.js +0 -23
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/env.d.ts +0 -3
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -12
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/file-guards.d.ts +0 -9
- package/dist/utils/file-guards.d.ts.map +0 -1
- package/dist/utils/file-guards.js +0 -59
- package/dist/utils/file-guards.js.map +0 -1
- package/dist/utils/fs-atomic.d.ts +0 -10
- package/dist/utils/fs-atomic.d.ts.map +0 -1
- package/dist/utils/fs-atomic.js +0 -45
- package/dist/utils/fs-atomic.js.map +0 -1
- package/dist/utils/html.d.ts +0 -2
- package/dist/utils/html.d.ts.map +0 -1
- package/dist/utils/html.js +0 -4
- package/dist/utils/html.js.map +0 -1
- package/dist/utils/http-body.d.ts +0 -10
- package/dist/utils/http-body.d.ts.map +0 -1
- package/dist/utils/http-body.js +0 -34
- package/dist/utils/http-body.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- package/dist/web/admin/portal.d.ts +0 -5
- package/dist/web/admin/portal.d.ts.map +0 -1
- package/dist/web/admin/portal.js +0 -2572
- package/dist/web/admin/portal.js.map +0 -1
- package/dist/web/admin/provider-models.d.ts +0 -10
- package/dist/web/admin/provider-models.d.ts.map +0 -1
- package/dist/web/admin/provider-models.js +0 -96
- package/dist/web/admin/provider-models.js.map +0 -1
- package/dist/web/admin/store.d.ts +0 -13
- package/dist/web/admin/store.d.ts.map +0 -1
- package/dist/web/admin/store.js +0 -14
- package/dist/web/admin/store.js.map +0 -1
- package/dist/web/admin/types.d.ts +0 -30
- package/dist/web/admin/types.d.ts.map +0 -1
- package/dist/web/admin/types.js.map +0 -1
- package/dist/web/agent-events/portal.d.ts +0 -3
- package/dist/web/agent-events/portal.d.ts.map +0 -1
- package/dist/web/agent-events/portal.js +0 -18
- package/dist/web/agent-events/portal.js.map +0 -1
- package/dist/web/login/oauth.d.ts +0 -6
- package/dist/web/login/oauth.d.ts.map +0 -1
- package/dist/web/login/oauth.js +0 -258
- package/dist/web/login/oauth.js.map +0 -1
- package/dist/web/login/portal.d.ts +0 -17
- package/dist/web/login/portal.d.ts.map +0 -1
- package/dist/web/login/portal.js +0 -1329
- package/dist/web/login/portal.js.map +0 -1
- package/dist/web/login/store.d.ts +0 -8
- package/dist/web/login/store.d.ts.map +0 -1
- package/dist/web/login/store.js +0 -15
- package/dist/web/login/store.js.map +0 -1
- package/dist/web/login/types.d.ts +0 -50
- package/dist/web/login/types.d.ts.map +0 -1
- package/dist/web/login/types.js.map +0 -1
- package/dist/web/request.d.ts +0 -3
- package/dist/web/request.d.ts.map +0 -1
- package/dist/web/request.js +0 -13
- package/dist/web/request.js.map +0 -1
- package/dist/web/server.d.ts +0 -28
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js +0 -66
- package/dist/web/server.js.map +0 -1
- package/dist/web/session-view/command.d.ts +0 -4
- package/dist/web/session-view/command.d.ts.map +0 -1
- package/dist/web/session-view/command.js +0 -7
- package/dist/web/session-view/command.js.map +0 -1
- package/dist/web/session-view/portal.d.ts +0 -13
- package/dist/web/session-view/portal.d.ts.map +0 -1
- package/dist/web/session-view/portal.js +0 -1651
- package/dist/web/session-view/portal.js.map +0 -1
- package/dist/web/session-view/service.d.ts +0 -6
- package/dist/web/session-view/service.d.ts.map +0 -1
- package/dist/web/session-view/service.js +0 -498
- package/dist/web/session-view/service.js.map +0 -1
- package/dist/web/session-view/store.d.ts +0 -8
- package/dist/web/session-view/store.d.ts.map +0 -1
- package/dist/web/session-view/store.js +0 -15
- package/dist/web/session-view/store.js.map +0 -1
- package/dist/web/session-view/types.d.ts +0 -50
- package/dist/web/session-view/types.d.ts.map +0 -1
- package/dist/web/session-view/types.js.map +0 -1
- package/dist/web/token-store.d.ts +0 -13
- package/dist/web/token-store.d.ts.map +0 -1
- package/dist/web/token-store.js +0 -44
- package/dist/web/token-store.js.map +0 -1
- package/dist/web/types.d.ts.map +0 -1
- package/dist/web/types.js.map +0 -1
- /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
- /package/dist/{commands → adapters/commands}/types.js +0 -0
- /package/dist/{harness/extensions → adapters/web/admin}/types.js +0 -0
- /package/dist/{tools → adapters/web/login}/types.js +0 -0
- /package/dist/{web/admin → adapters/web/session-view}/types.js +0 -0
- /package/dist/{web → adapters/web}/types.d.ts +0 -0
- /package/dist/{web/login → adapters/web}/types.js +0 -0
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{web/session-view → cli}/types.js +0 -0
- /package/dist/{web → harness/tools}/types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presenter.js","sourceRoot":"","sources":["../../src/harness/presenter.ts"],"names":[],"mappings":"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","sourcesContent":["import { contentText, type Api, type Model } from \"@earendil-works/pi-ai\";\nimport type {\n FinalizeRunResponseOptions,\n HarnessEvent,\n PlatformToolRoles,\n RunPresentation,\n RunPresentationContext,\n RunEvent,\n RunnerSessionState,\n SessionEventHandlerParams,\n ToolTiming,\n UsageReportContext,\n} from \"./types.js\";\nimport type { MikanAgentSession } from \"./session.js\";\nimport {\n mergeSubagentProgress,\n renderSubagentDashboard,\n settleSubagentProgress,\n} from \"./tools/subagent.js\";\nimport type { ConversationResponder, SubagentProgressSnapshot } from \"../types.js\";\nimport type { resolveConversationSettings } from \"../settings/index.js\";\nimport {\n addLifecycleEvent,\n metricAttributes,\n recordCounter,\n recordDistribution,\n recordGauge,\n reportUserFacingError,\n startOperationSpan,\n updateActiveSpanAttribution,\n type ObservabilitySpan,\n} from \"../observability/index.js\";\nimport { appendTriggerAttribution } from \"./prompt.js\";\nimport { START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { toRunEvent, toolResultText } from \"./run-events.js\";\nimport { REACT_TOOL } from \"./tools/react.js\";\n\nimport * as log from \"../log.js\";\nimport { errorMessage, isRecord } from \"../unknown-values.js\";\nimport { formatBudgetStop } from \"./budget-stop.js\";\n\ninterface LlmOperationSpan {\n span: ObservabilitySpan;\n startedAt: number;\n firstTokenAt?: number;\n}\n\ninterface RunOperationSpans {\n llm: LlmOperationSpan[];\n tools: Map<string, ObservabilitySpan>;\n}\n\nconst operationSpans = new WeakMap<RunnerSessionState, RunOperationSpans>();\n\nfunction spansFor(runState: RunnerSessionState): RunOperationSpans {\n let spans = operationSpans.get(runState);\n if (!spans) {\n spans = { llm: [], tools: new Map() };\n operationSpans.set(runState, spans);\n }\n return spans;\n}\n\nfunction operationError(name: \"AbortError\" | \"LLMError\" | \"ToolError\"): Error {\n const error = new Error();\n error.name = name;\n return error;\n}\n\nfunction endOutstandingOperationSpans(runState: RunnerSessionState): void {\n const spans = operationSpans.get(runState);\n if (!spans) return;\n const aborted = operationError(\"AbortError\");\n for (const entry of spans.llm) entry.span.end({ error: aborted });\n for (const span of spans.tools.values()) span.end({ error: aborted });\n operationSpans.delete(runState);\n}\n\nfunction createEmptyUsageTotals() {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n };\n}\n\nfunction createRunStateDefaults(): RunnerSessionState {\n return {\n responder: null,\n logCtx: null,\n queue: null,\n pendingTools: new Map<string, { toolName: string; args: unknown; startTime: number }>(),\n completedTools: [],\n toolProgress: new Map<string, { label: string; status: \"running\" | \"done\" | \"error\" }>(),\n subagentProgress: new Map<string, SubagentProgressSnapshot>(),\n completedSubagentProgress: [],\n subagentToolCalls: new Set<string>(),\n subagentProgressShown: false,\n suppressResponseDeltas: false,\n answerStreamStarted: false,\n workAcknowledged: false,\n publishRunEvent: undefined,\n lastSubagentProgressAt: 0,\n toolProgressTimer: undefined,\n totalUsage: createEmptyUsageTotals(),\n llmCallCount: 0,\n toolCallCount: 0,\n toolErrorCount: 0,\n toolInputCharacters: 0,\n toolOutputCharacters: 0,\n assistantMessageCount: 0,\n outputCharacters: 0,\n reasoningTokens: 0,\n retryCount: 0,\n compactionCount: 0,\n budgetExceeded: false,\n firstTokenLatencyMs: undefined,\n responseModel: undefined,\n stopReason: \"stop\",\n errorMessage: undefined,\n reportedLlmError: false,\n finalResponseHandledByTool: false,\n triggerAttribution: undefined,\n };\n}\n\nexport function createRunState(): RunnerSessionState {\n return createRunStateDefaults();\n}\n\nexport function activateRunPresentation(\n runState: RunnerSessionState,\n context: RunPresentationContext,\n): RunPresentation {\n endOutstandingOperationSpans(runState);\n if (runState.toolProgressTimer) clearTimeout(runState.toolProgressTimer);\n Object.assign(runState, createRunStateDefaults(), {\n responder: context.responder,\n logCtx: {\n conversationId: context.sessionConversation,\n userName: context.userName,\n conversationName: undefined,\n sessionId: context.sessionUuid,\n },\n triggerAttribution: context.triggerAttribution,\n publishRunEvent: context.publishRunEvent,\n });\n\n const { responder } = context;\n let queueChain = Promise.resolve();\n runState.queue = {\n enqueue(fn: () => Promise<void>, errorContext: string): void {\n queueChain = queueChain.then(async () => {\n if (runState.finalResponseHandledByTool) return;\n try {\n await fn();\n } catch (err) {\n const errMsg = errorMessage(err);\n log.logWarning(`API error (${errorContext})`, errMsg);\n try {\n await responder.respondDiagnostic(`Error: ${errMsg}`, { style: \"error\" });\n } catch {}\n }\n });\n },\n };\n return {\n wait: () => queueChain,\n dispose(): void {\n endOutstandingOperationSpans(runState);\n if (runState.toolProgressTimer) clearTimeout(runState.toolProgressTimer);\n runState.toolProgressTimer = undefined;\n runState.responder = null;\n runState.logCtx = null;\n runState.queue = null;\n runState.publishRunEvent = undefined;\n },\n };\n}\n\nexport function getFinalAssistantText(session: MikanAgentSession): string {\n const lastAssistant = session.lastRunMessages.findLast((message) => message.role === \"assistant\");\n return contentText(lastAssistant?.content ?? []);\n}\n\nexport function isEventTriggerAttribution(triggerAttribution: string | undefined): boolean {\n return triggerAttribution?.startsWith(\"[event:\") === true;\n}\n\nfunction formatToolProgress(runState: RunnerSessionState): string {\n const lines = Array.from(runState.toolProgress.entries()).flatMap(([toolCallId, item]) => {\n if (runState.subagentToolCalls.has(toolCallId)) return [];\n const marker = item.status === \"running\" ? \"•\" : item.status === \"error\" ? \"✗\" : \"✓\";\n return [`${marker} ${item.label}`];\n });\n return lines.join(\"\\n\");\n}\n\nfunction formatResponseWithToolProgress(text: string, runState: RunnerSessionState): string {\n const progress = formatToolProgress(runState);\n return [progress, text].filter(Boolean).join(\"\\n\\n\");\n}\n\nasync function replaceWithSubagentDashboard(\n responder: ConversationResponder,\n snapshot: SubagentProgressSnapshot,\n finalText?: string,\n options?: { createOverflowLink?: () => string },\n): Promise<void> {\n if (responder.replaceSubagentProgress) {\n await responder.replaceSubagentProgress(snapshot, finalText);\n return;\n }\n const dashboard = renderSubagentDashboard(snapshot);\n await responder.replaceResponse(finalText ? `${dashboard}\\n\\n${finalText}` : dashboard, options);\n}\n\nasync function replaceResponseWithToolProgress(\n responder: ConversationResponder,\n runState: RunnerSessionState,\n subagentProgress = mergeSubagentProgress([...runState.subagentProgress.values()]),\n): Promise<void> {\n if (subagentProgress) {\n await replaceWithSubagentDashboard(responder, subagentProgress);\n return;\n }\n const progress = formatToolProgress(runState);\n if (progress) await responder.replaceResponse(progress);\n}\n\nconst TOOL_PROGRESS_DEBOUNCE_MS = 500;\n\nconst SUBAGENT_PROGRESS_THROTTLE_MS = 2000;\n\nfunction subagentProgressDelay(runState: RunnerSessionState): number {\n if (!runState.subagentProgressShown) return 0;\n return Math.max(0, runState.lastSubagentProgressAt + SUBAGENT_PROGRESS_THROTTLE_MS - Date.now());\n}\n\nfunction markSubagentProgressShown(runState: RunnerSessionState, snapshot: unknown): void {\n if (!snapshot) return;\n runState.subagentProgressShown = true;\n runState.lastSubagentProgressAt = Date.now();\n}\n\nfunction scheduleToolProgressUpdate(\n responder: ConversationResponder,\n runState: RunnerSessionState,\n): void {\n if (runState.toolProgressTimer) return;\n const subagentProgress = mergeSubagentProgress([...runState.subagentProgress.values()]);\n const delay = subagentProgress ? subagentProgressDelay(runState) : TOOL_PROGRESS_DEBOUNCE_MS;\n runState.toolProgressTimer = setTimeout(() => {\n runState.toolProgressTimer = undefined;\n const snapshot = mergeSubagentProgress([...runState.subagentProgress.values()]);\n markSubagentProgressShown(runState, snapshot);\n runState.queue?.enqueue(\n () => replaceResponseWithToolProgress(responder, runState, snapshot),\n \"tool progress update\",\n );\n }, delay);\n runState.toolProgressTimer.unref();\n}\n\nfunction flushToolProgressUpdate(\n responder: ConversationResponder,\n runState: RunnerSessionState,\n): void {\n if (runState.toolProgressTimer) clearTimeout(runState.toolProgressTimer);\n runState.toolProgressTimer = undefined;\n const subagentProgress = mergeSubagentProgress([...runState.subagentProgress.values()]);\n markSubagentProgressShown(runState, subagentProgress);\n runState.queue?.enqueue(\n () => replaceResponseWithToolProgress(responder, runState, subagentProgress),\n \"tool progress update\",\n );\n}\n\nasync function finalizeErrorResponse(\n responder: ConversationResponder,\n runState: RunnerSessionState,\n options?: FinalizeRunResponseOptions,\n): Promise<void> {\n if (!runState.reportedLlmError) {\n runState.reportedLlmError = true;\n reportUserFacingError(new Error(\"LLM run completed with error stop reason\"), {\n domain: \"llm\",\n surface: \"assistant_response\",\n operation: \"llm_turn\",\n severity: \"error\",\n platform: options?.platform,\n provider: options?.model?.provider,\n model: options?.model?.name,\n stopReason: runState.stopReason,\n context: {\n sessionConversation: options?.sessionConversation,\n sessionUuid: options?.sessionUuid,\n hasErrorMessage: true,\n llmCallCount: runState.llmCallCount,\n },\n });\n }\n try {\n await responder.replaceResponse(\"_Sorry, something went wrong_\");\n await responder.respondDiagnostic(`Error: ${runState.errorMessage}`, { style: \"error\" });\n } catch (err) {\n const errMsg = errorMessage(err);\n log.logWarning(\"Failed to post error message\", errMsg);\n reportUserFacingError(err, {\n domain: \"chat_platform\",\n surface: \"final_response\",\n operation: \"finalize_error_response\",\n severity: \"error\",\n platform: options?.platform,\n context: {\n sessionConversation: options?.sessionConversation,\n sessionUuid: options?.sessionUuid,\n stopReason: runState.stopReason,\n },\n });\n }\n}\n\nexport async function finalizeRunResponse(\n responder: ConversationResponder,\n session: MikanAgentSession,\n runState: RunnerSessionState,\n options?: FinalizeRunResponseOptions,\n): Promise<void> {\n if (runState.stopReason === \"error\" && runState.errorMessage) {\n await finalizeErrorResponse(responder, runState, options);\n return;\n }\n\n const finalText = getFinalAssistantText(session);\n if (runState.finalResponseHandledByTool) {\n log.logInfo(\"Final response already handled by tool - skipping final replacement\");\n return;\n }\n if (isSilentResponse(finalText)) {\n await deleteForSilentResponse(responder);\n return;\n }\n if (!finalText.trim()) return;\n const published = await publishFinalResponse(responder, runState, finalText, options);\n const didWork = Object.keys(session.getLastRunStats().toolCallCounts).some(\n (name) => ![TASK_STATUS_TOOL, START_TASK_TOOL, REACT_TOOL].includes(name),\n );\n if (published && runState.stopReason === \"stop\" && (didWork || options?.initialTask))\n await responder.notifyCompletion?.();\n}\n\nfunction isSilentResponse(finalText: string): boolean {\n return finalText.trim().startsWith(\"[SILENT]\");\n}\n\nasync function deleteForSilentResponse(responder: ConversationResponder): Promise<void> {\n try {\n await responder.deleteResponse();\n log.logInfo(\"Silent response - deleted message and thread\");\n } catch (err) {\n const errMsg = errorMessage(err);\n log.logWarning(\"Failed to delete message for silent response\", errMsg);\n }\n}\n\nfunction resolveSingleCompletedProfile(runState: RunnerSessionState): string | undefined {\n const nodes = runState.completedSubagentProgress.flatMap((snapshot) => snapshot.nodes);\n if (nodes.length === 0) return undefined;\n const profiles = new Set(nodes.map((node) => node.profile));\n if (profiles.size !== 1) return undefined;\n const [profile] = profiles;\n if (!profile) return undefined;\n return nodes.every((node) => node.status === \"completed\") ? profile : undefined;\n}\n\nasync function publishFinalResponse(\n responder: ConversationResponder,\n runState: RunnerSessionState,\n finalText: string,\n options?: FinalizeRunResponseOptions,\n): Promise<boolean> {\n try {\n const finalResponse = appendTriggerAttribution(\n finalText,\n runState.triggerAttribution,\n options?.triggerSessionLink,\n );\n const finalDashboard = mergeSubagentProgress(runState.completedSubagentProgress);\n if (finalDashboard) {\n const resolvedProfile = resolveSingleCompletedProfile(runState);\n if (resolvedProfile && responder.respondAsRole) {\n await replaceWithSubagentDashboard(responder, finalDashboard, undefined, {\n createOverflowLink: options?.createOverflowLink,\n });\n await responder.respondAsRole(resolvedProfile, finalResponse);\n return true;\n }\n await replaceWithSubagentDashboard(responder, finalDashboard, finalResponse, {\n createOverflowLink: options?.createOverflowLink,\n });\n return true;\n }\n await responder.replaceResponse(formatResponseWithToolProgress(finalResponse, runState), {\n createOverflowLink: options?.createOverflowLink,\n });\n return true;\n } catch (err) {\n const errMsg = errorMessage(err);\n log.logWarning(\"Failed to replace message with final text\", errMsg);\n reportUserFacingError(err, {\n domain: \"chat_platform\",\n surface: \"final_response\",\n operation: \"replace_final_response\",\n severity: \"error\",\n platform: options?.platform,\n context: {\n sessionConversation: options?.sessionConversation,\n sessionUuid: options?.sessionUuid,\n finalTextLength: finalText.length,\n },\n });\n return false;\n }\n}\n\nexport async function reportUsageSummary(ctx: UsageReportContext): Promise<void> {\n const {\n session,\n runState,\n responder,\n platform,\n model,\n sessionConversation,\n sessionUuid,\n waitForQueue,\n } = ctx;\n const contextTokens = await session.sessionStore.getContextTokens();\n const contextWindow = model.contextWindow || 200000;\n\n const { totalUsage } = runState;\n const runMetricAttributes = metricAttributes({\n provider: model.provider,\n model: model.id,\n channel_id: sessionConversation,\n session_id: sessionUuid,\n stop_reason: runState.stopReason,\n llm_calls: runState.llmCallCount,\n });\n recordDistribution(\"agent.run.tokens_in\", totalUsage.input, {\n attributes: runMetricAttributes,\n });\n recordDistribution(\"agent.run.tokens_out\", totalUsage.output, {\n attributes: runMetricAttributes,\n });\n recordDistribution(\"agent.run.cache_read\", totalUsage.cacheRead, {\n attributes: runMetricAttributes,\n });\n recordDistribution(\"agent.run.cache_write\", totalUsage.cacheWrite, {\n attributes: runMetricAttributes,\n });\n recordDistribution(\"agent.run.cost\", totalUsage.cost.total, {\n attributes: runMetricAttributes,\n });\n const contextUtilization =\n contextTokens === undefined ? undefined : contextTokens / contextWindow;\n if (contextUtilization !== undefined) {\n recordGauge(\"agent.context.utilization\", contextUtilization, {\n unit: \"ratio\",\n attributes: runMetricAttributes,\n });\n }\n updateActiveSpanAttribution({\n \"gen_ai.request.model\": model.id,\n \"gen_ai.response.model\": runState.responseModel ?? model.id,\n \"gen_ai.usage.input_tokens\": totalUsage.input + totalUsage.cacheRead + totalUsage.cacheWrite,\n \"gen_ai.usage.input_tokens.cached\": totalUsage.cacheRead,\n \"gen_ai.usage.input_tokens.cache_write\": totalUsage.cacheWrite,\n \"gen_ai.usage.output_tokens\": totalUsage.output,\n \"gen_ai.usage.output_tokens.reasoning\": runState.reasoningTokens,\n \"mikan.usage.cost_usd\": totalUsage.cost.total,\n \"mikan.llm.call_count\": runState.llmCallCount,\n \"mikan.tool.call_count\": runState.toolCallCount,\n \"mikan.tool.error_count\": runState.toolErrorCount,\n \"mikan.tool.input.characters\": runState.toolInputCharacters,\n \"mikan.tool.output.characters\": runState.toolOutputCharacters,\n \"mikan.output.message_count\": runState.assistantMessageCount,\n \"mikan.output.characters\": runState.outputCharacters,\n \"mikan.retry.count\": runState.retryCount,\n \"mikan.compaction.count\": runState.compactionCount,\n \"mikan.budget.exceeded\": runState.budgetExceeded,\n ...(contextUtilization === undefined\n ? {}\n : { \"mikan.context.utilization\": contextUtilization }),\n ...(runState.firstTokenLatencyMs === undefined\n ? {}\n : { \"mikan.response.first_token_ms\": runState.firstTokenLatencyMs }),\n });\n\n const summary = log.logUsageSummary(\n runState.logCtx!,\n runState.totalUsage,\n contextTokens,\n contextWindow,\n );\n const toolNames = Object.keys(session.getLastRunStats().toolCallCounts);\n const statusOnly = toolNames.length > 0 && toolNames.every((name) => name === TASK_STATUS_TOOL);\n if (\n platform.diagnostics?.showUsageSummary === true &&\n !runState.finalResponseHandledByTool &&\n !statusOnly &&\n !isSilentResponse(getFinalAssistantText(session))\n ) {\n runState.queue!.enqueue(\n () => responder.respondDiagnostic(summary, { style: \"muted\" }),\n \"usage summary\",\n );\n await waitForQueue();\n }\n}\n\nfunction serializedLength(value: unknown): number {\n if (typeof value === \"string\") return value.length;\n try {\n return JSON.stringify(value)?.length ?? 0;\n } catch {\n return 0;\n }\n}\n\nfunction toolCategory(name: string, roles: PlatformToolRoles): string {\n if ([\"read\", \"write\", \"edit\", \"bash\"].includes(name)) return \"sandbox\";\n if (name === \"subagent\") return \"agent\";\n if (name.startsWith(\"mcp__\")) return \"mcp\";\n if (name.startsWith(\"github_\")) return \"github\";\n if (roles.platformTools.has(name)) return \"platform\";\n return \"function\";\n}\n\ninterface RunObserverContext {\n runState: RunnerSessionState;\n logCtx: NonNullable<RunnerSessionState[\"logCtx\"]>;\n baseAttrs: { channel_id: string; session_id: string | undefined };\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n platformToolRoles: PlatformToolRoles;\n}\n\ninterface FrontProjectionContext {\n runState: RunnerSessionState;\n responder: ConversationResponder;\n logCtx: NonNullable<RunnerSessionState[\"logCtx\"]>;\n queue: NonNullable<RunnerSessionState[\"queue\"]>;\n}\n\ntype ToolStartEvent = Extract<HarnessEvent, { type: \"tool_execution_start\" }>;\n\ntype ToolEndEvent = Extract<HarnessEvent, { type: \"tool_execution_end\" }>;\n\ntype MessageStartEvent = Extract<HarnessEvent, { type: \"message_start\" }>;\n\ntype TextDeltaEvent = Extract<HarnessEvent, { type: \"text_delta\" }>;\n\ntype MessageEndEvent = Extract<HarnessEvent, { type: \"message_end\" }>;\n\ntype AssistantMessage = Extract<MessageEndEvent[\"message\"], { role: \"assistant\" }>;\n\ntype LifecycleEvent = Extract<\n HarnessEvent,\n { type: \"compaction_start\" | \"compaction_end\" | \"auto_retry_start\" | \"budget_exceeded\" }\n>;\n\nfunction toolLabel(args: unknown, toolName: string): string {\n const label = isRecord(args) && typeof args.label === \"string\" ? args.label.trim() : \"\";\n return label || toolName;\n}\n\nfunction runningTools(runState: RunnerSessionState): ToolTiming[] {\n const now = Date.now();\n return [...runState.pendingTools.values()]\n .filter((pending) => pending.toolName !== START_TASK_TOOL)\n .map((pending) => ({\n label: toolLabel(pending.args, pending.toolName),\n toolName: pending.toolName,\n durationMs: now - pending.startTime,\n isError: false,\n }));\n}\n\nfunction observeToolStart(event: ToolStartEvent, context: RunObserverContext): void {\n const { runState, logCtx, baseAttrs } = context;\n const args = (event.args ?? {}) as { label?: string };\n const label = args.label || event.toolName;\n runState.toolCallCount += 1;\n runState.toolInputCharacters += serializedLength(event.args);\n runState.pendingTools.set(event.toolCallId, {\n toolName: event.toolName,\n args: event.args,\n startTime: Date.now(),\n });\n if (event.toolName === START_TASK_TOOL) return;\n spansFor(runState).tools.set(\n event.toolCallId,\n startOperationSpan(\n `execute_tool ${event.toolName}`,\n metricAttributes({\n \"gen_ai.operation.name\": \"execute_tool\",\n \"gen_ai.tool.name\": event.toolName,\n \"gen_ai.tool.type\": \"function\",\n \"mikan.tool.category\": toolCategory(event.toolName, context.platformToolRoles),\n \"mikan.tool.input.characters\": serializedLength(event.args),\n \"openinference.span.kind\": \"TOOL\",\n ...baseAttrs,\n }),\n ),\n );\n addLifecycleEvent(\"agent.tool.started\", { tool: event.toolName, ...baseAttrs });\n log.logToolStart(logCtx, event.toolName, label, event.args as Record<string, unknown>);\n}\n\nfunction recordToolMetrics(\n event: ToolEndEvent,\n durationMs: number,\n context: RunObserverContext,\n): void {\n recordCounter(\n \"agent.tool.calls\",\n 1,\n metricAttributes({\n tool: event.toolName,\n error: String(event.isError),\n ...context.baseAttrs,\n }),\n );\n recordDistribution(\"agent.tool.duration\", durationMs, {\n unit: \"millisecond\",\n attributes: metricAttributes({ tool: event.toolName, ...context.baseAttrs }),\n });\n addLifecycleEvent(\"agent.tool.completed\", {\n tool: event.toolName,\n error: event.isError,\n duration_ms: durationMs,\n ...context.baseAttrs,\n });\n}\n\nfunction observeToolEnd(event: ToolEndEvent, context: RunObserverContext): void {\n const { runState, logCtx } = context;\n const outputCharacters = serializedLength(event.result);\n runState.toolOutputCharacters += outputCharacters;\n if (event.isError) runState.toolErrorCount += 1;\n const pending = runState.pendingTools.get(event.toolCallId);\n runState.pendingTools.delete(event.toolCallId);\n if (event.toolName === START_TASK_TOOL) {\n if (!event.isError) runState.finalResponseHandledByTool = true;\n else\n reportUserFacingError(new Error(\"Task admission failed\"), {\n domain: \"mikan\",\n surface: \"task_handoff\",\n operation: \"admit_task\",\n severity: \"error\",\n context: { sessionId: logCtx.sessionId, toolCallId: event.toolCallId },\n });\n return;\n }\n const durationMs = pending ? Date.now() - pending.startTime : 0;\n runState.completedTools.push({\n label: toolLabel(pending?.args, event.toolName),\n toolName: event.toolName,\n durationMs,\n isError: event.isError,\n });\n const toolSpan = spansFor(runState).tools.get(event.toolCallId);\n toolSpan?.end({\n attributes: metricAttributes({\n \"gen_ai.tool.name\": event.toolName,\n \"gen_ai.tool.type\": \"function\",\n \"mikan.tool.category\": toolCategory(event.toolName, context.platformToolRoles),\n \"mikan.tool.output.characters\": outputCharacters,\n \"openinference.span.kind\": \"TOOL\",\n duration_ms: durationMs,\n ...context.baseAttrs,\n }),\n error: event.isError ? operationError(\"ToolError\") : undefined,\n });\n spansFor(runState).tools.delete(event.toolCallId);\n recordToolMetrics(event, durationMs, context);\n const resultStr = toolResultText(event.result);\n if (event.isError) {\n log.logToolError(logCtx, event.toolName, durationMs, resultStr);\n return;\n }\n log.logToolSuccess(logCtx, event.toolName, durationMs, resultStr);\n if (context.platformToolRoles.finalResponseTools.has(event.toolName)) {\n runState.finalResponseHandledByTool = true;\n }\n}\n\nfunction observeMessageStart(event: MessageStartEvent, context: RunObserverContext): void {\n if (event.message.role !== \"assistant\") return;\n context.runState.llmCallCount += 1;\n spansFor(context.runState).llm.push({\n span: startOperationSpan(\n `chat ${context.model.id}`,\n metricAttributes({\n \"gen_ai.operation.name\": \"chat\",\n \"gen_ai.provider.name\": context.model.provider,\n \"gen_ai.request.model\": context.model.id,\n \"openinference.span.kind\": \"LLM\",\n \"llm.provider\": context.model.provider,\n \"llm.model_name\": context.model.id,\n ...context.baseAttrs,\n }),\n ),\n startedAt: Date.now(),\n });\n addLifecycleEvent(\"agent.llm.call.started\", {\n call_index: context.runState.llmCallCount,\n provider: context.model.provider,\n model: context.agentConfig.model,\n ...context.baseAttrs,\n });\n log.logResponseStart(context.logCtx);\n}\n\nfunction observeTextDelta(_event: TextDeltaEvent, context: RunObserverContext): void {\n const llmEntry = spansFor(context.runState).llm[0];\n if (llmEntry && llmEntry.firstTokenAt === undefined) {\n llmEntry.firstTokenAt = Date.now();\n context.runState.firstTokenLatencyMs ??= llmEntry.firstTokenAt - llmEntry.startedAt;\n }\n}\n\nfunction recordAssistantUsage(message: AssistantMessage, context: RunObserverContext): void {\n if (!message.usage) return;\n const { totalUsage } = context.runState;\n totalUsage.input += message.usage.input;\n totalUsage.output += message.usage.output;\n totalUsage.cacheRead += message.usage.cacheRead;\n totalUsage.cacheWrite += message.usage.cacheWrite;\n totalUsage.cost.input += message.usage.cost.input;\n totalUsage.cost.output += message.usage.cost.output;\n totalUsage.cost.cacheRead += message.usage.cost.cacheRead;\n totalUsage.cost.cacheWrite += message.usage.cost.cacheWrite;\n totalUsage.cost.total += message.usage.cost.total;\n context.runState.reasoningTokens += message.usage.reasoning ?? 0;\n context.runState.responseModel = message.responseModel ?? message.model;\n\n const attributes = metricAttributes({\n provider: context.model.provider,\n model: context.agentConfig.model,\n ...context.baseAttrs,\n stop_reason: message.stopReason,\n error: Boolean(message.errorMessage),\n });\n recordCounter(\"agent.llm.calls\", 1, attributes);\n recordDistribution(\"agent.llm.tokens_in\", message.usage.input, { attributes });\n recordDistribution(\"agent.llm.tokens_out\", message.usage.output, { attributes });\n if (message.usage.cacheRead > 0) {\n recordDistribution(\"agent.llm.cache_read\", message.usage.cacheRead, { attributes });\n }\n if (message.usage.cacheWrite > 0) {\n recordDistribution(\"agent.llm.cache_write\", message.usage.cacheWrite, { attributes });\n }\n recordDistribution(\"agent.llm.cost_per_turn\", message.usage.cost.total, { attributes });\n addLifecycleEvent(\"agent.llm.call.completed\", {\n call_index: context.runState.llmCallCount,\n provider: context.model.provider,\n model: context.agentConfig.model,\n stop_reason: message.stopReason,\n error: Boolean(message.errorMessage),\n input_tokens: message.usage.input,\n output_tokens: message.usage.output,\n cost_total_usd: message.usage.cost.total,\n });\n}\n\nfunction observeMessageEnd(event: MessageEndEvent, context: RunObserverContext): void {\n if (event.message.role !== \"assistant\") return;\n const message = event.message;\n context.runState.assistantMessageCount += 1;\n context.runState.outputCharacters += message.content.reduce(\n (total, part) => total + (part.type === \"text\" ? part.text.length : 0),\n 0,\n );\n if (message.stopReason) {\n context.runState.stopReason = message.stopReason;\n context.runState.errorMessage = message.errorMessage;\n }\n recordAssistantUsage(message, context);\n const llmEntry = spansFor(context.runState).llm.shift();\n const inputTokens = message.usage\n ? message.usage.input + message.usage.cacheRead + message.usage.cacheWrite\n : undefined;\n llmEntry?.span.end({\n attributes: metricAttributes({\n \"gen_ai.provider.name\": context.model.provider,\n \"gen_ai.request.model\": context.model.id,\n \"gen_ai.response.model\": message.responseModel ?? message.model,\n \"gen_ai.usage.input_tokens\": inputTokens,\n \"gen_ai.usage.output_tokens\": message.usage?.output,\n \"gen_ai.usage.input_tokens.cached\": message.usage?.cacheRead,\n \"gen_ai.usage.input_tokens.cache_write\": message.usage?.cacheWrite,\n \"gen_ai.usage.output_tokens.reasoning\": message.usage?.reasoning,\n \"mikan.usage.cost_usd\": message.usage?.cost.total,\n \"mikan.response.first_token_ms\":\n llmEntry?.firstTokenAt === undefined\n ? undefined\n : llmEntry.firstTokenAt - llmEntry.startedAt,\n \"mikan.output.characters\": message.content.reduce(\n (total, part) => total + (part.type === \"text\" ? part.text.length : 0),\n 0,\n ),\n \"openinference.span.kind\": \"LLM\",\n \"llm.provider\": context.model.provider,\n \"llm.model_name\": context.model.id,\n \"llm.token_count.prompt\": inputTokens,\n \"llm.token_count.completion\": message.usage?.output,\n \"llm.token_count.total\":\n inputTokens !== undefined && message.usage ? inputTokens + message.usage.output : undefined,\n \"llm.token_count.prompt_details.cache_read\": message.usage?.cacheRead,\n \"llm.token_count.prompt_details.cache_write\": message.usage?.cacheWrite,\n stop_reason: message.stopReason,\n ...context.baseAttrs,\n }),\n error: message.errorMessage ? operationError(\"LLMError\") : undefined,\n });\n}\n\nfunction observeLifecycleEvent(event: LifecycleEvent, context: RunObserverContext): void {\n if (event.type === \"compaction_start\") {\n context.runState.compactionCount += 1;\n log.logInfo(`Auto-compaction started (reason: ${event.reason})`);\n return;\n }\n if (event.type === \"compaction_end\") {\n if (event.aborted) log.logInfo(\"Auto-compaction aborted\");\n else if (event.errorMessage) log.logWarning(\"Auto-compaction failed\", event.errorMessage);\n else log.logInfo(\"Auto-compaction complete\");\n return;\n }\n if (event.type === \"auto_retry_start\") {\n context.runState.retryCount += 1;\n log.logWarning(`Retrying (${event.attempt}/${event.maxAttempts})`, event.errorMessage);\n return;\n }\n context.runState.budgetExceeded = true;\n log.logWarning(\n \"Run stopped by budget circuit breaker\",\n `${event.reason} (tokens=${event.tokens}, cost=${event.costUsd.toFixed(2)}, calls=${event.llmCalls}, ${event.durationMs}ms)`,\n );\n}\n\nfunction observeHarnessEvent(event: HarnessEvent, context: RunObserverContext): void {\n switch (event.type) {\n case \"tool_execution_start\":\n observeToolStart(event, context);\n return;\n case \"tool_execution_end\":\n observeToolEnd(event, context);\n return;\n case \"message_start\":\n observeMessageStart(event, context);\n return;\n case \"text_delta\":\n observeTextDelta(event, context);\n return;\n case \"message_end\":\n observeMessageEnd(event, context);\n return;\n case \"compaction_start\":\n case \"compaction_end\":\n case \"auto_retry_start\":\n case \"budget_exceeded\":\n observeLifecycleEvent(event, context);\n return;\n default:\n return;\n }\n}\n\ntype RunEventOf<T extends RunEvent[\"type\"]> = Extract<RunEvent, { type: T }>;\n\nconst WORK_ACKNOWLEDGEMENT_REACTION = \"saluting_face\";\n\nconst TOOLS_THAT_ARE_NOT_WORK = new Set([START_TASK_TOOL, TASK_STATUS_TOOL, REACT_TOOL]);\n\nfunction acknowledgeWorkOnce(context: FrontProjectionContext): void {\n const { runState, responder } = context;\n if (runState.workAcknowledged || !responder.react) return;\n runState.workAcknowledged = true;\n responder.react(WORK_ACKNOWLEDGEMENT_REACTION).catch((error: unknown) => {\n log.logWarning(\"Could not acknowledge work with a reaction\", errorMessage(error));\n });\n}\n\nfunction presentToolStarted(event: RunEventOf<\"tool_started\">, context: FrontProjectionContext) {\n const { runState, responder, queue } = context;\n if (!TOOLS_THAT_ARE_NOT_WORK.has(event.toolName)) acknowledgeWorkOnce(context);\n if (event.toolName === START_TASK_TOOL || event.toolName === TASK_STATUS_TOOL) return;\n runState.answerStreamStarted = false;\n runState.toolProgress.set(event.toolCallId, { label: event.label, status: \"running\" });\n if (event.toolName === \"subagent\") {\n runState.subagentToolCalls.add(event.toolCallId);\n return;\n }\n queue.enqueue(() => replaceResponseWithToolProgress(responder, runState), \"tool progress update\");\n}\n\nfunction presentSubagentProgress(\n event: RunEventOf<\"subagent_progress\">,\n context: FrontProjectionContext,\n): void {\n context.runState.subagentProgress.set(event.toolCallId, event.snapshot);\n context.runState.subagentToolCalls.add(event.toolCallId);\n context.runState.suppressResponseDeltas = true;\n scheduleToolProgressUpdate(context.responder, context.runState);\n}\n\nfunction presentToolEnded(event: RunEventOf<\"tool_ended\">, context: FrontProjectionContext) {\n const { runState, responder } = context;\n if (event.toolName === START_TASK_TOOL) return;\n const progress = runState.toolProgress.get(event.toolCallId);\n if (progress) progress.status = event.isError ? \"error\" : \"done\";\n const subagentProgress = runState.subagentProgress.get(event.toolCallId);\n if (subagentProgress) {\n runState.subagentProgress.set(\n event.toolCallId,\n settleSubagentProgress(subagentProgress, event.isError),\n );\n }\n if (event.toolName !== TASK_STATUS_TOOL) flushToolProgressUpdate(responder, runState);\n const completedProgress = runState.subagentProgress.get(event.toolCallId);\n if (completedProgress) runState.completedSubagentProgress.push(completedProgress);\n runState.subagentProgress.delete(event.toolCallId);\n}\n\nfunction presentAssistantDelta(\n event: RunEventOf<\"assistant_delta\">,\n context: FrontProjectionContext,\n): void {\n const { runState } = context;\n if (!context.responder.appendResponseDelta || runState.suppressResponseDeltas) return;\n const delta = runState.answerStreamStarted\n ? event.delta\n : formatResponseWithToolProgress(event.delta, runState);\n runState.answerStreamStarted = true;\n context.queue.enqueue(async () => {\n await context.responder.appendResponseDelta?.(delta);\n }, \"response delta\");\n}\n\nfunction presentThinking(thinking: string, context: FrontProjectionContext): void {\n log.logThinking(context.logCtx, thinking);\n context.queue.enqueue(() => context.responder.respond(`_${thinking}_`), \"thinking main\");\n context.queue.enqueue(\n () => context.responder.respondDiagnostic(`_${thinking}_`),\n \"thinking diagnostic\",\n );\n}\n\nfunction presentFinalText(text: string, context: FrontProjectionContext): void {\n const finalText = appendTriggerAttribution(\n formatResponseWithToolProgress(text, context.runState),\n context.runState.triggerAttribution,\n );\n log.logResponse(context.logCtx, text);\n if (context.runState.completedSubagentProgress.length > 0) return;\n if (context.responder.finishResponse) {\n context.queue.enqueue(async () => {\n await context.responder.finishResponse?.(finalText);\n }, \"response finish\");\n } else {\n context.queue.enqueue(() => context.responder.respond(finalText), \"response main\");\n }\n}\n\nfunction presentAssistantMessage(\n event: RunEventOf<\"assistant_message\">,\n context: FrontProjectionContext,\n): void {\n for (const thinking of event.thinking) presentThinking(thinking, context);\n if (!event.text.trim() || event.callsTools || context.runState.finalResponseHandledByTool) return;\n presentFinalText(event.text, context);\n}\n\nfunction presentRunEvent(event: RunEvent, context: FrontProjectionContext): void {\n switch (event.type) {\n case \"tool_started\":\n presentToolStarted(event, context);\n return;\n case \"subagent_progress\":\n presentSubagentProgress(event, context);\n return;\n case \"tool_ended\":\n presentToolEnded(event, context);\n return;\n case \"assistant_delta\":\n presentAssistantDelta(event, context);\n return;\n case \"assistant_message\":\n presentAssistantMessage(event, context);\n return;\n case \"compaction_started\":\n context.queue.enqueue(\n () => context.responder.respond(\"_Compacting context..._\"),\n \"compaction start\",\n );\n return;\n case \"retry_started\": {\n const text = `_Retrying (${event.attempt}/${event.maxAttempts})..._`;\n context.queue.enqueue(() => context.responder.respond(text), \"retry\");\n return;\n }\n case \"budget_exceeded\": {\n const text = formatBudgetStop({\n reason: event.reason,\n llmCalls: event.llmCalls,\n durationMs: event.durationMs,\n completed: context.runState.completedTools,\n running: runningTools(context.runState),\n });\n context.queue.enqueue(\n () => context.responder.respondDiagnostic(text, { style: \"error\" }),\n \"budget exceeded\",\n );\n return;\n }\n case \"run_started\":\n case \"run_ended\":\n return;\n default:\n event satisfies never;\n }\n}\n\nexport function attachSessionEventHandlers(params: SessionEventHandlerParams): void {\n const { session, runState, model, agentConfig, platformToolRoles } = params;\n session.subscribe((event) => {\n if (!runState.responder || !runState.logCtx || !runState.queue) return;\n observeHarnessEvent(event, {\n runState,\n logCtx: runState.logCtx,\n baseAttrs: {\n channel_id: runState.logCtx.conversationId,\n session_id: runState.logCtx.sessionId,\n },\n model,\n agentConfig,\n platformToolRoles,\n });\n const runEvent = toRunEvent(event);\n if (!runEvent) return;\n runState.publishRunEvent?.(runEvent);\n presentRunEvent(runEvent, {\n runState,\n responder: runState.responder,\n logCtx: runState.logCtx,\n queue: runState.queue,\n });\n });\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ImageContent } from "@earendil-works/pi-ai";
|
|
2
|
+
import type { ConversationMessage } from "../types.js";
|
|
3
|
+
import type { Executor, RuntimePathContext } from "../sandbox/types.js";
|
|
4
|
+
import type { WorkspaceProjection } from "../office/types.js";
|
|
5
|
+
import type { BuildSystemPromptOptions } from "./types.js";
|
|
6
|
+
export declare function normalizeAttachRuntimePath(filePath: string, runtimeWorkspaceRoot: string): string;
|
|
7
|
+
export declare function withStagedRuntimeFile(executor: Executor, runtimePath: string, upload: (stagedPath: string) => Promise<void>): Promise<void>;
|
|
8
|
+
export declare function buildPromptPayload(message: ConversationMessage, workspacePath: string, pathContext?: RuntimePathContext, readAttachment?: (runtimePath: string) => Promise<string>): Promise<{
|
|
9
|
+
userMessage: string;
|
|
10
|
+
imageAttachments: ImageContent[];
|
|
11
|
+
}>;
|
|
12
|
+
export declare function getMemory(projection: WorkspaceProjection): string;
|
|
13
|
+
export declare function resolveTriggerAttribution(message: Pick<ConversationMessage, "id" | "text" | "userName">): string | undefined;
|
|
14
|
+
export declare function buildSystemPrompt(input: BuildSystemPromptOptions): string;
|
|
15
|
+
export declare function buildTurnInstructions(isEventTrigger: boolean): string;
|
|
16
|
+
export declare function appendTriggerAttribution(text: string, triggerAttribution: string | undefined, sessionLink?: string): string;
|
|
17
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/harness/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAiB,MAAM,qBAAqB,CAAC;AAEvF,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAS3D,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAgBjG;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAaf;AAoDD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACxD,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC,CAAC,CAmBD;AAiBD,wBAAgB,SAAS,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAQjE;AA8BD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,GAC7D,MAAM,GAAG,SAAS,CAOpB;AA8LD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAGzE;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAQrE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAQR"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { chmod, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { basename, join, posix } from "node:path";
|
|
5
|
+
import { formatSkillsForPrompt } from "./skills.js";
|
|
6
|
+
import { formatHistoryLine, stripTriggerSignature } from "../sessions/history-line.js";
|
|
7
|
+
import { readTextFileNoFollowIfExists } from "../file-guards.js";
|
|
8
|
+
import * as log from "../log.js";
|
|
9
|
+
function hasParentTraversal(path) {
|
|
10
|
+
return path.split(/[\\/]/).some((segment) => segment === "..");
|
|
11
|
+
}
|
|
12
|
+
export function normalizeAttachRuntimePath(filePath, runtimeWorkspaceRoot) {
|
|
13
|
+
if (hasParentTraversal(filePath)) {
|
|
14
|
+
throw new Error("Cannot attach files: parent-directory traversal is not allowed");
|
|
15
|
+
}
|
|
16
|
+
const runtimeRoot = posix.resolve(runtimeWorkspaceRoot);
|
|
17
|
+
const runtimePath = posix.resolve(runtimeRoot, filePath);
|
|
18
|
+
const runtimeRelativePath = posix.relative(runtimeRoot, runtimePath);
|
|
19
|
+
if (runtimeRelativePath === ".." ||
|
|
20
|
+
runtimeRelativePath.startsWith("../") ||
|
|
21
|
+
posix.isAbsolute(runtimeRelativePath)) {
|
|
22
|
+
throw new Error("Cannot attach files: path must be within the runtime workspace");
|
|
23
|
+
}
|
|
24
|
+
return runtimePath;
|
|
25
|
+
}
|
|
26
|
+
export async function withStagedRuntimeFile(executor, runtimePath, upload) {
|
|
27
|
+
const content = Buffer.from(await executor.readFileBase64(runtimePath), "base64");
|
|
28
|
+
let stagingDir;
|
|
29
|
+
try {
|
|
30
|
+
stagingDir = await mkdtemp(join(tmpdir(), "mikan-upload-"));
|
|
31
|
+
await chmod(stagingDir, 0o700);
|
|
32
|
+
const stagedPath = join(stagingDir, basename(runtimePath));
|
|
33
|
+
await writeFile(stagedPath, content, { mode: 0o600, flag: "wx" });
|
|
34
|
+
await chmod(stagedPath, 0o600);
|
|
35
|
+
await upload(stagedPath);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
if (stagingDir)
|
|
39
|
+
await rm(stagingDir, { recursive: true, force: true });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const IMAGE_MIME_TYPES = {
|
|
43
|
+
jpg: "image/jpeg",
|
|
44
|
+
jpeg: "image/jpeg",
|
|
45
|
+
png: "image/png",
|
|
46
|
+
gif: "image/gif",
|
|
47
|
+
webp: "image/webp",
|
|
48
|
+
};
|
|
49
|
+
async function collectMessageAttachments(message, workspacePath, pathContext, readAttachment) {
|
|
50
|
+
const imageAttachments = [];
|
|
51
|
+
const nonImagePaths = [];
|
|
52
|
+
for (const attachment of message.attachments || []) {
|
|
53
|
+
const runtimePath = `${workspacePath}/${attachment.localPath}`;
|
|
54
|
+
const hostPath = pathContext?.runtimeToHostPath?.(runtimePath) ?? runtimePath;
|
|
55
|
+
const mimeType = IMAGE_MIME_TYPES[attachment.localPath.toLowerCase().split(".").pop() || ""];
|
|
56
|
+
if (mimeType && existsSync(hostPath) && readAttachment) {
|
|
57
|
+
try {
|
|
58
|
+
imageAttachments.push({
|
|
59
|
+
type: "image",
|
|
60
|
+
mimeType,
|
|
61
|
+
data: await readAttachment(runtimePath),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
nonImagePaths.push(runtimePath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
nonImagePaths.push(runtimePath);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { imageAttachments, nonImagePaths };
|
|
73
|
+
}
|
|
74
|
+
function buildRuntimePaths(runtimeWorkspaceRoot, office) {
|
|
75
|
+
const workspaceRoot = runtimeWorkspaceRoot.replace(/\/+$/, "") || "/";
|
|
76
|
+
const conversationPath = posix.join(workspaceRoot, office.key);
|
|
77
|
+
return {
|
|
78
|
+
workspaceRoot,
|
|
79
|
+
conversationPath,
|
|
80
|
+
scratchPath: posix.join(conversationPath, "scratch"),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function buildPromptPayload(message, workspacePath, pathContext, readAttachment) {
|
|
84
|
+
let userMessage = formatHistoryLine({
|
|
85
|
+
date: new Date(),
|
|
86
|
+
userName: message.userName,
|
|
87
|
+
threadTs: message.threadTs,
|
|
88
|
+
text: message.text,
|
|
89
|
+
});
|
|
90
|
+
const { imageAttachments, nonImagePaths } = await collectMessageAttachments(message, workspacePath, pathContext, readAttachment);
|
|
91
|
+
if (nonImagePaths.length > 0) {
|
|
92
|
+
userMessage += `\n\n<slack_attachments>\n${nonImagePaths.join("\n")}\n</slack_attachments>`;
|
|
93
|
+
}
|
|
94
|
+
return { userMessage, imageAttachments };
|
|
95
|
+
}
|
|
96
|
+
function memorySection(path, heading, label) {
|
|
97
|
+
if (!path)
|
|
98
|
+
return undefined;
|
|
99
|
+
try {
|
|
100
|
+
const content = readTextFileNoFollowIfExists(path)?.trim();
|
|
101
|
+
return content ? `### ${heading}\n${content}` : undefined;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
log.logWarning(`Failed to read ${label}`, `${path}: ${error}`);
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function getMemory(projection) {
|
|
109
|
+
const { globalMemoryPath, conversationMemoryPath } = projection.promptSources;
|
|
110
|
+
const sections = [
|
|
111
|
+
memorySection(globalMemoryPath, "Global Workspace Memory", "workspace memory"),
|
|
112
|
+
memorySection(conversationMemoryPath, "Conversation-Specific Memory", "conversation memory"),
|
|
113
|
+
];
|
|
114
|
+
const parts = sections.filter((section) => section !== undefined);
|
|
115
|
+
return parts.length > 0 ? parts.join("\n\n") : "(no working memory yet)";
|
|
116
|
+
}
|
|
117
|
+
function buildEnvDescription(sandboxType, workspaceRoot) {
|
|
118
|
+
switch (sandboxType) {
|
|
119
|
+
case "image":
|
|
120
|
+
return `You are running inside a managed per-conversation container.
|
|
121
|
+
- Runtime workspace root: ${workspaceRoot}
|
|
122
|
+
- Bash commands start in: ${workspaceRoot}
|
|
123
|
+
- Install tools with the image's package manager
|
|
124
|
+
- Only files under ${workspaceRoot} persist; installed packages and anything else in the container are discarded when the sandbox image is updated`;
|
|
125
|
+
case "container":
|
|
126
|
+
return `You are running inside a shared container.
|
|
127
|
+
- Runtime workspace root: ${workspaceRoot}
|
|
128
|
+
- Bash commands start in: ${workspaceRoot}
|
|
129
|
+
- Install tools with the container's package manager
|
|
130
|
+
- Your changes persist across sessions`;
|
|
131
|
+
case "cloudflare":
|
|
132
|
+
return `You are running through a Cloudflare Sandbox bridge.
|
|
133
|
+
- Runtime workspace root: ${workspaceRoot}
|
|
134
|
+
- Bash commands start in: ${workspaceRoot}
|
|
135
|
+
- Your commands run in a remote container managed by Cloudflare
|
|
136
|
+
- Important: the remote filesystem is not automatically synced back to the host workspace`;
|
|
137
|
+
default:
|
|
138
|
+
return `You are running directly on the host machine.
|
|
139
|
+
- Runtime workspace root: ${workspaceRoot}
|
|
140
|
+
- Bash commands start in: ${workspaceRoot}
|
|
141
|
+
- Be careful with system modifications`;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function resolveTriggerAttribution(message) {
|
|
145
|
+
const eventTextMatch = message.text.match(/^\[EVENT:([^:]+):/);
|
|
146
|
+
if (eventTextMatch)
|
|
147
|
+
return `[event: ${eventTextMatch[1]}]`;
|
|
148
|
+
const eventIdMatch = message.id.match(/^event:([^:]+)/);
|
|
149
|
+
if (eventIdMatch)
|
|
150
|
+
return `[event: ${eventIdMatch[1]}]`;
|
|
151
|
+
if (message.userName)
|
|
152
|
+
return `@${message.userName}`;
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
function mappingTable(rows, empty) {
|
|
156
|
+
return rows.length > 0 ? rows.join("\n") : empty;
|
|
157
|
+
}
|
|
158
|
+
function buildContextPrompt(input, paths) {
|
|
159
|
+
const { platform, sandboxConfig } = input;
|
|
160
|
+
const { workspaceRoot, scratchPath } = paths;
|
|
161
|
+
const channelMappings = mappingTable(platform.channels.map((c) => `${c.id}\t#${c.name}`), "(no channels loaded)");
|
|
162
|
+
const userMappings = mappingTable(platform.users.map((u) => `${u.id}\t@${u.userName}\t${u.displayName}`), "(no users loaded)");
|
|
163
|
+
const envDescription = buildEnvDescription(sandboxConfig.type, workspaceRoot);
|
|
164
|
+
const slackBlockKitInstructions = platform.name === "slack"
|
|
165
|
+
? `
|
|
166
|
+
## Slack Tasks
|
|
167
|
+
- In top-level Slack DMs, use start_task for multi-step investigations, changes/tests, or long waits so the user can keep chatting. Write a short, casual acknowledgement like a helpful colleague (e.g. 好,我來整理一下,弄好再通知你), not a formal restatement of the task. Do not invent an ETA. Separately provide a self-contained task with constraints and attachment paths. Call it alone before executing the work.
|
|
168
|
+
- For questions about task progress, always call task_status before answering. Its observations are the only authority for current task status. Never infer progress, completion, or an ETA from elapsed time or your earlier promises. acknowledgement is only the original task description, NOT live progress. Only currentTool describes a current operation; if absent, say it is still running without inventing a phase. Never translate subagent into a more specific activity than the observation supports. If multiple tasks match, ask which one. If status is unknown, say so. For status-only questions, report the task_status observation directly; do not search history, run shell probes, or repeat the investigation just to reconfirm it. Only inspect the result content when the user asks for that content.
|
|
169
|
+
- In a thread, continue the task directly; do not hand it off again. Other platforms and shared channels do not support start_task yet.
|
|
170
|
+
|
|
171
|
+
## Slack Rendering
|
|
172
|
+
- The Slack adapter renders responses natively from standard Markdown. Answer in normal Markdown/GFM.
|
|
173
|
+
- Markdown pipe tables are rendered as native Slack tables.
|
|
174
|
+
- For interactive elements (buttons, select menus), use the slack_blockkit tool; user interactions arrive as "[Slack action] <action_id>: <value>" messages.
|
|
175
|
+
`
|
|
176
|
+
: "";
|
|
177
|
+
return `You are mikan, a ${platform.name} bot assistant. Be concise. No emojis.
|
|
178
|
+
|
|
179
|
+
## Context
|
|
180
|
+
- Each user message starts with its send time in \`[YYYY-MM-DD HH:MM:SS+ZZ:ZZ]\`; treat it as the current date and time instead of running \`date\`.
|
|
181
|
+
- Messages in your context are reliable: answer from them directly, including anything the user asked you to remember in this conversation.
|
|
182
|
+
- Your context does not hold tool output from other sessions: a thread or a session started by \`/new\` sees earlier work only as chat text. When the user asks for a result your context lacks, such as a command's output, call the \`history\` tool instead of guessing or rerunning the command.
|
|
183
|
+
- User messages include a \`[in-thread:TS]\` marker when sent from within a platform thread/reply (TS is the thread or parent message identifier). Without this marker, the message is a top-level conversation message.
|
|
184
|
+
${platform.formattingGuide}${slackBlockKitInstructions}
|
|
185
|
+
|
|
186
|
+
## Platform IDs
|
|
187
|
+
Channels: ${channelMappings}
|
|
188
|
+
|
|
189
|
+
Users: ${userMappings}
|
|
190
|
+
|
|
191
|
+
When mentioning users, write <@userName> using the exact userName from the Users table above (e.g., <@mario>). Never invent handles from other platforms (GitHub, email); the platform adapter converts <@userName> to the platform's native mention form.
|
|
192
|
+
|
|
193
|
+
## Environment
|
|
194
|
+
${envDescription}
|
|
195
|
+
- Default place for clones, downloads, and experiments: ${scratchPath}
|
|
196
|
+
- Do not use host-only paths unless you are running in host mode and verified they exist.`;
|
|
197
|
+
}
|
|
198
|
+
function buildWorkspaceSkillsPrompt(input, paths) {
|
|
199
|
+
const { office, projection, skills, skippedSkillLinks = [] } = input;
|
|
200
|
+
const { workspaceRoot, conversationPath, scratchPath } = paths;
|
|
201
|
+
const knowledgeReadOnly = projection.promptSources.globalKnowledgeReadOnly === true;
|
|
202
|
+
const workspaceLayout = knowledgeReadOnly
|
|
203
|
+
? `${workspaceRoot}/ contains this private conversation's directory, read-only shared MEMORY.md and skills/, and read-only public/ with every public channel's office.`
|
|
204
|
+
: `${workspaceRoot}/ contains this public conversation's directory, shared MEMORY.md and skills/, and read-only public/ with every public channel's office.`;
|
|
205
|
+
const skillStorageGuidance = knowledgeReadOnly
|
|
206
|
+
? `Store skills in \`${conversationPath}/skills/<name>/\`; shared \`${workspaceRoot}/skills/\` is read-only for this private office.`
|
|
207
|
+
: `Store shared skills in \`${workspaceRoot}/skills/<name>/\` or conversation-specific skills in \`${conversationPath}/skills/<name>/\`.`;
|
|
208
|
+
return `## Workspace Layout
|
|
209
|
+
${workspaceLayout}
|
|
210
|
+
${workspaceRoot}/
|
|
211
|
+
├── MEMORY.md # Shared memory${knowledgeReadOnly ? " (read-only here)" : " (all public conversations)"}
|
|
212
|
+
├── skills/ # Shared CLI tools${knowledgeReadOnly ? " (read-only here)" : " you create"}
|
|
213
|
+
├── public/<office-key>/ # Other public channels' offices (read-only)
|
|
214
|
+
└── ${office.key}/ # This conversation
|
|
215
|
+
├── MEMORY.md # Conversation-specific memory
|
|
216
|
+
├── log.jsonl # Human-readable message history (no tool results)
|
|
217
|
+
├── attachments/ # User-shared files
|
|
218
|
+
├── scratch/ # Working directory for clones/downloads/experiments: ${scratchPath}
|
|
219
|
+
└── skills/ # Conversation-specific tools
|
|
220
|
+
|
|
221
|
+
## Skills (Custom CLI Tools)
|
|
222
|
+
You can create reusable CLI tools for recurring tasks (email, APIs, data processing, etc.).
|
|
223
|
+
|
|
224
|
+
### Creating Skills
|
|
225
|
+
${skillStorageGuidance}
|
|
226
|
+
Each skill directory needs a \`SKILL.md\` with YAML frontmatter:
|
|
227
|
+
|
|
228
|
+
\`\`\`markdown
|
|
229
|
+
---
|
|
230
|
+
name: skill-name
|
|
231
|
+
description: Short description of what this skill does
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
# Skill Name
|
|
235
|
+
|
|
236
|
+
Usage instructions, examples, etc.
|
|
237
|
+
Scripts are in: {baseDir}/
|
|
238
|
+
\`\`\`
|
|
239
|
+
|
|
240
|
+
\`name\` and \`description\` are required. Use \`{baseDir}\` as placeholder for the skill's directory path.
|
|
241
|
+
|
|
242
|
+
### Available Skills
|
|
243
|
+
${skills.length > 0 ? formatSkillsForPrompt(skills) : "(no skills installed yet)"}${skippedSkillLinks.length > 0
|
|
244
|
+
? `\n\nNote: these skill entries were skipped because they are symlinks, which the host never follows when reading this conversation's skills: ${skippedSkillLinks.join(", ")}. Replace each with a real file or directory (for example \`cp -rL\`) to load it.`
|
|
245
|
+
: ""}`;
|
|
246
|
+
}
|
|
247
|
+
function buildOperatingPrompt(input, paths) {
|
|
248
|
+
const { memory, projection, sandboxConfig } = input;
|
|
249
|
+
const { workspaceRoot, conversationPath } = paths;
|
|
250
|
+
const isContainerLike = sandboxConfig.type === "container" || sandboxConfig.type === "image";
|
|
251
|
+
const globalMemoryReadOnly = projection.promptSources.globalKnowledgeReadOnly === true;
|
|
252
|
+
const memoryGuidance = globalMemoryReadOnly
|
|
253
|
+
? `\`${workspaceRoot}/MEMORY.md\` is shared workspace memory mounted read-only for this private office: you can read what public channels have learned, but writes to it are rejected. Write everything you learn here to \`${conversationPath}/MEMORY.md\` instead; it never leaves this conversation.`
|
|
254
|
+
: `Write important shared knowledge to \`${workspaceRoot}/MEMORY.md\` and conversation-specific knowledge to \`${conversationPath}/MEMORY.md\`.
|
|
255
|
+
|
|
256
|
+
Shared memory is read by every conversation in this workspace, so it holds only what every conversation needs: workspace-wide conventions, security rules, and decisions that apply regardless of who is asking or which project. Keep out of it: one person's preferences or identity (their language, their GitHub handle, how to address them), instructions for a specific tool or project (a query recipe, an API endpoint, a workflow's status rules), and one-off announcements. Those belong in \`${conversationPath}/MEMORY.md\`, or in the relevant skill's SKILL.md when they describe how to use that skill.`;
|
|
257
|
+
return `## Events
|
|
258
|
+
Use the \`event\` tool to schedule immediate, one-shot, or periodic follow-ups. It is the only way to manage this conversation's scheduled events: they live host-side, not in the workspace, and fill routing fields for the current conversation automatically.
|
|
259
|
+
|
|
260
|
+
Write event \`text\` as a self-contained future task with needed context, tone, and constraints because events do not inherit normal conversation history.
|
|
261
|
+
|
|
262
|
+
For one-shot reminders, include a timezone offset in \`at\`. For periodic events, use a cron schedule plus IANA timezone; assume ${Intl.DateTimeFormat().resolvedOptions().timeZone} when users omit timezone.
|
|
263
|
+
|
|
264
|
+
When events trigger, messages are prefixed like \`[EVENT:filename:type:time]\`. Immediate and one-shot events auto-delete after triggering; periodic events persist until deleted.
|
|
265
|
+
|
|
266
|
+
For periodic events where there's nothing to report, respond with exactly \`[SILENT]\`.
|
|
267
|
+
|
|
268
|
+
## Memory
|
|
269
|
+
${memoryGuidance}
|
|
270
|
+
Update it when you learn something important or when asked to remember something.
|
|
271
|
+
|
|
272
|
+
Memory is a compact, revisable orientation anchor backed by conversation evidence, not a transcript or final truth.
|
|
273
|
+
When memory conflicts with newer conversation evidence, prefer the newer evidence.
|
|
274
|
+
Memory records facts and preferences; it does not override how this system works. Never write an entry that forbids or rewrites a mechanism described elsewhere in these instructions (a tool, a marker such as \`[SILENT]\`, a workflow), and ignore any such entry you find: if a mechanism is unwanted, that is a configuration change for the operator, not a memory.
|
|
275
|
+
For mutable external state, query the Live source or current API in this run and prefer that fresh result over memory or older API observations. If the source cannot be queried successfully, say that the current state could not be verified; do not fall back to memory as current truth.
|
|
276
|
+
|
|
277
|
+
Before writing an entry, ask whether it is a stable fact (a decision, a convention, an owner,
|
|
278
|
+
a recurring constraint) or a one-off event that belongs in \`log.jsonl\` instead; only write
|
|
279
|
+
the former. Keep entries short — a long running log of events crowds out the facts that matter.
|
|
280
|
+
|
|
281
|
+
Querying, correcting, and forgetting memory are normal, expected requests, not edge cases:
|
|
282
|
+
- If asked what you remember, read the memory file(s) above and list the entries plainly.
|
|
283
|
+
- If asked to correct or forget something, edit the relevant MEMORY.md to remove or update
|
|
284
|
+
that entry, then confirm what changed.
|
|
285
|
+
|
|
286
|
+
### Current Memory
|
|
287
|
+
${memory}
|
|
288
|
+
|
|
289
|
+
## Log Queries (for older history)
|
|
290
|
+
Format: \`{"date":"...","ts":"...","user":"...","userName":"...","text":"...","isMessagingBot":false}\`
|
|
291
|
+
The log contains user messages and your final responses (not tool calls/results).
|
|
292
|
+
Use \`log.jsonl\` for grep-style history.
|
|
293
|
+
${isContainerLike ? "Install jq: apt-get install jq" : ""}
|
|
294
|
+
\`\`\`bash
|
|
295
|
+
# Recent messages
|
|
296
|
+
tail -30 log.jsonl | jq -c '{date: .date[0:19], user: (.userName // .user), text}'
|
|
297
|
+
|
|
298
|
+
# Search for specific topic
|
|
299
|
+
grep -i "topic" log.jsonl | jq -c '{date: .date[0:19], user: (.userName // .user), text}'
|
|
300
|
+
|
|
301
|
+
# Messages from specific user
|
|
302
|
+
grep '"userName":"mario"' log.jsonl | tail -20 | jq -c '{date: .date[0:19], text}'
|
|
303
|
+
|
|
304
|
+
\`\`\`
|
|
305
|
+
|
|
306
|
+
## Tools
|
|
307
|
+
- bash: Run shell commands (primary tool). Install packages as needed.
|
|
308
|
+
- read: Read files
|
|
309
|
+
- write: Create/overwrite files
|
|
310
|
+
- edit: Surgical file edits
|
|
311
|
+
- event: Schedule immediate, one-shot, or periodic follow-ups
|
|
312
|
+
- sandbox: Inspect or temporarily adjust sandbox limits
|
|
313
|
+
- attach: Share files to the platform
|
|
314
|
+
- jev: Ask Jev (a fast calibrated decision model) boolean / choice / score questions about a state you supply; returns probabilities and confidence, never text. Use it whenever you need to classify, detect, score, rank, route, pick among known candidates, or verify.
|
|
315
|
+
- react: Add an emoji reaction to the triggering message. mikan already acknowledges work on its own when your first tool starts, so do not react before starting work. React only on a periodic/background check with nothing to report: react with eyes instead of writing "nothing to report". Use a short name without colons (e.g. eyes, white_check_mark, +1); GitHub only accepts +1, -1, laugh, confused, heart, hooray, rocket, eyes and rejects anything else.
|
|
316
|
+
|
|
317
|
+
Each tool requires a "label" parameter (shown to user).
|
|
318
|
+
|
|
319
|
+
## Signatures
|
|
320
|
+
mikan adds the \`_Triggered by …_\` signature to your final chat response; do not write it there yourself. When you write to GitHub (\`gh issue comment\`, \`gh issue create\`, \`gh pr comment\`, \`gh pr create\`, \`gh pr review\`, or a github_* tool that posts text), end the body with \`_Triggered by @<user>_\`, where <user> is the name in the triggering message's \`[user]\` prefix. For a scheduled event, use \`_Triggered by [event: <file>]_\` with the file name from its \`[EVENT:<file>:…]\` prefix.
|
|
321
|
+
`;
|
|
322
|
+
}
|
|
323
|
+
export function buildSystemPrompt(input) {
|
|
324
|
+
const paths = buildRuntimePaths(input.workspacePath, input.office);
|
|
325
|
+
return `${buildContextPrompt(input, paths)}\n\n${buildWorkspaceSkillsPrompt(input, paths)}\n\n${buildOperatingPrompt(input, paths)}`;
|
|
326
|
+
}
|
|
327
|
+
export function buildTurnInstructions(isEventTrigger) {
|
|
328
|
+
if (!isEventTrigger)
|
|
329
|
+
return "";
|
|
330
|
+
return `## Event Trigger Mode
|
|
331
|
+
- You are handling a scheduled/background event, not opening a brand new chat with a stranger.
|
|
332
|
+
- Treat the incoming user message as a self-contained task prepared by an earlier run.
|
|
333
|
+
- Complete the task directly. Avoid generic greetings, self-introductions, or boilerplate offers to help.
|
|
334
|
+
- For reminders/follow-ups, prefer a short direct response that sounds like a continuation of prior intent.
|
|
335
|
+
- If the event text includes tone, brevity, or language instructions, follow them literally.`;
|
|
336
|
+
}
|
|
337
|
+
export function appendTriggerAttribution(text, triggerAttribution, sessionLink) {
|
|
338
|
+
if (!triggerAttribution)
|
|
339
|
+
return text;
|
|
340
|
+
const trimmed = text.trimEnd();
|
|
341
|
+
const signature = `_Triggered by ${triggerAttribution}_`;
|
|
342
|
+
const suffix = sessionLink ? `${signature} · session: ${sessionLink}` : signature;
|
|
343
|
+
if (trimmed.endsWith(suffix))
|
|
344
|
+
return text;
|
|
345
|
+
const body = stripTriggerSignature(trimmed);
|
|
346
|
+
return `${body}\n\n${suffix}`;
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/harness/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAEjC,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,oBAA4B;IACvF,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACrE,IACE,mBAAmB,KAAK,IAAI;QAC5B,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,EACrC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAkB,EAClB,WAAmB,EACnB,MAA6C;IAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClF,IAAI,UAA8B,CAAC;IACnC,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,IAAI,UAAU;YAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,gBAAgB,GAA2B;IAC/C,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF,KAAK,UAAU,yBAAyB,CACtC,OAA4B,EAC5B,aAAqB,EACrB,WAAgC,EAChC,cAAyD;IAEzD,MAAM,gBAAgB,GAAmB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,GAAG,aAAa,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,WAAW,EAAE,iBAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;QAC9E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7F,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,OAAO;oBACb,QAAQ;oBACR,IAAI,EAAE,MAAM,cAAc,CAAC,WAAW,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,oBAA4B,EAAE,MAAc;IACrE,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IACtE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO;QACL,aAAa;QACb,gBAAgB;QAChB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA4B,EAC5B,aAAqB,EACrB,WAAgC,EAChC,cAAyD;IAKzD,IAAI,WAAW,GAAG,iBAAiB,CAAC;QAClC,IAAI,EAAE,IAAI,IAAI,EAAE;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IACH,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,MAAM,yBAAyB,CACzE,OAAO,EACP,aAAa,EACb,WAAW,EACX,cAAc,CACf,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,WAAW,IAAI,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;IAC9F,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CACpB,IAAwB,EACxB,OAAe,EACf,KAAa;IAEb,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,UAAU,CAAC,kBAAkB,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,UAA+B;IACvD,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC;IAC9E,MAAM,QAAQ,GAAG;QACf,aAAa,CAAC,gBAAgB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC;QAC9E,aAAa,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,qBAAqB,CAAC;KAC7F,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAkC,EAAE,aAAqB;IACpF,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO;4BACe,aAAa;4BACb,aAAa;;qBAEpB,aAAa,iHAAiH,CAAC;QAChJ,KAAK,WAAW;YACd,OAAO;4BACe,aAAa;4BACb,aAAa;;uCAEF,CAAC;QACpC,KAAK,YAAY;YACf,OAAO;4BACe,aAAa;4BACb,aAAa;;0FAEiD,CAAC;QACvF;YACE,OAAO;4BACe,aAAa;4BACb,aAAa;uCACF,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAA8D;IAE9D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/D,IAAI,cAAc;QAAE,OAAO,WAAW,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,YAAY;QAAE,OAAO,WAAW,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IACpD,OAAO,SAAS,CAAC;AACnB,CAAC;AAID,SAAS,YAAY,CAAC,IAAc,EAAE,KAAa;IACjD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA+B,EAAE,KAAyB;IACpF,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC7C,MAAM,eAAe,GAAG,YAAY,CAClC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EACnD,sBAAsB,CACvB,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,EACtE,mBAAmB,CACpB,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9E,MAAM,yBAAyB,GAC7B,QAAQ,CAAC,IAAI,KAAK,OAAO;QACvB,CAAC,CAAC;;;;;;;;;;CAUP;QACK,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,oBAAoB,QAAQ,CAAC,IAAI;;;;;;;EAOxC,QAAQ,CAAC,eAAe,GAAG,yBAAyB;;;YAG1C,eAAe;;SAElB,YAAY;;;;;EAKnB,cAAc;0DAC0C,WAAW;0FACqB,CAAC;AAC3F,CAAC;AAED,SAAS,0BAA0B,CACjC,KAA+B,EAC/B,KAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IACrE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,iBAAiB,GAAG,UAAU,CAAC,aAAa,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACpF,MAAM,eAAe,GAAG,iBAAiB;QACvC,CAAC,CAAC,GAAG,aAAa,qJAAqJ;QACvK,CAAC,CAAC,GAAG,aAAa,0IAA0I,CAAC;IAC/J,MAAM,oBAAoB,GAAG,iBAAiB;QAC5C,CAAC,CAAC,qBAAqB,gBAAgB,+BAA+B,aAAa,kDAAkD;QACrI,CAAC,CAAC,4BAA4B,aAAa,0DAA0D,gBAAgB,oBAAoB,CAAC;IAE5I,OAAO;EACP,eAAe;EACf,aAAa;kDACmC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,6BAA6B;qDACpE,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa;;MAEtG,MAAM,CAAC,GAAG;;;;yFAIyE,WAAW;;;;;;;EAOlG,oBAAoB;;;;;;;;;;;;;;;;;;EAkBpB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,2BAA2B,GAC7E,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,+IAA+I,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,mFAAmF;QAChQ,CAAC,CAAC,EACN,EAAE,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA+B,EAAE,KAAyB;IACtF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,KAAK,WAAW,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC;IAC7F,MAAM,oBAAoB,GAAG,UAAU,CAAC,aAAa,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACvF,MAAM,cAAc,GAAG,oBAAoB;QACzC,CAAC,CAAC,KAAK,aAAa,0MAA0M,gBAAgB,0DAA0D;QACxS,CAAC,CAAC,yCAAyC,aAAa,yDAAyD,gBAAgB;;4eAEuW,gBAAgB,6FAA6F,CAAC;IACxlB,OAAO;;;;;mIAK0H,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;;;;;;;EAOjL,cAAc;;;;;;;;;;;;;;;;;;EAkBd,MAAM;;;;;;EAMN,eAAe,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BxD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA+B;IAC/D,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;AACvI,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,cAAuB;IAC3D,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO;;;;;6FAKoF,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,kBAAsC,EACtC,WAAoB;IAEpB,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,iBAAiB,kBAAkB,GAAG,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,eAAe,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,GAAG,IAAI,OAAO,MAAM,EAAE,CAAC;AAChC,CAAC","sourcesContent":["import type { ImageContent } from \"@earendil-works/pi-ai\";\nimport { existsSync } from \"node:fs\";\nimport { chmod, mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join, posix } from \"node:path\";\nimport type { ConversationMessage } from \"../types.js\";\nimport type { Executor, RuntimePathContext, SandboxConfig } from \"../sandbox/types.js\";\nimport { formatSkillsForPrompt } from \"./skills.js\";\nimport type { WorkspaceProjection, Office } from \"../office/types.js\";\nimport { formatHistoryLine, stripTriggerSignature } from \"../sessions/history-line.js\";\nimport type { BuildSystemPromptOptions } from \"./types.js\";\n\nimport { readTextFileNoFollowIfExists } from \"../file-guards.js\";\nimport * as log from \"../log.js\";\n\nfunction hasParentTraversal(path: string): boolean {\n return path.split(/[\\\\/]/).some((segment) => segment === \"..\");\n}\n\nexport function normalizeAttachRuntimePath(filePath: string, runtimeWorkspaceRoot: string): string {\n if (hasParentTraversal(filePath)) {\n throw new Error(\"Cannot attach files: parent-directory traversal is not allowed\");\n }\n\n const runtimeRoot = posix.resolve(runtimeWorkspaceRoot);\n const runtimePath = posix.resolve(runtimeRoot, filePath);\n const runtimeRelativePath = posix.relative(runtimeRoot, runtimePath);\n if (\n runtimeRelativePath === \"..\" ||\n runtimeRelativePath.startsWith(\"../\") ||\n posix.isAbsolute(runtimeRelativePath)\n ) {\n throw new Error(\"Cannot attach files: path must be within the runtime workspace\");\n }\n return runtimePath;\n}\n\nexport async function withStagedRuntimeFile(\n executor: Executor,\n runtimePath: string,\n upload: (stagedPath: string) => Promise<void>,\n): Promise<void> {\n const content = Buffer.from(await executor.readFileBase64(runtimePath), \"base64\");\n let stagingDir: string | undefined;\n try {\n stagingDir = await mkdtemp(join(tmpdir(), \"mikan-upload-\"));\n await chmod(stagingDir, 0o700);\n const stagedPath = join(stagingDir, basename(runtimePath));\n await writeFile(stagedPath, content, { mode: 0o600, flag: \"wx\" });\n await chmod(stagedPath, 0o600);\n await upload(stagedPath);\n } finally {\n if (stagingDir) await rm(stagingDir, { recursive: true, force: true });\n }\n}\n\nconst IMAGE_MIME_TYPES: Record<string, string> = {\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n};\n\nasync function collectMessageAttachments(\n message: ConversationMessage,\n workspacePath: string,\n pathContext?: RuntimePathContext,\n readAttachment?: (runtimePath: string) => Promise<string>,\n): Promise<{ imageAttachments: ImageContent[]; nonImagePaths: string[] }> {\n const imageAttachments: ImageContent[] = [];\n const nonImagePaths: string[] = [];\n\n for (const attachment of message.attachments || []) {\n const runtimePath = `${workspacePath}/${attachment.localPath}`;\n const hostPath = pathContext?.runtimeToHostPath?.(runtimePath) ?? runtimePath;\n const mimeType = IMAGE_MIME_TYPES[attachment.localPath.toLowerCase().split(\".\").pop() || \"\"];\n\n if (mimeType && existsSync(hostPath) && readAttachment) {\n try {\n imageAttachments.push({\n type: \"image\",\n mimeType,\n data: await readAttachment(runtimePath),\n });\n } catch {\n nonImagePaths.push(runtimePath);\n }\n } else {\n nonImagePaths.push(runtimePath);\n }\n }\n\n return { imageAttachments, nonImagePaths };\n}\n\nfunction buildRuntimePaths(runtimeWorkspaceRoot: string, office: Office) {\n const workspaceRoot = runtimeWorkspaceRoot.replace(/\\/+$/, \"\") || \"/\";\n const conversationPath = posix.join(workspaceRoot, office.key);\n return {\n workspaceRoot,\n conversationPath,\n scratchPath: posix.join(conversationPath, \"scratch\"),\n };\n}\n\nexport async function buildPromptPayload(\n message: ConversationMessage,\n workspacePath: string,\n pathContext?: RuntimePathContext,\n readAttachment?: (runtimePath: string) => Promise<string>,\n): Promise<{\n userMessage: string;\n imageAttachments: ImageContent[];\n}> {\n let userMessage = formatHistoryLine({\n date: new Date(),\n userName: message.userName,\n threadTs: message.threadTs,\n text: message.text,\n });\n const { imageAttachments, nonImagePaths } = await collectMessageAttachments(\n message,\n workspacePath,\n pathContext,\n readAttachment,\n );\n\n if (nonImagePaths.length > 0) {\n userMessage += `\\n\\n<slack_attachments>\\n${nonImagePaths.join(\"\\n\")}\\n</slack_attachments>`;\n }\n\n return { userMessage, imageAttachments };\n}\n\nfunction memorySection(\n path: string | undefined,\n heading: string,\n label: string,\n): string | undefined {\n if (!path) return undefined;\n try {\n const content = readTextFileNoFollowIfExists(path)?.trim();\n return content ? `### ${heading}\\n${content}` : undefined;\n } catch (error) {\n log.logWarning(`Failed to read ${label}`, `${path}: ${error}`);\n return undefined;\n }\n}\n\nexport function getMemory(projection: WorkspaceProjection): string {\n const { globalMemoryPath, conversationMemoryPath } = projection.promptSources;\n const sections = [\n memorySection(globalMemoryPath, \"Global Workspace Memory\", \"workspace memory\"),\n memorySection(conversationMemoryPath, \"Conversation-Specific Memory\", \"conversation memory\"),\n ];\n const parts = sections.filter((section) => section !== undefined);\n return parts.length > 0 ? parts.join(\"\\n\\n\") : \"(no working memory yet)\";\n}\n\nfunction buildEnvDescription(sandboxType: SandboxConfig[\"type\"], workspaceRoot: string): string {\n switch (sandboxType) {\n case \"image\":\n return `You are running inside a managed per-conversation container.\n- Runtime workspace root: ${workspaceRoot}\n- Bash commands start in: ${workspaceRoot}\n- Install tools with the image's package manager\n- Only files under ${workspaceRoot} persist; installed packages and anything else in the container are discarded when the sandbox image is updated`;\n case \"container\":\n return `You are running inside a shared container.\n- Runtime workspace root: ${workspaceRoot}\n- Bash commands start in: ${workspaceRoot}\n- Install tools with the container's package manager\n- Your changes persist across sessions`;\n case \"cloudflare\":\n return `You are running through a Cloudflare Sandbox bridge.\n- Runtime workspace root: ${workspaceRoot}\n- Bash commands start in: ${workspaceRoot}\n- Your commands run in a remote container managed by Cloudflare\n- Important: the remote filesystem is not automatically synced back to the host workspace`;\n default:\n return `You are running directly on the host machine.\n- Runtime workspace root: ${workspaceRoot}\n- Bash commands start in: ${workspaceRoot}\n- Be careful with system modifications`;\n }\n}\n\nexport function resolveTriggerAttribution(\n message: Pick<ConversationMessage, \"id\" | \"text\" | \"userName\">,\n): string | undefined {\n const eventTextMatch = message.text.match(/^\\[EVENT:([^:]+):/);\n if (eventTextMatch) return `[event: ${eventTextMatch[1]}]`;\n const eventIdMatch = message.id.match(/^event:([^:]+)/);\n if (eventIdMatch) return `[event: ${eventIdMatch[1]}]`;\n if (message.userName) return `@${message.userName}`;\n return undefined;\n}\n\ntype RuntimePromptPaths = ReturnType<typeof buildRuntimePaths>;\n\nfunction mappingTable(rows: string[], empty: string): string {\n return rows.length > 0 ? rows.join(\"\\n\") : empty;\n}\n\nfunction buildContextPrompt(input: BuildSystemPromptOptions, paths: RuntimePromptPaths): string {\n const { platform, sandboxConfig } = input;\n const { workspaceRoot, scratchPath } = paths;\n const channelMappings = mappingTable(\n platform.channels.map((c) => `${c.id}\\t#${c.name}`),\n \"(no channels loaded)\",\n );\n const userMappings = mappingTable(\n platform.users.map((u) => `${u.id}\\t@${u.userName}\\t${u.displayName}`),\n \"(no users loaded)\",\n );\n const envDescription = buildEnvDescription(sandboxConfig.type, workspaceRoot);\n const slackBlockKitInstructions =\n platform.name === \"slack\"\n ? `\n## Slack Tasks\n- In top-level Slack DMs, use start_task for multi-step investigations, changes/tests, or long waits so the user can keep chatting. Write a short, casual acknowledgement like a helpful colleague (e.g. 好,我來整理一下,弄好再通知你), not a formal restatement of the task. Do not invent an ETA. Separately provide a self-contained task with constraints and attachment paths. Call it alone before executing the work.\n- For questions about task progress, always call task_status before answering. Its observations are the only authority for current task status. Never infer progress, completion, or an ETA from elapsed time or your earlier promises. acknowledgement is only the original task description, NOT live progress. Only currentTool describes a current operation; if absent, say it is still running without inventing a phase. Never translate subagent into a more specific activity than the observation supports. If multiple tasks match, ask which one. If status is unknown, say so. For status-only questions, report the task_status observation directly; do not search history, run shell probes, or repeat the investigation just to reconfirm it. Only inspect the result content when the user asks for that content.\n- In a thread, continue the task directly; do not hand it off again. Other platforms and shared channels do not support start_task yet.\n\n## Slack Rendering\n- The Slack adapter renders responses natively from standard Markdown. Answer in normal Markdown/GFM.\n- Markdown pipe tables are rendered as native Slack tables.\n- For interactive elements (buttons, select menus), use the slack_blockkit tool; user interactions arrive as \"[Slack action] <action_id>: <value>\" messages.\n`\n : \"\";\n\n return `You are mikan, a ${platform.name} bot assistant. Be concise. No emojis.\n\n## Context\n- Each user message starts with its send time in \\`[YYYY-MM-DD HH:MM:SS+ZZ:ZZ]\\`; treat it as the current date and time instead of running \\`date\\`.\n- Messages in your context are reliable: answer from them directly, including anything the user asked you to remember in this conversation.\n- Your context does not hold tool output from other sessions: a thread or a session started by \\`/new\\` sees earlier work only as chat text. When the user asks for a result your context lacks, such as a command's output, call the \\`history\\` tool instead of guessing or rerunning the command.\n- User messages include a \\`[in-thread:TS]\\` marker when sent from within a platform thread/reply (TS is the thread or parent message identifier). Without this marker, the message is a top-level conversation message.\n${platform.formattingGuide}${slackBlockKitInstructions}\n\n## Platform IDs\nChannels: ${channelMappings}\n\nUsers: ${userMappings}\n\nWhen mentioning users, write <@userName> using the exact userName from the Users table above (e.g., <@mario>). Never invent handles from other platforms (GitHub, email); the platform adapter converts <@userName> to the platform's native mention form.\n\n## Environment\n${envDescription}\n- Default place for clones, downloads, and experiments: ${scratchPath}\n- Do not use host-only paths unless you are running in host mode and verified they exist.`;\n}\n\nfunction buildWorkspaceSkillsPrompt(\n input: BuildSystemPromptOptions,\n paths: RuntimePromptPaths,\n): string {\n const { office, projection, skills, skippedSkillLinks = [] } = input;\n const { workspaceRoot, conversationPath, scratchPath } = paths;\n const knowledgeReadOnly = projection.promptSources.globalKnowledgeReadOnly === true;\n const workspaceLayout = knowledgeReadOnly\n ? `${workspaceRoot}/ contains this private conversation's directory, read-only shared MEMORY.md and skills/, and read-only public/ with every public channel's office.`\n : `${workspaceRoot}/ contains this public conversation's directory, shared MEMORY.md and skills/, and read-only public/ with every public channel's office.`;\n const skillStorageGuidance = knowledgeReadOnly\n ? `Store skills in \\`${conversationPath}/skills/<name>/\\`; shared \\`${workspaceRoot}/skills/\\` is read-only for this private office.`\n : `Store shared skills in \\`${workspaceRoot}/skills/<name>/\\` or conversation-specific skills in \\`${conversationPath}/skills/<name>/\\`.`;\n\n return `## Workspace Layout\n${workspaceLayout}\n${workspaceRoot}/\n├── MEMORY.md # Shared memory${knowledgeReadOnly ? \" (read-only here)\" : \" (all public conversations)\"}\n├── skills/ # Shared CLI tools${knowledgeReadOnly ? \" (read-only here)\" : \" you create\"}\n├── public/<office-key>/ # Other public channels' offices (read-only)\n└── ${office.key}/ # This conversation\n ├── MEMORY.md # Conversation-specific memory\n ├── log.jsonl # Human-readable message history (no tool results)\n ├── attachments/ # User-shared files\n ├── scratch/ # Working directory for clones/downloads/experiments: ${scratchPath}\n └── skills/ # Conversation-specific tools\n\n## Skills (Custom CLI Tools)\nYou can create reusable CLI tools for recurring tasks (email, APIs, data processing, etc.).\n\n### Creating Skills\n${skillStorageGuidance}\nEach skill directory needs a \\`SKILL.md\\` with YAML frontmatter:\n\n\\`\\`\\`markdown\n---\nname: skill-name\ndescription: Short description of what this skill does\n---\n\n# Skill Name\n\nUsage instructions, examples, etc.\nScripts are in: {baseDir}/\n\\`\\`\\`\n\n\\`name\\` and \\`description\\` are required. Use \\`{baseDir}\\` as placeholder for the skill's directory path.\n\n### Available Skills\n${skills.length > 0 ? formatSkillsForPrompt(skills) : \"(no skills installed yet)\"}${\n skippedSkillLinks.length > 0\n ? `\\n\\nNote: these skill entries were skipped because they are symlinks, which the host never follows when reading this conversation's skills: ${skippedSkillLinks.join(\", \")}. Replace each with a real file or directory (for example \\`cp -rL\\`) to load it.`\n : \"\"\n }`;\n}\n\nfunction buildOperatingPrompt(input: BuildSystemPromptOptions, paths: RuntimePromptPaths): string {\n const { memory, projection, sandboxConfig } = input;\n const { workspaceRoot, conversationPath } = paths;\n const isContainerLike = sandboxConfig.type === \"container\" || sandboxConfig.type === \"image\";\n const globalMemoryReadOnly = projection.promptSources.globalKnowledgeReadOnly === true;\n const memoryGuidance = globalMemoryReadOnly\n ? `\\`${workspaceRoot}/MEMORY.md\\` is shared workspace memory mounted read-only for this private office: you can read what public channels have learned, but writes to it are rejected. Write everything you learn here to \\`${conversationPath}/MEMORY.md\\` instead; it never leaves this conversation.`\n : `Write important shared knowledge to \\`${workspaceRoot}/MEMORY.md\\` and conversation-specific knowledge to \\`${conversationPath}/MEMORY.md\\`.\n\nShared memory is read by every conversation in this workspace, so it holds only what every conversation needs: workspace-wide conventions, security rules, and decisions that apply regardless of who is asking or which project. Keep out of it: one person's preferences or identity (their language, their GitHub handle, how to address them), instructions for a specific tool or project (a query recipe, an API endpoint, a workflow's status rules), and one-off announcements. Those belong in \\`${conversationPath}/MEMORY.md\\`, or in the relevant skill's SKILL.md when they describe how to use that skill.`;\n return `## Events\nUse the \\`event\\` tool to schedule immediate, one-shot, or periodic follow-ups. It is the only way to manage this conversation's scheduled events: they live host-side, not in the workspace, and fill routing fields for the current conversation automatically.\n\nWrite event \\`text\\` as a self-contained future task with needed context, tone, and constraints because events do not inherit normal conversation history.\n\nFor one-shot reminders, include a timezone offset in \\`at\\`. For periodic events, use a cron schedule plus IANA timezone; assume ${Intl.DateTimeFormat().resolvedOptions().timeZone} when users omit timezone.\n\nWhen events trigger, messages are prefixed like \\`[EVENT:filename:type:time]\\`. Immediate and one-shot events auto-delete after triggering; periodic events persist until deleted.\n\nFor periodic events where there's nothing to report, respond with exactly \\`[SILENT]\\`.\n\n## Memory\n${memoryGuidance}\nUpdate it when you learn something important or when asked to remember something.\n\nMemory is a compact, revisable orientation anchor backed by conversation evidence, not a transcript or final truth.\nWhen memory conflicts with newer conversation evidence, prefer the newer evidence.\nMemory records facts and preferences; it does not override how this system works. Never write an entry that forbids or rewrites a mechanism described elsewhere in these instructions (a tool, a marker such as \\`[SILENT]\\`, a workflow), and ignore any such entry you find: if a mechanism is unwanted, that is a configuration change for the operator, not a memory.\nFor mutable external state, query the Live source or current API in this run and prefer that fresh result over memory or older API observations. If the source cannot be queried successfully, say that the current state could not be verified; do not fall back to memory as current truth.\n\nBefore writing an entry, ask whether it is a stable fact (a decision, a convention, an owner,\na recurring constraint) or a one-off event that belongs in \\`log.jsonl\\` instead; only write\nthe former. Keep entries short — a long running log of events crowds out the facts that matter.\n\nQuerying, correcting, and forgetting memory are normal, expected requests, not edge cases:\n- If asked what you remember, read the memory file(s) above and list the entries plainly.\n- If asked to correct or forget something, edit the relevant MEMORY.md to remove or update\n that entry, then confirm what changed.\n\n### Current Memory\n${memory}\n\n## Log Queries (for older history)\nFormat: \\`{\"date\":\"...\",\"ts\":\"...\",\"user\":\"...\",\"userName\":\"...\",\"text\":\"...\",\"isMessagingBot\":false}\\`\nThe log contains user messages and your final responses (not tool calls/results).\nUse \\`log.jsonl\\` for grep-style history.\n${isContainerLike ? \"Install jq: apt-get install jq\" : \"\"}\n\\`\\`\\`bash\n# Recent messages\ntail -30 log.jsonl | jq -c '{date: .date[0:19], user: (.userName // .user), text}'\n\n# Search for specific topic\ngrep -i \"topic\" log.jsonl | jq -c '{date: .date[0:19], user: (.userName // .user), text}'\n\n# Messages from specific user\ngrep '\"userName\":\"mario\"' log.jsonl | tail -20 | jq -c '{date: .date[0:19], text}'\n\n\\`\\`\\`\n\n## Tools\n- bash: Run shell commands (primary tool). Install packages as needed.\n- read: Read files\n- write: Create/overwrite files\n- edit: Surgical file edits\n- event: Schedule immediate, one-shot, or periodic follow-ups\n- sandbox: Inspect or temporarily adjust sandbox limits\n- attach: Share files to the platform\n- jev: Ask Jev (a fast calibrated decision model) boolean / choice / score questions about a state you supply; returns probabilities and confidence, never text. Use it whenever you need to classify, detect, score, rank, route, pick among known candidates, or verify.\n- react: Add an emoji reaction to the triggering message. mikan already acknowledges work on its own when your first tool starts, so do not react before starting work. React only on a periodic/background check with nothing to report: react with eyes instead of writing \"nothing to report\". Use a short name without colons (e.g. eyes, white_check_mark, +1); GitHub only accepts +1, -1, laugh, confused, heart, hooray, rocket, eyes and rejects anything else.\n\nEach tool requires a \"label\" parameter (shown to user).\n\n## Signatures\nmikan adds the \\`_Triggered by …_\\` signature to your final chat response; do not write it there yourself. When you write to GitHub (\\`gh issue comment\\`, \\`gh issue create\\`, \\`gh pr comment\\`, \\`gh pr create\\`, \\`gh pr review\\`, or a github_* tool that posts text), end the body with \\`_Triggered by @<user>_\\`, where <user> is the name in the triggering message's \\`[user]\\` prefix. For a scheduled event, use \\`_Triggered by [event: <file>]_\\` with the file name from its \\`[EVENT:<file>:…]\\` prefix.\n`;\n}\n\nexport function buildSystemPrompt(input: BuildSystemPromptOptions): string {\n const paths = buildRuntimePaths(input.workspacePath, input.office);\n return `${buildContextPrompt(input, paths)}\\n\\n${buildWorkspaceSkillsPrompt(input, paths)}\\n\\n${buildOperatingPrompt(input, paths)}`;\n}\n\nexport function buildTurnInstructions(isEventTrigger: boolean): string {\n if (!isEventTrigger) return \"\";\n return `## Event Trigger Mode\n- You are handling a scheduled/background event, not opening a brand new chat with a stranger.\n- Treat the incoming user message as a self-contained task prepared by an earlier run.\n- Complete the task directly. Avoid generic greetings, self-introductions, or boilerplate offers to help.\n- For reminders/follow-ups, prefer a short direct response that sounds like a continuation of prior intent.\n- If the event text includes tone, brevity, or language instructions, follow them literally.`;\n}\n\nexport function appendTriggerAttribution(\n text: string,\n triggerAttribution: string | undefined,\n sessionLink?: string,\n): string {\n if (!triggerAttribution) return text;\n const trimmed = text.trimEnd();\n const signature = `_Triggered by ${triggerAttribution}_`;\n const suffix = sessionLink ? `${signature} · session: ${sessionLink}` : signature;\n if (trimmed.endsWith(suffix)) return text;\n const body = stripTriggerSignature(trimmed);\n return `${body}\\n\\n${suffix}`;\n}\n"]}
|