@code-yeongyu/senpi 2026.7.25 → 2026.7.26
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 +81 -0
- package/README.md +1 -1
- package/dist/beta/omo-local-update.d.ts +207 -0
- package/dist/beta/omo-local-update.d.ts.map +1 -0
- package/dist/beta/omo-local-update.js +708 -0
- package/dist/beta/omo-local-update.js.map +1 -0
- package/dist/cli/args.d.ts +4 -16
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -25
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/grok-neo-gate.d.ts +12 -0
- package/dist/cli/grok-neo-gate.d.ts.map +1 -0
- package/dist/cli/grok-neo-gate.js +18 -0
- package/dist/cli/grok-neo-gate.js.map +1 -0
- package/dist/cli-main.js +4 -0
- package/dist/cli-main.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +2 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +33 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +22 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +202 -58
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.d.ts +2 -2
- package/dist/core/auth-providers.js +2 -2
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.js +3 -2
- package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +30 -2
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +28 -0
- package/dist/core/extensions/builtin/compaction/speculative.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 +20 -17
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/log.d.ts +4 -1
- package/dist/core/extensions/builtin/config-reload/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/log.js +3 -0
- package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/routine-settings.d.ts +15 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.d.ts.map +1 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.js +102 -0
- package/dist/core/extensions/builtin/config-reload/routine-settings.js.map +1 -0
- package/dist/core/extensions/builtin/goal/command-registration.js +2 -2
- package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
- package/dist/core/extensions/builtin/goal/format.d.ts +1 -1
- package/dist/core/extensions/builtin/goal/format.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/format.js +9 -2
- package/dist/core/extensions/builtin/goal/format.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +38 -23
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts +6 -0
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +19 -0
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -0
- package/dist/core/extensions/builtin/goal/persistence.d.ts +6 -0
- package/dist/core/extensions/builtin/goal/persistence.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/persistence.js +141 -0
- package/dist/core/extensions/builtin/goal/persistence.js.map +1 -0
- package/dist/core/extensions/builtin/goal/store.d.ts +7 -3
- package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/store.js +66 -181
- package/dist/core/extensions/builtin/goal/store.js.map +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.d.ts +1 -0
- package/dist/core/extensions/builtin/goal/tool-registration.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/tool-registration.js +26 -15
- package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
- package/dist/core/extensions/builtin/goal/transitions.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/transitions.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/transitions.js +45 -0
- package/dist/core/extensions/builtin/goal/transitions.js.map +1 -0
- package/dist/core/extensions/builtin/goal/types.d.ts +10 -4
- package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/types.js +2 -2
- package/dist/core/extensions/builtin/goal/types.js.map +1 -1
- package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/ui.js +2 -0
- package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
- package/dist/core/extensions/builtin/goal/validation.d.ts +8 -1
- package/dist/core/extensions/builtin/goal/validation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/validation.js +24 -12
- package/dist/core/extensions/builtin/goal/validation.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +0 -2
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/index.js +8 -5
- package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js +1 -0
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +48 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +88 -64
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +32 -0
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/index.d.ts +1 -1
- package/dist/core/extensions/builtin/terminal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/index.js +1 -1
- package/dist/core/extensions/builtin/terminal/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts +29 -0
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-notify.js +185 -0
- package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +35 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +98 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/notify.d.ts +9 -0
- package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.js +30 -14
- package/dist/core/extensions/builtin/terminal/notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/prompt.d.ts +1 -1
- package/dist/core/extensions/builtin/terminal/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/prompt.js +13 -5
- package/dist/core/extensions/builtin/terminal/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +3 -12
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.js +4 -59
- package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/settings.d.ts +8 -0
- package/dist/core/extensions/builtin/terminal/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/settings.js +16 -2
- package/dist/core/extensions/builtin/terminal/settings.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/shared.d.ts +2 -2
- package/dist/core/extensions/builtin/terminal/shared.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/shared.js +2 -1
- package/dist/core/extensions/builtin/terminal/shared.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts +10 -4
- package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash-output.js +17 -96
- package/dist/core/extensions/builtin/terminal/tools/bash-output.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts +7 -0
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts +41 -0
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +97 -0
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/tools/render.d.ts +3 -0
- package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/render.js +5 -2
- package/dist/core/extensions/builtin/terminal/tools/render.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/fuzzy-match.d.ts +19 -0
- package/dist/core/extensions/builtin/todotools/fuzzy-match.d.ts.map +1 -0
- package/dist/core/extensions/builtin/todotools/fuzzy-match.js +70 -0
- package/dist/core/extensions/builtin/todotools/fuzzy-match.js.map +1 -0
- package/dist/core/extensions/builtin/todotools/normalize.d.ts +8 -0
- package/dist/core/extensions/builtin/todotools/normalize.d.ts.map +1 -0
- package/dist/core/extensions/builtin/todotools/normalize.js +174 -0
- package/dist/core/extensions/builtin/todotools/normalize.js.map +1 -0
- package/dist/core/extensions/builtin/todotools/prompt.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/prompt.js +4 -2
- package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts +9 -8
- package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.js +99 -48
- package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js +65 -38
- package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/index.js +2 -4
- package/dist/core/extensions/builtin/websearch/index.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js +4 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.js +2 -4
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js +20 -8
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +6 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.js +15 -11
- package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.js +5 -10
- package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +12 -0
- package/dist/core/extensions/loader.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 +12 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +25 -1
- 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 +0 -5
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -2
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +32 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +91 -0
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-resolver.d.ts +10 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +13 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +4 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +19 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +9 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +13 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +7 -0
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +13 -0
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/cooldown.d.ts.map +1 -1
- package/dist/core/retry-fallback/cooldown.js +5 -0
- package/dist/core/retry-fallback/cooldown.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +11 -35
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +12 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +10 -13
- 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 +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/thinking-levels.d.ts.map +1 -1
- package/dist/core/thinking-levels.js +9 -2
- package/dist/core/thinking-levels.js.map +1 -1
- package/dist/core/timings.d.ts +7 -2
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +11 -0
- package/dist/core/timings.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -0
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/inspector-policy.d.ts +22 -0
- package/dist/inspector-policy.d.ts.map +1 -0
- package/dist/inspector-policy.js +84 -0
- package/dist/inspector-policy.js.map +1 -0
- package/dist/main.d.ts +6 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +20 -23
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/runtime.d.ts.map +1 -1
- package/dist/modes/app-server/runtime.js +1 -0
- package/dist/modes/app-server/runtime.js.map +1 -1
- package/dist/modes/app-server/threads/goal-handlers.js +4 -2
- package/dist/modes/app-server/threads/goal-handlers.js.map +1 -1
- package/dist/modes/app-server/threads/goal-wire.d.ts.map +1 -1
- package/dist/modes/app-server/threads/goal-wire.js +1 -0
- package/dist/modes/app-server/threads/goal-wire.js.map +1 -1
- package/dist/modes/app-server/threads/handlers.d.ts +1 -0
- package/dist/modes/app-server/threads/handlers.d.ts.map +1 -1
- package/dist/modes/app-server/threads/handlers.js +2 -0
- package/dist/modes/app-server/threads/handlers.js.map +1 -1
- package/dist/modes/app-server/threads/turn-runtime.d.ts +1 -0
- package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
- package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
- package/dist/modes/app-server/threads/turns.d.ts.map +1 -1
- package/dist/modes/app-server/threads/turns.js +47 -3
- package/dist/modes/app-server/threads/turns.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +3 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +9 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +1 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +29 -4
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +5 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +43 -17
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/grok/chrome-tokens.d.ts +22 -0
- package/dist/modes/interactive/grok/chrome-tokens.d.ts.map +1 -0
- package/dist/modes/interactive/grok/chrome-tokens.js +27 -0
- package/dist/modes/interactive/grok/chrome-tokens.js.map +1 -0
- package/dist/modes/interactive/grok/chrome.d.ts +51 -0
- package/dist/modes/interactive/grok/chrome.d.ts.map +1 -0
- package/dist/modes/interactive/grok/chrome.js +105 -0
- package/dist/modes/interactive/grok/chrome.js.map +1 -0
- package/dist/modes/interactive/grok/footer.d.ts +14 -0
- package/dist/modes/interactive/grok/footer.d.ts.map +1 -0
- package/dist/modes/interactive/grok/footer.js +27 -0
- package/dist/modes/interactive/grok/footer.js.map +1 -0
- package/dist/modes/interactive/grok/input-card.d.ts +9 -0
- package/dist/modes/interactive/grok/input-card.d.ts.map +1 -0
- package/dist/modes/interactive/grok/input-card.js +30 -0
- package/dist/modes/interactive/grok/input-card.js.map +1 -0
- package/dist/modes/interactive/grok/palette.d.ts +145 -0
- package/dist/modes/interactive/grok/palette.d.ts.map +1 -0
- package/dist/modes/interactive/grok/palette.js +92 -0
- package/dist/modes/interactive/grok/palette.js.map +1 -0
- package/dist/modes/interactive/grok/tool-row.d.ts +17 -0
- package/dist/modes/interactive/grok/tool-row.d.ts.map +1 -0
- package/dist/modes/interactive/grok/tool-row.js +26 -0
- package/dist/modes/interactive/grok/tool-row.js.map +1 -0
- package/dist/modes/interactive/grok/welcome-card.d.ts +10 -0
- package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -0
- package/dist/modes/interactive/grok/welcome-card.js +30 -0
- package/dist/modes/interactive/grok/welcome-card.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +5 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +117 -54
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/grok-day.json +77 -0
- package/dist/modes/interactive/theme/grok-night.json +93 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +3 -3
- package/dist/modes/rpc/connection-handler.js +6 -6
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/custom-capability.d.ts +6 -7
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +6 -7
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +2 -2
- package/dist/modes/rpc/rpc-mode.js +5 -5
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +11 -0
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/senpi +2 -0
- package/docs/docs.json +4 -0
- package/docs/environment-variables.md +1 -0
- package/docs/extensions.md +2 -2
- package/docs/grok-neo.md +77 -0
- package/docs/keybindings.md +0 -1
- package/docs/settings.md +14 -3
- package/docs/terminal-tools.md +6 -3
- package/docs/usage.md +1 -1
- package/examples/extensions/message-renderer.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +47 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +39 -19
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/http-server.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/output-bridge.ts +0 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-notifier.ts +40 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +46 -66
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +5 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel-contract.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +19 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +8 -5
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +23 -5
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +322 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +253 -18
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/interrupt-note.ts +58 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +28 -6
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/status-events.ts +20 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +65 -22
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +4 -41
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +10 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +38 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- 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 +210 -26
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +16 -8
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +39 -20
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +9 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +12 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +19 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +121 -23
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +67 -31
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- 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 +13 -8
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.d.ts +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
- 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/models-store.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models-store.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +5 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.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/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.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/dist/types.d.ts +9 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js.map +1 -1
- 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 +10 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js +70 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js +7 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-call-id.d.ts +9 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-call-id.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-call-id.js +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-call-id.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +35 -3
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts +32 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +15 -7
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +8 -8
- package/dist/cli/neo/build-argv.d.ts +0 -19
- package/dist/cli/neo/build-argv.d.ts.map +0 -1
- package/dist/cli/neo/build-argv.js +0 -84
- package/dist/cli/neo/build-argv.js.map +0 -1
- package/dist/cli/neo/daemon-launch.d.ts +0 -25
- package/dist/cli/neo/daemon-launch.d.ts.map +0 -1
- package/dist/cli/neo/daemon-launch.js +0 -97
- package/dist/cli/neo/daemon-launch.js.map +0 -1
- package/dist/cli/neo/gate.d.ts +0 -15
- package/dist/cli/neo/gate.d.ts.map +0 -1
- package/dist/cli/neo/gate.js +0 -21
- package/dist/cli/neo/gate.js.map +0 -1
- package/dist/cli/neo/launch.d.ts +0 -24
- package/dist/cli/neo/launch.d.ts.map +0 -1
- package/dist/cli/neo/launch.js +0 -66
- package/dist/cli/neo/launch.js.map +0 -1
- package/dist/cli/neo/platform.d.ts +0 -38
- package/dist/cli/neo/platform.d.ts.map +0 -1
- package/dist/cli/neo/platform.js +0 -54
- package/dist/cli/neo/platform.js.map +0 -1
- package/dist/cli/neo/resolve-binary.d.ts +0 -39
- package/dist/cli/neo/resolve-binary.d.ts.map +0 -1
- package/dist/cli/neo/resolve-binary.js +0 -66
- package/dist/cli/neo/resolve-binary.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/index.d.ts +0 -5
- package/dist/core/extensions/builtin/session-observer/index.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/index.js +0 -36
- package/dist/core/extensions/builtin/session-observer/index.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/loader.d.ts +0 -3
- package/dist/core/extensions/builtin/session-observer/loader.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/loader.js +0 -20
- package/dist/core/extensions/builtin/session-observer/loader.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/overlay-format.d.ts +0 -7
- package/dist/core/extensions/builtin/session-observer/overlay-format.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/overlay-format.js +0 -30
- package/dist/core/extensions/builtin/session-observer/overlay-format.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/overlay.d.ts +0 -51
- package/dist/core/extensions/builtin/session-observer/overlay.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/overlay.js +0 -229
- package/dist/core/extensions/builtin/session-observer/overlay.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/scanner.d.ts +0 -10
- package/dist/core/extensions/builtin/session-observer/scanner.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/scanner.js +0 -142
- package/dist/core/extensions/builtin/session-observer/scanner.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/text.d.ts +0 -7
- package/dist/core/extensions/builtin/session-observer/text.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/text.js +0 -37
- package/dist/core/extensions/builtin/session-observer/text.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript-entries.d.ts +0 -7
- package/dist/core/extensions/builtin/session-observer/transcript-entries.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript-entries.js +0 -71
- package/dist/core/extensions/builtin/session-observer/transcript-entries.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript-format.d.ts +0 -11
- package/dist/core/extensions/builtin/session-observer/transcript-format.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript-format.js +0 -65
- package/dist/core/extensions/builtin/session-observer/transcript-format.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript.d.ts +0 -4
- package/dist/core/extensions/builtin/session-observer/transcript.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/transcript.js +0 -81
- package/dist/core/extensions/builtin/session-observer/transcript.js.map +0 -1
- package/dist/core/extensions/builtin/session-observer/types.d.ts +0 -33
- package/dist/core/extensions/builtin/session-observer/types.d.ts.map +0 -1
- package/dist/core/extensions/builtin/session-observer/types.js +0 -2
- package/dist/core/extensions/builtin/session-observer/types.js.map +0 -1
- package/dist/modes/rpc/neo-daemon-child-worker.d.ts +0 -29
- package/dist/modes/rpc/neo-daemon-child-worker.d.ts.map +0 -1
- package/dist/modes/rpc/neo-daemon-child-worker.js +0 -95
- package/dist/modes/rpc/neo-daemon-child-worker.js.map +0 -1
- package/dist/modes/rpc/neo-daemon-mode.d.ts +0 -110
- package/dist/modes/rpc/neo-daemon-mode.d.ts.map +0 -1
- package/dist/modes/rpc/neo-daemon-mode.js +0 -267
- package/dist/modes/rpc/neo-daemon-mode.js.map +0 -1
- package/dist/modes/rpc/neo-daemon-protocol.d.ts +0 -50
- package/dist/modes/rpc/neo-daemon-protocol.d.ts.map +0 -1
- package/dist/modes/rpc/neo-daemon-protocol.js +0 -66
- package/dist/modes/rpc/neo-daemon-protocol.js.map +0 -1
- package/dist/modes/rpc/neo-daemon-registry.d.ts +0 -98
- package/dist/modes/rpc/neo-daemon-registry.d.ts.map +0 -1
- package/dist/modes/rpc/neo-daemon-registry.js +0 -209
- package/dist/modes/rpc/neo-daemon-registry.js.map +0 -1
- package/dist/modes/rpc/neo-runtime-options-argv.d.ts +0 -17
- package/dist/modes/rpc/neo-runtime-options-argv.d.ts.map +0 -1
- package/dist/modes/rpc/neo-runtime-options-argv.js +0 -79
- package/dist/modes/rpc/neo-runtime-options-argv.js.map +0 -1
- package/dist/modes/rpc/neo-runtime-options.d.ts +0 -84
- package/dist/modes/rpc/neo-runtime-options.d.ts.map +0 -1
- package/dist/modes/rpc/neo-runtime-options.js +0 -92
- package/dist/modes/rpc/neo-runtime-options.js.map +0 -1
- package/docs/neo.md +0 -111
- package/node_modules/@code-yeongyu/senpi-codemode/src/codemode/runtime.ts +0 -258
- package/node_modules/@code-yeongyu/senpi-codemode/src/codemode/tools.ts +0 -106
|
@@ -16,7 +16,7 @@ import { randomUUID } from "node:crypto";
|
|
|
16
16
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
17
|
import { basename, dirname } from "node:path";
|
|
18
18
|
import { prepareAgentToolCall } from "@earendil-works/pi-agent-core";
|
|
19
|
-
import { contentText } from "@earendil-works/pi-ai";
|
|
19
|
+
import { contentText, SERVER_FALLBACK_ABORTED_DIAGNOSTIC } from "@earendil-works/pi-ai";
|
|
20
20
|
import { cleanupSessionResources, isClassifierRefusal, isContextOverflow, isRetryableAssistantError, modelsAreEqual, resetApiProviders, streamSimple, } from "@earendil-works/pi-ai/compat";
|
|
21
21
|
import { getAgentDir } from "../config.js";
|
|
22
22
|
import { getThemeByName, theme } from "../modes/interactive/theme/theme.js";
|
|
@@ -46,6 +46,7 @@ import { generateSessionTitle, shouldSkipSessionTitle } from "./session-title-ge
|
|
|
46
46
|
import { SessionWorkBarrier } from "./session-work-barrier.js";
|
|
47
47
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
48
48
|
import { getSupportedThinkingLevels, supportsMax, supportsXhigh } from "./thinking-levels.js";
|
|
49
|
+
import { resetTimings, time } from "./timings.js";
|
|
49
50
|
import { createLocalBashOperations } from "./tools/bash.js";
|
|
50
51
|
import { createAllToolDefinitions } from "./tools/index.js";
|
|
51
52
|
import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
|
|
@@ -169,6 +170,8 @@ function isSameOverflowSource(message, model, upstreamModelId) {
|
|
|
169
170
|
// ============================================================================
|
|
170
171
|
/** Thinking levels including native max (Opus 4.6 legacy / Opus 4.7 native). */
|
|
171
172
|
const THINKING_LEVELS_WITH_MAX = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
173
|
+
/** Caps explicit skill expansion so one prompt cannot consume unbounded context. */
|
|
174
|
+
export const MAX_SKILL_EXPANSIONS_PER_PROMPT = 5;
|
|
172
175
|
// ============================================================================
|
|
173
176
|
// AgentSession Class
|
|
174
177
|
// ============================================================================
|
|
@@ -221,6 +224,7 @@ export class AgentSession {
|
|
|
221
224
|
this._retryPromise = undefined;
|
|
222
225
|
this._retryResolve = undefined;
|
|
223
226
|
this._userAbortPromise = undefined;
|
|
227
|
+
this._agentAbortSource = undefined;
|
|
224
228
|
this._suppressQueuedContinuationAfterUserAbort = false;
|
|
225
229
|
this._extensionEventSignal = undefined;
|
|
226
230
|
// Bash execution state
|
|
@@ -265,6 +269,9 @@ export class AgentSession {
|
|
|
265
269
|
// The message object is already in agent.state.messages when message_end
|
|
266
270
|
// fires; track its exact identity until this event's queued processing
|
|
267
271
|
// settles so compaction can distinguish pending persistence from stale state.
|
|
272
|
+
if (event.type === "message_end" && event.message.role === "assistant") {
|
|
273
|
+
this._emitServerFallbackAborted(event.message);
|
|
274
|
+
}
|
|
268
275
|
const pendingMessage = event.type === "message_end" ? event.message : undefined;
|
|
269
276
|
if (pendingMessage !== undefined) {
|
|
270
277
|
this._messageEndsAwaitingPersistence.add(pendingMessage);
|
|
@@ -282,6 +289,7 @@ export class AgentSession {
|
|
|
282
289
|
this.agent = config.agent;
|
|
283
290
|
this.sessionManager = config.sessionManager;
|
|
284
291
|
this.settingsManager = config.settingsManager;
|
|
292
|
+
this.agent.abortServerSideFallback = this.settingsManager.getAbortServerSideFallback();
|
|
285
293
|
const noModelFallback = config.resourceLoader.getExtensions().runtime.flagValues.get("no-model-fallback") === true ||
|
|
286
294
|
process.env.SENPI_NO_FALLBACK === "1";
|
|
287
295
|
if (noModelFallback) {
|
|
@@ -410,6 +418,24 @@ export class AgentSession {
|
|
|
410
418
|
* registered tool execution to the extension context. Tool call and tool result interception now
|
|
411
419
|
* happens here instead of in wrappers.
|
|
412
420
|
*/
|
|
421
|
+
/**
|
|
422
|
+
* Surface a provider-level server-fallback abort before retry handling runs so
|
|
423
|
+
* the UI can explain the switch. Emitted synchronously here because retry work
|
|
424
|
+
* for the following agent_end starts before queued message_end processing
|
|
425
|
+
* drains. `chainConfigured` is required because the no-chain refusal path
|
|
426
|
+
* emits no retry_fallback_exhausted, leaving the UI no other signal.
|
|
427
|
+
*/
|
|
428
|
+
_emitServerFallbackAborted(message) {
|
|
429
|
+
const details = message.diagnostics?.find((entry) => entry.type === SERVER_FALLBACK_ABORTED_DIAGNOSTIC)?.details;
|
|
430
|
+
if (details === undefined)
|
|
431
|
+
return;
|
|
432
|
+
this._emit({
|
|
433
|
+
type: "server_fallback_aborted",
|
|
434
|
+
from: typeof details.from === "string" ? details.from : message.model,
|
|
435
|
+
to: typeof details.to === "string" ? details.to : message.model,
|
|
436
|
+
chainConfigured: this._retryFallback.hasConfiguredChain(),
|
|
437
|
+
});
|
|
438
|
+
}
|
|
413
439
|
_installAgentToolHooks() {
|
|
414
440
|
this.agent.beforeToolCall = async ({ toolCall, args }) => {
|
|
415
441
|
return this._emitBeforeToolCallHooks(toolCall, args);
|
|
@@ -832,7 +858,10 @@ export class AgentSession {
|
|
|
832
858
|
if (providerDelayMs === undefined) {
|
|
833
859
|
return true;
|
|
834
860
|
}
|
|
835
|
-
|
|
861
|
+
if (providerDelayMs <= this.settingsManager.getProviderRetrySettings().maxRetryDelayMs) {
|
|
862
|
+
return true;
|
|
863
|
+
}
|
|
864
|
+
return this._retryFallback.canTryFallback();
|
|
836
865
|
}
|
|
837
866
|
async _processAgentEvent(event, signal) {
|
|
838
867
|
// When a user message starts, check if it's from either queue and remove it BEFORE emitting
|
|
@@ -1071,7 +1100,19 @@ export class AgentSession {
|
|
|
1071
1100
|
await this._extensionRunner.emit({ type: "agent_start" });
|
|
1072
1101
|
}
|
|
1073
1102
|
else if (event.type === "agent_end") {
|
|
1074
|
-
|
|
1103
|
+
const abortSource = this._agentAbortSource;
|
|
1104
|
+
const aborted = abortSource !== undefined || this._findLastAssistantInMessages(event.messages)?.stopReason === "aborted";
|
|
1105
|
+
try {
|
|
1106
|
+
await this._extensionRunner.emit({
|
|
1107
|
+
type: "agent_end",
|
|
1108
|
+
messages: event.messages,
|
|
1109
|
+
...(aborted ? { aborted: true } : {}),
|
|
1110
|
+
...(abortSource === undefined ? {} : { abortSource }),
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
finally {
|
|
1114
|
+
this._agentAbortSource = undefined;
|
|
1115
|
+
}
|
|
1075
1116
|
}
|
|
1076
1117
|
else if (event.type === "turn_start") {
|
|
1077
1118
|
const extensionEvent = {
|
|
@@ -1809,34 +1850,63 @@ export class AgentSession {
|
|
|
1809
1850
|
}
|
|
1810
1851
|
}
|
|
1811
1852
|
/**
|
|
1812
|
-
* Expand skill commands (/skill:name args) to their full content.
|
|
1813
|
-
* Returns the expanded text, or the original text if
|
|
1814
|
-
* Emits errors via extension runner if file
|
|
1853
|
+
* Expand a leading run of skill commands (/skill:name /skill:other args) to their full content.
|
|
1854
|
+
* Returns the expanded text, or the original text if the first skill command is not found.
|
|
1855
|
+
* Emits errors via extension runner if file reads fail or the expansion cap is reached.
|
|
1815
1856
|
*/
|
|
1816
1857
|
_expandSkillCommand(text) {
|
|
1817
1858
|
if (!text.startsWith("/skill:"))
|
|
1818
1859
|
return text;
|
|
1819
|
-
const
|
|
1820
|
-
const
|
|
1821
|
-
const
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
const
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1860
|
+
const skills = this.resourceLoader.getSkills().skills;
|
|
1861
|
+
const expandedSkillNames = new Set();
|
|
1862
|
+
const skillBlocks = [];
|
|
1863
|
+
let tokenStart = 0;
|
|
1864
|
+
while (tokenStart < text.length) {
|
|
1865
|
+
let tokenEnd = tokenStart;
|
|
1866
|
+
while (tokenEnd < text.length && !/\s/.test(text[tokenEnd])) {
|
|
1867
|
+
tokenEnd += 1;
|
|
1868
|
+
}
|
|
1869
|
+
const token = text.slice(tokenStart, tokenEnd);
|
|
1870
|
+
if (!token.startsWith("/skill:"))
|
|
1871
|
+
break;
|
|
1872
|
+
const skillName = token.slice(7);
|
|
1873
|
+
const skill = skills.find((candidate) => candidate.name === skillName);
|
|
1874
|
+
if (!skill)
|
|
1875
|
+
break; // Unknown skills and everything after them remain literal text.
|
|
1876
|
+
if (!expandedSkillNames.has(skill.name)) {
|
|
1877
|
+
if (skillBlocks.length >= MAX_SKILL_EXPANSIONS_PER_PROMPT) {
|
|
1878
|
+
this._extensionRunner.emitError({
|
|
1879
|
+
extensionPath: "skill:expansion",
|
|
1880
|
+
event: "skill_expansion",
|
|
1881
|
+
error: `Expanded at most ${MAX_SKILL_EXPANSIONS_PER_PROMPT} skills; remaining skill commands were left as literal text.`,
|
|
1882
|
+
});
|
|
1883
|
+
break;
|
|
1884
|
+
}
|
|
1885
|
+
try {
|
|
1886
|
+
const content = readFileSync(skill.filePath, "utf-8");
|
|
1887
|
+
const body = stripFrontmatter(content).trim();
|
|
1888
|
+
skillBlocks.push(`<skill name="${skill.name}" location="${skill.filePath}">\nReferences are relative to ${skill.baseDir}.\n\n${body}\n</skill>`);
|
|
1889
|
+
expandedSkillNames.add(skill.name);
|
|
1890
|
+
}
|
|
1891
|
+
catch (err) {
|
|
1892
|
+
this._extensionRunner.emitError({
|
|
1893
|
+
extensionPath: skill.filePath,
|
|
1894
|
+
event: "skill_expansion",
|
|
1895
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1896
|
+
});
|
|
1897
|
+
return text; // Return the original prompt when any skill file cannot be read.
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
tokenStart = tokenEnd;
|
|
1901
|
+
while (tokenStart < text.length && /\s/.test(text[tokenStart])) {
|
|
1902
|
+
tokenStart += 1;
|
|
1903
|
+
}
|
|
1839
1904
|
}
|
|
1905
|
+
if (skillBlocks.length === 0)
|
|
1906
|
+
return text;
|
|
1907
|
+
const args = text.slice(tokenStart).trim();
|
|
1908
|
+
const expandedSkills = skillBlocks.join("\n\n");
|
|
1909
|
+
return args ? `${expandedSkills}\n\n${args}` : expandedSkills;
|
|
1840
1910
|
}
|
|
1841
1911
|
/**
|
|
1842
1912
|
* Queue a steering message while the agent is running.
|
|
@@ -2073,6 +2143,9 @@ export class AgentSession {
|
|
|
2073
2143
|
/**
|
|
2074
2144
|
* Send a user message to the agent. Always triggers a turn.
|
|
2075
2145
|
* When the agent is streaming, use deliverAs to specify how to queue the message.
|
|
2146
|
+
* If the prompt path rejects before the message reaches a queue or a turn
|
|
2147
|
+
* (e.g. a required compaction that cannot complete), the message is retained
|
|
2148
|
+
* in the steering/followUp queue for later delivery and the error still propagates.
|
|
2076
2149
|
*
|
|
2077
2150
|
* @param content User message content (string or content array)
|
|
2078
2151
|
* @param options.deliverAs Delivery mode when streaming: "steer" or "followUp"
|
|
@@ -2112,6 +2185,7 @@ export class AgentSession {
|
|
|
2112
2185
|
// settles so callers observing session idle cannot race its provider turn.
|
|
2113
2186
|
const waitForExistingSessionWork = this._sessionWorkBarrier.hasActiveWork;
|
|
2114
2187
|
let finishSessionWork;
|
|
2188
|
+
let disposition;
|
|
2115
2189
|
try {
|
|
2116
2190
|
// Use prompt() with expandPromptTemplates: false to skip command handling and template expansion
|
|
2117
2191
|
await this.prompt(text, {
|
|
@@ -2119,7 +2193,10 @@ export class AgentSession {
|
|
|
2119
2193
|
streamingBehavior: options?.deliverAs,
|
|
2120
2194
|
images,
|
|
2121
2195
|
source: "extension",
|
|
2122
|
-
promptDisposition: () =>
|
|
2196
|
+
promptDisposition: (nextDisposition) => {
|
|
2197
|
+
disposition = nextDisposition;
|
|
2198
|
+
resolveBindingPromptReadiness?.();
|
|
2199
|
+
},
|
|
2123
2200
|
onSessionWorkReady: waitForExistingSessionWork
|
|
2124
2201
|
? () => {
|
|
2125
2202
|
finishSessionWork ??= this._sessionWorkBarrier.begin();
|
|
@@ -2128,6 +2205,19 @@ export class AgentSession {
|
|
|
2128
2205
|
sessionTitlePrompt: false,
|
|
2129
2206
|
});
|
|
2130
2207
|
}
|
|
2208
|
+
catch (error) {
|
|
2209
|
+
// Extension bindings invoke this method fire-and-forget, so a rejection
|
|
2210
|
+
// before prompt() accepted the message must not silently drop it.
|
|
2211
|
+
if (disposition === undefined) {
|
|
2212
|
+
if (options?.deliverAs === "steer") {
|
|
2213
|
+
await this._queueSteer(text, images);
|
|
2214
|
+
}
|
|
2215
|
+
else {
|
|
2216
|
+
await this._queueFollowUp(text, images);
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
throw error;
|
|
2220
|
+
}
|
|
2131
2221
|
finally {
|
|
2132
2222
|
resolveBindingPromptReadiness?.();
|
|
2133
2223
|
finishSessionWork?.();
|
|
@@ -2172,7 +2262,7 @@ export class AgentSession {
|
|
|
2172
2262
|
*/
|
|
2173
2263
|
async abort() {
|
|
2174
2264
|
this.abortCompaction();
|
|
2175
|
-
await this._abortActiveAgentAndRetry();
|
|
2265
|
+
await this._abortActiveAgentAndRetry("user");
|
|
2176
2266
|
}
|
|
2177
2267
|
async waitForIdle() {
|
|
2178
2268
|
if (this.isIdle) {
|
|
@@ -2540,7 +2630,7 @@ export class AgentSession {
|
|
|
2540
2630
|
this._pendingCompactionAdmission = undefined;
|
|
2541
2631
|
admission.finishSessionWork();
|
|
2542
2632
|
}
|
|
2543
|
-
async _abortActiveAgentAndRetry() {
|
|
2633
|
+
async _abortActiveAgentAndRetry(source) {
|
|
2544
2634
|
this.abortRetry();
|
|
2545
2635
|
this.abortBranchSummary();
|
|
2546
2636
|
if (this._userAbortPromise) {
|
|
@@ -2550,6 +2640,7 @@ export class AgentSession {
|
|
|
2550
2640
|
}
|
|
2551
2641
|
if (this.isStreaming) {
|
|
2552
2642
|
this._suppressQueuedContinuationAfterUserAbort = true;
|
|
2643
|
+
this._agentAbortSource = source;
|
|
2553
2644
|
}
|
|
2554
2645
|
const abortPromise = (async () => {
|
|
2555
2646
|
this.agent.abort();
|
|
@@ -2579,7 +2670,7 @@ export class AgentSession {
|
|
|
2579
2670
|
// Keep the session subscriber attached until the aborted run emits
|
|
2580
2671
|
// agent_end. That event clears the active-run and retry state that
|
|
2581
2672
|
// waitForIdle() depends on.
|
|
2582
|
-
await this._abortActiveAgentAndRetry();
|
|
2673
|
+
await this._abortActiveAgentAndRetry("system");
|
|
2583
2674
|
this._disconnectFromAgent();
|
|
2584
2675
|
disconnected = true;
|
|
2585
2676
|
this._emit({ type: "compaction_start", reason: "manual" });
|
|
@@ -3352,13 +3443,21 @@ export class AgentSession {
|
|
|
3352
3443
|
this._claimCompactionController(autoCompactionController, "auto");
|
|
3353
3444
|
const endBeforeExecution = () => {
|
|
3354
3445
|
this._emit({ type: "compaction_start", reason });
|
|
3355
|
-
if (reason === "overflow")
|
|
3446
|
+
if (reason === "overflow" && this._autoCompactionAbortController === autoCompactionController) {
|
|
3356
3447
|
this._overflowRecoveryAttempted = false;
|
|
3448
|
+
}
|
|
3449
|
+
// A synchronous compaction_start listener can supersede this controller with a new
|
|
3450
|
+
// operation, which then owns its own start/end lifecycle; publishing another terminal
|
|
3451
|
+
// event here would be stale. A listener can instead abort this very controller, and
|
|
3452
|
+
// that still needs a terminal event: consumers open UI state on compaction_start and
|
|
3453
|
+
// close it only on compaction_end.
|
|
3454
|
+
if (this._autoCompactionAbortController !== autoCompactionController)
|
|
3455
|
+
return false;
|
|
3357
3456
|
this._emit({
|
|
3358
3457
|
type: "compaction_end",
|
|
3359
3458
|
reason,
|
|
3360
3459
|
result: undefined,
|
|
3361
|
-
aborted:
|
|
3460
|
+
aborted: autoCompactionController.signal.aborted,
|
|
3362
3461
|
willRetry: false,
|
|
3363
3462
|
});
|
|
3364
3463
|
return false;
|
|
@@ -3624,6 +3723,9 @@ export class AgentSession {
|
|
|
3624
3723
|
getAllTools: () => this.getAllTools(),
|
|
3625
3724
|
setActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
3626
3725
|
refreshTools: () => this._refreshToolRegistry(),
|
|
3726
|
+
registerRemovedToolHint: (name, hint) => {
|
|
3727
|
+
this.agent.removedToolHints[name] = hint;
|
|
3728
|
+
},
|
|
3627
3729
|
getCommands,
|
|
3628
3730
|
setModel: async (model) => {
|
|
3629
3731
|
if (!this._modelRuntime.hasConfiguredAuth(model.provider))
|
|
@@ -3703,7 +3805,7 @@ export class AgentSession {
|
|
|
3703
3805
|
let outcome = "failed";
|
|
3704
3806
|
let disconnected = false;
|
|
3705
3807
|
try {
|
|
3706
|
-
await this._abortActiveAgentAndRetry();
|
|
3808
|
+
await this._abortActiveAgentAndRetry("system");
|
|
3707
3809
|
this._disconnectFromAgent();
|
|
3708
3810
|
disconnected = true;
|
|
3709
3811
|
this._emit({ type: "compaction_start", reason: "extension" });
|
|
@@ -3901,22 +4003,49 @@ export class AgentSession {
|
|
|
3901
4003
|
});
|
|
3902
4004
|
}
|
|
3903
4005
|
async reload(options) {
|
|
3904
|
-
|
|
3905
|
-
|
|
4006
|
+
resetTimings("reload");
|
|
4007
|
+
const oldExtensionRunner = this._extensionRunner;
|
|
4008
|
+
const oldExtensionIdentities = oldExtensionRunner.getExtensionIdentities();
|
|
4009
|
+
const previousFlagValues = oldExtensionRunner.getFlagValues();
|
|
4010
|
+
await emitSessionShutdownEvent(oldExtensionRunner, { type: "session_shutdown", reason: "reload" });
|
|
4011
|
+
time("shutdown", "reload");
|
|
3906
4012
|
await this.settingsManager.reload();
|
|
3907
4013
|
this.syncQueueModesFromSettings();
|
|
3908
4014
|
resetApiProviders();
|
|
4015
|
+
time("settings", "reload");
|
|
3909
4016
|
await this._modelRuntime.reloadConfig();
|
|
4017
|
+
// Resolving both scopes from the completed refresh avoids two extra availability
|
|
4018
|
+
// scans, but only a snapshot from a SUCCESSFUL refresh may be trusted: refresh()
|
|
4019
|
+
// swallows availability errors, so a failed scan must fall back to the runtime and
|
|
4020
|
+
// keep the previous refresh-and-surface-the-error behavior.
|
|
4021
|
+
const refreshedModels = this._modelRuntime.hasFreshAvailabilitySnapshot()
|
|
4022
|
+
? { getAvailable: async () => this._modelRuntime.getAvailableSnapshot() }
|
|
4023
|
+
: this._modelRuntime;
|
|
3910
4024
|
this.setScopedModels(await resolveModelScope(getModelNarrowingPatterns({
|
|
3911
4025
|
legacyEnabledPatterns: this.settingsManager.getEnabledModels(),
|
|
3912
|
-
}),
|
|
3913
|
-
this.setFavoriteModels(await resolveModelScope(this.settingsManager.getFavoriteModels() ?? [],
|
|
3914
|
-
|
|
3915
|
-
this.
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
4026
|
+
}), refreshedModels));
|
|
4027
|
+
this.setFavoriteModels(await resolveModelScope(this.settingsManager.getFavoriteModels() ?? [], refreshedModels));
|
|
4028
|
+
time("models", "reload");
|
|
4029
|
+
await this._resourceLoader.reload({ settingsAlreadyReloadedFor: this.settingsManager });
|
|
4030
|
+
time("resources", "reload");
|
|
4031
|
+
try {
|
|
4032
|
+
this._buildRuntime({
|
|
4033
|
+
activeToolNames: this.getActiveToolNames(),
|
|
4034
|
+
flagValues: previousFlagValues,
|
|
4035
|
+
includeAllExtensionTools: true,
|
|
4036
|
+
});
|
|
4037
|
+
}
|
|
4038
|
+
finally {
|
|
4039
|
+
// An extension removed by this reload must be told even if the rebuild throws
|
|
4040
|
+
// (e.g. _refreshToolRegistry rejecting an extension's tool metadata): the new
|
|
4041
|
+
// runner is already installed without it, so nothing else would dispose it.
|
|
4042
|
+
const newExtensionResolvedPaths = new Set(this._extensionRunner.getExtensionIdentities().map((extension) => extension.resolvedPath));
|
|
4043
|
+
const removed = oldExtensionIdentities.filter((extension) => !newExtensionResolvedPaths.has(extension.resolvedPath));
|
|
4044
|
+
if (removed.length > 0) {
|
|
4045
|
+
await oldExtensionRunner.emit({ type: "session_extensions_removed", reason: "reload", removed });
|
|
4046
|
+
}
|
|
4047
|
+
time("runtime", "reload");
|
|
4048
|
+
}
|
|
3920
4049
|
const hasBindings = this._extensionUIContext ||
|
|
3921
4050
|
this._extensionCommandContextActions ||
|
|
3922
4051
|
this._extensionShutdownHandler ||
|
|
@@ -3926,6 +4055,7 @@ export class AgentSession {
|
|
|
3926
4055
|
await this._extensionRunner.emit({ type: "session_start", reason: "reload" });
|
|
3927
4056
|
await this.extendResourcesFromExtensions("reload");
|
|
3928
4057
|
}
|
|
4058
|
+
time("lifecycle", "reload");
|
|
3929
4059
|
}
|
|
3930
4060
|
// =========================================================================
|
|
3931
4061
|
// Auto-Retry
|
|
@@ -4094,22 +4224,36 @@ export class AgentSession {
|
|
|
4094
4224
|
const providerDelayMs = isRefusal || hardErrorFallback ? undefined : this._getProviderRetryDelayMs(errorMessage);
|
|
4095
4225
|
const maxRetryDelayMs = this.settingsManager.getProviderRetrySettings().maxRetryDelayMs;
|
|
4096
4226
|
if (providerDelayMs !== undefined && providerDelayMs > maxRetryDelayMs) {
|
|
4097
|
-
this
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4227
|
+
// A wait this long means the model is unavailable rather than busy, so the
|
|
4228
|
+
// configured chain beats failing the turn. The switch is gated: the over-budget
|
|
4229
|
+
// branch above may have already switched on this same error, and hopping again
|
|
4230
|
+
// here would skip that candidate's own retry budget.
|
|
4231
|
+
if (!switchedFallback) {
|
|
4232
|
+
switchedFallback = await this._retryFallback.tryFallback("transient", {
|
|
4233
|
+
errorMessage,
|
|
4234
|
+
retryAfterMs: providerDelayMs,
|
|
4235
|
+
});
|
|
4236
|
+
if (switchedFallback) {
|
|
4237
|
+
this._retryAttempt = 1;
|
|
4238
|
+
}
|
|
4239
|
+
}
|
|
4240
|
+
if (!switchedFallback) {
|
|
4241
|
+
this._emit({
|
|
4242
|
+
type: "auto_retry_end",
|
|
4243
|
+
success: false,
|
|
4244
|
+
attempt: this._retryAttempt,
|
|
4245
|
+
finalError: `Provider requested retry delay ${providerDelayMs}ms, exceeding configured maximum ${maxRetryDelayMs}ms`,
|
|
4246
|
+
});
|
|
4247
|
+
this._retryAttempt = 0;
|
|
4248
|
+
this._resolveRetry();
|
|
4249
|
+
return "not-handled";
|
|
4250
|
+
}
|
|
4112
4251
|
}
|
|
4252
|
+
// Transient failures stay on the same model until the retry budget is spent;
|
|
4253
|
+
// only the over-budget branch above switches the chain. Both branches that can
|
|
4254
|
+
// reach this point with a fallback already applied (hard-error, refusal) set
|
|
4255
|
+
// switchedFallback first and force providerDelayMs undefined, so no branch may
|
|
4256
|
+
// be reordered to fall through here expecting an implicit switch.
|
|
4113
4257
|
const delayMs = switchedFallback ? 0 : (providerDelayMs ?? settings.baseDelayMs * 2 ** (this._retryAttempt - 1));
|
|
4114
4258
|
// Prepare before auto_retry_start so an immediate Esc can cancel the retry sleep.
|
|
4115
4259
|
this._retryAbortController = new AbortController();
|