@code-yeongyu/senpi 2026.8.30 → 2026.9.2
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 +174 -2
- package/README.md +3 -0
- package/dist/core/agent-session.d.ts +28 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +161 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction-execution.d.ts +14 -0
- package/dist/core/compaction/compaction-execution.d.ts.map +1 -0
- package/dist/core/compaction/compaction-execution.js +121 -0
- package/dist/core/compaction/compaction-execution.js.map +1 -0
- package/dist/core/compaction/compaction-settings.d.ts +17 -0
- package/dist/core/compaction/compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/compaction-settings.js +17 -0
- package/dist/core/compaction/compaction-settings.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +13 -26
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +7 -136
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/ideal-compaction-settings.d.ts +9 -0
- package/dist/core/compaction/ideal-compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/ideal-compaction-settings.js +7 -0
- package/dist/core/compaction/ideal-compaction-settings.js.map +1 -0
- package/dist/core/compaction-settings-access.d.ts +19 -0
- package/dist/core/compaction-settings-access.d.ts.map +1 -0
- package/dist/core/compaction-settings-access.js +10 -0
- package/dist/core/compaction-settings-access.js.map +1 -0
- package/dist/core/compaction-settings-resolver.d.ts +22 -0
- package/dist/core/compaction-settings-resolver.d.ts.map +1 -0
- package/dist/core/compaction-settings-resolver.js +46 -0
- package/dist/core/compaction-settings-resolver.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +9 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +10 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +43 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +8 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts +17 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js +64 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js +84 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.d.ts +1 -0
- package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.js +13 -2
- package/dist/core/extensions/builtin/compaction/idle.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 +152 -154
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js +2 -0
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts +14 -0
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js +37 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts +30 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js +74 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts +9 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js +2 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -6
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts +46 -0
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js +103 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/policy.d.ts +12 -2
- package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.js +52 -26
- package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts +8 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js +17 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts +22 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js +16 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts +23 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +132 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -13
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +21 -197
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js +25 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js +56 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts +5 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js +76 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +7 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.js +60 -8
- package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.d.ts +1 -2
- package/dist/core/extensions/builtin/hooks/trust.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.js +1 -72
- package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +108 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +11 -0
- 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 +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +11 -0
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.js +18 -2
- package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.js +4 -0
- package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.d.ts +2 -0
- package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.js +28 -1
- package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +14 -0
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +33 -3
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/log.js +1 -1
- package/dist/core/retry-fallback/log.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +1 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-activity.d.ts +47 -0
- package/dist/core/session-activity.d.ts.map +1 -0
- package/dist/core/session-activity.js +58 -0
- package/dist/core/session-activity.js.map +1 -0
- package/dist/core/session-manager.d.ts +8 -12
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +118 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +8 -1
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-resident-store.js +12 -5
- package/dist/core/session-resident-store.js.map +1 -1
- package/dist/core/settings-manager.d.ts +8 -85
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-public-types.d.ts +11 -0
- package/dist/core/settings-public-types.d.ts.map +1 -0
- package/dist/core/settings-public-types.js +2 -0
- package/dist/core/settings-public-types.js.map +1 -0
- package/dist/core/settings-shapes.d.ts +36 -0
- package/dist/core/settings-shapes.d.ts.map +1 -0
- package/dist/core/settings-shapes.js +2 -0
- package/dist/core/settings-shapes.js.map +1 -0
- package/dist/core/shared-host-policy.d.ts +6 -0
- package/dist/core/shared-host-policy.d.ts.map +1 -0
- package/dist/core/shared-host-policy.js +7 -0
- package/dist/core/shared-host-policy.js.map +1 -0
- package/dist/core/terminal-settings.d.ts +22 -0
- package/dist/core/terminal-settings.d.ts.map +1 -0
- package/dist/core/terminal-settings.js +2 -0
- package/dist/core/terminal-settings.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -4
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +27 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/process.d.ts +13 -2
- package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.js +58 -12
- package/dist/modes/app-server/daemon/process.js.map +1 -1
- package/dist/modes/app-server/daemon.js +65 -7
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +84 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +435 -112
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +59 -6
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +12 -5
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +180 -25
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/custom-capability.d.ts +2 -0
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +2 -0
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +17 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +150 -23
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +54 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +259 -69
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -2
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +89 -21
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts +38 -0
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +149 -61
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/ownership-safe-lock.d.ts +14 -0
- package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -0
- package/dist/modes/rpc/ownership-safe-lock.js +87 -0
- package/dist/modes/rpc/ownership-safe-lock.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +13 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +46 -12
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +21 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +1 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +2 -1
- package/dist/modes/rpc/session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/session-binding.js +1 -0
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +54 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +180 -3
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +18 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +88 -8
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +11 -1
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +25 -0
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/socket-transport.d.ts +13 -0
- package/dist/modes/rpc/socket-transport.d.ts.map +1 -0
- package/dist/modes/rpc/socket-transport.js +92 -0
- package/dist/modes/rpc/socket-transport.js.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts +17 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.js +73 -0
- package/dist/modes/rpc/widget-line-renderer.js.map +1 -0
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +11 -2
- package/dist/utils/fs-watch.js.map +1 -1
- package/docs/app-server.md +2 -2
- package/docs/containerization.md +2 -2
- package/docs/development.md +7 -7
- package/docs/extensions.md +5 -5
- package/docs/grok-neo.md +1 -1
- package/docs/index.md +1 -1
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +4 -4
- package/docs/release-guide.md +21 -21
- package/docs/rpc.md +83 -6
- package/docs/sdk.md +1 -1
- package/docs/settings.md +4 -4
- package/docs/skills.md +2 -2
- package/docs/terminal-tools.md +1 -1
- package/docs/termux.md +1 -1
- package/docs/tui.md +1 -1
- package/examples/AGENTS.md +1 -1
- package/examples/sdk/README.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/skill-contribution.ts +71 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +3 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/SKILL.md +44 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/breaking-changes.md +75 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/build.md +114 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/dev-tooling.md +34 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/http-networking.md +113 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/install.md +93 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/node-compat-platforms.md +36 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/performance.md +33 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md +156 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/security.md +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/test.md +103 -0
- package/node_modules/@earendil-works/pi-agent-core/README.md +3 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +6 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +24 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +316 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +23 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +20 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts +42 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js +34 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts +8 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js +51 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts +45 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/screen.js +178 -55
- package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/README.md +6 -3
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/README.md +5 -4
- package/node_modules/@earendil-works/pi-tui/native/darwin/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/native/win32/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentMessage, StreamFn, ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import type { RetryCallbacks, RetryPolicy } from "@earendil-works/pi-ai";
|
|
3
|
+
import type { Model } from "@earendil-works/pi-ai/compat";
|
|
4
|
+
import { type CacheFriendlySummaryOptions, type CompactionPreparation, type CompactionResult } from "./compaction.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Generate summaries for compaction using prepared data.
|
|
7
|
+
* Returns CompactionResult - SessionManager adds uuid/parentUuid when saving.
|
|
8
|
+
*
|
|
9
|
+
* @param preparation - Pre-calculated preparation from prepareCompaction()
|
|
10
|
+
* @param customInstructions - Optional custom focus for the summary
|
|
11
|
+
* @param cacheFriendly - Active provider contexts and request settings for cache-friendly summarization
|
|
12
|
+
*/
|
|
13
|
+
export declare function compact(preparation: CompactionPreparation, model: Model<any>, apiKey: string | undefined, headers?: Record<string, string>, customInstructions?: string, signal?: AbortSignal, extraBody?: Record<string, unknown>, thinkingLevel?: ThinkingLevel, streamFn?: StreamFn, env?: Record<string, string>, transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>, retry?: RetryPolicy, callbacks?: RetryCallbacks, sessionId?: string, cacheFriendly?: CacheFriendlySummaryOptions): Promise<CompactionResult>;
|
|
14
|
+
//# sourceMappingURL=compaction-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-execution.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAEN,KAAK,2BAA2B,EAEhC,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAQrB,MAAM,iBAAiB,CAAC;AAmCzB;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC5B,WAAW,EAAE,qBAAqB,EAClC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,kBAAkB,CAAC,EAAE,MAAM,EAC3B,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,aAAa,CAAC,EAAE,aAAa,EAC7B,QAAQ,CAAC,EAAE,QAAQ,EACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,EAC9F,KAAK,CAAC,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,cAAc,EAC1B,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,2BAA2B,GACzC,OAAO,CAAC,gBAAgB,CAAC,CA+G3B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { convertToLlm } from "../messages.js";
|
|
2
|
+
import { buildSummarizationContext, cacheFriendlyContextFits, combineUsage, completeSummarization, createSummarizationOptions, generateSummaryWithUsage, getSummarizationFailure, } from "./compaction.js";
|
|
3
|
+
import { computeFileLists, contentTextForSummary, formatFileOperations, serializeConversation } from "./utils.js";
|
|
4
|
+
const TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.
|
|
5
|
+
|
|
6
|
+
Summarize the prefix to provide context for the retained suffix:
|
|
7
|
+
|
|
8
|
+
## Original Request
|
|
9
|
+
[What did the user ask for in this turn?]
|
|
10
|
+
|
|
11
|
+
## Early Progress
|
|
12
|
+
- [Key decisions and work done in the prefix]
|
|
13
|
+
|
|
14
|
+
## Context for Suffix
|
|
15
|
+
- [Information needed to understand the retained recent work]
|
|
16
|
+
|
|
17
|
+
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
18
|
+
const SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT = `The final turn in the source conversation was too large to keep in full. Its SUFFIX (recent work) is retained.
|
|
19
|
+
|
|
20
|
+
The source conversation may also contain complete earlier turns for background. Summarize only the final, incomplete turn. It begins with the last user-role request before this instruction. Do not summarize earlier turns except for details needed to understand this final turn's prefix.
|
|
21
|
+
|
|
22
|
+
Summarize the prefix to provide context for the retained suffix:
|
|
23
|
+
|
|
24
|
+
## Original Request
|
|
25
|
+
[What did the user ask for in this turn?]
|
|
26
|
+
|
|
27
|
+
## Early Progress
|
|
28
|
+
- [Key decisions and work done in the prefix]
|
|
29
|
+
|
|
30
|
+
## Context for Suffix
|
|
31
|
+
- [Information needed to understand the retained recent work]
|
|
32
|
+
|
|
33
|
+
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
34
|
+
/**
|
|
35
|
+
* Generate summaries for compaction using prepared data.
|
|
36
|
+
* Returns CompactionResult - SessionManager adds uuid/parentUuid when saving.
|
|
37
|
+
*
|
|
38
|
+
* @param preparation - Pre-calculated preparation from prepareCompaction()
|
|
39
|
+
* @param customInstructions - Optional custom focus for the summary
|
|
40
|
+
* @param cacheFriendly - Active provider contexts and request settings for cache-friendly summarization
|
|
41
|
+
*/
|
|
42
|
+
export async function compact(preparation, model, apiKey, headers, customInstructions, signal, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, cacheFriendly) {
|
|
43
|
+
const { firstKeptEntryId, messagesToSummarize, turnPrefixMessages, isSplitTurn, tokensBefore, previousSummary, fileOps, settings, } = preparation;
|
|
44
|
+
// Generate summaries and merge into one
|
|
45
|
+
let summary;
|
|
46
|
+
let summaryUsage;
|
|
47
|
+
if (isSplitTurn && turnPrefixMessages.length > 0) {
|
|
48
|
+
let historyText = "No prior history.";
|
|
49
|
+
let historyUsage;
|
|
50
|
+
if (messagesToSummarize.length > 0) {
|
|
51
|
+
const historyResult = await generateSummaryWithUsage(messagesToSummarize, model, settings.reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, {
|
|
52
|
+
sourceContext: cacheFriendly?.sourceContext,
|
|
53
|
+
requestOptions: cacheFriendly?.requestOptions,
|
|
54
|
+
});
|
|
55
|
+
historyText = historyResult.text;
|
|
56
|
+
historyUsage = historyResult.usage;
|
|
57
|
+
}
|
|
58
|
+
const turnPrefixResult = await generateTurnPrefixSummary(turnPrefixMessages, model, settings.reserveTokens, apiKey, headers, env, signal, extraBody, thinkingLevel, streamFn, transformContext, retry, callbacks, sessionId, {
|
|
59
|
+
sourceContext: cacheFriendly?.turnPrefixSourceContext,
|
|
60
|
+
requestOptions: cacheFriendly?.requestOptions,
|
|
61
|
+
});
|
|
62
|
+
// Merge into single summary
|
|
63
|
+
summary = `${historyText}\n\n---\n\n**Turn Context (split turn):**\n\n${turnPrefixResult.text}`;
|
|
64
|
+
summaryUsage = historyUsage ? combineUsage(historyUsage, turnPrefixResult.usage) : turnPrefixResult.usage;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Just generate history summary
|
|
68
|
+
const result = await generateSummaryWithUsage(messagesToSummarize, model, settings.reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, {
|
|
69
|
+
sourceContext: cacheFriendly?.sourceContext,
|
|
70
|
+
requestOptions: cacheFriendly?.requestOptions,
|
|
71
|
+
});
|
|
72
|
+
summary = result.text;
|
|
73
|
+
summaryUsage = result.usage;
|
|
74
|
+
}
|
|
75
|
+
// Compute file lists and append to summary
|
|
76
|
+
const { readFiles, modifiedFiles } = computeFileLists(fileOps);
|
|
77
|
+
summary += formatFileOperations(readFiles, modifiedFiles);
|
|
78
|
+
if (!firstKeptEntryId) {
|
|
79
|
+
throw new Error("First kept entry has no UUID - session may need migration");
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
summary,
|
|
83
|
+
firstKeptEntryId,
|
|
84
|
+
tokensBefore,
|
|
85
|
+
usage: summaryUsage,
|
|
86
|
+
details: { readFiles, modifiedFiles },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate a summary for a turn prefix (when splitting a turn).
|
|
91
|
+
*/
|
|
92
|
+
async function generateTurnPrefixSummary(messages, model, reserveTokens, apiKey, headers, env, signal, extraBody, thinkingLevel, streamFn, transformContext, retry, callbacks, sessionId, cacheFriendly) {
|
|
93
|
+
const maxTokens = Math.min(Math.floor(0.5 * reserveTokens), model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY);
|
|
94
|
+
let sourceContext = cacheFriendly?.sourceContext;
|
|
95
|
+
if (sourceContext &&
|
|
96
|
+
!cacheFriendlyContextFits(model, buildSummarizationContext(SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT, sourceContext), maxTokens)) {
|
|
97
|
+
sourceContext = undefined;
|
|
98
|
+
}
|
|
99
|
+
let promptText;
|
|
100
|
+
if (sourceContext) {
|
|
101
|
+
promptText = SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const providerMessages = transformContext ? await transformContext(messages, signal) : messages;
|
|
105
|
+
const llmMessages = convertToLlm(providerMessages);
|
|
106
|
+
const conversationText = serializeConversation(llmMessages);
|
|
107
|
+
promptText = `<conversation>\n${conversationText}\n</conversation>\n\n${TURN_PREFIX_SUMMARIZATION_PROMPT}`;
|
|
108
|
+
}
|
|
109
|
+
const response = await completeSummarization(model, buildSummarizationContext(promptText, sourceContext), createSummarizationOptions(model, maxTokens, apiKey, headers, env, signal, thinkingLevel, extraBody, sessionId, sourceContext ? cacheFriendly?.requestOptions : undefined, sourceContext ? "short" : undefined), streamFn, retry, callbacks);
|
|
110
|
+
const failure = getSummarizationFailure(response, "Turn prefix summarization");
|
|
111
|
+
if (failure)
|
|
112
|
+
throw new Error(failure);
|
|
113
|
+
if (response.content.some((block) => block.type === "toolCall")) {
|
|
114
|
+
throw new Error("Turn prefix summarization attempted to call a tool");
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
text: contentTextForSummary(response.content),
|
|
118
|
+
usage: response.usage,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=compaction-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-execution.js","sourceRoot":"","sources":["../../../src/core/compaction/compaction-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage, StreamFn, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { RetryCallbacks, RetryPolicy } from \"@earendil-works/pi-ai\";\nimport type { Model, Usage } from \"@earendil-works/pi-ai/compat\";\nimport { convertToLlm } from \"../messages.ts\";\nimport {\n\tbuildSummarizationContext,\n\ttype CacheFriendlySummaryOptions,\n\ttype CompactionDetails,\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcacheFriendlyContextFits,\n\tcombineUsage,\n\tcompleteSummarization,\n\tcreateSummarizationOptions,\n\tgenerateSummaryWithUsage,\n\tgetSummarizationFailure,\n\ttype SummarizationStreamFn,\n} from \"./compaction.ts\";\nimport { computeFileLists, contentTextForSummary, formatFileOperations, serializeConversation } from \"./utils.ts\";\n\nconst TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.\n\nSummarize the prefix to provide context for the retained suffix:\n\n## Original Request\n[What did the user ask for in this turn?]\n\n## Early Progress\n- [Key decisions and work done in the prefix]\n\n## Context for Suffix\n- [Information needed to understand the retained recent work]\n\nBe concise. Focus on what's needed to understand the kept suffix.`;\n\nconst SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT = `The final turn in the source conversation was too large to keep in full. Its SUFFIX (recent work) is retained.\n\nThe source conversation may also contain complete earlier turns for background. Summarize only the final, incomplete turn. It begins with the last user-role request before this instruction. Do not summarize earlier turns except for details needed to understand this final turn's prefix.\n\nSummarize the prefix to provide context for the retained suffix:\n\n## Original Request\n[What did the user ask for in this turn?]\n\n## Early Progress\n- [Key decisions and work done in the prefix]\n\n## Context for Suffix\n- [Information needed to understand the retained recent work]\n\nBe concise. Focus on what's needed to understand the kept suffix.`;\n\n/**\n * Generate summaries for compaction using prepared data.\n * Returns CompactionResult - SessionManager adds uuid/parentUuid when saving.\n *\n * @param preparation - Pre-calculated preparation from prepareCompaction()\n * @param customInstructions - Optional custom focus for the summary\n * @param cacheFriendly - Active provider contexts and request settings for cache-friendly summarization\n */\nexport async function compact(\n\tpreparation: CompactionPreparation,\n\tmodel: Model<any>,\n\tapiKey: string | undefined,\n\theaders?: Record<string, string>,\n\tcustomInstructions?: string,\n\tsignal?: AbortSignal,\n\textraBody?: Record<string, unknown>,\n\tthinkingLevel?: ThinkingLevel,\n\tstreamFn?: StreamFn,\n\tenv?: Record<string, string>,\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>,\n\tretry?: RetryPolicy,\n\tcallbacks?: RetryCallbacks,\n\tsessionId?: string,\n\tcacheFriendly?: CacheFriendlySummaryOptions,\n): Promise<CompactionResult> {\n\tconst {\n\t\tfirstKeptEntryId,\n\t\tmessagesToSummarize,\n\t\tturnPrefixMessages,\n\t\tisSplitTurn,\n\t\ttokensBefore,\n\t\tpreviousSummary,\n\t\tfileOps,\n\t\tsettings,\n\t} = preparation;\n\n\t// Generate summaries and merge into one\n\tlet summary: string;\n\tlet summaryUsage: Usage;\n\n\tif (isSplitTurn && turnPrefixMessages.length > 0) {\n\t\tlet historyText = \"No prior history.\";\n\t\tlet historyUsage: Usage | undefined;\n\t\tif (messagesToSummarize.length > 0) {\n\t\t\tconst historyResult = await generateSummaryWithUsage(\n\t\t\t\tmessagesToSummarize,\n\t\t\t\tmodel,\n\t\t\t\tsettings.reserveTokens,\n\t\t\t\tapiKey,\n\t\t\t\theaders,\n\t\t\t\tsignal,\n\t\t\t\tcustomInstructions,\n\t\t\t\tpreviousSummary,\n\t\t\t\textraBody,\n\t\t\t\tthinkingLevel,\n\t\t\t\tstreamFn,\n\t\t\t\tenv,\n\t\t\t\ttransformContext,\n\t\t\t\tretry,\n\t\t\t\tcallbacks,\n\t\t\t\tsessionId,\n\t\t\t\t{\n\t\t\t\t\tsourceContext: cacheFriendly?.sourceContext,\n\t\t\t\t\trequestOptions: cacheFriendly?.requestOptions,\n\t\t\t\t},\n\t\t\t);\n\t\t\thistoryText = historyResult.text;\n\t\t\thistoryUsage = historyResult.usage;\n\t\t}\n\t\tconst turnPrefixResult = await generateTurnPrefixSummary(\n\t\t\tturnPrefixMessages,\n\t\t\tmodel,\n\t\t\tsettings.reserveTokens,\n\t\t\tapiKey,\n\t\t\theaders,\n\t\t\tenv,\n\t\t\tsignal,\n\t\t\textraBody,\n\t\t\tthinkingLevel,\n\t\t\tstreamFn,\n\t\t\ttransformContext,\n\t\t\tretry,\n\t\t\tcallbacks,\n\t\t\tsessionId,\n\t\t\t{\n\t\t\t\tsourceContext: cacheFriendly?.turnPrefixSourceContext,\n\t\t\t\trequestOptions: cacheFriendly?.requestOptions,\n\t\t\t},\n\t\t);\n\t\t// Merge into single summary\n\t\tsummary = `${historyText}\\n\\n---\\n\\n**Turn Context (split turn):**\\n\\n${turnPrefixResult.text}`;\n\t\tsummaryUsage = historyUsage ? combineUsage(historyUsage, turnPrefixResult.usage) : turnPrefixResult.usage;\n\t} else {\n\t\t// Just generate history summary\n\t\tconst result = await generateSummaryWithUsage(\n\t\t\tmessagesToSummarize,\n\t\t\tmodel,\n\t\t\tsettings.reserveTokens,\n\t\t\tapiKey,\n\t\t\theaders,\n\t\t\tsignal,\n\t\t\tcustomInstructions,\n\t\t\tpreviousSummary,\n\t\t\textraBody,\n\t\t\tthinkingLevel,\n\t\t\tstreamFn,\n\t\t\tenv,\n\t\t\ttransformContext,\n\t\t\tretry,\n\t\t\tcallbacks,\n\t\t\tsessionId,\n\t\t\t{\n\t\t\t\tsourceContext: cacheFriendly?.sourceContext,\n\t\t\t\trequestOptions: cacheFriendly?.requestOptions,\n\t\t\t},\n\t\t);\n\t\tsummary = result.text;\n\t\tsummaryUsage = result.usage;\n\t}\n\n\t// Compute file lists and append to summary\n\tconst { readFiles, modifiedFiles } = computeFileLists(fileOps);\n\tsummary += formatFileOperations(readFiles, modifiedFiles);\n\n\tif (!firstKeptEntryId) {\n\t\tthrow new Error(\"First kept entry has no UUID - session may need migration\");\n\t}\n\n\treturn {\n\t\tsummary,\n\t\tfirstKeptEntryId,\n\t\ttokensBefore,\n\t\tusage: summaryUsage,\n\t\tdetails: { readFiles, modifiedFiles } as CompactionDetails,\n\t};\n}\n\n/**\n * Generate a summary for a turn prefix (when splitting a turn).\n */\nasync function generateTurnPrefixSummary(\n\tmessages: AgentMessage[],\n\tmodel: Model<any>,\n\treserveTokens: number,\n\tapiKey: string | undefined,\n\theaders?: Record<string, string>,\n\tenv?: Record<string, string>,\n\tsignal?: AbortSignal,\n\textraBody?: Record<string, unknown>,\n\tthinkingLevel?: ThinkingLevel,\n\tstreamFn?: SummarizationStreamFn,\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>,\n\tretry?: RetryPolicy,\n\tcallbacks?: RetryCallbacks,\n\tsessionId?: string,\n\tcacheFriendly?: Pick<CacheFriendlySummaryOptions, \"sourceContext\" | \"requestOptions\">,\n): Promise<{ text: string; usage: Usage }> {\n\tconst maxTokens = Math.min(\n\t\tMath.floor(0.5 * reserveTokens),\n\t\tmodel.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY,\n\t);\n\tlet sourceContext = cacheFriendly?.sourceContext;\n\tif (\n\t\tsourceContext &&\n\t\t!cacheFriendlyContextFits(\n\t\t\tmodel,\n\t\t\tbuildSummarizationContext(SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT, sourceContext),\n\t\t\tmaxTokens,\n\t\t)\n\t) {\n\t\tsourceContext = undefined;\n\t}\n\tlet promptText: string;\n\tif (sourceContext) {\n\t\tpromptText = SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT;\n\t} else {\n\t\tconst providerMessages = transformContext ? await transformContext(messages, signal) : messages;\n\t\tconst llmMessages = convertToLlm(providerMessages);\n\t\tconst conversationText = serializeConversation(llmMessages);\n\t\tpromptText = `<conversation>\\n${conversationText}\\n</conversation>\\n\\n${TURN_PREFIX_SUMMARIZATION_PROMPT}`;\n\t}\n\n\tconst response = await completeSummarization(\n\t\tmodel,\n\t\tbuildSummarizationContext(promptText, sourceContext),\n\t\tcreateSummarizationOptions(\n\t\t\tmodel,\n\t\t\tmaxTokens,\n\t\t\tapiKey,\n\t\t\theaders,\n\t\t\tenv,\n\t\t\tsignal,\n\t\t\tthinkingLevel,\n\t\t\textraBody,\n\t\t\tsessionId,\n\t\t\tsourceContext ? cacheFriendly?.requestOptions : undefined,\n\t\t\tsourceContext ? \"short\" : undefined,\n\t\t),\n\t\tstreamFn,\n\t\tretry,\n\t\tcallbacks,\n\t);\n\n\tconst failure = getSummarizationFailure(response, \"Turn prefix summarization\");\n\tif (failure) throw new Error(failure);\n\tif (response.content.some((block) => block.type === \"toolCall\")) {\n\t\tthrow new Error(\"Turn prefix summarization attempted to call a tool\");\n\t}\n\n\treturn {\n\t\ttext: contentTextForSummary(response.content),\n\t\tusage: response.usage,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type IdealCompactionSettings } from "./ideal-compaction-settings.ts";
|
|
2
|
+
export interface CompactionSettings extends IdealCompactionSettings {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
reserveTokens: number;
|
|
5
|
+
keepRecentTokens: number;
|
|
6
|
+
speculativeEnabled?: boolean;
|
|
7
|
+
speculativeFraction?: number;
|
|
8
|
+
speculativeCooldownMs?: number;
|
|
9
|
+
restorationEnabled?: boolean;
|
|
10
|
+
restorationMaxItems?: number;
|
|
11
|
+
restorationMaxTokensPerItem?: number;
|
|
12
|
+
restorationMaxTotalTokens?: number;
|
|
13
|
+
restorationContextRatio?: number;
|
|
14
|
+
idleCompactionEnabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const DEFAULT_COMPACTION_SETTINGS: CompactionSettings;
|
|
17
|
+
//# sourceMappingURL=compaction-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-settings.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEjH,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,2BAA2B,EAAE,kBAczC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DEFAULT_IDEAL_COMPACTION_SETTINGS } from "./ideal-compaction-settings.js";
|
|
2
|
+
export const DEFAULT_COMPACTION_SETTINGS = {
|
|
3
|
+
enabled: true,
|
|
4
|
+
reserveTokens: 16384,
|
|
5
|
+
keepRecentTokens: 20000,
|
|
6
|
+
speculativeEnabled: true,
|
|
7
|
+
speculativeFraction: 0.75,
|
|
8
|
+
speculativeCooldownMs: 30000,
|
|
9
|
+
restorationEnabled: true,
|
|
10
|
+
restorationMaxItems: 10,
|
|
11
|
+
restorationMaxTokensPerItem: 5000,
|
|
12
|
+
restorationMaxTotalTokens: 50_000,
|
|
13
|
+
restorationContextRatio: 0.15,
|
|
14
|
+
idleCompactionEnabled: true,
|
|
15
|
+
...DEFAULT_IDEAL_COMPACTION_SETTINGS,
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=compaction-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-settings.js","sourceRoot":"","sources":["../../../src/core/compaction/compaction-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAgC,MAAM,gCAAgC,CAAC;AAiBjH,MAAM,CAAC,MAAM,2BAA2B,GAAuB;IAC9D,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;IACvB,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,IAAI;IACzB,qBAAqB,EAAE,KAAK;IAC5B,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,EAAE;IACvB,2BAA2B,EAAE,IAAI;IACjC,yBAAyB,EAAE,MAAM;IACjC,uBAAuB,EAAE,IAAI;IAC7B,qBAAqB,EAAE,IAAI;IAC3B,GAAG,iCAAiC;CACpC,CAAC","sourcesContent":["import { DEFAULT_IDEAL_COMPACTION_SETTINGS, type IdealCompactionSettings } from \"./ideal-compaction-settings.ts\";\n\nexport interface CompactionSettings extends IdealCompactionSettings {\n\tenabled: boolean;\n\treserveTokens: number;\n\tkeepRecentTokens: number;\n\tspeculativeEnabled?: boolean;\n\tspeculativeFraction?: number;\n\tspeculativeCooldownMs?: number;\n\trestorationEnabled?: boolean;\n\trestorationMaxItems?: number;\n\trestorationMaxTokensPerItem?: number;\n\trestorationMaxTotalTokens?: number;\n\trestorationContextRatio?: number;\n\tidleCompactionEnabled?: boolean;\n}\n\nexport const DEFAULT_COMPACTION_SETTINGS: CompactionSettings = {\n\tenabled: true,\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n\tspeculativeEnabled: true,\n\tspeculativeFraction: 0.75,\n\tspeculativeCooldownMs: 30000,\n\trestorationEnabled: true,\n\trestorationMaxItems: 10,\n\trestorationMaxTokensPerItem: 5000,\n\trestorationMaxTotalTokens: 50_000,\n\trestorationContextRatio: 0.15,\n\tidleCompactionEnabled: true,\n\t...DEFAULT_IDEAL_COMPACTION_SETTINGS,\n};\n"]}
|
|
@@ -8,8 +8,13 @@ import type { AgentMessage, StreamFn, ThinkingLevel } from "@earendil-works/pi-a
|
|
|
8
8
|
import { type RetryCallbacks, type RetryPolicy } from "@earendil-works/pi-ai";
|
|
9
9
|
import type { AssistantMessage, Context, Model, SimpleStreamOptions, Usage } from "@earendil-works/pi-ai/compat";
|
|
10
10
|
import { type SessionEntry } from "../session-manager.ts";
|
|
11
|
+
import type { CompactionSettings } from "./compaction-settings.ts";
|
|
12
|
+
export { type CompactionSettings, DEFAULT_COMPACTION_SETTINGS } from "./compaction-settings.ts";
|
|
11
13
|
import { type FileOperations } from "./utils.ts";
|
|
12
|
-
type SummarizationStreamFn = StreamFn;
|
|
14
|
+
export type SummarizationStreamFn = StreamFn;
|
|
15
|
+
type SummarizationOptions = SimpleStreamOptions & {
|
|
16
|
+
readonly env?: Record<string, string>;
|
|
17
|
+
};
|
|
13
18
|
/** Details stored in CompactionEntry.details for file tracking */
|
|
14
19
|
export interface CompactionDetails {
|
|
15
20
|
readFiles: string[];
|
|
@@ -26,20 +31,7 @@ export interface CompactionResult<T = unknown> {
|
|
|
26
31
|
/** Extension-specific data (e.g., ArtifactIndex, version markers for structured compaction) */
|
|
27
32
|
details?: T;
|
|
28
33
|
}
|
|
29
|
-
export
|
|
30
|
-
enabled: boolean;
|
|
31
|
-
reserveTokens: number;
|
|
32
|
-
keepRecentTokens: number;
|
|
33
|
-
speculativeEnabled?: boolean;
|
|
34
|
-
speculativeFraction?: number;
|
|
35
|
-
speculativeCooldownMs?: number;
|
|
36
|
-
restorationEnabled?: boolean;
|
|
37
|
-
restorationMaxItems?: number;
|
|
38
|
-
restorationMaxTokensPerItem?: number;
|
|
39
|
-
restorationMaxTotalTokens?: number;
|
|
40
|
-
restorationContextRatio?: number;
|
|
41
|
-
idleCompactionEnabled?: boolean;
|
|
42
|
-
}
|
|
34
|
+
export declare function combineUsage(first: Usage, second: Usage): Usage;
|
|
43
35
|
/** Active provider contexts and request settings used to preserve cacheable compaction prefixes. */
|
|
44
36
|
export interface CacheFriendlySummaryOptions {
|
|
45
37
|
/** Exact provider context prefix containing the history to summarize. */
|
|
@@ -49,7 +41,6 @@ export interface CacheFriendlySummaryOptions {
|
|
|
49
41
|
/** Provider request settings copied from the active agent request path. */
|
|
50
42
|
requestOptions?: Pick<SimpleStreamOptions, "sessionId" | "onPayload" | "onResponse" | "transport" | "thinkingBudgets" | "maxRetryDelayMs">;
|
|
51
43
|
}
|
|
52
|
-
export declare const DEFAULT_COMPACTION_SETTINGS: CompactionSettings;
|
|
53
44
|
/**
|
|
54
45
|
* Calculate total context tokens from usage.
|
|
55
46
|
* Uses the native totalTokens field when available, falls back to computing from components.
|
|
@@ -116,6 +107,7 @@ export interface CutPointResult {
|
|
|
116
107
|
*/
|
|
117
108
|
export declare function findCutPoint(entries: SessionEntry[], startIndex: number, endIndex: number, keepRecentTokens: number): CutPointResult;
|
|
118
109
|
export declare function getSummarizationFailure(response: AssistantMessage, label: string): string | undefined;
|
|
110
|
+
export declare function createSummarizationOptions(model: Model<any>, maxTokens: number, apiKey: string | undefined, headers: Record<string, string> | undefined, env: Record<string, string> | undefined, signal: AbortSignal | undefined, thinkingLevel: ThinkingLevel | undefined, extraBody?: Record<string, unknown>, sessionId?: string, requestOptions?: CacheFriendlySummaryOptions["requestOptions"], cacheRetention?: SimpleStreamOptions["cacheRetention"]): SummarizationOptions;
|
|
119
111
|
/**
|
|
120
112
|
* Shared choke point for every compaction/branch-summary summarization call. Wraps the
|
|
121
113
|
* single LLM call in {@link retryAssistantCall} so transient stream drops (e.g.
|
|
@@ -129,6 +121,10 @@ export declare function completeSummarization(model: Model<any>, context: Contex
|
|
|
129
121
|
* If previousSummary is provided, uses the update prompt to merge.
|
|
130
122
|
*/
|
|
131
123
|
export declare function generateSummary(currentMessages: AgentMessage[], model: Model<any>, reserveTokens: number, apiKey: string | undefined, headers?: Record<string, string>, signal?: AbortSignal, customInstructions?: string, previousSummary?: string, extraBody?: Record<string, unknown>, thinkingLevel?: ThinkingLevel, streamFn?: StreamFn, env?: Record<string, string>, transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>, retry?: RetryPolicy, callbacks?: RetryCallbacks, sessionId?: string, cacheFriendly?: Pick<CacheFriendlySummaryOptions, "sourceContext" | "requestOptions">): Promise<string>;
|
|
124
|
+
/** Build a standalone summary request or append its instruction to an existing provider context. */
|
|
125
|
+
export declare function buildSummarizationContext(promptText: string, sourceContext?: Context): Context;
|
|
126
|
+
/** Whether the source context leaves room for the requested summary output and provider safety margin. */
|
|
127
|
+
export declare function cacheFriendlyContextFits(model: Model<any>, context: Context, maxTokens: number): boolean;
|
|
132
128
|
/** Generate or update a conversation summary and return its provider usage. */
|
|
133
129
|
export declare function generateSummaryWithUsage(currentMessages: AgentMessage[], model: Model<any>, reserveTokens: number, apiKey: string | undefined, headers?: Record<string, string>, signal?: AbortSignal, customInstructions?: string, previousSummary?: string, extraBody?: Record<string, unknown>, thinkingLevel?: ThinkingLevel, streamFn?: StreamFn, env?: Record<string, string>, transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>, retry?: RetryPolicy, callbacks?: RetryCallbacks, sessionId?: string, cacheFriendly?: Pick<CacheFriendlySummaryOptions, "sourceContext" | "requestOptions">): Promise<{
|
|
134
130
|
text: string;
|
|
@@ -159,14 +155,5 @@ export interface CompactionPreparation {
|
|
|
159
155
|
settings: CompactionSettings;
|
|
160
156
|
}
|
|
161
157
|
export declare function prepareCompaction(pathEntries: SessionEntry[], settings: CompactionSettings, forceProgress?: boolean, allowSummaryOnly?: boolean): CompactionPreparation | undefined;
|
|
162
|
-
|
|
163
|
-
* Generate summaries for compaction using prepared data.
|
|
164
|
-
* Returns CompactionResult - SessionManager adds uuid/parentUuid when saving.
|
|
165
|
-
*
|
|
166
|
-
* @param preparation - Pre-calculated preparation from prepareCompaction()
|
|
167
|
-
* @param customInstructions - Optional custom focus for the summary
|
|
168
|
-
* @param cacheFriendly - Active provider contexts and request settings for cache-friendly summarization
|
|
169
|
-
*/
|
|
170
|
-
export declare function compact(preparation: CompactionPreparation, model: Model<any>, apiKey: string | undefined, headers?: Record<string, string>, customInstructions?: string, signal?: AbortSignal, extraBody?: Record<string, unknown>, thinkingLevel?: ThinkingLevel, streamFn?: StreamFn, env?: Record<string, string>, transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>, retry?: RetryPolicy, callbacks?: RetryCallbacks, sessionId?: string, cacheFriendly?: CacheFriendlySummaryOptions): Promise<CompactionResult>;
|
|
171
|
-
export {};
|
|
158
|
+
export { compact } from "./compaction-execution.ts";
|
|
172
159
|
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAA8B,MAAM,uBAAuB,CAAC;AAC1G,OAAO,KAAK,EACX,gBAAgB,EAChB,OAAO,EAEP,KAAK,EACL,mBAAmB,EAEnB,KAAK,EACL,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,9 @@ import { streamSimple } from "@earendil-works/pi-ai/compat";
|
|
|
9
9
|
import { estimateContextTokens as estimateProviderContextTokens } from "@earendil-works/pi-ai/utils/estimate";
|
|
10
10
|
import { convertToLlm, filterContextExcludedMessages, isContextExcludedCustomMessage } from "../messages.js";
|
|
11
11
|
import { buildSessionContext, sessionEntryToContextMessages, } from "../session-manager.js";
|
|
12
|
+
export { DEFAULT_COMPACTION_SETTINGS } from "./compaction-settings.js";
|
|
12
13
|
import { consumeStreamWithIdleTimeout, DEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS, DEFAULT_SUMMARIZATION_MAX_DURATION_MS, } from "./stream-watchdog.js";
|
|
13
|
-
import {
|
|
14
|
+
import { contentTextForSummary, createFileOps, extractFileOpsFromMessage, SUMMARIZATION_SYSTEM_PROMPT, serializeConversation, } from "./utils.js";
|
|
14
15
|
function getAnthropicSummarizationFallback(model) {
|
|
15
16
|
if (model.provider !== "anthropic" || model.api !== "anthropic-messages") {
|
|
16
17
|
return undefined;
|
|
@@ -84,7 +85,7 @@ function collectSourceMessages(entries, startIndex, endIndex, previousCompaction
|
|
|
84
85
|
}
|
|
85
86
|
return messages;
|
|
86
87
|
}
|
|
87
|
-
function combineUsage(first, second) {
|
|
88
|
+
export function combineUsage(first, second) {
|
|
88
89
|
return {
|
|
89
90
|
input: first.input + second.input,
|
|
90
91
|
output: first.output + second.output,
|
|
@@ -106,20 +107,6 @@ function combineUsage(first, second) {
|
|
|
106
107
|
},
|
|
107
108
|
};
|
|
108
109
|
}
|
|
109
|
-
export const DEFAULT_COMPACTION_SETTINGS = {
|
|
110
|
-
enabled: true,
|
|
111
|
-
reserveTokens: 16384,
|
|
112
|
-
keepRecentTokens: 20000,
|
|
113
|
-
speculativeEnabled: true,
|
|
114
|
-
speculativeFraction: 0.75,
|
|
115
|
-
speculativeCooldownMs: 30000,
|
|
116
|
-
restorationEnabled: true,
|
|
117
|
-
restorationMaxItems: 10,
|
|
118
|
-
restorationMaxTokensPerItem: 5000,
|
|
119
|
-
restorationMaxTotalTokens: 50_000,
|
|
120
|
-
restorationContextRatio: 0.15,
|
|
121
|
-
idleCompactionEnabled: true,
|
|
122
|
-
};
|
|
123
110
|
// ============================================================================
|
|
124
111
|
// Token calculation
|
|
125
112
|
// ============================================================================
|
|
@@ -518,7 +505,7 @@ ${UPDATE_SUMMARIZATION_INSTRUCTIONS}`;
|
|
|
518
505
|
const SOURCE_CONTEXT_UPDATE_SUMMARIZATION_PROMPT = `The messages above contain an existing structured summary of earlier conversation history followed by NEW conversation messages.
|
|
519
506
|
|
|
520
507
|
${UPDATE_SUMMARIZATION_INSTRUCTIONS}`;
|
|
521
|
-
function createSummarizationOptions(model, maxTokens, apiKey, headers, env, signal, thinkingLevel, extraBody, sessionId, requestOptions, cacheRetention) {
|
|
508
|
+
export function createSummarizationOptions(model, maxTokens, apiKey, headers, env, signal, thinkingLevel, extraBody, sessionId, requestOptions, cacheRetention) {
|
|
522
509
|
const options = {
|
|
523
510
|
...requestOptions,
|
|
524
511
|
maxTokens,
|
|
@@ -626,7 +613,7 @@ export async function generateSummary(currentMessages, model, reserveTokens, api
|
|
|
626
613
|
return (await generateSummaryWithUsage(currentMessages, model, reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, cacheFriendly)).text;
|
|
627
614
|
}
|
|
628
615
|
/** Build a standalone summary request or append its instruction to an existing provider context. */
|
|
629
|
-
function buildSummarizationContext(promptText, sourceContext) {
|
|
616
|
+
export function buildSummarizationContext(promptText, sourceContext) {
|
|
630
617
|
const instructionMessage = {
|
|
631
618
|
role: "user",
|
|
632
619
|
content: [{ type: "text", text: promptText }],
|
|
@@ -649,7 +636,7 @@ function buildSummarizationContext(promptText, sourceContext) {
|
|
|
649
636
|
*/
|
|
650
637
|
const CACHE_FRIENDLY_CONTEXT_SAFETY_TOKENS = 4096;
|
|
651
638
|
/** Whether the source context leaves room for the requested summary output and provider safety margin. */
|
|
652
|
-
function cacheFriendlyContextFits(model, context, maxTokens) {
|
|
639
|
+
export function cacheFriendlyContextFits(model, context, maxTokens) {
|
|
653
640
|
return (model.contextWindow <= 0 ||
|
|
654
641
|
estimateProviderContextTokens(context).tokens + maxTokens + CACHE_FRIENDLY_CONTEXT_SAFETY_TOKENS <=
|
|
655
642
|
model.contextWindow);
|
|
@@ -790,121 +777,5 @@ export function prepareCompaction(pathEntries, settings, forceProgress = false,
|
|
|
790
777
|
// ============================================================================
|
|
791
778
|
// Main compaction function
|
|
792
779
|
// ============================================================================
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
Summarize the prefix to provide context for the retained suffix:
|
|
796
|
-
|
|
797
|
-
## Original Request
|
|
798
|
-
[What did the user ask for in this turn?]
|
|
799
|
-
|
|
800
|
-
## Early Progress
|
|
801
|
-
- [Key decisions and work done in the prefix]
|
|
802
|
-
|
|
803
|
-
## Context for Suffix
|
|
804
|
-
- [Information needed to understand the retained recent work]
|
|
805
|
-
|
|
806
|
-
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
807
|
-
const SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT = `The final turn in the source conversation was too large to keep in full. Its SUFFIX (recent work) is retained.
|
|
808
|
-
|
|
809
|
-
The source conversation may also contain complete earlier turns for background. Summarize only the final, incomplete turn. It begins with the last user-role request before this instruction. Do not summarize earlier turns except for details needed to understand this final turn's prefix.
|
|
810
|
-
|
|
811
|
-
Summarize the prefix to provide context for the retained suffix:
|
|
812
|
-
|
|
813
|
-
## Original Request
|
|
814
|
-
[What did the user ask for in this turn?]
|
|
815
|
-
|
|
816
|
-
## Early Progress
|
|
817
|
-
- [Key decisions and work done in the prefix]
|
|
818
|
-
|
|
819
|
-
## Context for Suffix
|
|
820
|
-
- [Information needed to understand the retained recent work]
|
|
821
|
-
|
|
822
|
-
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
823
|
-
/**
|
|
824
|
-
* Generate summaries for compaction using prepared data.
|
|
825
|
-
* Returns CompactionResult - SessionManager adds uuid/parentUuid when saving.
|
|
826
|
-
*
|
|
827
|
-
* @param preparation - Pre-calculated preparation from prepareCompaction()
|
|
828
|
-
* @param customInstructions - Optional custom focus for the summary
|
|
829
|
-
* @param cacheFriendly - Active provider contexts and request settings for cache-friendly summarization
|
|
830
|
-
*/
|
|
831
|
-
export async function compact(preparation, model, apiKey, headers, customInstructions, signal, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, cacheFriendly) {
|
|
832
|
-
const { firstKeptEntryId, messagesToSummarize, turnPrefixMessages, isSplitTurn, tokensBefore, previousSummary, fileOps, settings, } = preparation;
|
|
833
|
-
// Generate summaries and merge into one
|
|
834
|
-
let summary;
|
|
835
|
-
let summaryUsage;
|
|
836
|
-
if (isSplitTurn && turnPrefixMessages.length > 0) {
|
|
837
|
-
let historyText = "No prior history.";
|
|
838
|
-
let historyUsage;
|
|
839
|
-
if (messagesToSummarize.length > 0) {
|
|
840
|
-
const historyResult = await generateSummaryWithUsage(messagesToSummarize, model, settings.reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, {
|
|
841
|
-
sourceContext: cacheFriendly?.sourceContext,
|
|
842
|
-
requestOptions: cacheFriendly?.requestOptions,
|
|
843
|
-
});
|
|
844
|
-
historyText = historyResult.text;
|
|
845
|
-
historyUsage = historyResult.usage;
|
|
846
|
-
}
|
|
847
|
-
const turnPrefixResult = await generateTurnPrefixSummary(turnPrefixMessages, model, settings.reserveTokens, apiKey, headers, env, signal, extraBody, thinkingLevel, streamFn, transformContext, retry, callbacks, sessionId, {
|
|
848
|
-
sourceContext: cacheFriendly?.turnPrefixSourceContext,
|
|
849
|
-
requestOptions: cacheFriendly?.requestOptions,
|
|
850
|
-
});
|
|
851
|
-
// Merge into single summary
|
|
852
|
-
summary = `${historyText}\n\n---\n\n**Turn Context (split turn):**\n\n${turnPrefixResult.text}`;
|
|
853
|
-
summaryUsage = historyUsage ? combineUsage(historyUsage, turnPrefixResult.usage) : turnPrefixResult.usage;
|
|
854
|
-
}
|
|
855
|
-
else {
|
|
856
|
-
// Just generate history summary
|
|
857
|
-
const result = await generateSummaryWithUsage(messagesToSummarize, model, settings.reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, extraBody, thinkingLevel, streamFn, env, transformContext, retry, callbacks, sessionId, {
|
|
858
|
-
sourceContext: cacheFriendly?.sourceContext,
|
|
859
|
-
requestOptions: cacheFriendly?.requestOptions,
|
|
860
|
-
});
|
|
861
|
-
summary = result.text;
|
|
862
|
-
summaryUsage = result.usage;
|
|
863
|
-
}
|
|
864
|
-
// Compute file lists and append to summary
|
|
865
|
-
const { readFiles, modifiedFiles } = computeFileLists(fileOps);
|
|
866
|
-
summary += formatFileOperations(readFiles, modifiedFiles);
|
|
867
|
-
if (!firstKeptEntryId) {
|
|
868
|
-
throw new Error("First kept entry has no UUID - session may need migration");
|
|
869
|
-
}
|
|
870
|
-
return {
|
|
871
|
-
summary,
|
|
872
|
-
firstKeptEntryId,
|
|
873
|
-
tokensBefore,
|
|
874
|
-
usage: summaryUsage,
|
|
875
|
-
details: { readFiles, modifiedFiles },
|
|
876
|
-
};
|
|
877
|
-
}
|
|
878
|
-
/**
|
|
879
|
-
* Generate a summary for a turn prefix (when splitting a turn).
|
|
880
|
-
*/
|
|
881
|
-
async function generateTurnPrefixSummary(messages, model, reserveTokens, apiKey, headers, env, signal, extraBody, thinkingLevel, streamFn, transformContext, retry, callbacks, sessionId, cacheFriendly) {
|
|
882
|
-
const maxTokens = Math.min(Math.floor(0.5 * reserveTokens), model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY);
|
|
883
|
-
let sourceContext = cacheFriendly?.sourceContext;
|
|
884
|
-
if (sourceContext &&
|
|
885
|
-
!cacheFriendlyContextFits(model, buildSummarizationContext(SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT, sourceContext), maxTokens)) {
|
|
886
|
-
sourceContext = undefined;
|
|
887
|
-
}
|
|
888
|
-
let promptText;
|
|
889
|
-
if (sourceContext) {
|
|
890
|
-
promptText = SOURCE_CONTEXT_TURN_PREFIX_SUMMARIZATION_PROMPT;
|
|
891
|
-
}
|
|
892
|
-
else {
|
|
893
|
-
const providerMessages = transformContext ? await transformContext(messages, signal) : messages;
|
|
894
|
-
const llmMessages = convertToLlm(providerMessages);
|
|
895
|
-
const conversationText = serializeConversation(llmMessages);
|
|
896
|
-
promptText = `<conversation>\n${conversationText}\n</conversation>\n\n${TURN_PREFIX_SUMMARIZATION_PROMPT}`;
|
|
897
|
-
}
|
|
898
|
-
const response = await completeSummarization(model, buildSummarizationContext(promptText, sourceContext), createSummarizationOptions(model, maxTokens, apiKey, headers, env, signal, thinkingLevel, extraBody, sessionId, sourceContext ? cacheFriendly?.requestOptions : undefined, sourceContext ? "short" : undefined), streamFn, retry, callbacks);
|
|
899
|
-
const failure = getSummarizationFailure(response, "Turn prefix summarization");
|
|
900
|
-
if (failure)
|
|
901
|
-
throw new Error(failure);
|
|
902
|
-
if (response.content.some((block) => block.type === "toolCall")) {
|
|
903
|
-
throw new Error("Turn prefix summarization attempted to call a tool");
|
|
904
|
-
}
|
|
905
|
-
return {
|
|
906
|
-
text: contentTextForSummary(response.content),
|
|
907
|
-
usage: response.usage,
|
|
908
|
-
};
|
|
909
|
-
}
|
|
780
|
+
export { compact } from "./compaction-execution.js";
|
|
910
781
|
//# sourceMappingURL=compaction.js.map
|