open-multi-agent-kit 0.91.0 → 0.93.0
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 +32 -1
- package/README.md +2 -2
- package/dist/core/agent-session.d.ts +29 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +89 -21
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/command-safety.d.ts.map +1 -1
- package/dist/core/command-safety.js +0 -50
- package/dist/core/command-safety.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +5 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +5 -7
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +12 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +28 -15
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/transaction.d.ts.map +1 -1
- package/dist/core/compaction/transaction.js +7 -3
- package/dist/core/compaction/transaction.js.map +1 -1
- package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-candidates.js +21 -11
- package/dist/core/context-budget-headroom-candidates.js.map +1 -1
- package/dist/core/context-budget-system-prompt-items.d.ts +1 -0
- package/dist/core/context-budget-system-prompt-items.d.ts.map +1 -1
- package/dist/core/context-budget-system-prompt-items.js +7 -8
- package/dist/core/context-budget-system-prompt-items.js.map +1 -1
- package/dist/core/extensions/builtin/command-safety-gate.d.ts +8 -0
- package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -1
- package/dist/core/extensions/builtin/command-safety-gate.js +23 -0
- package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +4 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +2 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +5 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +5 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/loadouts.d.ts.map +1 -1
- package/dist/core/loadouts.js +27 -48
- package/dist/core/loadouts.js.map +1 -1
- package/dist/core/model-resolver.d.ts +41 -3
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +17 -9
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-resilience.d.ts.map +1 -1
- package/dist/core/provider-resilience.js +3 -1
- package/dist/core/provider-resilience.js.map +1 -1
- package/dist/core/reasoning-router-v4-weights.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4-weights.js +9 -3
- package/dist/core/reasoning-router-v4-weights.js.map +1 -1
- package/dist/core/reasoning-router-v4.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4.js +94 -24
- package/dist/core/reasoning-router-v4.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +11 -5
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/session-file-compaction.d.ts.map +1 -1
- package/dist/core/session-file-compaction.js +39 -5
- package/dist/core/session-file-compaction.js.map +1 -1
- package/dist/core/session-termination.d.ts.map +1 -1
- package/dist/core/session-termination.js +1 -1
- package/dist/core/session-termination.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +8 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +36 -31
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +38 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +112 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-box.d.ts +27 -0
- package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-box.js +60 -8
- package/dist/modes/interactive/components/control-panel-box.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-layout.js +100 -45
- package/dist/modes/interactive/components/control-panel-layout.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +9 -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 +10 -8
- package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-sparkles.d.ts +5 -0
- package/dist/modes/interactive/components/control-panel-sparkles.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-sparkles.js +14 -9
- package/dist/modes/interactive/components/control-panel-sparkles.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +10 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +3 -3
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/status-sidebar.d.ts +49 -0
- package/dist/modes/interactive/components/status-sidebar.d.ts.map +1 -0
- package/dist/modes/interactive/components/status-sidebar.js +253 -0
- package/dist/modes/interactive/components/status-sidebar.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +9 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +94 -20
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/omk-neon-control.json +13 -13
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +9 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +1 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +19 -8
- package/dist/utils/clipboard.js.map +1 -1
- package/docs/adaptorch-preview-spec.md +174 -0
- package/docs/adaptorch-preview.md +1 -1
- package/docs/compaction.md +20 -13
- package/docs/correctness-wall.md +13 -5
- package/docs/custom-provider.md +8 -8
- package/docs/development.md +2 -2
- package/docs/docs.json +4 -0
- package/docs/environment-variables.md +90 -0
- package/docs/extensions.md +8 -8
- package/docs/index.md +1 -0
- package/docs/json.md +4 -4
- package/docs/providers.md +1 -1
- package/docs/rpc.md +5 -2
- package/docs/session-format.md +5 -5
- package/docs/settings.md +1 -0
- package/docs/skills.md +2 -0
- package/docs/themes.md +2 -2
- package/docs/tui.md +4 -4
- package/docs/usage.md +4 -0
- 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/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +35 -10
- package/examples/extensions/subagent/adaptive-agent-runtime.test.ts +234 -0
- package/examples/extensions/subagent/adaptive-agent-runtime.ts +240 -0
- package/examples/extensions/subagent/adaptive-result.ts +112 -0
- package/examples/extensions/subagent/agents.test.ts +86 -0
- package/examples/extensions/subagent/agents.ts +18 -4
- package/examples/extensions/subagent/capabilities.ts +15 -1
- package/examples/extensions/subagent/checkpoint-runtime.test.ts +125 -0
- package/examples/extensions/subagent/checkpoint-runtime.ts +198 -0
- package/examples/extensions/subagent/deadline-budget.test.ts +135 -0
- package/examples/extensions/subagent/deadline-budget.ts +242 -0
- package/examples/extensions/subagent/deadline-profile-store.test.ts +72 -0
- package/examples/extensions/subagent/deadline-profile-store.ts +172 -0
- package/examples/extensions/subagent/domain-profiles.ts +272 -0
- package/examples/extensions/subagent/fixtures/fake-omk-json.mjs +13 -0
- package/examples/extensions/subagent/fixtures/hanging-process-tree.mjs +40 -0
- package/examples/extensions/subagent/index.ts +253 -137
- package/examples/extensions/subagent/managed-process.test.ts +178 -0
- package/examples/extensions/subagent/managed-process.ts +236 -0
- package/examples/extensions/subagent/subagent-extension-smoke.test.ts +112 -0
- package/examples/extensions/subagent/subagent-runtime-types.ts +76 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +21 -21
- package/package.json +10 -7
|
@@ -62,6 +62,7 @@ import { ScopedModelsSelectorComponent } from "./components/scoped-models-select
|
|
|
62
62
|
import { SessionSelectorComponent } from "./components/session-selector.js";
|
|
63
63
|
import { SettingsSelectorComponent, ThinkingSelectorComponent } from "./components/settings-selector.js";
|
|
64
64
|
import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js";
|
|
65
|
+
import { STATUS_SIDEBAR_GUTTER_GAP, STATUS_SIDEBAR_MIN_WIDTH, StatusSidebarComponent, statusSidebarWidth, } from "./components/status-sidebar.js";
|
|
65
66
|
import { ToolExecutionComponent } from "./components/tool-execution.js";
|
|
66
67
|
import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
67
68
|
import { UserMessageComponent } from "./components/user-message.js";
|
|
@@ -267,6 +268,21 @@ export class InteractiveMode {
|
|
|
267
268
|
widgetContainerBelow;
|
|
268
269
|
// Custom footer from extension (undefined = use built-in footer)
|
|
269
270
|
customFooter = undefined;
|
|
271
|
+
// Pinned status sidebar (Ctrl+Q): bottom bar data as a fixed right rail
|
|
272
|
+
statusSidebar;
|
|
273
|
+
statusSidebarPinned = false;
|
|
274
|
+
// Footer slot: always mounted. It hides the bottom bar only while the pinned
|
|
275
|
+
// rail is actually visible, so narrow terminals never lose the status line.
|
|
276
|
+
footerSlot = {
|
|
277
|
+
render: (width) => {
|
|
278
|
+
if (this.isStatusSidebarVisible(this.ui.terminal.columns, this.ui.terminal.rows))
|
|
279
|
+
return [];
|
|
280
|
+
return (this.customFooter ?? this.footer).render(width);
|
|
281
|
+
},
|
|
282
|
+
invalidate: () => {
|
|
283
|
+
(this.customFooter ?? this.footer).invalidate?.();
|
|
284
|
+
},
|
|
285
|
+
};
|
|
270
286
|
// Header container that holds the built-in or custom header
|
|
271
287
|
headerContainer;
|
|
272
288
|
// Built-in header (logo + keybinding hints + changelog)
|
|
@@ -588,7 +604,7 @@ export class InteractiveMode {
|
|
|
588
604
|
isReducedMotion: () => process.env.OMK_REDUCED_MOTION === "1" || process.env.OMK_REDUCE_MOTION === "1",
|
|
589
605
|
isIdleDriftEnabled: () => process.env.OMK_CONTROL_IDLE_DRIFT !== "0",
|
|
590
606
|
isHeaderVisibleHint: () => this.customHeader === undefined,
|
|
591
|
-
getRenderWidth: () => this.ui.
|
|
607
|
+
getRenderWidth: () => this.ui.contentWidth,
|
|
592
608
|
});
|
|
593
609
|
controlPanel.setExpanded(this.getStartupExpansionState());
|
|
594
610
|
this.builtInHeader = controlPanel;
|
|
@@ -599,6 +615,7 @@ export class InteractiveMode {
|
|
|
599
615
|
nonCapturing: true,
|
|
600
616
|
visible: (termWidth, termHeight) => this.customHeader === undefined &&
|
|
601
617
|
this.toolOutputExpanded &&
|
|
618
|
+
!this.statusSidebarPinned &&
|
|
602
619
|
termWidth >= CONTROL_PANEL_OVERLAY_MIN_WIDTH &&
|
|
603
620
|
termHeight >= 12,
|
|
604
621
|
});
|
|
@@ -619,7 +636,27 @@ export class InteractiveMode {
|
|
|
619
636
|
this.ui.addChild(this.widgetContainerAbove);
|
|
620
637
|
this.ui.addChild(this.editorContainer);
|
|
621
638
|
this.ui.addChild(this.widgetContainerBelow);
|
|
622
|
-
|
|
639
|
+
// Pinned status sidebar: renders footer data as a fixed right rail (Ctrl+Q).
|
|
640
|
+
// Pinned by default via the pinStatusSidebar setting / OMK_PIN_STATUS_SIDEBAR=1.
|
|
641
|
+
// The footer slot below stays mounted and yields to the rail only while the
|
|
642
|
+
// rail is actually visible, so the same data is never rendered twice.
|
|
643
|
+
this.statusSidebarPinned = this.settingsManager.getPinStatusSidebar();
|
|
644
|
+
this.ui.addChild(this.footerSlot);
|
|
645
|
+
this.statusSidebar = new StatusSidebarComponent(() => this.session, this.footerDataProvider, () => this.session.autoCompactionEnabled, () => this.ui.terminal.rows);
|
|
646
|
+
this.ui.showOverlay(this.statusSidebar, {
|
|
647
|
+
anchor: "top-right",
|
|
648
|
+
// Responsive: ~26% of the terminal, clamped — grows on fullscreen.
|
|
649
|
+
width: (termWidth) => statusSidebarWidth(termWidth),
|
|
650
|
+
maxHeight: "100%",
|
|
651
|
+
nonCapturing: true,
|
|
652
|
+
visible: (termWidth, termHeight) => this.isStatusSidebarVisible(termWidth, termHeight),
|
|
653
|
+
});
|
|
654
|
+
// Reserve real layout space for the rail: chat, editor, and widgets render
|
|
655
|
+
// at (terminal - rail) width, so the prompt is never covered by the sidebar.
|
|
656
|
+
// Must stay in lockstep with the overlay width above.
|
|
657
|
+
this.ui.setRightGutter((termWidth, termHeight) => this.isStatusSidebarVisible(termWidth, termHeight)
|
|
658
|
+
? statusSidebarWidth(termWidth) + STATUS_SIDEBAR_GUTTER_GAP
|
|
659
|
+
: 0);
|
|
623
660
|
this.ui.setFocus(this.editor);
|
|
624
661
|
this.setupKeyHandlers();
|
|
625
662
|
this.setupEditorSubmitHandler();
|
|
@@ -1450,6 +1487,7 @@ export class InteractiveMode {
|
|
|
1450
1487
|
sessionManager: this.sessionManager,
|
|
1451
1488
|
modelRegistry: this.session.modelRegistry,
|
|
1452
1489
|
model: this.session.model,
|
|
1490
|
+
thinkingLevel: this.session.thinkingLevel,
|
|
1453
1491
|
isIdle: () => !this.session.isStreaming,
|
|
1454
1492
|
signal: this.session.agent.signal,
|
|
1455
1493
|
abort: () => {
|
|
@@ -1598,7 +1636,9 @@ export class InteractiveMode {
|
|
|
1598
1636
|
if (this.extensionEditor) {
|
|
1599
1637
|
this.hideExtensionEditor();
|
|
1600
1638
|
}
|
|
1601
|
-
|
|
1639
|
+
// Clear transient extension overlays without evicting pinned chrome:
|
|
1640
|
+
// a blind ui.hideOverlay() pops the status rail on session resume/new/fork/reload.
|
|
1641
|
+
this.ui.hideOverlaysExcept(this.statusSidebar);
|
|
1602
1642
|
this.clearExtensionTerminalInputListeners();
|
|
1603
1643
|
this.setExtensionFooter(undefined);
|
|
1604
1644
|
this.setExtensionHeader(undefined);
|
|
@@ -1645,6 +1685,19 @@ export class InteractiveMode {
|
|
|
1645
1685
|
container.addChild(component);
|
|
1646
1686
|
}
|
|
1647
1687
|
}
|
|
1688
|
+
/** The pinned rail is only shown (and its gutter reserved) when the terminal is large enough. */
|
|
1689
|
+
isStatusSidebarVisible(termWidth, termHeight) {
|
|
1690
|
+
return this.statusSidebarPinned && termWidth >= STATUS_SIDEBAR_MIN_WIDTH && termHeight >= 16;
|
|
1691
|
+
}
|
|
1692
|
+
/**
|
|
1693
|
+
* Toggle the pinned status sidebar: bottom bar data moves to a fixed right rail.
|
|
1694
|
+
*/
|
|
1695
|
+
toggleStatusSidebar() {
|
|
1696
|
+
this.statusSidebarPinned = !this.statusSidebarPinned;
|
|
1697
|
+
// The footer slot and the right gutter both key off isStatusSidebarVisible,
|
|
1698
|
+
// so flipping the flag is enough — no child add/remove bookkeeping.
|
|
1699
|
+
this.ui.requestRender();
|
|
1700
|
+
}
|
|
1648
1701
|
/**
|
|
1649
1702
|
* Set a custom footer component, or restore the built-in footer.
|
|
1650
1703
|
*/
|
|
@@ -1653,23 +1706,9 @@ export class InteractiveMode {
|
|
|
1653
1706
|
if (this.customFooter?.dispose) {
|
|
1654
1707
|
this.customFooter.dispose();
|
|
1655
1708
|
}
|
|
1656
|
-
//
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
}
|
|
1660
|
-
else {
|
|
1661
|
-
this.ui.removeChild(this.footer);
|
|
1662
|
-
}
|
|
1663
|
-
if (factory) {
|
|
1664
|
-
// Create and add custom footer, passing the data provider
|
|
1665
|
-
this.customFooter = factory(this.ui, theme, this.footerDataProvider);
|
|
1666
|
-
this.ui.addChild(this.customFooter);
|
|
1667
|
-
}
|
|
1668
|
-
else {
|
|
1669
|
-
// Restore built-in footer
|
|
1670
|
-
this.customFooter = undefined;
|
|
1671
|
-
this.ui.addChild(this.footer);
|
|
1672
|
-
}
|
|
1709
|
+
// The footer slot stays mounted and renders whichever footer is active,
|
|
1710
|
+
// so swapping footers requires no child add/remove bookkeeping.
|
|
1711
|
+
this.customFooter = factory ? factory(this.ui, theme, this.footerDataProvider) : undefined;
|
|
1673
1712
|
this.ui.requestRender();
|
|
1674
1713
|
}
|
|
1675
1714
|
/**
|
|
@@ -2117,6 +2156,7 @@ export class InteractiveMode {
|
|
|
2117
2156
|
this.ui.onDebug = () => this.handleDebugCommand();
|
|
2118
2157
|
this.defaultEditor.onAction("app.model.select", () => this.showModelSelector());
|
|
2119
2158
|
this.defaultEditor.onAction("app.tools.expand", () => this.toggleToolOutputExpansion());
|
|
2159
|
+
this.defaultEditor.onAction("app.sidebar.toggle", () => this.toggleStatusSidebar());
|
|
2120
2160
|
this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
|
|
2121
2161
|
this.defaultEditor.onAction("app.editor.external", () => this.openExternalEditor());
|
|
2122
2162
|
this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
|
|
@@ -2651,6 +2691,40 @@ export class InteractiveMode {
|
|
|
2651
2691
|
this.ui.requestRender();
|
|
2652
2692
|
break;
|
|
2653
2693
|
}
|
|
2694
|
+
case "summarization_retry_scheduled": {
|
|
2695
|
+
this.showError(event.errorMessage);
|
|
2696
|
+
this.statusContainer.clear();
|
|
2697
|
+
this.retryCountdown?.dispose();
|
|
2698
|
+
const retryMessage = (seconds) => `Retrying summarization (${event.attempt}/${event.maxAttempts}) in ${seconds}s...`;
|
|
2699
|
+
this.retryLoader = new Loader(this.ui, (spinner) => theme.fg("warning", spinner), (text) => theme.fg("muted", text), retryMessage(Math.ceil(event.delayMs / 1000)));
|
|
2700
|
+
this.retryCountdown = new CountdownTimer(event.delayMs, this.ui, (seconds) => {
|
|
2701
|
+
this.retryLoader?.setMessage(retryMessage(seconds));
|
|
2702
|
+
}, () => {
|
|
2703
|
+
this.retryCountdown = undefined;
|
|
2704
|
+
});
|
|
2705
|
+
this.statusContainer.addChild(this.retryLoader);
|
|
2706
|
+
this.ui.requestRender();
|
|
2707
|
+
break;
|
|
2708
|
+
}
|
|
2709
|
+
case "summarization_retry_attempt_start":
|
|
2710
|
+
case "summarization_retry_finished": {
|
|
2711
|
+
// Attempt underway or retry loop settled: clear the retry indicator.
|
|
2712
|
+
// The compaction/branch-summary flow owns its own progress display.
|
|
2713
|
+
if (this.retryCountdown) {
|
|
2714
|
+
this.retryCountdown.dispose();
|
|
2715
|
+
this.retryCountdown = undefined;
|
|
2716
|
+
}
|
|
2717
|
+
if (this.retryLoader) {
|
|
2718
|
+
this.retryLoader.stop();
|
|
2719
|
+
this.retryLoader = undefined;
|
|
2720
|
+
this.statusContainer.clear();
|
|
2721
|
+
}
|
|
2722
|
+
this.ui.requestRender();
|
|
2723
|
+
break;
|
|
2724
|
+
}
|
|
2725
|
+
case "bash_execution_update":
|
|
2726
|
+
// The bash execution callback handles TUI output rendering.
|
|
2727
|
+
break;
|
|
2654
2728
|
}
|
|
2655
2729
|
}
|
|
2656
2730
|
/** Extract text content from a user message */
|