open-multi-agent-kit 0.90.0 → 0.90.3
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 +40 -0
- package/README.md +20 -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/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +41 -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 +59 -0
- package/dist/core/bang-skill-invocation.js.map +1 -0
- 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/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/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/settings-manager.d.ts +3 -3
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.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.map +1 -1
- package/dist/modes/interactive/components/control-panel-runtime-status.js +10 -0
- 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 +2 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +63 -14
- 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/skills.md +8 -4
- package/docs/usage.md +4 -3
- 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
|
@@ -14,6 +14,7 @@ import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities,
|
|
|
14
14
|
import { APP_NAME, APP_TITLE, getAgentDir, getAuthPath, getDebugLogPath, getDocsPath, getShareViewerUrl, VERSION, } from "../../config.js";
|
|
15
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;
|
|
@@ -193,7 +203,6 @@ export class InteractiveMode {
|
|
|
193
203
|
// Agent subscription unsubscribe function
|
|
194
204
|
unsubscribe;
|
|
195
205
|
signalCleanupHandlers = [];
|
|
196
|
-
// Track if editor is in bash mode (text starts with !)
|
|
197
206
|
isBashMode = false;
|
|
198
207
|
// Track current bash execution component
|
|
199
208
|
bashComponent = undefined;
|
|
@@ -503,8 +512,8 @@ export class InteractiveMode {
|
|
|
503
512
|
hint("app.thinking.toggle", "to expand thinking"),
|
|
504
513
|
hint("app.editor.external", "for external editor"),
|
|
505
514
|
rawKeyHint("/", "for commands"),
|
|
506
|
-
rawKeyHint("!", "
|
|
507
|
-
rawKeyHint("!!", "
|
|
515
|
+
rawKeyHint("!", "skills/bash"),
|
|
516
|
+
rawKeyHint("!!", "bash(no ctx)"),
|
|
508
517
|
hint("app.message.followUp", "to queue follow-up"),
|
|
509
518
|
hint("app.message.dequeue", "to edit all queued messages"),
|
|
510
519
|
hint("app.clipboard.pasteImage", "to paste image"),
|
|
@@ -514,10 +523,11 @@ export class InteractiveMode {
|
|
|
514
523
|
hint("app.interrupt", "interrupt"),
|
|
515
524
|
rawKeyHint(`${keyText("app.clear")}/${keyText("app.exit")}`, "clear/exit"),
|
|
516
525
|
rawKeyHint("/", "commands"),
|
|
517
|
-
rawKeyHint("!", "bash"),
|
|
526
|
+
rawKeyHint("!", "skills/bash"),
|
|
527
|
+
rawKeyHint("!!", "bash(no ctx)"),
|
|
518
528
|
hint("app.tools.expand", "more"),
|
|
519
529
|
].join(theme.fg("muted", " · "));
|
|
520
|
-
const
|
|
530
|
+
const controlPanelContent = {
|
|
521
531
|
appName: APP_NAME,
|
|
522
532
|
version: this.version,
|
|
523
533
|
compactInstructions,
|
|
@@ -525,9 +535,27 @@ export class InteractiveMode {
|
|
|
525
535
|
compactOnboarding: () => `Press ${keyText("app.tools.expand")} to show full startup help and loaded resources.`,
|
|
526
536
|
onboarding: () => `OMK can explain its own features and look up its docs. Ask it how to use or extend OMK.`,
|
|
527
537
|
statusSnapshot: () => createControlPanelStatusSnapshot(this.session, this.sessionManager, this.footerDataProvider),
|
|
538
|
+
};
|
|
539
|
+
const controlPanel = new ControlPanelComponent(controlPanelContent, {
|
|
540
|
+
requestRender: () => this.ui.requestRender(),
|
|
541
|
+
isTTY: () => process.stdout.isTTY === true,
|
|
542
|
+
isReducedMotion: () => process.env.OMK_REDUCED_MOTION === "1" || process.env.OMK_REDUCE_MOTION === "1",
|
|
543
|
+
isIdleDriftEnabled: () => process.env.OMK_CONTROL_IDLE_DRIFT !== "0",
|
|
544
|
+
isHeaderVisibleHint: () => this.customHeader === undefined,
|
|
545
|
+
getRenderWidth: () => this.ui.terminal.columns,
|
|
528
546
|
});
|
|
529
547
|
controlPanel.setExpanded(this.getStartupExpansionState());
|
|
530
548
|
this.builtInHeader = controlPanel;
|
|
549
|
+
this.ui.showOverlay(new ControlPanelRightPaneComponent(controlPanelContent), {
|
|
550
|
+
anchor: "top-right",
|
|
551
|
+
width: CONTROL_PANEL_SIDEBAR_WIDTH,
|
|
552
|
+
maxHeight: "100%",
|
|
553
|
+
nonCapturing: true,
|
|
554
|
+
visible: (termWidth, termHeight) => this.customHeader === undefined &&
|
|
555
|
+
this.toolOutputExpanded &&
|
|
556
|
+
termWidth >= CONTROL_PANEL_OVERLAY_MIN_WIDTH &&
|
|
557
|
+
termHeight >= 12,
|
|
558
|
+
});
|
|
531
559
|
// Setup UI layout
|
|
532
560
|
this.headerContainer.addChild(new Spacer(1));
|
|
533
561
|
this.headerContainer.addChild(this.builtInHeader);
|
|
@@ -2050,7 +2078,7 @@ export class InteractiveMode {
|
|
|
2050
2078
|
this.defaultEditor.onAction("app.session.resume", () => this.showSessionSelector());
|
|
2051
2079
|
this.defaultEditor.onChange = (text) => {
|
|
2052
2080
|
const wasBashMode = this.isBashMode;
|
|
2053
|
-
this.isBashMode =
|
|
2081
|
+
this.isBashMode = this.isBangBashInput(text);
|
|
2054
2082
|
if (wasBashMode !== this.isBashMode) {
|
|
2055
2083
|
this.updateEditorBorderColor();
|
|
2056
2084
|
}
|
|
@@ -2080,6 +2108,18 @@ export class InteractiveMode {
|
|
|
2080
2108
|
// Silently ignore clipboard errors (may not have permission, etc.)
|
|
2081
2109
|
}
|
|
2082
2110
|
}
|
|
2111
|
+
parseBangInput(text) {
|
|
2112
|
+
return parseBangInvocation(text.trim(), {
|
|
2113
|
+
hasSkill: (name) => this.session.resourceLoader.getSkills().skills.some((skill) => skill.name === name),
|
|
2114
|
+
});
|
|
2115
|
+
}
|
|
2116
|
+
isBangBashInput(text) {
|
|
2117
|
+
const trimmed = text.trimStart();
|
|
2118
|
+
if (!trimmed.startsWith("!")) {
|
|
2119
|
+
return false;
|
|
2120
|
+
}
|
|
2121
|
+
return this.parseBangInput(trimmed).kind === "bash";
|
|
2122
|
+
}
|
|
2083
2123
|
setupEditorSubmitHandler() {
|
|
2084
2124
|
this.defaultEditor.onSubmit = async (text) => {
|
|
2085
2125
|
text = text.trim();
|
|
@@ -2214,18 +2254,25 @@ export class InteractiveMode {
|
|
|
2214
2254
|
await this.shutdown();
|
|
2215
2255
|
return;
|
|
2216
2256
|
}
|
|
2217
|
-
// Handle bash command (! for normal, !! for excluded from context)
|
|
2218
2257
|
if (text.startsWith("!")) {
|
|
2219
|
-
const
|
|
2220
|
-
|
|
2221
|
-
|
|
2258
|
+
const bangInvocation = parseBangInvocation(text, {
|
|
2259
|
+
hasSkill: (name) => this.session.resourceLoader.getSkills().skills.some((skill) => skill.name === name),
|
|
2260
|
+
});
|
|
2261
|
+
if (bangInvocation.kind === "unknownSkill") {
|
|
2262
|
+
this.showWarning(`Unknown skill: ${bangInvocation.skillName}`);
|
|
2263
|
+
this.editor.setText(text);
|
|
2264
|
+
this.isBashMode = false;
|
|
2265
|
+
this.updateEditorBorderColor();
|
|
2266
|
+
return;
|
|
2267
|
+
}
|
|
2268
|
+
if (bangInvocation.kind === "bash") {
|
|
2222
2269
|
if (this.session.isBashRunning) {
|
|
2223
2270
|
this.showWarning("A bash command is already running. Press Esc to cancel it first.");
|
|
2224
2271
|
this.editor.setText(text);
|
|
2225
2272
|
return;
|
|
2226
2273
|
}
|
|
2227
2274
|
this.editor.addToHistory?.(text);
|
|
2228
|
-
await this.handleBashCommand(command,
|
|
2275
|
+
await this.handleBashCommand(bangInvocation.command, !bangInvocation.includeContext);
|
|
2229
2276
|
this.isBashMode = false;
|
|
2230
2277
|
this.updateEditorBorderColor();
|
|
2231
2278
|
return;
|
|
@@ -4656,8 +4703,8 @@ export class InteractiveMode {
|
|
|
4656
4703
|
| \`${dequeue}\` | Restore queued messages |
|
|
4657
4704
|
| \`${pasteImage}\` | Paste image from clipboard |
|
|
4658
4705
|
| \`/\` | Slash commands |
|
|
4659
|
-
| \`!\` |
|
|
4660
|
-
| \`!!\` |
|
|
4706
|
+
| \`!\` | Skills/bash launcher |
|
|
4707
|
+
| \`!!\` | Bash command (excluded from context) |
|
|
4661
4708
|
`;
|
|
4662
4709
|
// Add extension-registered shortcuts
|
|
4663
4710
|
const extensionRunner = this.session.extensionRunner;
|
|
@@ -4843,6 +4890,8 @@ export class InteractiveMode {
|
|
|
4843
4890
|
this.loadingAnimation = undefined;
|
|
4844
4891
|
}
|
|
4845
4892
|
this.clearExtensionTerminalInputListeners();
|
|
4893
|
+
disposeComponent(this.builtInHeader);
|
|
4894
|
+
disposeComponent(this.customHeader);
|
|
4846
4895
|
this.footer.dispose();
|
|
4847
4896
|
this.footerDataProvider.dispose();
|
|
4848
4897
|
if (this.metricsTimer) {
|