openhorse 0.2.19 → 0.2.22
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/dist/agents/coordinator.d.ts.map +1 -1
- package/dist/agents/fork.d.ts.map +1 -1
- package/dist/agents/fork.js +0 -1
- package/dist/agents/fork.js.map +1 -1
- package/dist/agents/worker-pool.d.ts.map +1 -1
- package/dist/agents/worker-pool.js +3 -1
- package/dist/agents/worker-pool.js.map +1 -1
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +202 -77
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/parser.d.ts.map +1 -1
- package/dist/commands/parser.js +8 -3
- package/dist/commands/parser.js.map +1 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/core/checkpoint.d.ts.map +1 -1
- package/dist/core/checkpoint.js +3 -0
- package/dist/core/checkpoint.js.map +1 -1
- package/dist/core/cost-tracker.d.ts +45 -5
- package/dist/core/cost-tracker.d.ts.map +1 -1
- package/dist/core/cost-tracker.js +78 -13
- package/dist/core/cost-tracker.js.map +1 -1
- package/dist/framework/index.d.ts +1 -1
- package/dist/framework/index.d.ts.map +1 -1
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/prompt.d.ts.map +1 -1
- package/dist/framework/prompt.js +16 -0
- package/dist/framework/prompt.js.map +1 -1
- package/dist/framework/query.d.ts +25 -0
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +196 -56
- package/dist/framework/query.js.map +1 -1
- package/dist/framework/store.d.ts +6 -1
- package/dist/framework/store.d.ts.map +1 -1
- package/dist/framework/store.js +10 -1
- package/dist/framework/store.js.map +1 -1
- package/dist/harness/context-harness.d.ts.map +1 -1
- package/dist/harness/context-harness.js +6 -1
- package/dist/harness/context-harness.js.map +1 -1
- package/dist/harness/ledger.d.ts +1 -0
- package/dist/harness/ledger.d.ts.map +1 -1
- package/dist/harness/ledger.js +12 -0
- package/dist/harness/ledger.js.map +1 -1
- package/dist/harness/safety.d.ts +2 -0
- package/dist/harness/safety.d.ts.map +1 -1
- package/dist/harness/safety.js +27 -3
- package/dist/harness/safety.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/ink-ui/components/Markdown.d.ts +1 -1
- package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
- package/dist/ink-ui/components/Markdown.js +1 -1
- package/dist/ink-ui/components/Markdown.js.map +1 -1
- package/dist/ink-ui/components/StatusLine.d.ts.map +1 -1
- package/dist/ink-ui/components/StatusLine.js +0 -2
- package/dist/ink-ui/components/StatusLine.js.map +1 -1
- package/dist/ink-ui/runtime/grapheme.d.ts +9 -8
- package/dist/ink-ui/runtime/grapheme.d.ts.map +1 -1
- package/dist/ink-ui/runtime/grapheme.js +14 -60
- package/dist/ink-ui/runtime/grapheme.js.map +1 -1
- package/dist/ink-ui/runtime/input-buffer.d.ts +9 -31
- package/dist/ink-ui/runtime/input-buffer.d.ts.map +1 -1
- package/dist/ink-ui/runtime/input-buffer.js +15 -162
- package/dist/ink-ui/runtime/input-buffer.js.map +1 -1
- package/dist/ink-ui/runtime/native-cursor.js +0 -25
- package/dist/ink-ui/runtime/native-cursor.js.map +1 -1
- package/dist/ink-ui/runtime/prompt-layout.d.ts +9 -29
- package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -1
- package/dist/ink-ui/runtime/prompt-layout.js +18 -166
- package/dist/ink-ui/runtime/prompt-layout.js.map +1 -1
- package/dist/ink-ui/runtime/transcript-state.d.ts.map +1 -1
- package/dist/ink-ui/runtime/transcript-state.js +2 -0
- package/dist/ink-ui/runtime/transcript-state.js.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.js +23 -5
- package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
- package/dist/memory/entrypoint.js +1 -1
- package/dist/memory/entrypoint.js.map +1 -1
- package/dist/memory/storage.js +1 -1
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/store.d.ts +1 -0
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +9 -0
- package/dist/memory/store.js.map +1 -1
- package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-controller.js +25 -0
- package/dist/runtime/agent-runtime-controller.js.map +1 -1
- package/dist/runtime/agent-runtime-protocol.d.ts +4 -1
- package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-protocol.js +6 -0
- package/dist/runtime/agent-runtime-protocol.js.map +1 -1
- package/dist/runtime/chat-controller.d.ts +27 -0
- package/dist/runtime/chat-controller.d.ts.map +1 -1
- package/dist/runtime/chat-controller.js +374 -88
- package/dist/runtime/chat-controller.js.map +1 -1
- package/dist/runtime/composer/buffer.d.ts +43 -0
- package/dist/runtime/composer/buffer.d.ts.map +1 -0
- package/dist/runtime/composer/buffer.js +176 -0
- package/dist/runtime/composer/buffer.js.map +1 -0
- package/dist/runtime/composer/grapheme.d.ts +19 -0
- package/dist/runtime/composer/grapheme.d.ts.map +1 -0
- package/dist/runtime/composer/grapheme.js +73 -0
- package/dist/runtime/composer/grapheme.js.map +1 -0
- package/dist/runtime/composer/history.d.ts +39 -0
- package/dist/runtime/composer/history.d.ts.map +1 -0
- package/dist/runtime/composer/history.js +91 -0
- package/dist/runtime/composer/history.js.map +1 -0
- package/dist/runtime/composer/layout.d.ts +40 -0
- package/dist/runtime/composer/layout.d.ts.map +1 -0
- package/dist/runtime/composer/layout.js +174 -0
- package/dist/runtime/composer/layout.js.map +1 -0
- package/dist/runtime/rich-text/ansi-parser.d.ts +31 -0
- package/dist/runtime/rich-text/ansi-parser.d.ts.map +1 -0
- package/dist/runtime/rich-text/ansi-parser.js +310 -0
- package/dist/runtime/rich-text/ansi-parser.js.map +1 -0
- package/dist/runtime/rich-text/layout.d.ts +12 -0
- package/dist/runtime/rich-text/layout.d.ts.map +1 -0
- package/dist/runtime/rich-text/layout.js +362 -0
- package/dist/runtime/rich-text/layout.js.map +1 -0
- package/dist/runtime/rich-text/markdown-parser.d.ts +17 -0
- package/dist/runtime/rich-text/markdown-parser.d.ts.map +1 -0
- package/dist/runtime/rich-text/markdown-parser.js +218 -0
- package/dist/runtime/rich-text/markdown-parser.js.map +1 -0
- package/dist/runtime/rich-text/sanitizer.d.ts +18 -0
- package/dist/runtime/rich-text/sanitizer.d.ts.map +1 -0
- package/dist/runtime/rich-text/sanitizer.js +32 -0
- package/dist/runtime/rich-text/sanitizer.js.map +1 -0
- package/dist/runtime/rich-text/types.d.ts +59 -0
- package/dist/runtime/rich-text/types.d.ts.map +1 -0
- package/dist/runtime/rich-text/types.js +17 -0
- package/dist/runtime/rich-text/types.js.map +1 -0
- package/dist/runtime/subagents/budget.d.ts +118 -0
- package/dist/runtime/subagents/budget.d.ts.map +1 -0
- package/dist/runtime/subagents/budget.js +173 -0
- package/dist/runtime/subagents/budget.js.map +1 -0
- package/dist/runtime/subagents/child-executor-guard.d.ts +60 -0
- package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -0
- package/dist/runtime/subagents/child-executor-guard.js +219 -0
- package/dist/runtime/subagents/child-executor-guard.js.map +1 -0
- package/dist/runtime/subagents/context-builder.d.ts +34 -0
- package/dist/runtime/subagents/context-builder.d.ts.map +1 -0
- package/dist/runtime/subagents/context-builder.js +99 -0
- package/dist/runtime/subagents/context-builder.js.map +1 -0
- package/dist/runtime/subagents/index.d.ts +21 -0
- package/dist/runtime/subagents/index.d.ts.map +1 -0
- package/dist/runtime/subagents/index.js +62 -0
- package/dist/runtime/subagents/index.js.map +1 -0
- package/dist/runtime/subagents/policy.d.ts +68 -0
- package/dist/runtime/subagents/policy.d.ts.map +1 -0
- package/dist/runtime/subagents/policy.js +230 -0
- package/dist/runtime/subagents/policy.js.map +1 -0
- package/dist/runtime/subagents/presets.d.ts +44 -0
- package/dist/runtime/subagents/presets.d.ts.map +1 -0
- package/dist/runtime/subagents/presets.js +148 -0
- package/dist/runtime/subagents/presets.js.map +1 -0
- package/dist/runtime/subagents/production.d.ts +44 -0
- package/dist/runtime/subagents/production.d.ts.map +1 -0
- package/dist/runtime/subagents/production.js +143 -0
- package/dist/runtime/subagents/production.js.map +1 -0
- package/dist/runtime/subagents/provider-gate.d.ts +99 -0
- package/dist/runtime/subagents/provider-gate.d.ts.map +1 -0
- package/dist/runtime/subagents/provider-gate.js +186 -0
- package/dist/runtime/subagents/provider-gate.js.map +1 -0
- package/dist/runtime/subagents/result-parser.d.ts +40 -0
- package/dist/runtime/subagents/result-parser.d.ts.map +1 -0
- package/dist/runtime/subagents/result-parser.js +240 -0
- package/dist/runtime/subagents/result-parser.js.map +1 -0
- package/dist/runtime/subagents/runner.d.ts +53 -0
- package/dist/runtime/subagents/runner.d.ts.map +1 -0
- package/dist/runtime/subagents/runner.js +172 -0
- package/dist/runtime/subagents/runner.js.map +1 -0
- package/dist/runtime/subagents/runtime-integration.d.ts +73 -0
- package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -0
- package/dist/runtime/subagents/runtime-integration.js +148 -0
- package/dist/runtime/subagents/runtime-integration.js.map +1 -0
- package/dist/runtime/subagents/supervisor.d.ts +79 -0
- package/dist/runtime/subagents/supervisor.d.ts.map +1 -0
- package/dist/runtime/subagents/supervisor.js +301 -0
- package/dist/runtime/subagents/supervisor.js.map +1 -0
- package/dist/runtime/subagents/tool.d.ts +38 -0
- package/dist/runtime/subagents/tool.d.ts.map +1 -0
- package/dist/runtime/subagents/tool.js +171 -0
- package/dist/runtime/subagents/tool.js.map +1 -0
- package/dist/runtime/subagents/types.d.ts +152 -0
- package/dist/runtime/subagents/types.d.ts.map +1 -0
- package/dist/runtime/subagents/types.js +56 -0
- package/dist/runtime/subagents/types.js.map +1 -0
- package/dist/runtime/ui-events.d.ts +18 -0
- package/dist/runtime/ui-events.d.ts.map +1 -1
- package/dist/runtime/ui-events.js.map +1 -1
- package/dist/runtime/ui-view-model.d.ts +44 -1
- package/dist/runtime/ui-view-model.d.ts.map +1 -1
- package/dist/runtime/ui-view-model.js +90 -37
- package/dist/runtime/ui-view-model.js.map +1 -1
- package/dist/sdk/query.d.ts.map +1 -1
- package/dist/sdk/query.js +0 -1
- package/dist/sdk/query.js.map +1 -1
- package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
- package/dist/services/auto-fix/autoFixHook.js +3 -2
- package/dist/services/auto-fix/autoFixHook.js.map +1 -1
- package/dist/services/auto-fix/autoFixRunner.d.ts +2 -2
- package/dist/services/auto-fix/autoFixRunner.d.ts.map +1 -1
- package/dist/services/auto-fix/autoFixRunner.js +2 -2
- package/dist/services/auto-fix/autoFixRunner.js.map +1 -1
- package/dist/services/compact/auto-compact.d.ts +15 -2
- package/dist/services/compact/auto-compact.d.ts.map +1 -1
- package/dist/services/compact/auto-compact.js +59 -27
- package/dist/services/compact/auto-compact.js.map +1 -1
- package/dist/services/compact/compact.d.ts +2 -0
- package/dist/services/compact/compact.d.ts.map +1 -1
- package/dist/services/compact/compact.js +22 -5
- package/dist/services/compact/compact.js.map +1 -1
- package/dist/services/compact/coordinator.d.ts +26 -0
- package/dist/services/compact/coordinator.d.ts.map +1 -0
- package/dist/services/compact/coordinator.js +44 -0
- package/dist/services/compact/coordinator.js.map +1 -0
- package/dist/services/compact/index.d.ts +1 -0
- package/dist/services/compact/index.d.ts.map +1 -1
- package/dist/services/compact/index.js +3 -1
- package/dist/services/compact/index.js.map +1 -1
- package/dist/services/compact/summary-generator.d.ts +6 -2
- package/dist/services/compact/summary-generator.d.ts.map +1 -1
- package/dist/services/compact/summary-generator.js +73 -32
- package/dist/services/compact/summary-generator.js.map +1 -1
- package/dist/services/concurrent-sessions.d.ts.map +1 -1
- package/dist/services/concurrent-sessions.js +3 -0
- package/dist/services/concurrent-sessions.js.map +1 -1
- package/dist/services/config-dir.d.ts +11 -1
- package/dist/services/config-dir.d.ts.map +1 -1
- package/dist/services/config-dir.js +19 -2
- package/dist/services/config-dir.js.map +1 -1
- package/dist/services/config.d.ts +13 -4
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +85 -4
- package/dist/services/config.js.map +1 -1
- package/dist/services/doctor.d.ts +2 -0
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +9 -2
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/global-config.d.ts +33 -1
- package/dist/services/global-config.d.ts.map +1 -1
- package/dist/services/global-config.js +3 -0
- package/dist/services/global-config.js.map +1 -1
- package/dist/services/llm.d.ts +21 -4
- package/dist/services/llm.d.ts.map +1 -1
- package/dist/services/llm.js +75 -9
- package/dist/services/llm.js.map +1 -1
- package/dist/services/mcp/transports.d.ts +2 -0
- package/dist/services/mcp/transports.d.ts.map +1 -1
- package/dist/services/mcp/transports.js +23 -2
- package/dist/services/mcp/transports.js.map +1 -1
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js.map +1 -1
- package/dist/services/model-context.d.ts +36 -0
- package/dist/services/model-context.d.ts.map +1 -1
- package/dist/services/model-context.js +243 -31
- package/dist/services/model-context.js.map +1 -1
- package/dist/services/redaction.js +1 -1
- package/dist/services/redaction.js.map +1 -1
- package/dist/services/session-memory/sessionMemory.js +1 -1
- package/dist/services/session-memory/sessionMemory.js.map +1 -1
- package/dist/services/session-storage.d.ts +39 -1
- package/dist/services/session-storage.d.ts.map +1 -1
- package/dist/services/session-storage.js +156 -28
- package/dist/services/session-storage.js.map +1 -1
- package/dist/services/task-manager.d.ts +2 -0
- package/dist/services/task-manager.d.ts.map +1 -1
- package/dist/services/task-manager.js +13 -0
- package/dist/services/task-manager.js.map +1 -1
- package/dist/services/usage-state.d.ts +55 -5
- package/dist/services/usage-state.d.ts.map +1 -1
- package/dist/services/usage-state.js +188 -59
- package/dist/services/usage-state.js.map +1 -1
- package/dist/services/verification-profile.d.ts.map +1 -1
- package/dist/services/verification-profile.js +3 -2
- package/dist/services/verification-profile.js.map +1 -1
- package/dist/services/workspace-diff.d.ts.map +1 -1
- package/dist/services/workspace-diff.js +34 -3
- package/dist/services/workspace-diff.js.map +1 -1
- package/dist/services/yaml-config.js +1 -1
- package/dist/skills/loader.d.ts +1 -1
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +1 -1
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/registry.d.ts +1 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +1 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/runtime.d.ts +9 -5
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +157 -12
- package/dist/skills/runtime.js.map +1 -1
- package/dist/terminal-ui/launch.d.ts +20 -3
- package/dist/terminal-ui/launch.d.ts.map +1 -1
- package/dist/terminal-ui/launch.js +86 -25
- package/dist/terminal-ui/launch.js.map +1 -1
- package/dist/terminal-ui/raw-editor.d.ts +9 -0
- package/dist/terminal-ui/raw-editor.d.ts.map +1 -1
- package/dist/terminal-ui/raw-editor.js +207 -30
- package/dist/terminal-ui/raw-editor.js.map +1 -1
- package/dist/tools/bash_security.d.ts.map +1 -1
- package/dist/tools/bash_security.js +14 -5
- package/dist/tools/bash_security.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +51 -24
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/plan.d.ts.map +1 -1
- package/dist/tools/plan.js +7 -0
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/web.d.ts +10 -0
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +84 -4
- package/dist/tools/web.js.map +1 -1
- package/dist/tui-core/frame.d.ts +13 -1
- package/dist/tui-core/frame.d.ts.map +1 -1
- package/dist/tui-core/frame.js +61 -8
- package/dist/tui-core/frame.js.map +1 -1
- package/dist/tui-core/input-parser.d.ts +1 -1
- package/dist/tui-core/input-parser.d.ts.map +1 -1
- package/dist/tui-core/input-parser.js +20 -1
- package/dist/tui-core/input-parser.js.map +1 -1
- package/dist/tui-core/style.d.ts +103 -0
- package/dist/tui-core/style.d.ts.map +1 -0
- package/dist/tui-core/style.js +269 -0
- package/dist/tui-core/style.js.map +1 -0
- package/dist/tui-core/terminal-writer.d.ts.map +1 -1
- package/dist/tui-core/terminal-writer.js +16 -3
- package/dist/tui-core/terminal-writer.js.map +1 -1
- package/dist/tui-ui/inline-surface.d.ts +185 -0
- package/dist/tui-ui/inline-surface.d.ts.map +1 -0
- package/dist/tui-ui/inline-surface.js +615 -0
- package/dist/tui-ui/inline-surface.js.map +1 -0
- package/dist/tui-ui/launch.d.ts +1 -0
- package/dist/tui-ui/launch.d.ts.map +1 -1
- package/dist/tui-ui/launch.js +398 -69
- package/dist/tui-ui/launch.js.map +1 -1
- package/dist/tui-ui/layout.d.ts +51 -2
- package/dist/tui-ui/layout.d.ts.map +1 -1
- package/dist/tui-ui/layout.js +240 -77
- package/dist/tui-ui/layout.js.map +1 -1
- package/dist/tui-ui/render-scheduler.d.ts +37 -0
- package/dist/tui-ui/render-scheduler.d.ts.map +1 -0
- package/dist/tui-ui/render-scheduler.js +118 -0
- package/dist/tui-ui/render-scheduler.js.map +1 -0
- package/dist/tui-ui/runner.d.ts +78 -5
- package/dist/tui-ui/runner.d.ts.map +1 -1
- package/dist/tui-ui/runner.js +317 -22
- package/dist/tui-ui/runner.js.map +1 -1
- package/dist/tui-ui/state.d.ts +38 -7
- package/dist/tui-ui/state.d.ts.map +1 -1
- package/dist/tui-ui/state.js +199 -40
- package/dist/tui-ui/state.js.map +1 -1
- package/dist/tui-ui/theme.d.ts +13 -0
- package/dist/tui-ui/theme.d.ts.map +1 -0
- package/dist/tui-ui/theme.js +20 -0
- package/dist/tui-ui/theme.js.map +1 -0
- package/dist/tui-ui/transcript-cache.d.ts +35 -0
- package/dist/tui-ui/transcript-cache.d.ts.map +1 -0
- package/dist/tui-ui/transcript-cache.js +74 -0
- package/dist/tui-ui/transcript-cache.js.map +1 -0
- package/dist/tui-ui/transcript-layout.d.ts +21 -0
- package/dist/tui-ui/transcript-layout.d.ts.map +1 -0
- package/dist/tui-ui/transcript-layout.js +398 -0
- package/dist/tui-ui/transcript-layout.js.map +1 -0
- package/dist/ui/box.d.ts.map +1 -1
- package/dist/ui/box.js +0 -11
- package/dist/ui/box.js.map +1 -1
- package/dist/ui/command-panel.d.ts.map +1 -1
- package/dist/ui/command-panel.js +1 -3
- package/dist/ui/command-panel.js.map +1 -1
- package/dist/ui/file-completion.js +1 -1
- package/dist/ui/file-completion.js.map +1 -1
- package/dist/ui/markdown.d.ts.map +1 -1
- package/dist/ui/markdown.js +1 -2
- package/dist/ui/markdown.js.map +1 -1
- package/dist/ui/multiline-input.d.ts.map +1 -1
- package/dist/ui/multiline-input.js +1 -2
- package/dist/ui/multiline-input.js.map +1 -1
- package/dist/ui/progress.d.ts.map +1 -1
- package/dist/ui/progress.js +0 -3
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/status-bar.d.ts +1 -1
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +2 -16
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/ui/stream-markdown.d.ts +3 -0
- package/dist/ui/stream-markdown.d.ts.map +1 -1
- package/dist/ui/stream-markdown.js +0 -6
- package/dist/ui/stream-markdown.js.map +1 -1
- package/dist/ui/tool-preview.d.ts.map +1 -1
- package/dist/ui/tool-preview.js +0 -1
- package/dist/ui/tool-preview.js.map +1 -1
- package/dist/ui-v2/components/shell.d.ts.map +1 -1
- package/dist/ui-v2/components/shell.js +0 -8
- package/dist/ui-v2/components/shell.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli-dbg.js +0 -717
- package/dist/cli-debug.d.ts +0 -7
- package/dist/cli-debug.d.ts.map +0 -1
- package/dist/cli-debug.js +0 -717
- package/dist/cli-debug.js.map +0 -1
- package/dist/cli-debug2.d.ts +0 -7
- package/dist/cli-debug2.d.ts.map +0 -1
- package/dist/cli-debug2.js +0 -717
- package/dist/cli-debug2.js.map +0 -1
- package/dist/cli-debug3.d.ts +0 -7
- package/dist/cli-debug3.d.ts.map +0 -1
- package/dist/cli-debug3.js +0 -719
- package/dist/cli-debug3.js.map +0 -1
- package/dist/cli-ink.d.ts +0 -8
- package/dist/cli-ink.d.ts.map +0 -1
- package/dist/cli-ink.js +0 -32
- package/dist/cli-ink.js.map +0 -1
- package/dist/cli-patch.js +0 -716
- package/dist/cli-test.js +0 -726
package/dist/commands/index.js
CHANGED
|
@@ -31,6 +31,7 @@ const mcp_1 = require("../tools/mcp");
|
|
|
31
31
|
const session_storage_1 = require("../services/session-storage");
|
|
32
32
|
const session_index_1 = require("../services/session-index");
|
|
33
33
|
const auto_compact_1 = require("../services/compact/auto-compact");
|
|
34
|
+
const coordinator_1 = require("../services/compact/coordinator");
|
|
34
35
|
const harness_1 = require("../harness");
|
|
35
36
|
const skills_1 = require("../skills");
|
|
36
37
|
const file_context_1 = require("../services/file-context");
|
|
@@ -38,6 +39,7 @@ const project_instructions_1 = require("../services/project-instructions");
|
|
|
38
39
|
const prompt_context_1 = require("../services/prompt-context");
|
|
39
40
|
const doctor_1 = require("../services/doctor");
|
|
40
41
|
const model_context_1 = require("../services/model-context");
|
|
42
|
+
const token_estimate_1 = require("../utils/token-estimate");
|
|
41
43
|
const model_catalog_1 = require("../services/model-catalog");
|
|
42
44
|
const workspace_diff_1 = require("../services/workspace-diff");
|
|
43
45
|
const commit_plan_1 = require("../services/commit-plan");
|
|
@@ -46,6 +48,7 @@ const checkpoint_1 = require("../core/checkpoint");
|
|
|
46
48
|
const storage_maintenance_1 = require("../services/storage-maintenance");
|
|
47
49
|
const agent_status_1 = require("../runtime/agent-status");
|
|
48
50
|
const loop_budget_1 = require("../runtime/loop-budget");
|
|
51
|
+
const usage_state_1 = require("../services/usage-state");
|
|
49
52
|
// ============================================================================
|
|
50
53
|
// 颜色常量
|
|
51
54
|
// ============================================================================
|
|
@@ -92,13 +95,15 @@ function formatRendererStatus(ctx) {
|
|
|
92
95
|
renderer: ctx.uiRenderer ?? ctx.config.ui?.renderer ?? 'terminal',
|
|
93
96
|
capabilities: ctx.uiCapabilities,
|
|
94
97
|
});
|
|
95
|
-
const status = snapshot.renderer.status === '
|
|
96
|
-
? WARN('
|
|
97
|
-
: snapshot.renderer.status === '
|
|
98
|
-
?
|
|
99
|
-
: snapshot.renderer.status === '
|
|
100
|
-
?
|
|
101
|
-
:
|
|
98
|
+
const status = snapshot.renderer.status === 'deprecated'
|
|
99
|
+
? WARN('deprecated')
|
|
100
|
+
: snapshot.renderer.status === 'beta' || (0, config_1.isBetaUIRenderer)(snapshot.renderer.name)
|
|
101
|
+
? WARN('beta')
|
|
102
|
+
: snapshot.renderer.status === 'stable'
|
|
103
|
+
? SUCCESS('stable')
|
|
104
|
+
: snapshot.renderer.status === 'non-interactive'
|
|
105
|
+
? DIM('non-interactive')
|
|
106
|
+
: DIM('custom');
|
|
102
107
|
return `${BRAND(snapshot.renderer.name)} ${status} ${DIM(snapshot.renderer.capabilityLabels.join(', '))}`;
|
|
103
108
|
}
|
|
104
109
|
function formatModelAliasHelp() {
|
|
@@ -243,23 +248,6 @@ function isAbortError(error, abortSignal) {
|
|
|
243
248
|
// ============================================================================
|
|
244
249
|
// 工具参数摘要
|
|
245
250
|
// ============================================================================
|
|
246
|
-
function compactToolArgs(args) {
|
|
247
|
-
if (typeof args.path === 'string') {
|
|
248
|
-
return args.path.length > 48 ? args.path.slice(0, 45) + '...' : args.path;
|
|
249
|
-
}
|
|
250
|
-
if (typeof args.command === 'string') {
|
|
251
|
-
return args.command.length > 48 ? args.command.slice(0, 45) + '...' : args.command;
|
|
252
|
-
}
|
|
253
|
-
if (typeof args.pattern === 'string') {
|
|
254
|
-
return args.pattern.length > 48 ? args.pattern.slice(0, 45) + '...' : args.pattern;
|
|
255
|
-
}
|
|
256
|
-
for (const val of Object.values(args)) {
|
|
257
|
-
if (typeof val === 'string') {
|
|
258
|
-
return val.length > 48 ? val.slice(0, 45) + '...' : val;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return '';
|
|
262
|
-
}
|
|
263
251
|
// ============================================================================
|
|
264
252
|
// 命令实现
|
|
265
253
|
// ============================================================================
|
|
@@ -297,7 +285,7 @@ function showStatus(ctx) {
|
|
|
297
285
|
console.log(` Log level ${DIM(ctx.config.logLevel)}`);
|
|
298
286
|
const modelId = ctx.llm?.getModel() ?? snapshotCurrentModel(ctx);
|
|
299
287
|
const modelContext = (0, model_context_1.resolveModelContext)(modelId);
|
|
300
|
-
const compactStats = (
|
|
288
|
+
const compactStats = getCommandAutoCompact(ctx, modelId).getStats();
|
|
301
289
|
console.log(` Model ${BRAND(modelId)}`);
|
|
302
290
|
console.log(` Context ${DIM(`${formatTokenCount(modelContext.contextWindow)} tokens (${modelContext.source}${modelContext.source === 'fuzzy' ? `:${modelContext.matchedId}` : ''})`)}`);
|
|
303
291
|
console.log(` Compact ${compactStats.enabled ? SUCCESS('auto') : WARN('off')} ${DIM(`predict ${formatThreshold(compactStats.predictiveCompactThreshold)}, hard ${formatThreshold(compactStats.threshold)}, used ${compactStats.ctxPercent}%`)}`);
|
|
@@ -1008,6 +996,17 @@ function handleCheckpoint(ctx, args = '') {
|
|
|
1008
996
|
function snapshotCurrentModel(ctx) {
|
|
1009
997
|
return ctx.store.getSnapshot().currentModel || ctx.config.model;
|
|
1010
998
|
}
|
|
999
|
+
function getCommandAutoCompact(ctx, modelId) {
|
|
1000
|
+
if (ctx.compactCoordinator) {
|
|
1001
|
+
ctx.compactCoordinator.configure({
|
|
1002
|
+
modelId,
|
|
1003
|
+
llm: ctx.llm,
|
|
1004
|
+
outputReserveTokens: ctx.llm?.getMaxTokens?.(),
|
|
1005
|
+
});
|
|
1006
|
+
return ctx.compactCoordinator.getAutomatic();
|
|
1007
|
+
}
|
|
1008
|
+
return (0, auto_compact_1.getAutoCompact)({ modelId });
|
|
1009
|
+
}
|
|
1011
1010
|
function showAgents(ctx) {
|
|
1012
1011
|
console.log();
|
|
1013
1012
|
console.log(HEADER('Registered Agents'));
|
|
@@ -1042,7 +1041,7 @@ function showMemory(ctx) {
|
|
|
1042
1041
|
console.log();
|
|
1043
1042
|
return { success: true };
|
|
1044
1043
|
}
|
|
1045
|
-
async function handleMemoryReindex(
|
|
1044
|
+
async function handleMemoryReindex(_ctx) {
|
|
1046
1045
|
const { isSemanticEnabled, getSemanticSearchService } = require('../memory/semantic-search');
|
|
1047
1046
|
if (!isSemanticEnabled()) {
|
|
1048
1047
|
console.log();
|
|
@@ -1249,9 +1248,7 @@ function showHarness(ctx, args = '') {
|
|
|
1249
1248
|
}
|
|
1250
1249
|
console.log();
|
|
1251
1250
|
console.log(HEADER(' Auto Compact'));
|
|
1252
|
-
const compactStats = (
|
|
1253
|
-
modelId: state.promptAssemblyStats?.modelId ?? snapshotCurrentModel(ctx),
|
|
1254
|
-
}).getStats();
|
|
1251
|
+
const compactStats = getCommandAutoCompact(ctx, state.promptAssemblyStats?.modelId ?? snapshotCurrentModel(ctx)).getStats();
|
|
1255
1252
|
const contextInfo = (0, model_context_1.resolveModelContext)(compactStats.modelId);
|
|
1256
1253
|
console.log(` Model ${ACCENT(compactStats.modelId)}`);
|
|
1257
1254
|
console.log(` Window ${DIM(`${formatTokenCount(contextInfo.contextWindow)} tokens (${contextInfo.source}${contextInfo.source === 'fuzzy' ? `:${contextInfo.matchedId}` : ''})`)}`);
|
|
@@ -1320,7 +1317,7 @@ function handleModel(ctx, args) {
|
|
|
1320
1317
|
const currentModel = ctx.llm.getModel();
|
|
1321
1318
|
const aliasEntry = (0, model_catalog_1.getModelCatalogEntry)(currentModel);
|
|
1322
1319
|
const contextInfo = (0, model_context_1.resolveModelContext)(currentModel);
|
|
1323
|
-
const compactStats = (
|
|
1320
|
+
const compactStats = getCommandAutoCompact(ctx, currentModel).getStats();
|
|
1324
1321
|
console.log(HEADER('Current Model'));
|
|
1325
1322
|
console.log(DIM('─'.repeat(40)));
|
|
1326
1323
|
console.log(` Model ${BRAND(currentModel)}`);
|
|
@@ -1396,7 +1393,7 @@ function handleModel(ctx, args) {
|
|
|
1396
1393
|
// 解析别名
|
|
1397
1394
|
const resolvedModel = (0, model_catalog_1.resolveModelAlias)(args);
|
|
1398
1395
|
ctx.llm.setModel(resolvedModel);
|
|
1399
|
-
(
|
|
1396
|
+
getCommandAutoCompact(ctx, resolvedModel);
|
|
1400
1397
|
ctx.store.setState({ currentModel: resolvedModel });
|
|
1401
1398
|
console.log(SUCCESS(`✔ Model changed to ${BRAND(resolvedModel)}`));
|
|
1402
1399
|
const contextInfo = (0, model_context_1.resolveModelContext)(resolvedModel);
|
|
@@ -1453,7 +1450,7 @@ function handleMode(ctx, args) {
|
|
|
1453
1450
|
};
|
|
1454
1451
|
}
|
|
1455
1452
|
function handleTask(ctx, args) {
|
|
1456
|
-
const [sub
|
|
1453
|
+
const [sub] = args.trim().split(/\s+/);
|
|
1457
1454
|
if (sub === 'list' || sub === 'ls') {
|
|
1458
1455
|
if (!taskManager) {
|
|
1459
1456
|
taskManager = new task_manager_1.TaskManager();
|
|
@@ -1872,11 +1869,12 @@ async function handleExit(ctx) {
|
|
|
1872
1869
|
}
|
|
1873
1870
|
function handleCost(ctx) {
|
|
1874
1871
|
console.log();
|
|
1875
|
-
console.log(HEADER('
|
|
1872
|
+
console.log(HEADER('Lifetime Cost'));
|
|
1876
1873
|
console.log(DIM('─'.repeat(40)));
|
|
1877
1874
|
const costTracker = ctx.store.getSnapshot().costTracker;
|
|
1878
|
-
const
|
|
1879
|
-
|
|
1875
|
+
const state = (0, usage_state_1.loadUsageState)();
|
|
1876
|
+
const ledger = (0, usage_state_1.summarizeUsageLedger)();
|
|
1877
|
+
if (state.totalTokens === 0 && state.totalCost === 0) {
|
|
1880
1878
|
console.log(DIM(' No usage recorded yet.'));
|
|
1881
1879
|
console.log(DIM(' Use /run or /chat to interact with LLM.'));
|
|
1882
1880
|
console.log();
|
|
@@ -1884,19 +1882,36 @@ function handleCost(ctx) {
|
|
|
1884
1882
|
}
|
|
1885
1883
|
// Summary
|
|
1886
1884
|
console.log();
|
|
1887
|
-
console.log(` ${ACCENT('Total Tokens')} ${
|
|
1888
|
-
console.log(` ${ACCENT('
|
|
1889
|
-
console.log(` ${ACCENT('
|
|
1890
|
-
console.log(` ${ACCENT('
|
|
1891
|
-
console.log(` ${ACCENT('Requests')} ${
|
|
1885
|
+
console.log(` ${ACCENT('Total Tokens')} ${state.totalTokens.toLocaleString()}`);
|
|
1886
|
+
console.log(` ${ACCENT('Tracked Cost')} ${costTracker.formatCost(state.totalCost)}`);
|
|
1887
|
+
console.log(` ${ACCENT('Provider Cost')} ${costTracker.formatCost(state.providerCost)}`);
|
|
1888
|
+
console.log(` ${ACCENT('Estimated Cost')} ${costTracker.formatCost(state.estimatedCost)}`);
|
|
1889
|
+
console.log(` ${ACCENT('Requests')} ${state.usageRecords.toLocaleString()}`);
|
|
1890
|
+
console.log(` ${ACCENT('Sessions')} ${state.totalSessions.toLocaleString()}`);
|
|
1892
1891
|
// By Model
|
|
1893
|
-
if (Object.keys(
|
|
1892
|
+
if (Object.keys(ledger.byModel).length > 0) {
|
|
1894
1893
|
console.log();
|
|
1895
1894
|
console.log(HEADER(' By Model:'));
|
|
1896
|
-
for (const [model, data] of Object.entries(
|
|
1895
|
+
for (const [model, data] of Object.entries(ledger.byModel)) {
|
|
1897
1896
|
console.log(` ${BRAND(model.padEnd(20))} ${data.tokens} tokens, ${costTracker.formatCost(data.cost)}`);
|
|
1898
1897
|
}
|
|
1899
1898
|
}
|
|
1899
|
+
console.log();
|
|
1900
|
+
console.log(HEADER(' Cost Sources:'));
|
|
1901
|
+
for (const source of ['provider', 'configured', 'builtin', 'fallback']) {
|
|
1902
|
+
const data = ledger.bySource[source];
|
|
1903
|
+
if (data.count === 0)
|
|
1904
|
+
continue;
|
|
1905
|
+
console.log(` ${source.padEnd(12)} ${data.count} requests, ${costTracker.formatCost(data.cost)}`);
|
|
1906
|
+
}
|
|
1907
|
+
if (state.baselineCost > 0 || state.baselineTokens > 0) {
|
|
1908
|
+
console.log(DIM(` legacy ${state.baselineTokens.toLocaleString()} tokens, ${costTracker.formatCost(state.baselineCost)}`));
|
|
1909
|
+
}
|
|
1910
|
+
if (ledger.bySource.fallback.count > 0) {
|
|
1911
|
+
console.log();
|
|
1912
|
+
console.log(WARN(' Unknown-model fallback pricing is an estimate.'));
|
|
1913
|
+
console.log(DIM(' Configure cost.modelPricing in ~/.openhorse/openhorse.json for accuracy.'));
|
|
1914
|
+
}
|
|
1900
1915
|
// Budget
|
|
1901
1916
|
const budget = costTracker.getBudget();
|
|
1902
1917
|
if (budget !== null) {
|
|
@@ -1904,13 +1919,13 @@ function handleCost(ctx) {
|
|
|
1904
1919
|
console.log();
|
|
1905
1920
|
console.log(HEADER(' Budget:'));
|
|
1906
1921
|
console.log(` ${ACCENT('Limit')} ${costTracker.formatCost(budget)}`);
|
|
1907
|
-
console.log(` ${ACCENT('Used')}
|
|
1922
|
+
console.log(` ${ACCENT('Used this run')} ${costTracker.formatCost(check.used)}`);
|
|
1908
1923
|
console.log(` ${check.ok ? SUCCESS('✓ Within budget') : WARN('⚠ Budget exceeded')}`);
|
|
1909
1924
|
}
|
|
1910
1925
|
console.log();
|
|
1911
1926
|
return { success: true };
|
|
1912
1927
|
}
|
|
1913
|
-
function handleSkills(
|
|
1928
|
+
function handleSkills(_ctx) {
|
|
1914
1929
|
console.log();
|
|
1915
1930
|
console.log(HEADER('Loaded Skills'));
|
|
1916
1931
|
console.log(DIM('─'.repeat(40)));
|
|
@@ -1949,7 +1964,7 @@ function handleSkills(ctx) {
|
|
|
1949
1964
|
}
|
|
1950
1965
|
return { success: true };
|
|
1951
1966
|
}
|
|
1952
|
-
function handleSkill(args) {
|
|
1967
|
+
function handleSkill(ctx, args) {
|
|
1953
1968
|
const trimmed = args.trim();
|
|
1954
1969
|
const registry = (0, skills_1.getSkillsRegistry)();
|
|
1955
1970
|
registry.initialize();
|
|
@@ -1963,9 +1978,17 @@ function handleSkill(args) {
|
|
|
1963
1978
|
].join('\n'),
|
|
1964
1979
|
};
|
|
1965
1980
|
}
|
|
1966
|
-
const
|
|
1967
|
-
const
|
|
1968
|
-
const
|
|
1981
|
+
const parsed = (0, skills_1.parseSkillCommandInput)(`/skill ${trimmed}`);
|
|
1982
|
+
const rawName = trimmed.split(/\s+/, 1)[0] || '';
|
|
1983
|
+
const requestedName = parsed.skillName || (0, skills_1.normalizeRequestedSkillName)(rawName);
|
|
1984
|
+
const referencedSkill = (0, skills_1.loadExplicitSkillReference)(`/skill ${trimmed}`, ctx.cwd);
|
|
1985
|
+
if (parsed.skillPath && !referencedSkill) {
|
|
1986
|
+
return {
|
|
1987
|
+
success: false,
|
|
1988
|
+
error: `Invalid skill reference: ${parsed.skillPath}`,
|
|
1989
|
+
};
|
|
1990
|
+
}
|
|
1991
|
+
const skill = referencedSkill || registry.getAllSkills()
|
|
1969
1992
|
.find(candidate => (0, skills_1.skillActivationNames)(candidate)
|
|
1970
1993
|
.some(name => (0, skills_1.normalizeRequestedSkillName)(name) === requestedName));
|
|
1971
1994
|
if (!skill) {
|
|
@@ -1980,30 +2003,40 @@ function handleSkill(args) {
|
|
|
1980
2003
|
: `Unknown skill: ${rawName}`,
|
|
1981
2004
|
};
|
|
1982
2005
|
}
|
|
1983
|
-
const task =
|
|
2006
|
+
const task = parsed.task;
|
|
1984
2007
|
const source = registry.getSource(skill.name);
|
|
1985
2008
|
const resourceRoot = skill.resourceRoot || skill.source || source?.path;
|
|
1986
2009
|
const skillFile = resourceRoot
|
|
1987
2010
|
? `${resourceRoot.replace(/\/SKILL\.md$/i, '')}/SKILL.md`
|
|
1988
2011
|
: source?.skillFile;
|
|
1989
2012
|
if (!task) {
|
|
2013
|
+
const usageSelector = parsed.skillPath
|
|
2014
|
+
? `[$${skill.name}](${formatSkillReferencePath(parsed.skillPath)})`
|
|
2015
|
+
: skill.name;
|
|
1990
2016
|
return {
|
|
1991
2017
|
success: true,
|
|
1992
2018
|
output: [
|
|
1993
|
-
|
|
2019
|
+
parsed.skillPath
|
|
2020
|
+
? `Skill reference ${skill.name} is valid for one turn.`
|
|
2021
|
+
: `Skill ${skill.name} is loaded.`,
|
|
1994
2022
|
skillFile ? `SKILL.md ${skillFile}` : '',
|
|
1995
2023
|
resourceRoot ? `Root ${resourceRoot}` : '',
|
|
1996
|
-
`Use: /skill ${
|
|
2024
|
+
`Use: /skill ${usageSelector} <task>`,
|
|
1997
2025
|
].filter(Boolean).join('\n'),
|
|
1998
2026
|
};
|
|
1999
2027
|
}
|
|
2000
2028
|
return {
|
|
2001
2029
|
success: true,
|
|
2002
2030
|
continueAsChat: true,
|
|
2003
|
-
chatInput:
|
|
2031
|
+
chatInput: parsed.skillPath
|
|
2032
|
+
? `/skill [$${skill.name}](${formatSkillReferencePath(parsed.skillPath)}) ${task}`
|
|
2033
|
+
: `/skill ${skill.name} ${task}`,
|
|
2004
2034
|
};
|
|
2005
2035
|
}
|
|
2006
|
-
function
|
|
2036
|
+
function formatSkillReferencePath(path) {
|
|
2037
|
+
return /[\s()]/u.test(path) ? `<${path}>` : path;
|
|
2038
|
+
}
|
|
2039
|
+
function handleMcp(_ctx) {
|
|
2007
2040
|
console.log();
|
|
2008
2041
|
console.log(HEADER('MCP Servers'));
|
|
2009
2042
|
console.log(DIM('─'.repeat(40)));
|
|
@@ -2175,29 +2208,78 @@ async function handleCompact(ctx, args) {
|
|
|
2175
2208
|
}
|
|
2176
2209
|
console.log(DIM((0, agent_status_1.compactStatus)()));
|
|
2177
2210
|
try {
|
|
2178
|
-
const
|
|
2179
|
-
|
|
2180
|
-
|
|
2211
|
+
const modelId = ctx.llm?.getModel() ?? ctx.store.getSnapshot().currentModel;
|
|
2212
|
+
const coordinator = ctx.compactCoordinator ?? new coordinator_1.CompactCoordinator({
|
|
2213
|
+
modelId,
|
|
2214
|
+
llm: ctx.llm,
|
|
2215
|
+
outputReserveTokens: ctx.llm?.getMaxTokens?.(),
|
|
2181
2216
|
getContextCapsule: () => ctx.store.getSnapshot().harnessState?.capsule,
|
|
2182
2217
|
getHarnessState: () => ctx.store.getSnapshot().harnessState,
|
|
2218
|
+
});
|
|
2219
|
+
coordinator.configure({
|
|
2220
|
+
modelId,
|
|
2183
2221
|
llm: ctx.llm,
|
|
2222
|
+
outputReserveTokens: ctx.llm?.getMaxTokens?.(),
|
|
2223
|
+
getContextCapsule: () => ctx.store.getSnapshot().harnessState?.capsule,
|
|
2224
|
+
getHarnessState: () => ctx.store.getSnapshot().harnessState,
|
|
2225
|
+
});
|
|
2226
|
+
const beforeTokens = (0, token_estimate_1.estimateMessagesTokens)(history);
|
|
2227
|
+
const automaticStats = coordinator.getAutomatic().getStats();
|
|
2228
|
+
const beforeUsage = (0, model_context_1.createContextUsageSnapshot)({
|
|
2229
|
+
modelId,
|
|
2230
|
+
usedTokens: beforeTokens,
|
|
2231
|
+
source: 'estimated',
|
|
2232
|
+
outputReserveTokens: ctx.llm?.getMaxTokens?.(),
|
|
2233
|
+
warningThreshold: automaticStats.preCompactThreshold,
|
|
2234
|
+
autoCompactThreshold: automaticStats.threshold,
|
|
2235
|
+
autoCompactEnabled: automaticStats.enabled,
|
|
2236
|
+
});
|
|
2237
|
+
const result = await coordinator.compactManual(history, threshold);
|
|
2238
|
+
const compacted = result.messages;
|
|
2239
|
+
const compactedTokens = (0, token_estimate_1.estimateMessagesTokens)(compacted);
|
|
2240
|
+
const afterUsage = (0, model_context_1.createContextUsageSnapshot)({
|
|
2241
|
+
modelId,
|
|
2242
|
+
usedTokens: compactedTokens,
|
|
2243
|
+
source: 'estimated',
|
|
2244
|
+
outputReserveTokens: ctx.llm?.getMaxTokens?.(),
|
|
2245
|
+
warningThreshold: automaticStats.preCompactThreshold,
|
|
2246
|
+
autoCompactThreshold: automaticStats.threshold,
|
|
2247
|
+
autoCompactEnabled: automaticStats.enabled,
|
|
2184
2248
|
});
|
|
2185
|
-
const compacted = await autoCompact.forceCompact(history);
|
|
2186
|
-
// 更新 store
|
|
2187
|
-
ctx.store.setState({ conversationHistory: compacted });
|
|
2188
2249
|
const reduction = history.length - compacted.length;
|
|
2189
2250
|
const percent = Math.round((reduction / history.length) * 100);
|
|
2190
2251
|
const sessionId = ctx.getSession?.()?.id ?? ctx.sessionId;
|
|
2191
2252
|
if (sessionId) {
|
|
2192
|
-
(0, session_storage_1.
|
|
2253
|
+
const sourceMessageCount = (0, session_storage_1.readSessionMessages)(sessionId).length;
|
|
2254
|
+
const checkpoint = (0, session_storage_1.commitSessionCompactCheckpoint)({
|
|
2255
|
+
sessionId,
|
|
2256
|
+
mode: 'manual',
|
|
2257
|
+
modelId,
|
|
2258
|
+
sourceMessageCount,
|
|
2259
|
+
transcriptStartMessageIndex: Math.max(0, sourceMessageCount - threshold),
|
|
2260
|
+
modelHistory: compacted,
|
|
2261
|
+
summary: {
|
|
2262
|
+
text: result.summary,
|
|
2263
|
+
generatedAt: result.summaryGeneratedAt,
|
|
2264
|
+
source: result.summarySource,
|
|
2265
|
+
},
|
|
2266
|
+
beforeUsage,
|
|
2267
|
+
afterUsage,
|
|
2268
|
+
});
|
|
2269
|
+
ctx.store.setState({ conversationHistory: checkpoint.modelHistory });
|
|
2193
2270
|
}
|
|
2271
|
+
else {
|
|
2272
|
+
ctx.store.setState({ conversationHistory: compacted });
|
|
2273
|
+
}
|
|
2274
|
+
ctx.store.setContextUsage(afterUsage);
|
|
2194
2275
|
console.log(SUCCESS(`✔ Compacted ${history.length} → ${compacted.length} messages`));
|
|
2195
2276
|
console.log(DIM(` Reduced by ${reduction} messages (${percent}%)`));
|
|
2196
2277
|
console.log();
|
|
2197
2278
|
return { success: true };
|
|
2198
2279
|
}
|
|
2199
2280
|
catch (err) {
|
|
2200
|
-
|
|
2281
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
2282
|
+
console.log(ERROR(`✗ Compact failed: ${message}`));
|
|
2201
2283
|
console.log();
|
|
2202
2284
|
return { success: false };
|
|
2203
2285
|
}
|
|
@@ -2456,20 +2538,22 @@ function handleResume(ctx, args) {
|
|
|
2456
2538
|
}
|
|
2457
2539
|
function restoreSession(ctx, session, isLast) {
|
|
2458
2540
|
const resumed = (0, session_storage_1.resumeSession)(session.id) ?? session;
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
console.log(DIM(` Model: ${resumed.model}`));
|
|
2463
|
-
console.log(DIM(` Project: ${resumed.projectPath}`));
|
|
2464
|
-
console.log(DIM(` Started: ${new Date(resumed.startTime).toLocaleString()}`));
|
|
2541
|
+
// Swap in the resumed session's transcript BEFORE emitting any command output,
|
|
2542
|
+
// so the output is appended after the history rather than wiped by the
|
|
2543
|
+
// transcript replacement below.
|
|
2465
2544
|
ctx.setSession?.(resumed);
|
|
2466
|
-
// Load history and
|
|
2545
|
+
// Load history and notify runtime/TUI consumers.
|
|
2467
2546
|
const history = (0, session_storage_1.loadSessionHistory)(resumed.id);
|
|
2547
|
+
const transcriptMessages = (0, session_storage_1.loadSessionTranscriptMessages)(resumed.id);
|
|
2548
|
+
const rawMessages = (0, session_storage_1.readSessionMessages)(resumed.id);
|
|
2549
|
+
const checkpoint = (0, session_storage_1.loadSessionCompactCheckpoint)(resumed.id);
|
|
2550
|
+
const resumeGeneratedAt = Date.now();
|
|
2551
|
+
const summary = checkpoint?.summary.text ?? (history.length > 0 ? generateHistorySummary(history) : '');
|
|
2552
|
+
const summaryGeneratedAt = checkpoint?.summary.generatedAt ?? resumeGeneratedAt;
|
|
2553
|
+
const summarySource = checkpoint?.summary.source ?? 'resume_heuristic';
|
|
2554
|
+
const summaryCoveredMessages = checkpoint?.summary.sourceMessageCount ?? rawMessages.length;
|
|
2468
2555
|
if (history.length > 0) {
|
|
2469
|
-
const
|
|
2470
|
-
const eventSummary = generateRestoredSessionEventSummary(history);
|
|
2471
|
-
console.log(DIM(` Summary: ${summary}`));
|
|
2472
|
-
console.log();
|
|
2556
|
+
const eventSummary = checkpoint?.summary.text ?? generateRestoredSessionEventSummary(history);
|
|
2473
2557
|
ctx.store.setState({ conversationHistory: history });
|
|
2474
2558
|
ctx.store.setState({ harnessState: (0, session_storage_1.loadSessionHarnessState)(resumed.id) ?? resumed.harnessState });
|
|
2475
2559
|
(0, framework_1.resetToolState)();
|
|
@@ -2480,21 +2564,62 @@ function restoreSession(ctx, session, isLast) {
|
|
|
2480
2564
|
restoredMessages: history.length,
|
|
2481
2565
|
messageCount: resumed.messageCount,
|
|
2482
2566
|
summary: eventSummary,
|
|
2567
|
+
summaryGeneratedAt,
|
|
2568
|
+
summarySource,
|
|
2569
|
+
summaryCoveredMessages,
|
|
2570
|
+
checkpointId: checkpoint?.checkpointId,
|
|
2571
|
+
transcriptMessages: transcriptMessages.length,
|
|
2483
2572
|
});
|
|
2484
|
-
console.log(SUCCESS(`✔ Restored ${history.length} messages`));
|
|
2485
2573
|
}
|
|
2486
2574
|
else {
|
|
2487
|
-
console.log();
|
|
2488
|
-
console.log(DIM(' No messages in session'));
|
|
2489
2575
|
ctx.sessionRestored?.({
|
|
2490
2576
|
sessionId: resumed.id,
|
|
2491
2577
|
projectPath: resumed.projectPath,
|
|
2492
2578
|
model: resumed.model,
|
|
2493
2579
|
restoredMessages: 0,
|
|
2494
2580
|
messageCount: resumed.messageCount,
|
|
2581
|
+
summaryGeneratedAt,
|
|
2582
|
+
summarySource,
|
|
2583
|
+
summaryCoveredMessages,
|
|
2584
|
+
checkpointId: checkpoint?.checkpointId,
|
|
2585
|
+
transcriptMessages: transcriptMessages.length,
|
|
2495
2586
|
});
|
|
2496
2587
|
}
|
|
2497
|
-
|
|
2588
|
+
// Emit the resume summary. In TUI (inline-surface) mode, route through the
|
|
2589
|
+
// command-output sink instead of raw console.log: a bare console.log writes
|
|
2590
|
+
// directly to stdout and desyncs the surface's cursor tracking, leaving the
|
|
2591
|
+
// live region mis-positioned (blank lower screen, content stuck at top).
|
|
2592
|
+
// Plain text is used so no raw ANSI escapes leak into the TUI frame.
|
|
2593
|
+
const bannerLines = [
|
|
2594
|
+
isLast ? 'Resuming last session' : `Resuming session ${resumed.id.slice(0, 8)}`,
|
|
2595
|
+
` ID: ${resumed.id}`,
|
|
2596
|
+
` Model: ${resumed.model}`,
|
|
2597
|
+
` Project: ${resumed.projectPath}`,
|
|
2598
|
+
` Started: ${new Date(resumed.startTime).toLocaleString()}`,
|
|
2599
|
+
];
|
|
2600
|
+
if (history.length > 0) {
|
|
2601
|
+
bannerLines.push(` Summary: ${summary}`);
|
|
2602
|
+
bannerLines.push(` Generated: ${new Date(summaryGeneratedAt).toLocaleString()} (${checkpoint ? 'compact checkpoint' : 'generated on resume'})`);
|
|
2603
|
+
bannerLines.push(` Covers: ${summaryCoveredMessages} source messages`);
|
|
2604
|
+
bannerLines.push(`✔ Restored ${history.length} model-context messages / ${transcriptMessages.length} transcript messages`);
|
|
2605
|
+
}
|
|
2606
|
+
else {
|
|
2607
|
+
bannerLines.push(' No messages in session');
|
|
2608
|
+
}
|
|
2609
|
+
if (ctx.uiRenderer === 'tui' || ctx.uiRenderer === 'ink') {
|
|
2610
|
+
if (!ctx.sessionRestored) {
|
|
2611
|
+
for (const line of bannerLines)
|
|
2612
|
+
ctx.writeLine?.(line);
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
else {
|
|
2616
|
+
console.log();
|
|
2617
|
+
console.log(HEADER(bannerLines[0]));
|
|
2618
|
+
for (const line of bannerLines.slice(1)) {
|
|
2619
|
+
console.log(line.startsWith('✔') ? SUCCESS(line) : DIM(line));
|
|
2620
|
+
}
|
|
2621
|
+
console.log();
|
|
2622
|
+
}
|
|
2498
2623
|
return { success: true };
|
|
2499
2624
|
}
|
|
2500
2625
|
function handleSessionRename(ctx, args) {
|
|
@@ -2803,7 +2928,7 @@ const COMMANDS = [
|
|
|
2803
2928
|
category: 'context',
|
|
2804
2929
|
priority: 21,
|
|
2805
2930
|
type: 'chat',
|
|
2806
|
-
execute: (
|
|
2931
|
+
execute: (ctx, args) => handleSkill(ctx, args),
|
|
2807
2932
|
},
|
|
2808
2933
|
{
|
|
2809
2934
|
name: 'memory',
|