open-multi-agent-kit 0.90.0 → 0.90.4
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 +56 -0
- package/README.md +22 -31
- package/dist/cli/args.d.ts +0 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts +3 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -19
- package/dist/config.js.map +1 -1
- package/dist/core/adaptorch-bridge.d.ts +257 -0
- package/dist/core/adaptorch-bridge.d.ts.map +1 -0
- package/dist/core/adaptorch-bridge.js +473 -0
- package/dist/core/adaptorch-bridge.js.map +1 -0
- package/dist/core/agent-session.d.ts +132 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +327 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bang-skill-invocation.d.ts +26 -0
- package/dist/core/bang-skill-invocation.d.ts.map +1 -0
- package/dist/core/bang-skill-invocation.js +208 -0
- package/dist/core/bang-skill-invocation.js.map +1 -0
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +15 -2
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/compactor.d.ts.map +1 -1
- package/dist/core/compactor.js +0 -3
- package/dist/core/compactor.js.map +1 -1
- package/dist/core/context-budget-governor-v2.d.ts +2 -1
- package/dist/core/context-budget-governor-v2.d.ts.map +1 -1
- package/dist/core/context-budget-governor-v2.js +1 -0
- package/dist/core/context-budget-governor-v2.js.map +1 -1
- package/dist/core/context-budget-headroom-types.d.ts +8 -0
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-types.js.map +1 -1
- package/dist/core/context-budget-headroom.d.ts +1 -1
- package/dist/core/context-budget-headroom.d.ts.map +1 -1
- package/dist/core/context-budget-headroom.js +17 -4
- package/dist/core/context-budget-headroom.js.map +1 -1
- package/dist/core/context-budget-system-prompt.d.ts +2 -1
- package/dist/core/context-budget-system-prompt.d.ts.map +1 -1
- package/dist/core/context-budget-system-prompt.js +6 -1
- package/dist/core/context-budget-system-prompt.js.map +1 -1
- package/dist/core/context-budget-v2-cache-hash.d.ts +3 -0
- package/dist/core/context-budget-v2-cache-hash.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache-hash.js +16 -0
- package/dist/core/context-budget-v2-cache-hash.js.map +1 -0
- package/dist/core/context-budget-v2-cache-keys.d.ts +58 -0
- package/dist/core/context-budget-v2-cache-keys.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache-keys.js +128 -0
- package/dist/core/context-budget-v2-cache-keys.js.map +1 -0
- package/dist/core/context-budget-v2-cache-provider.d.ts +23 -0
- package/dist/core/context-budget-v2-cache-provider.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache-provider.js +29 -0
- package/dist/core/context-budget-v2-cache-provider.js.map +1 -0
- package/dist/core/context-budget-v2-cache-telemetry.d.ts +36 -0
- package/dist/core/context-budget-v2-cache-telemetry.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache-telemetry.js +64 -0
- package/dist/core/context-budget-v2-cache-telemetry.js.map +1 -0
- package/dist/core/context-budget-v2-cache-validation.d.ts +36 -0
- package/dist/core/context-budget-v2-cache-validation.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache-validation.js +98 -0
- package/dist/core/context-budget-v2-cache-validation.js.map +1 -0
- package/dist/core/context-budget-v2-cache.d.ts +36 -0
- package/dist/core/context-budget-v2-cache.d.ts.map +1 -0
- package/dist/core/context-budget-v2-cache.js +50 -0
- package/dist/core/context-budget-v2-cache.js.map +1 -0
- package/dist/core/context-budget-v2-plan-cache-keys.d.ts +16 -0
- package/dist/core/context-budget-v2-plan-cache-keys.d.ts.map +1 -0
- package/dist/core/context-budget-v2-plan-cache-keys.js +49 -0
- package/dist/core/context-budget-v2-plan-cache-keys.js.map +1 -0
- package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
- package/dist/core/context-budget-v2-planner.js +55 -2
- package/dist/core/context-budget-v2-planner.js.map +1 -1
- package/dist/core/context-budget-v2-representation-cache.d.ts +27 -0
- package/dist/core/context-budget-v2-representation-cache.d.ts.map +1 -0
- package/dist/core/context-budget-v2-representation-cache.js +173 -0
- package/dist/core/context-budget-v2-representation-cache.js.map +1 -0
- package/dist/core/context-budget-v2-selection.d.ts +2 -0
- package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
- package/dist/core/context-budget-v2-selection.js +12 -2
- package/dist/core/context-budget-v2-selection.js.map +1 -1
- package/dist/core/context-budget-v2-types.d.ts +107 -1
- package/dist/core/context-budget-v2-types.d.ts.map +1 -1
- package/dist/core/context-budget-v2-types.js.map +1 -1
- package/dist/core/domain-loadouts.d.ts.map +1 -1
- package/dist/core/domain-loadouts.js +1 -1
- package/dist/core/domain-loadouts.js.map +1 -1
- package/dist/core/headroom.d.ts.map +1 -1
- package/dist/core/headroom.js +0 -4
- package/dist/core/headroom.js.map +1 -1
- package/dist/core/hook-inventory.d.ts.map +1 -1
- package/dist/core/hook-inventory.js +6 -0
- package/dist/core/hook-inventory.js.map +1 -1
- package/dist/core/mcp-computer-use-presets.d.ts +64 -0
- package/dist/core/mcp-computer-use-presets.d.ts.map +1 -0
- package/dist/core/mcp-computer-use-presets.js +158 -0
- package/dist/core/mcp-computer-use-presets.js.map +1 -0
- package/dist/core/mcp-public-presets.d.ts +578 -0
- package/dist/core/mcp-public-presets.d.ts.map +1 -0
- package/dist/core/mcp-public-presets.js +647 -0
- package/dist/core/mcp-public-presets.js.map +1 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +1 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/pi-package-intake-candidates.d.ts +14 -1
- package/dist/core/pi-package-intake-candidates.d.ts.map +1 -1
- package/dist/core/pi-package-intake-candidates.js +182 -0
- package/dist/core/pi-package-intake-candidates.js.map +1 -1
- package/dist/core/pi-package-intake.d.ts +8 -1
- package/dist/core/pi-package-intake.d.ts.map +1 -1
- package/dist/core/pi-package-intake.js +14 -4
- package/dist/core/pi-package-intake.js.map +1 -1
- package/dist/core/reasoning-router-bias.d.ts +119 -0
- package/dist/core/reasoning-router-bias.d.ts.map +1 -0
- package/dist/core/reasoning-router-bias.js +287 -0
- package/dist/core/reasoning-router-bias.js.map +1 -0
- package/dist/core/reasoning-router-v2.d.ts +94 -0
- package/dist/core/reasoning-router-v2.d.ts.map +1 -0
- package/dist/core/reasoning-router-v2.js +288 -0
- package/dist/core/reasoning-router-v2.js.map +1 -0
- package/dist/core/reasoning-router-v3.d.ts +15 -0
- package/dist/core/reasoning-router-v3.d.ts.map +1 -0
- package/dist/core/reasoning-router-v3.js +193 -0
- package/dist/core/reasoning-router-v3.js.map +1 -0
- package/dist/core/reasoning-router-v4-weights.d.ts +124 -0
- package/dist/core/reasoning-router-v4-weights.d.ts.map +1 -0
- package/dist/core/reasoning-router-v4-weights.js +112 -0
- package/dist/core/reasoning-router-v4-weights.js.map +1 -0
- package/dist/core/reasoning-router-v4.d.ts +163 -0
- package/dist/core/reasoning-router-v4.d.ts.map +1 -0
- package/dist/core/reasoning-router-v4.js +683 -0
- package/dist/core/reasoning-router-v4.js.map +1 -0
- package/dist/core/reasoning-router-weights.d.ts +155 -0
- package/dist/core/reasoning-router-weights.d.ts.map +1 -0
- package/dist/core/reasoning-router-weights.js +204 -0
- package/dist/core/reasoning-router-weights.js.map +1 -0
- package/dist/core/reasoning-router.d.ts +44 -0
- package/dist/core/reasoning-router.d.ts.map +1 -0
- package/dist/core/reasoning-router.js +138 -0
- package/dist/core/reasoning-router.js.map +1 -0
- package/dist/core/reverse-skill.d.ts +2 -0
- package/dist/core/reverse-skill.d.ts.map +1 -0
- package/dist/core/reverse-skill.js +7 -0
- package/dist/core/reverse-skill.js.map +1 -0
- package/dist/core/router-feedback-collector.d.ts +101 -0
- package/dist/core/router-feedback-collector.d.ts.map +1 -0
- package/dist/core/router-feedback-collector.js +239 -0
- package/dist/core/router-feedback-collector.js.map +1 -0
- package/dist/core/settings-manager.d.ts +31 -3
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +16 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +58 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations.d.ts +19 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +39 -15
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-box.d.ts +3 -3
- package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-box.js +10 -10
- package/dist/modes/interactive/components/control-panel-box.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient-motion.js +2 -1
- package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-layout.d.ts +15 -1
- package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-layout.js +212 -68
- package/dist/modes/interactive/components/control-panel-layout.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +15 -0
- package/dist/modes/interactive/components/control-panel-runtime-status.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-runtime-status.js +105 -5
- package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-sparkles.d.ts +27 -0
- package/dist/modes/interactive/components/control-panel-sparkles.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-sparkles.js +42 -0
- package/dist/modes/interactive/components/control-panel-sparkles.js.map +1 -0
- package/dist/modes/interactive/components/control-panel.d.ts +8 -0
- package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel.js +40 -8
- package/dist/modes/interactive/components/control-panel.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +2 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +2 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +6 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +206 -32
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/docs/loadout-domains/README.md +8 -6
- package/docs/loadout-domains/ai-agent-ops.md +3 -2
- package/docs/loadout-domains/backend-api.md +3 -2
- package/docs/loadout-domains/data-science.md +3 -2
- package/docs/loadout-domains/devops-infra.md +2 -1
- package/docs/loadout-domains/docs-writing.md +7 -2
- package/docs/loadout-domains/frontend-ui.md +42 -11
- package/docs/loadout-domains/korean-document.md +83 -0
- package/docs/loadout-domains/mobile.md +1 -1
- package/docs/loadout-domains/qa-testing.md +4 -2
- package/docs/loadout-domains/security-audit.md +2 -1
- package/docs/loadout-domains/visual-qa.md +94 -0
- package/docs/skills.md +11 -4
- package/docs/usage.md +39 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/preset.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +27 -34
- package/package.json +5 -5
- package/dist/agents/jailbreak/index.d.ts +0 -7
- package/dist/agents/jailbreak/index.d.ts.map +0 -1
- package/dist/agents/jailbreak/index.js +0 -7
- package/dist/agents/jailbreak/index.js.map +0 -1
- package/dist/agents/jailbreak/subagent-f.d.ts +0 -44
- package/dist/agents/jailbreak/subagent-f.d.ts.map +0 -1
- package/dist/agents/jailbreak/subagent-f.js +0 -60
- package/dist/agents/jailbreak/subagent-f.js.map +0 -1
- package/dist/cli/jailbreak-args.d.ts +0 -26
- package/dist/cli/jailbreak-args.d.ts.map +0 -1
- package/dist/cli/jailbreak-args.js +0 -86
- package/dist/cli/jailbreak-args.js.map +0 -1
- package/dist/commands/jailbreak.d.ts +0 -49
- package/dist/commands/jailbreak.d.ts.map +0 -1
- package/dist/commands/jailbreak.js +0 -201
- package/dist/commands/jailbreak.js.map +0 -1
- package/dist/encoding/index.d.ts +0 -6
- package/dist/encoding/index.d.ts.map +0 -1
- package/dist/encoding/index.js +0 -6
- package/dist/encoding/index.js.map +0 -1
- package/dist/encoding/l4-encoder.d.ts +0 -96
- package/dist/encoding/l4-encoder.d.ts.map +0 -1
- package/dist/encoding/l4-encoder.js +0 -474
- package/dist/encoding/l4-encoder.js.map +0 -1
- package/dist/fuzzing/index.d.ts +0 -6
- package/dist/fuzzing/index.d.ts.map +0 -1
- package/dist/fuzzing/index.js +0 -6
- package/dist/fuzzing/index.js.map +0 -1
- package/dist/fuzzing/mutation-engine.d.ts +0 -93
- package/dist/fuzzing/mutation-engine.d.ts.map +0 -1
- package/dist/fuzzing/mutation-engine.js +0 -244
- package/dist/fuzzing/mutation-engine.js.map +0 -1
- package/dist/jailbreak-extension.d.ts +0 -48
- package/dist/jailbreak-extension.d.ts.map +0 -1
- package/dist/jailbreak-extension.js +0 -47
- package/dist/jailbreak-extension.js.map +0 -1
- package/dist/modules/index.d.ts +0 -8
- package/dist/modules/index.d.ts.map +0 -1
- package/dist/modules/index.js +0 -7
- package/dist/modules/index.js.map +0 -1
- package/dist/modules/lrl-bypass.d.ts +0 -40
- package/dist/modules/lrl-bypass.d.ts.map +0 -1
- package/dist/modules/lrl-bypass.js +0 -84
- package/dist/modules/lrl-bypass.js.map +0 -1
- package/dist/modules/lrl-deps.d.ts +0 -38
- package/dist/modules/lrl-deps.d.ts.map +0 -1
- package/dist/modules/lrl-deps.js +0 -128
- package/dist/modules/lrl-deps.js.map +0 -1
- package/dist/multiturn/easl-chain.d.ts +0 -113
- package/dist/multiturn/easl-chain.d.ts.map +0 -1
- package/dist/multiturn/easl-chain.js +0 -351
- package/dist/multiturn/easl-chain.js.map +0 -1
- package/dist/multiturn/index.d.ts +0 -6
- package/dist/multiturn/index.d.ts.map +0 -1
- package/dist/multiturn/index.js +0 -6
- package/dist/multiturn/index.js.map +0 -1
- package/dist/routing/fallback-router.d.ts +0 -123
- package/dist/routing/fallback-router.d.ts.map +0 -1
- package/dist/routing/fallback-router.js +0 -355
- package/dist/routing/fallback-router.js.map +0 -1
- package/dist/routing/index.d.ts +0 -6
- package/dist/routing/index.d.ts.map +0 -1
- package/dist/routing/index.js +0 -6
- package/dist/routing/index.js.map +0 -1
- package/dist/types/jailbreak.d.ts +0 -246
- package/dist/types/jailbreak.d.ts.map +0 -1
- package/dist/types/jailbreak.js +0 -8
- package/dist/types/jailbreak.js.map +0 -1
- package/dist/utils/jailbreak/common.d.ts +0 -63
- package/dist/utils/jailbreak/common.d.ts.map +0 -1
- package/dist/utils/jailbreak/common.js +0 -130
- package/dist/utils/jailbreak/common.js.map +0 -1
- package/dist/utils/jailbreak/index.d.ts +0 -7
- package/dist/utils/jailbreak/index.d.ts.map +0 -1
- package/dist/utils/jailbreak/index.js +0 -7
- package/dist/utils/jailbreak/index.js.map +0 -1
|
@@ -12,8 +12,9 @@ import { spawn, spawnSync } from "child_process";
|
|
|
12
12
|
import { getProviders, } from "omk-ai";
|
|
13
13
|
import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Loader, Markdown, matchesKey, ProcessTerminal, Spacer, setKeybindings, Text, TruncatedText, TUI, visibleWidth, } from "omk-tui";
|
|
14
14
|
import { APP_NAME, APP_TITLE, getAgentDir, getAuthPath, getDebugLogPath, getDocsPath, getShareViewerUrl, VERSION, } from "../../config.js";
|
|
15
|
-
import { parseSkillBlock } from "../../core/agent-session.js";
|
|
15
|
+
import { parseSkillBlock, } from "../../core/agent-session.js";
|
|
16
16
|
import { SessionImportFileNotFoundError } from "../../core/agent-session-runtime.js";
|
|
17
|
+
import { parseBangInvocation } from "../../core/bang-skill-invocation.js";
|
|
17
18
|
import { FooterDataProvider } from "../../core/footer-data-provider.js";
|
|
18
19
|
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
19
20
|
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
@@ -39,7 +40,8 @@ import { BashExecutionComponent } from "./components/bash-execution.js";
|
|
|
39
40
|
import { BorderedLoader } from "./components/bordered-loader.js";
|
|
40
41
|
import { BranchSummaryMessageComponent } from "./components/branch-summary-message.js";
|
|
41
42
|
import { CompactionSummaryMessageComponent } from "./components/compaction-summary-message.js";
|
|
42
|
-
import { ControlPanelComponent } from "./components/control-panel.js";
|
|
43
|
+
import { ControlPanelComponent, ControlPanelRightPaneComponent } from "./components/control-panel.js";
|
|
44
|
+
import { CONTROL_PANEL_OVERLAY_MIN_WIDTH, CONTROL_PANEL_SIDEBAR_WIDTH } from "./components/control-panel-layout.js";
|
|
43
45
|
import { createControlPanelStatusSnapshot } from "./components/control-panel-runtime-status.js";
|
|
44
46
|
import { CountdownTimer } from "./components/countdown-timer.js";
|
|
45
47
|
import { CustomEditor } from "./components/custom-editor.js";
|
|
@@ -67,6 +69,14 @@ import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMar
|
|
|
67
69
|
function isExpandable(obj) {
|
|
68
70
|
return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
|
|
69
71
|
}
|
|
72
|
+
function disposeComponent(component) {
|
|
73
|
+
if (typeof component === "object" &&
|
|
74
|
+
component !== null &&
|
|
75
|
+
"dispose" in component &&
|
|
76
|
+
typeof component.dispose === "function") {
|
|
77
|
+
component.dispose();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
70
80
|
class ExpandableText extends Text {
|
|
71
81
|
getCollapsedText;
|
|
72
82
|
getExpandedText;
|
|
@@ -87,6 +97,18 @@ class ExpandableText extends Text {
|
|
|
87
97
|
}
|
|
88
98
|
}
|
|
89
99
|
const DEAD_TERMINAL_ERROR_CODES = new Set(["EIO", "EPIPE", "ENOTCONN"]);
|
|
100
|
+
/**
|
|
101
|
+
* Pseudo-entries for the thinking selector/autocomplete representing auto mode.
|
|
102
|
+
* "auto", "auto-v2", "auto-v3", and "auto-v4" are thinking MODES (per-task
|
|
103
|
+
* routing), not ThinkingLevel values; the selector renders plain strings, so
|
|
104
|
+
* they are injected as pseudo-level entries and intercepted before reaching
|
|
105
|
+
* the session level API.
|
|
106
|
+
*/
|
|
107
|
+
const AUTO_THINKING_ENTRY = "auto";
|
|
108
|
+
const AUTO_V1_THINKING_ENTRY = "auto-v1";
|
|
109
|
+
const AUTO_V2_THINKING_ENTRY = "auto-v2";
|
|
110
|
+
const AUTO_V3_THINKING_ENTRY = "auto-v3";
|
|
111
|
+
const AUTO_V4_THINKING_ENTRY = "auto-v4";
|
|
90
112
|
function isDeadTerminalError(error) {
|
|
91
113
|
if (!error || typeof error !== "object" || !("code" in error)) {
|
|
92
114
|
return false;
|
|
@@ -193,7 +215,6 @@ export class InteractiveMode {
|
|
|
193
215
|
// Agent subscription unsubscribe function
|
|
194
216
|
unsubscribe;
|
|
195
217
|
signalCleanupHandlers = [];
|
|
196
|
-
// Track if editor is in bash mode (text starts with !)
|
|
197
218
|
isBashMode = false;
|
|
198
219
|
// Track current bash execution component
|
|
199
220
|
bashComponent = undefined;
|
|
@@ -328,15 +349,45 @@ export class InteractiveMode {
|
|
|
328
349
|
const thinkCommand = slashCommands.find((command) => command.name === "think");
|
|
329
350
|
if (thinkCommand) {
|
|
330
351
|
thinkCommand.getArgumentCompletions = (prefix) => {
|
|
331
|
-
const
|
|
332
|
-
const
|
|
352
|
+
const isAutoMode = this.session.thinkingMode === "auto";
|
|
353
|
+
const currentAutoVersion = this.session.thinkingRouterVersion;
|
|
354
|
+
const choices = [
|
|
355
|
+
AUTO_THINKING_ENTRY,
|
|
356
|
+
AUTO_V1_THINKING_ENTRY,
|
|
357
|
+
AUTO_V2_THINKING_ENTRY,
|
|
358
|
+
AUTO_V3_THINKING_ENTRY,
|
|
359
|
+
AUTO_V4_THINKING_ENTRY,
|
|
360
|
+
...this.session.getAvailableThinkingLevels(),
|
|
361
|
+
];
|
|
362
|
+
const filtered = fuzzyFilter(choices, prefix, (choice) => choice);
|
|
333
363
|
if (filtered.length === 0)
|
|
334
364
|
return null;
|
|
335
|
-
return filtered.map((
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
365
|
+
return filtered.map((choice) => {
|
|
366
|
+
let description;
|
|
367
|
+
if (choice === AUTO_THINKING_ENTRY) {
|
|
368
|
+
description = `route level per task${isAutoMode ? ` (current: ${currentAutoVersion})` : ""}`;
|
|
369
|
+
}
|
|
370
|
+
else if (choice === AUTO_V1_THINKING_ENTRY) {
|
|
371
|
+
description = `route level per task with v1 router${isAutoMode && currentAutoVersion === "v1" ? " (current)" : ""}`;
|
|
372
|
+
}
|
|
373
|
+
else if (choice === AUTO_V2_THINKING_ENTRY) {
|
|
374
|
+
description = `route level per task with v2 router${isAutoMode && currentAutoVersion === "v2" ? " (current)" : ""}`;
|
|
375
|
+
}
|
|
376
|
+
else if (choice === AUTO_V3_THINKING_ENTRY) {
|
|
377
|
+
description = `route level per task with v3 router${isAutoMode && currentAutoVersion === "v3" ? " (current)" : ""}`;
|
|
378
|
+
}
|
|
379
|
+
else if (choice === AUTO_V4_THINKING_ENTRY) {
|
|
380
|
+
description = `route level per task with v4 router${isAutoMode && currentAutoVersion === "v4" ? " (current)" : ""}`;
|
|
381
|
+
}
|
|
382
|
+
else if (!isAutoMode && choice === this.session.thinkingLevel) {
|
|
383
|
+
description = "current";
|
|
384
|
+
}
|
|
385
|
+
return {
|
|
386
|
+
value: choice,
|
|
387
|
+
label: choice,
|
|
388
|
+
description,
|
|
389
|
+
};
|
|
390
|
+
});
|
|
340
391
|
};
|
|
341
392
|
}
|
|
342
393
|
const modelCommand = slashCommands.find((command) => command.name === "model");
|
|
@@ -503,8 +554,8 @@ export class InteractiveMode {
|
|
|
503
554
|
hint("app.thinking.toggle", "to expand thinking"),
|
|
504
555
|
hint("app.editor.external", "for external editor"),
|
|
505
556
|
rawKeyHint("/", "for commands"),
|
|
506
|
-
rawKeyHint("!", "
|
|
507
|
-
rawKeyHint("!!", "
|
|
557
|
+
rawKeyHint("!", "skills/bash"),
|
|
558
|
+
rawKeyHint("!!", "bash(no ctx)"),
|
|
508
559
|
hint("app.message.followUp", "to queue follow-up"),
|
|
509
560
|
hint("app.message.dequeue", "to edit all queued messages"),
|
|
510
561
|
hint("app.clipboard.pasteImage", "to paste image"),
|
|
@@ -514,10 +565,11 @@ export class InteractiveMode {
|
|
|
514
565
|
hint("app.interrupt", "interrupt"),
|
|
515
566
|
rawKeyHint(`${keyText("app.clear")}/${keyText("app.exit")}`, "clear/exit"),
|
|
516
567
|
rawKeyHint("/", "commands"),
|
|
517
|
-
rawKeyHint("!", "bash"),
|
|
568
|
+
rawKeyHint("!", "skills/bash"),
|
|
569
|
+
rawKeyHint("!!", "bash(no ctx)"),
|
|
518
570
|
hint("app.tools.expand", "more"),
|
|
519
571
|
].join(theme.fg("muted", " · "));
|
|
520
|
-
const
|
|
572
|
+
const controlPanelContent = {
|
|
521
573
|
appName: APP_NAME,
|
|
522
574
|
version: this.version,
|
|
523
575
|
compactInstructions,
|
|
@@ -525,9 +577,27 @@ export class InteractiveMode {
|
|
|
525
577
|
compactOnboarding: () => `Press ${keyText("app.tools.expand")} to show full startup help and loaded resources.`,
|
|
526
578
|
onboarding: () => `OMK can explain its own features and look up its docs. Ask it how to use or extend OMK.`,
|
|
527
579
|
statusSnapshot: () => createControlPanelStatusSnapshot(this.session, this.sessionManager, this.footerDataProvider),
|
|
580
|
+
};
|
|
581
|
+
const controlPanel = new ControlPanelComponent(controlPanelContent, {
|
|
582
|
+
requestRender: () => this.ui.requestRender(),
|
|
583
|
+
isTTY: () => process.stdout.isTTY === true,
|
|
584
|
+
isReducedMotion: () => process.env.OMK_REDUCED_MOTION === "1" || process.env.OMK_REDUCE_MOTION === "1",
|
|
585
|
+
isIdleDriftEnabled: () => process.env.OMK_CONTROL_IDLE_DRIFT !== "0",
|
|
586
|
+
isHeaderVisibleHint: () => this.customHeader === undefined,
|
|
587
|
+
getRenderWidth: () => this.ui.terminal.columns,
|
|
528
588
|
});
|
|
529
589
|
controlPanel.setExpanded(this.getStartupExpansionState());
|
|
530
590
|
this.builtInHeader = controlPanel;
|
|
591
|
+
this.ui.showOverlay(new ControlPanelRightPaneComponent(controlPanelContent), {
|
|
592
|
+
anchor: "top-right",
|
|
593
|
+
width: CONTROL_PANEL_SIDEBAR_WIDTH,
|
|
594
|
+
maxHeight: "100%",
|
|
595
|
+
nonCapturing: true,
|
|
596
|
+
visible: (termWidth, termHeight) => this.customHeader === undefined &&
|
|
597
|
+
this.toolOutputExpanded &&
|
|
598
|
+
termWidth >= CONTROL_PANEL_OVERLAY_MIN_WIDTH &&
|
|
599
|
+
termHeight >= 12,
|
|
600
|
+
});
|
|
531
601
|
// Setup UI layout
|
|
532
602
|
this.headerContainer.addChild(new Spacer(1));
|
|
533
603
|
this.headerContainer.addChild(this.builtInHeader);
|
|
@@ -2050,7 +2120,7 @@ export class InteractiveMode {
|
|
|
2050
2120
|
this.defaultEditor.onAction("app.session.resume", () => this.showSessionSelector());
|
|
2051
2121
|
this.defaultEditor.onChange = (text) => {
|
|
2052
2122
|
const wasBashMode = this.isBashMode;
|
|
2053
|
-
this.isBashMode =
|
|
2123
|
+
this.isBashMode = this.isBangBashInput(text);
|
|
2054
2124
|
if (wasBashMode !== this.isBashMode) {
|
|
2055
2125
|
this.updateEditorBorderColor();
|
|
2056
2126
|
}
|
|
@@ -2080,6 +2150,18 @@ export class InteractiveMode {
|
|
|
2080
2150
|
// Silently ignore clipboard errors (may not have permission, etc.)
|
|
2081
2151
|
}
|
|
2082
2152
|
}
|
|
2153
|
+
parseBangInput(text) {
|
|
2154
|
+
return parseBangInvocation(text.trim(), {
|
|
2155
|
+
hasSkill: (name) => this.session.resourceLoader.getSkills().skills.some((skill) => skill.name === name),
|
|
2156
|
+
});
|
|
2157
|
+
}
|
|
2158
|
+
isBangBashInput(text) {
|
|
2159
|
+
const trimmed = text.trimStart();
|
|
2160
|
+
if (!trimmed.startsWith("!")) {
|
|
2161
|
+
return false;
|
|
2162
|
+
}
|
|
2163
|
+
return this.parseBangInput(trimmed).kind === "bash";
|
|
2164
|
+
}
|
|
2083
2165
|
setupEditorSubmitHandler() {
|
|
2084
2166
|
this.defaultEditor.onSubmit = async (text) => {
|
|
2085
2167
|
text = text.trim();
|
|
@@ -2214,18 +2296,25 @@ export class InteractiveMode {
|
|
|
2214
2296
|
await this.shutdown();
|
|
2215
2297
|
return;
|
|
2216
2298
|
}
|
|
2217
|
-
// Handle bash command (! for normal, !! for excluded from context)
|
|
2218
2299
|
if (text.startsWith("!")) {
|
|
2219
|
-
const
|
|
2220
|
-
|
|
2221
|
-
|
|
2300
|
+
const bangInvocation = parseBangInvocation(text, {
|
|
2301
|
+
hasSkill: (name) => this.session.resourceLoader.getSkills().skills.some((skill) => skill.name === name),
|
|
2302
|
+
});
|
|
2303
|
+
if (bangInvocation.kind === "unknownSkill") {
|
|
2304
|
+
this.showWarning(`Unknown skill: ${bangInvocation.skillName}`);
|
|
2305
|
+
this.editor.setText(text);
|
|
2306
|
+
this.isBashMode = false;
|
|
2307
|
+
this.updateEditorBorderColor();
|
|
2308
|
+
return;
|
|
2309
|
+
}
|
|
2310
|
+
if (bangInvocation.kind === "bash") {
|
|
2222
2311
|
if (this.session.isBashRunning) {
|
|
2223
2312
|
this.showWarning("A bash command is already running. Press Esc to cancel it first.");
|
|
2224
2313
|
this.editor.setText(text);
|
|
2225
2314
|
return;
|
|
2226
2315
|
}
|
|
2227
2316
|
this.editor.addToHistory?.(text);
|
|
2228
|
-
await this.handleBashCommand(command,
|
|
2317
|
+
await this.handleBashCommand(bangInvocation.command, !bangInvocation.includeContext);
|
|
2229
2318
|
this.isBashMode = false;
|
|
2230
2319
|
this.updateEditorBorderColor();
|
|
2231
2320
|
return;
|
|
@@ -2990,6 +3079,8 @@ export class InteractiveMode {
|
|
|
2990
3079
|
this.showStatus("Current model does not support thinking");
|
|
2991
3080
|
}
|
|
2992
3081
|
else {
|
|
3082
|
+
// Cycling picks a concrete level: an explicit user override back to manual mode.
|
|
3083
|
+
this.session.setThinkingMode("manual");
|
|
2993
3084
|
this.footer.invalidate();
|
|
2994
3085
|
this.updateEditorBorderColor();
|
|
2995
3086
|
this.showStatus(`Thinking level: ${newLevel}`);
|
|
@@ -3340,8 +3431,8 @@ export class InteractiveMode {
|
|
|
3340
3431
|
followUpMode: this.session.followUpMode,
|
|
3341
3432
|
transport: this.settingsManager.getTransport(),
|
|
3342
3433
|
httpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),
|
|
3343
|
-
thinkingLevel: this.
|
|
3344
|
-
availableThinkingLevels: this.
|
|
3434
|
+
thinkingLevel: this.getThinkingSelectorValue(),
|
|
3435
|
+
availableThinkingLevels: this.getThinkingSelectorLevels(),
|
|
3345
3436
|
currentTheme: this.settingsManager.getTheme() || "dark",
|
|
3346
3437
|
availableThemes: getAvailableThemes(),
|
|
3347
3438
|
hideThinkingBlock: this.hideThinkingBlock,
|
|
@@ -3403,9 +3494,7 @@ export class InteractiveMode {
|
|
|
3403
3494
|
this.showStatus(`HTTP idle timeout: ${formatHttpIdleTimeoutMs(timeoutMs)}`);
|
|
3404
3495
|
},
|
|
3405
3496
|
onThinkingLevelChange: (level) => {
|
|
3406
|
-
this.
|
|
3407
|
-
this.footer.invalidate();
|
|
3408
|
-
this.updateEditorBorderColor();
|
|
3497
|
+
this.applyThinkingSelection(level);
|
|
3409
3498
|
},
|
|
3410
3499
|
onThemeChange: (themeName) => {
|
|
3411
3500
|
const result = setTheme(themeName, true);
|
|
@@ -3489,19 +3578,102 @@ export class InteractiveMode {
|
|
|
3489
3578
|
this.showThinkingSelector();
|
|
3490
3579
|
return;
|
|
3491
3580
|
}
|
|
3581
|
+
const normalizedLevel = level.replace(/\s+/g, " ");
|
|
3582
|
+
switch (normalizedLevel) {
|
|
3583
|
+
case AUTO_THINKING_ENTRY:
|
|
3584
|
+
case "auto v1":
|
|
3585
|
+
case AUTO_V1_THINKING_ENTRY:
|
|
3586
|
+
case "auto:v1":
|
|
3587
|
+
this.enableAutoThinkingMode("v1");
|
|
3588
|
+
return;
|
|
3589
|
+
case "auto v2":
|
|
3590
|
+
case AUTO_V2_THINKING_ENTRY:
|
|
3591
|
+
case "auto:v2":
|
|
3592
|
+
this.enableAutoThinkingMode("v2");
|
|
3593
|
+
return;
|
|
3594
|
+
case "auto v3":
|
|
3595
|
+
case AUTO_V3_THINKING_ENTRY:
|
|
3596
|
+
case "auto:v3":
|
|
3597
|
+
this.enableAutoThinkingMode("v3");
|
|
3598
|
+
return;
|
|
3599
|
+
case "auto v4":
|
|
3600
|
+
case AUTO_V4_THINKING_ENTRY:
|
|
3601
|
+
case "auto:v4":
|
|
3602
|
+
this.enableAutoThinkingMode("v4");
|
|
3603
|
+
return;
|
|
3604
|
+
}
|
|
3492
3605
|
const availableLevels = this.session.getAvailableThinkingLevels();
|
|
3493
|
-
if (!availableLevels.includes(
|
|
3494
|
-
this.showError(`Thinking level "${level}" is not available. Available: ${availableLevels.join(", ")}`);
|
|
3606
|
+
if (!availableLevels.includes(normalizedLevel)) {
|
|
3607
|
+
this.showError(`Thinking level "${level}" is not available. Available: auto, auto-v1, auto-v2, auto-v3, auto-v4, ${availableLevels.join(", ")}`);
|
|
3608
|
+
return;
|
|
3609
|
+
}
|
|
3610
|
+
this.applyThinkingLevel(normalizedLevel);
|
|
3611
|
+
}
|
|
3612
|
+
applyThinkingSelection(level) {
|
|
3613
|
+
if (level === AUTO_THINKING_ENTRY) {
|
|
3614
|
+
this.enableAutoThinkingMode("v1");
|
|
3615
|
+
return;
|
|
3616
|
+
}
|
|
3617
|
+
if (level === AUTO_V2_THINKING_ENTRY) {
|
|
3618
|
+
this.enableAutoThinkingMode("v2");
|
|
3619
|
+
return;
|
|
3620
|
+
}
|
|
3621
|
+
if (level === AUTO_V3_THINKING_ENTRY) {
|
|
3622
|
+
this.enableAutoThinkingMode("v3");
|
|
3623
|
+
return;
|
|
3624
|
+
}
|
|
3625
|
+
if (level === AUTO_V4_THINKING_ENTRY) {
|
|
3626
|
+
this.enableAutoThinkingMode("v4");
|
|
3495
3627
|
return;
|
|
3496
3628
|
}
|
|
3497
3629
|
this.applyThinkingLevel(level);
|
|
3498
3630
|
}
|
|
3631
|
+
enableAutoThinkingMode(version) {
|
|
3632
|
+
this.session.setThinkingRouterVersion(version);
|
|
3633
|
+
this.session.setThinkingMode("auto");
|
|
3634
|
+
this.footer.invalidate();
|
|
3635
|
+
this.updateEditorBorderColor();
|
|
3636
|
+
const label = version === "v1"
|
|
3637
|
+
? AUTO_THINKING_ENTRY
|
|
3638
|
+
: version === "v2"
|
|
3639
|
+
? AUTO_V2_THINKING_ENTRY
|
|
3640
|
+
: version === "v3"
|
|
3641
|
+
? AUTO_V3_THINKING_ENTRY
|
|
3642
|
+
: AUTO_V4_THINKING_ENTRY;
|
|
3643
|
+
this.showStatus(`Thinking: ${label} (${version} router, level routed per task)`);
|
|
3644
|
+
}
|
|
3499
3645
|
applyThinkingLevel(level) {
|
|
3646
|
+
// A concrete level is an explicit user override: always return to manual mode.
|
|
3647
|
+
this.session.setThinkingMode("manual");
|
|
3500
3648
|
this.session.setThinkingLevel(level);
|
|
3501
3649
|
this.footer.invalidate();
|
|
3502
3650
|
this.updateEditorBorderColor();
|
|
3503
3651
|
this.showStatus(`Thinking: ${this.session.thinkingLevel}`);
|
|
3504
3652
|
}
|
|
3653
|
+
getThinkingSelectorValue() {
|
|
3654
|
+
if (this.session.thinkingMode !== "auto") {
|
|
3655
|
+
return this.session.thinkingLevel;
|
|
3656
|
+
}
|
|
3657
|
+
if (this.session.thinkingRouterVersion === "v2") {
|
|
3658
|
+
return AUTO_V2_THINKING_ENTRY;
|
|
3659
|
+
}
|
|
3660
|
+
if (this.session.thinkingRouterVersion === "v3") {
|
|
3661
|
+
return AUTO_V3_THINKING_ENTRY;
|
|
3662
|
+
}
|
|
3663
|
+
if (this.session.thinkingRouterVersion === "v4") {
|
|
3664
|
+
return AUTO_V4_THINKING_ENTRY;
|
|
3665
|
+
}
|
|
3666
|
+
return AUTO_THINKING_ENTRY;
|
|
3667
|
+
}
|
|
3668
|
+
getThinkingSelectorLevels() {
|
|
3669
|
+
return [
|
|
3670
|
+
AUTO_THINKING_ENTRY,
|
|
3671
|
+
AUTO_V2_THINKING_ENTRY,
|
|
3672
|
+
AUTO_V3_THINKING_ENTRY,
|
|
3673
|
+
AUTO_V4_THINKING_ENTRY,
|
|
3674
|
+
...this.session.getAvailableThinkingLevels(),
|
|
3675
|
+
];
|
|
3676
|
+
}
|
|
3505
3677
|
async handleModelCommand(searchTerm) {
|
|
3506
3678
|
if (!searchTerm) {
|
|
3507
3679
|
this.showModelSelector();
|
|
@@ -3578,11 +3750,11 @@ export class InteractiveMode {
|
|
|
3578
3750
|
showThinkingSelector() {
|
|
3579
3751
|
this.showSelector((done) => {
|
|
3580
3752
|
const selector = new ThinkingSelectorComponent({
|
|
3581
|
-
thinkingLevel: this.
|
|
3582
|
-
availableThinkingLevels: this.
|
|
3753
|
+
thinkingLevel: this.getThinkingSelectorValue(),
|
|
3754
|
+
availableThinkingLevels: this.getThinkingSelectorLevels(),
|
|
3583
3755
|
}, {
|
|
3584
3756
|
onThinkingLevelChange: (level) => {
|
|
3585
|
-
this.
|
|
3757
|
+
this.applyThinkingSelection(level);
|
|
3586
3758
|
},
|
|
3587
3759
|
onSelectComplete: () => {
|
|
3588
3760
|
done();
|
|
@@ -4656,8 +4828,8 @@ export class InteractiveMode {
|
|
|
4656
4828
|
| \`${dequeue}\` | Restore queued messages |
|
|
4657
4829
|
| \`${pasteImage}\` | Paste image from clipboard |
|
|
4658
4830
|
| \`/\` | Slash commands |
|
|
4659
|
-
| \`!\` |
|
|
4660
|
-
| \`!!\` |
|
|
4831
|
+
| \`!\` | Skills/bash launcher |
|
|
4832
|
+
| \`!!\` | Bash command (excluded from context) |
|
|
4661
4833
|
`;
|
|
4662
4834
|
// Add extension-registered shortcuts
|
|
4663
4835
|
const extensionRunner = this.session.extensionRunner;
|
|
@@ -4843,6 +5015,8 @@ export class InteractiveMode {
|
|
|
4843
5015
|
this.loadingAnimation = undefined;
|
|
4844
5016
|
}
|
|
4845
5017
|
this.clearExtensionTerminalInputListeners();
|
|
5018
|
+
disposeComponent(this.builtInHeader);
|
|
5019
|
+
disposeComponent(this.customHeader);
|
|
4846
5020
|
this.footer.dispose();
|
|
4847
5021
|
this.footerDataProvider.dispose();
|
|
4848
5022
|
if (this.metricsTimer) {
|