@code-yeongyu/senpi 2026.5.19 → 2026.5.20-3
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 +23 -0
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +2 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +9 -9
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +2 -2
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +8 -8
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +23 -14
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +36 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +4 -4
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts +3 -3
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/dynamic-prompt/build.d.ts +1 -1
- package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/build.js.map +1 -1
- package/dist/core/dynamic-prompt/index.d.ts +12 -12
- package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/index.js.map +1 -1
- package/dist/core/dynamic-prompt/intent-gate.d.ts +1 -1
- package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
- package/dist/core/dynamic-prompt/tool-categorization.d.ts +1 -1
- package/dist/core/dynamic-prompt/tool-categorization.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/tool-categorization.js.map +1 -1
- package/dist/core/dynamic-prompt/tool-section.d.ts +1 -1
- package/dist/core/dynamic-prompt/tool-section.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/tool-section.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/index.d.ts +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.css +1108 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1871 -0
- package/dist/core/export-html/tool-renderer.d.ts +2 -2
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/builtin/anthropic-bash/index.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-bash/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-bash/index.js.map +1 -1
- package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-web-search/index.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/index.d.ts +3 -3
- package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/checkpoint-state.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts +2 -2
- package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +4 -3
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js +88 -17
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts +2 -2
- package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.d.ts +2 -2
- package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/restoration-tracker.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +5 -5
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/state.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/state.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts +2 -2
- package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
- package/dist/core/extensions/builtin/diff.d.ts +1 -1
- package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
- package/dist/core/extensions/builtin/diff.js.map +1 -1
- package/dist/core/extensions/builtin/files.d.ts +1 -1
- package/dist/core/extensions/builtin/files.d.ts.map +1 -1
- package/dist/core/extensions/builtin/files.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/errors.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts +11 -11
- package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/index.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/params.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/parser.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +2 -2
- package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts +5 -5
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/kimi-web-search/index.d.ts +3 -0
- package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/kimi-web-search/index.js +208 -0
- package/dist/core/extensions/builtin/kimi-web-search/index.js.map +1 -0
- package/dist/core/extensions/builtin/openai-web-search/index.d.ts +1 -1
- package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/arity.d.ts +3 -3
- package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/arity.js +155 -158
- package/dist/core/extensions/builtin/permission-system/arity.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/cli.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/cli.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/cli.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/config.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/config.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/evaluate.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/evaluate.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/evaluate.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/events.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/events.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/events.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/non-interactive.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/prompt.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/service.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/settings.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/settings.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/storage.d.ts +1 -1
- package/dist/core/extensions/builtin/permission-system/storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/storage.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/types.d.ts +2 -2
- package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/types.js +4 -4
- package/dist/core/extensions/builtin/permission-system/types.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/wildcard.d.ts +3 -3
- package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/wildcard.js +4 -7
- package/dist/core/extensions/builtin/permission-system/wildcard.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/index.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts +3 -3
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-url-widget.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
- package/dist/core/extensions/builtin/redraws.d.ts +1 -1
- package/dist/core/extensions/builtin/redraws.d.ts.map +1 -1
- package/dist/core/extensions/builtin/redraws.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/builtin/system-messages.d.ts +2 -2
- package/dist/core/extensions/builtin/system-messages.d.ts.map +1 -1
- package/dist/core/extensions/builtin/system-messages.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.d.ts +3 -3
- package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/system-messages.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/system-messages.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
- package/dist/core/extensions/builtin/tps.d.ts +1 -1
- package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tps.js.map +1 -1
- package/dist/core/extensions/index.d.ts +8 -8
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +2 -2
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +32 -6
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +109 -5
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +19 -19
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +2 -2
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +8 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +4 -4
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +9 -9
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +14 -14
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +7 -5
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +2 -2
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -0
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/diff-render.d.ts.map +1 -1
- package/dist/core/tools/diff-render.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +2 -2
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +2 -2
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +2 -2
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +17 -17
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +2 -2
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/read.d.ts +2 -2
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +28 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +5 -5
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/assets/clankolas.png +0 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +2 -2
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +2 -2
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +2 -2
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +2 -2
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.d.ts +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +3 -2
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +42 -42
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +31 -31
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +3 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +3 -3
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +10 -3
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +67 -7
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-info-format.d.ts +1 -1
- package/dist/modes/interactive/session-info-format.d.ts.map +1 -1
- package/dist/modes/interactive/session-info-format.js.map +1 -1
- package/dist/modes/interactive/startup-tools.d.ts.map +1 -1
- package/dist/modes/interactive/startup-tools.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +86 -0
- package/dist/modes/interactive/theme/light.json +85 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/working-status.d.ts +3 -0
- package/dist/modes/interactive/working-status.d.ts.map +1 -1
- package/dist/modes/interactive/working-status.js +10 -0
- package/dist/modes/interactive/working-status.js.map +1 -1
- package/dist/modes/neo-mode.d.ts +20 -1
- package/dist/modes/neo-mode.d.ts.map +1 -1
- package/dist/modes/neo-mode.js +30 -2
- package/dist/modes/neo-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +5 -5
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +2 -2
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +4 -4
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/neo-tui-bin/senpi-neo-tui-linux-x64 +0 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +40 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/changelog.d.ts +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +2 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +5 -4
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/settings.md +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/doom-overlay/doom-component.ts +2 -2
- package/examples/extensions/doom-overlay/index.ts +3 -3
- package/examples/extensions/overlay-qa-tests.ts +97 -66
- package/examples/extensions/overlay-test.ts +7 -4
- package/examples/extensions/plan-mode/index.ts +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-remote.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/openai-remote.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype Context,\n\ttype ImageContent,\n\ttype Model,\n\ttype SimpleStreamOptions,\n\tstreamSimple,\n\ttype TextContent,\n\ttype ToolCall,\n} from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.js\";\nimport type { SessionEntry } from \"../../../session-manager.js\";\nimport type { ServiceTier, SessionBeforeCompactEvent } from \"../../types.js\";\n\nexport const OPENAI_REMOTE_COMPACTION_SCHEMA = \"senpi.compaction.openai-remote.v1\";\nexport const SENPI_COMPACTION_EVENT = \"senpi:compaction\";\n\ntype OpenAiInputText = { type: \"input_text\"; text: string };\ntype OpenAiInputImage = { type: \"input_image\"; detail: \"auto\"; image_url: string };\ntype OpenAiInputContent = OpenAiInputText | OpenAiInputImage;\ntype OpenAiOutputText = { type: \"output_text\"; text: string; annotations: [] };\ntype OpenAiMessageInputItem = {\n\ttype?: \"message\";\n\tid?: string;\n\trole: \"user\" | \"system\" | \"developer\";\n\tcontent: string | OpenAiInputContent[];\n\tstatus?: \"in_progress\" | \"completed\" | \"incomplete\";\n};\ntype OpenAiAssistantMessageItem = {\n\ttype: \"message\";\n\tid: string;\n\trole: \"assistant\";\n\tstatus: \"completed\";\n\tcontent: OpenAiOutputText[];\n\tphase?: \"commentary\" | \"final_answer\";\n};\ntype OpenAiFunctionCallItem = {\n\ttype: \"function_call\";\n\tid?: string;\n\tcall_id: string;\n\tname: string;\n\targuments: string;\n};\ntype OpenAiFunctionCallOutputItem = {\n\ttype: \"function_call_output\";\n\tcall_id: string;\n\toutput: string;\n};\ntype OpenAiRemoteTransport = \"websocket\" | \"compact-endpoint\";\ntype OpenAiCompactionItem = {\n\ttype: \"compaction\";\n\tencrypted_content: string;\n\tid?: string | null;\n\tcreated_by?: string;\n};\ntype OpenAiContextCompactionItem = {\n\ttype: \"context_compaction\";\n\tencrypted_content: string;\n\tid?: string | null;\n\tcreated_by?: string;\n};\ntype OpenAiContextCompactionTriggerItem = {\n\ttype: \"context_compaction\";\n};\ntype OpenAiProviderNativeItem = Record<string, unknown> & { type: string };\nexport type OpenAiRemoteInputItem =\n\t| OpenAiMessageInputItem\n\t| OpenAiAssistantMessageItem\n\t| OpenAiFunctionCallItem\n\t| OpenAiFunctionCallOutputItem\n\t| OpenAiCompactionItem\n\t| OpenAiContextCompactionItem\n\t| OpenAiProviderNativeItem;\n\ntype OpenAiCompactBody = {\n\tmodel: string;\n\tinput: OpenAiRemoteInputItem[];\n\tinstructions?: string;\n\tprompt_cache_key?: string;\n\tservice_tier?: ServiceTier;\n};\n\nexport type OpenAiRemoteCompactionDetails = {\n\tschema: typeof OPENAI_REMOTE_COMPACTION_SCHEMA;\n\tmode: \"openai-remote\";\n\tprovider: \"openai\";\n\tapi: \"openai-responses\";\n\ttransport: OpenAiRemoteTransport;\n\tmodelId: string;\n\tresponseId: string;\n\tcreatedAt: number;\n\trequestInputItemCount: number;\n\tretainedInputItemCount: number;\n\treplacementInput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\nexport type OpenAiRemoteCompactionRequest = {\n\tbody: OpenAiCompactBody;\n\tinputItemCount: number;\n\ttokensBefore: number;\n};\n\nexport type OpenAiRemoteCompactionResult = CompactionResult<OpenAiRemoteCompactionDetails> & {\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\ntype OpenAiCompactedResponse = {\n\tid: string;\n\tcreated_at: number;\n\tobject: \"response.compaction\";\n\toutput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\ntype OpenAiResponsesStream = {\n\tresult(): Promise<AssistantMessage>;\n};\n\ntype OpenAiResponsesStreamRunner = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions: SimpleStreamOptions,\n) => OpenAiResponsesStream;\n\ntype OpenAiRemoteCompactionDependencies = {\n\tfetch?: typeof fetch;\n\tnow?: () => number;\n\tstreamRunner?: OpenAiResponsesStreamRunner;\n};\n\ntype OpenAiRemoteCompactionContext = {\n\tgetSystemPrompt(): string;\n\tmodel: Model<Api> | undefined;\n\tmodelRegistry: {\n\t\tgetApiKeyAndHeaders(model: Model<Api>): Promise<\n\t\t\t| {\n\t\t\t\t\tok: true;\n\t\t\t\t\tapiKey?: string;\n\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\textraBody?: Record<string, unknown>;\n\t\t\t\t\tupstreamModelId?: string;\n\t\t\t\t\tserviceTier?: ServiceTier;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tok: false;\n\t\t\t\t\terror: string;\n\t\t\t }\n\t\t>;\n\t};\n\tserviceTier: ServiceTier | undefined;\n\tsessionManager: {\n\t\tgetSessionId(): string;\n\t};\n};\n\ntype OpenAiRemoteCompactionEvent =\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_started\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tinputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_completed\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tresponseId: string;\n\t\t\tretainedInputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_fallback\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId?: string;\n\t\t\treason: string;\n\t\t\ttransport?: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_payload_rewritten\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\tmodelId: string;\n\t\t\tcompactionEntryId: string;\n\t\t\tinputItemCount: number;\n\t };\n\ntype EmitCompactionEvent = (event: OpenAiRemoteCompactionEvent) => void;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseJsonRecord(value: string | undefined): Record<string, unknown> | undefined {\n\tif (!value?.startsWith(\"{\")) return undefined;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(value);\n\t\treturn isRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction parseTextSignature(\n\tsignature: string | undefined,\n): { id: string; phase?: \"commentary\" | \"final_answer\" } | undefined {\n\tif (!signature) return undefined;\n\tconst parsed = parseJsonRecord(signature);\n\tif (parsed?.v === 1 && typeof parsed.id === \"string\") {\n\t\tif (parsed.phase === \"commentary\" || parsed.phase === \"final_answer\") {\n\t\t\treturn { id: parsed.id, phase: parsed.phase };\n\t\t}\n\t\treturn { id: parsed.id };\n\t}\n\treturn { id: signature };\n}\n\nfunction isOpenAiResponsesModel(model: Model<Api> | undefined): model is Model<\"openai-responses\"> {\n\treturn model?.provider === \"openai\" && model.api === \"openai-responses\";\n}\n\nfunction supportsOpenAiResponsesWebSocket(model: Model<\"openai-responses\">): boolean {\n\tif (model.compat?.supportsWebSocket !== undefined) return model.compat.supportsWebSocket;\n\ttry {\n\t\treturn new URL(model.baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction toolResultText(content: string | TextContent[] | (TextContent | ImageContent)[]): string | undefined {\n\tif (typeof content === \"string\") return content;\n\tconst parts: string[] = [];\n\tfor (const block of content) {\n\t\tif (block.type !== \"text\") return undefined;\n\t\tparts.push(block.text);\n\t}\n\treturn parts.join(\"\\n\");\n}\n\nfunction convertUserContent(content: string | (TextContent | ImageContent)[]): OpenAiInputContent[] {\n\tif (typeof content === \"string\") return [{ type: \"input_text\", text: content }];\n\treturn content.map((block): OpenAiInputContent => {\n\t\tif (block.type === \"text\") return { type: \"input_text\", text: block.text };\n\t\treturn {\n\t\t\ttype: \"input_image\",\n\t\t\tdetail: \"auto\",\n\t\t\timage_url: `data:${block.mimeType};base64,${block.data}`,\n\t\t};\n\t});\n}\n\nfunction providerNativeItem(raw: unknown): OpenAiProviderNativeItem | undefined {\n\tif (!isRecord(raw) || typeof raw.type !== \"string\") return undefined;\n\treturn { ...raw, type: raw.type };\n}\n\nfunction convertThinking(block: { thinkingSignature?: string }): OpenAiProviderNativeItem | undefined {\n\tconst parsed = parseJsonRecord(block.thinkingSignature);\n\tif (parsed?.type !== \"reasoning\") return undefined;\n\treturn { ...parsed, type: \"reasoning\" };\n}\n\nfunction convertTextBlock(block: TextContent, messageIndex: number): OpenAiAssistantMessageItem {\n\tconst signature = parseTextSignature(block.textSignature);\n\tconst item = {\n\t\ttype: \"message\",\n\t\trole: \"assistant\",\n\t\tstatus: \"completed\",\n\t\tid: signature?.id ?? `msg_${messageIndex}`,\n\t\tcontent: [{ type: \"output_text\", text: block.text, annotations: [] }],\n\t\t...(signature?.phase ? { phase: signature.phase } : {}),\n\t} satisfies OpenAiAssistantMessageItem;\n\treturn item;\n}\n\nfunction convertToolCall(block: ToolCall): OpenAiFunctionCallItem {\n\tconst [callId = block.id, itemId] = block.id.split(\"|\");\n\treturn {\n\t\ttype: \"function_call\",\n\t\t...(itemId ? { id: itemId } : {}),\n\t\tcall_id: callId,\n\t\tname: block.name,\n\t\targuments: JSON.stringify(block.arguments ?? {}),\n\t};\n}\n\nfunction isSameOpenAiResponsesAssistant(message: AssistantMessage): boolean {\n\treturn message.provider === \"openai\" && message.api === \"openai-responses\";\n}\n\nfunction convertAssistantMessage(message: AssistantMessage, messageIndex: number): OpenAiRemoteInputItem[] | undefined {\n\tif (!isSameOpenAiResponsesAssistant(message)) return undefined;\n\n\tconst items: OpenAiRemoteInputItem[] = [];\n\tfor (const block of message.content) {\n\t\tswitch (block.type) {\n\t\t\tcase \"text\":\n\t\t\t\titems.push(convertTextBlock(block, messageIndex));\n\t\t\t\tbreak;\n\t\t\tcase \"thinking\": {\n\t\t\t\tconst reasoning = convertThinking(block);\n\t\t\t\tif (!reasoning) return undefined;\n\t\t\t\titems.push(reasoning);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolCall\":\n\t\t\t\titems.push(convertToolCall(block));\n\t\t\t\tbreak;\n\t\t\tcase \"providerNative\": {\n\t\t\t\tconst item = providerNativeItem(block.raw);\n\t\t\t\tif (!item) return undefined;\n\t\t\t\titems.push(item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn items.length > 0 ? items : undefined;\n}\n\nfunction convertAgentMessage(message: AgentMessage, messageIndex: number): OpenAiRemoteInputItem[] | undefined {\n\tswitch (message.role) {\n\t\tcase \"user\":\n\t\t\treturn [{ role: \"user\", content: convertUserContent(message.content) }];\n\t\tcase \"assistant\":\n\t\t\treturn convertAssistantMessage(message, messageIndex);\n\t\tcase \"toolResult\": {\n\t\t\tconst [callId = message.toolCallId] = message.toolCallId.split(\"|\");\n\t\t\tconst output = toolResultText(message.content);\n\t\t\tif (output === undefined) return undefined;\n\t\t\treturn [{ type: \"function_call_output\", call_id: callId, output }];\n\t\t}\n\t\tcase \"bashExecution\":\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\tcase \"custom\":\n\t\t\treturn undefined;\n\t\tdefault: {\n\t\t\tconst exhaustive: never = message;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nfunction detailsFromEntry(entry: SessionEntry): OpenAiRemoteCompactionDetails | undefined {\n\tif (entry.type !== \"compaction\") return undefined;\n\treturn getOpenAiRemoteCompactionDetails(entry.details);\n}\n\nexport function getOpenAiRemoteCompactionDetails(value: unknown): OpenAiRemoteCompactionDetails | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (value.schema !== OPENAI_REMOTE_COMPACTION_SCHEMA || value.mode !== \"openai-remote\") return undefined;\n\tif (value.provider !== \"openai\" || value.api !== \"openai-responses\") return undefined;\n\tif (typeof value.modelId !== \"string\" || typeof value.responseId !== \"string\") return undefined;\n\tif (typeof value.createdAt !== \"number\") return undefined;\n\tif (typeof value.requestInputItemCount !== \"number\" || typeof value.retainedInputItemCount !== \"number\") {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(value.replacementInput)) return undefined;\n\treturn {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: value.transport === \"websocket\" ? \"websocket\" : \"compact-endpoint\",\n\t\tmodelId: value.modelId,\n\t\tresponseId: value.responseId,\n\t\tcreatedAt: value.createdAt,\n\t\trequestInputItemCount: value.requestInputItemCount,\n\t\tretainedInputItemCount: value.retainedInputItemCount,\n\t\treplacementInput: value.replacementInput.filter((item): item is OpenAiRemoteInputItem => isRecord(item)),\n\t\t...(isRecord(value.usage) ? { usage: value.usage } : {}),\n\t};\n}\n\nfunction convertBranchEntries(entries: SessionEntry[]): OpenAiRemoteInputItem[] | undefined {\n\tconst items: OpenAiRemoteInputItem[] = [];\n\tlet messageIndex = 0;\n\tfor (const entry of entries) {\n\t\tswitch (entry.type) {\n\t\t\tcase \"message\": {\n\t\t\t\tconst converted = convertAgentMessage(entry.message, messageIndex);\n\t\t\t\tif (!converted) return undefined;\n\t\t\t\titems.push(...converted);\n\t\t\t\tmessageIndex++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compaction\": {\n\t\t\t\tconst details = detailsFromEntry(entry);\n\t\t\t\tif (!details) return undefined;\n\t\t\t\titems.push(...details.replacementInput);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch_summary\":\n\t\t\tcase \"custom_message\":\n\t\t\t\treturn undefined;\n\t\t\tcase \"thinking_level_change\":\n\t\t\tcase \"model_change\":\n\t\t\tcase \"custom\":\n\t\t\tcase \"label\":\n\t\t\tcase \"session_info\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn items;\n}\n\nexport function createOpenAiRemoteCompactionRequest(options: {\n\tmodel: Model<Api> | undefined;\n\tsystemPrompt: string;\n\tbranchEntries: SessionEntry[];\n\ttokensBefore: number;\n\tpromptCacheKey?: string;\n\tserviceTier?: ServiceTier;\n}): OpenAiRemoteCompactionRequest | undefined {\n\tif (!isOpenAiResponsesModel(options.model)) return undefined;\n\tconst input = convertBranchEntries(options.branchEntries);\n\tif (!input || input.length === 0) return undefined;\n\treturn {\n\t\tbody: {\n\t\t\tmodel: options.model.id,\n\t\t\tinput,\n\t\t\t...(options.systemPrompt ? { instructions: options.systemPrompt } : {}),\n\t\t\t...(options.promptCacheKey ? { prompt_cache_key: options.promptCacheKey } : {}),\n\t\t\t...(options.serviceTier ? { service_tier: options.serviceTier } : {}),\n\t\t},\n\t\tinputItemCount: input.length,\n\t\ttokensBefore: options.tokensBefore,\n\t};\n}\n\nfunction isOpenAiCompactionItem(item: OpenAiRemoteInputItem): item is OpenAiCompactionItem {\n\treturn item.type === \"compaction\" && typeof item.encrypted_content === \"string\";\n}\n\nfunction isOpenAiContextCompactionItem(item: OpenAiRemoteInputItem): item is OpenAiContextCompactionItem {\n\treturn item.type === \"context_compaction\" && typeof item.encrypted_content === \"string\";\n}\n\nfunction isOpenAiRemoteCompactionOutputItem(\n\titem: OpenAiRemoteInputItem,\n): item is OpenAiCompactionItem | OpenAiContextCompactionItem {\n\treturn isOpenAiCompactionItem(item) || isOpenAiContextCompactionItem(item);\n}\n\nfunction isRetainedRemoteOutputItem(item: OpenAiRemoteInputItem): boolean {\n\tif (isOpenAiRemoteCompactionOutputItem(item)) return true;\n\treturn item.type === \"message\" && (item.role === \"user\" || item.role === \"system\" || item.role === \"developer\");\n}\n\nfunction isRetainedResponsesStreamInputItem(item: OpenAiRemoteInputItem): boolean {\n\tif (item.type === \"message\") return item.role === \"user\";\n\treturn \"role\" in item && item.role === \"user\";\n}\n\nfunction isOpenAiCompactedResponse(value: unknown): value is OpenAiCompactedResponse {\n\tif (!isRecord(value)) return false;\n\tif (value.object !== \"response.compaction\" || typeof value.id !== \"string\" || typeof value.created_at !== \"number\") {\n\t\treturn false;\n\t}\n\treturn Array.isArray(value.output);\n}\n\nexport function buildOpenAiRemoteCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInputItemCount: number;\n\tresponse: OpenAiCompactedResponse;\n}): OpenAiRemoteCompactionResult {\n\tconst replacementInput = options.response.output.filter(isRetainedRemoteOutputItem);\n\tconst compactionItem = replacementInput.find(isOpenAiRemoteCompactionOutputItem);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI remote compaction did not return a compaction item\");\n\t}\n\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"compact-endpoint\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.id,\n\t\tcreatedAt: options.response.created_at,\n\t\trequestInputItemCount: options.requestInputItemCount,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.response.usage ? { usage: options.response.usage } : {}),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native /v1/responses/compact replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInputItemCount.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nfunction compactEndpointUrl(model: Model<\"openai-responses\">): string {\n\tconst baseUrl = model.baseUrl || \"https://api.openai.com/v1\";\n\treturn new URL(\"responses/compact\", baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`).toString();\n}\n\nfunction createHeaders(auth: { apiKey?: string; headers?: Record<string, string> }): Headers | undefined {\n\tconst headers = new Headers(auth.headers);\n\theaders.set(\"content-type\", \"application/json\");\n\tif (!headers.has(\"authorization\") && auth.apiKey) {\n\t\theaders.set(\"authorization\", `Bearer ${auth.apiKey}`);\n\t}\n\treturn headers.has(\"authorization\") ? headers : undefined;\n}\n\nfunction createOpenAiResponsesStreamCompactionInput(request: OpenAiRemoteCompactionRequest): OpenAiRemoteInputItem[] {\n\treturn [...request.body.input, { type: \"context_compaction\" } satisfies OpenAiContextCompactionTriggerItem];\n}\n\nexport function createOpenAiResponsesStreamCompactionPayload(\n\tpayload: unknown,\n\trequest: OpenAiRemoteCompactionRequest,\n): unknown | undefined {\n\tif (!isRecord(payload)) return undefined;\n\treturn {\n\t\t...payload,\n\t\tmodel: request.body.model,\n\t\tinput: [...leadingPromptMessages(payload.input), ...createOpenAiResponsesStreamCompactionInput(request)],\n\t\t...(request.body.prompt_cache_key ? { prompt_cache_key: request.body.prompt_cache_key } : {}),\n\t\t...(request.body.service_tier ? { service_tier: request.body.service_tier } : {}),\n\t};\n}\n\nfunction findResponsesStreamCompactionOutput(message: AssistantMessage): OpenAiContextCompactionItem | undefined {\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"providerNative\") continue;\n\t\tconst item = providerNativeItem(block.raw);\n\t\tif (item && isOpenAiContextCompactionItem(item)) return item;\n\t}\n\treturn undefined;\n}\n\nfunction usageRecordFromAssistant(message: AssistantMessage): Record<string, unknown> {\n\treturn {\n\t\tinput: message.usage.input,\n\t\toutput: message.usage.output,\n\t\tcacheRead: message.usage.cacheRead,\n\t\tcacheWrite: message.usage.cacheWrite,\n\t\ttotalTokens: message.usage.totalTokens,\n\t};\n}\n\nexport function buildOpenAiResponsesStreamCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInput: OpenAiRemoteInputItem[];\n\tresponse: AssistantMessage;\n\tnow: () => number;\n}): OpenAiRemoteCompactionResult {\n\tconst compactionItem = findResponsesStreamCompactionOutput(options.response);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI Responses stream compaction did not return a context_compaction item\");\n\t}\n\n\tconst retainedInput = options.requestInput.filter(isRetainedResponsesStreamInputItem);\n\tconst replacementInput = [...retainedInput, compactionItem];\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"websocket\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.responseId ?? `response-${options.now()}`,\n\t\tcreatedAt: Math.floor(options.response.timestamp / 1000),\n\t\trequestInputItemCount: options.requestInput.length,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\tusage: usageRecordFromAssistant(options.response),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native Responses WebSocket replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInput.length.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nasync function runOpenAiResponsesStreamCompaction(options: {\n\tmodel: Model<\"openai-responses\">;\n\tauth: { apiKey?: string; headers?: Record<string, string>; extraBody?: Record<string, unknown> };\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\trequest: OpenAiRemoteCompactionRequest;\n\tsignal: AbortSignal;\n\tstreamRunner: OpenAiResponsesStreamRunner;\n\tsystemPrompt: string;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst stream = options.streamRunner(\n\t\toptions.model,\n\t\t{ systemPrompt: options.systemPrompt, messages: [] },\n\t\t{\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\tcacheRetention: \"short\",\n\t\t\textraBody: options.auth.extraBody,\n\t\t\theaders: options.auth.headers,\n\t\t\tonPayload: (payload) => {\n\t\t\t\tconst rewritten = createOpenAiResponsesStreamCompactionPayload(payload, options.request);\n\t\t\t\tif (!isRecord(rewritten) || !Array.isArray(rewritten.input)) {\n\t\t\t\t\tthrow new Error(\"Unable to build OpenAI Responses stream compaction payload\");\n\t\t\t\t}\n\t\t\t\treturn rewritten;\n\t\t\t},\n\t\t\tsessionId: options.request.body.prompt_cache_key,\n\t\t\tsignal: options.signal,\n\t\t\ttransport: \"websocket\",\n\t\t},\n\t);\n\tconst response = await stream.result();\n\tif (response.stopReason === \"error\" || response.stopReason === \"aborted\") {\n\t\treturn undefined;\n\t}\n\treturn buildOpenAiResponsesStreamCompactionResult({\n\t\tmodel: options.model,\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.request.tokensBefore,\n\t\trequestInput: options.request.body.input,\n\t\tresponse,\n\t\tnow: options.now,\n\t});\n}\n\nasync function runOpenAiCompactEndpointCompaction(options: {\n\tfetchImpl: typeof fetch;\n\theaders: Headers;\n\tmodel: Model<\"openai-responses\">;\n\trequest: OpenAiRemoteCompactionRequest;\n\trequestId: string;\n\tsignal: AbortSignal;\n\tfirstKeptEntryId: string;\n\temit?: EmitCompactionEvent;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_started\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tinputItemCount: options.request.inputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await options.fetchImpl(compactEndpointUrl(options.model), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: options.headers,\n\t\t\tbody: JSON.stringify(options.request.body),\n\t\t\tsignal: options.signal,\n\t\t});\n\t} catch (error) {\n\t\tif (options.signal.aborted) throw error;\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (!response.ok) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: `HTTP ${response.status}`,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet payload: unknown;\n\ttry {\n\t\tpayload = await response.json();\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tif (!isOpenAiCompactedResponse(payload)) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: \"invalid-compact-response\",\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet result: OpenAiRemoteCompactionResult;\n\ttry {\n\t\tresult = buildOpenAiRemoteCompactionResult({\n\t\t\tmodel: options.model,\n\t\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\t\ttokensBefore: options.request.tokensBefore,\n\t\t\trequestInputItemCount: options.request.inputItemCount,\n\t\t\tresponse: payload,\n\t\t});\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_completed\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tresponseId: payload.id,\n\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\treturn result;\n}\n\nexport async function runOpenAiRemoteCompaction(\n\tctx: OpenAiRemoteCompactionContext,\n\tevent: SessionBeforeCompactEvent,\n\temit?: EmitCompactionEvent,\n\tdependencies: OpenAiRemoteCompactionDependencies = {},\n): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst model = ctx.model;\n\tif (!isOpenAiResponsesModel(model) || event.reason === \"branch\") {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model?.id,\n\t\t\treason: event.reason === \"branch\" ? \"branch-compaction\" : \"not-openai-responses\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\tif (!auth.ok) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: auth.error,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst requestModel = auth.upstreamModelId ? { ...model, id: auth.upstreamModelId } : model;\n\tconst serviceTier = ctx.serviceTier ?? auth.serviceTier;\n\tconst request = createOpenAiRemoteCompactionRequest({\n\t\tmodel: requestModel,\n\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\tbranchEntries: event.branchEntries,\n\t\ttokensBefore: event.preparation.tokensBefore,\n\t\tpromptCacheKey: ctx.sessionManager.getSessionId(),\n\t\tserviceTier,\n\t});\n\tif (!request) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"session-not-openai-native\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (supportsOpenAiResponsesWebSocket(requestModel)) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_started\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\tinputItemCount: request.inputItemCount,\n\t\t\ttransport: \"websocket\",\n\t\t});\n\t\ttry {\n\t\t\tconst result = await runOpenAiResponsesStreamCompaction({\n\t\t\t\tmodel: requestModel,\n\t\t\t\tauth,\n\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\trequest,\n\t\t\t\tsignal: event.signal,\n\t\t\t\tstreamRunner:\n\t\t\t\t\tdependencies.streamRunner ??\n\t\t\t\t\t((streamModel, context, options) => streamSimple(streamModel, context, options)),\n\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t});\n\t\t\tif (result) {\n\t\t\t\temit?.({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\taction: \"remote_completed\",\n\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\tresponseId: result.details.responseId,\n\t\t\t\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: \"websocket-compaction-no-result\",\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (event.signal.aborted) throw error;\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst headers = createHeaders(auth);\n\tif (!headers) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"missing-openai-auth\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\treturn runOpenAiCompactEndpointCompaction({\n\t\tfetchImpl: dependencies.fetch ?? fetch,\n\t\theaders,\n\t\tmodel: requestModel,\n\t\trequest,\n\t\trequestId: event.requestId,\n\t\tsignal: event.signal,\n\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\temit,\n\t});\n}\n\nfunction latestRemoteCompaction(\n\tentries: SessionEntry[],\n): { entryId: string; index: number; details: OpenAiRemoteCompactionDetails } | undefined {\n\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"compaction\") continue;\n\t\tconst details = getOpenAiRemoteCompactionDetails(entry.details);\n\t\tif (details) return { entryId: entry.id, index, details };\n\t\treturn undefined;\n\t}\n\treturn undefined;\n}\n\nfunction leadingPromptMessages(input: unknown): OpenAiRemoteInputItem[] {\n\tif (!Array.isArray(input)) return [];\n\tconst result: OpenAiRemoteInputItem[] = [];\n\tfor (const item of input) {\n\t\tif (!isRecord(item)) break;\n\t\tconst role = item.role;\n\t\tif (role !== \"system\" && role !== \"developer\") break;\n\t\tresult.push(providerNativeItem(item) ?? { role, content: typeof item.content === \"string\" ? item.content : [] });\n\t}\n\treturn result;\n}\n\nexport function rewriteOpenAiPayloadWithRemoteCompaction(\n\tpayload: unknown,\n\toptions: { model: Model<Api> | undefined; branchEntries: SessionEntry[] },\n\temit?: EmitCompactionEvent,\n): unknown | undefined {\n\tif (!isOpenAiResponsesModel(options.model) || !isRecord(payload)) return undefined;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote) return undefined;\n\n\tconst postCompactionItems = convertBranchEntries(options.branchEntries.slice(remote.index + 1));\n\tif (!postCompactionItems) return undefined;\n\n\tconst input = [...leadingPromptMessages(payload.input), ...remote.details.replacementInput, ...postCompactionItems];\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_payload_rewritten\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\tmodelId: options.model.id,\n\t\tcompactionEntryId: remote.entryId,\n\t\tinputItemCount: input.length,\n\t});\n\treturn { ...payload, input };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"openai-remote.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/openai-remote.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype Api,\n\ttype AssistantMessage,\n\ttype Context,\n\ttype ImageContent,\n\ttype Model,\n\ttype SimpleStreamOptions,\n\tstreamSimple,\n\ttype TextContent,\n\ttype ToolCall,\n} from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport type { SessionEntry } from \"../../../session-manager.ts\";\nimport type { ServiceTier, SessionBeforeCompactEvent } from \"../../types.ts\";\n\nexport const OPENAI_REMOTE_COMPACTION_SCHEMA = \"senpi.compaction.openai-remote.v1\";\nexport const SENPI_COMPACTION_EVENT = \"senpi:compaction\";\n\ntype OpenAiInputText = { type: \"input_text\"; text: string };\ntype OpenAiInputImage = { type: \"input_image\"; detail: \"auto\"; image_url: string };\ntype OpenAiInputContent = OpenAiInputText | OpenAiInputImage;\ntype OpenAiOutputText = { type: \"output_text\"; text: string; annotations: [] };\ntype OpenAiMessageInputItem = {\n\ttype?: \"message\";\n\tid?: string;\n\trole: \"user\" | \"system\" | \"developer\";\n\tcontent: string | OpenAiInputContent[];\n\tstatus?: \"in_progress\" | \"completed\" | \"incomplete\";\n};\ntype OpenAiAssistantMessageItem = {\n\ttype: \"message\";\n\tid: string;\n\trole: \"assistant\";\n\tstatus: \"completed\";\n\tcontent: OpenAiOutputText[];\n\tphase?: \"commentary\" | \"final_answer\";\n};\ntype OpenAiFunctionCallItem = {\n\ttype: \"function_call\";\n\tid?: string;\n\tcall_id: string;\n\tname: string;\n\targuments: string;\n};\ntype OpenAiFunctionCallOutputItem = {\n\ttype: \"function_call_output\";\n\tcall_id: string;\n\toutput: string;\n};\ntype OpenAiRemoteTransport = \"websocket\" | \"compact-endpoint\";\ntype OpenAiCompactionItem = {\n\ttype: \"compaction\";\n\tencrypted_content: string;\n\tid?: string | null;\n\tcreated_by?: string;\n};\ntype OpenAiContextCompactionItem = {\n\ttype: \"context_compaction\";\n\tencrypted_content: string;\n\tid?: string | null;\n\tcreated_by?: string;\n};\ntype OpenAiContextCompactionTriggerItem = {\n\ttype: \"context_compaction\";\n};\ntype OpenAiProviderNativeItem = Record<string, unknown> & { type: string };\nexport type OpenAiRemoteInputItem =\n\t| OpenAiMessageInputItem\n\t| OpenAiAssistantMessageItem\n\t| OpenAiFunctionCallItem\n\t| OpenAiFunctionCallOutputItem\n\t| OpenAiCompactionItem\n\t| OpenAiContextCompactionItem\n\t| OpenAiProviderNativeItem;\n\ntype OpenAiCompactBody = {\n\tmodel: string;\n\tinput: OpenAiRemoteInputItem[];\n\tinstructions?: string;\n\tprompt_cache_key?: string;\n\tservice_tier?: ServiceTier;\n};\n\nexport type OpenAiRemoteCompactionDetails = {\n\tschema: typeof OPENAI_REMOTE_COMPACTION_SCHEMA;\n\tmode: \"openai-remote\";\n\tprovider: \"openai\";\n\tapi: \"openai-responses\";\n\ttransport: OpenAiRemoteTransport;\n\tmodelId: string;\n\tresponseId: string;\n\tcreatedAt: number;\n\trequestInputItemCount: number;\n\tretainedInputItemCount: number;\n\treplacementInput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\nexport type OpenAiRemoteCompactionRequest = {\n\tbody: OpenAiCompactBody;\n\tinputItemCount: number;\n\ttokensBefore: number;\n};\n\nexport type OpenAiRemoteCompactionResult = CompactionResult<OpenAiRemoteCompactionDetails> & {\n\tdetails: OpenAiRemoteCompactionDetails;\n};\n\ntype OpenAiCompactedResponse = {\n\tid: string;\n\tcreated_at: number;\n\tobject: \"response.compaction\";\n\toutput: OpenAiRemoteInputItem[];\n\tusage?: Record<string, unknown>;\n};\n\ntype OpenAiResponsesStream = {\n\tresult(): Promise<AssistantMessage>;\n};\n\ntype OpenAiResponsesStreamRunner = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions: SimpleStreamOptions,\n) => OpenAiResponsesStream;\n\ntype OpenAiRemoteCompactionDependencies = {\n\tfetch?: typeof fetch;\n\tnow?: () => number;\n\tremoteTimeoutMs?: number;\n\tstreamRunner?: OpenAiResponsesStreamRunner;\n};\n\ntype OpenAiRemoteCompactionContext = {\n\tgetSystemPrompt(): string;\n\tmodel: Model<Api> | undefined;\n\tmodelRegistry: {\n\t\tgetApiKeyAndHeaders(model: Model<Api>): Promise<\n\t\t\t| {\n\t\t\t\t\tok: true;\n\t\t\t\t\tapiKey?: string;\n\t\t\t\t\theaders?: Record<string, string>;\n\t\t\t\t\textraBody?: Record<string, unknown>;\n\t\t\t\t\tupstreamModelId?: string;\n\t\t\t\t\tserviceTier?: ServiceTier;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tok: false;\n\t\t\t\t\terror: string;\n\t\t\t }\n\t\t>;\n\t};\n\tserviceTier: ServiceTier | undefined;\n\tsessionManager: {\n\t\tgetSessionId(): string;\n\t};\n};\n\ntype OpenAiRemoteCompactionEvent =\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_started\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tinputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_completed\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId: string;\n\t\t\tresponseId: string;\n\t\t\tretainedInputItemCount: number;\n\t\t\ttransport: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_fallback\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\trequestId: string;\n\t\t\tmodelId?: string;\n\t\t\treason: string;\n\t\t\ttransport?: OpenAiRemoteTransport;\n\t }\n\t| {\n\t\t\tversion: 1;\n\t\t\taction: \"remote_payload_rewritten\";\n\t\t\troute: \"builtin.compaction.openai_remote\";\n\t\t\tmodelId: string;\n\t\t\tcompactionEntryId: string;\n\t\t\tinputItemCount: number;\n\t };\n\ntype EmitCompactionEvent = (event: OpenAiRemoteCompactionEvent) => void;\n\nconst OPENAI_REMOTE_COMPACTION_TIMEOUT_MS = 15_000;\nconst REMOTE_COMPACTION_TIMEOUT_REASON = \"remote-compaction-timeout\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseJsonRecord(value: string | undefined): Record<string, unknown> | undefined {\n\tif (!value?.startsWith(\"{\")) return undefined;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(value);\n\t\treturn isRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction parseTextSignature(\n\tsignature: string | undefined,\n): { id: string; phase?: \"commentary\" | \"final_answer\" } | undefined {\n\tif (!signature) return undefined;\n\tconst parsed = parseJsonRecord(signature);\n\tif (parsed?.v === 1 && typeof parsed.id === \"string\") {\n\t\tif (parsed.phase === \"commentary\" || parsed.phase === \"final_answer\") {\n\t\t\treturn { id: parsed.id, phase: parsed.phase };\n\t\t}\n\t\treturn { id: parsed.id };\n\t}\n\treturn { id: signature };\n}\n\nfunction isOpenAiResponsesModel(model: Model<Api> | undefined): model is Model<\"openai-responses\"> {\n\treturn model?.provider === \"openai\" && model.api === \"openai-responses\";\n}\n\nfunction supportsOpenAiResponsesWebSocket(model: Model<\"openai-responses\">): boolean {\n\tif (model.compat?.supportsWebSocket !== undefined) return model.compat.supportsWebSocket;\n\ttry {\n\t\treturn new URL(model.baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction toolResultText(content: string | TextContent[] | (TextContent | ImageContent)[]): string | undefined {\n\tif (typeof content === \"string\") return content;\n\tconst parts: string[] = [];\n\tfor (const block of content) {\n\t\tif (block.type !== \"text\") return undefined;\n\t\tparts.push(block.text);\n\t}\n\treturn parts.join(\"\\n\");\n}\n\nfunction convertUserContent(content: string | (TextContent | ImageContent)[]): OpenAiInputContent[] {\n\tif (typeof content === \"string\") return [{ type: \"input_text\", text: content }];\n\treturn content.map((block): OpenAiInputContent => {\n\t\tif (block.type === \"text\") return { type: \"input_text\", text: block.text };\n\t\treturn {\n\t\t\ttype: \"input_image\",\n\t\t\tdetail: \"auto\",\n\t\t\timage_url: `data:${block.mimeType};base64,${block.data}`,\n\t\t};\n\t});\n}\n\nfunction providerNativeItem(raw: unknown): OpenAiProviderNativeItem | undefined {\n\tif (!isRecord(raw) || typeof raw.type !== \"string\") return undefined;\n\treturn { ...raw, type: raw.type };\n}\n\nfunction convertThinking(block: { thinkingSignature?: string }): OpenAiProviderNativeItem | undefined {\n\tconst parsed = parseJsonRecord(block.thinkingSignature);\n\tif (parsed?.type !== \"reasoning\") return undefined;\n\treturn { ...parsed, type: \"reasoning\" };\n}\n\nfunction convertTextBlock(block: TextContent, messageIndex: number): OpenAiAssistantMessageItem {\n\tconst signature = parseTextSignature(block.textSignature);\n\tconst item = {\n\t\ttype: \"message\",\n\t\trole: \"assistant\",\n\t\tstatus: \"completed\",\n\t\tid: signature?.id ?? `msg_${messageIndex}`,\n\t\tcontent: [{ type: \"output_text\", text: block.text, annotations: [] }],\n\t\t...(signature?.phase ? { phase: signature.phase } : {}),\n\t} satisfies OpenAiAssistantMessageItem;\n\treturn item;\n}\n\nfunction convertToolCall(block: ToolCall): OpenAiFunctionCallItem {\n\tconst [callId = block.id, itemId] = block.id.split(\"|\");\n\treturn {\n\t\ttype: \"function_call\",\n\t\t...(itemId ? { id: itemId } : {}),\n\t\tcall_id: callId,\n\t\tname: block.name,\n\t\targuments: JSON.stringify(block.arguments ?? {}),\n\t};\n}\n\nfunction isSameOpenAiResponsesAssistant(message: AssistantMessage): boolean {\n\treturn message.provider === \"openai\" && message.api === \"openai-responses\";\n}\n\nfunction convertAssistantMessage(message: AssistantMessage, messageIndex: number): OpenAiRemoteInputItem[] | undefined {\n\tif (!isSameOpenAiResponsesAssistant(message)) return undefined;\n\n\tconst items: OpenAiRemoteInputItem[] = [];\n\tfor (const block of message.content) {\n\t\tswitch (block.type) {\n\t\t\tcase \"text\":\n\t\t\t\titems.push(convertTextBlock(block, messageIndex));\n\t\t\t\tbreak;\n\t\t\tcase \"thinking\": {\n\t\t\t\tconst reasoning = convertThinking(block);\n\t\t\t\tif (!reasoning) return undefined;\n\t\t\t\titems.push(reasoning);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolCall\":\n\t\t\t\titems.push(convertToolCall(block));\n\t\t\t\tbreak;\n\t\t\tcase \"providerNative\": {\n\t\t\t\tconst item = providerNativeItem(block.raw);\n\t\t\t\tif (!item) return undefined;\n\t\t\t\titems.push(item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn items.length > 0 ? items : undefined;\n}\n\nfunction convertAgentMessage(message: AgentMessage, messageIndex: number): OpenAiRemoteInputItem[] | undefined {\n\tswitch (message.role) {\n\t\tcase \"user\":\n\t\t\treturn [{ role: \"user\", content: convertUserContent(message.content) }];\n\t\tcase \"assistant\":\n\t\t\treturn convertAssistantMessage(message, messageIndex);\n\t\tcase \"toolResult\": {\n\t\t\tconst [callId = message.toolCallId] = message.toolCallId.split(\"|\");\n\t\t\tconst output = toolResultText(message.content);\n\t\t\tif (output === undefined) return undefined;\n\t\t\treturn [{ type: \"function_call_output\", call_id: callId, output }];\n\t\t}\n\t\tcase \"bashExecution\":\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\tcase \"custom\":\n\t\t\treturn undefined;\n\t\tdefault: {\n\t\t\tconst exhaustive: never = message;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nfunction detailsFromEntry(entry: SessionEntry): OpenAiRemoteCompactionDetails | undefined {\n\tif (entry.type !== \"compaction\") return undefined;\n\treturn getOpenAiRemoteCompactionDetails(entry.details);\n}\n\nexport function getOpenAiRemoteCompactionDetails(value: unknown): OpenAiRemoteCompactionDetails | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (value.schema !== OPENAI_REMOTE_COMPACTION_SCHEMA || value.mode !== \"openai-remote\") return undefined;\n\tif (value.provider !== \"openai\" || value.api !== \"openai-responses\") return undefined;\n\tif (typeof value.modelId !== \"string\" || typeof value.responseId !== \"string\") return undefined;\n\tif (typeof value.createdAt !== \"number\") return undefined;\n\tif (typeof value.requestInputItemCount !== \"number\" || typeof value.retainedInputItemCount !== \"number\") {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(value.replacementInput)) return undefined;\n\treturn {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: value.transport === \"websocket\" ? \"websocket\" : \"compact-endpoint\",\n\t\tmodelId: value.modelId,\n\t\tresponseId: value.responseId,\n\t\tcreatedAt: value.createdAt,\n\t\trequestInputItemCount: value.requestInputItemCount,\n\t\tretainedInputItemCount: value.retainedInputItemCount,\n\t\treplacementInput: value.replacementInput.filter((item): item is OpenAiRemoteInputItem => isRecord(item)),\n\t\t...(isRecord(value.usage) ? { usage: value.usage } : {}),\n\t};\n}\n\nfunction convertBranchEntries(entries: SessionEntry[]): OpenAiRemoteInputItem[] | undefined {\n\tconst items: OpenAiRemoteInputItem[] = [];\n\tlet messageIndex = 0;\n\tfor (const entry of entries) {\n\t\tswitch (entry.type) {\n\t\t\tcase \"message\": {\n\t\t\t\tconst converted = convertAgentMessage(entry.message, messageIndex);\n\t\t\t\tif (!converted) return undefined;\n\t\t\t\titems.push(...converted);\n\t\t\t\tmessageIndex++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compaction\": {\n\t\t\t\tconst details = detailsFromEntry(entry);\n\t\t\t\tif (!details) return undefined;\n\t\t\t\titems.push(...details.replacementInput);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch_summary\":\n\t\t\tcase \"custom_message\":\n\t\t\t\treturn undefined;\n\t\t\tcase \"thinking_level_change\":\n\t\t\tcase \"model_change\":\n\t\t\tcase \"custom\":\n\t\t\tcase \"label\":\n\t\t\tcase \"session_info\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn items;\n}\n\nexport function createOpenAiRemoteCompactionRequest(options: {\n\tmodel: Model<Api> | undefined;\n\tsystemPrompt: string;\n\tbranchEntries: SessionEntry[];\n\ttokensBefore: number;\n\tpromptCacheKey?: string;\n\tserviceTier?: ServiceTier;\n}): OpenAiRemoteCompactionRequest | undefined {\n\tif (!isOpenAiResponsesModel(options.model)) return undefined;\n\tconst input = convertBranchEntries(options.branchEntries);\n\tif (!input || input.length === 0) return undefined;\n\treturn {\n\t\tbody: {\n\t\t\tmodel: options.model.id,\n\t\t\tinput,\n\t\t\t...(options.systemPrompt ? { instructions: options.systemPrompt } : {}),\n\t\t\t...(options.promptCacheKey ? { prompt_cache_key: options.promptCacheKey } : {}),\n\t\t\t...(options.serviceTier ? { service_tier: options.serviceTier } : {}),\n\t\t},\n\t\tinputItemCount: input.length,\n\t\ttokensBefore: options.tokensBefore,\n\t};\n}\n\nfunction isOpenAiCompactionItem(item: OpenAiRemoteInputItem): item is OpenAiCompactionItem {\n\treturn item.type === \"compaction\" && typeof item.encrypted_content === \"string\";\n}\n\nfunction isOpenAiContextCompactionItem(item: OpenAiRemoteInputItem): item is OpenAiContextCompactionItem {\n\treturn item.type === \"context_compaction\" && typeof item.encrypted_content === \"string\";\n}\n\nfunction isOpenAiRemoteCompactionOutputItem(\n\titem: OpenAiRemoteInputItem,\n): item is OpenAiCompactionItem | OpenAiContextCompactionItem {\n\treturn isOpenAiCompactionItem(item) || isOpenAiContextCompactionItem(item);\n}\n\nfunction isRetainedRemoteOutputItem(item: OpenAiRemoteInputItem): boolean {\n\tif (isOpenAiRemoteCompactionOutputItem(item)) return true;\n\treturn item.type === \"message\" && (item.role === \"user\" || item.role === \"system\" || item.role === \"developer\");\n}\n\nfunction isRetainedResponsesStreamInputItem(item: OpenAiRemoteInputItem): boolean {\n\tif (item.type === \"message\") return item.role === \"user\";\n\treturn \"role\" in item && item.role === \"user\";\n}\n\nfunction isOpenAiCompactedResponse(value: unknown): value is OpenAiCompactedResponse {\n\tif (!isRecord(value)) return false;\n\tif (value.object !== \"response.compaction\" || typeof value.id !== \"string\" || typeof value.created_at !== \"number\") {\n\t\treturn false;\n\t}\n\treturn Array.isArray(value.output);\n}\n\nexport function buildOpenAiRemoteCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInputItemCount: number;\n\tresponse: OpenAiCompactedResponse;\n}): OpenAiRemoteCompactionResult {\n\tconst replacementInput = options.response.output.filter(isRetainedRemoteOutputItem);\n\tconst compactionItem = replacementInput.find(isOpenAiRemoteCompactionOutputItem);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI remote compaction did not return a compaction item\");\n\t}\n\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"compact-endpoint\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.id,\n\t\tcreatedAt: options.response.created_at,\n\t\trequestInputItemCount: options.requestInputItemCount,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\t...(options.response.usage ? { usage: options.response.usage } : {}),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native /v1/responses/compact replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInputItemCount.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nfunction compactEndpointUrl(model: Model<\"openai-responses\">): string {\n\tconst baseUrl = model.baseUrl || \"https://api.openai.com/v1\";\n\treturn new URL(\"responses/compact\", baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`).toString();\n}\n\nfunction createHeaders(auth: { apiKey?: string; headers?: Record<string, string> }): Headers | undefined {\n\tconst headers = new Headers(auth.headers);\n\theaders.set(\"content-type\", \"application/json\");\n\tif (!headers.has(\"authorization\") && auth.apiKey) {\n\t\theaders.set(\"authorization\", `Bearer ${auth.apiKey}`);\n\t}\n\treturn headers.has(\"authorization\") ? headers : undefined;\n}\n\nasync function runWithRemoteTimeout<T>(options: {\n\tsignal: AbortSignal;\n\ttimeoutMs: number;\n\trun: (signal: AbortSignal) => Promise<T>;\n\tonTimeout: () => void;\n}): Promise<T | undefined> {\n\tif (options.signal.aborted) {\n\t\tthrow new Error(\"Request was aborted\");\n\t}\n\n\tconst controller = new AbortController();\n\tlet timedOut = false;\n\tconst abortFromSource = () => controller.abort();\n\toptions.signal.addEventListener(\"abort\", abortFromSource, { once: true });\n\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\tconst timeoutPromise = new Promise<\"timeout\">((resolve) => {\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tcontroller.abort();\n\t\t\tresolve(\"timeout\");\n\t\t}, options.timeoutMs);\n\t\tconst unref = timeout.unref;\n\t\tif (unref) unref.call(timeout);\n\t});\n\n\tconst operation = options.run(controller.signal);\n\ttry {\n\t\tconst result = await Promise.race([operation, timeoutPromise]);\n\t\tif (result === \"timeout\") {\n\t\t\toptions.onTimeout();\n\t\t\toperation.catch(() => undefined);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result;\n\t} catch (error) {\n\t\tif (timedOut && !options.signal.aborted) {\n\t\t\toptions.onTimeout();\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tif (timeout) clearTimeout(timeout);\n\t\toptions.signal.removeEventListener(\"abort\", abortFromSource);\n\t}\n}\n\nfunction createOpenAiResponsesStreamCompactionInput(request: OpenAiRemoteCompactionRequest): OpenAiRemoteInputItem[] {\n\treturn [...request.body.input, { type: \"context_compaction\" } satisfies OpenAiContextCompactionTriggerItem];\n}\n\nexport function createOpenAiResponsesStreamCompactionPayload(\n\tpayload: unknown,\n\trequest: OpenAiRemoteCompactionRequest,\n): unknown | undefined {\n\tif (!isRecord(payload)) return undefined;\n\treturn {\n\t\t...payload,\n\t\tmodel: request.body.model,\n\t\tinput: [...leadingPromptMessages(payload.input), ...createOpenAiResponsesStreamCompactionInput(request)],\n\t\t...(request.body.prompt_cache_key ? { prompt_cache_key: request.body.prompt_cache_key } : {}),\n\t\t...(request.body.service_tier ? { service_tier: request.body.service_tier } : {}),\n\t};\n}\n\nfunction findResponsesStreamCompactionOutput(message: AssistantMessage): OpenAiContextCompactionItem | undefined {\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"providerNative\") continue;\n\t\tconst item = providerNativeItem(block.raw);\n\t\tif (item && isOpenAiContextCompactionItem(item)) return item;\n\t}\n\treturn undefined;\n}\n\nfunction usageRecordFromAssistant(message: AssistantMessage): Record<string, unknown> {\n\treturn {\n\t\tinput: message.usage.input,\n\t\toutput: message.usage.output,\n\t\tcacheRead: message.usage.cacheRead,\n\t\tcacheWrite: message.usage.cacheWrite,\n\t\ttotalTokens: message.usage.totalTokens,\n\t};\n}\n\nexport function buildOpenAiResponsesStreamCompactionResult(options: {\n\tmodel: Model<\"openai-responses\">;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\trequestInput: OpenAiRemoteInputItem[];\n\tresponse: AssistantMessage;\n\tnow: () => number;\n}): OpenAiRemoteCompactionResult {\n\tconst compactionItem = findResponsesStreamCompactionOutput(options.response);\n\tif (!compactionItem) {\n\t\tthrow new Error(\"OpenAI Responses stream compaction did not return a context_compaction item\");\n\t}\n\n\tconst retainedInput = options.requestInput.filter(isRetainedResponsesStreamInputItem);\n\tconst replacementInput = [...retainedInput, compactionItem];\n\tconst details = {\n\t\tschema: OPENAI_REMOTE_COMPACTION_SCHEMA,\n\t\tmode: \"openai-remote\",\n\t\tprovider: \"openai\",\n\t\tapi: \"openai-responses\",\n\t\ttransport: \"websocket\",\n\t\tmodelId: options.model.id,\n\t\tresponseId: options.response.responseId ?? `response-${options.now()}`,\n\t\tcreatedAt: Math.floor(options.response.timestamp / 1000),\n\t\trequestInputItemCount: options.requestInput.length,\n\t\tretainedInputItemCount: replacementInput.length,\n\t\treplacementInput,\n\t\tusage: usageRecordFromAssistant(options.response),\n\t} satisfies OpenAiRemoteCompactionDetails;\n\n\treturn {\n\t\tsummary: [\n\t\t\t\"OpenAI remote compaction checkpoint.\",\n\t\t\t`Native Responses WebSocket replay is active for ${replacementInput.length.toLocaleString()} retained item(s).`,\n\t\t\t`Original OpenAI input items compacted: ${options.requestInput.length.toLocaleString()}.`,\n\t\t].join(\"\\n\"),\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.tokensBefore,\n\t\tdetails,\n\t};\n}\n\nasync function runOpenAiResponsesStreamCompaction(options: {\n\tmodel: Model<\"openai-responses\">;\n\tauth: { apiKey?: string; headers?: Record<string, string>; extraBody?: Record<string, unknown> };\n\tfirstKeptEntryId: string;\n\tnow: () => number;\n\trequest: OpenAiRemoteCompactionRequest;\n\tsignal: AbortSignal;\n\tstreamRunner: OpenAiResponsesStreamRunner;\n\tsystemPrompt: string;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst stream = options.streamRunner(\n\t\toptions.model,\n\t\t{ systemPrompt: options.systemPrompt, messages: [] },\n\t\t{\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\tcacheRetention: \"short\",\n\t\t\textraBody: options.auth.extraBody,\n\t\t\theaders: options.auth.headers,\n\t\t\tonPayload: (payload) => {\n\t\t\t\tconst rewritten = createOpenAiResponsesStreamCompactionPayload(payload, options.request);\n\t\t\t\tif (!isRecord(rewritten) || !Array.isArray(rewritten.input)) {\n\t\t\t\t\tthrow new Error(\"Unable to build OpenAI Responses stream compaction payload\");\n\t\t\t\t}\n\t\t\t\treturn rewritten;\n\t\t\t},\n\t\t\tsessionId: options.request.body.prompt_cache_key,\n\t\t\tsignal: options.signal,\n\t\t\ttransport: \"websocket\",\n\t\t},\n\t);\n\tconst response = await stream.result();\n\tif (response.stopReason === \"error\" || response.stopReason === \"aborted\") {\n\t\treturn undefined;\n\t}\n\treturn buildOpenAiResponsesStreamCompactionResult({\n\t\tmodel: options.model,\n\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\ttokensBefore: options.request.tokensBefore,\n\t\trequestInput: options.request.body.input,\n\t\tresponse,\n\t\tnow: options.now,\n\t});\n}\n\nasync function runOpenAiCompactEndpointCompaction(options: {\n\tfetchImpl: typeof fetch;\n\theaders: Headers;\n\tmodel: Model<\"openai-responses\">;\n\trequest: OpenAiRemoteCompactionRequest;\n\trequestId: string;\n\tsignal: AbortSignal;\n\tfirstKeptEntryId: string;\n\temit?: EmitCompactionEvent;\n}): Promise<OpenAiRemoteCompactionResult | undefined> {\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_started\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tinputItemCount: options.request.inputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await options.fetchImpl(compactEndpointUrl(options.model), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: options.headers,\n\t\t\tbody: JSON.stringify(options.request.body),\n\t\t\tsignal: options.signal,\n\t\t});\n\t} catch (error) {\n\t\tif (options.signal.aborted) throw error;\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (!response.ok) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: `HTTP ${response.status}`,\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet payload: unknown;\n\ttry {\n\t\tpayload = await response.json();\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tif (!isOpenAiCompactedResponse(payload)) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: \"invalid-compact-response\",\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tlet result: OpenAiRemoteCompactionResult;\n\ttry {\n\t\tresult = buildOpenAiRemoteCompactionResult({\n\t\t\tmodel: options.model,\n\t\t\tfirstKeptEntryId: options.firstKeptEntryId,\n\t\t\ttokensBefore: options.request.tokensBefore,\n\t\t\trequestInputItemCount: options.request.inputItemCount,\n\t\t\tresponse: payload,\n\t\t});\n\t} catch (error) {\n\t\toptions.emit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: options.requestId,\n\t\t\tmodelId: options.model.id,\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\ttransport: \"compact-endpoint\",\n\t\t});\n\t\treturn undefined;\n\t}\n\toptions.emit?.({\n\t\tversion: 1,\n\t\taction: \"remote_completed\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\trequestId: options.requestId,\n\t\tmodelId: options.model.id,\n\t\tresponseId: payload.id,\n\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\ttransport: \"compact-endpoint\",\n\t});\n\treturn result;\n}\n\nexport async function runOpenAiRemoteCompaction(\n\tctx: OpenAiRemoteCompactionContext,\n\tevent: SessionBeforeCompactEvent,\n\temit?: EmitCompactionEvent,\n\tdependencies: OpenAiRemoteCompactionDependencies = {},\n): Promise<OpenAiRemoteCompactionResult | undefined> {\n\tconst model = ctx.model;\n\tif (!isOpenAiResponsesModel(model) || event.reason === \"branch\") {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model?.id,\n\t\t\treason: event.reason === \"branch\" ? \"branch-compaction\" : \"not-openai-responses\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\tif (!auth.ok) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: auth.error,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tconst requestModel = auth.upstreamModelId ? { ...model, id: auth.upstreamModelId } : model;\n\tconst serviceTier = ctx.serviceTier ?? auth.serviceTier;\n\tconst request = createOpenAiRemoteCompactionRequest({\n\t\tmodel: requestModel,\n\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\tbranchEntries: event.branchEntries,\n\t\ttokensBefore: event.preparation.tokensBefore,\n\t\tpromptCacheKey: ctx.sessionManager.getSessionId(),\n\t\tserviceTier,\n\t});\n\tif (!request) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"session-not-openai-native\",\n\t\t});\n\t\treturn undefined;\n\t}\n\tconst remoteTimeoutMs = dependencies.remoteTimeoutMs ?? OPENAI_REMOTE_COMPACTION_TIMEOUT_MS;\n\n\tif (supportsOpenAiResponsesWebSocket(requestModel)) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_started\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: requestModel.id,\n\t\t\tinputItemCount: request.inputItemCount,\n\t\t\ttransport: \"websocket\",\n\t\t});\n\t\ttry {\n\t\t\tconst result = await runWithRemoteTimeout({\n\t\t\t\tsignal: event.signal,\n\t\t\t\ttimeoutMs: remoteTimeoutMs,\n\t\t\t\tonTimeout: () =>\n\t\t\t\t\temit?.({\n\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\taction: \"remote_fallback\",\n\t\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t\t}),\n\t\t\t\trun: (signal) =>\n\t\t\t\t\trunOpenAiResponsesStreamCompaction({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tauth,\n\t\t\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\t\t\tnow: dependencies.now ?? Date.now,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tstreamRunner:\n\t\t\t\t\t\t\tdependencies.streamRunner ??\n\t\t\t\t\t\t\t((streamModel, context, options) => streamSimple(streamModel, context, options)),\n\t\t\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\t\t}),\n\t\t\t});\n\t\t\tif (result) {\n\t\t\t\temit?.({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\taction: \"remote_completed\",\n\t\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\tmodelId: requestModel.id,\n\t\t\t\t\tresponseId: result.details.responseId,\n\t\t\t\t\tretainedInputItemCount: result.details.retainedInputItemCount,\n\t\t\t\t\ttransport: \"websocket\",\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: \"websocket-compaction-no-result\",\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (event.signal.aborted) throw error;\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t\t\ttransport: \"websocket\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst headers = createHeaders(auth);\n\tif (!headers) {\n\t\temit?.({\n\t\t\tversion: 1,\n\t\t\taction: \"remote_fallback\",\n\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\trequestId: event.requestId,\n\t\t\tmodelId: model.id,\n\t\t\treason: \"missing-openai-auth\",\n\t\t});\n\t\treturn undefined;\n\t}\n\n\treturn runWithRemoteTimeout({\n\t\tsignal: event.signal,\n\t\ttimeoutMs: remoteTimeoutMs,\n\t\tonTimeout: () =>\n\t\t\temit?.({\n\t\t\t\tversion: 1,\n\t\t\t\taction: \"remote_fallback\",\n\t\t\t\troute: \"builtin.compaction.openai_remote\",\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tmodelId: requestModel.id,\n\t\t\t\treason: REMOTE_COMPACTION_TIMEOUT_REASON,\n\t\t\t\ttransport: \"compact-endpoint\",\n\t\t\t}),\n\t\trun: (signal) =>\n\t\t\trunOpenAiCompactEndpointCompaction({\n\t\t\t\tfetchImpl: dependencies.fetch ?? fetch,\n\t\t\t\theaders,\n\t\t\t\tmodel: requestModel,\n\t\t\t\trequest,\n\t\t\t\trequestId: event.requestId,\n\t\t\t\tsignal,\n\t\t\t\tfirstKeptEntryId: event.preparation.firstKeptEntryId,\n\t\t\t\temit,\n\t\t\t}),\n\t});\n}\n\nfunction latestRemoteCompaction(\n\tentries: SessionEntry[],\n): { entryId: string; index: number; details: OpenAiRemoteCompactionDetails } | undefined {\n\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\tconst entry = entries[index];\n\t\tif (entry?.type !== \"compaction\") continue;\n\t\tconst details = getOpenAiRemoteCompactionDetails(entry.details);\n\t\tif (details) return { entryId: entry.id, index, details };\n\t\treturn undefined;\n\t}\n\treturn undefined;\n}\n\nfunction leadingPromptMessages(input: unknown): OpenAiRemoteInputItem[] {\n\tif (!Array.isArray(input)) return [];\n\tconst result: OpenAiRemoteInputItem[] = [];\n\tfor (const item of input) {\n\t\tif (!isRecord(item)) break;\n\t\tconst role = item.role;\n\t\tif (role !== \"system\" && role !== \"developer\") break;\n\t\tresult.push(providerNativeItem(item) ?? { role, content: typeof item.content === \"string\" ? item.content : [] });\n\t}\n\treturn result;\n}\n\nexport function rewriteOpenAiPayloadWithRemoteCompaction(\n\tpayload: unknown,\n\toptions: { model: Model<Api> | undefined; branchEntries: SessionEntry[] },\n\temit?: EmitCompactionEvent,\n): unknown | undefined {\n\tif (!isOpenAiResponsesModel(options.model) || !isRecord(payload)) return undefined;\n\tconst remote = latestRemoteCompaction(options.branchEntries);\n\tif (!remote) return undefined;\n\n\tconst postCompactionItems = convertBranchEntries(options.branchEntries.slice(remote.index + 1));\n\tif (!postCompactionItems) return undefined;\n\n\tconst input = [...leadingPromptMessages(payload.input), ...remote.details.replacementInput, ...postCompactionItems];\n\temit?.({\n\t\tversion: 1,\n\t\taction: \"remote_payload_rewritten\",\n\t\troute: \"builtin.compaction.openai_remote\",\n\t\tmodelId: options.model.id,\n\t\tcompactionEntryId: remote.entryId,\n\t\tinputItemCount: input.length,\n\t});\n\treturn { ...payload, input };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CompactionReason } from "../../types.
|
|
2
|
-
import type { CompactionExtensionState } from "./state.
|
|
1
|
+
import type { CompactionReason } from "../../types.ts";
|
|
2
|
+
import type { CompactionExtensionState } from "./state.ts";
|
|
3
3
|
export declare const softCap = 3;
|
|
4
4
|
export declare const hardCap = 10;
|
|
5
5
|
export interface ShouldRejectByCapOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"per-turn-cap.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAM3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAEtE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAEtE;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE,wBAAwB,GAC7B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CASrB","sourcesContent":["import type { CompactionReason } from \"../../types.
|
|
1
|
+
{"version":3,"file":"per-turn-cap.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAM3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAEtE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAEtE;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE,wBAAwB,GAC7B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CASrB","sourcesContent":["import type { CompactionReason } from \"../../types.ts\";\nimport type { CompactionExtensionState } from \"./state.ts\";\n\nexport const softCap = 3;\nexport const hardCap = 10;\n\nexport interface ShouldRejectByCapOptions {\n\tmanual?: boolean;\n\treason?: CompactionReason;\n}\n\nexport function incrementAccepted(state: CompactionExtensionState): CompactionExtensionState {\n\treturn {\n\t\t...state,\n\t\tacceptedThisTurn: state.acceptedThisTurn + 1,\n\t\tacceptedAbsolute: state.acceptedAbsolute + 1,\n\t};\n}\n\nexport function isOverSoftCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedThisTurn >= softCap;\n}\n\nexport function isOverHardCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedAbsolute >= hardCap;\n}\n\nexport function shouldRejectByCap(\n\tstate: CompactionExtensionState,\n\topts?: ShouldRejectByCapOptions,\n): { cancel: boolean } {\n\tconst bypass = opts?.manual === true || opts?.reason === \"manual\" || opts?.reason === \"extension\";\n\tif (bypass) {\n\t\treturn { cancel: isOverHardCap(state) };\n\t}\n\tif (isOverSoftCap(state)) {\n\t\treturn { cancel: true };\n\t}\n\treturn { cancel: false };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"per-turn-cap.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAO1B,MAAM,UAAU,iBAAiB,CAAC,KAA+B,EAA4B;IAC5F,OAAO;QACN,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;QAC5C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;KAC5C,CAAC;AAAA,CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAA+B,EAC/B,IAA+B,EACT;IACtB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAClG,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,CACzB","sourcesContent":["import type { CompactionReason } from \"../../types.
|
|
1
|
+
{"version":3,"file":"per-turn-cap.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/per-turn-cap.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAO1B,MAAM,UAAU,iBAAiB,CAAC,KAA+B,EAA4B;IAC5F,OAAO;QACN,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;QAC5C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC;KAC5C,CAAC;AAAA,CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B,EAAW;IACvE,OAAO,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAA+B,EAC/B,IAA+B,EACT;IACtB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAClG,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,CACzB","sourcesContent":["import type { CompactionReason } from \"../../types.ts\";\nimport type { CompactionExtensionState } from \"./state.ts\";\n\nexport const softCap = 3;\nexport const hardCap = 10;\n\nexport interface ShouldRejectByCapOptions {\n\tmanual?: boolean;\n\treason?: CompactionReason;\n}\n\nexport function incrementAccepted(state: CompactionExtensionState): CompactionExtensionState {\n\treturn {\n\t\t...state,\n\t\tacceptedThisTurn: state.acceptedThisTurn + 1,\n\t\tacceptedAbsolute: state.acceptedAbsolute + 1,\n\t};\n}\n\nexport function isOverSoftCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedThisTurn >= softCap;\n}\n\nexport function isOverHardCap(state: CompactionExtensionState): boolean {\n\treturn state.acceptedAbsolute >= hardCap;\n}\n\nexport function shouldRejectByCap(\n\tstate: CompactionExtensionState,\n\topts?: ShouldRejectByCapOptions,\n): { cancel: boolean } {\n\tconst bypass = opts?.manual === true || opts?.reason === \"manual\" || opts?.reason === \"extension\";\n\tif (bypass) {\n\t\treturn { cancel: isOverHardCap(state) };\n\t}\n\tif (isOverSoftCap(state)) {\n\t\treturn { cancel: true };\n\t}\n\treturn { cancel: false };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CompactionSettings } from "../../../compaction/index.
|
|
2
|
-
import type { ContextUsage } from "../../types.
|
|
1
|
+
import type { CompactionSettings } from "../../../compaction/index.ts";
|
|
2
|
+
import type { ContextUsage } from "../../types.ts";
|
|
3
3
|
export declare const SPECULATIVE_FRACTION = 0.75;
|
|
4
4
|
export interface CompactionState {
|
|
5
5
|
lastFailureAt: number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AAoCD,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBhH;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAU7G;AAED,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,SAAO,GACX,MAAM,CAGR;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAOT;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,SAAI,GAClB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAMT;AAED,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzE","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AAoCD,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBhH;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAU7G;AAED,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,SAAO,GACX,MAAM,CAGR;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAOT;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,SAAI,GAClB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,CAAC,EAAE,eAAe,GACzB,OAAO,CAMT;AAED,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzE","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.ts\";\nimport type { ContextUsage } from \"../../types.ts\";\n\nconst MIN_ADAPTIVE_THRESHOLD_RATIO = 0.4;\nconst MAX_ADAPTIVE_THRESHOLD_RATIO = 0.7;\nconst HIGH_YIELD_SAVING_RATIO = 0.5;\nconst LOW_YIELD_SAVING_RATIO = 0.1;\nconst YIELD_ADJUSTMENT_RATIO = 0.05;\nconst MIN_EFFECTIVE_KEEP_RECENT_TOKENS = 1024;\n\nexport const SPECULATIVE_FRACTION = 0.75;\n\nexport interface CompactionState {\n\tlastFailureAt: number | null;\n}\n\nexport interface CompactionYield {\n\tsavedTokens: number;\n\ttokensBefore: number;\n}\n\nfunction clampThresholdRatio(ratio: number): number {\n\treturn Math.min(MAX_ADAPTIVE_THRESHOLD_RATIO, Math.max(MIN_ADAPTIVE_THRESHOLD_RATIO, ratio));\n}\n\nfunction adjustThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio - YIELD_ADJUSTMENT_RATIO);\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio + YIELD_ADJUSTMENT_RATIO);\n\t}\n\treturn ratio;\n}\n\nfunction adjustEffectiveThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn ratio - YIELD_ADJUSTMENT_RATIO;\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn ratio + YIELD_ADJUSTMENT_RATIO;\n\t}\n\treturn ratio;\n}\n\nexport function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number {\n\tlet ratio: number;\n\tif (!(contextWindow > 0)) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 16_000) {\n\t\tratio = 0.45;\n\t} else if (contextWindow <= 32_000) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 64_000) {\n\t\tratio = 0.55;\n\t} else if (contextWindow <= 128_000) {\n\t\tratio = 0.6;\n\t} else {\n\t\tratio = 0.65;\n\t}\n\n\tif (priorCompactionSavedTokens === undefined) {\n\t\treturn ratio;\n\t}\n\n\treturn adjustThresholdRatio(ratio, priorCompactionSavedTokens, contextWindow);\n}\n\nexport function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number {\n\tif (typeof lastYield === \"number\") {\n\t\treturn Math.max(contextWindow, lastYield);\n\t}\n\n\tlet ratio = computeAdaptiveThresholdRatio(contextWindow);\n\tif (lastYield) {\n\t\tratio = adjustEffectiveThresholdRatio(ratio, lastYield.savedTokens, lastYield.tokensBefore);\n\t}\n\treturn clampThresholdRatio(ratio);\n}\n\nexport function computeEffectiveKeepRecentTokens(\n\tsetting: number,\n\tcontextWindow: number,\n\tthresholdRatio: number,\n\tmargin = 0.05,\n): number {\n\tconst capped = Math.floor(contextWindow * (1 - thresholdRatio - margin));\n\treturn Math.min(setting, Math.max(MIN_EFFECTIVE_KEEP_RECENT_TOKENS, capped));\n}\n\nexport function shouldStartSpeculativeCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (settings.speculativeEnabled === false || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\tconst fraction = settings.speculativeFraction ?? SPECULATIVE_FRACTION;\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield) * fraction;\n}\n\nexport function isAtHardLimit(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\treserveTokens: number,\n\tadditionalTokens = 0,\n): boolean {\n\treturn usage.tokens !== null && usage.tokens + additionalTokens + reserveTokens >= contextWindow;\n}\n\nexport function shouldTriggerCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (!settings.enabled || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);\n}\n\nexport const cooldownMs = 60000;\n\nexport function isInCooldown(state: CompactionState, now: number): boolean {\n\treturn state.lastFailureAt !== null && now - state.lastFailureAt < cooldownMs;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompactionSettings } from \"../../../compaction/index.ts\";\nimport type { ContextUsage } from \"../../types.ts\";\n\nconst MIN_ADAPTIVE_THRESHOLD_RATIO = 0.4;\nconst MAX_ADAPTIVE_THRESHOLD_RATIO = 0.7;\nconst HIGH_YIELD_SAVING_RATIO = 0.5;\nconst LOW_YIELD_SAVING_RATIO = 0.1;\nconst YIELD_ADJUSTMENT_RATIO = 0.05;\nconst MIN_EFFECTIVE_KEEP_RECENT_TOKENS = 1024;\n\nexport const SPECULATIVE_FRACTION = 0.75;\n\nexport interface CompactionState {\n\tlastFailureAt: number | null;\n}\n\nexport interface CompactionYield {\n\tsavedTokens: number;\n\ttokensBefore: number;\n}\n\nfunction clampThresholdRatio(ratio: number): number {\n\treturn Math.min(MAX_ADAPTIVE_THRESHOLD_RATIO, Math.max(MIN_ADAPTIVE_THRESHOLD_RATIO, ratio));\n}\n\nfunction adjustThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio - YIELD_ADJUSTMENT_RATIO);\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn clampThresholdRatio(ratio + YIELD_ADJUSTMENT_RATIO);\n\t}\n\treturn ratio;\n}\n\nfunction adjustEffectiveThresholdRatio(ratio: number, savedTokens: number, tokensBefore: number): number {\n\tif (tokensBefore <= 0) {\n\t\treturn ratio;\n\t}\n\n\tconst savedRatio = savedTokens / tokensBefore;\n\tif (savedRatio > HIGH_YIELD_SAVING_RATIO) {\n\t\treturn ratio - YIELD_ADJUSTMENT_RATIO;\n\t}\n\tif (savedRatio < LOW_YIELD_SAVING_RATIO) {\n\t\treturn ratio + YIELD_ADJUSTMENT_RATIO;\n\t}\n\treturn ratio;\n}\n\nexport function computeAdaptiveThresholdRatio(contextWindow: number, priorCompactionSavedTokens?: number): number {\n\tlet ratio: number;\n\tif (!(contextWindow > 0)) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 16_000) {\n\t\tratio = 0.45;\n\t} else if (contextWindow <= 32_000) {\n\t\tratio = 0.5;\n\t} else if (contextWindow <= 64_000) {\n\t\tratio = 0.55;\n\t} else if (contextWindow <= 128_000) {\n\t\tratio = 0.6;\n\t} else {\n\t\tratio = 0.65;\n\t}\n\n\tif (priorCompactionSavedTokens === undefined) {\n\t\treturn ratio;\n\t}\n\n\treturn adjustThresholdRatio(ratio, priorCompactionSavedTokens, contextWindow);\n}\n\nexport function computeEffectiveThreshold(contextWindow: number, lastYield?: CompactionYield | number): number {\n\tif (typeof lastYield === \"number\") {\n\t\treturn Math.max(contextWindow, lastYield);\n\t}\n\n\tlet ratio = computeAdaptiveThresholdRatio(contextWindow);\n\tif (lastYield) {\n\t\tratio = adjustEffectiveThresholdRatio(ratio, lastYield.savedTokens, lastYield.tokensBefore);\n\t}\n\treturn clampThresholdRatio(ratio);\n}\n\nexport function computeEffectiveKeepRecentTokens(\n\tsetting: number,\n\tcontextWindow: number,\n\tthresholdRatio: number,\n\tmargin = 0.05,\n): number {\n\tconst capped = Math.floor(contextWindow * (1 - thresholdRatio - margin));\n\treturn Math.min(setting, Math.max(MIN_EFFECTIVE_KEEP_RECENT_TOKENS, capped));\n}\n\nexport function shouldStartSpeculativeCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (settings.speculativeEnabled === false || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\tconst fraction = settings.speculativeFraction ?? SPECULATIVE_FRACTION;\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield) * fraction;\n}\n\nexport function isAtHardLimit(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\treserveTokens: number,\n\tadditionalTokens = 0,\n): boolean {\n\treturn usage.tokens !== null && usage.tokens + additionalTokens + reserveTokens >= contextWindow;\n}\n\nexport function shouldTriggerCompaction(\n\tusage: ContextUsage,\n\tcontextWindow: number,\n\tsettings: CompactionSettings,\n\tlastYield?: CompactionYield,\n): boolean {\n\tif (!settings.enabled || usage.tokens === null || contextWindow <= 0) {\n\t\treturn false;\n\t}\n\n\treturn usage.tokens >= contextWindow * computeEffectiveThreshold(contextWindow, lastYield);\n}\n\nexport const cooldownMs = 60000;\n\nexport function isInCooldown(state: CompactionState, now: number): boolean {\n\treturn state.lastFailureAt !== null && now - state.lastFailureAt < cooldownMs;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import type { BeforeAgentStartEventResult, CompactionReason } from "../../types.
|
|
2
|
+
import type { BeforeAgentStartEventResult, CompactionReason } from "../../types.ts";
|
|
3
3
|
export declare const POST_COMPACT_RESTORATION_CUSTOM_TYPE = "compaction.post-compact-restoration";
|
|
4
4
|
declare const POST_COMPACT_RESTORATION_SCHEMA = "senpi.compaction.post-compact-restoration.v1";
|
|
5
5
|
type RestorationItemType = "file" | "skill";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoration-tracker.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,eAAO,MAAM,oCAAoC,wCAAwC,CAAC;AAE1F,QAAA,MAAM,+BAA+B,iDAAiD,CAAC;AAMvF,KAAK,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAG5C,MAAM,WAAW,mBAAmB;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,OAAO,oCAAoC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE;QACR,MAAM,EAAE,OAAO,+BAA+B,CAAC;QAC/C,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAmB/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CA8BjH;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,uBAAuB,GAC5B,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,CAapD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAQtF","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { estimateTokens } from \"../../../compaction/index.js\";\nimport type { BeforeAgentStartEventResult, CompactionReason } from \"../../types.js\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.js\";\n\nexport const POST_COMPACT_RESTORATION_CUSTOM_TYPE = \"compaction.post-compact-restoration\";\n\nconst POST_COMPACT_RESTORATION_SCHEMA = \"senpi.compaction.post-compact-restoration.v1\";\nconst DEFAULT_RESTORATION_MAX_ITEMS = 10;\nconst DEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM = 5000;\nconst DEFAULT_RESTORATION_MAX_TOTAL_TOKENS = 50_000;\nconst DEFAULT_RESTORATION_CONTEXT_RATIO = 0.15;\n\ntype RestorationItemType = \"file\" | \"skill\";\ntype FileOperation = \"read\" | \"write\" | \"edit\";\n\nexport interface RestorationSettings {\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n}\n\nexport interface MinimalToolCallEvent {\n\ttoolName: string;\n\tinput: Record<string, unknown>;\n}\n\nexport interface RestorationItem {\n\tcontent: string;\n\tlabel: string;\n\tpriority: number;\n\ttokens: number;\n\ttype: RestorationItemType;\n}\n\nexport interface PendingRestorationPayload {\n\tcustomType: typeof POST_COMPACT_RESTORATION_CUSTOM_TYPE;\n\tcontent: string;\n\tdisplay: false;\n\tdetails: {\n\t\tschema: typeof POST_COMPACT_RESTORATION_SCHEMA;\n\t\tbudgetTokens: number;\n\t\tcompactionEntryId: string;\n\t\treason: CompactionReason;\n\t\titems: RestorationItem[];\n\t};\n\tbudgetTokens: number;\n}\n\nexport interface PreparePendingPayloadOptions {\n\taccepted: boolean;\n\treason: CompactionReason;\n\tcompactionEntryId: string;\n\tcontextWindow: number;\n\tusageTokens: number | null;\n\treserveTokens: number;\n\tsettings?: RestorationSettings;\n\tkeptMessages?: AgentMessage[];\n}\n\nexport interface RestorationTrackerState {\n\titems: Map<string, RestorationItem>;\n\trestoredLabels: Set<string>;\n\tpendingPayload: PendingRestorationPayload | null;\n}\n\nexport function createRestorationTrackerState(): RestorationTrackerState {\n\treturn {\n\t\titems: new Map(),\n\t\trestoredLabels: new Set(),\n\t\tpendingPayload: null,\n\t};\n}\n\nexport function trackToolCall(state: RestorationTrackerState, event: MinimalToolCallEvent): void {\n\tswitch (event.toolName) {\n\t\tcase \"read\":\n\t\t\ttrackPathInput(state, event.input, \"read\");\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\ttrackPathInput(state, event.input, \"write\");\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\ttrackPathInput(state, event.input, \"edit\");\n\t\t\treturn;\n\t\tcase \"apply_patch\":\n\t\t\ttrackApplyPatchInput(state, event.input);\n\t\t\treturn;\n\t\tcase \"skill\":\n\t\tcase \"load_skill\":\n\t\t\ttrackSkillInput(state, event.input);\n\t\t\treturn;\n\t}\n}\n\nexport function preparePendingPayload(state: RestorationTrackerState, options: PreparePendingPayloadOptions): void {\n\tif (!options.accepted) return;\n\n\tconst budgetTokens = computeRestorationBudget(options);\n\tif (budgetTokens <= 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tfilterAgainstKeptMessages(state, options.keptMessages ?? []);\n\tconst selectedItems = selectRestorationItems(state, options.settings, budgetTokens);\n\tif (selectedItems.length === 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tconst content = buildRestorationContent(options, selectedItems);\n\tstate.pendingPayload = {\n\t\tcustomType: POST_COMPACT_RESTORATION_CUSTOM_TYPE,\n\t\tcontent,\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tschema: POST_COMPACT_RESTORATION_SCHEMA,\n\t\t\tbudgetTokens,\n\t\t\tcompactionEntryId: options.compactionEntryId,\n\t\t\treason: options.reason,\n\t\t\titems: selectedItems,\n\t\t},\n\t\tbudgetTokens,\n\t};\n}\n\nexport function consumePendingPayload(\n\tstate: RestorationTrackerState,\n): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tconst payload = state.pendingPayload;\n\tstate.pendingPayload = null;\n\tif (!payload) return undefined;\n\tfor (const item of payload.details.items) {\n\t\tstate.restoredLabels.add(item.label);\n\t}\n\treturn {\n\t\tcustomType: payload.customType,\n\t\tcontent: payload.content,\n\t\tdisplay: payload.display,\n\t\tdetails: payload.details,\n\t};\n}\n\nexport function computeRestorationBudget(options: PreparePendingPayloadOptions): number {\n\tconst settings = resolveSettings(options.settings);\n\tconst contextWindow = Math.max(0, options.contextWindow);\n\tconst configuredBudget = settings.restorationMaxTotalTokens;\n\tconst contextRatioBudget = Math.floor(contextWindow * settings.restorationContextRatio);\n\tconst usageTokens = Math.max(0, options.usageTokens ?? 0);\n\tconst remainingBudget = Math.max(0, contextWindow - usageTokens - options.reserveTokens);\n\treturn Math.floor(Math.min(configuredBudget, contextRatioBudget, remainingBudget));\n}\n\nfunction trackPathInput(\n\tstate: RestorationTrackerState,\n\tinput: Record<string, unknown>,\n\toperation: FileOperation,\n): void {\n\tif (typeof input.path !== \"string\" || input.path.length === 0) return;\n\ttrackFile(state, input.path, operation);\n}\n\nfunction trackApplyPatchInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tif (typeof input.input !== \"string\") return;\n\tfor (const path of extractPatchedPaths(input.input)) {\n\t\tif (path.length > 0) trackFile(state, path, \"edit\");\n\t}\n}\n\nfunction trackSkillInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tconst skillName = typeof input.name === \"string\" ? input.name : input.skillName;\n\tif (typeof skillName === \"string\" && skillName.length > 0) {\n\t\tsetItem(state, {\n\t\t\tcontent: skillName,\n\t\t\tlabel: skillName,\n\t\t\tpriority: 80,\n\t\t\ttokens: estimateTextTokens(skillName),\n\t\t\ttype: \"skill\",\n\t\t});\n\t}\n}\n\nfunction trackFile(state: RestorationTrackerState, path: string, operation: FileOperation): void {\n\tconst label = path;\n\tconst existing = state.items.get(label);\n\tconst operations = new Set<FileOperation>(parseFileOperations(existing?.content));\n\toperations.add(operation);\n\tconst content = `${path} (${sortOperations(operations).join(\", \")})`;\n\tsetItem(state, {\n\t\tcontent,\n\t\tlabel,\n\t\tpriority: operation === \"read\" && operations.size === 1 ? 50 : 100,\n\t\ttokens: estimateTextTokens(content),\n\t\ttype: \"file\",\n\t});\n}\n\nfunction setItem(state: RestorationTrackerState, item: RestorationItem): void {\n\tstate.items.set(item.label, item);\n}\n\nfunction selectRestorationItems(\n\tstate: RestorationTrackerState,\n\tsettingsInput: RestorationSettings | undefined,\n\tbudgetTokens: number,\n): RestorationItem[] {\n\tconst settings = resolveSettings(settingsInput);\n\tconst candidates = Array.from(state.items.values())\n\t\t.filter((item) => !state.restoredLabels.has(item.label))\n\t\t.map((item) => truncateRestorationItem(item, settings.restorationMaxTokensPerItem))\n\t\t.sort((left, right) => {\n\t\t\tif (left.priority !== right.priority) return right.priority - left.priority;\n\t\t\tif (left.tokens !== right.tokens) return left.tokens - right.tokens;\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n\n\tconst selected: RestorationItem[] = [];\n\tlet totalTokens = 0;\n\tfor (const item of candidates) {\n\t\tif (selected.length >= settings.restorationMaxItems) break;\n\t\tif (totalTokens + item.tokens > budgetTokens) continue;\n\t\tselected.push(item);\n\t\ttotalTokens += item.tokens;\n\t}\n\treturn selected;\n}\n\nfunction buildRestorationContent(options: PreparePendingPayloadOptions, items: RestorationItem[]): string {\n\tconst files = items.filter((item) => item.type === \"file\");\n\tconst skills = items.filter((item) => item.type === \"skill\");\n\tconst lines = [\n\t\t\"[Restored context after compaction — files and skills from before compaction]\",\n\t\t`reason: ${options.reason}`,\n\t\t`compactionEntryId: ${options.compactionEntryId}`,\n\t\t\"\",\n\t];\n\n\tif (files.length > 0) {\n\t\tlines.push(\"<restored-files>\");\n\t\tfor (const file of files) {\n\t\t\tlines.push(`<file label=\"${escapeXmlAttribute(file.label)}\">${file.content}</file>`);\n\t\t}\n\t\tlines.push(\"</restored-files>\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (skills.length > 0) {\n\t\tlines.push(\"<restored-skills>\");\n\t\tfor (const skill of skills) {\n\t\t\tlines.push(`<skill label=\"${escapeXmlAttribute(skill.label)}\">${skill.content}</skill>`);\n\t\t}\n\t\tlines.push(\"</restored-skills>\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncateRestorationItem(item: RestorationItem, maxTokens: number): RestorationItem {\n\tif (item.tokens <= maxTokens) return item;\n\tconst truncationNotice = \"[... truncated]\";\n\tconst noticeTokens = estimateTextTokens(truncationNotice);\n\tconst targetTokens = Math.max(0, maxTokens - noticeTokens - 1);\n\tconst truncatedBody = truncateToTokenLimit(item.content, targetTokens);\n\tconst content = truncatedBody.length > 0 ? `${truncatedBody}\\n${truncationNotice}` : truncationNotice;\n\treturn { ...item, content, tokens: estimateTextTokens(content) };\n}\n\nfunction filterAgainstKeptMessages(state: RestorationTrackerState, keptMessages: AgentMessage[]): void {\n\tif (keptMessages.length === 0) return;\n\tconst keptText = keptMessages.map(extractMessageText).join(\"\\n\");\n\tfor (const label of state.items.keys()) {\n\t\tif (keptText.includes(label)) {\n\t\t\tstate.items.delete(label);\n\t\t}\n\t}\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tif (\"content\" in message) {\n\t\tif (typeof message.content === \"string\") return message.content;\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((content): content is { type: \"text\"; text: string } => content.type === \"text\")\n\t\t\t\t.map((content) => content.text)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t}\n\tif (\"summary\" in message) return message.summary;\n\tif (\"command\" in message) return `${message.command}\\n${message.output}`;\n\treturn \"\";\n}\n\nfunction truncateToTokenLimit(text: string, tokenLimit: number): string {\n\tif (tokenLimit <= 0 || text.length === 0) return \"\";\n\tif (estimateTextTokens(text) <= tokenLimit) return text;\n\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst mid = Math.ceil((low + high) / 2);\n\t\tconst candidate = text.slice(0, mid);\n\t\tif (estimateTextTokens(candidate) <= tokenLimit) {\n\t\t\tlow = mid;\n\t\t\tcontinue;\n\t\t}\n\t\thigh = mid - 1;\n\t}\n\treturn text.slice(0, low).trimEnd();\n}\n\nfunction resolveSettings(settings: RestorationSettings | undefined): Required<RestorationSettings> {\n\treturn {\n\t\trestorationMaxItems: normalizeNonNegativeInteger(settings?.restorationMaxItems, DEFAULT_RESTORATION_MAX_ITEMS),\n\t\trestorationMaxTokensPerItem: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTokensPerItem,\n\t\t\tDEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM,\n\t\t),\n\t\trestorationMaxTotalTokens: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTotalTokens,\n\t\t\tDEFAULT_RESTORATION_MAX_TOTAL_TOKENS,\n\t\t),\n\t\trestorationContextRatio: normalizeNonNegativeNumber(\n\t\t\tsettings?.restorationContextRatio,\n\t\t\tDEFAULT_RESTORATION_CONTEXT_RATIO,\n\t\t),\n\t};\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeNonNegativeNumber(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction parseFileOperations(content: string | undefined): FileOperation[] {\n\tif (!content) return [];\n\tconst open = content.lastIndexOf(\"(\");\n\tconst close = content.lastIndexOf(\")\");\n\tif (open === -1 || close === -1 || close <= open) return [];\n\treturn content\n\t\t.slice(open + 1, close)\n\t\t.split(\",\")\n\t\t.map((operation) => operation.trim())\n\t\t.filter(\n\t\t\t(operation): operation is FileOperation =>\n\t\t\t\toperation === \"read\" || operation === \"write\" || operation === \"edit\",\n\t\t);\n}\n\nfunction sortOperations(operations: Set<FileOperation>): FileOperation[] {\n\tconst order: FileOperation[] = [\"read\", \"write\", \"edit\"];\n\treturn order.filter((operation) => operations.has(operation));\n}\n\nfunction estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"custom\", customType: \"restoration\", content: text, display: false, timestamp: 0 });\n}\n\nfunction escapeXmlAttribute(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"restoration-tracker.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/restoration-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,eAAO,MAAM,oCAAoC,wCAAwC,CAAC;AAE1F,QAAA,MAAM,+BAA+B,iDAAiD,CAAC;AAMvF,KAAK,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAG5C,MAAM,WAAW,mBAAmB;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,OAAO,oCAAoC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE;QACR,MAAM,EAAE,OAAO,+BAA+B,CAAC;QAC/C,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAmB/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CA8BjH;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,uBAAuB,GAC5B,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,CAapD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAQtF","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { estimateTokens } from \"../../../compaction/index.ts\";\nimport type { BeforeAgentStartEventResult, CompactionReason } from \"../../types.ts\";\nimport { extractPatchedPaths } from \"../gpt-apply-patch/index.ts\";\n\nexport const POST_COMPACT_RESTORATION_CUSTOM_TYPE = \"compaction.post-compact-restoration\";\n\nconst POST_COMPACT_RESTORATION_SCHEMA = \"senpi.compaction.post-compact-restoration.v1\";\nconst DEFAULT_RESTORATION_MAX_ITEMS = 10;\nconst DEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM = 5000;\nconst DEFAULT_RESTORATION_MAX_TOTAL_TOKENS = 50_000;\nconst DEFAULT_RESTORATION_CONTEXT_RATIO = 0.15;\n\ntype RestorationItemType = \"file\" | \"skill\";\ntype FileOperation = \"read\" | \"write\" | \"edit\";\n\nexport interface RestorationSettings {\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n}\n\nexport interface MinimalToolCallEvent {\n\ttoolName: string;\n\tinput: Record<string, unknown>;\n}\n\nexport interface RestorationItem {\n\tcontent: string;\n\tlabel: string;\n\tpriority: number;\n\ttokens: number;\n\ttype: RestorationItemType;\n}\n\nexport interface PendingRestorationPayload {\n\tcustomType: typeof POST_COMPACT_RESTORATION_CUSTOM_TYPE;\n\tcontent: string;\n\tdisplay: false;\n\tdetails: {\n\t\tschema: typeof POST_COMPACT_RESTORATION_SCHEMA;\n\t\tbudgetTokens: number;\n\t\tcompactionEntryId: string;\n\t\treason: CompactionReason;\n\t\titems: RestorationItem[];\n\t};\n\tbudgetTokens: number;\n}\n\nexport interface PreparePendingPayloadOptions {\n\taccepted: boolean;\n\treason: CompactionReason;\n\tcompactionEntryId: string;\n\tcontextWindow: number;\n\tusageTokens: number | null;\n\treserveTokens: number;\n\tsettings?: RestorationSettings;\n\tkeptMessages?: AgentMessage[];\n}\n\nexport interface RestorationTrackerState {\n\titems: Map<string, RestorationItem>;\n\trestoredLabels: Set<string>;\n\tpendingPayload: PendingRestorationPayload | null;\n}\n\nexport function createRestorationTrackerState(): RestorationTrackerState {\n\treturn {\n\t\titems: new Map(),\n\t\trestoredLabels: new Set(),\n\t\tpendingPayload: null,\n\t};\n}\n\nexport function trackToolCall(state: RestorationTrackerState, event: MinimalToolCallEvent): void {\n\tswitch (event.toolName) {\n\t\tcase \"read\":\n\t\t\ttrackPathInput(state, event.input, \"read\");\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\ttrackPathInput(state, event.input, \"write\");\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\ttrackPathInput(state, event.input, \"edit\");\n\t\t\treturn;\n\t\tcase \"apply_patch\":\n\t\t\ttrackApplyPatchInput(state, event.input);\n\t\t\treturn;\n\t\tcase \"skill\":\n\t\tcase \"load_skill\":\n\t\t\ttrackSkillInput(state, event.input);\n\t\t\treturn;\n\t}\n}\n\nexport function preparePendingPayload(state: RestorationTrackerState, options: PreparePendingPayloadOptions): void {\n\tif (!options.accepted) return;\n\n\tconst budgetTokens = computeRestorationBudget(options);\n\tif (budgetTokens <= 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tfilterAgainstKeptMessages(state, options.keptMessages ?? []);\n\tconst selectedItems = selectRestorationItems(state, options.settings, budgetTokens);\n\tif (selectedItems.length === 0) {\n\t\tstate.pendingPayload = null;\n\t\treturn;\n\t}\n\n\tconst content = buildRestorationContent(options, selectedItems);\n\tstate.pendingPayload = {\n\t\tcustomType: POST_COMPACT_RESTORATION_CUSTOM_TYPE,\n\t\tcontent,\n\t\tdisplay: false,\n\t\tdetails: {\n\t\t\tschema: POST_COMPACT_RESTORATION_SCHEMA,\n\t\t\tbudgetTokens,\n\t\t\tcompactionEntryId: options.compactionEntryId,\n\t\t\treason: options.reason,\n\t\t\titems: selectedItems,\n\t\t},\n\t\tbudgetTokens,\n\t};\n}\n\nexport function consumePendingPayload(\n\tstate: RestorationTrackerState,\n): BeforeAgentStartEventResult[\"message\"] | undefined {\n\tconst payload = state.pendingPayload;\n\tstate.pendingPayload = null;\n\tif (!payload) return undefined;\n\tfor (const item of payload.details.items) {\n\t\tstate.restoredLabels.add(item.label);\n\t}\n\treturn {\n\t\tcustomType: payload.customType,\n\t\tcontent: payload.content,\n\t\tdisplay: payload.display,\n\t\tdetails: payload.details,\n\t};\n}\n\nexport function computeRestorationBudget(options: PreparePendingPayloadOptions): number {\n\tconst settings = resolveSettings(options.settings);\n\tconst contextWindow = Math.max(0, options.contextWindow);\n\tconst configuredBudget = settings.restorationMaxTotalTokens;\n\tconst contextRatioBudget = Math.floor(contextWindow * settings.restorationContextRatio);\n\tconst usageTokens = Math.max(0, options.usageTokens ?? 0);\n\tconst remainingBudget = Math.max(0, contextWindow - usageTokens - options.reserveTokens);\n\treturn Math.floor(Math.min(configuredBudget, contextRatioBudget, remainingBudget));\n}\n\nfunction trackPathInput(\n\tstate: RestorationTrackerState,\n\tinput: Record<string, unknown>,\n\toperation: FileOperation,\n): void {\n\tif (typeof input.path !== \"string\" || input.path.length === 0) return;\n\ttrackFile(state, input.path, operation);\n}\n\nfunction trackApplyPatchInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tif (typeof input.input !== \"string\") return;\n\tfor (const path of extractPatchedPaths(input.input)) {\n\t\tif (path.length > 0) trackFile(state, path, \"edit\");\n\t}\n}\n\nfunction trackSkillInput(state: RestorationTrackerState, input: Record<string, unknown>): void {\n\tconst skillName = typeof input.name === \"string\" ? input.name : input.skillName;\n\tif (typeof skillName === \"string\" && skillName.length > 0) {\n\t\tsetItem(state, {\n\t\t\tcontent: skillName,\n\t\t\tlabel: skillName,\n\t\t\tpriority: 80,\n\t\t\ttokens: estimateTextTokens(skillName),\n\t\t\ttype: \"skill\",\n\t\t});\n\t}\n}\n\nfunction trackFile(state: RestorationTrackerState, path: string, operation: FileOperation): void {\n\tconst label = path;\n\tconst existing = state.items.get(label);\n\tconst operations = new Set<FileOperation>(parseFileOperations(existing?.content));\n\toperations.add(operation);\n\tconst content = `${path} (${sortOperations(operations).join(\", \")})`;\n\tsetItem(state, {\n\t\tcontent,\n\t\tlabel,\n\t\tpriority: operation === \"read\" && operations.size === 1 ? 50 : 100,\n\t\ttokens: estimateTextTokens(content),\n\t\ttype: \"file\",\n\t});\n}\n\nfunction setItem(state: RestorationTrackerState, item: RestorationItem): void {\n\tstate.items.set(item.label, item);\n}\n\nfunction selectRestorationItems(\n\tstate: RestorationTrackerState,\n\tsettingsInput: RestorationSettings | undefined,\n\tbudgetTokens: number,\n): RestorationItem[] {\n\tconst settings = resolveSettings(settingsInput);\n\tconst candidates = Array.from(state.items.values())\n\t\t.filter((item) => !state.restoredLabels.has(item.label))\n\t\t.map((item) => truncateRestorationItem(item, settings.restorationMaxTokensPerItem))\n\t\t.sort((left, right) => {\n\t\t\tif (left.priority !== right.priority) return right.priority - left.priority;\n\t\t\tif (left.tokens !== right.tokens) return left.tokens - right.tokens;\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n\n\tconst selected: RestorationItem[] = [];\n\tlet totalTokens = 0;\n\tfor (const item of candidates) {\n\t\tif (selected.length >= settings.restorationMaxItems) break;\n\t\tif (totalTokens + item.tokens > budgetTokens) continue;\n\t\tselected.push(item);\n\t\ttotalTokens += item.tokens;\n\t}\n\treturn selected;\n}\n\nfunction buildRestorationContent(options: PreparePendingPayloadOptions, items: RestorationItem[]): string {\n\tconst files = items.filter((item) => item.type === \"file\");\n\tconst skills = items.filter((item) => item.type === \"skill\");\n\tconst lines = [\n\t\t\"[Restored context after compaction — files and skills from before compaction]\",\n\t\t`reason: ${options.reason}`,\n\t\t`compactionEntryId: ${options.compactionEntryId}`,\n\t\t\"\",\n\t];\n\n\tif (files.length > 0) {\n\t\tlines.push(\"<restored-files>\");\n\t\tfor (const file of files) {\n\t\t\tlines.push(`<file label=\"${escapeXmlAttribute(file.label)}\">${file.content}</file>`);\n\t\t}\n\t\tlines.push(\"</restored-files>\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (skills.length > 0) {\n\t\tlines.push(\"<restored-skills>\");\n\t\tfor (const skill of skills) {\n\t\t\tlines.push(`<skill label=\"${escapeXmlAttribute(skill.label)}\">${skill.content}</skill>`);\n\t\t}\n\t\tlines.push(\"</restored-skills>\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncateRestorationItem(item: RestorationItem, maxTokens: number): RestorationItem {\n\tif (item.tokens <= maxTokens) return item;\n\tconst truncationNotice = \"[... truncated]\";\n\tconst noticeTokens = estimateTextTokens(truncationNotice);\n\tconst targetTokens = Math.max(0, maxTokens - noticeTokens - 1);\n\tconst truncatedBody = truncateToTokenLimit(item.content, targetTokens);\n\tconst content = truncatedBody.length > 0 ? `${truncatedBody}\\n${truncationNotice}` : truncationNotice;\n\treturn { ...item, content, tokens: estimateTextTokens(content) };\n}\n\nfunction filterAgainstKeptMessages(state: RestorationTrackerState, keptMessages: AgentMessage[]): void {\n\tif (keptMessages.length === 0) return;\n\tconst keptText = keptMessages.map(extractMessageText).join(\"\\n\");\n\tfor (const label of state.items.keys()) {\n\t\tif (keptText.includes(label)) {\n\t\t\tstate.items.delete(label);\n\t\t}\n\t}\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tif (\"content\" in message) {\n\t\tif (typeof message.content === \"string\") return message.content;\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((content): content is { type: \"text\"; text: string } => content.type === \"text\")\n\t\t\t\t.map((content) => content.text)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t}\n\tif (\"summary\" in message) return message.summary;\n\tif (\"command\" in message) return `${message.command}\\n${message.output}`;\n\treturn \"\";\n}\n\nfunction truncateToTokenLimit(text: string, tokenLimit: number): string {\n\tif (tokenLimit <= 0 || text.length === 0) return \"\";\n\tif (estimateTextTokens(text) <= tokenLimit) return text;\n\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst mid = Math.ceil((low + high) / 2);\n\t\tconst candidate = text.slice(0, mid);\n\t\tif (estimateTextTokens(candidate) <= tokenLimit) {\n\t\t\tlow = mid;\n\t\t\tcontinue;\n\t\t}\n\t\thigh = mid - 1;\n\t}\n\treturn text.slice(0, low).trimEnd();\n}\n\nfunction resolveSettings(settings: RestorationSettings | undefined): Required<RestorationSettings> {\n\treturn {\n\t\trestorationMaxItems: normalizeNonNegativeInteger(settings?.restorationMaxItems, DEFAULT_RESTORATION_MAX_ITEMS),\n\t\trestorationMaxTokensPerItem: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTokensPerItem,\n\t\t\tDEFAULT_RESTORATION_MAX_TOKENS_PER_ITEM,\n\t\t),\n\t\trestorationMaxTotalTokens: normalizeNonNegativeInteger(\n\t\t\tsettings?.restorationMaxTotalTokens,\n\t\t\tDEFAULT_RESTORATION_MAX_TOTAL_TOKENS,\n\t\t),\n\t\trestorationContextRatio: normalizeNonNegativeNumber(\n\t\t\tsettings?.restorationContextRatio,\n\t\t\tDEFAULT_RESTORATION_CONTEXT_RATIO,\n\t\t),\n\t};\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeNonNegativeNumber(value: number | undefined, fallback: number): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction parseFileOperations(content: string | undefined): FileOperation[] {\n\tif (!content) return [];\n\tconst open = content.lastIndexOf(\"(\");\n\tconst close = content.lastIndexOf(\")\");\n\tif (open === -1 || close === -1 || close <= open) return [];\n\treturn content\n\t\t.slice(open + 1, close)\n\t\t.split(\",\")\n\t\t.map((operation) => operation.trim())\n\t\t.filter(\n\t\t\t(operation): operation is FileOperation =>\n\t\t\t\toperation === \"read\" || operation === \"write\" || operation === \"edit\",\n\t\t);\n}\n\nfunction sortOperations(operations: Set<FileOperation>): FileOperation[] {\n\tconst order: FileOperation[] = [\"read\", \"write\", \"edit\"];\n\treturn order.filter((operation) => operations.has(operation));\n}\n\nfunction estimateTextTokens(text: string): number {\n\treturn estimateTokens({ role: \"custom\", customType: \"restoration\", content: text, display: false, timestamp: 0 });\n}\n\nfunction escapeXmlAttribute(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n"]}
|