@code-yeongyu/senpi 2026.9.15 → 2026.9.16-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 +89 -0
- package/README.md +1 -1
- package/dist/cli/help-extension-flags.d.ts +22 -0
- package/dist/cli/help-extension-flags.d.ts.map +1 -0
- package/dist/cli/help-extension-flags.js +30 -0
- package/dist/cli/help-extension-flags.js.map +1 -0
- package/dist/cli/help-fast-path.d.ts +19 -0
- package/dist/cli/help-fast-path.d.ts.map +1 -0
- package/dist/cli/help-fast-path.js +64 -0
- package/dist/cli/help-fast-path.js.map +1 -0
- package/dist/cli/help-flags-cache.d.ts +23 -0
- package/dist/cli/help-flags-cache.d.ts.map +1 -0
- package/dist/cli/help-flags-cache.js +118 -0
- package/dist/cli/help-flags-cache.js.map +1 -0
- package/dist/cli/startup-loading-indicator.d.ts.map +1 -1
- package/dist/cli/startup-loading-indicator.js +10 -4
- package/dist/cli/startup-loading-indicator.js.map +1 -1
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +17 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +62 -8
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +4 -2
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/stream-watchdog.d.ts +56 -2
- package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
- package/dist/core/compaction/stream-watchdog.js +93 -15
- package/dist/core/compaction/stream-watchdog.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts +6 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js +17 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +4 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +31 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +2 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +16 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +19 -8
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +2 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +13 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +66 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +16 -10
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +4 -2
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +31 -7
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/transient-failure.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/transient-failure.js +6 -3
- package/dist/core/extensions/builtin/compaction/transient-failure.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js +25 -8
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts +4 -5
- package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-engine.js +14 -18
- package/dist/core/extensions/builtin/config-reload/watch-engine.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/watch-event-source.js +32 -9
- package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.d.ts +23 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.d.ts.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.js +48 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.js.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/environment.d.ts +13 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/environment.d.ts.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/environment.js +24 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/environment.js.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js +7 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts +2 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/index.js +11 -9
- package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.d.ts +18 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.d.ts.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.js +61 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.js.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts +4 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +1 -44
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts +22 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js +2 -13
- package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-file-digest.d.ts +3 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-digest.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-digest.js +25 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-digest.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-watch.d.ts +9 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-watch.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-watch.js +33 -0
- package/dist/core/extensions/builtin/terminal/monitor-file-watch.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-line-buffer.d.ts +6 -0
- package/dist/core/extensions/builtin/terminal/monitor-line-buffer.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-line-buffer.js +22 -0
- package/dist/core/extensions/builtin/terminal/monitor-line-buffer.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +14 -35
- package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.d.ts +38 -0
- package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.js +155 -0
- package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.js.map +1 -0
- package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts +2 -0
- package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/detectors/collapse.js +4 -1
- package/dist/core/extensions/builtin/ttsr/detectors/collapse.js.map +1 -1
- package/dist/core/extensions/kernel-tools-context.d.ts +13 -0
- package/dist/core/extensions/kernel-tools-context.d.ts.map +1 -0
- package/dist/core/extensions/kernel-tools-context.js +3 -0
- package/dist/core/extensions/kernel-tools-context.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +19 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +103 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +21 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +5 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +9 -17
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/session-manager.d.ts +30 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +92 -5
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +33 -7
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-resident-store.js +163 -14
- package/dist/core/session-resident-store.js.map +1 -1
- package/dist/core/session-write-reservation.d.ts +6 -0
- package/dist/core/session-write-reservation.d.ts.map +1 -1
- package/dist/core/session-write-reservation.js +19 -0
- package/dist/core/session-write-reservation.js.map +1 -1
- package/dist/core/settings-manager.d.ts +23 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +41 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +4 -3
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/read.d.ts +3 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +16 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +1 -0
- 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.map +1 -1
- package/dist/main.js +31 -3
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.js +12 -5
- package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +2 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +5 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +7 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +35 -16
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/session-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/session-tips.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 +5 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +5 -24
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +3 -8
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +3 -0
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-worker-client.d.ts +3 -0
- package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
- package/dist/modes/rpc/session-worker-client.js +17 -6
- package/dist/modes/rpc/session-worker-client.js.map +1 -1
- package/dist/modes/rpc/shutdown.d.ts +3 -0
- package/dist/modes/rpc/shutdown.d.ts.map +1 -0
- package/dist/modes/rpc/shutdown.js +17 -0
- package/dist/modes/rpc/shutdown.js.map +1 -0
- package/dist/senpi +9 -0
- package/docs/extensions.md +5 -2
- package/docs/keybindings.md +1 -0
- package/docs/session-format.md +1 -1
- package/docs/sessions.md +3 -3
- package/docs/settings.md +12 -0
- package/docs/usage.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +62 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/http-server.ts +7 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/kernel-tools-protocol.ts +85 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +6 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/agent-bridge.ts +30 -11
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +11 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +10 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/prelude.jl +46 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/runner.jl +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +58 -10
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.d.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.js +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.d.ts +10 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.js +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.js +22 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.ts +26 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-host.ts +134 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-naming.js +28 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.d.ts +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.js +255 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-pump.js +105 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.d.ts +27 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.js +127 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-schema.js +69 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-types.ts +42 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/prelude.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +26 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +20 -8
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-slot.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +9 -7
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/workpool.js +37 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/kernel-tools-unavailable.ts +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +57 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/prelude.rb +13 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/workpool.rb +38 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-queue.ts +9 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +4 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +31 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +36 -71
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image-resize.ts +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image.ts +37 -72
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/managed-cell.ts +78 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +30 -5
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +52 -30
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/terminal-snapshot-store.ts +35 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/tool-result-marshal.ts +23 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +51 -12
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +18 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js +268 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts +18 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js +69 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js +118 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts +21 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js +24 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts +12 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js +92 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts +47 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js +8 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts +52 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js +155 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.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/alibaba-token-plan.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/fireworks.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/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.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/dist/utils/empty-response-errors.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +23 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +74 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { CharCode, FixedRing, isAsciiWhitespace } from "../stream-utils.js";
|
|
2
|
+
import { isAsciiAlphanumeric, isBoxDrawing } from "./collapse-scalars.js";
|
|
3
|
+
import { normalizeTurnText } from "./repetitive-turns.js";
|
|
4
|
+
export const NEAR_DUPLICATE_MIN_CHARS = 64;
|
|
5
|
+
export const NEAR_DUPLICATE_MIN_WORD_CHARS = 24;
|
|
6
|
+
export const NEAR_DUPLICATE_SIMILARITY = 0.5;
|
|
7
|
+
export const NEAR_DUPLICATE_LOOKBACK = 32;
|
|
8
|
+
export const NEAR_DUPLICATE_WINDOW = 12;
|
|
9
|
+
export const NEAR_DUPLICATE_ECHO_THRESHOLD = 8;
|
|
10
|
+
export const NEAR_DUPLICATE_TEXT_RETENTION_MAX = 512;
|
|
11
|
+
const SAMPLE_LENGTH = 80;
|
|
12
|
+
const WORD_PATTERN = /[\p{L}\p{N}#]+/gu;
|
|
13
|
+
const FENCE_PATTERN = /^(?:```|~~~)/;
|
|
14
|
+
export function createNearDuplicateState() {
|
|
15
|
+
return {
|
|
16
|
+
history: new FixedRing(NEAR_DUPLICATE_LOOKBACK),
|
|
17
|
+
window: new FixedRing(NEAR_DUPLICATE_WINDOW),
|
|
18
|
+
lineLength: 0,
|
|
19
|
+
lineWordChars: 0,
|
|
20
|
+
lineHasContent: false,
|
|
21
|
+
lineStartOffset: 0,
|
|
22
|
+
lineText: "",
|
|
23
|
+
length: 0,
|
|
24
|
+
wordChars: 0,
|
|
25
|
+
startOffset: 0,
|
|
26
|
+
retained: "",
|
|
27
|
+
fenced: false,
|
|
28
|
+
insideFence: false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function tokenize(text) {
|
|
32
|
+
return new Set(normalizeTurnText(text).match(WORD_PATTERN) ?? []);
|
|
33
|
+
}
|
|
34
|
+
function jaccard(a, b) {
|
|
35
|
+
if (a.size === 0 || b.size === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
let intersection = 0;
|
|
38
|
+
for (const token of a) {
|
|
39
|
+
if (b.has(token))
|
|
40
|
+
intersection += 1;
|
|
41
|
+
}
|
|
42
|
+
return intersection / (a.size + b.size - intersection);
|
|
43
|
+
}
|
|
44
|
+
function resetParagraph(state) {
|
|
45
|
+
state.length = 0;
|
|
46
|
+
state.wordChars = 0;
|
|
47
|
+
state.startOffset = 0;
|
|
48
|
+
state.retained = "";
|
|
49
|
+
state.fenced = false;
|
|
50
|
+
}
|
|
51
|
+
function countEchoes(state) {
|
|
52
|
+
let echoes = 0;
|
|
53
|
+
for (let back = state.window.size - 1; back >= 0; back--) {
|
|
54
|
+
if (state.window.getBack(back)?.echoed === true)
|
|
55
|
+
echoes += 1;
|
|
56
|
+
}
|
|
57
|
+
return echoes;
|
|
58
|
+
}
|
|
59
|
+
function oldestEcho(state) {
|
|
60
|
+
for (let back = state.window.size - 1; back >= 0; back--) {
|
|
61
|
+
const entry = state.window.getBack(back);
|
|
62
|
+
if (entry?.echoed === true)
|
|
63
|
+
return entry;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
function completeParagraph(state) {
|
|
68
|
+
const eligible = !state.fenced && state.length >= NEAR_DUPLICATE_MIN_CHARS && state.wordChars >= NEAR_DUPLICATE_MIN_WORD_CHARS;
|
|
69
|
+
const text = state.retained;
|
|
70
|
+
const startOffset = state.startOffset;
|
|
71
|
+
resetParagraph(state);
|
|
72
|
+
if (!eligible)
|
|
73
|
+
return null;
|
|
74
|
+
const tokens = tokenize(text);
|
|
75
|
+
if (tokens.size === 0)
|
|
76
|
+
return null;
|
|
77
|
+
let best = 0;
|
|
78
|
+
let anchor;
|
|
79
|
+
for (let back = 0; back < state.history.size; back++) {
|
|
80
|
+
const previous = state.history.getBack(back);
|
|
81
|
+
if (previous === undefined)
|
|
82
|
+
continue;
|
|
83
|
+
const similarity = jaccard(tokens, previous.tokens);
|
|
84
|
+
if (similarity > best) {
|
|
85
|
+
best = similarity;
|
|
86
|
+
anchor = previous;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const echoed = best >= NEAR_DUPLICATE_SIMILARITY && anchor !== undefined;
|
|
90
|
+
state.history.push({ tokens, startOffset, sample: text.slice(0, SAMPLE_LENGTH) });
|
|
91
|
+
state.window.push({
|
|
92
|
+
echoed,
|
|
93
|
+
startOffset,
|
|
94
|
+
anchorStartOffset: echoed && anchor !== undefined ? anchor.startOffset : startOffset,
|
|
95
|
+
});
|
|
96
|
+
const echoes = countEchoes(state);
|
|
97
|
+
if (echoes < NEAR_DUPLICATE_ECHO_THRESHOLD)
|
|
98
|
+
return null;
|
|
99
|
+
const first = oldestEcho(state);
|
|
100
|
+
if (first === undefined)
|
|
101
|
+
return null;
|
|
102
|
+
return {
|
|
103
|
+
rule: "collapse-repetition",
|
|
104
|
+
reason: `${echoes} of the last ${state.window.size} paragraphs restate an earlier paragraph of the same message`,
|
|
105
|
+
anomalyStartOffset: first.anchorStartOffset,
|
|
106
|
+
garbageStartOffset: first.startOffset,
|
|
107
|
+
detail: {
|
|
108
|
+
mechanism: "near-duplicate-paragraphs",
|
|
109
|
+
echoes,
|
|
110
|
+
window: state.window.size,
|
|
111
|
+
similarity: Number(best.toFixed(3)),
|
|
112
|
+
sample: anchor?.sample ?? "",
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function foldLine(state) {
|
|
117
|
+
if (state.length === 0)
|
|
118
|
+
state.startOffset = state.lineStartOffset;
|
|
119
|
+
state.length += state.lineLength + 1;
|
|
120
|
+
state.wordChars += state.lineWordChars;
|
|
121
|
+
if (state.insideFence || FENCE_PATTERN.test(state.lineText.trimStart()))
|
|
122
|
+
state.fenced = true;
|
|
123
|
+
if (state.retained.length < NEAR_DUPLICATE_TEXT_RETENTION_MAX)
|
|
124
|
+
state.retained += `${state.lineText}\n`;
|
|
125
|
+
if (FENCE_PATTERN.test(state.lineText.trimStart()))
|
|
126
|
+
state.insideFence = !state.insideFence;
|
|
127
|
+
}
|
|
128
|
+
function resetLine(state, startOffset) {
|
|
129
|
+
state.lineLength = 0;
|
|
130
|
+
state.lineWordChars = 0;
|
|
131
|
+
state.lineHasContent = false;
|
|
132
|
+
state.lineStartOffset = startOffset;
|
|
133
|
+
state.lineText = "";
|
|
134
|
+
}
|
|
135
|
+
export function updateNearDuplicates(state, entry) {
|
|
136
|
+
if (entry.value.charCodeAt(0) === CharCode.LineFeed) {
|
|
137
|
+
let result = null;
|
|
138
|
+
if (state.lineHasContent)
|
|
139
|
+
foldLine(state);
|
|
140
|
+
else if (state.length > 0)
|
|
141
|
+
result = completeParagraph(state);
|
|
142
|
+
resetLine(state, entry.startOffset + 1);
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
const codePoint = entry.value.codePointAt(0) ?? 0;
|
|
146
|
+
if (!isAsciiWhitespace(codePoint))
|
|
147
|
+
state.lineHasContent = true;
|
|
148
|
+
if (isAsciiAlphanumeric(codePoint) || (codePoint > 0x7f && !isBoxDrawing(codePoint)))
|
|
149
|
+
state.lineWordChars += 1;
|
|
150
|
+
state.lineLength += entry.width;
|
|
151
|
+
if (state.lineText.length < NEAR_DUPLICATE_TEXT_RETENTION_MAX)
|
|
152
|
+
state.lineText += entry.value;
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=collapse-near-duplicates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapse-near-duplicates.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAErD,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,aAAa,GAAG,cAAc,CAAC;AA8BrC,MAAM,UAAU,wBAAwB;IACvC,OAAO;QACN,OAAO,EAAE,IAAI,SAAS,CAAqB,uBAAuB,CAAC;QACnE,MAAM,EAAE,IAAI,SAAS,CAAc,qBAAqB,CAAC;QACzD,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,KAAK;KAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,CAAsB,EAAE,CAAsB;IAC9D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,YAAY,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAChD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IACpB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;IACtB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1D,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC5C,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IACnD,MAAM,QAAQ,GACb,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,wBAAwB,IAAI,KAAK,CAAC,SAAS,IAAI,6BAA6B,CAAC;IAC/G,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAsC,CAAC;IAC3C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,UAAU,GAAG,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,UAAU,CAAC;YAClB,MAAM,GAAG,QAAQ,CAAC;QACnB,CAAC;IACF,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,IAAI,yBAAyB,IAAI,MAAM,KAAK,SAAS,CAAC;IACzE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAClF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACjB,MAAM;QACN,WAAW;QACX,iBAAiB,EAAE,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;KACpF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,6BAA6B;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO;QACN,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,GAAG,MAAM,gBAAgB,KAAK,CAAC,MAAM,CAAC,IAAI,8DAA8D;QAChH,kBAAkB,EAAE,KAAK,CAAC,iBAAiB;QAC3C,kBAAkB,EAAE,KAAK,CAAC,WAAW;QACrC,MAAM,EAAE;YACP,SAAS,EAAE,2BAA2B;YACtC,MAAM;YACN,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE;SAC5B;KACD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC;IAClE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IACrC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC;IACvC,IAAI,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IAC7F,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,iCAAiC;QAAE,KAAK,CAAC,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC;IACvG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAAE,KAAK,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AAC5F,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB,EAAE,WAAmB;IAChE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IACrB,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;IACxB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC;IACpC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAyB,EAAE,KAAkB;IACjF,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACrD,IAAI,MAAM,GAAyB,IAAI,CAAC;QACxC,IAAI,KAAK,CAAC,cAAc;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;aACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7D,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/D,IAAI,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAAE,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IAC/G,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,iCAAiC;QAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;IAC7F,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["import { CharCode, FixedRing, isAsciiWhitespace, type ScalarEntry } from \"../stream-utils.ts\";\nimport type { DetectorMatch } from \"../types.ts\";\nimport { isAsciiAlphanumeric, isBoxDrawing } from \"./collapse-scalars.ts\";\nimport { normalizeTurnText } from \"./repetitive-turns.ts\";\n\nexport const NEAR_DUPLICATE_MIN_CHARS = 64;\nexport const NEAR_DUPLICATE_MIN_WORD_CHARS = 24;\nexport const NEAR_DUPLICATE_SIMILARITY = 0.5;\nexport const NEAR_DUPLICATE_LOOKBACK = 32;\nexport const NEAR_DUPLICATE_WINDOW = 12;\nexport const NEAR_DUPLICATE_ECHO_THRESHOLD = 8;\nexport const NEAR_DUPLICATE_TEXT_RETENTION_MAX = 512;\n\nconst SAMPLE_LENGTH = 80;\nconst WORD_PATTERN = /[\\p{L}\\p{N}#]+/gu;\nconst FENCE_PATTERN = /^(?:```|~~~)/;\n\ninterface ParagraphSignature {\n\treadonly tokens: ReadonlySet<string>;\n\treadonly startOffset: number;\n\treadonly sample: string;\n}\n\ninterface WindowEntry {\n\treadonly echoed: boolean;\n\treadonly startOffset: number;\n\treadonly anchorStartOffset: number;\n}\n\nexport interface NearDuplicateState {\n\treadonly history: FixedRing<ParagraphSignature>;\n\treadonly window: FixedRing<WindowEntry>;\n\tlineLength: number;\n\tlineWordChars: number;\n\tlineHasContent: boolean;\n\tlineStartOffset: number;\n\tlineText: string;\n\tlength: number;\n\twordChars: number;\n\tstartOffset: number;\n\tretained: string;\n\tfenced: boolean;\n\tinsideFence: boolean;\n}\n\nexport function createNearDuplicateState(): NearDuplicateState {\n\treturn {\n\t\thistory: new FixedRing<ParagraphSignature>(NEAR_DUPLICATE_LOOKBACK),\n\t\twindow: new FixedRing<WindowEntry>(NEAR_DUPLICATE_WINDOW),\n\t\tlineLength: 0,\n\t\tlineWordChars: 0,\n\t\tlineHasContent: false,\n\t\tlineStartOffset: 0,\n\t\tlineText: \"\",\n\t\tlength: 0,\n\t\twordChars: 0,\n\t\tstartOffset: 0,\n\t\tretained: \"\",\n\t\tfenced: false,\n\t\tinsideFence: false,\n\t};\n}\n\nfunction tokenize(text: string): ReadonlySet<string> {\n\treturn new Set(normalizeTurnText(text).match(WORD_PATTERN) ?? []);\n}\n\nfunction jaccard(a: ReadonlySet<string>, b: ReadonlySet<string>): number {\n\tif (a.size === 0 || b.size === 0) return 0;\n\tlet intersection = 0;\n\tfor (const token of a) {\n\t\tif (b.has(token)) intersection += 1;\n\t}\n\treturn intersection / (a.size + b.size - intersection);\n}\n\nfunction resetParagraph(state: NearDuplicateState): void {\n\tstate.length = 0;\n\tstate.wordChars = 0;\n\tstate.startOffset = 0;\n\tstate.retained = \"\";\n\tstate.fenced = false;\n}\n\nfunction countEchoes(state: NearDuplicateState): number {\n\tlet echoes = 0;\n\tfor (let back = state.window.size - 1; back >= 0; back--) {\n\t\tif (state.window.getBack(back)?.echoed === true) echoes += 1;\n\t}\n\treturn echoes;\n}\n\nfunction oldestEcho(state: NearDuplicateState): WindowEntry | undefined {\n\tfor (let back = state.window.size - 1; back >= 0; back--) {\n\t\tconst entry = state.window.getBack(back);\n\t\tif (entry?.echoed === true) return entry;\n\t}\n\treturn undefined;\n}\n\nfunction completeParagraph(state: NearDuplicateState): DetectorMatch | null {\n\tconst eligible =\n\t\t!state.fenced && state.length >= NEAR_DUPLICATE_MIN_CHARS && state.wordChars >= NEAR_DUPLICATE_MIN_WORD_CHARS;\n\tconst text = state.retained;\n\tconst startOffset = state.startOffset;\n\tresetParagraph(state);\n\tif (!eligible) return null;\n\tconst tokens = tokenize(text);\n\tif (tokens.size === 0) return null;\n\tlet best = 0;\n\tlet anchor: ParagraphSignature | undefined;\n\tfor (let back = 0; back < state.history.size; back++) {\n\t\tconst previous = state.history.getBack(back);\n\t\tif (previous === undefined) continue;\n\t\tconst similarity = jaccard(tokens, previous.tokens);\n\t\tif (similarity > best) {\n\t\t\tbest = similarity;\n\t\t\tanchor = previous;\n\t\t}\n\t}\n\tconst echoed = best >= NEAR_DUPLICATE_SIMILARITY && anchor !== undefined;\n\tstate.history.push({ tokens, startOffset, sample: text.slice(0, SAMPLE_LENGTH) });\n\tstate.window.push({\n\t\techoed,\n\t\tstartOffset,\n\t\tanchorStartOffset: echoed && anchor !== undefined ? anchor.startOffset : startOffset,\n\t});\n\tconst echoes = countEchoes(state);\n\tif (echoes < NEAR_DUPLICATE_ECHO_THRESHOLD) return null;\n\tconst first = oldestEcho(state);\n\tif (first === undefined) return null;\n\treturn {\n\t\trule: \"collapse-repetition\",\n\t\treason: `${echoes} of the last ${state.window.size} paragraphs restate an earlier paragraph of the same message`,\n\t\tanomalyStartOffset: first.anchorStartOffset,\n\t\tgarbageStartOffset: first.startOffset,\n\t\tdetail: {\n\t\t\tmechanism: \"near-duplicate-paragraphs\",\n\t\t\techoes,\n\t\t\twindow: state.window.size,\n\t\t\tsimilarity: Number(best.toFixed(3)),\n\t\t\tsample: anchor?.sample ?? \"\",\n\t\t},\n\t};\n}\n\nfunction foldLine(state: NearDuplicateState): void {\n\tif (state.length === 0) state.startOffset = state.lineStartOffset;\n\tstate.length += state.lineLength + 1;\n\tstate.wordChars += state.lineWordChars;\n\tif (state.insideFence || FENCE_PATTERN.test(state.lineText.trimStart())) state.fenced = true;\n\tif (state.retained.length < NEAR_DUPLICATE_TEXT_RETENTION_MAX) state.retained += `${state.lineText}\\n`;\n\tif (FENCE_PATTERN.test(state.lineText.trimStart())) state.insideFence = !state.insideFence;\n}\n\nfunction resetLine(state: NearDuplicateState, startOffset: number): void {\n\tstate.lineLength = 0;\n\tstate.lineWordChars = 0;\n\tstate.lineHasContent = false;\n\tstate.lineStartOffset = startOffset;\n\tstate.lineText = \"\";\n}\n\nexport function updateNearDuplicates(state: NearDuplicateState, entry: ScalarEntry): DetectorMatch | null {\n\tif (entry.value.charCodeAt(0) === CharCode.LineFeed) {\n\t\tlet result: DetectorMatch | null = null;\n\t\tif (state.lineHasContent) foldLine(state);\n\t\telse if (state.length > 0) result = completeParagraph(state);\n\t\tresetLine(state, entry.startOffset + 1);\n\t\treturn result;\n\t}\n\tconst codePoint = entry.value.codePointAt(0) ?? 0;\n\tif (!isAsciiWhitespace(codePoint)) state.lineHasContent = true;\n\tif (isAsciiAlphanumeric(codePoint) || (codePoint > 0x7f && !isBoxDrawing(codePoint))) state.lineWordChars += 1;\n\tstate.lineLength += entry.width;\n\tif (state.lineText.length < NEAR_DUPLICATE_TEXT_RETENTION_MAX) state.lineText += entry.value;\n\treturn null;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FixedRing, type ScalarEntry, ScalarScanner } from "../stream-utils.ts";
|
|
2
2
|
import type { DetectorMatch, StreamDetector } from "../types.ts";
|
|
3
3
|
import { type LineCycleState } from "./collapse-lines.ts";
|
|
4
|
+
import { type NearDuplicateState } from "./collapse-near-duplicates.ts";
|
|
4
5
|
import { type ParagraphRepeatState } from "./collapse-paragraphs.ts";
|
|
5
6
|
import { type ShortPeriodState } from "./collapse-periods.ts";
|
|
6
7
|
import { type DominantRunState, type WhitespaceFloodState } from "./collapse-scalars.ts";
|
|
@@ -13,6 +14,7 @@ export interface CollapseState {
|
|
|
13
14
|
readonly periods: ShortPeriodState;
|
|
14
15
|
readonly lines: LineCycleState;
|
|
15
16
|
readonly paragraphs: ParagraphRepeatState;
|
|
17
|
+
readonly nearDuplicates: NearDuplicateState;
|
|
16
18
|
latched: DetectorMatch | null;
|
|
17
19
|
}
|
|
18
20
|
export declare function createCollapseState(): CollapseState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapse.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/ttsr/detectors/collapse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAmB,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAwB,KAAK,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAEN,KAAK,oBAAoB,EAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAA0B,KAAK,gBAAgB,EAAsB,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EAGN,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,mBAAmB,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"collapse.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/ttsr/detectors/collapse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAmB,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAwB,KAAK,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAA4B,KAAK,kBAAkB,EAAwB,MAAM,+BAA+B,CAAC;AACxH,OAAO,EAEN,KAAK,oBAAoB,EAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAA0B,KAAK,gBAAgB,EAAsB,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EAGN,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAYnD;AAsBD,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,aAAa,CAG1D,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FixedRing, ScalarScanner } from "../stream-utils.js";
|
|
2
2
|
import { createLineCycleState, updateLineCycles } from "./collapse-lines.js";
|
|
3
|
+
import { createNearDuplicateState, updateNearDuplicates } from "./collapse-near-duplicates.js";
|
|
3
4
|
import { createParagraphRepeatState, updateParagraphRepeats, } from "./collapse-paragraphs.js";
|
|
4
5
|
import { createShortPeriodState, updateShortPeriods } from "./collapse-periods.js";
|
|
5
6
|
import { createDominantRunState, createWhitespaceFloodState, updateDominantRun, updateWhitespaceFlood, } from "./collapse-scalars.js";
|
|
@@ -13,6 +14,7 @@ export function createCollapseState() {
|
|
|
13
14
|
periods: createShortPeriodState(),
|
|
14
15
|
lines: createLineCycleState(),
|
|
15
16
|
paragraphs: createParagraphRepeatState(),
|
|
17
|
+
nearDuplicates: createNearDuplicateState(),
|
|
16
18
|
latched: null,
|
|
17
19
|
};
|
|
18
20
|
}
|
|
@@ -26,7 +28,8 @@ function checkDelta(state, delta, context) {
|
|
|
26
28
|
updateWhitespaceFlood(state.whitespace, entry) ??
|
|
27
29
|
updateShortPeriods(state.periods, entry, state.tailRing) ??
|
|
28
30
|
updateLineCycles(state.lines, entry) ??
|
|
29
|
-
(watchParagraphs ? updateParagraphRepeats(state.paragraphs, entry) : null)
|
|
31
|
+
(watchParagraphs ? updateParagraphRepeats(state.paragraphs, entry) : null) ??
|
|
32
|
+
(watchParagraphs ? updateNearDuplicates(state.nearDuplicates, entry) : null);
|
|
30
33
|
if (match !== null) {
|
|
31
34
|
state.latched = match;
|
|
32
35
|
return match;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapse.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/ttsr/detectors/collapse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAuB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACN,0BAA0B,EAE1B,sBAAsB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAyB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EACN,sBAAsB,EACtB,0BAA0B,EAE1B,iBAAiB,EACjB,qBAAqB,GAErB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"collapse.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/ttsr/detectors/collapse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAuB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAA2B,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,EACN,0BAA0B,EAE1B,sBAAsB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAyB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EACN,sBAAsB,EACtB,0BAA0B,EAE1B,iBAAiB,EACjB,qBAAqB,GAErB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AActC,MAAM,UAAU,mBAAmB;IAClC,OAAO;QACN,OAAO,EAAE,IAAI,aAAa,EAAE;QAC5B,QAAQ,EAAE,IAAI,SAAS,CAAc,kBAAkB,CAAC;QACxD,GAAG,EAAE,sBAAsB,EAAE;QAC7B,UAAU,EAAE,0BAA0B,EAAE;QACxC,OAAO,EAAE,sBAAsB,EAAE;QACjC,KAAK,EAAE,oBAAoB,EAAE;QAC7B,UAAU,EAAE,0BAA0B,EAAE;QACxC,cAAc,EAAE,wBAAwB,EAAE;QAC1C,OAAO,EAAE,IAAI;KACb,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAoB,EAAE,KAAa,EAAE,OAAwB;IAChF,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,KAAK,GACV,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;YACnC,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;YAC9C,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACxD,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YACpC,CAAC,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC9D,WAAW,EAAE,mBAAmB;IAChC,UAAU;CACV,CAAC","sourcesContent":["import { FixedRing, type ScalarEntry, ScalarScanner } from \"../stream-utils.ts\";\nimport type { DetectorContext, DetectorMatch, StreamDetector } from \"../types.ts\";\nimport { createLineCycleState, type LineCycleState, updateLineCycles } from \"./collapse-lines.ts\";\nimport { createNearDuplicateState, type NearDuplicateState, updateNearDuplicates } from \"./collapse-near-duplicates.ts\";\nimport {\n\tcreateParagraphRepeatState,\n\ttype ParagraphRepeatState,\n\tupdateParagraphRepeats,\n} from \"./collapse-paragraphs.ts\";\nimport { createShortPeriodState, type ShortPeriodState, updateShortPeriods } from \"./collapse-periods.ts\";\nimport {\n\tcreateDominantRunState,\n\tcreateWhitespaceFloodState,\n\ttype DominantRunState,\n\tupdateDominantRun,\n\tupdateWhitespaceFlood,\n\ttype WhitespaceFloodState,\n} from \"./collapse-scalars.ts\";\n\nexport const TAIL_RING_CAPACITY = 512;\n\nexport interface CollapseState {\n\treadonly scanner: ScalarScanner;\n\treadonly tailRing: FixedRing<ScalarEntry>;\n\treadonly run: DominantRunState;\n\treadonly whitespace: WhitespaceFloodState;\n\treadonly periods: ShortPeriodState;\n\treadonly lines: LineCycleState;\n\treadonly paragraphs: ParagraphRepeatState;\n\treadonly nearDuplicates: NearDuplicateState;\n\tlatched: DetectorMatch | null;\n}\n\nexport function createCollapseState(): CollapseState {\n\treturn {\n\t\tscanner: new ScalarScanner(),\n\t\ttailRing: new FixedRing<ScalarEntry>(TAIL_RING_CAPACITY),\n\t\trun: createDominantRunState(),\n\t\twhitespace: createWhitespaceFloodState(),\n\t\tperiods: createShortPeriodState(),\n\t\tlines: createLineCycleState(),\n\t\tparagraphs: createParagraphRepeatState(),\n\t\tnearDuplicates: createNearDuplicateState(),\n\t\tlatched: null,\n\t};\n}\n\nfunction checkDelta(state: CollapseState, delta: string, context: DetectorContext): DetectorMatch | null {\n\tif (state.latched !== null) return state.latched;\n\tconst watchParagraphs = context.source !== \"tool\";\n\tfor (const entry of state.scanner.push(delta)) {\n\t\tstate.tailRing.push(entry);\n\t\tconst match =\n\t\t\tupdateDominantRun(state.run, entry) ??\n\t\t\tupdateWhitespaceFlood(state.whitespace, entry) ??\n\t\t\tupdateShortPeriods(state.periods, entry, state.tailRing) ??\n\t\t\tupdateLineCycles(state.lines, entry) ??\n\t\t\t(watchParagraphs ? updateParagraphRepeats(state.paragraphs, entry) : null) ??\n\t\t\t(watchParagraphs ? updateNearDuplicates(state.nearDuplicates, entry) : null);\n\t\tif (match !== null) {\n\t\t\tstate.latched = match;\n\t\t\treturn match;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport const collapseDetector: StreamDetector<CollapseState> = {\n\tcreateState: createCollapseState,\n\tcheckDelta,\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
export type ExtensionKernelTools = {
|
|
3
|
+
describe(names: readonly string[]): Promise<unknown>;
|
|
4
|
+
invoke(request: {
|
|
5
|
+
name: string;
|
|
6
|
+
kernel_generation: number;
|
|
7
|
+
definition_revision: number;
|
|
8
|
+
args: unknown;
|
|
9
|
+
call_id: string;
|
|
10
|
+
}, signal?: AbortSignal): Promise<unknown>;
|
|
11
|
+
};
|
|
12
|
+
export declare const kernelToolsStorage: AsyncLocalStorage<ExtensionKernelTools>;
|
|
13
|
+
//# sourceMappingURL=kernel-tools-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-tools-context.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/kernel-tools-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CACL,OAAO,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KAChB,EACD,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,kBAAkB,yCAAgD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-tools-context.js","sourceRoot":"","sources":["../../../src/core/extensions/kernel-tools-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAwB,CAAC","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type ExtensionKernelTools = {\n\tdescribe(names: readonly string[]): Promise<unknown>;\n\tinvoke(\n\t\trequest: {\n\t\t\tname: string;\n\t\t\tkernel_generation: number;\n\t\t\tdefinition_revision: number;\n\t\t\targs: unknown;\n\t\t\tcall_id: string;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t): Promise<unknown>;\n};\n\nexport const kernelToolsStorage = new AsyncLocalStorage<ExtensionKernelTools>();\n"]}
|
|
@@ -97,6 +97,9 @@ export type ShutdownHandler = () => void;
|
|
|
97
97
|
/**
|
|
98
98
|
* Helper function to emit session_shutdown event to extensions.
|
|
99
99
|
* Returns true if the event was emitted, false if there were no handlers.
|
|
100
|
+
*
|
|
101
|
+
* Each handler runs under the host's shutdown budget (see
|
|
102
|
+
* `ExtensionRunner.emit`), so a hung extension cannot hold teardown hostage.
|
|
100
103
|
*/
|
|
101
104
|
export declare function emitSessionShutdownEvent(extensionRunner: ExtensionRunner, event: SessionShutdownEvent): Promise<boolean>;
|
|
102
105
|
export declare function emitProjectTrustEvent(extensionsResult: LoadExtensionsResult, event: ProjectTrustEvent, ctx: ProjectTrustContext): Promise<{
|
|
@@ -232,6 +235,22 @@ export declare class ExtensionRunner {
|
|
|
232
235
|
createContext(excludeBeforeProviderRequestExtensionPath?: string): ExtensionContext;
|
|
233
236
|
createCommandContext(): ExtensionCommandContext;
|
|
234
237
|
private isSessionBeforeEvent;
|
|
238
|
+
/**
|
|
239
|
+
* Host budget for `session_shutdown` handlers, read from settings once per
|
|
240
|
+
* shutdown emission (teardown runs once per runner, so a settings edit takes
|
|
241
|
+
* effect without a reload). A malformed value must never break teardown, so
|
|
242
|
+
* an invalid setting is reported and the shipped defaults are used.
|
|
243
|
+
*/
|
|
244
|
+
private resolveSessionShutdownBudget;
|
|
245
|
+
/**
|
|
246
|
+
* Runs one `session_shutdown` handler under the host budget. The handler sees
|
|
247
|
+
* the budget through `event.signal`, which this runner aborts at the hard cap;
|
|
248
|
+
* the host then stops waiting (the handler itself keeps running detached),
|
|
249
|
+
* reports an extension error and lets teardown continue with the next handler.
|
|
250
|
+
* Handler rejections are rethrown so emit()'s existing error path reports them
|
|
251
|
+
* exactly as before.
|
|
252
|
+
*/
|
|
253
|
+
private runSessionShutdownHandler;
|
|
235
254
|
emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>>;
|
|
236
255
|
emitModelSelect(event: ModelSelectEvent): Promise<ModelSelectEventResult | undefined>;
|
|
237
256
|
emitMessageEnd(event: MessageEndEvent): Promise<AgentMessage | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,10 @@ import { theme } from "../../modes/interactive/theme/theme.js";
|
|
|
7
7
|
import { stripAnsi } from "../../utils/ansi.js";
|
|
8
8
|
import { createEventBus, EXTENSION_RPC_EVENT_CHANNEL } from "../event-bus.js";
|
|
9
9
|
import { getSessionContextEntryId, SESSION_CONTEXT_ENTRY_ID } from "../session-manager.js";
|
|
10
|
-
import { SettingsManager } from "../settings-manager.js";
|
|
10
|
+
import { DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS, DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS, SettingsManager, } from "../settings-manager.js";
|
|
11
11
|
import { goalFilePath } from "./builtin/goal/persistence.js";
|
|
12
12
|
import { goalStoreRef } from "./builtin/goal/store-ref.js";
|
|
13
|
+
import { kernelToolsStorage } from "./kernel-tools-context.js";
|
|
13
14
|
import { drainPendingProviderRegistrations } from "./loader.js";
|
|
14
15
|
// Extension shortcuts compete with canonical keybinding ids from keybindings.json.
|
|
15
16
|
// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.
|
|
@@ -75,6 +76,9 @@ function sanitizedToolHookStatusMessage(message) {
|
|
|
75
76
|
/**
|
|
76
77
|
* Helper function to emit session_shutdown event to extensions.
|
|
77
78
|
* Returns true if the event was emitted, false if there were no handlers.
|
|
79
|
+
*
|
|
80
|
+
* Each handler runs under the host's shutdown budget (see
|
|
81
|
+
* `ExtensionRunner.emit`), so a hung extension cannot hold teardown hostage.
|
|
78
82
|
*/
|
|
79
83
|
export async function emitSessionShutdownEvent(extensionRunner, event) {
|
|
80
84
|
if (extensionRunner.hasHandlers("session_shutdown")) {
|
|
@@ -837,6 +841,10 @@ export class ExtensionRunner {
|
|
|
837
841
|
runner.assertActive();
|
|
838
842
|
return runner.getSignalFn();
|
|
839
843
|
},
|
|
844
|
+
get kernelTools() {
|
|
845
|
+
runner.assertActive();
|
|
846
|
+
return kernelToolsStorage.getStore();
|
|
847
|
+
},
|
|
840
848
|
abort: (source) => {
|
|
841
849
|
runner.assertActive();
|
|
842
850
|
runner.abortFn(source);
|
|
@@ -987,14 +995,108 @@ export class ExtensionRunner {
|
|
|
987
995
|
event.type === "session_before_compact" ||
|
|
988
996
|
event.type === "session_before_tree");
|
|
989
997
|
}
|
|
998
|
+
/**
|
|
999
|
+
* Host budget for `session_shutdown` handlers, read from settings once per
|
|
1000
|
+
* shutdown emission (teardown runs once per runner, so a settings edit takes
|
|
1001
|
+
* effect without a reload). A malformed value must never break teardown, so
|
|
1002
|
+
* an invalid setting is reported and the shipped defaults are used.
|
|
1003
|
+
*/
|
|
1004
|
+
resolveSessionShutdownBudget() {
|
|
1005
|
+
try {
|
|
1006
|
+
const settings = SettingsManager.create(this.cwd, this.getAgentDirFn(), {
|
|
1007
|
+
projectTrusted: this.isProjectTrustedFn(),
|
|
1008
|
+
});
|
|
1009
|
+
return {
|
|
1010
|
+
warnMs: settings.getSessionShutdownHandlerWarnMs(),
|
|
1011
|
+
timeoutMs: settings.getSessionShutdownHandlerTimeoutMs(),
|
|
1012
|
+
};
|
|
1013
|
+
}
|
|
1014
|
+
catch (err) {
|
|
1015
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1016
|
+
console.warn(`Using the default session_shutdown handler budget (warn ${DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS}ms, hard cap ${DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS}ms): ${message}`);
|
|
1017
|
+
return {
|
|
1018
|
+
warnMs: DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS,
|
|
1019
|
+
timeoutMs: DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS,
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Runs one `session_shutdown` handler under the host budget. The handler sees
|
|
1025
|
+
* the budget through `event.signal`, which this runner aborts at the hard cap;
|
|
1026
|
+
* the host then stops waiting (the handler itself keeps running detached),
|
|
1027
|
+
* reports an extension error and lets teardown continue with the next handler.
|
|
1028
|
+
* Handler rejections are rethrown so emit()'s existing error path reports them
|
|
1029
|
+
* exactly as before.
|
|
1030
|
+
*/
|
|
1031
|
+
async runSessionShutdownHandler(extensionPath, event, handler, budget) {
|
|
1032
|
+
const controller = new AbortController();
|
|
1033
|
+
const startedAt = Date.now();
|
|
1034
|
+
let outcome;
|
|
1035
|
+
// Settle the handler through a captured outcome so a late rejection after a
|
|
1036
|
+
// timeout is already handled instead of becoming an unhandled rejection.
|
|
1037
|
+
const settled = Promise.resolve(handler({ ...event, signal: controller.signal }, this.createContext(extensionPath))).then(() => {
|
|
1038
|
+
outcome = { ok: true };
|
|
1039
|
+
}, (error) => {
|
|
1040
|
+
outcome = { ok: false, error };
|
|
1041
|
+
});
|
|
1042
|
+
if (budget.warnMs > 0 || budget.timeoutMs > 0) {
|
|
1043
|
+
let warnTimer;
|
|
1044
|
+
let capTimer;
|
|
1045
|
+
let timedOut = false;
|
|
1046
|
+
try {
|
|
1047
|
+
timedOut = await new Promise((resolve) => {
|
|
1048
|
+
if (budget.warnMs > 0) {
|
|
1049
|
+
warnTimer = setTimeout(() => {
|
|
1050
|
+
const capNote = budget.timeoutMs > 0 ? ` (hard cap ${budget.timeoutMs}ms)` : "";
|
|
1051
|
+
console.warn(`Extension ${extensionPath} is still running its session_shutdown handler after ${Date.now() - startedAt}ms${capNote}.`);
|
|
1052
|
+
}, budget.warnMs);
|
|
1053
|
+
}
|
|
1054
|
+
if (budget.timeoutMs > 0) {
|
|
1055
|
+
capTimer = setTimeout(() => resolve(true), budget.timeoutMs);
|
|
1056
|
+
}
|
|
1057
|
+
void settled.then(() => resolve(false));
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
finally {
|
|
1061
|
+
clearTimeout(warnTimer);
|
|
1062
|
+
clearTimeout(capTimer);
|
|
1063
|
+
}
|
|
1064
|
+
if (timedOut) {
|
|
1065
|
+
controller.abort(new Error(`session_shutdown handler timed out after ${budget.timeoutMs}ms`));
|
|
1066
|
+
this.emitError({
|
|
1067
|
+
extensionPath,
|
|
1068
|
+
event: "session_shutdown",
|
|
1069
|
+
error: `handler timed out after ${budget.timeoutMs}ms`,
|
|
1070
|
+
});
|
|
1071
|
+
return;
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
else {
|
|
1075
|
+
await settled;
|
|
1076
|
+
}
|
|
1077
|
+
if (outcome && !outcome.ok) {
|
|
1078
|
+
throw outcome.error;
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
990
1081
|
async emit(event) {
|
|
991
1082
|
let result;
|
|
1083
|
+
// session_shutdown is the one host-bounded event: a hung handler must not hold
|
|
1084
|
+
// Ctrl+C / quit / reload / new / resume hostage. Every other event still awaits
|
|
1085
|
+
// its handlers without a cap (ask-user and approval dialogs legitimately block).
|
|
1086
|
+
// The budget is resolved lazily so runners with no shutdown handler read no settings.
|
|
1087
|
+
const isSessionShutdown = event.type === "session_shutdown";
|
|
1088
|
+
let shutdownBudget;
|
|
992
1089
|
for (const ext of this.extensions) {
|
|
993
1090
|
const handlers = ext.handlers.get(event.type);
|
|
994
1091
|
if (!handlers || handlers.length === 0)
|
|
995
1092
|
continue;
|
|
996
1093
|
for (const handler of handlers) {
|
|
997
1094
|
try {
|
|
1095
|
+
if (isSessionShutdown) {
|
|
1096
|
+
shutdownBudget ??= this.resolveSessionShutdownBudget();
|
|
1097
|
+
await this.runSessionShutdownHandler(ext.path, event, handler, shutdownBudget);
|
|
1098
|
+
continue;
|
|
1099
|
+
}
|
|
998
1100
|
const handlerResult = await handler(event, this.createContext(ext.path));
|
|
999
1101
|
if (this.isSessionBeforeEvent(event) && handlerResult) {
|
|
1000
1102
|
result = handlerResult;
|