@code-yeongyu/senpi 2026.7.31 → 2026.8.1
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 +237 -0
- package/dist/core/agent-session.d.ts +49 -13
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +120 -37
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/build.js +4 -0
- package/dist/core/dynamic-prompt/build.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.d.ts +2 -2
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.js +25 -25
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.d.ts +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.js +2 -2
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.d.ts +9 -9
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.js +2 -2
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.d.ts +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.js +3 -3
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts +21 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js +30 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/auth-lane.d.ts +8 -4
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/auth-lane.js +34 -25
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.d.ts +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.js +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.js +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts +14 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/guidance.js +37 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts +4 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/index.js +12 -10
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.d.ts +3 -3
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.js +2 -2
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts +18 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/options.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/options.js +70 -10
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.js +32 -19
- package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.d.ts +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts +30 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js +197 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts +18 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js +33 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts +3 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +134 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +85 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +270 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts +17 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +217 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts +49 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +204 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts +28 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js +107 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts +2 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js +10 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream.d.ts +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream.js +72 -53
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts +3 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js +25 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.d.ts +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.js +2 -2
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.d.ts.map +1 -1
- package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +18 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +69 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +28 -2
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +4 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +22 -17
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/task-intent.d.ts +2 -6
- package/dist/core/extensions/builtin/compaction/task-intent.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/task-intent.js +10 -9
- package/dist/core/extensions/builtin/compaction/task-intent.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +6 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.js +20 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -0
- package/dist/core/extensions/builtin/goal/continuation.d.ts +2 -4
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +2 -8
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts +19 -0
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js +48 -0
- package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js.map +1 -0
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +17 -15
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +12 -10
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +5 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +94 -52
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.d.ts +16 -0
- package/dist/core/extensions/builtin/goal/persistence.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.js +185 -11
- package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
- package/dist/core/extensions/builtin/goal/ui.d.ts +1 -0
- package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/ui.js +11 -2
- package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +15 -0
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +30 -3
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +5 -2
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/loop-guard/detectors.d.ts +31 -0
- package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/detectors.js +111 -0
- package/dist/core/extensions/builtin/loop-guard/detectors.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/index.d.ts +3 -0
- package/dist/core/extensions/builtin/loop-guard/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/index.js +31 -0
- package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/notice.d.ts +5 -0
- package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/notice.js +42 -0
- package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/policy.d.ts +30 -0
- package/dist/core/extensions/builtin/loop-guard/policy.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/policy.js +30 -0
- package/dist/core/extensions/builtin/loop-guard/policy.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/renderer.d.ts +4 -0
- package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/renderer.js +50 -0
- package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/similarity.d.ts +13 -0
- package/dist/core/extensions/builtin/loop-guard/similarity.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/similarity.js +51 -0
- package/dist/core/extensions/builtin/loop-guard/similarity.js.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/tracker.d.ts +13 -0
- package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -0
- package/dist/core/extensions/builtin/loop-guard/tracker.js +39 -0
- package/dist/core/extensions/builtin/loop-guard/tracker.js.map +1 -0
- package/dist/core/extensions/builtin/monitor-state-event.d.ts +10 -0
- package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
- package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js +10 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js +10 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js +11 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts +13 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js +60 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/index.js +8 -4
- package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +42 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +3 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +2 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/rules/index.js +4 -3
- package/dist/core/extensions/builtin/rules/index.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts +11 -0
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.js +11 -0
- package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/formatter.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/formatter.js +15 -1
- package/dist/core/extensions/builtin/rules/rules/formatter.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +23 -21
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +21 -7
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.js +42 -5
- package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +2 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +2 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts +37 -0
- package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js +61 -0
- package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-status.d.ts +9 -1
- package/dist/core/extensions/builtin/terminal/monitor-status.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-status.js +35 -2
- package/dist/core/extensions/builtin/terminal/monitor-status.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/commands.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/commands.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/commands.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js +6 -3
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.js +1 -1
- package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts +19 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.js +78 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -0
- package/dist/core/extensions/builtin/todotools/todo-widget.d.ts +13 -1
- package/dist/core/extensions/builtin/todotools/todo-widget.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget.js +32 -14
- package/dist/core/extensions/builtin/todotools/todo-widget.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js +88 -29
- package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
- package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tps.js +5 -2
- package/dist/core/extensions/builtin/tps.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts +4 -0
- package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts.map +1 -0
- package/dist/core/extensions/builtin/ttsr/builtin-rules.js +20 -0
- package/dist/core/extensions/builtin/ttsr/builtin-rules.js.map +1 -0
- package/dist/core/extensions/builtin/ttsr/commands.js +9 -1
- package/dist/core/extensions/builtin/ttsr/commands.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.js +4 -3
- package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.js +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.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 +1 -0
- 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 +16 -5
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts +4 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js +44 -37
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts +3 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js +12 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers.js +2 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.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 +3 -3
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/search.js +1 -3
- package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.js +2 -2
- package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -1
- 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/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +5 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +3 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +22 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/thinking-levels.d.ts +5 -0
- package/dist/core/thinking-levels.d.ts.map +1 -1
- package/dist/core/thinking-levels.js +9 -39
- package/dist/core/thinking-levels.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/app-server/server/account.d.ts +1 -1
- package/dist/modes/app-server/server/account.js +1 -1
- package/dist/modes/app-server/server/account.js.map +1 -1
- package/dist/modes/app-server/server/server-core.js +1 -1
- package/dist/modes/app-server/server/server-core.js.map +1 -1
- package/dist/modes/interactive/compaction-queue-transfer.d.ts +2 -0
- package/dist/modes/interactive/compaction-queue-transfer.d.ts.map +1 -1
- package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +9 -5
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +38 -12
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/risky-main-model-warning.d.ts +1 -1
- package/dist/modes/interactive/risky-main-model-warning.d.ts.map +1 -1
- package/dist/modes/interactive/risky-main-model-warning.js +1 -1
- package/dist/modes/interactive/risky-main-model-warning.js.map +1 -1
- package/dist/modes/rpc/connection-handler.js +3 -3
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/docs/extensions.md +10 -0
- package/docs/providers.md +21 -5
- package/docs/release-guide.md +2 -2
- package/docs/settings.md +1 -1
- package/examples/extensions/overlay-test.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +33 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +6 -3
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status-ticker.ts +79 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status.ts +36 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +26 -12
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +146 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +21 -119
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +157 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +62 -208
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +98 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +81 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-state.ts +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-eval-result.ts +140 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-notification-queue.ts +53 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +45 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +45 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +20 -342
- 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 +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.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 +10 -15
- 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.js +2 -2
- 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/openai-codex-responses/fallback-state.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js +70 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +2 -16
- 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 +10 -58
- 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.js +2 -2
- 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-prompt-cache.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +14 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +95 -19
- 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/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.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/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -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/unavailable-tool-text.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.js +36 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.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/mux.js +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +17 -3
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +6 -6
- package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts +0 -6
- package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/guidance.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts +0 -4
- package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/index.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/oauth-login.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/options.d.ts +0 -16
- package/dist/core/extensions/builtin/claude-agent-sdk/options.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/prompt-bridge.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts +0 -15
- package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/settings.js +0 -41
- package/dist/core/extensions/builtin/claude-agent-sdk/settings.js.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/stream.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-agent-sdk/stream.js.map +0 -1
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.js +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.js +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Box, Text } from "@earendil-works/pi-tui";
|
|
2
|
+
const BOLD = "\u001b[1m";
|
|
3
|
+
const BOLD_OFF = "\u001b[22m";
|
|
4
|
+
export const renderLoopGuardNotice = (message, options, theme) => {
|
|
5
|
+
const details = message.details;
|
|
6
|
+
if (details === undefined)
|
|
7
|
+
return undefined;
|
|
8
|
+
const box = new Box(1, 1, (text) => theme.bg("customMessageBg", text));
|
|
9
|
+
box.addChild(new Text(theme.fg("accent", `${BOLD}${titleLine(details)}${BOLD_OFF}`), 0, 0));
|
|
10
|
+
box.addChild(new Text(theme.fg("dim", whyLine(details)), 0, 0));
|
|
11
|
+
if (options.expanded) {
|
|
12
|
+
box.addChild(new Text(theme.fg("dim", expandedLine(details)), 0, 0));
|
|
13
|
+
}
|
|
14
|
+
return box;
|
|
15
|
+
};
|
|
16
|
+
function titleLine(detection) {
|
|
17
|
+
switch (detection.kind) {
|
|
18
|
+
case "identical":
|
|
19
|
+
return `⚠ Loop guard · identical calls ×${detection.count} (${detection.toolName})`;
|
|
20
|
+
case "similar":
|
|
21
|
+
return `⚠ Loop guard · near-identical calls ×${detection.count} (${detection.toolName})`;
|
|
22
|
+
case "cycle":
|
|
23
|
+
return `⚠ Loop guard · repeating pattern ×${detection.count} (period ${detection.period})`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function whyLine(detection) {
|
|
27
|
+
switch (detection.kind) {
|
|
28
|
+
case "identical":
|
|
29
|
+
return "Same tool, same arguments, again. The agent was told to reuse the result or change the call.";
|
|
30
|
+
case "similar": {
|
|
31
|
+
const percent = Math.round(detection.similarity * 100);
|
|
32
|
+
return `Argument similarity ~${percent}%. The agent was told to verify this is distinct work, not a lazy loop.`;
|
|
33
|
+
}
|
|
34
|
+
case "cycle": {
|
|
35
|
+
const pattern = detection.cycleTools.join(" -> ");
|
|
36
|
+
return `Tool-call cycle [${pattern}]. The agent was told to break the rotation or justify the progress.`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function expandedLine(detection) {
|
|
41
|
+
switch (detection.kind) {
|
|
42
|
+
case "identical":
|
|
43
|
+
return `tool ${detection.toolName} · ${detection.count} consecutive identical calls when the reminder fired`;
|
|
44
|
+
case "similar":
|
|
45
|
+
return `tool ${detection.toolName} · ${detection.count} consecutive same-tool calls at ~${Math.round(detection.similarity * 100)}% args similarity`;
|
|
46
|
+
case "cycle":
|
|
47
|
+
return `cycle ${detection.cycleTools.join(" -> ")} · ${detection.count} full repetitions in the tracked window`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop-guard/renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Box, Text } from \"@earendil-works/pi-tui\";\nimport type { MessageRenderer } from \"../../types.ts\";\nimport type { LoopGuardDetection } from \"./detectors.ts\";\n\nconst BOLD = \"\\u001b[1m\";\nconst BOLD_OFF = \"\\u001b[22m\";\n\nexport const renderLoopGuardNotice: MessageRenderer<LoopGuardDetection> = (message, options, theme) => {\n\tconst details = message.details;\n\tif (details === undefined) return undefined;\n\tconst box = new Box(1, 1, (text) => theme.bg(\"customMessageBg\", text));\n\tbox.addChild(new Text(theme.fg(\"accent\", `${BOLD}${titleLine(details)}${BOLD_OFF}`), 0, 0));\n\tbox.addChild(new Text(theme.fg(\"dim\", whyLine(details)), 0, 0));\n\tif (options.expanded) {\n\t\tbox.addChild(new Text(theme.fg(\"dim\", expandedLine(details)), 0, 0));\n\t}\n\treturn box;\n};\n\nfunction titleLine(detection: LoopGuardDetection): string {\n\tswitch (detection.kind) {\n\t\tcase \"identical\":\n\t\t\treturn `⚠ Loop guard · identical calls ×${detection.count} (${detection.toolName})`;\n\t\tcase \"similar\":\n\t\t\treturn `⚠ Loop guard · near-identical calls ×${detection.count} (${detection.toolName})`;\n\t\tcase \"cycle\":\n\t\t\treturn `⚠ Loop guard · repeating pattern ×${detection.count} (period ${detection.period})`;\n\t}\n}\n\nfunction whyLine(detection: LoopGuardDetection): string {\n\tswitch (detection.kind) {\n\t\tcase \"identical\":\n\t\t\treturn \"Same tool, same arguments, again. The agent was told to reuse the result or change the call.\";\n\t\tcase \"similar\": {\n\t\t\tconst percent = Math.round(detection.similarity * 100);\n\t\t\treturn `Argument similarity ~${percent}%. The agent was told to verify this is distinct work, not a lazy loop.`;\n\t\t}\n\t\tcase \"cycle\": {\n\t\t\tconst pattern = detection.cycleTools.join(\" -> \");\n\t\t\treturn `Tool-call cycle [${pattern}]. The agent was told to break the rotation or justify the progress.`;\n\t\t}\n\t}\n}\n\nfunction expandedLine(detection: LoopGuardDetection): string {\n\tswitch (detection.kind) {\n\t\tcase \"identical\":\n\t\t\treturn `tool ${detection.toolName} · ${detection.count} consecutive identical calls when the reminder fired`;\n\t\tcase \"similar\":\n\t\t\treturn `tool ${detection.toolName} · ${detection.count} consecutive same-tool calls at ~${Math.round(detection.similarity * 100)}% args similarity`;\n\t\tcase \"cycle\":\n\t\t\treturn `cycle ${detection.cycleTools.join(\" -> \")} · ${detection.count} full repetitions in the tracked window`;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character-bigram Sørensen–Dice similarity over canonical argument JSON.
|
|
3
|
+
*
|
|
4
|
+
* Chosen over token-level or edit-distance metrics because canonical JSON keeps
|
|
5
|
+
* structure stable (sorted keys, fixed separators), making bigram overlap a cheap
|
|
6
|
+
* and order-insensitive-enough proxy for "same call shape, slightly different values".
|
|
7
|
+
*/
|
|
8
|
+
export type BigramCounts = Map<string, number>;
|
|
9
|
+
export declare function bigramCounts(text: string): BigramCounts;
|
|
10
|
+
export declare function diceSimilarity(a: BigramCounts, b: BigramCounts): number;
|
|
11
|
+
/** Mean similarity between each adjacent pair of argument strings. */
|
|
12
|
+
export declare function meanAdjacentSimilarity(argStrings: readonly string[]): number;
|
|
13
|
+
//# sourceMappingURL=similarity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop-guard/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAOvD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAcvE;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAW5E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character-bigram Sørensen–Dice similarity over canonical argument JSON.
|
|
3
|
+
*
|
|
4
|
+
* Chosen over token-level or edit-distance metrics because canonical JSON keeps
|
|
5
|
+
* structure stable (sorted keys, fixed separators), making bigram overlap a cheap
|
|
6
|
+
* and order-insensitive-enough proxy for "same call shape, slightly different values".
|
|
7
|
+
*/
|
|
8
|
+
export function bigramCounts(text) {
|
|
9
|
+
const counts = new Map();
|
|
10
|
+
for (let i = 0; i < text.length - 1; i++) {
|
|
11
|
+
const gram = text.slice(i, i + 2);
|
|
12
|
+
counts.set(gram, (counts.get(gram) ?? 0) + 1);
|
|
13
|
+
}
|
|
14
|
+
return counts;
|
|
15
|
+
}
|
|
16
|
+
export function diceSimilarity(a, b) {
|
|
17
|
+
let totalA = 0;
|
|
18
|
+
for (const count of a.values())
|
|
19
|
+
totalA += count;
|
|
20
|
+
let totalB = 0;
|
|
21
|
+
for (const count of b.values())
|
|
22
|
+
totalB += count;
|
|
23
|
+
if (totalA === 0 && totalB === 0)
|
|
24
|
+
return 1;
|
|
25
|
+
if (totalA === 0 || totalB === 0)
|
|
26
|
+
return 0;
|
|
27
|
+
let intersection = 0;
|
|
28
|
+
const [small, large] = a.size <= b.size ? [a, b] : [b, a];
|
|
29
|
+
for (const [gram, count] of small) {
|
|
30
|
+
const other = large.get(gram);
|
|
31
|
+
if (other !== undefined)
|
|
32
|
+
intersection += Math.min(count, other);
|
|
33
|
+
}
|
|
34
|
+
return (2 * intersection) / (totalA + totalB);
|
|
35
|
+
}
|
|
36
|
+
/** Mean similarity between each adjacent pair of argument strings. */
|
|
37
|
+
export function meanAdjacentSimilarity(argStrings) {
|
|
38
|
+
if (argStrings.length < 2)
|
|
39
|
+
return 1;
|
|
40
|
+
const grams = argStrings.map(bigramCounts);
|
|
41
|
+
let total = 0;
|
|
42
|
+
for (let i = 0; i < grams.length - 1; i++) {
|
|
43
|
+
const current = grams[i];
|
|
44
|
+
const next = grams[i + 1];
|
|
45
|
+
if (current === undefined || next === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
total += diceSimilarity(current, next);
|
|
48
|
+
}
|
|
49
|
+
return total / (grams.length - 1);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=similarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop-guard/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAe,EAAE,CAAe;IAC9D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC;IAChD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC;IAChD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,sBAAsB,CAAC,UAA6B;IACnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAC1D,KAAK,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/**\n * Character-bigram Sørensen–Dice similarity over canonical argument JSON.\n *\n * Chosen over token-level or edit-distance metrics because canonical JSON keeps\n * structure stable (sorted keys, fixed separators), making bigram overlap a cheap\n * and order-insensitive-enough proxy for \"same call shape, slightly different values\".\n */\n\nexport type BigramCounts = Map<string, number>;\n\nexport function bigramCounts(text: string): BigramCounts {\n\tconst counts: BigramCounts = new Map();\n\tfor (let i = 0; i < text.length - 1; i++) {\n\t\tconst gram = text.slice(i, i + 2);\n\t\tcounts.set(gram, (counts.get(gram) ?? 0) + 1);\n\t}\n\treturn counts;\n}\n\nexport function diceSimilarity(a: BigramCounts, b: BigramCounts): number {\n\tlet totalA = 0;\n\tfor (const count of a.values()) totalA += count;\n\tlet totalB = 0;\n\tfor (const count of b.values()) totalB += count;\n\tif (totalA === 0 && totalB === 0) return 1;\n\tif (totalA === 0 || totalB === 0) return 0;\n\tlet intersection = 0;\n\tconst [small, large] = a.size <= b.size ? [a, b] : [b, a];\n\tfor (const [gram, count] of small) {\n\t\tconst other = large.get(gram);\n\t\tif (other !== undefined) intersection += Math.min(count, other);\n\t}\n\treturn (2 * intersection) / (totalA + totalB);\n}\n\n/** Mean similarity between each adjacent pair of argument strings. */\nexport function meanAdjacentSimilarity(argStrings: readonly string[]): number {\n\tif (argStrings.length < 2) return 1;\n\tconst grams = argStrings.map(bigramCounts);\n\tlet total = 0;\n\tfor (let i = 0; i < grams.length - 1; i++) {\n\t\tconst current = grams[i];\n\t\tconst next = grams[i + 1];\n\t\tif (current === undefined || next === undefined) continue;\n\t\ttotal += diceSimilarity(current, next);\n\t}\n\treturn total / (grams.length - 1);\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ToolCallRecord {
|
|
2
|
+
readonly toolName: string;
|
|
3
|
+
readonly argsJson: string;
|
|
4
|
+
readonly signature: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function canonicalizeArgs(args: unknown): string;
|
|
7
|
+
export declare class ToolCallTracker {
|
|
8
|
+
private calls;
|
|
9
|
+
record(toolName: string, args: unknown): void;
|
|
10
|
+
get records(): readonly ToolCallRecord[];
|
|
11
|
+
reset(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop-guard/tracker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD;AAgBD,qBAAa,eAAe;IAC3B,OAAO,CAAC,KAAK,CAAwB;IAErC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAM5C;IAED,IAAI,OAAO,IAAI,SAAS,cAAc,EAAE,CAEvC;IAED,KAAK,IAAI,IAAI,CAEZ;CACD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { TRACK_WINDOW } from "./policy.js";
|
|
2
|
+
export function canonicalizeArgs(args) {
|
|
3
|
+
return stableStringify(args ?? {});
|
|
4
|
+
}
|
|
5
|
+
function stableStringify(value) {
|
|
6
|
+
if (value === null || typeof value !== "object")
|
|
7
|
+
return JSON.stringify(value) ?? "null";
|
|
8
|
+
if (Array.isArray(value))
|
|
9
|
+
return `[${value.map((item) => stableStringify(item)).join(",")}]`;
|
|
10
|
+
const record = value;
|
|
11
|
+
const keys = Object.keys(record).sort();
|
|
12
|
+
const parts = [];
|
|
13
|
+
for (const key of keys) {
|
|
14
|
+
const entry = record[key];
|
|
15
|
+
if (entry === undefined)
|
|
16
|
+
continue;
|
|
17
|
+
parts.push(`${JSON.stringify(key)}:${stableStringify(entry)}`);
|
|
18
|
+
}
|
|
19
|
+
return `{${parts.join(",")}}`;
|
|
20
|
+
}
|
|
21
|
+
export class ToolCallTracker {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.calls = [];
|
|
24
|
+
}
|
|
25
|
+
record(toolName, args) {
|
|
26
|
+
const argsJson = canonicalizeArgs(args);
|
|
27
|
+
this.calls.push({ toolName, argsJson, signature: `${toolName}\u0000${argsJson}` });
|
|
28
|
+
if (this.calls.length > TRACK_WINDOW) {
|
|
29
|
+
this.calls = this.calls.slice(-TRACK_WINDOW);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
get records() {
|
|
33
|
+
return this.calls;
|
|
34
|
+
}
|
|
35
|
+
reset() {
|
|
36
|
+
this.calls = [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop-guard/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC7C,OAAO,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IACxF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7F,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,OAAO,eAAe;IAA5B;QACS,UAAK,GAAqB,EAAE,CAAC;IAiBtC,CAAC;IAfA,MAAM,CAAC,QAAgB,EAAE,IAAa;QACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,SAAS,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACjB,CAAC;CACD","sourcesContent":["import { TRACK_WINDOW } from \"./policy.ts\";\n\nexport interface ToolCallRecord {\n\treadonly toolName: string;\n\treadonly argsJson: string;\n\treadonly signature: string;\n}\n\nexport function canonicalizeArgs(args: unknown): string {\n\treturn stableStringify(args ?? {});\n}\n\nfunction stableStringify(value: unknown): string {\n\tif (value === null || typeof value !== \"object\") return JSON.stringify(value) ?? \"null\";\n\tif (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n\tconst record = value as Record<string, unknown>;\n\tconst keys = Object.keys(record).sort();\n\tconst parts: string[] = [];\n\tfor (const key of keys) {\n\t\tconst entry = record[key];\n\t\tif (entry === undefined) continue;\n\t\tparts.push(`${JSON.stringify(key)}:${stableStringify(entry)}`);\n\t}\n\treturn `{${parts.join(\",\")}}`;\n}\n\nexport class ToolCallTracker {\n\tprivate calls: ToolCallRecord[] = [];\n\n\trecord(toolName: string, args: unknown): void {\n\t\tconst argsJson = canonicalizeArgs(args);\n\t\tthis.calls.push({ toolName, argsJson, signature: `${toolName}\\u0000${argsJson}` });\n\t\tif (this.calls.length > TRACK_WINDOW) {\n\t\t\tthis.calls = this.calls.slice(-TRACK_WINDOW);\n\t\t}\n\t}\n\n\tget records(): readonly ToolCallRecord[] {\n\t\treturn this.calls;\n\t}\n\n\treset(): void {\n\t\tthis.calls = [];\n\t}\n}\n"]}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
export declare const TERMINAL_MONITOR_STATE_EVENT = "terminal_monitor_state";
|
|
2
|
+
/** One live watch as broadcast on the monitor state event; mirrors MonitorSnapshotEntry. */
|
|
3
|
+
export interface TerminalMonitorStateMonitorEntry {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly description: string;
|
|
6
|
+
readonly paused: boolean;
|
|
7
|
+
/** Epoch milliseconds when the watch registered; lets consumers render their own elapsed labels. */
|
|
8
|
+
readonly startedAtMs: number;
|
|
9
|
+
}
|
|
2
10
|
export interface TerminalMonitorStateEvent {
|
|
3
11
|
readonly activeCount: number;
|
|
12
|
+
/** Per-watch detail for consumers that need more than the count; absent in pre-enrichment payloads. */
|
|
13
|
+
readonly monitors?: readonly TerminalMonitorStateMonitorEntry[];
|
|
4
14
|
}
|
|
5
15
|
export declare function isTerminalMonitorStateEvent(data: unknown): data is TerminalMonitorStateEvent;
|
|
6
16
|
//# sourceMappingURL=monitor-state-event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-state-event.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/monitor-state-event.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,2BAA2B,CAAC;AAErE,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"monitor-state-event.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/monitor-state-event.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,2BAA2B,CAAC;AAErE,4FAA4F;AAC5F,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uGAAuG;IACvG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CAChE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,yBAAyB,CAS5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-state-event.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/monitor-state-event.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"monitor-state-event.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/monitor-state-event.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC;AAiBrE,MAAM,UAAU,2BAA2B,CAAC,IAAa;IACxD,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,aAAa,IAAI,IAAI;QACrB,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QACpC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,WAAW,IAAI,CAAC,CACrB,CAAC;AACH,CAAC","sourcesContent":["export const TERMINAL_MONITOR_STATE_EVENT = \"terminal_monitor_state\";\n\n/** One live watch as broadcast on the monitor state event; mirrors MonitorSnapshotEntry. */\nexport interface TerminalMonitorStateMonitorEntry {\n\treadonly id: string;\n\treadonly description: string;\n\treadonly paused: boolean;\n\t/** Epoch milliseconds when the watch registered; lets consumers render their own elapsed labels. */\n\treadonly startedAtMs: number;\n}\n\nexport interface TerminalMonitorStateEvent {\n\treadonly activeCount: number;\n\t/** Per-watch detail for consumers that need more than the count; absent in pre-enrichment payloads. */\n\treadonly monitors?: readonly TerminalMonitorStateMonitorEntry[];\n}\n\nexport function isTerminalMonitorStateEvent(data: unknown): data is TerminalMonitorStateEvent {\n\treturn (\n\t\ttypeof data === \"object\" &&\n\t\tdata !== null &&\n\t\t\"activeCount\" in data &&\n\t\ttypeof data.activeCount === \"number\" &&\n\t\tNumber.isInteger(data.activeCount) &&\n\t\tdata.activeCount >= 0\n\t);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-flash-0731.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAGlH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAS/F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { buildDynamicSystemPrompt } from "../../../dynamic-prompt/build.js";
|
|
2
|
+
import { buildDeepseekV4FlashIntro, buildDeepseekV4Tuning } from "./deepseek-v4.js";
|
|
3
|
+
export function buildDeepseekV4Flash0731Prompt(options) {
|
|
4
|
+
return buildDynamicSystemPrompt({
|
|
5
|
+
...options,
|
|
6
|
+
tuningSection: buildDeepseekV4Tuning("deepseek-v4-flash-0731", buildDeepseekV4FlashIntro("DeepSeek V4 Flash (0731 snapshot)")),
|
|
7
|
+
workstationDialect: "claude",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=deepseek-v4-flash-0731.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-flash-0731.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,UAAU,8BAA8B,CAAC,OAAwC;IACtF,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,aAAa,EAAE,qBAAqB,CACnC,wBAAwB,EACxB,yBAAyB,CAAC,mCAAmC,CAAC,CAC9D;QACD,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { buildDeepseekV4FlashIntro, buildDeepseekV4Tuning } from \"./deepseek-v4.ts\";\n\nexport function buildDeepseekV4Flash0731Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\ttuningSection: buildDeepseekV4Tuning(\n\t\t\t\"deepseek-v4-flash-0731\",\n\t\t\tbuildDeepseekV4FlashIntro(\"DeepSeek V4 Flash (0731 snapshot)\"),\n\t\t),\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-flash.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-flash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAGlH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAM3F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { buildDynamicSystemPrompt } from "../../../dynamic-prompt/build.js";
|
|
2
|
+
import { buildDeepseekV4FlashIntro, buildDeepseekV4Tuning } from "./deepseek-v4.js";
|
|
3
|
+
export function buildDeepseekV4FlashPrompt(options) {
|
|
4
|
+
return buildDynamicSystemPrompt({
|
|
5
|
+
...options,
|
|
6
|
+
tuningSection: buildDeepseekV4Tuning("deepseek-v4-flash", buildDeepseekV4FlashIntro("DeepSeek V4 Flash")),
|
|
7
|
+
workstationDialect: "claude",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=deepseek-v4-flash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-flash.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-flash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,UAAU,0BAA0B,CAAC,OAAwC;IAClF,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,aAAa,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;QACzG,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { buildDeepseekV4FlashIntro, buildDeepseekV4Tuning } from \"./deepseek-v4.ts\";\n\nexport function buildDeepseekV4FlashPrompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\ttuningSection: buildDeepseekV4Tuning(\"deepseek-v4-flash\", buildDeepseekV4FlashIntro(\"DeepSeek V4 Flash\")),\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-pro.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-pro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAMlH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAMzF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { buildDynamicSystemPrompt } from "../../../dynamic-prompt/build.js";
|
|
2
|
+
import { buildDeepseekV4Tuning } from "./deepseek-v4.js";
|
|
3
|
+
const PRO_INTRO = "You are running on DeepSeek V4 Pro - a deep reasoner with a decisive finish. Reasoning depth is a budget spent on the problem, not a ritual: routine classification, file edits, and lookups are decided directly, while hard design and debugging work gets the full depth.";
|
|
4
|
+
export function buildDeepseekV4ProPrompt(options) {
|
|
5
|
+
return buildDynamicSystemPrompt({
|
|
6
|
+
...options,
|
|
7
|
+
tuningSection: buildDeepseekV4Tuning("deepseek-v4-pro", PRO_INTRO),
|
|
8
|
+
workstationDialect: "claude",
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=deepseek-v4-pro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4-pro.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4-pro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,SAAS,GACd,8QAA8Q,CAAC;AAEhR,MAAM,UAAU,wBAAwB,CAAC,OAAwC;IAChF,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,aAAa,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,SAAS,CAAC;QAClE,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { buildDeepseekV4Tuning } from \"./deepseek-v4.ts\";\n\nconst PRO_INTRO =\n\t\"You are running on DeepSeek V4 Pro - a deep reasoner with a decisive finish. Reasoning depth is a budget spent on the problem, not a ritual: routine classification, file edits, and lookups are decided directly, while hard design and debugging work gets the full depth.\";\n\nexport function buildDeepseekV4ProPrompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\ttuningSection: buildDeepseekV4Tuning(\"deepseek-v4-pro\", PRO_INTRO),\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type DeepseekV4RuleId = "injected-directive-authority" | "todo-discipline" | "missing-info" | "settled-reading" | "reasoning-aim";
|
|
2
|
+
export type DeepseekV4Concern = "harness-contract" | "todo" | "grounding" | "deliberation";
|
|
3
|
+
export type DeepseekV4PresetName = "deepseek-v4-flash" | "deepseek-v4-flash-0731" | "deepseek-v4-pro";
|
|
4
|
+
export interface DeepseekV4Rule {
|
|
5
|
+
readonly id: DeepseekV4RuleId;
|
|
6
|
+
readonly concern: DeepseekV4Concern;
|
|
7
|
+
readonly presets: readonly DeepseekV4PresetName[];
|
|
8
|
+
readonly directive: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const DEEPSEEK_V4_RULES: readonly DeepseekV4Rule[];
|
|
11
|
+
export declare function buildDeepseekV4FlashIntro(modelLabel: string): string;
|
|
12
|
+
export declare function buildDeepseekV4Tuning(preset: DeepseekV4PresetName, intro: string): string;
|
|
13
|
+
//# sourceMappingURL=deepseek-v4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,gBAAgB,GACzB,8BAA8B,GAC9B,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,eAAe,CAAC;AAEnB,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;AAE3F,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,iBAAiB,CAAC;AAEtG,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAKD,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAoCtD,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Shared DeepSeek V4 family tuning.
|
|
2
|
+
//
|
|
3
|
+
// DeepSeek V4 is a structure-follower: the chat-deep.ai prompt guide's live
|
|
4
|
+
// benchmark (2026-07-28) measured explicit task/constraint/verification
|
|
5
|
+
// structure lifting compliance from 7.1/10 to 9.6/10, and DeepSeek's own docs
|
|
6
|
+
// route behavior through settings, not incantations. The presets therefore
|
|
7
|
+
// stay thin tuningSection wrappers over the shared dynamic core and carry only
|
|
8
|
+
// trained-prior overrides, stated once each as typed rule data (gpt-5.6.ts
|
|
9
|
+
// precedent) so tests assert parsed rules instead of pinned sentences.
|
|
10
|
+
//
|
|
11
|
+
// The overrides come from observed failure transcripts on
|
|
12
|
+
// DeepSeek-V4-Flash-0731 (2026-07-31): the model audits the provenance of
|
|
13
|
+
// harness-injected directives ("the user didn't say ulw-loop... probably
|
|
14
|
+
// residual context"), downsizes mandated workflows as too heavy, oscillates on
|
|
15
|
+
// settled readings ("Actually wait - let me reconsider"), and never updates
|
|
16
|
+
// the todo list. Each rule replaces that prior with a positive decision rule
|
|
17
|
+
// and a terminal condition; none of them restate behavior the shared core
|
|
18
|
+
// already carries.
|
|
19
|
+
const ALL_PRESETS = ["deepseek-v4-flash", "deepseek-v4-flash-0731", "deepseek-v4-pro"];
|
|
20
|
+
const FLASH_LINE = ["deepseek-v4-flash", "deepseek-v4-flash-0731"];
|
|
21
|
+
export const DEEPSEEK_V4_RULES = [
|
|
22
|
+
{
|
|
23
|
+
id: "injected-directive-authority",
|
|
24
|
+
concern: "harness-contract",
|
|
25
|
+
presets: ALL_PRESETS,
|
|
26
|
+
directive: 'Injected directives are binding: skill contents, mode directives such as ultrawork or ulw-loop, and hook or system messages that appear in the conversation carry the same authority as words the user typed. Presence means it applies to the current task at its prescribed weight - the harness already decided by injecting it. Whether it was "really requested", is "residual context", or feels "too heavy" for the task are settled questions: spend zero reasoning on them and execute the directive as written.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "todo-discipline",
|
|
30
|
+
concern: "todo",
|
|
31
|
+
presets: ALL_PRESETS,
|
|
32
|
+
directive: "On any multi-step task, write the todo list before the first edit and keep it live: one atomic item per step, exactly one item in progress, and each item marked completed the moment it finishes. Update the list at every state transition - never batch updates at the end, and never work a step the list does not show. A todo list that lags reality is a defect to fix before continuing, not an optimization to skip.",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "missing-info",
|
|
36
|
+
concern: "grounding",
|
|
37
|
+
presets: ALL_PRESETS,
|
|
38
|
+
directive: "When required information is missing, name it and get it - a file read, a tool call, or one specific question - instead of inventing it.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "settled-reading",
|
|
42
|
+
concern: "deliberation",
|
|
43
|
+
presets: FLASH_LINE,
|
|
44
|
+
directive: 'Commit to one reading and act on it: once you settle an interpretation of the request or an instruction, reopen it only when a tool result contradicts it. "Wait, let me reconsider" loops over the same evidence add no information - decide, verify with a cheap tool call, and move on.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "reasoning-aim",
|
|
48
|
+
concern: "deliberation",
|
|
49
|
+
presets: ["deepseek-v4-pro"],
|
|
50
|
+
directive: "Aim extended reasoning at the problem - the code, the design, the failure - and end it in an action. When reasoning stalls on a missing fact, stop deliberating and fetch the fact; a cheap read beats a long internal debate. Deliver a conclusion and a recommendation, not a survey of options.",
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
export function buildDeepseekV4FlashIntro(modelLabel) {
|
|
54
|
+
return `You are running on ${modelLabel} - fast, literal, and structure-first. Read instructions as decision rules: literal scopes are literal ("every", "all", and "each" mean the full set), mechanical or already-specified work is executed directly, and deliberation is saved for genuine risk - ambiguity, failure, irreversible operations.`;
|
|
55
|
+
}
|
|
56
|
+
export function buildDeepseekV4Tuning(preset, intro) {
|
|
57
|
+
const directives = DEEPSEEK_V4_RULES.filter((rule) => rule.presets.includes(preset)).map((rule) => rule.directive);
|
|
58
|
+
return [intro, ...directives].join("\n\n");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=deepseek-v4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-v4.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/deepseek-v4.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,uEAAuE;AACvE,EAAE;AACF,0DAA0D;AAC1D,0EAA0E;AAC1E,yEAAyE;AACzE,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,0EAA0E;AAC1E,mBAAmB;AAoBnB,MAAM,WAAW,GAAoC,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;AACxH,MAAM,UAAU,GAAoC,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC3D;QACC,EAAE,EAAE,8BAA8B;QAClC,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,WAAW;QACpB,SAAS,EACR,2fAA2f;KAC5f;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,WAAW;QACpB,SAAS,EACR,+ZAA+Z;KACha;IACD;QACC,EAAE,EAAE,cAAc;QAClB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,WAAW;QACpB,SAAS,EACR,0IAA0I;KAC3I;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,UAAU;QACnB,SAAS,EACR,4RAA4R;KAC7R;IACD;QACC,EAAE,EAAE,eAAe;QACnB,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,SAAS,EACR,oSAAoS;KACrS;CACD,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC3D,OAAO,sBAAsB,UAAU,6SAA6S,CAAC;AACtV,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA4B,EAAE,KAAa;IAChF,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnH,OAAO,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["// Shared DeepSeek V4 family tuning.\n//\n// DeepSeek V4 is a structure-follower: the chat-deep.ai prompt guide's live\n// benchmark (2026-07-28) measured explicit task/constraint/verification\n// structure lifting compliance from 7.1/10 to 9.6/10, and DeepSeek's own docs\n// route behavior through settings, not incantations. The presets therefore\n// stay thin tuningSection wrappers over the shared dynamic core and carry only\n// trained-prior overrides, stated once each as typed rule data (gpt-5.6.ts\n// precedent) so tests assert parsed rules instead of pinned sentences.\n//\n// The overrides come from observed failure transcripts on\n// DeepSeek-V4-Flash-0731 (2026-07-31): the model audits the provenance of\n// harness-injected directives (\"the user didn't say ulw-loop... probably\n// residual context\"), downsizes mandated workflows as too heavy, oscillates on\n// settled readings (\"Actually wait - let me reconsider\"), and never updates\n// the todo list. Each rule replaces that prior with a positive decision rule\n// and a terminal condition; none of them restate behavior the shared core\n// already carries.\n\nexport type DeepseekV4RuleId =\n\t| \"injected-directive-authority\"\n\t| \"todo-discipline\"\n\t| \"missing-info\"\n\t| \"settled-reading\"\n\t| \"reasoning-aim\";\n\nexport type DeepseekV4Concern = \"harness-contract\" | \"todo\" | \"grounding\" | \"deliberation\";\n\nexport type DeepseekV4PresetName = \"deepseek-v4-flash\" | \"deepseek-v4-flash-0731\" | \"deepseek-v4-pro\";\n\nexport interface DeepseekV4Rule {\n\treadonly id: DeepseekV4RuleId;\n\treadonly concern: DeepseekV4Concern;\n\treadonly presets: readonly DeepseekV4PresetName[];\n\treadonly directive: string;\n}\n\nconst ALL_PRESETS: readonly DeepseekV4PresetName[] = [\"deepseek-v4-flash\", \"deepseek-v4-flash-0731\", \"deepseek-v4-pro\"];\nconst FLASH_LINE: readonly DeepseekV4PresetName[] = [\"deepseek-v4-flash\", \"deepseek-v4-flash-0731\"];\n\nexport const DEEPSEEK_V4_RULES: readonly DeepseekV4Rule[] = [\n\t{\n\t\tid: \"injected-directive-authority\",\n\t\tconcern: \"harness-contract\",\n\t\tpresets: ALL_PRESETS,\n\t\tdirective:\n\t\t\t'Injected directives are binding: skill contents, mode directives such as ultrawork or ulw-loop, and hook or system messages that appear in the conversation carry the same authority as words the user typed. Presence means it applies to the current task at its prescribed weight - the harness already decided by injecting it. Whether it was \"really requested\", is \"residual context\", or feels \"too heavy\" for the task are settled questions: spend zero reasoning on them and execute the directive as written.',\n\t},\n\t{\n\t\tid: \"todo-discipline\",\n\t\tconcern: \"todo\",\n\t\tpresets: ALL_PRESETS,\n\t\tdirective:\n\t\t\t\"On any multi-step task, write the todo list before the first edit and keep it live: one atomic item per step, exactly one item in progress, and each item marked completed the moment it finishes. Update the list at every state transition - never batch updates at the end, and never work a step the list does not show. A todo list that lags reality is a defect to fix before continuing, not an optimization to skip.\",\n\t},\n\t{\n\t\tid: \"missing-info\",\n\t\tconcern: \"grounding\",\n\t\tpresets: ALL_PRESETS,\n\t\tdirective:\n\t\t\t\"When required information is missing, name it and get it - a file read, a tool call, or one specific question - instead of inventing it.\",\n\t},\n\t{\n\t\tid: \"settled-reading\",\n\t\tconcern: \"deliberation\",\n\t\tpresets: FLASH_LINE,\n\t\tdirective:\n\t\t\t'Commit to one reading and act on it: once you settle an interpretation of the request or an instruction, reopen it only when a tool result contradicts it. \"Wait, let me reconsider\" loops over the same evidence add no information - decide, verify with a cheap tool call, and move on.',\n\t},\n\t{\n\t\tid: \"reasoning-aim\",\n\t\tconcern: \"deliberation\",\n\t\tpresets: [\"deepseek-v4-pro\"],\n\t\tdirective:\n\t\t\t\"Aim extended reasoning at the problem - the code, the design, the failure - and end it in an action. When reasoning stalls on a missing fact, stop deliberating and fetch the fact; a cheap read beats a long internal debate. Deliver a conclusion and a recommendation, not a survey of options.\",\n\t},\n];\n\nexport function buildDeepseekV4FlashIntro(modelLabel: string): string {\n\treturn `You are running on ${modelLabel} - fast, literal, and structure-first. Read instructions as decision rules: literal scopes are literal (\"every\", \"all\", and \"each\" mean the full set), mechanical or already-specified work is executed directly, and deliberation is saved for genuine risk - ambiguity, failure, irreversible operations.`;\n}\n\nexport function buildDeepseekV4Tuning(preset: DeepseekV4PresetName, intro: string): string {\n\tconst directives = DEEPSEEK_V4_RULES.filter((rule) => rule.presets.includes(preset)).map((rule) => rule.directive);\n\treturn [intro, ...directives].join(\"\\n\\n\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,gBAAgB,CAAC;AAoDvF,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA2BpE"}
|
|
@@ -18,14 +18,18 @@ function getSettings(ctx) {
|
|
|
18
18
|
function getPresetName(ctx, event) {
|
|
19
19
|
const model = event?.model ?? ctx.model;
|
|
20
20
|
if (!model) {
|
|
21
|
-
return
|
|
21
|
+
return undefined;
|
|
22
22
|
}
|
|
23
|
-
return resolvePresetName(model, getSettings(ctx))
|
|
23
|
+
return resolvePresetName(model, getSettings(ctx));
|
|
24
24
|
}
|
|
25
25
|
function refreshHeader(ctx, event) {
|
|
26
26
|
const presetName = getPresetName(ctx, event);
|
|
27
|
+
if (!presetName) {
|
|
28
|
+
ctx.ui.setHeader(undefined);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
27
31
|
ctx.ui.setHeader((_tui, theme) => ({
|
|
28
|
-
render: () => [theme.fg("accent", theme.bold(`
|
|
32
|
+
render: () => [theme.fg("accent", theme.bold(`Optimized system prompt applied: ${presetName}`))],
|
|
29
33
|
invalidate: () => { },
|
|
30
34
|
}));
|
|
31
35
|
}
|
|
@@ -49,7 +53,7 @@ export default function promptPresetExtension(pi) {
|
|
|
49
53
|
const preset = resolvePreset(event.model, getSettings(ctx), eventOptionsToBuilderInput(event, ctx));
|
|
50
54
|
return {
|
|
51
55
|
systemPrompt: preset?.prompt ?? null,
|
|
52
|
-
systemPromptName: preset?.name
|
|
56
|
+
systemPromptName: preset?.name,
|
|
53
57
|
};
|
|
54
58
|
});
|
|
55
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAWzD,SAAS,0BAA0B,CAClC,KAAmE,EACnE,GAAkC;IAElC,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAChD,OAAO;QACN,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;QAC3B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAqB;IACzC,OAAO,wBAAwB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,GAAqB,EAAE,KAAuC;IACpF,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BuildDynamicSystemPromptOptions } from \"../../../dynamic-prompt/build.ts\";\nimport { SettingsManager } from \"../../../settings-manager.ts\";\nimport type { ExtensionAPI, ExtensionContext, ModelSelectEvent } from \"../../types.ts\";\nimport { resolvePreset, resolvePresetName } from \"./presets.ts\";\nimport { loadPromptPresetSettings } from \"./settings.ts\";\n\ninterface SystemPromptOptionsLike {\n\tcwd?: string;\n\tselectedTools?: string[];\n\ttoolSnippets?: Record<string, string>;\n\tpromptGuidelines?: string[];\n\tcontextFiles?: Array<{ path: string; content: string }>;\n\tskills?: BuildDynamicSystemPromptOptions[\"skills\"];\n}\n\nfunction eventOptionsToBuilderInput(\n\tevent: { systemPromptOptions: SystemPromptOptionsLike | undefined },\n\tctx: Pick<ExtensionContext, \"cwd\">,\n): Partial<BuildDynamicSystemPromptOptions> {\n\tconst options = event.systemPromptOptions ?? {};\n\treturn {\n\t\tcwd: options.cwd ?? ctx.cwd,\n\t\tselectedTools: options.selectedTools,\n\t\ttoolSnippets: options.toolSnippets,\n\t\tpromptGuidelines: options.promptGuidelines,\n\t\tcontextFiles: options.contextFiles,\n\t\tskills: options.skills,\n\t};\n}\n\nfunction getSettings(ctx: ExtensionContext): ReturnType<typeof loadPromptPresetSettings> {\n\treturn loadPromptPresetSettings(SettingsManager.create(ctx.cwd));\n}\n\nfunction getPresetName(ctx: ExtensionContext, event?: Pick<ModelSelectEvent, \"model\">): string | undefined {\n\tconst model = event?.model ?? ctx.model;\n\tif (!model) {\n\t\treturn undefined;\n\t}\n\treturn resolvePresetName(model, getSettings(ctx));\n}\n\nfunction refreshHeader(ctx: ExtensionContext, event?: Pick<ModelSelectEvent, \"model\">): void {\n\tconst presetName = getPresetName(ctx, event);\n\tif (!presetName) {\n\t\tctx.ui.setHeader(undefined);\n\t\treturn;\n\t}\n\tctx.ui.setHeader((_tui, theme) => ({\n\t\trender: () => [theme.fg(\"accent\", theme.bold(`Optimized system prompt applied: ${presetName}`))],\n\t\tinvalidate: () => {},\n\t}));\n}\n\nexport default function promptPresetExtension(pi: ExtensionAPI): void {\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tconst model = ctx.model;\n\t\tif (!model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst preset = resolvePreset(model, getSettings(ctx), eventOptionsToBuilderInput(event, ctx));\n\t\tif (!preset) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn { systemPrompt: preset.prompt };\n\t});\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\trefreshHeader(ctx);\n\t});\n\n\tpi.on(\"model_select\", async (event, ctx) => {\n\t\trefreshHeader(ctx, event);\n\t\tconst preset = resolvePreset(event.model, getSettings(ctx), eventOptionsToBuilderInput(event, ctx));\n\t\treturn {\n\t\t\tsystemPrompt: preset?.prompt ?? null,\n\t\t\tsystemPromptName: preset?.name,\n\t\t};\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAqBxF,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAEpG,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,KAAK,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAC5D,KAAK,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,GAAG;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CACf;AAiID,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,GAC5B,kBAAkB,GAAG,SAAS,CAkDhC;AA0DD,wBAAgB,aAAa,CAC5B,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,GAChD,oBAAoB,GAAG,SAAS,CAMlC"}
|
|
@@ -4,6 +4,9 @@ import { buildClaudeOpus46Prompt } from "./claude-opus-4-6.js";
|
|
|
4
4
|
import { buildClaudeOpus47Prompt } from "./claude-opus-4-7.js";
|
|
5
5
|
import { buildClaudeOpus48Prompt } from "./claude-opus-4-8.js";
|
|
6
6
|
import { buildClaudeOpus5Prompt } from "./claude-opus-5.js";
|
|
7
|
+
import { buildDeepseekV4FlashPrompt } from "./deepseek-v4-flash.js";
|
|
8
|
+
import { buildDeepseekV4Flash0731Prompt } from "./deepseek-v4-flash-0731.js";
|
|
9
|
+
import { buildDeepseekV4ProPrompt } from "./deepseek-v4-pro.js";
|
|
7
10
|
import { buildGlm52Prompt } from "./glm-5-2.js";
|
|
8
11
|
import { buildGpt52Prompt } from "./gpt-5.2.js";
|
|
9
12
|
import { buildGpt53CodexPrompt } from "./gpt-5.3-codex.js";
|
|
@@ -57,6 +60,29 @@ function hasKimiK3Signal(value) {
|
|
|
57
60
|
function isKimiK3Model(model) {
|
|
58
61
|
return hasKimiK3Signal(model.id) || (model.name !== undefined && hasKimiK3Signal(model.name));
|
|
59
62
|
}
|
|
63
|
+
// DeepSeek V4 id shapes verified against the OpenRouter live API, models.dev,
|
|
64
|
+
// and senpi's generated provider catalogs (2026-07-31): deepseek-v4-flash,
|
|
65
|
+
// deepseek/deepseek-v4-flash-0731, deepseek-ai/DeepSeek-V4-Pro,
|
|
66
|
+
// accounts/fireworks/models/deepseek-v4-flash, aihubmix's alicloud-deepseek-v4-*,
|
|
67
|
+
// and trailing tags (:free, -free, :thinking, -nothinking, -cheaper, -lightning, -el).
|
|
68
|
+
function hasDeepseekV4Flash0731Signal(value) {
|
|
69
|
+
return /(?:^|[/@:._-])deepseek[._-]v4[._-]flash[._-]0731(?:$|[/@:._-])/.test(normalizeModelId(value));
|
|
70
|
+
}
|
|
71
|
+
function isDeepseekV4Flash0731Model(model) {
|
|
72
|
+
return (hasDeepseekV4Flash0731Signal(model.id) || (model.name !== undefined && hasDeepseekV4Flash0731Signal(model.name)));
|
|
73
|
+
}
|
|
74
|
+
function hasDeepseekV4FlashSignal(value) {
|
|
75
|
+
return /(?:^|[/@:._-])deepseek[._-]v4[._-]flash(?:$|[/@:._-])/.test(normalizeModelId(value));
|
|
76
|
+
}
|
|
77
|
+
function isDeepseekV4FlashModel(model) {
|
|
78
|
+
return hasDeepseekV4FlashSignal(model.id) || (model.name !== undefined && hasDeepseekV4FlashSignal(model.name));
|
|
79
|
+
}
|
|
80
|
+
function hasDeepseekV4ProSignal(value) {
|
|
81
|
+
return /(?:^|[/@:._-])deepseek[._-]v4[._-]pro(?:$|[/@:._-])/.test(normalizeModelId(value));
|
|
82
|
+
}
|
|
83
|
+
function isDeepseekV4ProModel(model) {
|
|
84
|
+
return hasDeepseekV4ProSignal(model.id) || (model.name !== undefined && hasDeepseekV4ProSignal(model.name));
|
|
85
|
+
}
|
|
60
86
|
function hasGlm52Signal(value) {
|
|
61
87
|
return /(?:^|[/@._-])glm(?:[._-]|p)5(?:[._-]|p)2(?:$|[/@._:-])/.test(normalizeModelId(value));
|
|
62
88
|
}
|
|
@@ -127,6 +153,16 @@ export function resolvePresetName(model, settings) {
|
|
|
127
153
|
if (isGlm52Model(model)) {
|
|
128
154
|
return "glm-5.2";
|
|
129
155
|
}
|
|
156
|
+
// The dated snapshot must resolve before the generic flash alias.
|
|
157
|
+
if (isDeepseekV4Flash0731Model(model)) {
|
|
158
|
+
return "deepseek-v4-flash-0731";
|
|
159
|
+
}
|
|
160
|
+
if (isDeepseekV4FlashModel(model)) {
|
|
161
|
+
return "deepseek-v4-flash";
|
|
162
|
+
}
|
|
163
|
+
if (isDeepseekV4ProModel(model)) {
|
|
164
|
+
return "deepseek-v4-pro";
|
|
165
|
+
}
|
|
130
166
|
if (isGrok45Model(model)) {
|
|
131
167
|
return "grok-4.5";
|
|
132
168
|
}
|
|
@@ -148,6 +184,12 @@ function buildPreset(name, options) {
|
|
|
148
184
|
return { name, prompt: buildGpt5Prompt(options) };
|
|
149
185
|
case "glm-5.2":
|
|
150
186
|
return { name, prompt: buildGlm52Prompt(options) };
|
|
187
|
+
case "deepseek-v4-flash":
|
|
188
|
+
return { name, prompt: buildDeepseekV4FlashPrompt(options) };
|
|
189
|
+
case "deepseek-v4-flash-0731":
|
|
190
|
+
return { name, prompt: buildDeepseekV4Flash0731Prompt(options) };
|
|
191
|
+
case "deepseek-v4-pro":
|
|
192
|
+
return { name, prompt: buildDeepseekV4ProPrompt(options) };
|
|
151
193
|
case "grok-4.5":
|
|
152
194
|
return { name, prompt: buildGrok45Prompt(options) };
|
|
153
195
|
case "kimi-k3":
|